新的开始
改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。
《系列学习视频》
《系列学习文档》
《我的大厂面试之旅》
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
二面
-
3次握手和4次挥手的原因,以及为什么需要这样做。
-
数据结构,搜索二叉树的一些特性,平衡二叉树。
-
hashmap是如何解决hash冲突的
-
进程与线程区别
-
写了一个二分查找和单例模式
-
http中的同步和异步
-
聊了一些项目上做的东西,问了问职业规划
由于二面面试官不是做Android,本来面试我的人临时开会去了,所以这一轮面试没怎么问android相关知识,不过二面面试官一直是微笑,所以这一轮很轻松,更像是一起讨论问题。
面试完已经是下午4:30了,由于面试当天是星期五,而周五美团的会议比较多,所以等了会,二面面试官说三面面试官在开会,面试另约时间,我还是说这次一次面试完吧,这一等就等了2个半小时,期间hr跟我说三面面试官是个大牛。
三面
-
我认为Android做的优秀的几个地方,然后又根据我说的问了问比较深入问题。
-
Android是如何进行资源管理的。
-
java比较重要的几个特性
-
网络五层结构,每一层协议,由于我网络不是很好,还问了一些其他的问题(例如MAC地址和ip地址的区别等)。
-
为什么离开原来公司,以及职业规划,然后因为面试完大概就晚上8点了,就先让我回去,下周让hr跟我联系,我想这是应该通过面试了吧。
美团技术还是很厉害的,从面试官的水平就可以看出来,尤其是外卖核心部门,办公环境是不错,但是感觉就是有点乱,不知道是不是因为今天面试的人很多,基本上一直有很多人来回走动,有一些嘈杂。
4、阿里
一面
可能是因为一面是我的学长,所以没有问我很多技术的问题,聊了聊我做的向项目,然后聊了一会jetpack相关知识,感觉非常轻松,还想着如果面试都这么轻松就好了,然后就直接下一面了。
二面
二面面试官看上去很斯文,但是还是一个对技术精益求精的人,问的问题都很细,具体问题的顺序挤不太清楚了,大概问了下面几个问题。
为什么工作一年就想换工作?
onTouchEvent/onTouchListenr.onTcouchEvent/onClickListenr
hashmap的原理?
java的hashcode和equals的区别
java的gc了解多少?
kt的伴生对象是饿汉模式还是懒汉模式?
handler.postDelayed的原理
ANR怎么产生?怎么捕捉?
智力题:桌子上有101块饼***拿先手,他拿后手,你需要怎么赢
tcp 三次握手/四次挥手
为什么要三次握手,四次挥手?
内存泄漏是什么?怎么找?
算法题:斐波拉契数列,递归的方式怎么优化?
三面
leader是一个很有亲和力的人,上来就跟我说前面技术已经问的差不多了,这里就不询问我详细的技术了,就出了一道算法题,需要说出时间和空间复杂度,以及有没有更优解。
-
字符串反转,讨论复杂度。
-
聊经历和项目
HR面
HR面问问题都是一个模板刻出来,都是例行公事的询问,bulabula……然后就算完成面试。
阿里工作环境还是不错的,整体的发展也可以,毕竟也是大厂,值得选择。
5、网易
这是网易另外一个岗位。感觉还是不错的,来的稍微有点早,在前台等了20分钟左右的样子,面试官就带我去面试了。
笔试
具体的内容记不太清楚了,大概有以下几个类型,都还是比较基本的。
选择题、程序输出题、四道算法、简答
-
给定一个int型 n,输出1~n的字符串例如 n = 4 输出“1 2 3 4”
-
输出所有的笛卡尔积组合
-
单例模式
-
最长上升子序列
都不是很难,基本上都能作出来。
一面
一面面试官是资深的Android开发工程师,的确水平很高。所有的问题问的都很详细,很多细节,面试官都能清晰的说出来,的确水平很高。
属于循序渐进的问题方式,从简单的知识入手,逐渐深入,直到你回答不出来而且问的都是你自认为很擅长的知识点,可见面试官的功力有多深厚,深深的佩服。
我下面大概说一些问题,但是到最后总能问到很深入的地方。
-
对刚才做的题,一些错的地方做了讨论,主要是类的加载和内部类方面的知识,尤其一些深入到JVM层的知识的确自己有一些不足,不过大部分都还是能答出来。
-
双亲委托机制,类的五个加载过程。
-
java类加载器的加载流程。
-
Binder机制,从java到framework再到kenral层,面试官问的都很详细,遇到不会的也都会跟我解释。
-
Serializable和Parcelable的区别。
-
View的绘制流程,详细到framework代码,讨论到不确定的地方,立马打开电脑和我一起看源码。
-
事件分发机制。
-
常用设计模式,使用静态内部类实现单例的原理是什么。
-
线程同步,CopyOnWriteArrayList怎样实现。
-
Volley源码,EventBus源码。
面试完后就到12点了,讨论了1个半小时,跟我说我这关过了基本上就没问题了,面试官还是一个很幽默的人,带我去网易食堂吃了顿饭,的确这里的饭特别好吃,回来后,休息了一会,就开始Leader面了
二面
Leader面,我还以为至少要3轮技术面呢,没想到直接就到leader面试了,后来才知道第一轮面试的结果还是很重要的,一面面试官是非常资深的工程师,只要通过一面了基本就没问题了。
-
项目介绍,聊一些项目上的问题
-
下拉listview的实现,需要注意的地方和优化的地方(不是lsitview的优化,是下拉的优化)。
-
Android上一些优化方案
-
介绍了一下现在做的项目,大体说明了现在所用到的技术。
总体感觉网易的氛围还是非常好的,技术实力非常雄厚,leader技术能力也很强,并且一面面试官告诉我,leader有时候还会自己写一些代码,一般到了leader很少有写代码的了。
hr面
一样的流程,各种谈,说面试官对我评价非常高,希望我能来之类的话,然后就算面试结束了。
6、小米
这是第二次面试消息,这次是小米的核心部门,MUI部门,主要做阅读类app,听说发展还是很不错的,为什么要面试两次小米呢,因为之前内推过小米,一周都没有消息,我就在网上投了简历,等面试了小米TV,这边又叫我去面试。到了小米前台,前台没人,我问保安,保安让我打HR电话,结果HR也不接电话,就这样等了半个多小时,HR终于回过来电话,打电话让面试官把我接上去了,一面面试官还以为我不来了。
一面
-
聊项目,GLSufaceView,OpengGL,Shader相关一些知识,在项目中做的优化
-
gc是根据什么来回收一个对象的,引用计数和gc root分别怎么实现。
-
怎样会产生内存泄露,举一个具体的例子,使用什么检查内存泄露
-
自定义View的绘制流程
-
给出二叉树和一个值,找出所有和为这个值的路径;{1,3}{3,6}{3,4}{6,8}区间去重,最少去掉几个集 合,可以让这个集合没有交集。
二面
-
什么是ANR,Activity、BroadcastReceiver、Service对ANR时间限制分别是多少,怎么处理ANR,除了系统生成trace.txt文件,怎么在程序中检测ANR。写出伪代码。
-
编解码一些知识,I帧,B帧,P帧区别。
-
Android一些优化方案。
-
算法 n/m,怎么判断得数是无限循环小数。
三面
三面面试官看上去很年轻,人也特别幽默,不过技术还是没得说。
-
介绍项目。
-
事件分发机制。
-
算法,将一个字符串转换成int型数字,考虑 错误输入,溢出,正负值等一些条件,考细心。
-
给出一个搜索二叉树,输出一个排序好的双向链表。
四面
本来以为是HR面,结果不是,应该leader面,上来就说技术就不面了,介绍自己的项目中觉得做的最好的几个部分,大概说了下,接下来就是问了为什么离开原来公司,为什么选择小米 bulabula……面完之后,说今天太晚了(晚上快8点了),hr已经走了,下周让hr跟你电话联系吧,把我送到楼下。
第二周小米就发来了面试通过的消息,具体谈了一些薪资待遇问题。
7、百度
一面
一面面试官的思维非常跳跃,经常我说到一半的问题,突然询问其他相关问题,然后回答完再继续之前的说下去,有些许不适应这个节奏。顺序可能不太对。
-
类的加载过程,Person person = new Person();为例进行说明。
-
JVM相关知识,GC机制。
-
类的加载器,双亲机制,Android的类加载器。
-
Android中进程的级别,以及各自的区别。
-
插件化原理。
-
集合框架,list,map,set都有哪些具体的实现类,区别都是什么。
-
concurrentHashmap原理,原子类。
-
Binder机制。
-
View的绘制流程,事件传递机制,Handler异步消息机制。
-
Interger中的128(-128~127),这里考的是常量池的概念,这个没回答上来。
-
线程池的相关知识。
-
Handler机制,HandlerThread实现等等。
-
LRUCache算法是怎样实现的。
二面
二面面试官看上去挺面善的,所以气氛就不那么紧张了,说实话来百度还是有点小小的紧张的。
-
说了说项目中相关的知识。
-
聊了聊之前做过的项目。
-
内存泄露,怎样查找,怎么产生的内存泄露。
-
怎样计算一张图片的大小,加载bitmap过程(怎样保证不产生内存溢出),二级缓存,LRUCache算法。
-
简单介绍一下java中的泛型,泛型擦除以及相关的概念。
-
Android优化相关的只是,布局优化、内存优化等等。
-
算法题,m * n的矩阵,能形成几个正方形(2 * 2能形成1个正方形,2 * 3 2个,3 * 3 6个)
三面
因为每次面试都是有记录的,所以三面面试官问题的技术问题就不那么细节了,大体以讨论的方式跟我聊,大体聊了以下几个方面,当然越深入,面试官对你的评价就越高
-
项目相关。
-
Android优化.。
-
插件化相关技术,热修补技术是怎样实现的,和插件化有什么区别。
其他的都记不太清楚了,总体来说聊的还是不错的,本来以为百度会有很多算法题,结果只出了一道(侥幸。。。),本来还要有leader面,三面面试官还是非常好的,跟我说他们几个技术觉得我还是不错的,就看leader了,结果leader有事,出去了,不知道什么时候回来,就约当周的下班时间过去就好,然后面试官亲自把我送到了门口,跟我聊了很多,挺不错的。
四面
四面是经理面,感觉经理已经不做技术了,技术基本上没有询问,大体问了一下项目,以及自己在项目中都做了一些什么,聊了聊其他的话题,就完事了,然后就让我回去了。
大老远的跑过来,就谈了不到半个小时,好吧,回去等hr电话吧。
过了几天,hr联系我谈薪资待遇等,又让我跑了一趟,面试这么多家,最累的一次,谁让百度是牛*呢,一顿说,bulabula……
感觉近几年百度发展的不是很好,一直在走下坡路,不知道是不是在憋大招,很多百度人都出来了,不过百度毕竟是百度,还是很厉害的。
#####其他几家公司
另外几家公司的面筋以及上面提到的所有厂的面试真题我都整理好了放在我的GitHub了,大家有需要的就来找我吧。
##最后总结
自己对于互联网有一些小小的见解:随着资本的冷却,整个互联网市场也逐渐的冷静下来。Android应用开发从一开始能说几个四大组件的名词,能随便写个监听事件,就能拿到高达上万的月薪的时代了。
归根到底并不是工作难找了,而是Android应用开发工程师这个职位已经趋于正常,再也不是没什么技术也能拿高工资的香饽饽。当然这个也不是绝对的,对于中高级的开发人员来说,市场还是比较缺少的,尤其是知名企业对于招聘员工来说,不仅要求有过硬的技术,还要求有高素质,好的教育背景等等。
总的来说,高工资可以给你,但是前提条件是你要足够优秀,或者说让面试官觉得你很优秀。
其实面试过程就是一个把你自己推销给别人的过程,对于我们(毕业不久的同学,因为我毕业不到一年)来说就是要让面试官感觉你技术好,有培养价值。感慨有点多了,还是来点干货吧,大概列举一下每一轮面试的大概范围和深度,但是也不是绝对的,还是要看具体情况。
笔试
对于社招的同学来说,基本上不需要笔试,但是也有公司是需要的,例如 今日头条和网易都有笔试。笔试都是比较基础的一些知识,Java、Android等方面的,一般不会有网络,计算机等方面的笔试,一般情况下大家都能答出来。
结语
网上高级工程师面试相关文章鱼龙混杂,要么一堆内容,要么内容质量太浅, 鉴于此我整理了上述安卓开发高级工程师面试题以及答案。希望帮助大家顺利进阶为高级工程师。
目前我就职于某大厂安卓高级工程师职位,在当下大环境下也想为安卓工程师出一份力,通过我的技术经验整理了面试经常问的题,答案部分是一篇文章或者几篇文章,都是我认真看过并且觉得不错才整理出来。
大家知道高级工程师不会像刚入门那样被问的问题一句话两句话就能表述清楚,所以我通过过滤好文章来帮助大家理解。
现在都说互联网寒冬,其实只要自身技术能力够强,咱们就不怕!我这边专门针对Android开发工程师整理了一套【Android进阶学习视频】、【全套Android面试秘籍】、【Android知识点PDF】。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
强,咱们就不怕!我这边专门针对Android开发工程师整理了一套【Android进阶学习视频】、【全套Android面试秘籍】、【Android知识点PDF】。**
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!