今年Android开发的总体招聘趋势能够归纳为几句话:赛道中的公司在蒙眼狂奔,成熟业务借机补强,更多公司在观望。
这里面赛道的公司指的是在疫情中受益或者在疫情以前就已经在狂奔的业务,好比在线办公、在线教育、在线生活服务、直播带货等,市场上不少HC来自这些赛道里面的公司,技术好,能干活最受青睐。成熟的业务借机补强:不少成熟的业务在招聘高级开发解决性能和提效的问题,虽然手上握有HC,可是在发offer时比较谨慎,优中择优不断地比较。更多公司在观望:不少公司冻结HC,甚至出现“软裁人”的状况(笔者公司属于其中之一)。git
基础知识包括几个部分:Java(JDK、JVM)、Android、数据结构和算法、计算机基础、设计模式。程序员
Java部分:不太推荐这部分只看博客,由于不少博客并不系统也不完整,推荐完整看一遍《深刻理解Java虚拟机》这本书,基本上这里面涵盖了JVM相关的全部面试问题,包括内存分区、GC机制、内存模型、锁、字节码、类加载等。JDK的部分会杂一些,基本上能够归类为几种:容器(必问HashMap、CurrentHashMap、ArrayList等)、线程池(必问)、注解、同步工具、动态代理、notify/wait/sleep。这部分能够从一些JDK相关的文章中去整理一遍。面试
Android部分:建议看《Android开发艺术探索》,最重要的一点是要跟着源码读这本书,书中篇幅所限,不少源码只有部分,只看书的话并不能理解不少机制是怎么样,只有读源码才能彻底理解吃透,可是读源码的时候最好是找到线索便可,切忌陷入到具体的逻辑里面不能自拔。这部分必问的是Handler机制、触摸事件传递、四大组件启动流程、View绘制流程、Binder机制、生命周期。须要完全读懂源码,这样才能解答不少灵活变通的问题。经典的问题好比:算法
这些问题可能在不一样的面试官会有不一样的变形,只有亲自读懂了源码才能够应付这些问题,切忌从一些博客上看到只言片语就觉得准备万全了,博客只能做为参考。最重要是源码,源码,源码!编程
数据结构与算法:这部分在客户端开发中考察的比例会小一些,不过也有不少公司很是重视手写代码。常常碰到的问题有二叉树遍历、有序二维数组查找,排序等,基本上以《剑指offer》或者《编程之美》为准就能够了。设计模式
计算机基础:这部分涵盖的比较杂,好比计算机网络(7层网络模型、Http和Https)、git工做流和命令、计算机缓存策略、UML、信息安全等等。数组
设计模式:在本身的项目中必定要多总结和使用设计模式,面试官问你使用过什么设计模式的时候,若是能回答出好比状态模式、责任链、装饰等等,确定会加分很多。若是只是回答单例和建造者模式,那就会逊色多了。这部分推荐看《研磨设计模式》。缓存
开源项目:这个也是必问的环节之一,建议从本身项目使用的开源项目入手,跟着代码,画一遍流程图和架构图,仔细体会这里面设计的优势和缺点。好比OkHttp、LeakCanery等等,这些均可以。开源项目根据面试官的我的经验不一样,问的深刻程度也不同,这时候就须要你我的的一些引导技巧,好比面试官可能不是很熟悉这个框架,这时候你能主动表达出这里面设计的一些细节,也能给面试官留下不错的印象。切忌在简历上写只是用过可是没看过源码的框架。
一些不错的博客推荐:
基础知识梳理:泽毛
开源框架鉴赏系列:苏策
系统源码介绍:袁辉辉大佬
一些面经面试题整理:www.jianshu.com/p/20754b1ad…安全
小厂的项目每每追求业务快速迭代上线,相对比较能容忍一些技术难点,可是这些技术难点每每是能体现一我的技术能力的。因此你若是在小厂,就不能过度陷入到业务中,必须跳出来找一些有亮点的技术点,作好作精。这些技术点才是一个程序员安身立命的本钱,不然公司业务陷入困境了,你的价值也就不复存在了。在如何准备面试中项目这部分,笔者有几点心得:性能优化
分红三部分:为何要作这个点,考虑了什么因素而且是如何作的,取得了什么效果(好比启动速度从1000ms降到200ms,这种具体的数据)
能够把几个小点串起来,这样能够显得更系统和全面一些,好比代码优化和性能优化结合在一块儿讲。
小厂的一些优化点每每只能作性价比最高的一部分,这时候还能够讲一下业界还有哪些更优的方案
最好再准备一下“若是你没有离职项目中还有有什么不足和能够优化的地方?”(笔者面试中碰到过几回这样的问题)
小厂跳大厂,技术基础能够准备得很充分,可是项目绝对是一个弱项。大厂一个App可能就有几十上百人在作,小厂不少所谓的优化在大厂的面试官眼中可能都是他们很早就作过了,这时候项目自己作了哪些东西并非过重要,须要着重体现你解决问题的思路以及你是一个有追求的程序员,至少你要能作到业界的平均水平,这样才能有机会经过面试。对于不知道如何准备项目的同窗能够参考一下个人另一篇文章懂球帝Android客户端WebView优化之路,这是笔者在面试过程当中讲的其中一个项目经历,这里面就包含了一些架构设计和性能优化。
开放式的设计问题须要融会贯通数据结构、设计模式和架构设计等方面的知识,这部分没有固定的答案,笔者总结了一下这些问题能够套用的几个解决问题的思路:
比较常见的开放式设计思路问题有如何设计一个网络图片加载框架、如何设计一个文件下载系统、如何设计一个IM组件等等。这些问题都是很是大的问题,好比图片加载框架就能够套用分层法去化解,参考fresco的设计,划分红View-Controler-DataSource这样的层次。大量文件的下载系统能够套用线程池的模型去设计,这里就再也不展开讲了。
大厂面试中技术之外的部分也是很是重要的一部分,这部分大可能是一些软技能:
下面是我我的整理的整个面试的一些知识图谱,这上面的知识点基本上都是面试过程当中问到的,属于必知必会的知识点,若有须要能够留下邮箱,我发一下xmind格式的文件
虽然不少面试都是在问问题和答问题中度过的,可是仍是有一些面试官在面试完成后会对个人面试结果作一些总结和评价,这里面也收获颇多,跟你们分享一下。
不少刚进入职场以及学生会有这方面的困惑,不过我仍是简单粗暴地回答一下这个问题吧,建议去大厂。由于这几个方面的缘由:
这里说一个标准,5年左右开发经验的工程师,应该在某个或者某几个方向上是整个公司的专家和标杆。好比设计能力、网络优化、性能优化、音视频等等,5年左右的开发不该该仅仅知足于实现一些业务需求,应该更深刻了解底层的原理和技术,这样在将来的跳槽中才能有更高的溢价,好比从抖音出来的音视频工程师就能在市场上享受很是高的溢价。
主动去承担高一个职级的事情,天然而然你的职级也会跟着提高。不少同窗包括我以前也是认为把我本身的事情作好了,找一些项目的亮点再去PK晋升职级。然而阿里的面试官跟我聊这个问题的时候给了一个新的思路:不少P6的同窗升级到P7是由于他们已经在作而且能作好P7的事情了,因此他们升了P7你们都以为瓜熟蒂落。从这个角度看职级和晋升,是否是角度不同了呢?
在不断的纠结比较后,笔者最终选择字节跳动的飞书团队做为职业生涯的下一站,团队正处在扩张期,特别是客户端,欢迎最近在找工做的小伙伴投递简历,能够直推部门的相关职位,也能够帮忙内推其余职位,目前咱们在作AI相关的一些业务,仍是挺有意思的,欢迎来撩。
职位大全
邮箱:txlbupt@gmail.com