一、简历
- 如何准备简历?
按照我的模板,大概是这样划分的。
掌握的技能(最重要的当然是语言啦),熟悉的知识面(基本跑不开网络,计算机原理,数据结构与算法,非科班的比如我们通信,熟悉DSP什么的,我觉得写不写无所谓…)。
关于这个岗位的经验。(我0,献丑了)
拿到过的竞赛奖、奖学金,发表的论文
企业实习。(又献丑了,0)
做过的项目,项目中我所完成的内容,项目亮点。(楼主一个长江学者带队做的,一个院士工作组的课题,乍一看一个本科生还是挺唬人的)
校园实践。(楼主做了三年的校园网无线网布置,对下三层网还是比较熟悉的,也带着社团做了网站,这里比较有的说)。
其他。(英语啦,爱好啦,性格啦,反正他们也不会看的)
————————————————
版权声明:本文为CSDN博主「椰果学Android」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/CHAMPION8888/article/details/109359760
二、如何规划自己的速成内容?
我大概是一个月的时间,完成了常用数据结构,常用算法,剑指offer算法题,TCP/IP卷1,计算机原理,SQL,以及我应聘的岗位——Android移动开发岗位。这一个月可以说每天14个小时,早上起来就去教学楼开始看书,看累了就开始手撸算法,撸懵了就开始看答案怎么写的,循环。
通用Android程序员面试知识总结。
这里我不做具体的描述,我自己用的文件都是各种blog和git上扒下来的,在这里截个图,如果有需要文件的,点击GitHub即可获得!
精投
精投策略,Android开发方向只投了3家,等结果的过程还是比较难受的,现在已拿到头条的Offer。
先说背景,本人某985数学系本科。因为以后不太想做科研,考研又感觉毅力不达标,听说头条今年机会多,我就打算去挑战一下。
我这个人挺懒的,面经看得有点少,LeetCode做了十题就放弃了,但是因为从小就喜欢计算机,所以不经意间还是积累了一些东西。
非科班同学看这里。点这里可以看到全部内容
这是我朋友们的大厂面试题和心路历程,包括考研和就业的抉择,我感觉读了之后很是佩服,感觉参考价值比我这篇要大,也推荐了各种学习资料,希望大家去看一看~
由于担心视频面试出岔子,特意赶回北京参加现场面(才不是因为miku的演唱会呢> <),三轮一天完成,中午蹭了一顿饭。
【笔试】
本来写代码就慢+不爱刷题的我只AC了2道半,居然一次通过,神奇
头条的笔试体验还是不错的,不像某些厂喜欢出大量的智商题+初中方程题来恶心人,我是真的不会做。
【一面】
Android四大组件是什么?你最熟悉哪个?
Activity的生命周期?
旋转屏幕的时候会发生什么?
Java的常量池?不同String赋值方法,引用是否相等?
HashMap的实现?树化阈值?负载因子?增长系数?
手写代码:O(1)的单链表元素删除(×:倒霉孩子没见过这套路…经过提示也没想出来,可见做题的重要性)
手写代码:获得单链表的最后N个元素
【二面】
写过C++是吧?
知道STL容器的allocator吗?
手写代码:实现无锁同步 (×:我写成了CAS操作,被打断,说特定的ARM处理器没有这个同步原语,不能依赖相关指令。包括信号量等也不行。)
手写代码:自定场景,实现一个满足需求的内存池 (×:晕乎乎写出了几个bug,面试官眼尖…而且自我感觉回收算法不够好,感谢放过)
手写代码:从长序列中找出前K大的数字,堆排序
JVM的垃圾回收算法了解吗?
对象可达性分析,哪些是GC root?
TCP和UDP的根本区别?
什么场景下使用UDP?为什么?
提问简历,关于FFmpeg
我的提问:
面试官是哪个组的?
字节跳动今年是否真的缺人?招聘策略是什么?(答:是。项目和实习经验吃亏没关系,今年招聘重视基础,换去年我肯定不给你过。)
【三面】
介绍项目,高三暑假做的App
画某个功能的模块图,写出相关接口
这样设计有什么问题?如何改进?
QQ视频聊天使用什么协议?
视频聊天为何会卡顿?
TCP流量控制算法的细节? (×:包速率增长的函数关系说不清楚,感谢面试官放过)
假设有节点自带p的丢包率,如何判断丢包是因为带宽不够还是随机丢包导致?
如果视频聊天出现卡顿,如何在应用层面缓解?
手写代码:大整数加法,要求代码可读性(×:又写出搞笑bug系列,被二面搞傻了)
Android应用中的卡顿是什么导致的?
Service和Thread有什么区别?Service的代码是在哪个线程运行的?
AsyncTask?Executor?
AsyncTask有哪些缺点?
用过IntentService吗? (×:没用过,感觉就是个适合处理单次计算任务的方便设施)
我的提问:
面试官是做什么的?
面试官对非科班学生有什么看法?
面试官认为我存在哪些不足?
头条到底还是头条……一言不合就写代码,而且相当重视基础。说是面经,其实就是帮助各位查漏补缺,完善技术栈 。毕竟面经只是面试官拿来采样你的水平的测试用例,我遇到过各种奇怪的问题……
另外一面过程中有个彩蛋,旁边一个暴躁老哥在和面试官争执,大概说的是我是来面试移动端开发的,你们为什么要让我手写二叉树?平常写代码能用到二叉树?
虽然我不知道该说是什么,但我觉得他凉了……
就是这样,感谢头条给了我这种非科班菜鸡一个机会,大佬轻喷orz
广撒网
秋招战绩
阿里
阿里的实习生招聘我参加了内推批次和正式批次一共两场。
阿里的内推批次和正式批次的时间是完全错开的,即在内推全部结束后才开始正式批次。需要注意的是,阿里主要部门(集团、菜鸟、蚂蚁等)的招聘几乎全部放在内推批次中,而正式批次绝大多数是非主要部门(高德、优酷土豆、虾米、钉钉等)的招聘。
阿里的内推没有统一的笔试,在内推成功后,马上就会收到素质测评和编程测验的通知。然而这两个测评其实并没有太大意义,做不做都会很快(一两天)就开始面试的。阿里内推批次的面试全都是电话面试。我在内推后的第二天就接到了一面的电话,部门是菜鸟/无线(记不清了)。
内推一面大概40分钟,主要问的计算机基础,如HTTP、TCP、并发、二叉树遍历、字符串匹配算法等,还让我简单介绍了我做的两个项目。因为我的其中一个项目做的APP中有调查问卷的发放和收集,所以问了我如何防止有人刷问卷;我回答说可以限制IP、记录设备唯一编号、监测做问卷模式等,但都存在一些漏洞。最后我问他Android开发过程中是不是会遇到很多兼容性问题,面试官回答说会遇到,还详细说了他们有专门的大规模真机测试来检查兼容性。一面总体上答的还行,几乎没有涉及到Android相关的问题;因为是电话面试,也就没问什么算法题。
内推一面两天后就接到内推二面电话了。二面大概50分钟,主要问了Java GC机制、Android APP启动过程、Android事件分发、Android View绘制流程。GC机制因为刚看过所以答的比较好,然而因为阿里面试开始太早,我还没来得及复习Android,所以Android相关的问题答的一塔糊涂,比如APP启动过程就支支吾吾乱说一气,View绘制流程干脆说不知道,跟面试官说我知道Android事件分发流程,于是事无巨细说了好长一串,最后被面试官吐槽根本不熟悉Android。最后问了面试官对国内手机厂商乱改Android Framework层有什么看法,面试官回答说他也很无奈,但阿里一般都和手机厂商有合作,直接进白名单,所以没有碰到太大问题。
内推二面后过了一周多才接到内推三面的电话,而且是在周末的晚上11点的时候。三面大概20多分钟,主要问了做过的项目、Java基础、最近看的书、到阿里想学到什么。我不太确定这轮面试是技术面还是HR面,因为是晚上11点和女票刚回到酒店完全不在状态,而且面试官也似乎很不耐烦,加上那段时间一直在准备技术方面的问题对这些HR面相关的问题完全没有准备,所以答的很啰嗦也很糟糕,好多都没有答到点子上。最后我问面试官我答的怎么样,面试官也没有说什么就急忙不耐烦挂电话了。
内推三面结束后就觉得应该是挂了,然后又等了一星期,官网上就从“面试中”变成“已回绝了”。
等到阿里正式批次开始的时候又投了正式批次,正式批次有统一的笔试,笔试用的阿里自己的系统;笔试内容记不清了,但一二十个选择题记忆深刻,好多超出Android相关知识的题目,好多做不出来的智力题。
正式批次的笔试似乎只有很少数的人通过了(主要是因为正式批次的岗位很少),幸运的是我也通过了,在官网预约面试时间后就开始准备视频一面了,面试的部门是钉钉(像之前说的,正式批次的部门都比较边缘)。
正式一面是视频面试,大概不到20分钟,是我实习秋招体验并列第二差的面试。主要问了Activity中能不能执行耗时操作(就是UI线程相关)、Android中有哪些内存泄漏的情况,然后就是共享屏幕写代码:实现单链表的插入删除和查找。为什么说体验非常差呢?首先整个面试就问了两个问题,而且这两个问题几乎任何有Android开发经验的都能对答如流,并且我回答完后就没有然后了,没有继续深入问;其次那个代码在数据结构教材上讲链表的时候一定会讲,而且也没有什么技术含量。最后面试官说还行,也没让我问他问题就结束了。
一天后官网状态就变成“已回绝”了,累觉不爱。
美团点评
美团点评也是很早就网申了,其实最初是找的师兄内推的,然而当时内推的岗位是后台开发,仔细想了想之后我又改成Android开发,于是就不是内推了(直到我笔试挂了才明白这个道理)。
之后就收到了美团点评的统一笔试,美团点评用的是北森系统,奇烂无比。笔试题目记不清了,最后有一个编程题,好像是求最长递增子序列,经典题目了。当时感觉笔试做的挺好的,然而笔试完就再也没有消息了,简直是黑人问号。
后来想了想可能是我当时网申的时候,选“感兴趣的事业群”选了“都感兴趣”导致没有一个事业群对我感兴趣,这个后面再说。
网易游戏
严格来说我投的是网易互娱(区别于雷火&盘古,后面再说更多区别),走的内推。网易游戏以其笔试难度大著名,这次也不例外;所有的内推都要求参加统一笔试,我记得笔试有几场,我是在第一场。内推的岗位是网易游戏最核心的“游戏研发工程师”,地点是杭州。
笔试用的牛客网平台,大大的赞。笔试一共四道编程题,一共150分钟,难度都很大,前三题用不到啥高深的算法,但需要想到解题的思路,最后一题是一个多重背包问题。笔试我一共过了三题半,因为最后一题不知道为啥内存超限了,用的primary int和动态规划,理论上是不会内存超限的。做完笔试题几乎就有把握能进面试了,当时预感能做出两题就能进面试,后来发现好多人只做出了一题就进面试了。
网易游戏实习生招聘很神奇的是整个就一轮面试,HR面是不存在的。面试是视频面试,用的牛客网平台,大概面了一个小时多一点。面试主要就是把计算机四大专业课轮番问了一遍,问了Java语言基础,最后还问了一个算法题。
四大专业课问的也就是那些基础问题,不过有些地方问的很深,基础的像问到了各种排序算法的最好、平均、最坏时间复杂度、线程和进程的区别、cache工作原理、计算机网络七层模型;问的深的像问到了进程中有多少个栈、线程中有多少个栈、阻塞是指进程阻塞还是线程阻塞、一台服务器上TCP和UDP监听端口号能不能相同、服务器80端口和客户端建立连接后会不会切换端口等。
Java语言基础这里有个小插曲,面试官没想到我不会C/C++(因为岗位介绍里面有写要会C/C++,但五个要求里只要求满足任意两个就可以投递)只会Java和Python,于是他就只好问了一些Java语言基础的问题,比如Integer和int的区别、GC的工作过程等;还问了Python的装饰器的原理,我就说了说面向切面编程相关的;最后面试官觉得不问C/C++不行,然后问我知不知道C/C++里的虚函数,被我一口回绝了。最后问了一个字符串循环移动的算法题,算是一个经典题目了,直接口头说三次翻转就好了。
最后问了面试官说岗位介绍里要求会C/C++,但我看招聘网站介绍里有提到Python,实际中是用哪些语言呢?面试官说C/C++主要用在游戏引擎那块,开发主要还是会用Python。虽然整个下来有些题没有答上来或者答错了,但整体来看还是答的很好的,反正对我来说已经发挥到极限了。面试完就感觉这个offer基本要到手了。
等了两周多才收到了网易游戏的offer,但也算是我实习生招聘收到的第一个offer,也是很有分量的一个了,自此我的实习生招聘就有底气了。
尾声
最后,我再重复一次,如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。
当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。
以上进阶BATJ大厂学习资料可以免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。
进阶学习视频
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)