当前位置:   article > 正文

一年Android工作经验,今日头条 阿里 百度 网易 美团 小米 快手面经_安卓今日头条项目总结

安卓今日头条项目总结

转载请注明出处:http://blog.csdn.net/a296777513/article/details/73610719

前言

人生困难重重,在漫长而艰辛的前行路上,坚持不懈、脚踏实地的“低头拉车”固然重要。但认清形势、找准目标的“抬头看路”也很关键,甚至决定着你能否达到成功彼岸。只寻求远方的梦想,而不付出当下的努力,那是迷梦;只知道埋头苦干,而不认清方向,那是徒劳。

先简单说说我最近的面试经历吧。面试的公司很多,大部分最后都能得到令人满意的结果,我将这些体会记录下来,面了这么多公司,如果不留下什么,那岂不是太浪费了。对于我来说,这也是一次自我检查,在这次面试中总结经验,认清自己,同时希望这些对即将换工作或者打算看看其他机会的你有一些帮助。

以下的部分有具体的面试经历,也有自己的一些总结面试必备技能和自己的一些感想。

为何离开华为

来华为的主要原因是:增长自己的见识,很好的发展自己。很好的发展自己,就需要一个平台,通常这个平台是大公司才能提供,大公司会有一套完整的机制来培养你,让你有更多的选择,可以选择自己喜欢做的事情。所以我建议刚毕业的同学,最好还是选择大公司,哪怕以后要跳槽,大公司也是非常好的跳板。在华为的这一年,最大的收获并不是技术上的成长,而是自己的见识和思考问题的能力。虽然有很多人不满华为,公司大了,肯定不可避免会出现很多问题,但是总体来说华为还是一个非常了不起的企业。

离开华为的主要原因是:我的职业规划与华为给我的规划不相符,还有就是流程化的东西太繁琐,自己有一些不适应,所以选择离开了华为。非常感谢我高总(直接领导)和邦邦(师傅),在华为的这一年中给予我非常多的帮助,在我跟领导沟通离开的想法时,领导开诚布公的跟我聊了很多,最终我还是下定决定要离开华为,领导建议我先去面试一些公司,等找到合适的再走,裸辞的话社保和心态上都会有一些问题,这样的领导真是没话说了,在华为很多领导都是不放人的,很多都把员工的下一家拖黄了才放人。在这一年获得的成绩:

1. 北京研究所第一届Hackathon 二等奖
2. 转正绩效是A
3. 年终绩效 B+,获得明日之星
  • 1
  • 2
  • 3

准备

其实我很早就开始准备了,准确来说也不算准备,只是一直在总结Android相关方面的知识,因为在华为虽然工作有时候比较多,但是还是有大把时间可以自己学习一些感兴趣的方向。从过完年回来,我就有计划的复习和总结了一些知识。

  • 看过的书籍,这里并不是泛泛的读一遍,而是详细理解了大多数内容,通俗一点就是可以用自己的话将相应的知识解读出来。《Android开发艺术探索》(这本书真心不错,我反复读了4、5遍)、《Android群英传》(比较接近开发使用,因为做过一些应用开发,读起来还是比较简单的,读了2遍)、《深入理解Java虚拟机》(也是一部神作,可以让你清晰的理解JVM,读了2遍,理解的不是很透彻)、《剑指offer》(感觉面试中碰到的算法,80%都能找到相应的题目,保证所有的题都可以手写出来就行)。4个月精读了以上书籍,还有其他的都是简单了解,这里就不列举了,读完这些书,应该可以让你上一个层次吧(妈妈再也不用担心我面试啦…)。
  • 刷题,主要是LeetCode(大概刷了300道题左右,每天3-6道,坚持下来,需要多复习,因为很多题过一段时间会忘记),还有看过一些牛课网。
  • 看别人的面试经验,主要在网上,这里我列举两个比较好的。
  • Android客户端面试题集锦
  • Android阿里面试题锦集

投递简历

一份好的简历是非常有必要的,需要突出你的重点和闪光点,具体怎么写简历可以参考

CodeKK说简历

有了一份好简历,接下来就是投递简历,一般是:拉钩+BOSS直聘+内推,从我这次面试机会来看,三者比例是2:2:1,也可能我工作经验还不到一年,内推滴滴、阿里和腾讯直接就把我的简历刷掉了,但是内推也是具体到某个部门,如果被刷掉也不要灰心,现在大公司基本上各个部门都有自己的hr,可以在拉头和BOSS上多投递一些,万一其他部门看中你呢?

面试经过

这里我仅仅记录一些问过的题目(能记住的),答案我就不写出来,基本上都可以在网上找到相应的答案。

作业盒子

时间有点久,很多问题记得不太清,大概有以下内容。

一面
 1. Android一些优化方案
 2. 什么是过渡绘制,如何防止过渡绘制
 2. 事件分发机制
 3. ListView的优化
 4. Binder机制
 5. 在多进程中,Application会启动几次
 6. 单例模式,双锁原理,volatile原理,静态内部类实现单例的原理。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
二面

二面面试官是leader?反正应该不是做Android的,Android的相关知识问的也不多,大多是项目上的东西。

 1. Java多线程,synchronized
 2. 聊项目,都具体做了什么。
 3. Binder机制
  • 1
  • 2
  • 3
三面

应该是leader吧,主要了解一些个人的情况,以及一些项目,最后问了期望的薪资,然后当场就给了offer。

毕竟1年多没有面试了,第一场面试还是给我了很大的自信,也知道现在自己大概能要多少工资是合适的,所以同学们准备跳槽的时候,最好先面几家小公司,盒子还是一个很不错的公司,整体的办公环境挺好的,现在也处于盈利状态,在教育类的app中也排的上名次。

快手

快手就在五道口地铁站出口不远地方,能看到很显眼的LOGO,看上去很霸气的样子,但是当我进入到快手前台的时候,连一个标示符都没有, 一度以为自己走进了假快手,好吧,我是来面试,这些都不重要,接下来接待的人员把我领进了一个小屋里,等待面试的开始。

一面

面试官是一个很fashion的人,是从小米核心部门过来的,是Android小组的领导。

 1. 问了关于数据库的一些问题,SQLite的相关操作,没办法,我在华为唯一一个做的和java相关的项目,但是不太擅长数据库。
 2. 网络相关的问题,网络的五层模型,又问了TCP和UDP,还有Android相关的长连接,这里问的比较深。
 3. 开始Android先关的知识,Handler机制,Acticity的生命周期以及四种启动模式,各自特点,Service的两种启动模式生命周期,如果同时使用两种启动模式是否可以,顺势讲到Binder,什么时候可以得到控件的大小,最后写了一道链表反转的算法题
  • 1
  • 2
  • 3

第一面这就算过关了等待二面。

二面
 1. 问了项目相关的问题,这部分根据自己的项目经验,由于大家的经验都不同,这里我就不详细说了。
 2. 设定一个场景,怎么去实现相应的功能,因为快手这个部门想做社交,因此这里是问我是如何实现微信的联系人页面(包括与服务端有什么样的交互)
 3. 最后也是一个算法,写出所有数组的子序列
  • 1
  • 2
  • 3

二面面试官是这个组的leader,跟我讲了现在这个组的发展情况和快手现在的情况,由于快手成长很快,所以不能仅仅依靠一个APP,还需要在其他方面进行一些尝试,而这个组的任务就是在一些方面做一些尝试,大概就是这个样子。
二面也顺利通过,接下来就是HR面了,这时候正好是12点,他们要去吃饭,不过快手是提供午餐和晚餐的,第一个面试官带给我一份饭,还不错,后来HR跟我说,现在只是过渡时期,后面午餐和晚餐会改成自助餐的形式。

三面

HR上来很亲切,问了我一些面试的情况,难不难之类的,然后又聊了聊我大学和研究生情况,我只想说我“too simple , too naive ",大概了解我后,只跟我聊我的不足,以此来压低我期望的薪水。说了一下薪资期望,加了微信,让我回去等待,说发offer大概是2周时间,因为需要走各种审批流程,让我不要着急。

快手是一个很年轻的公司,技术还是需要一定的积累,希望不要像小咖秀一样昙花一现。

美团外卖

一面

简历上写的项目问了一遍,然后开始问知识点。

 1. volley的源代码,在图片缓存部分讨论了挺长时间,http中缓存机制,Last-Modify的作用等。
 2. fragment的生命周期
 3. service一些知识
 4. 事件分发机制
 5. Binder实现机制,Stub类中asInterface函数作用,BnBinder和BpBinder区别。
 6. gradle中buildToolsVersion和TargetSdkVersion的区别是什么
 7. 手机适配一些方案
 8. hashmap的实现原理
 9. 静态方法是否能被重写
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这些大概聊了1个半小时,开始的时候还有些紧张,慢慢聊开了,就好多了,面试官的语速有点快,老是需要面试官重复一遍,我也不经意间语速也变快了,不过能看出来面试官还是很厉害的。

二面
 1. 3次握手和4次挥手的原因,以及为什么需要这样做。
 2. 数据结构,搜索二叉树的一些特性,平衡二叉树。
 3. hashmap是如何解决hash冲突的
 4. 进程与线程区别
 5. 写了一个二分查找和单例模式
 6. http中的同步和异步
 7. 聊了一些项目上做的东西,问了问职业规划
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

由于二面面试官不是做Android,本来面试我的人临时开会去了,所以这一轮面试没怎么问android相关知识,不过二面面试官一直是微笑,所以这一轮很轻松,更像是一起讨论问题。
面试完已经是下午4:30了,由于面试当天是星期五,而周五美团的会议比较多,所以等了会,二面面试官说三面面试官在开会,面试另约时间,我还是说这次一次面试完吧,这一等就等了2个半小时,期间hr跟我说三面面试官是个大牛。

三面
 1. 我认为Android做的优秀的几个地方,然后又根据我说的问了问比较深入问题。
 2. Android是如何进行资源管理的。
 3. java比较重要的几个特性
 4. 网络五层结构,每一层协议,由于我网络不是很好,还问了一些其他的问题(例如MAC地址和ip地址的区别等)。
 5. 为什么离开原来公司,以及职业规划,然后因为面试完大概就晚上8点了,就先让我回去,下周让hr跟我联系,我想这是应该通过面试了吧。
  • 1
  • 2
  • 3
  • 4
  • 5

美团技术还是很厉害的,从面试官的水平就可以看出来,尤其是外卖核心部门,办公环境是不错,但是感觉就是有点乱,不知道是不是因为今天面试的人很多,基本上一直有很多人来回走动,有一些嘈杂。

小米TV

一面

可能是因为一面是我的学长,所以没有问我很多技术的问题,聊了聊我做的向项目,然后聊了一会OpenGL、GLSurfaceView和Shader,主要聊了OpenGL绘制方法,还有一些Binder相关知识,感觉非常轻松,还想着如果面试都这么轻松就好了,然后就直接下一面了。

二面

二面面试官看上去很斯文,但是还是一个对技术精益求精的人,问的问题都很细,具体问题的顺序挤不太清楚了,大概问了下面几个问题。

 1. 单例,快排,回型打印二维数组
 2. 写一个死锁,死锁是怎样产生的,怎样防止死锁
 3. Acticity启动模式有几种,分别代表什么意思
 4. 聊项目都做了些什么
  • 1
  • 2
  • 3
  • 4
三面

leader是一个很有亲和力的人,上来就跟我说前面技术已经问的差不多了,这里就不询问我详细的技术了,就出了一道算法题,需要说出时间和空间复杂度,以及有没有更优解。

 1. 字符串反转,讨论复杂度。
 2. 聊经历和项目
  • 1
  • 2
HR面

HR面问问题都是一个模板刻出来,都是例行公事的询问,bulabula…然后就算完成面试。
从整体来说,TV更需要一个测试开发,但是我还是想做开发,暂时不想做测试,所以我估计TV是不会给我offer了,虽然说了过几天会正式给我发offer,最后也没法。

小米TV在一个独立的小院子里,环境还是不错的,整体的发展也可以,毕竟是小米生态中重要的一个部分。

网易

网易大楼是在百度大楼的旁边,感觉还是不错的,来的稍微有点早,在前台等了20分钟左右的样子,面试官就带我去面试了。

笔试

具体的内容记不太清楚了,大概有以下几个类型,都还是比较基本的。
选择题、程序输出题、四道算法、简答

 1. 给定一个int型 n,输出1~n的字符串例如 n = 4 输出“1 2 3 4”
 2. 输出所有的笛卡尔积组合
 3. 单例模式
 4. 最长上升子序列
  • 1
  • 2
  • 3
  • 4

都不是很难,基本上都能作出来。

一面

一面面试官是资深的Android开发工程师,的确水平很高。所有的问题问的都很详细,很多细节,面试官都能清晰的说出来,的确水平很高。
属于循序渐进的问题方式,从简单的知识入手,逐渐深入,直到你回答不出来而且问的都是你自认为很擅长的知识点,可见面试官的功力有多深厚,深深的佩服。
我下面大概说一些问题,但是到最后总能问到很深入的地方。

 1. 对刚才做的题,一些错的地方做了讨论,主要是类的加载和内部类方面的知识,尤其一些深入到JVM层的知识的确自己有一些不足,不过大部分都还是能答出来。
 2. 双亲委托机制,类的五个加载过程。
 3. java类加载器的加载流程。
 4. Binder机制,从java到framework再到kenral层,面试官问的都很详细,遇到不会的也都会跟我解释。
 5. Serializable和Parcelable的区别。
 6. View的绘制流程,详细到framework代码,讨论到不确定的地方,立马打开电脑和我一起看源码。
 7. 事件分发机制。
 8. 常用设计模式,使用静态内部类实现单例的原理是什么。
 9. 线程同步,CopyOnWriteArrayList怎样实现。
 10. Volley源码,EventBus源码。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

面试完后就到12点了,讨论了1个半小时,跟我说我这关过了基本上就没问题了,面试官还是一个很幽默的人,带我去网易食堂吃了顿饭,的确这里的饭特别好吃,回来后,休息了一会,就开始Leader面了

二面

Leader面,我还以为至少要3轮技术面呢,没想到直接就到leader面试了,后来才知道第一轮面试的结果还是很重要的,一面面试官是非常资深的工程师,只要通过一面了基本就没问题了。

 1. 项目介绍,聊一些项目上的问题
 2. 下拉listview的实现,需要注意的地方和优化的地方(不是lsitview的优化,是下拉的优化)。
 3. Android上一些优化方案
 4. 介绍了一下现在做的项目,大体说明了现在所用到的技术。
  • 1
  • 2
  • 3
  • 4

总体感觉网易的氛围还是非常好的,技术实力非常雄厚,leader技术能力也很强,并且一面面试官告诉我,leader有时候还会自己写一些代码,一般到了leader很少有写代码的了。

hr面

一样的流程,各种谈,说面试官对我评价非常高,希望我能来之类的话,然后就算面试结束了。

小米

这是第二次面试消息,这次是小米的核心部门,MUI部门,主要做阅读类app,听说发展还是很不错的,为什么要面试两次小米呢,因为之前内推过小米,一周都没有消息,我就在网上投了简历,等面试了小米TV,这边又叫我去面试。到了小米前台,前台没人,我问保安,保安让我打HR电话,结果HR也不接电话,就这样等了半个多小时,HR终于回过来电话,打电话让面试官把我接上去了,一面面试官还以为我不来了。

一面
 1. 聊项目,GLSufaceView,OpengGL,Shader相关一些知识,在项目中做的优化
 2. gc是根据什么来回收一个对象的,引用计数和gc root分别怎么实现。
 3. 怎样会产生内存泄露,举一个具体的例子,使用什么检查内存泄露
 4. 自定义View的绘制流程
 5. 给出二叉树和一个值,找出所有和为这个值的路径;{1,3}{3,6}{3,4}{6,8}区间去重,最少去掉几个集合,可以让这个集合没有交集。
  • 1
  • 2
  • 3
  • 4
  • 5
二面
 1. 什么是ANR,Activity、BroadcastReceiver、Service对ANR时间限制分别是多少,怎么处理ANR,除了系统生成trace.txt文件,怎么在程序中检测ANR。写出伪代码。
 2. 编解码一些知识,I帧,B帧,P帧区别。
 3. Android一些优化方案。
 4. 算法 n/m,怎么判断得数是无限循环小数。
  • 1
  • 2
  • 3
  • 4
三面

三面面试官看上去很年轻,人也特别幽默,不过技术还是没得说。
1. 介绍项目。
2. 事件分发机制。
3. 算法,将一个字符串转换成int型数字,考虑 错误输入,溢出,正负值等一些条件,考细心。
4. 给出一个搜索二叉树,输出一个排序好的双向链表。

四面

本来以为是HR面,结果不是,应该leader面,上来就说技术就不面了,介绍自己的项目中觉得做的最好的几个部分,大概说了下,接下来就是问了为什么离开原来公司,为什么选择小米 bulabula…面完之后,说今天太晚了(晚上快8点了),hr已经走了,下周让hr跟你电话联系吧,把我送到楼下。

第二周小米就发来了面试通过的消息,具体谈了一些薪资待遇问题。

百度

一面

一面面试官的思维非常跳跃,经常我说到一半的问题,突然询问其他相关问题,然后回答完再继续之前的说下去,有些许不适应这个节奏。顺序可能不太对。

  1. 类的加载过程,Person person = new Person();为例进行说明。
  2. JVM相关知识,GC机制。
  3. 类的加载器,双亲机制,Android的类加载器。
  4. Android中进程的级别,以及各自的区别。
  5. 插件化原理。
  6. 集合框架,list,map,set都有哪些具体的实现类,区别都是什么。
  7. concurrentHashmap原理,原子类。
  8. volatile原理。
  9. Binder机制。
  10. View的绘制流程,事件传递机制,Handler异步消息机制。
  11. Interger中的128(-128~127),这里考的是常量池的概念,这个没回答上来。
  12. 线程池的相关知识。
  13. Handler机制,HandlerThread实现等等。
  14. LRUCache算法是怎样实现的。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
二面

二面面试官看上去挺面善的,所以气氛就不那么紧张了,说实话来百度还是有点小小的紧张的。

  1. 说了说项目中相关的知识。
  2. 聊了聊之前做过的项目。
  3. 内存泄露,怎样查找,怎么产生的内存泄露。
  4. 怎样计算一张图片的大小,加载bitmap过程(怎样保证不产生内存溢出),二级缓存,LRUCache算法。
  5. 简单介绍一下java中的泛型,泛型擦除以及相关的概念。
  6. Android优化相关的只是,布局优化、内存优化等等。
  7. SQL相关的知识优化的方案,这里我直接说不太了解,就过了。
  8. 算法题,m * n的矩阵,能形成几个正方形(2 * 2能形成1个正方形,2 * 3 2个,3 * 3 6个)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
三面

因为每次面试都是有记录的,所以三面面试官问题的技术问题就不那么细节了,大体以讨论的方式跟我聊,大体聊了以下几个方面,当然越深入,面试官对你的评价就越高

 1. 项目相关。
 2. Android优化.。
 3. 插件化相关技术,热修补技术是怎样实现的,和插件化有什么区别。
  • 1
  • 2
  • 3

其他的都记不太清楚了,总体来说聊的还是不错的,本来以为百度会有很多算法题,结果只出了一道(侥幸。。。),本来还要有leader面,三面面试官还是非常好的,跟我说他们几个技术觉得我还是不错的,就看leader了,结果leader有事,出去了,不知道什么时候回来,就约当周的下班时间过去就好,然后面试官亲自把我送到了门口,跟我聊了很多,挺不错的。

四面

四面是经理面,感觉经理已经不做技术了,技术基本上没有询问,大体问了一下项目,以及自己在项目中都做了一些什么,聊了聊其他的话题,就完事了,然后就让我回去了,
大老远的跑过来,就谈了不到半个小时,好吧,谁让人家是百度呢,回去等hr电话吧。
过了几天,hr联系我谈薪资待遇等,又让我跑了一趟,面试这么多家,最累的一次,谁让百度是牛*呢,一顿说,bulabula…
感觉近几年百度发展的不是很好,一直在走下坡路,不知道是不是在憋大招,很多百度人都出来了,不过百度毕竟是百度,还是很厉害的。

阿里

梦寐以求的阿里终于找我来面试了,之前不管是内推还是网络上投递都被拒绝了,原因是我工作不到一年,没办法谁让马云爸爸太厉害,我投递的是杭州的天猫,是做虚拟现实的小组(刚听到这个名字感觉和自己不太相符),这是我到面试完后,才知道的,面试官也跟我说Android上的需求可能不会很多,更多的是VR技术在Android上的应用,包含OpenGL等技术。

一面
 1. 询问了我博客上写的一些东西,从项目立意谈起,到设计,再到详细的技术实现,可谓是面面俱到,由于自己写的博客还是比较熟悉,回答的还不错。
 2. GLSurfaceView的相关知识,OpenGL,Shader,绘制流程。
 3. 询问当前做的项目,以及到具体的实现和优化。
 4. 多进程间的通讯,Binder机制。
 5. 询问看过哪些框架源码,EventBus,Volley讲了一下。
  • 1
  • 2
  • 3
  • 4
  • 5

大概聊了一个小时左右,聊得还可以,基本上都回答上了,中间给了我很多建议,不懂的地方,也会仔细跟我讲解一番,其实有一半的时间都是跟我聊产品,为什么这个产品好,怎样做才能迎合市场,然后怎么设计整个产品等,感觉跟我现在水平不是一个层次的,果然,第二天就给我发了一封邮件,说我现在暂时不太合适投递的岗位。

今日头条

来面试的部门是今日头条的效率部门,是做内部IM(及时通讯工具)的。整个工作环境还是不错的。

笔试
 1. hashmap实现原理
 2. 自定义view流程
 3. 事件机制
 4. activity生命周期
 5. handler机制
 6. 链表加法  例如 1->2->3  +   4->5->6->7 =  4->6->9->0
 7. 设计题
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

笔试题算是中规中矩 ,没有太难的,基本都可以答出来,主要的还是面试。

一面
 1. view绘制流程
 2. 事件机制
 3. activity生命周期
 4. service两种启动方式,如果多次绑定,会有什么结果
 5. binder机制
 6. volley框架
 7. 查找两个链表的共同节点
 8. Rxjava、Retrofit、okhttp相关的,这些我了解的不是很深。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

一面结束后就到了12点,跟着一面面试官去今日头条吃了顿午餐,午餐还是很丰盛的(竟然还有扇贝,果然是很有钱啊)。吃完饭后在空着的工位上休息了一会,因为头条中午是要休息到1:30的。

二面
 1. apk是打包过程,资源文件生成id的规则,xml文件打包后放在哪里?
 2. 聊了聊之前做的项目
 3. Android中的引用以及使用场景
 4. Volley框架,okHttp
 5. 数组实现队列,快排
 6. fragment生命周期
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

和二面面试官聊的一般,中间有一个问题我记得不太清楚(fragment在attach时是否能获得Activity的对象,我的回答是可以),但是应该是对的,然后就询问面试官,他说不对,然后询问是否能跟我讲下,哪里说得不对,面试官让我自己回去查资料,后来回来仔细看了一下,是可以得到Activity的对象,二面完了,等了会,前台过来告诉我今天面试到这里就结束了,如果有接下来面试,会再通知,到这里我以为是挂了,但是我感觉聊的都还可以,不知道问题出在哪里,郁闷。

之前一直以为没有通过,在第二周hr给我打电话告诉我通过面试,现在约一下leader面,原来真的是leader不在,因为leader最近经常出差,hr也不知道leader什么时候有时间,所以一直就没有跟我约时间,现在确定了。看来有时候没有面到第三面,需要根据自己前面面试感觉,如果自己感觉还不错,那多半是可以继续面试的。

三面

来的时候,leader还是很惊奇的,说我这个面试时间拖了有2周,不过的确是他出差了一周,闲聊了几句,然后就正式进入面试了。
主要聊了一些java相关的知识

 1. 集合相关的知识,List,Set,Map具体的实现类,以及相应的区别,ConcurrentHashMap实现原理。
 2. 多线程知识,例如,volatile原理
 3. 内部类和静态内部类的区别,以及使用场景。
 4. 一道关于多线程的设计题,下载一本书的章节1.下载一个list列表。2.从列表中并行下载相应的内容。3.显示下载后的章节。要求:并行下载、章节有顺序,需要尽早显示出来,出现异常错误立马停止下载。
  • 1
  • 2
  • 3
  • 4

大概就是这样一道设计题,具体说的不是很好,很多细节没有考虑到。

接下来就是hr面,基本上都是一个模板。

今日头条

由于一些个人原因,虽然那边已经准备给我发offer,我需要换部门,从效率工程到IES(抖音产品线),所以要重新走一遍面试流程。

一面

  1. 自我介绍,大体聊了以下项目中做的东西。
  2. Top K度算法题,给定一个数组,求前n个最大的数,堆排序。 3. 判断一个view的父类或者父父类是否为listview
  3. listivew的优化,使用复用机制,最多需要创建多少个view。 5. activity的启动模式。
  4. 如何计算Bitmap在内存中的大小?
  5. serizalable和parcelable的区别
  6. volley源码,HTTP缓存机制。
    大体就是上面的问题,聊了将近一个小时,一面面试官还是非常追求细节的,往往是询问到非常细致地方。

二面

  1. 自我介绍
  2. 实现map接口的几个类,以及各自的特点和区别。
  3. ConcurrentHashMap实现原理,Volatile原理。
  4. 快排
  5. Binder机制
  6. 单例模式实现方式,静态内部类实现单例的原理,内部类和静态内部类的区别等 7. 插件化一些问题
    二面大概就这些问题,聊了40多分钟,到了饭点,跟着二面面试官到食堂吃了顿饭。

三面

  1. 自我介绍,聊了聊项目。
  2. 绘制OpenGL过程,Shader语言,GLSurfaceView等,说了说在渲染视频的时候做的优化。
  3. JVM相关知识。
  4. 又说了一遍Binder机制。
  5. Android中一些优化方案。
  6. 插件化原理,主要是DL和 360 DroidPlugin的区别,因为我只看了DL源码,对DroidPlugin了解的不深,就大体聊了下DL实现的过程。
    三面面试官跟我聊了很多,他是履历非常牛,给了我很多建议。

hr面

hr面,一个模板,这里就不详细说明了,因为这边是个朋友介绍我来的,hr之后,又跟朋友聊了会,就走了, 刚走到楼下,朋友又跟我说,leader想再跟我聊聊,我就回来了。

leader面

  1. 自我介绍,项目介绍了一下。 2. GC原理
  2. 插件化
  3. 职业发展
    大体就上面介个话题,聊了聊,然后就算面试完了。 这次面试时间从早上10:30到下午3点,时间跨度最长的一次,面试完感觉整个人都不好使了,非常疲惫,面试 是知识储备和体力的双重考察啊。

面试结果

除了阿里淘宝外,其他的公司基本都拿到offer,这段时间把华为这边的工作都交接完,休息几天,如果有空的话回家停几天。

总结

自己对于互联网有一些小小的见解:随着资本的冷却,整个互联网市场也逐渐的冷静下来。Android应用开发从一开始能说几个四大组件的名词,能随便写个监听事件,就能拿到高达上万的月薪的时代了。归根到底并不是工作难找了,而是Android应用开发工程师这个职位已经趋于正常,再也不是没什么技术也能拿高工资的香饽饽。当然这个也不是绝对的,对于中高级的开发人员来说,市场还是比较缺少的,尤其是知名企业对于招聘员工来说,不仅要求有过硬的技术,还要求有高素质,好的教育背景等等。总的来说,高工资可以给你,但是前提条件是你要足够优秀,或者说让面试官觉得你很优秀。

其实面试过程就是一个把你自己推销给别人的过程,对于我们(毕业不久的同学,因为我毕业不到一年)来说就是要让面试官感觉你技术好,有培养价值。感慨有点多了,还是来点干货吧,大概列举一下每一轮面试的大概范围和深度,但是也不是绝对的,还是要看具体情况。

笔试

对于社招的同学来说,基本上不需要笔试,但是也有公司是需要的,例如 今日头条和网易都有笔试。笔试都是比较基础的一些知识,Java、Android等方面的,一般不会有网络,计算机等方面的笔试,一般情况下大家都能答出来。

一、二面

近一段时间的面试经历来说,一、二面的问题没有什么很大的区别(公司基本上都有3面技术面,但是也有例外,我在网易就是2面技术面。),基本上都是一线开发人员。主要考察你是否有牢固的基础知识和是否在平常开发中能熟练使用。

  • 是否能讲解清楚你所做的项目,以及使用到的相关知识。
  • Android基础知识
  • Java基础知识,大概是多线程,线程安全,集合类,JVM,类相关知识等。
  • Android一些源码的阅读
  • 优秀的第三方框架源码阅读
三、四面

一般公司都是三轮技术面,但是也有四轮技术面的,不过不多。很多公司基本上每一轮面试官都会记录他所询问的问题,以便给下一轮面试官作参考,还有就是避免对同一个知识点多次询问。所以到了这轮面试,基本上不会再询问比较基础的知识。

  • 会从两个方面考察,
    • 广度:比较新的技术(Rxjava,插件化等),JVM,GC,网络,数据库,Android(一般不会询问之前面试官问过的问题)。
    • 深度:一般会通过1或2个问题来考察,例如:map接口下都有什么子类->hashmap和hashtable区别->hashmap实现原理->怎么解决hash冲突->是否了解concurrentHashmap->concurrentHashmap实现原理->volatile实现原理(concurrentHashmap读是不加锁的,使用到了volatile)。
  • 项目中的贡献,所做的优化。
  • 设计能力,基本上不多,这个要看面试的岗位,因为我这里面试的只是高级开发,并不是架构。
  • 工作中的亮点和突出。
hr面

基本上到了这轮,你就算通过面试了。hr会询问一些你的经历,最主要的还是和你商定薪资待遇。在这轮,大家应该要对自己的薪资水平有一个大体的了解,一般都是在原来的工资基础上增长20%~30%的样子,当然,如果你在面试过程中表现非常优秀,也可以不受这个限制。当然如果公司诚心要你,就算你要的工资过高,hr也会委婉的告诉你,不会直接把你pass。

选择公司

由于很多小伙伴都在询问我,最后选择了哪家公司,因为之前在写这篇博客的时候,刚刚面试完不久,还没有决定去哪家公司,所以就没有写上去。最后我选择今日头条,这边的发展更适合自己,当然这个不是唯一的选择标准,我觉得选择公司应该从以下几个方面来考虑:

  • 公司是否在上升期。
  • 所做的东西是否有市场价值,自己是否感兴趣。
  • 通过面试基本了解将要共事的同事技术情况,毕竟如果你周围的人很优秀,那么你肯定也不会差,一定要跟优秀的人一起共事,你会获得很大的成长。
  • 薪资待遇,毕竟我们找工作就是为了养家糊口,我相信这一条也是很多人决定一家公司的重要理由之一。

以上就是我个人对于如何选择一家公司的一些想法,不足之处希望大家能指出。


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/683625
推荐阅读
相关标签
  

闽ICP备14008679号