【Android进阶小刘】是我的头条号,里面会不定期更新一些Android进阶学习视频,感兴趣可以关注一下!
前序
从我高考成绩出来那一刻开始,从我在高考志愿上填上“计算机科学与技术”这几个当时在心中堪称“神圣”的几个字开始,我就已经把进入中国互联网最高殿堂“BAT”作为我整个大学奋斗的目标,哪怕我就读的是一所位于内陆的双非一本大学我也认为我能达成目标。
但是当我踏入大学校门开始,发现一切都与自己想象的不一样。进入学生会希望能够锻炼自己的脸皮与组织能力,却发现我的任务只不过是去查查别人班级的出勤,迎新晚会时站站岗;踌躇满志地参加学校八大团队中的ACM团队的面试,寝室里5个人去笔试却只有我一人没有通过,去找团队负责人见面,却被戏弄嘲笑(这件事对我打击特别大,现在都还有点耿耿于怀);希望大学教授能够绘声绘色地传授知识,却发现毕业自清华大学的博士教授居然连话都说不清。
还好我才大一,充满着干劲和对计算机的兴趣,我开始了自学之路。在老师还在讲计算机概论时,我就自学完了C语言,然后凭借着自己的兴趣给自己选定了Android开发这条路,从此便一发不可收拾,喜欢上了自己当自己老师的感觉。
在大二这一年,做了几个APP,其中几个还上架了酷安,有个千把的下载量,与用户交流的感觉让我成就感大增。时间不停的走着,我也从未停下过我的脚步,距离2020春招只有一个学期的时间了,所以我给自己列了一份计划和书单,让自己能够做好2020春招的准备。由于准备充分,最后拿到了包括阿里京东网易在内的5个offer,谨以此文分享给大家我的面试经验。
准备
笔试
很早就了解了互联网公司面试必考,也是一个程序员必备的内功,我的算法水平也就是刚及格的水平,肯定是不能达到面试所需的水平的,于是我在去年暑假7、8月份(大二下期暑假)便开始有计划的在LeetCode上刷题,一开始是计划每天刷8道Easy难度的题,后来越刷越熟练后便每天刷4道Medium和4道Easy,然后转变为每天刷4~6道Medium。一个暑假下来刷了200多道题,成果还是很不错的。
此环节我的总结为在Leetcode上先易后难,然后将题目分类突破(leetcode上自带题型分类)。
手写代码
因为在面试过程中,面试官可能会要求你手写代码(根据我自己的经历来看,这个概率差不多是50%,要看不同的公司和面试官的喜好)。根据我的总结,认为手写代码有这么几个特点:
- 难度相比笔试难度较为简单。
- 由于是手写,与在键盘上敲代码有非常大的不同,有可能你在键盘上敲的飞起,但是你在纸上却一行都写不出来。
- 形式较为灵活,在没有思路时可以与面试官交流,就算最终没有写出来,你的思路得到面试官认可也是可以通过面试的。
针对这个环节,我准备了一本书,就是大名鼎鼎的《剑指offer》(必读!!!)。
这本书可以说是为我后面拿到满意的offer立了大功,可以说这本书让我在面试中不再惧怕手写代码。这本书是C++写的,但是并不妨碍阅读,你正好可以将它翻译成Java检验自己是否掌握。这本书我读了两遍,第一遍在电脑上敲了一遍,第二遍手写了一遍。建议将此神书完全掌握。
注意:当然为了方便大家阅读,我把电子版放在了我的网盘
如果这份学习笔记对你现在工作或者以后跳槽有帮助的话需要的可以【直接查看链接】 获得网盘下载链接!
面试问题准备
Android方面,由于在之前只为了做项目学过一点,而且还只是囫囵吞枣式的学习,没有深究其原理,在这方面我几乎经验为0。为了能在我计划的12月份之前学习完所有Android方向的知识,我在网上搜寻资料后给自己列了一份书单。
- Android源码设计模式.九月读完
- Android开发艺术探索 十月十一月读完
- Java并发编程的艺术 一月读完
- Android内存优化 二月读完
- Java编程思想 (第4版)三月读完
记忆神器--幕布
一开始我也觉得这么多繁杂的知识点,就算当时记住了,面试时也会忘,如何记住这么多的知识点呢?我后来在网上找到了解决办法——利用幕布含有层级的笔记来记录重要的知识点。我是这样利用幕布这个工具的:
- 按模块分类
- 模块细分
- 按层次记录知识点
1.还可以一键生成思维导图
- 如:Android框架架构体系
由于幕布有Android和iOS的客户端,所以随身携带很方便,随时可以掏出手机来背一下。在排队面试时也可以掏出来看看,说不定一会儿面试就问着了呢。。。
简历
制作简历肯定也是重中之中,你之前准备得怎样,在简历上就要体现出。在这里我总结了几个简历制作的要点:
- 不会的不熟悉的千万别写上去,写上去就是送人头,面试官会把你问到cry。
- 简历上绩点、项目、获奖经历、开源作品在校期间至少有一项吧,一定写在简历上称为亮点。
- 程序员的简历不要太过花哨,我是使用超级简历的模板,比较简洁。
面经
因为我完全没有面试经验,从来没有经历过面试,于是想着在去BAT这类大公司面试之前先找成都的小公司练练手,积累点面试经验。于是三月份开始就有成都的小公司开始约我面试。前前后后一共大概投了30多家公司吧,通过笔试约面试的大概十家左右。面试的问题没有记录,所以记得不是很全,但是大部分考的很基础,基本都是按着你的简历来问的。
云帆数联(已挂)
这家公司是我面试的第一家公司,公司规模很小而且面试体验极差,我去的时候HR让我先坐一下,一会儿面试官就领我到会议室面试:
1. 自我介绍
2. 如何设计一个抽奖系统,比如满 200 抽 20,满 500 抽 50
3. HTTP 与 HTTPS 有什么区别?
4. 讲一讲HashMap吧
5. 你在做布局优化的过程中用到了哪些工具?
然后就没了,我穿越大半个成都来这儿面试就问了我几个问题,耗时才10分钟,我还没来得及紧张就结束了?然后他说面试就先到这儿了,如果有通知再联系我......
知道创宇(已挂)
知道创宇是我在成都面试的第二家公司,好像拿了腾讯的投资所以公司地址在成都***三街的腾讯大厦里。这家公司与上家公司形成鲜明对比,整个面试过程持续了一个半小时还多。
1.算法题 两个栈实现队列
2.算法题 输入一个数组,想一种方法让这个数组尽可能的乱序,保证功能能实现的情况下时间复杂度和空间复杂度尽可能的小,可使用随机数函数。(面试官最后说了 O(n)的时间复杂度能实现)
3.写一个单例(自己写一种就行)
4.ActivityA -> Activity B -> Activity A
Activity A 启动模式为 singleTask
Activity B 启动模式为常规模式
问 A 启动 B,B 又启动 A 的生命周期调用顺序?
5.你刚才提到 onsaveinstancestate() ,说一下调用时机,它用来干什么的。
6.onsaveinstancestate() 保存的那个参数叫什么?Bundle 里面都放一些什么东西?怎么实现序列化?Parcelable 和 Serializable 有什么区别?
7.数组和链表的区别
8.HashMap 的结构以及原理
面试官非常好,聊得很愉快,可惜得是我因为面试经验不足加上本身也没有准备充分,感觉答得不好。面试官找来HR问了下实习时间就让我回去等通知了。第二天后我就收到了人生中第一封拒信........
CVTE(已拿offer)
CVTE是我面试的第一家大公司,通过了笔试后就通知第二天到春熙路一家酒店面试。第二天我早早地就到了酒店大堂等待面试,结果没想到刚一扫二维码排队就轮到我了。服务人员领我到一间很大的会议室,里面有很多面试官,每个面试官前有编号,我一下就看到了面试我的面试我的面试官,也是我第一次看到面试官西装革履。
1.算法题 一个字符串,求最长没有重复字符的字符串长度
2.string stringbuffer 和 stringbuilder 区别
3.final finally finalize区别
4.数组和链表的区别
5.HashMap 了解过吗
6.Tcp 三次握手四次挥手
7.get 与 post 的区别
8.......
面试官结束面试后让我回去晚上等通知,晚上果然收到通知让我参加终面(HR面)。
HR面还是那家酒店,我和一个前端一起面(特别扯的是后来我在牛客网上问一个CVTE的问题还和这位前端兄弟在网上偶遇了),问了我有没有女朋友啊,父母是做什么的,如果阿里和CVTE都给你发了offer你回去哪家这类问题,持续了大概20多分钟。晚上回去查看状态发现终面已经通过了,这意味着我将收到人生第一份offer。大概一周多后收到口头offer,两周过后收到正式offer。收到第一份offer后心里一块石头才真正落了地。
阿里影业(已拿offer)
- 一面(半个小时)
三月底的时候居然收到了阿里一面的电话,我是十分吃惊,因为距离我投阿里简历已经过去了一个月了,而且我没想到阿里居然能在几万份简历中挑中我的简历进行面试,收到电话我是十分受宠若惊的。电话信号一直不好,对方说话声音一直若有若无的,我不得不一直说”不好意思,能再说一遍吗“,面试中大部分问题都和其他面试差不多,有几个问题比较印象深刻:
1.flutter 了解吗?内部是如何实现跨平台的?如何实现多 Native 页面接入?如何实现对现有工程的 flutter 迁移?
2.你觉得安卓开发最关键的技术在哪里?
- 二面(45分钟)
一面后一周才收到二面的电话,要进行视频面试,由于是阿里我不敢怠慢,在外面专门找了家网速不错且安静的酒店专门等待阿里的视频面试。阿里的二面就是按照你的简历上的每个点都深问下去,但是都是挺基础的,没有问到我不会的分布式和集群方面的问题(可能是因为我简历上没有写),感觉大部分答得还不错,但是有几个问题如:描述一下 GC 的原理和回收策略?这样的该回答起来的问题没有回答起来,让我隐隐有些担心。
- 三面(半个小时)
二面第二天收到HR电话让我准备三面,让我挺吃惊的,因为我投阿里本来也只是想感受下顶级互联网公司的面试流程,压根儿没想到还能走这么远。三面面试官听HR说好像是个部门老大,也就意味着这应该是最后一轮技术面了。部门老大看起来大概35岁左右,挺面善的
- Activity生命周期?启动透明Activity生命周期?按Home键生命周期?
- 后台杀死APP后怎么恢复数据?
- 一个APP可以多进程嘛?
- ListView和RecyclerView区别?
- RecyclerView卡顿怎么排查?
- RecyclerView怎么实现多Type?
- RecyclerView的ItemView层级过深怎么优化?
- Android多进程?
-
怎么设计Android线程间通信?
- HR面(十分钟)
HR面打来已经是一周后了,我要不是看到状态还一直处于面试中,凭我三面的表现我都觉得我挂了。HR说实习生薪资比社招工资低问我知不知道,问我了解阿里影业哪些东西,愿不愿意来北京。最后说实习时间就比较纠结了,HR说最好能马上入职实习对转正比较有利,但是我这儿学校一堆课啊根本走不开。最后HR说回去问他们的leader看能不能七月份再实习。挂了电话我就觉得比较忐忑了,都走到这步了不会因为实习时间的问题把我给挂了吧。
最后一周过后我还是收到了阿里的offer,但是不是很兴奋还有点纠结(因为那时我已经收到了网易云音乐的offer)
网易(云音乐,已拿offer)
说实话这些公司我早就听说很难进,所以我笔试完后压根儿没想过能进入他们的面试流程,没想到大网易还是给我笔试通过了,给我发短信要我4月14日到杭州网易大厦面试,报销路费600元,我算了下出去报销的600元,我去趟杭州还要自掏腰包1000多块才够。不禁十分纠结了,因为当时阿里面试都走到三面了有可能拿offer,如果拿了offer就没必要再去面网易了,但是我又不想错过这次宝贵的机会,于是决定还是去1000KM外的杭州走一遭。
- 一面
提前一天到了杭州踩了点,第二天顺利地按时到达了网易大厦,签到后就在一边等候,二十分钟后就叫我去一面。一面面试官看起来25岁左右,很年轻,问得问题也比较常规。问了个HashMap问题,我心里很高兴,之前面试问过无数次这个问题了,于是我就详细地将HashMap源码讲了一遍。
- 二面
一面面完后面试官叫我五分钟后去前台问结果,通知我准备二面,这时候差不多十二点了,HR小姐姐领着我们去大名鼎鼎的猪场食堂吃饭,午餐如图:一个素菜也没有,三道荤菜:虾,羊肉,牛肉
这个应该是外部食堂,真正的员工餐可能还要好点。
差不多下午两点半左右,通知去二面。二面面试官看起来很年轻,感觉和我差不多大,二面和阿里三面差不多,问了一些开放性问题和一点点技术问题,面试过程面试官一直叫我不要紧张,就是聊天就行了,我其实并不紧张啊...面试官很好和我交流了不少学习方面的事情,问了我平时如何学习新技术和如何debug的。差不多愉快的聊了40多分钟就叫我五分钟去查看结果。
- HR面
HR面真的是非常愉快了,特别巧的是我刚坐下HR小姐姐就问我是不是宜宾人,我心里一惊赶忙说是,结果HR说她也是宜宾人(听到此时我心里朝天呐喊天助我也!!!),接下来的聊天就更愉快了,老乡见老乡,聊了学校的项目经历,学生会经历,在听到我的自学经历后她居然说很励志(我个人没有觉得很励志啊),半个小时后HR说七天后会有最终结果出来。
回成都后大概等了6天后就收到了offer。网易的面试体验是最愉快的,我可能暑假就回去网易了。
今日头条(已挂)
- 一面
今日头条的面试体验是最差的(没有黑的意思),面试全部是使用牛客网的视频面试工具,不知怎么的,视频一直断线,面试官很不耐烦地说要不你找个网络条件好点的重新给你找个时间面试,我心里想我花了百多块出来租酒店就为了面试,怎么能重新面试呢,于是就苦苦”哀求“继续面试,尴尬的是问了几个操作系统的问题我都没怎么答好,最后甩给我一道算法题,当时我已经无心面试了觉得铁定挂了,花了10多分钟才做完,面试官看也没看就说一会HR打电话就匆匆下线了........
- 二面
一面完后我心想绝对挂了,没想到HR打电话来说我通过了让我马上准备二面。我心里真是........二面面试官看起来也三十好几了就,一直问我当时还没复习好的操作系统和计算机网络,答得很差。然后又给我一道算法题,花了几分钟做完。然后HR打电话说我的面试结束了,希望以后有机会一起合作,想来也是,答得这么差能过才有鬼了。
京东(已拿offer)
- 一面,二面,HR面
京东这么大的一家公司面试却是最水的,一面是电话面试,几乎没有问技术问题,就问了个虚拟机,然后就问在团队里起矛盾如何处理,一面只有10分钟。二面是在和之前CVTE的同一家酒店,二面更水,感觉面试官已经脱离一线程序员很久了,估计问我的问题他自己也不知道答案,又问在团队里起矛盾如何处理(京东很看重这个?),大概20分钟就完了。HR面就问了问奖学金和项目的团队合作,只问了5分钟就发offer了...
总结
总的来说我总结我的面试经验如下:
- 面试尽量提前到,能早点面试,面试官也更愿意给你通过(就像中国好声音一样,一开始都是疯狂转身)。
- 面试时调动你的幽默细胞,尽量把面试气氛调得愉快一点,这样面试官能更深的记住你。
- 说自己优点的时候一定辅以证据,不然面试官只会当作耳边风
- 不会的问题不要强答,小心有坑,可以这样说:“不好意思这个问题我不会,但是如果让我来设计我会.......”
- 面试其实是一个双向选择,面试官在评估你的表现,同时由于面试官也代表公司,他的素质及提的问题也是你应该评估的方面,所以不要紧张。
- 使用幕布,在每次面试前将自己总结的知识过一遍。我幕布上写了几万字的笔记,每次面试都拿出来看一遍,所以面试问到的基础我基本都能应答如流。
目前拿了阿里影业、网易云音乐、京东成都研究院、去哪儿、CVTE的Java后台研发实习的offer。
这个结果是我两个月前万万没有想到的(我原本想的是能去家二线互联网就不错了),我也知道拿这么多的offer是有一点运气的成分在里面的,我接下来也会继续努力,争取转正就不用再秋招了(找工作是真的痛苦磨人)。
真心感谢大学这三年来帮助过我的无数博客博主,从你们优秀的博文我知道了真正的“优秀”是怎么样的。谨以此文希望能帮助大家一点点,祝大家最后都有满意的offer!!
如果这份学习笔记对你现在工作或者以后跳槽有帮助的话需要的可以【直接查看链接】 获得网盘下载链接!