招聘的面试之道

  1. 简历看人
  2. 介绍专长
  3. 基础检验
  4. 技术深度检验
  5. 符合企业文化
  6. 行为面试
  7. 示例
    1. Android
      1. 基础
      2. 深度

简历看人

  • 是否有错别字(细心、责任心)
  • 是否正确、逻辑清晰(出品质量、思维能力)
  • 是否特出重点(归纳能力)
  • 是否有技术相关社会化活动,像开源、解答、博客(热情程度)

介绍专长

  • 是否有激情
  • 沟通能力是否过关
  • 技术能力是否足够
  • 是否符合团队文化

基础检验

基础点原理题3~4题,要能考验技术是否扎实

技术深度检验

  • 你用过为止,觉得最牛逼或者最佩服的框架是哪个?介绍一下这个框架的整体工作原理流程?

符合企业文化

  • 为人简单直接
  • 办事专一不浮躁
  • 能信任身边的团队伙伴,不孤军作战自以为是,乐于分享帮助他人
  • 做最好,不做只好

企业文化到底是什么呢?

行为面试

在你哪个项目,遇到过最大困难或挑战,是什么和如何解决的(是否有独立解决问题的能力)

代入工作环境,设立一个虚拟场景考验(是否有良好编码习惯、异常处理规范、代码逻辑缜密、开发效率)

示例

Android

基础

  • 创建数组对象时预留内存空间的目的是什么?缺点是什么?

    • 若空间不足时添加新元素,则需要先重新申请一块足够大的连续的内存空间,并将所有元素移到新空间上,再添加新元素(因为数组中元素地址要求连续,所以对跳跃查找十分友好)。
    • 可能会浪费一部分的内存空间。
  • 对集合的读取、插入、删除,在数组与链表两种数据结构中分别如何选用

    • 数组:读取
    • 链表:插入、删除
  • 使用StringBuffer、StringBuilder、String 之间去编辑字符串的区别

    • java.lang.StringBuffer是线程安全的可变字符序列。
    • StringBuilder线程不安全不同步,但速度更快,一般情况下选用(超16字符时使用)
    • String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象(消耗系统性能),然后将指针指向新的 String 对象。
  • try catch 为什么被设计出来?使用有哪些注意点?

    • 需要返回错误的类型、信息,不与正常代码混淆。
    • 不要在循环中使用,应移出循环外捕获异常
    • 不应随便捕获,来避免不可预知的错误发生
  • final、protected、private修饰方法的区别

    • final是任何人都不能修改方法,包括子类的重写,但可以使用;
    • protected是只有自己和子类可以使用,子类可重写,而外部其它类不知道该方法的存在;
    • private是只有自己可以使用,子类以及外部其它类都不知道该方法的存在。
  • assets目录与res目录的区别

    • res:会被编译器转成R.java去编译,每个资源会有ID标识,获取资源方式:R.xx.yy(raw没被压缩存在于apk,R中的内容是其映射;drawable是失真压缩的二进制)
    • assets:不会被编译,存在于apk,通过AssetManager访问,,可访问子目录,获取资源方式:文件路径+文件名
  • ListView与RecyclerView的区别

深度

  • 阐述Thread+Handler+MessageQueue相互间的工作流程。

    • 关系:Thread拥有Looper,Looper拥有Handler和MessageQueue,但Looper拥有Handler的前提是需要一个绑定过程,就是在实例化Handler时传指定Looper到实例方法中,不传的话默认是获取当前线程的Looper进行绑定。所以在主线程实例化Handler且不指定Looper的话,其handleMessage就会在主线程执行。
    • 消息队列:线程默认都绑定着一个MessageQueue,handleMessage是依靠Looper轮询消息队列后,将消息分发下来所触发的。当队列中没消息时,线程会自动阻塞,除非我们手动销毁线程,否则等到有新消息后就继续轮询。
    • 子线程:子线程默认是没有Looper的,即是不会自动开始消息轮询和分发,所以如果要在子线程实例化Handler的话,必须先给子线程创建配置Looper并将其启动。
    • 通信:其它线程利用Handler向往当前目标线程发消息时,当前目标线程会将Message塞入子线程的MessageQueue去,待轮询分发消息后,触发执行handleMessage。
  • 为什么要为线程Thread设计一个Runnable接口,去作为线程实例化时的入参?

    • 避免Thread单继承的局限和多Thread之间可以共享Runnable中的资源
  • 除了上述的方式实现多线程,还有其它哪些方式?如何实现?

    • AsyncTask
    • 重写几个关键函数:
      • onPreExecute:执行异步线程前的回调,处理UI的初始化,是在主线程中回调
      • doInBackground:执行异步线程任务,其中可调用publishProgress,从而回调onProgressUpdate,来显示进度
      • onProgressUpdate:进度回调,在主线程中回调的
      • onPostExecute:返回异步线程任务的执行结果,在主线程中回调
      • onCancelled:将异步线程任务状态置为取消后,需自行在doInBackground判断任务的状态进行实质性的阻止中断,即回调此函数

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 mingfungliu@gmail.com

文章标题:招聘的面试之道

文章字数:1.4k

本文作者:Mingfung

发布时间:2019-10-17, 13:54:00

最后更新:2020-10-28, 14:23:26

原始链接:http://blog.ifungfay.com/uncategorized/面试之道/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

宝贝回家