作者:yummyLau
文章篇幅较长,建议耐心食用,相信对你有帮助。码字不易,如果有误,欢迎指出。
前部分是面试经历,后部分是附带的问题笔记/推荐回答/书籍。
今天去上班的路上,看了下手机的掘金,发现前些天的 《这些年,我爬过的Android坑|持续更新》 一文收到不少点赞,很开心。一方面是自己的文章收到认可,另一方面是文章内容对读者有帮助。从2014/10/31 在 CSDN 平台 写博客到 2016年中在 hexo 独立博客 上记录自己的工作,已经过了 6 年,大概有 200 多篇。
直到前些天有个外国的朋友看到我独立博客上的一篇文章记录的问题,发了 gmail 互相讨论下了,他表达了 “他找了很久才找到这篇文章记录的这个方案,很感谢你”。
让我萌生了 “希望自己以后写的文章能够更好的帮助到别人” 的想法,所以我才想写一写技术及经验文章。
本文按照时间轴,从我在校求职到毕业后的面试,列出一些技术点及我的想法,希望够给疫情下的应届生及求职者一些参考,同时更加坚定自己内心的想法,不要放弃!(部分内容从我以前的文章整合,如果已经阅读过该章节,可跳到毕业后的面试直接看),以下内容我基于时间线,以第一人称的口吻阐述。
一、应届坎坷求职路
一个北京非985/211普通本科生,计算机科学与技术专业。以前老是梦想能考一个厉害一点的学府,学习物理专业(因为初中和高中对物理比较有兴趣),无奈高考考得不尽人意。来到了计算机专业,才知道有C语言这玩意。
2013年大一,专业C语言成绩太差,被分配到B班学习。临近学校工作室(有真实项目锻炼)招新,那时候基础太差,又不愿意做一个loser。正巧同乡会有一位学长进了该工作室,我向他了解了该工作室的情况,得知有移动Android开发方向。
那年,因为当时用过索尼手机,上面的小游戏有“Java”标志,女朋友喜欢小游戏,于是打算学东西开发一个小游戏给她玩。于是努力地啃下了Java基础便去面试,也很幸运地进了工作室。学完Java回头反而把C语言知识打通,成绩一直居B班首位。别人老说“学习其他语言前先学好C语言,看来我是一个奇葩。
2014年,跟着工作室开始做项目。前后差不多完成了5个Android方向的项目,主做的有3个。这一年,边学习Java边学习Android开发。
2015年,春招前。我借助工作室的项目经验,制作了简单的简历之后,假装成大一届的师兄去参加学校举办的招聘会。面了三家,最后有一家对我印象挺好给了我 offer(感觉很罪恶)。但是这三家面试让我了解了我简历上的薄弱点,知道了那些知识点我只会用但是原理,那些知识点必须深挖才能在面试上突出自己的能力。于是我到 2015年秋招前都在为这部分做准备,那时候一心就只想进微信。
从 2015 年春招到2016年春招,一共投了 CVTE,阿里巴巴,腾讯,唯品会,4399,珍优科技,YY,百度,迅雷,京东,酷狗,汇丰,技德,美团,网易。这一年的经历起起伏伏,心情和体重都有较大的波动。
原因是我被拥抱了变化,打乱了我的方向,但是我又坚持了下来,收获了自己心仪的 offer。
这里要划重点:
对于学习计算机的同学而已,大三这个时期很重要,原因是很多大厂会提前招聘实习生,此时只要你技术基础相对较好,学习态度端正积极,借助自己有实习或者工作室的项目经验,很有很大可能通过实习招聘提前进入心仪公司的,并且实习生的转正几率很大,所以如果大三下学期可以到大厂实习并争取转正,大四就有足够多充足的时间可以自己慢慢安排!学习,旅游,谈恋爱!都可以!
如果大学可以重来,我一定,一定大一就开始努力学习
CVTE实习招聘(第一次)
CVTE是春招中比较快的,也是我面试的第一家企业。
image在线测评:专业+综合HR面:华工酒店完成一面HR面,主要问职业规划还有技术掌握程度。
技术一面:两个Android面试官,<typo id="typo-1634" data-origin="问了" ignoretag="true">问了</typo>一些项目和Handler机制,布局优化等,手写设计模式还有排序算法。
技术二面:我的天〒_〒,是一位数学家(这里吐槽下,我从下午2点等到快6点才面试,却很匆忙安排了个数学家。拖这么久的原因是那些实习的HR安排很不当,那时候轮到我的时候刚好到午饭,而且是我一面面试官,所以就让我去吃饭等会换面试官,结果HR就把我标记成已面试,而中途HR又换了几次,每次都认为我面试了,最后拖到6点我真的很疲惫很没状态,无奈(╯-╰)/)。
主要手写HTTP请求头,某些返回码的含义;数据库索引底层实现;手写算法判断链表是否有环;Base64底层实现,直接说出A转化后的结果。整个面试过程都被压着问,感觉很不友好,因为没啥状态,很多东西懂却头脑一片空白,竟然忘记了A的ASCLL是多少,想和他解释下Base64的转化过程被拒绝,要求说出结果不听分析,我也真是醉了。
结果:在宿舍等了一个晚上,挂了。好揪心好不甘心。于是开始继续复习,准备腾讯春招和阿里。
阿里内推实习招聘(第一次)
由于过年在家那段时间,工作室的师兄帮我们内推了阿里巴巴春招岗位。自己对部分不熟悉就写了淘宝和UC,后来内推名额满了,一个研究生师兄帮我内推到yunOS事业部。现在看来,我更推荐学Android的朋友选择支付宝和淘宝。
image阿里一面:第一次打电话给我的时候我正在等CVTE的第二面,所以和面试官说等会再面试。第二次打电话给我的时候已经很晚,那时候在地铁上清不清楚面试官说话,说等会我出地铁再面试。出地铁的那一刻好紧张,CVTE的面试瞬间给我抛到九霄之外。
具体的面试内容我大致只记得谈谈负责的项目;为什么会喜欢做安卓;安卓的系统启动机制;安卓应用的优化还有socket的应用。后来问提问环节问了面试官的工作地点和我面试岗位的工作后,发现是在杭州,请求面试官能不能帮我转到广州后,他说可以。
阿里二面:大概在一面过了一个星期后打过来,主要面了Java基础;线程同步;集合机制;安卓项目中用到的技术;还有一些不太记得了,最后谈谈规划后发现这个岗位还是在杭州。所以又请求面试官能不能转到广州岗位,他说可以后结束面试。二面过后,官网发现自己的状态变成拒绝后重新多了一个简历评估的状态。
阿里三面:大概距二面过了15天,我本来以为阿里已经拒了我了。三面面试官打来的时候是我正要去看校辩论赛开场表演赛。刚出门就接到面试官电话,谈了一下Java技术和Android技术后觉得我OK,说了是yunOS事业部的,问我有没有兴趣还有以后的职业规划后。提问环节问了还有没有面试,面试官说没有了。官网状态瞬间变成3面通过。
阿里四面:在看比赛过程中,接到总监电话,表明了是yunOS事业部是否想参与实习,表明我通过事业部面试,问我家庭情况,个人性格及其在校活动,职业规划等,并和我说了入职时间和会有人后续联系实习事宜。
结果:阿里内推通过,选择阿里巴巴yunOS事业部实习
腾讯内部机会(第一次)
这次面试是和我工作室安卓组的一位朋友去微信总部直接面试。因为之前我们因为感兴趣参加了华工的微信课程学习,朋友得到了面试机会并也跟着前去,那时候是5个人一起去的。
image笔试:完成一份英语的Java笔试题后等通知。
一面:一位斯斯文文且很帅气,负责网络底层开发的面试官面试我,不得不说微信的办公环境很nice,我们在桌球桌旁边面试,整个过程气氛很好。
问了我Java基础和一些实现细节,安卓也如此。微信的面试官很注重技术实现的细节和优化,虽然有些面试题忘了,但是我还记得他在玻璃墙上画设计模式和SQLite底层索引实现及其优化的图。
人超级好,针对我的不足指出给了很多建议。以致于之后我面试过程中遇到过此类问题都能答得不错。很感谢这位面试官。
二面:一位身材高大,比较沉稳的,负责NDK开发的面试官面试我,问了安卓事件接收和传递机制;Linux进程和Java进程有何区别;问了一个主线程绘制UI的问题;C语言和Java语言的应用及其各自的优势;自己的规划等问题。
三面:是一位微信元老架构师。为了项目技术和实现细节;问了Http技术还有密钥交换协议;安全通讯;还有一些忘记了。到四面的时候只剩下3个人面试,面试结果是3选1.
结果:跪了。工作室的朋友面试功过;另外一位华工的朋友也没进。让我们去参加腾讯春招。这次面试看到自己的在网络方面很不熟悉,网络课程要等到下学期才开始,所以只能提前自己恶补了。
腾讯实习面试(第二次)
笔试:华工笔试,内容涉及C语言,C++语言,Java语言,数据库,计算机网络还有算法(网上有好多笔试题,可以借鉴参考下)。
一面:喜来登酒店,东圃。比较紧张,面的依然是项目技术,Java基础,Andriod基础,算法(算法这一块在剑指offer中题目),操作系统中断,进线程区别;计算机网络 TCP,HTTP相关,NAT等
二面:喜来登酒店,东圃。面的和一面差不多,只是知识点会比较深。比如反射机制会问到Android实现场景和优化等等。
HR面:和HR说明了想进微信团队,HR也表明了QQ团队及其团队提供的平台,也向HR表明了通过yunOS事业部实习,HR让我自己思考及其选择。
结果:没能参加鹅厂实习〒_〒。现在工作回想起当初如果去 QQ 可能就不会出现后续的曲折,但是想想每个决定都是自己做的,只能自己承受。
到此,春招告一段落,最后选择了yunOS事业部实习。
整个过程面试安排得很紧密,会觉得面试后很累。建议参加春招的小伙伴能选择3-4家自己追求的企业针对性去复习,不推荐海投。我本已为春招进了阿里后,能学习留在杭州,接下来一年的大四生活可以安排更多的学习机会〒_〒。
然后最后并没有,那一年的实习成功拥抱了变化,虽然能转正到北京或者在杭州转正做C++,但是并非自己所好。
当大三春招没有办法提前去实习转正的时候,大三秋招其实到了关键的时候。一般在我们学校学计算的,基本大三秋招确定了 offer,大四去实习,这个是大部分人选择的规划。所以在yunOS实习之后,从杭州飞回广州,回来的时候是9月5号,进入秋招时段。
阿里实习面试(第二次)
因为知道事业部今年实习生基本都没有转正机会,身边很多实习的研究生师兄自己在阿里平台上联系其他事业群。
无奈我还天真的以为事业部会安排我们面试其他事业部,然而并没有〒_〒,让我感觉到巨坑。
后来自己在阿里平台上搜了做Andoird工作的很多工程师后,有一个主管愿意接纳我。面试了一些内容后,在后续面试过程中由于岗位需要在北京工作,而且可能需要转前端,不符合自己的发展意愿,所以就明确说了,也很感谢这位大哥给我机会。
腾讯实习面试(第三次)
回到广州的时候已经9月初,那时候刚下飞机朋友就说明天一起去腾讯笔试〒_〒
笔试:基本的内容和春招差不多
一面:主要问了项目和在阿里实习负责的项目,Java内存和安卓基础
二面:Java和Android的问题基本都能答得出来,卡到算法。面试官给定一个坐标,快速实现该坐标方圆1公里内的酒店,坐标可动。后来因为解释不太清楚和面试时间拖得太长,所以面试官让我回来发答案给他。最后答案解出来了。面试官再出了一道题,因为自己的表现让面试官感觉到不够细心和沉稳,最后没能过二面。
结果:这次的失利让自己变得很急很慌。腾讯本来以前自己大学最想进的公司,结果在最关键的秋招失败了,而且自己的阿里实习的时候并不是做安卓技术开发工作,一定程度上让自己的项目停在春招水平,虽然也有在深入学习其他知识,但自己开始紧张。
唯品会(第一次)
image笔试:参考网上历届的试卷,笔试题比较基础很简单。
一面:在笔试过后,接到面试通知。问了阿里的实习项目;问了ListView实现细节和优化;问了Button定制场景;问了Java基础和安卓基础;
二面:一面过后在教室外等候,受到二面通知。主要问了阿里的实习项目;项目用到的技术;Java基础还有安卓内存优化等。
HR面:过了二面后等了一小会面HR面,HR是一位很资深的大叔,从百度调到唯品会。问了是否能用英语面试,回答否;问了生活背景;问了实习经历;问了性格特点;然后被定义为太消极,童年有阴影,我也是醉了。我是从小打工,而且从小学,基本每个暑假寒假都要,而且都是那种一天做12个钟,为的是赚生活费和补贴家里的学费。这段经历让我懂得了吃苦和坚持,怎么就让我变得消极和有阴影...
后来HR讲了自己人生经历,说世界观,人生观,价值观。我说价值观可以变,他说可以吗?价值观不就是人对事件价值的判断吗?难道不是随着人的阅历增长有所调整改变吗?不过他的经历让我深为佩服,从入行讲到佛学,是一位很有学识的HR。
结果:跪了。原因,至今未知,不过也好像懂得些什么...
腾讯(第四次)
微众银行的面试已经在秋招末。在微信公众号得知有次机会,故奋不顾身去参加。
笔试:和腾讯笔试题差不多。(记忆模糊)
一面:也是在东圃酒店。〒_〒面我的是C++工程师,问我会不会C++,我说不会后...狂问算法,我记得是4道,具体不太记得。其中三道都能手写出来,最后一道是小存储存大数据,用的是位图方法。由于自己在面试的时候想不起来(后来回来复习大数据题目的时候才掌握),故只能用hashmap存储,效率不高。
结果:面试官让我等,结果无果〒_〒
阿里(第三次)
实际上从HRG在杭州告知我回来后会有一个终面部门交叉面,结果在腾讯失利的第二天。直接电话说“对不起......”我直接说理解后挂了电话。
在面试汇丰过后,一段时间,差不多到了11月末,面试了阿里健康。得知从集团简历池中选了我之后安排面试,谈了转正待遇后安排面试,两面都视频面试。
一面:安卓基础;项目技术;性能优化;学习目标;Java基础及其内存回收等
二面:项目技术;安卓Framework知识点;性能优化;开源框架知识;提问环节问了所做业务等 结果:过了,资薪待遇谈了也清楚了。因为实习时间及所在地点时间与自身情况冲突,也不是自己最想要去的部门就拒绝了。
迅雷(第一次)
面到这里基本秋招都已经结束了,学校基本快放假。得到迅雷的面试是由工作室学长B推荐的。
由于部门比较缺人,所以直接技术面
image技术VP面:项目技术细节,面试官抓了很多项目细节问,比如说多线程断点下载的每一步,每一个代码逻辑等;性能优化,这一方面我是有过准备的,回答得比较系统,比较满意;
最新安卓技术了解情况;Java技术细节,问得很深,从程序启动到垃圾回收,〒_〒不愧是vp;最后问了下Java异常和安卓异常的区别,答得不太好;
问了发展意愿及其职业规划等等。
结果:直接发offer...很感谢迅雷的HR和技术vp,人真的很nice,后来考虑到发展地点及其工作,没有接受offer,很可惜。到现在心里还一直对负责我入职的HR和技术Vp心存愧意。
网易(第一次)
image也许是我不愿意放弃,不愿意将就,所以我才会选择坚持,感谢网易不拘一格。
放假了,基本同学朋友都回去家里了,整个宿舍只有我一个人,年末了,也该收拾东西回家了。
网易的招聘,是我在校招日历上看到的,当时和一位学java后台的哥们一起投的。然后赶紧在校复习知识点和开始画安卓知识架构(我喜欢用画图的形式让自己掌握的知识互相关联),然后开始在牛客网(之前面试的企业历年笔试题基本都在上面能找到,是一个刷题的平台)及论坛找网易笔试题和面试,基本刷完了网易互联网和网易游戏的题目,虽然有些不懂可是还是需要硬啃下去。接近笔试前夕,我们还是没有收到笔试通知。
哥们的表姐也投了网易,不过人家是名校硕士〒_〒,收到了面试通知,我俩妥妥地跪了。我不甘心,我认为自己能够做得出网易的笔试,如果能有一丝机会,死也要让我死得明白。于是我俩去“霸笔”...几间笔试科室,广州地区几十个运营岗笔试名额,几十个产品笔试名额,只有6个技术笔试名额,这让我瞬间很慌很难受。
哥们让我走,估计我们没机会,可是我那一刻真的很难受很不甘心。
我硬着头皮进去问HR说 “我来自...,我投了贵公司的技术岗位后没有收到通知,请问可以给我笔试机会吗?”
另一个HR说 “没收到通知是不可以笔试的,除非有人没来笔试,试卷只有6张”。
我把自己的简历递给前面HR。
“这个是我的简历,如果技术岗有人没来面试可以不可以给我一次机会,我在外面等候,谢谢你!”
我出去外面后,刚才接了我简历的HR出来了说“你们都是没有接到通知的吗?(还有一个产品来霸笔),在这里等一下,如果有机会我就来通知你们。”
后来笔试开始了,有些参加技术岗的还没有来,可是没有人通知我们进去笔试。我哥说等到30分如果没有就走了,后来30分过了,还是没有人通知我们。我不愿意走。
“要不你先走吧,除非HR出来说没有机会,不然我多等一下吧。”
笔试开始了一段时间,有一位HR走了出来,说 “你们都是来笔试的吗?进来吧,把简历给我。”
我很激动,自信地完成了那份笔试题,到现在,我还依然能记得那时候的感觉。哪怕失败,也要让我知道我不行。
一面:一面是在网易大厦附近的E时光,三个面试官,一个Java面试官和两个Android面试官。
问了:Java基础;线程安全处理;手写解决判断链表是否有环(当时写了思路);手写例模式(进程安全版+枚举);Java程序启动过程(5个过程);Java内存回收机制(包括回收算法);安卓基础;Handler机制及其源码(面试官细节到具体代码及方法,〒_〒很年轻的面试官,技术好扎实);消息传递机制(具体到View和ViewGroup的区别);框架了解及其imageloader;Lru算法及其软弱引用的使用;分辨率适配等等。
HR面:网易大厦,问了面试公司及其offer情况,如实回答,希望能在广州;发展规划及其学习习惯;网易招聘的优缺点;阿里平台资源的优点;网易bobo产品及其同行产品的了解比较;提问问了是否还有面试,具体工作还有是否可以提前实习,实习安排。
面到这里,已经年末了。HR说可以提前回去家里,我还是依然留在学校几天。整理这几天的面试问题还有面试经验,整个宿舍楼没有人,只有我和几只流浪猫。偶尔做做饭,它们也会来我宿舍,我也会给它们吃的,感觉自己变得很安静。
在回家的大巴上收到了网易的终面,表明年后还有终面。面了那么多公司,累也该累了,反而觉得很释然。带着这个面试消息回到家了,始终没能放得下。除了在家了帮帮这帮帮那,在朋友家聊聊天,基本都是在看书,也买了一本新出版的安卓技术的书,过年那段时间看完了。初九那天回到学校,继续复习,整理在家学习的和以前的知识点,打算面完网易后休息一段时间,希望能倾尽自己所有心力去完成这次面试。
终面:HR面+总裁助理面。因为不知道是否是技术面,所以把所有的技术点用三天都复习完了,用一天准备了HR面及其自身情况的问题,主要理清楚说话的逻辑思维。
HR面,是我年前的HR,很亲切。和她聊了下年前到年后这段时间的学习情况及其学习了哪些新的知识点;自己每天的学习规划;bobo产品竞品分析;使用过的一些工具,比如思维导图为知笔记(因为之前裸ubunut系统,所以只能用为知笔记);职业规划;实习内容及其轮岗事宜;期望工资及其在手offer薪资;行业薪资等;整个过程氛围很nice;面试完后搭车快回到孤岛的时候收到电话通知到需要再面试〒_〒,是另一位面试官。
当时心里其实蛮紧张(难道对我之前所述技术有疑惑?还是我表达的内容公司还有争议?)。在车上我回想着整个几轮面试的过程,细节到我所说到的内容,技术在脑海里过了一遍。对自己说“来吧!如果你想问我技术,来吧,我都做好准备了!”
就这样,我很有信心地冲了回去(快6点了,怕面试官下班)。结果回到公司竟然发现面试官是一位很年轻亲切的总裁助理,她和我表明了回来面试的原因和给了一杯水(〒_〒,感觉好感动),表达了歉意后开始面试,问了生活情况;学习背景;兴趣爱好;长期规划;聊到网易bobo的产品及其同行同类产品;事业部发展前景;网易公司文化;面试官自身在网易的经历;女朋友及其未来规划;学习习惯等等。整个面试过程更像是在聊天,是一个了解双方和建立信任的过程,很nice。
结果:过了。也欣然接受了offer。
在面试阿里腾讯三四次的过程中,虽然有收获到其他 offer ,但并不是我大学时期心仪的 offer。
所以到最后,还想去网易搏一搏。
结果这一搏,就一直待到了现在。我觉得人生很有意思。高中的时候,我努力想考一个物理专业,但是后来我却进了计算机专业。大学的时候,我努力想进腾讯或者阿里的技术部门,但是后来我却来了网易。就是如此梦幻。
假如你已经是应届生了,经历过一两次batm的面试失败没有关系,只要有机会就上。哪怕最后你最心仪的机会没有了,你要懂得抓住当前最合适你的机会。真的,很多时候未来发生什么你都不知道,或许当前的机会,才是最适合你发展的。
二、被迫考虑机会
真的,很多时候未来发生什么你都不知道!(预言家 =。=)。
我也不会预想到我工作快一年的部门因为公司架构调整而需要被迫考虑重新找工作。实际上,我非常喜欢当时部门的人,部门是小团队项目化作战,非常灵活,技术和产品自由度非常高,大家配合得很愉快。
虽然那时候大家分道扬镳,但是我们现在的微信群依然保留着之前最完整的人员,还很活跃。
工作认识一知己,前辈,之前就业于UC,平时交流甚欢,喜欢同他讨论和交流技术问题,在看身上看到了开放与追求的精神。
正值事业部结构变动,整个事业部工作氛围和模式都发生了巨大的变化。他建议我去更大的环境更好的氛围尝试,我也坚持着自己的职业规划和学习道路。他同事帮忙内推,不巧的是那天发烧=。=,和公司请了假,本来担心状态不好,不过一想到自己以后要做的事,立马就飞了!不要怂,就是干!
面试地点在黄埔大道这边,没想到离我住的地方那么近!二十分钟就到了,原约在2点的面试,我12点50分就到了...提前去面试也不好,毕竟太早去也不是守时,也会打乱别人的计划安排,故在楼下走了几圈,有点冷,不过满满的热情啊!把之前准备的知识都过了一边,算法,数据结构,网络,操作系统,java和安卓。自己在脑海了想了n多种面试问的业务场景,组织表达了一遍上楼了。
阿里(第四次)社招一面
天呐鲁,我还以为要笔试呢,直接进入正题面试,有点措手不及,不过先自我介绍,所以我调整了一下情绪和思路。面试官很帅气啊,是一个很年轻但是应该有蛮长经验的面试官。问得问题主要有:
- 推送sdk底层实现
- socket相关实现
- mvc mvp mvvm区别与项目使用情况
- 网络层相关设计,volley底层实现,缓存相关
- 自定义view相关
- 下载模块涉及,成功率相关
- 弹幕与播放器相关
- 跨进程通讯手段与注意点,webview相关
- EventBus相关
- 性能优化经验及手段
- 为什么想要换工作
- 兴趣爱好,工作室情况,如何协调工作室与辩论队
- 平时学习习惯和安排 上述的点可能有一些遗漏或者记得不太清楚,不过整体面试官给人的感觉真的很好,大厂的环境也赞!除了前面聊技术外,也聊兴趣爱好,平时一些习惯等,整体来说氛围很轻松。
阿里(第四次)社招二面
二面是一个脸色红润,很和蔼的一个面试官负责。想了一下,除了和大学廖老师沟通有这种感觉之外,这位面试官给我一种导师的感觉哈。面试的问题主要有:
- 网络请求涉及,如何设计缓存
- 性能优化手段,场景
- dp的设计
- 熟悉的底层源码,广播底层实现,这一点自己确实还了解不够,不过自己讲了哦从wsm->activity->view的事件传递过程
- 聊之前阿里的实习
- 为什么想要换工作
- 职业规划
- 短视频行业,Bolo相关及一些竞品,因为平时也会留意自己开发的软件及竞拍,行业情况,所以有一些自己的见解
- 聊兴趣爱好
- 聊王者荣耀产品相关
整个过程面试官给人印象很深,除了互相交流得开外,他的问题也很有深度,不过如果真的答不上就请教下就好。最后面试官问了是否有哪些问题提问咨询:
- 从刚才所述的职业规划,希望面试官给出意见和建议
- 如果有后续面试,会在什么时候安排 还是到上周的面试办公室,10楼的环境给人的感觉很清新,自由。
阿里(第四次)社招 leader 面
面试官很年轻,让人感觉很有干劲。其实今天一整天都昏昏沉沉的,人状态很差。但是和面试官聊天,能说到的都是内心的一些想法,所以聊起来很舒服,他的一些建议也很值得我思考反省。
- 自我介绍
- 岗位要求
- 实习内容
- 工作负责内容
- 换工作原因
- 优缺点
- 学校经验
- 家庭情况
- 个人现状,还有我的眼睛哈 面试的问题可能记不太清楚,但是有两个点我很深刻。第一个是自己现阶段要稳下心沉得住气。几位面试官都和我说到了这一点。确实是这样,我很看重职业生涯前几年的学习积累与心态沉淀,也明白了当前自己最需要做的事是什么。沉得住气,我自己的理解是:
- 心态不要浮躁,相信自己的规划和按照自己的规划走
- 学习新知识,要学会从宏观上懂得一个知识牵扯出的知识网,更要耐得住心去一句一句代码debug每个细节
- 清楚地看清自己的技术现状,虚心地取长补短
那天结束之后,用新的心态去学习retrofit源码,记得大学的时候看imageloader,volley的时候,会没有太多的耐心去深挖,虽然知道流程和某些细节,但是对底层原理其实没有足够的掌握。
很奇怪,今天越挖,发现自己对Android越无知,我第一次感到自己无知时,确实开心的
当我向我之前同事说某个源码细节的逻辑和我们项目所用到的逻辑有偏差时,他去调式之后发现“是项目用错了!”。感觉心里还是美滋滋的。
第二个是自己表述不够精简,有时会用辩论的方式来解释一大堆东西,会让听众感觉很啰嗦。这也是我的问题,改!应该尝试先下结论后再根据情况做分析。面试完走出办公室,还看到面试官拿着笔记本,打了个招呼,感觉心暖,感谢这次机会。
阿里(第四次)社招HR 面
其实hr面应该是我最紧张的一面。可能是最后一面,也很看重这次的面试,担心自己说得不好。
过程中自己也因为喉咙的原因喝了多次水,思维中断了好多。不过,面试官是一位比较有亲和力的姐姐,无论的问问题的方式还是追问一些细节,都让人挺舒服的,不会感受到太大的压力。
- 入职半年多,为什么选择换工作
- 现在事业部状况
- 负责的项目工作
- 最困难的事是什么,想到的是项目难点和当时在工作室做项目,那段时间确实比较艰难,算印象最深刻的
- 职业规划,我可能表述不太好。从2-3年阶段性计划,到今年,这个月,这周。讲得逻辑性不好。自己的习惯确实是工作日+周六周日安排,可能当时比较紧张,讲得很乱。
- 坚持最久的事,这个应该是和我兄弟去跑内环哈,从半圈到两圈是如何炼成的
- 最有成就感,想到的是项目难点,后面仔细想,确实是因为攻克的难点给用户带来好体验。我还记得菠萝种子群的一个好友,网易忠实粉丝,和他交流过很多次关于菠萝的体验,有一次和我聊到输入法的原因,后面自己就花时间重构了。其中还和hr聊到关于攻克难点和所花的时间问题,确实是我自己表述不好,一件事的难易程度与完成时间只是正相关。,当项目频繁迭代,需要想办法缩短工时并保证质量后“偷”时间来做重构优化,其实自己那时候很有压力。这些东西不是需求,而是你想让产品更好却想去做,改得好固然好,万一改不好,那就是浪费时间,可能会应该当前开发状态。和很多同事沟通他们都不会选择这样去做,要么要求产品加工时,要么就不做。可是自己很难接受放着不管吧。后面用来两个多星期的午休和下班琐碎时间,周末空闲时间把东西做出来,第一次正式给项目重构使用,我是很自豪。最开心的应该是那位好友说的“菠萝的开发真不错!至少你们对用户有心”
- 薪水相关 总的来说,今天面试的表现,自己给自己的评价是一般。最后沟通的时候因为薪资问题最后黄了
三、不甘落败尝试蚂蚁金服
蚂蚁金服的面试机会是那时候在看机会的时候,在脉脉认识的一位蚂蚁金服的面试官那里争取的。在沟通过后,对其部门的意愿挺大的,所以就尝试下把简历给了面试官。
过了几天,没想到收到了其部门HR的面试邀约。刚好那时候公司部门架构调整到了尾部,我们可能被合并到一个新的部门中开展新的工作。可能大学实习给我留下非常好的印象,很喜欢阿里的技术部门,加上 UC 的面试没有如意,所以就毅然进行面试。
阿里(第五次)社招一面
- 介绍自己
- 介绍简历上的项目
- 高性能列表实现,重点围绕 recyclerview 展开,如何复用,如何缓存
- 性能难点如何攻克
- 性能优化方面项目中做了哪些工作
- 热修复原理,类冷启动修复原理,类热修复原理,classLoader双亲机制
- 换肤原理
- 设计一个图片框架,我考虑的是如何加载,如何编解码,如何缓存,api的易用性,大部分参考 glide 思路
- 在很多数中找出前n个最小
- 自己的方向是什么?想做业务,还是想做专点的技术,如何理解项目架构。
- 反提问:“自己技术性回答得怎样,有哪些改进。” 面试官给的建议是:技术还不错,但是介绍部门业务和自己的切合度时需要 “表述要简洁,逻辑要清晰”,
阿里(第六次)社招 leader 面
- 介绍自己情况,学android,实习经验
- 介绍网易经验,哪个项目最大,项目规模,项目人员分布
- 擅长哪一方面,这个问题非常致命,一定要选你足够理解的,我那时候讲的是性能优化,但是感觉讲的不好
- android 虚拟机区别,编译区别,dex区别
- 热修复流程,原理是什么,业界有哪些方案,对比如何
- 打包流程是怎样的
- 应用启动相关流程,从孵化进程到MainActivity#onResume绘制整个流程
- 新版本android特性
- 手势滑动事件分发
- view绘制流程
- gradle执行流程
- apk安装底层细节
- 最后留了一道算法题,我做了两天之后发给面试官
阿里(第六次)社招 交叉面
- 介绍自己
- 项目经验,团队情况
- 对网络是否熟悉,一次http请求,https整体实现
- 以后想做什么,如何规划自己技术
- 开源贡献,博客记录相关的开放性问题
- 反问:后面是否还有技术面试,得到的答案是基本不会有了,等 HR 面试就好
阿里(第六次)社招 HR面
- 介绍自己
- 项目经验,团队情况,学习情况,薪资待遇
- 未来技术规划,是否考虑杭州,未来家庭规划
- 反问:大概多久会有答复,得到的答案是当周周五前。
当周周四收到了人生中第一个阿里的正式 offer,还是我最心仪的蚂蚁金服的技术部门的 offer。技术方向和薪资待遇都大大超过我的预期。HR 让我考虑一周之后给答复。
过了一周,我决定放弃这个 offer,并开始自己新的技术规划,在新的部门好好干。一干,就干到了现在。
如果到现在问我,“当时放弃蚂蚁金服的 offer 后悔吗?”
我会说 “说真的有点遗憾,但我无法比较孰好孰坏,我现在就挺好的。”
如果你刚开始出来面试,那么就要用心去准备,去模拟,把每个机会都抓住。
如果你已经面试了几家但是都还不理想,哪怕是疫情背景下,你不要将就。我一直都觉得做技术的不要将就,可能是我的性格。那么继续尝试,把你每一次的面试的经历都记录下来,面试题是什么,你是怎么回答的,甚至你可以在面试的时候把自己的回答录音下来,回去好好听好好修正。一次会比一次好。
如果你有几个offer在选择上出现了分歧,建议要开始规划从职业规划来考虑offer。
如果你打算未来深耕音视频,那么短视频技术offer则大于非短视频技术offer。如果你打算考虑往技术经理/技术团队管理,那么能带团队的offer > 不能带团队的offer,参与技术选型,技术架构搭建的offer > 负责某一块业务的开发 offer 等等。
这几年下来,我发现 “选择” 和 “努力” 在不同时期有不同的侧重。
- 毕业时期,“选择” > "努力",好的平台能带给你更多的机会,更好的薪资待遇,让你的视野更广;
- 毕业前5年,“努力” > “选择",当你有一个好的平台之后,你要懂得利用平台资源去学习,比如各种内网,公司技术福利等,并借着平台项目的实践机会去野蛮生长;
- 后几年,“选择” > "努力",这是因为前几年为了积累的专业优势或更高的视野让你看清你以后要干什么,如果说选择的是平台,那么这个选择就是未来要尝试突破的方向。
当然,这些想法受限于我的经历,难免难以苟同。
四、非技术性问题的面试准备
非技术性的问题,实际上很多时候程序员回答得并不好,除了表达缺乏逻辑性外,沟通不畅也是一个问题。但事实上这些问题都可以提前准备的,而且我自己以前准备面试的时候都会把这些问题过一下,对着镜子表述。你只需要针对每一个问题点记住几个关键词,然后尝试脱稿,自己尝试把它串起来表达,几遍之后基本就 OJBK 了。
以下回答仅供参考。
自我介绍
我是来自xxx的xxxx。目前在xxx组Android研发。
平时基本能提前完成需求,经常会给产品同学提供一些技术上的意见或改进,并自主做一些技术调研来优化产品。
另外,我更愿意让别人感受到,我是一个随和但执行能力知足的人。我喜欢组队答辩论,乐于与别人沟通与想法碰撞,乐于分享我自己观点与博文,因为我认为分享不仅仅是知识的传播交流,对他人也会有知识上的重新认识的效果,同时也是对自己知识体系的一个巩固也会增强自己的信心,对团队而言,能活跃整个技术氛围,让工作变得轻松,对新技术有渴望与追求。
但同时,我对自己的要求也非常严格。工作上我喜欢通过画逻辑图细化需求实现,并按时从点攻克,这种方法非常有效。而职业规划上,我会细分到每一周,每个月的学习计划。每一年或者每个阶段我应该去做哪些事情。
可能有人会说,我给自己画圈限制死我的生活。其实不然,恰好相反,当我到达某个计划节点时,我更清楚我应该做什么且明白我为什么那么做,这会让我对生活变得更有信心与热爱。
平时看的书
技术类的书比如
《Java编程思想》《Effective Java》《突破Java程序员基本功的16门课》《深入理解Java虚拟机》 《Android高级工程师进阶》《Android研发录》《Android开发艺术探索》《打造高质量Android应用》《Android应用性能优化》 《安卓内核剖析》《深入安卓卷1》《深入安卓卷2》《Android系统源代码情景分析》
非技术类的书
《麦田里的守望者》《小王者》《少年维特》《世界因你而不同》 技术类的书阅读带来技术收获,非技术类的书阅读是兴趣,是扩展视野等都可以
怎么解决问题呢?
先找到问题的原因,然后在找解决问题的办法,找到问题的原因比找到解决问题的办法更重要。
如果你不能解决,那么你可以求助于其他人,而当你不知道问题的原因的时候,你去求助别人的时候,别人还帮你去找问题的原因,这肯定会浪费很多时间的。
先不要找解决问题的办法,先找问题的原因。
一旦你了解解决问题的思路,那么当问你一些开放性的问题的时候比如 “项目里你遇到xxxx情况,你怎么处理的?当你解决不了的时候,你会怎么做?”
那么你就可以围绕上述的逻辑回答 “遇到xxxx情况的时候,首先我会分析出现这个问题的原因,(此处省略1w字),最终解决了。或者解决不了的时候,(这里需要强调自己能用的都用了,能查的都查了)就会去请教这方面比较专业的同事(此处省略1w字),最终这个问题在他的建议下我成功解决了。”
为什么选择离职
最主要的原因还是与自己的职业规划有偏差。
自己希望能呆在一个有技术方向性与能充分交流碰撞的团队中,希望能充分发挥自己更多专业能力,在比较充实的节奏中度过职业的现阶段。因为事业部重组的原因,我们的项目组被分派xxxxx做xxxxx,目前只需要保证完成工作即可,codereview过程中,能感受到迭代功能完成需求会是最大满足,同时项目内团队基本不会互相分享项目经验及心得。
我希望可以完成得更好提前完成,可以帮助项目做优化做分享。在codereview过程中,我更希望我们不仅仅能把产品做好,还有更多的时间去优化,掌握更多新的技术来优化项目实现,让产品有更好体验。我希望我们的团队有技术瞻仰性与向前性,对技术的思考有深度,我渴望投身这样的团队并一起完善团队建设,而不是单纯无线迭代。所以我选择了在这个时候尝试新的机会。
很多时候,我们是能保证工作完成的,自己会做更多的优化或者调研工作来完善产品,整个良性过程中,组员的价值能得到最大化体现, 而团队应该是支持这种行为的,而不是间接地打磨掉组员的正向行为,这会让组内的氛围沉寂与消磨人的积极性。
我曾微信号分享过一篇关于一位大哥“辉哥”的文章,讲到做事要有匠心,要较真深挖,我解读为专注。而团队沟通工作应该是双赢的过程,大家可以放开交流碰撞,以team work形式去解决难题,这便是我追求的环境。
如何胜任这份工作
我的理解是,岗位的内容是高质量迭代开发国际业务客户端,能承担缺陷重构和痛点优化。
自己接触Andoid开发也两三年,在职时间差不多一年,一年内参与了xxxx项目迭代开发,能保证自己负责的工作都是提前完成的。
而剩余的时间,我会主动去重构项目,也能针对用户痛点的主动做技术预研。而岗位的内容正是我主动追求的,我很乐意去挑战工作上的难点。
我个人的职业规划中,当前阶段是想深入掌握android底层的知识,所以当出现一个业务问题前,自己会深刻去认识一个问题产生的原因。针对工作的内容,自己能冷静分析原因并自主学习一些方案来解决。而提供的岗位工作正好是给了我充分的面对困难场景锻炼自己的机会。
学习习惯
这些越细越好,重在真实。
- 周一到周五,9:30-7:30,上下班分别会看两篇博文;
- 工作日完成一般会有两个小时时间用来继续本月的规划
- 周六周日会把工作日踩的坑记录下,有时候写写博客,看看技术文章。
兴趣爱好
打篮球,写书法,游泳,桌球,乒乓球等,比较广泛,但是每一项我都在身边人中比较拔尖
最近,想练长跑,慢慢看能不能小跑马拉松。
耐力,定性,这两者都是我这阶段需要的。
优缺点
责任> 协作沟通>接受意见但独立想法>自学能力>执行能力强
解决问题的心态不成熟,有时候容易钻牛角尖,处理计划过于急躁。
但是我相信,这是每个人都会经历的,而且是一个蜕变的过程,而我也正在慢慢转型。
工资待遇
可以了解下xxx的待遇结构吗。
希望能在xxxxK,因为(这个要按照真是想法表达)对于自己而言,我更看重xxx平台能给我的的职业帮助,而我也很相信自己能给团队创造相应甚至更多的价值。
想问的问题
技术面
- 经过刚才的交流,针对应聘的岗位,面试官有哪些意见或建议,我能力的匹配度大概多少?
- 假如有幸能通过面试,这个岗位现阶段负责哪些的工作?
HR 面
- 经过刚才的交流,胜任该职位我应该加强哪些能力?
- 假如有幸能通过面试,会进入哪个产品线,未来这个产品的发展方向和规划会有哪些?
- 面试结果最晚会在什么时候通知?
面试涉及知识点/体系/书籍推荐
以下是面试中遇到的问题整理,有一些被我整理已被整理成博文,其他的都是我这些年积累的面试笔记,虽然不是很全面,但是已经是我保留的全部了。希望有帮助。
完整PDF文件获取方式: 点击领取.
Java相关
- JVM
- Object
- static
- final
- String、StringBuffer、StringBuilder
- 异常处理
- 内部类
- 多态
- 抽象和接口
- 集合框架
- 反射
- 单例
- 线程
- volatile
- synchronized
- 锁
- 引用类型
- 动态代理
- 元注解
网络相关
- 网络体系的分层结构
- HTTP 相关
- TCP/IP
- Socket
设计模式
- 设计模式分类
- 面向对象六大原则
- 工厂模式
- 单例模式
- 建造者模式
- 原型模式
- 适配器模式
- 观察者模式
- 代理模式
- 责任链模式
- 策略模式
- 备忘录模式
Android
- 源码-xml加载流程
- 源码-Touch事件
- 源码-Handler
- 源码解析-Rxpermissions
- 源码解析-LiveData
- Android类加载器
- Java类加载
- Rxjava 的归纳思考
- Framework基础结构
- Android虚拟机结构区别
- 启动app流程
- 启动framework流程
- Android架构总结
- 模式之MVC/MVP/MVVM
- 换肤skin-support流程
- 图片库glide
- 源码-AsyncTask
- 自定义view流程
- Activity相关
- Fragment基础
- View篇之Touch传递
- EventBus
- 泄漏类型及定位
- 性能可优化的点
其他
- 排序
- 二叉树
- 链表
- 栈 / 队列
- 哈希表
- <typo id="typo-17023" data-origin="堆" ignoretag="true">堆</typo> / 优先队列
- 二叉搜索树
- 数组 / 双指针
- 贪心
- 字符串处理
- 动态规划
- 矩阵
- 二进制 / 位运算
- 反转整数 LRU缓存策略
书籍推荐
- 《Java编程思想》
- 《Effective Java》
- 《突破Java程序员基本功的16门课》
- 《深入理解Java虚拟机》
- 《Android高级工程师进阶》
- 《Android研发录》
- 《Android开发艺术探索》
- 《打造高质量Android应用》
- 《Android应用性能优化》
- 《安卓内核剖析》
- 《深入安卓卷1》
- 《深入安卓卷2》
- 《Android系统源代码情景分析》
- 《巧用Gradle构建Android应用》
- 《Android高薪之路》
- 《Android群英传》
- 《程序员修炼之道--从小工到专家》
- 《代码的未来》
- 《第一行代码》
最后,在这里小编还分享一份由几位大佬一起收录整理的架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料
如果你有需要的话,可以点这领取!
喜欢本文的话,不妨顺手给我点个小赞、评论区留言或者转发支持一下呗~
网友评论