今年的大环境
作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2020 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动?
就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Android程序员的技术功底。
那么如何才能通过一线互联网公司面试?
应该学什么才能有效地提高自身的竞争力呢?其实,首先我们应该优先深入学习工作中用到的技术,其次,关注这2年来Android最新的面试题所涉及的知识点,根据自身的实际情况有选择地进行针对性的学习和提升。只有这样,自身才不会被所谓的 互联网寒冬 吓倒。
面试之前的准备
首先我不建议频繁的跳槽,除非被逼无奈,频发跳槽,不光会成为面试官害怕的一个方面,对自己的沉淀也是没有帮助的。同时我不建议裸辞,这样会存在太多的不定性因素,如果面试时间拖得太久,这段事件你没有经济收入,但是你还在支出(房租,日常生活开销)。这样会代来无形的压力,同时如果面试受挫,很容易失去信心,甚至怀疑自己的能力。但是离职也有他的好处,因为,有些公司可能项目非常急,需要迅速上岗,那么你离职的交接办理也会耽误一些时间,那么也会成为面试官考虑的一个因素。所以还是要结合自己的情况而定。
1. 面试复习
- 面试之前我用10天左右把自己看的书,做过的项目,写过的博客,还有一些java和Android基础复习一遍来准备面试,但是后来实际发现,尽管花了很久的时间去复习,但是复习的成果在面试过程中体现并不是很大。因为,虽然感觉复习的很好,可能没过三天就忘记以前的看的内容了。同时重复的去理解与忘记很容易代来负面情绪,所以,复习要尽可能短一些,在自己的长处,比如:前端,后台,框架源码,framework等等去好好的梳理一下,成为自己的特点和优势就好。然后面试前1-2天把一些面试常考的知识点复习一下牢牢记住,就可以了,不用等自己100%的准备好才去面试,因为那事不可能的。你根本复习不过来。60-70%就很好了,剩下的就在面试中去回顾吧。
- 不要想着完全不用回顾自己以往学过的东西,也不去准备。就等着便面试遍复习,因为即使你当初理解的熟的不能再熟,也要看,因为你永远想不到自己的记忆力消散的有多快,有多可怕。同时当你面试的时候,你就会发现,你根本没有时间去复习。即使你想在地铁上看一下也是不太可能的,因为你会忙着别的或是太累或是导航去下一个地点。而没有时间去复习。
2. 简历制作
简历制作是一种学问,一份好的简历往往让人眼前一亮。同时简历要突出重点,
- 技能特长
比如你自定义View好,那么就把View的相关技能写上,比如:View加载流程,事件分发,自定义属性,滑动冲突等等,如果视频方面强那么就相关的技能写上。尽量不要有精通,除非你真的“精通”。否则就是给自己挖坑。也不要写一些太过常见的技能,如果:了解Activity的生命周期。谁都知道的东西,没别要单拿出来。也不要太长或太短10-12个技能特长左右。宗旨在于表达的特点简单明了。其他的点大家在自己搓摩下。
- 项目介绍
如果你是实习,那么你一定要有自己在大学项目,或是毕业设计,或是团队项目。如果是在职一定要有公司的项目。同时项目不宜过多2-3个即可,如果你有觉得可以在简历上写的前端或是后台的项目,那么会有很大的加分。同时项目介绍不要太过啰嗦,3-5行,突出架构,核心技术,主要功能与模块即可,同时写出自己在其中做了那部分内容。(
这部分要写好,因为面试官很可能会问你,你开发中遇到的问题,难点,优化,协作,调试等相关问题)- 其他技能
如果有英语4.6级一定要写上,有github,个人blog一定要写上地址。这我就不用说了吧。
简历制作总结:
至于其他的对大家应该没有难度。同时适当的包装无可厚非,求职者想找个好工作,面试官想找个好员工。对方就像相亲一样。一定会把你的低摸个清楚的。如果相亲的时候的没问题,等孩子都有了那就晚啦。哈哈,我就是这个意思。包装的目的是为了增加HR的通过率。这样才会有面试机会,对我们这种渣渣来说,面试机会比面试通过与否更重要。因为面试邀请都没有,你准备有个P用。
最后我还是希望大家提高自己的实力,实力才是硬道理
3. 简历投递
如果说简历制作是门学问,那么简历投递一定是一个技巧了。投的好你就会有面试邀请,投的不好,即使你能力再好也是过不去的。所以投好简历至关重要。那么我们可以从这几个方面入手:
- 网站选择
现在主流的网站有智联,BOSS直聘,拉钩。如果你这些投递完后面试邀请还不是很多,可以试试中华英才,前程无忧,猎聘同道。其他的软件基本就没什么作用了,智联可以海投,能力好可以看公司方向投递。拉钩有投递上线,可以多创建几个拉钩重复投递,BOSS的话可以在坐公交或是面试之余去投,这个主要是以聊为主,如果谁看了你的简历,那么你可以主动沟通。
- 投递时间
你可以选择在周日晚间投递,这样在周一HR上班时候你的简历不会排的太远。平时也是在每天的6-8点投递为好,这样如果HR去看的话,会容易看到一些
- 其他注意
如果你是半年或是一年经验,可以多写一点,当然面试的时候给的简历就要真实了。因为有些情况,如果你工作太短,无论你多优秀也不会有太多的面试机会,因为人家的硬性条件你都过不去。
4. 面试准备
- 个人准备
如果你是在大城市,一定要把手机充好电(带着充电宝),因为去哪里都要导航,还有就是提前就多买点吃的,因为你可能为了干面试一天都吃不上饭(深有体会)。带好简历和纸笔。 - 面试安排
如果面试邀请比较多的话,一定要用Excel做好表格,然后尽量把相同地点的安排在一起(虽然给你面试邀请的时候,会规定时间,但是你打电话沟通改时间件,一般都会同意的,大家都理解)。这样你就可以不用来回跑,可以一天面3-4个。
大家可以根据自己的情况自己创建,安排和查看都很方便。
- 面试排期
面试多的话,不要一天排超过4个,2-3个最好,有时候可能会赶不上,同时会给人家造成不好的印象,同时对自己太多劳累(面试比工作累多了)。
我的面试经历
本人 14 年毕业,在学校里面自学 Android 开发,在 cz 呆了三年,小城市,IT 不发达,倒闭了 2 家公司,然后上北上广深谋求发展。
求职开始于某个周日晚上十一点把简历公开到猎聘,第二天开始就被猎头的电话打爆(对这个所谓寒冬有点疑惑),按先后顺序面了xxx体育资讯(搞BC的)、xx者科技(技术方向不同,去了几乎没怎么面就让我回家了)、腾讯音乐(电话一面挂)、技威时代(智能家居方向)、悦动圈(跑步运动,用户量过亿)、顺丰科技、OPPO、百度(止步现场第三轮技术面)、头条,加粗的是拿到offer的,最终入职了头条。至此我的耗时3个月的找工作经历终于是画上句号了~
以上便是我的历时几个月的求职经历,小伙伴们找用作,一定要擦亮眼睛,不要被一些公司给骗了。最后附上面试题,我把几个大厂的面试题做了分类整理出来分享给大家,因为篇幅原因下面只列出面试题,详细的面试答案我都整理成了一个doc、pdf格式的,详情文末获取。
一、性能优化
- 做过哪些性能优化?是怎么评测和具体优化的?
- 为什么WebView加载会慢呢?
- 如何优化自定义View
- FC(Force Close)什么时候会出现?
- Java多线程引发的性能问题,怎么解决?
二、Android Framework相关
- Android系统架构
- View的事件分发机制?滑动冲突怎么解决?
- View的绘制流程?
- 跨进程通信
- Android系统启动流程是什么?
- 启动一个程序,可以主界面点击图标进入,也可以从一个程序中
- 跳转过去,二者有什么区别?
- AMS家族重要术语解释
- App启动流程(Activity的冷启动流程)
- ActivityThread工作原理
- 说下四大组件的启动过程,四大组件的启动与销毁的方式
- AMS是如何管理Activity的?
- 理解Window和WindowManager
- WMS是如何管理Window的?
- 大体说清一个应用程序安装到手机上时发生了什么?
- Android的打包流程?apk里有哪些东西?签名算法的原理?
- 说下安卓虚拟机和java虚拟机的原理和不同点?(JVM、
- Davilk、ART三者的原理和区别)
- 安卓采用自动垃圾回收机制,请说下安卓内存管理的原理?
- Android中App是如何沙箱化的,为何要这么做?
- 一个图片在app中调用R.id后是如何找到的?
- JNI
- 请介绍一下NDK?
三、Android优秀三方库源码
- 你项目中用到哪些开源库?说说其实现原理?
- Android中软引用与弱引用的应用场景
四、热修复、插件化、模块化、组件化、Gradle
- Android中ClassLoader的种类&特点
- 热修补技术是怎样实现的,和插件化有什么区别?
- 热修复原理
- 为什么选用插件化?
- 插件化框架对比
- 插件化原理
- 模块化的好处
- 分析现有的组件化方案
- 组件化开发的好处
- 跨组件通信方案分析
- 如何管理过多的路由表?
- 多模块开发的时候不同的负责人可能会引入重复资源,相同的字符串,相同的icon等但是文件名并不一样,怎样去重?
五、设计模式与架构设计
- 设计模式谈谈你对Android设计模式的理解
- 项目中常用的设计模式
- 手写生产者/消费者模式
- MVC MVP MVVM原理和区别?
- MVP架构存在的问题与解决办法
- MVC的情况下怎么把Activity的C和V抽离?
- MVP 架构中 Presenter 定义为接口有什么好处?
- MVP如何管理Presenter的生命周期,何时取消网络请求?
- aop思想
- Fragment如果在Adapter中使用应该如何解耦?
- 从0设计一款App整体架构,如何去做?
- 实现一个库,完成日志的实时上报和延迟上报两种功能,该从哪些方面考虑?
- 说一款你认为当前比较火的应用并设计(比如:直播APP,P2P金融,小视频等)
六、其它高频面试题
- 如何保证一个后台服务不被杀死?(相同问题:如何保证service
在后台不被kill?)比较省电的方式是什么? - Android动画框架实现原理
- Activity-Window-View三者的差别?
- 低版本SDK如何实现高版本api?
- 说说你对Context的理解?
- Android的生命周期和启动模式
- ListView和RecyclerView系列
- 如何实现一个推送,消息推送原理?推送到达率的问题?
- 动态权限系列
- 自定义View系列
- 对谷歌新推出的Room架构
- 没有给权限如何定位,特定机型定位失败,如何解决?
- Debug跟Release的APK的区别?
- android文件存储,各版本存储位置的权限控制的演进,外部存
储,内部存储 - 有什么提高编译速度的方法?
- Scroller原理
- Hybrid系列
- 如果在当前线程内使用Handler postdelayed 两个消息,一个
- 延迟5s,一个延迟10s,然后使当前线程sleep 5秒,以上消息的执行
时间会如何变化? - Android中进程内存的分配,能不能自己分配定额内存?
- 下拉状态栏是不是影响activity的生命周期,如果在onStop的
时候做了网络请求,onResume的时候怎么恢复 - Android长连接,怎么处理心跳机制
- CrashHandler实现原理?
- SurfaceView和View的最本质的区别?
- Android程序运行时权限与文件系统权限
- 曲面屏的适配
- TextView调用setText方法的内部执行流程
- 怎么控制另外一个进程的View显示(RemoteView)?
- 如何实现右滑finish activity?
- 如何在整个系统层面实现界面的圆角效果。(即所有的APP打开
界面都会是圆角) - 非UI线程可以更新UI吗?
- 如何解决git冲突?
- 单元测试有没有做过,说说熟悉的单元测试框架?
- 实现一个Json解析器(可以通过正则提高速度)
- Jenkins持续集成
- 为什么 Google 会推出Fragment ,有什么好处和用途? 直接
用 View 代替不行么? - 工作中有没有用过或者写过什么工具?脚本,插件等等;比如:
多人协同开发可能对一些相同资源都各自放了一份,有没有方法自动检测这种重复之类的 - 如何绕过9.0限制?
面试之外
上面说地都是一些硬实力,经过这一次的被动面试经历,下面简单说些自己在面试过程中总结的一些面试之外需要注意的东西:
一定不要裸辞
如果是裸辞找工作,HR 一般都会问什么时候离职的。如果手里没有 Offer,就很被动了,很有可能被压薪资。主动权一定要掌握在自己手中。
选择大于努力
即使很努力如果方向错了就是浪费时间,就像我选择了小程序就是个错误(大前端坑太多,入坑需谨慎)。我的建议是多深入研究一些以不变应万变的技能。
学历与履历
虽然说能力很重要,但学历是敲门砖(HR 就看这个)。如果连面试机会都没有,还怎么谈然后?如果学历不突出有很好的大厂履历也很不错,貌似是个蛋生鸡,鸡生蛋的问题。
充分准备
一些基础知识和理论肯定是要背的,要理解的背,用自己的语言总结一下背下来。
虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,我能明显感觉到国庆后多了很多高级职位,所以努力让自己成为高级工程师才是最重要的。
那么,该如何复习呢?
其实客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
今天分享的面试题就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
我为大家准备了以下一体系的复习资料:
《Android开发七大模块核心知识笔记》
《960全网最全Android开发笔记》
《379页Android开发面试宝典》
历时半年,我们整理了这份市面上最全面的安卓面试题解析大全
包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。
如何使用它?
1.可以通过目录索引直接翻看需要的知识点,查漏补缺。
2.五角星数表示面试问到的频率,代表重要推荐指数
《507页Android开发相关源码解析》
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图;
需要的朋友,直接转发+点赞+私信回复【资料】一键领取!!!