最近各大互联网的暑期实习招聘开始了,身边的小伙伴们也都忙碌了起来。整理了一些 开发类面试经验,分享给需要的同学。
我先做个简单的自我介绍。晓晓,研二在读,大三学年末开始接触Android开发,前后共在美团、头条等公司实习18个月左右。有过6-8次面试经历,包括百度、网易、keep等,有些通过有些失败,在这里分享一些开发类面试通用型问题,并不只针对于Android开发。
我将分为 面试前准备、面试中发挥与 面试后总结三个部分,分享我的经验。因为我也是一只小白,不能保证说的都对,请大家参考后自行判断。
面试前准备
找工作的第一步关卡就是简历筛选,一份简洁清爽又重点突出的简历可以增加我们的竞争力。面试过程中,面试官也大多会参考简历内容进行提问。之前帮忙收过一些简历,对于开发类简历的准备,有如下几个建议:
-
命名规范。一定避免无意义的文件名,很可能直接被无视。一般来讲,可以将简历命名为:姓名-求职方向-手机号-学校-年级-可以实习几个月-最早几月入职。如:朱佩奇-Java开发实习-18812345678-北京大学-研二-可实习6个月-最早3月入职。HR可能不会一看到你的简历就马上联系你,把联系方式标在文档名称处,可以为彼此提供方便。另外,一定要转成PDF格式,doc格式很可能出现排版错乱的情况,严重影响阅读体验。尽量选择姓名拼音前缀+学校的邮箱,或其他稍正式的邮箱发送简历,避免如saxhjh2234@xx.com这种辨识度低的邮箱。
-
排版格式。找到一个简洁大方的模板,主题色为黑色或深蓝色即可,尽量避免一些花花绿绿的颜色,使阅读者尽可能将注意力停留在简历内容上。整个简历控制在1-2页为佳,尽量不超过3页。
-
个人介绍。只包含简单的客观信息即可,如姓名、性别、电话、邮箱和现居地,不需要花一大段进行自我评价,自我评价不会是简历筛选的决定性因素,且浪费宝贵篇幅。一般来说,开发类简历是不需要附照片的。不过也没有硬性要求,假如你觉得照片是加分项,可以加上一个P图程度别太过分的证件照。
-
实习经历。如果有过实习经历,可以按照熟悉程度由强到弱介绍自己做过的项目,不必非按照时间顺序进行排序。一般大家都会将自己最熟悉、或收获最多的放在第一个,这也会是面试官重点提问的项目。
-
项目经历。如果之前一直没时间实习的同学也不要担心,可以将重点放在你的学校项目经历上。可以是实验室的项目,也可以是某编程课的大作业,但一个原则是要保持简历的真实性。一定要能把自己写的东西说清楚,如项目需求、或使用的设计模式等。不要为了凸显工作量,把别人做的东西安到自己头上,基本都会被识破,给面试官留下坏印象就得不偿失啦。
不管经历过几次面试,好像都还是会感觉非常紧张。可以在面试前嚼一块口香糖,据说咀嚼的动作可以让人感到放松,还可以保持口气清新。提前1-2天查好交通路线,最好提前15分钟左右到达面试现场(携带2-3份纸质版简历最佳),适应一下环境。把手机调至静音后,稳住心神等待面试官的到来。
面试中发挥
我仔细研究了以前的面试记录,结合实习的经验,整理了一些提问率较高的技术型问题供大家参考。由于篇幅有限,且不能保证答案完全正确,下面只列举了问题,有需要参考答案的加群 Android IOC架构设计,我可以分享完整版。
计算机网络
-
计算机网络协议有几层?自底向上分别为什么(画图)?HTTP/UDP/TCP/IP协议分别在哪一层?
-
TCP/IP三次挥手的过程(画图)?四次挥手的过程(画图)?为什么握手要3次?为什么挥手要4次?为什么挥手完成后要等待2MSL才能释放TCP连接?
-
HTTP请求报文和响应报文的格式是什么?GET与POST方法的区别是什么?
-
HTTP响应报文中各种状态码的含义,如404、502、302等?
算法与数据结构
-
写一个你最熟悉的排序算法,它的时间复杂度为多少?(最好别写太简单的,建议熟记快速排序)
-
经典递归问题的非递归算法。[图片上传失败...(image-b01284-1554889106348)]
听起来有点绕,不过确实很多时候面试官会直接要求 非递归算法,如汉诺塔问题、斐波那契数列、二叉树遍历等问题的非递归算法。
-
二叉树的前、中、后序遍历,层序遍历算法。
-
栈与队列的区别。
-
如何判断一个链表里有环?
-
有一次笔试选择题还问到了小根堆。
另外建议在面试前,刷一些Leetcode的题目,至少每天2道找手感。有几次面试撞到了刷过的easy题目诶,心情就像是中了大奖。(希望大家也能中奖!)
操作系统
-
进程与线程的区别是什么?
-
进程的五种状态,画图表示。
-
进程间通信的方式有哪些。(复制粘贴竟然也算一种诶)
-
进程的内存分布图。(画图)
-
死锁要满足几个条件?分别是什么?
-
堆和栈的区别是什么。
数据库
-
主键的概念、特性。
-
简单的查询、删除语句。
-
left join、right join和inner join。(问的不多)
-
事务是什么,四大特性都是什么?
Git
-
基本的Git操作。
-
git rebase和git merge的区别?
-
git fetch和git merge的区别?
Java类(非Java类编程可跳)
-
泛型,类型擦除可以了解一下。
-
接口与抽象类的区别。
-
String a = "abc"; 和 String b = new String("abc")的区别。
-
Java中有几种基本数据类型?各占几字节?
-
ArrayList和LinkedList的区别,如何选择?比如对于add操作或get操作,选择哪一个结构时间复杂度最低?
-
访问权限有哪几种?
-
执行顺序类,读代码题目。(写出几条语句的打印顺序。)
Android类(非Android开发可跳)
-
Activity的完整生命周期?(画图)扩展:Activity A启动Activity B时,分别触发了A和B的哪些生命周期?
-
Activity的四种其中模式,简单介绍。
-
数据持久化方案有哪些?SharedPreferences会带来性能问题吗?
-
Android有几种动画?哪种动画真正改变了View的属性?
-
dp与sp的区别是什么?dp与px的区别是什么?
-
如何写一个高效的单例模式?(手写代码)
-
Handler有什么用?子线程里面能创建Handler吗? Handler的消息传递机制建议重点复习。
-
布局方式有哪些?LinearLayout和RelativeLayout哪个效率更高?了解一下ConstraintLayout。
-
没用过kotlin的话,可以了解一下。
其他
- 对于新技术有什么研究?平时关注吗?
最好关注下自己领域的新技术,可以体现你的求知欲强、学习能力强等若干优点。
-
遇到过最难的问题是什么?
这道题经常会被问到,猜测面试官主要想了解一下我们的抗压能力和解决问题能力。建议选择一个中上等难度的问题,并且结局一定是解决了它,或至少提出了可行的解决方案。
-
学的最好的一门课是什么?
这道题我觉得面试官是在给机会,我们说出自己比较擅长的方向。面试官向这个方向提问,有助于我们的发挥。可以仔细想想自己学的最好的一门课。
-
代码风格如何保障?
比如可以同学们之间互相review代码,了解常用的命名规范等。
- 你还有什么想问的吗?(2-3个问题为宜,不问会减分!)
a. 如果有幸加入这个部门,请问我的工作职责大概是怎样的?
b. 刚才有一个xxx的题目,请问您能给我讲讲吗?
c. 部门大概有多少人?如果我加入的话,会有人带吗?
面试中遇到自己不会的问题很正常,
一定要稳住!
我能想到的有三个级别的解决方案。
-
低级方案。不懂装懂,瞎说一通。千万不要尝试这种方案,没有任何正向影响,且浪费双方时间。可以把宝贵的面试时间留给其他可能会的问题。
-
普通方案。经过合适时间段的思考,确认自己不会后,可以直接说不知道,或者会多少说多少。
-
高级方案。机智的把话题转移到自己熟悉的领域。大概的答题模式如:“这个A我了解的不多,我了解了xxx,但是我最近接触了一个B,我觉得有相似之处”。假如面试官也对这个领域感兴趣就说下去,不感兴趣及时停下。不过这个方案过于高级,我还没有成功应用过。
面试后总结
经历了两轮、三轮甚至四五轮面试之后,我知道大家都很累。但是!先别松懈下来,赶快把刚刚的所有问题记录下来!这是非常重要,却很容易被忽略的一步。可以等自己休息充分了,再专心去查阅答案,最好把问题分类归纳。不要等到第二天再去回忆问题,你会发现忘记了好大一部分!这一步一定一定要认真做,一个问题一次答不上来可以,跌倒两次绝对不能原谅!
最后在文末放上我自己整理出来的一份更详细的面试资料和关于安卓学习的思维导图提供给大家参考下,毕竟学习还是需要一个准确的方向的,才能使学习更有成效。
领取方式:
点赞+加群免费获取 Android IOC架构设计

网友评论