美文网首页Android开发经验谈Android技术知识Android开发
面试者:什么才是合适的候选者?程序员一定得做到的几点!

面试者:什么才是合适的候选者?程序员一定得做到的几点!

作者: jett老师 | 来源:发表于2020-11-03 20:55 被阅读0次

    前言

    应大家的邀请,写一篇关于Android面试相关的博客,需要说明的是本文只针对Android应用开发,不针对rom开发以及逆向工程。我想面试对于程序员来说是很重要的一件事件,面试结果的好坏直接决定了能否进入某个公司以及以什么级别和待遇进入某个公司。我参加面试的经验并不多,但是以面试官的身份面试别人倒是有很多次,所以我可以结合这些经验来介绍下如何更好地把握一个面试。


    什么是合适的候选者

    在介绍如何面试之前,这里先从公司的角度来分析:”到底什么样的候选者是公司所需要的技术人才?“就我在百度的一些面试官经验来说,一个具有如下特征的Android程序员是我们所需要的:
    1. 具有本科及以上学历(名校更好)
    2. 具有2年及以上的工作经验(名企更好)

    1. 技术扎实,有技术追求和工作激情
    2. 良好的沟通和协作

    在上面的四条中,其中第3条是最为重要的,即技术,在百度技术是大家所推崇的,因此技术是决定能否通过面试的最重要最直接的原因。一般来说,越是大公司,其对技术的要求就越高,尽管部分岗位并不需要那么好的技术,但是为了对候选者做出区分,其面试过程仍然会面试一些稍微深入的话题,相信大家都有所体会。

    除了技术以外,良好的沟通和协作能力也是比较重要的。也许很多人觉得这个比较抽象,心里会想:”你怎么知道我有没有良好的沟通和协作能力呢“?其实这个问题并不难,面试过程就是一次沟通过程,如果不能和面试官很好地沟通,这就说明候选者的沟通有问题。如何很好地和面试官沟通呢?给如下几点建议:

    • 礼貌和尊重
    • 听懂面试官的问题并直接回答。有些候选者听不懂面试官的问题,还有些面试者总是不直接回答问题,或者也许是不会的原因,就开始转弯抹角甚至转移话题,我认为这是很不好的,人要用于承担,即使这个问题不会,那也可以大声地说出来”不好意思,这个我不太会“,甚至还可以虚心地请教下面试官,面试不仅仅是一次找工作的过程,也是一次自我学习和提高的过程。大家要知道的是,不是必须全部答对问题才能通过面试,只要大部分问题能回答出来并且候选者的态度良好,那么这样的候选者仍然能通过面试,当然态度不好的候选者,即使技术很好也很大可能通不过面试。
    • 谦虚谨慎、态度友好。有些候选者在面试的时候不谨慎,给人一种随意的感觉,比如坐姿不端正,翘着二郎腿等等,换句话说就是别太随意,作为面试官公司都要求不能太随意,何况候选者呢!太随意的举动会给对方一种不被尊重的感觉。关于谦虚,这个就不必多说了,任何时候都要谦虚,面试过程中骄傲自大(俗称”得瑟“),是很容易被毙的。态度友好,就是要让面试官感受到你的诚意,这样大家沟通起来才比较舒服和自在。

    下面对学历和工作经验做一些说明,学历并不是一个硬性要求,即使候选者学校不怎么好也是有可能通过面试的,这就要求候选者技术非常扎实。而工作经验,之所以是2年以上,这是因为社会招聘的对象一般都是有一定工作经验的,而1年工作经验略短了点,拿百度来说,社招的最低级别一般为T4,差不多刚好就是2年经验左右。

    这里做下总结,理想的候选者应该是这样的
    1. 扎实的技术功底,有技术追求(必须)
    2. 态度、沟通和为人都很好(必须)
    3. 2年左右工作经验(基本必须)
    4. 名校、名企、高学历(非必须,加分项)
    基本来说,满足1和2就能通过面试,3和4都是次要条件,但是一般来说不满足3就很难满足1,不要说特例,木有参考意义。
    由此可见,技术是面试结果的决定因素。那么到底技术掌握到什么程度才能比较轻松地通过面试呢?说了那么多,好像和Android没有一点关系,下面就开始以Android为例来分析下面试过程所需的技术。

    二、技能储备

    思维导图

    (一)Java

    一、HashMap和Hashtable区别?

    这个一定要去看源码!看源码!看源码!实在看不下去的可以上网看别人的分析。简单总结有几点:

    1.HashMap支持null Key和null Value;Hashtable不允许。这是因为HashMap对null进行了特殊处理,将null的hashCode值定为了0,从而将其存放在哈希表的第0个bucket。

    2.HashMap是非线程安全,HashMap实现线程安全方法为Map map = Collections.synchronziedMap(new HashMap());Hashtable是线程安全

    3.HashMap默认长度是16,扩容是原先的2倍;Hashtable默认长度是11,扩容是原先的2n+1

    4.HashMap继承AbstractMap;Hashtable继承了Dictionary

    扩展,HashMap 对比 ConcurrentHashMap ,HashMap 对比 SparseArray,LinkedArray对比ArrayList,ArrayList对比Vector

    二、Java垃圾回收机制

    需要理解JVM,内存划分——方法区、内存堆、虚拟机栈(线程私有)、本地方法栈(线程私有)、程序计数器(线程私有), 理解回收算法——标记清除算法、可达性分析算法、标记-整理算法、复制算法、分代算法,优缺点都理解下。

    三、类加载机制

    这个可以结合 热修复 深入理解下。

    四、线程和线程池,并发,锁等一系列问题

    这个可以扩展下 如何自己实现一个线程池?

    五、HandlerThread、IntentService理解

    六、弱引用、软引用区别

    七、int、Integer有什么区别

    主要考值传递和引用传递问题

    八、手写生产者/消费者 模式

    (二)Android

    一、android启动模式
    二、View的绘制流程
    三、事件分发机制
    四、消息分发机制
    五、AsyncTask源码分析
    六、如何保证Service不被杀死?如何保证进程不被杀死?(这两个问题我面试过程有3家公司问到)
    七、Binder机制,进程通信
    八、动态权限适配问题、换肤实现原理
    九、SharedPreference原理,能否跨进程?如何实现?

    (三)性能优化问题

    一、UI优化
    二、内存优化
    三、响应速度优化
    四、其他性能优化
    五、数据结构
    六、算法(算法主要考刷题吧,去LeetCode和牛客网刷下)
    七、源码理解
    八、设计模式

    尾声

    如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。

    对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

    这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

    Android进阶学习资料库

    一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!

    如果需要PDF版本可以在群文件夹里,自行领取!

    相关文章

      网友评论

        本文标题:面试者:什么才是合适的候选者?程序员一定得做到的几点!

        本文链接:https://www.haomeiwen.com/subject/nxkevktx.html