终于,我的秋招结束啦!从7月17日开始,到10月19日结束。三个月里,有汗水、有挫败、有喜悦、有成长、有蜕变....。谨以此帖,记录自己的研究生生涯及秋招之路,希望能对后面的其他同学有所帮助。
(一)自我介绍
楼主本硕就读于西安某211,计算机应用技术专业。学术上的成果主要有:一作SCI二区论文*1、专利*3。主要的研究方向是:安卓安全、安卓开发、深度学习。
本科阶段的自己没有清晰的目标,在大三的时候加入了考研大军,在获得某校优研资格的情况下由于自身的原因选择了考研本校。看着自己同寝的哥们去了西交、好朋友去了东南大学...,心里真不是滋味。初入学研究生的时候便决定好好努力,在找工作的时候进入大厂!
应聘的岗位是安卓开发岗,秋招的最终去向是字节跳动。
(二)秋招的Offer总结
共投递了30余家公司,至少拿到了九家公司的offer。结果分为以下几种情况:
1.拿到offer的公司:
oppo、字节跳动、浦发银行、蘑菇街、美团、中兴、小米、CVTE、360。
2.在offer池的公司(池子深的看不到底啊):
华为、新浪微博。
3.笔试未通过的公司:
拼多多、猿辅导、大疆、滴滴。
4.面试未通过/无反馈的公司:
多益网络、腾讯(九面)、网易雷火、阿里。
5.自己拒绝后续面试的公司:
虎牙、科大讯飞、贝壳找房、快手、商汤科技。
(三)校招公司
这一节是对自己参加校招的大部分公司的说明,oppo、字节跳动、美团的面经在我的这篇帖子(2019校招字节跳动、美团、oppo安卓开发新鲜面筋)中有详细说明,后面不再赘述这些面筋,谈点不一样的:
3.1.oppo
两轮技术面试+一轮HR面试,秋招的第一个offer,oppo的核心价值观是本分,对于oppo,自己充满了感激。从给提前批同学的优惠政策到后续的校招调薪...。无疑显示这是一家人性化且本分的公司,希望贵公司的发展越来越好吧。
3.2.字节跳动
字节是一轮笔试+三轮面试+一轮HR面试。笔试五道a了2.4道。一面的面试官(我的第一次面试)问题偏基础,循循善诱地引导面试者,受益匪浅,至少不再害怕面试;涉及到Handler、线程通信、内存泄漏、垃圾回收及引用类型等,手撕代码是斐波那契的变体。二面的时间大约在半小时左右,谈了项目和相关基础知识,并未手撕代码。三面的技术面试官较为严肃,知识点涉及到ActivityManager、四大组件、View绘制、项目相关,手撕代码是Leetcode mdium难度的670题最大交换。7月底便收到oc,8月5日收到意向书。
3.3.浦发银行
浦发银行是去西安现场面试的,我是第一个面试者,六个面试官坐成一排,面试涉及面较广:包括死锁、银行家算法、JVM调优、热修复、数据结构相关基础等。笔试是在一个大的机房中进行的,笔试题目包括跳台阶、最长回文子序列、连续整数最大和。
3.4.蘑菇街
蘑菇街的一面侧重基础,面试官能够很耐心的解答问题,手写了冒泡排序,整体难度偏简单;二面侧重项目和工程能力,譬如V1签名和V2签名的不同等,手写了最长回文子串;三面是项目+手撕代码,手撕了两个代码:1.单向链表的倒数第k个节点;2.升序的整数数组,在其中找到两个数,使得它们的和是一个给定的sum,输出其中一个解就可以了。蘑菇街后面又有组织offer party、报的薪资(算是ssp了)也是很有诱惑力,感谢、感恩。
3.5.美团
美团很看重基础的深度,这从我的《2019校招字节跳动、美团、oppo安卓开发新鲜面筋》中的问题可以看出来,美团遇到了一个情况是:8月26日完成技术三面,8月28日完成hr面了,一个月一直没有拒信或者意向书,给官方的邮箱反映了下,又重新约我三面(面试官真的是很赞,花了20min给我介绍了公司的技术路线、研究方向等等),感觉好像是他们的工作失误导致拖了一个月忘了,然后重新走三面往后的流程,最终也拿到了offer。建议:如果HR一直没有反馈的话,自己一定要发邮件问一问,否则就会出现我这样的情况。
3.6.中兴、CVTE
中兴没啥讲的,一面讲了讲项目,二面偏综合测试。CVTE是技术面两面,二面面试官人很好,给我展示了公司的相关产品,但报价低于预期。
3.7.小米
小米刚开始面试的是北京的IOT部门,HR面oc后我说想换到南京的MIUI部门,所以加了一轮面试。一面把项目撕了一遍;二面深入考察了Volatile关键字、设计模式相关以及多线程、多进程通信。加面印象不深,只记住了两道题:(1)64匹马,8个赛道,最快找出跑得最快的4匹马(https://blog.csdn.net/u013829973/article/details/80787928);(2)有+1,-1,*2三种操作,问从整数A到整数B的最少操作次数。建议:oc时不要再换base了,加面很麻烦的。
3.8.华为
今年华为HC(尤其是cbg)减少,导致的一个问题就是门槛升高,加了手撕代码环节,面试难度略微加大一些,华为的老师感觉年龄都偏大,普遍有一点优越感,一共是两轮技术面、一轮业务主管面。流程三轮目前是走完了,目前状态是在offer池中。一面手撕了:两个字符串,求最长公共子串;二面手撕了:(1)一个string数组和一个字符串,如果string数组的每个string都在字符串中有出现,则返回计数器的数值。譬如string数组【“hello”,“epoll”,"Kevin"】字符串是lloephki,返回的值是2;(2)两个数组,第一个是【2,0,1,2,0,1】,第二个是【2,1,0】。要求得到按照数组二排序的数组一。即最后结果是【2,2,1,1,0,0】。
3.9.腾讯
腾讯面试了9次,捞了挂、挂了捞,两次到三面,一次到两面。只能说无缘了。
WXG:一面问基础,二面撕项目+手撕代码。撕项目花了两小时;手撕代码一小时。知道了自己的薄弱点:项目瑕疵地方需改进;算法能力待加强;博客需整改,删除level不够的blog。
CSIG:一二轮交叉面之后到第三面挂掉了。
TEG:CSIG三面挂后的第二天,实在是不想回答问题,然后一面就凉了。
PCG:三面问题偏实践和发散,自己答得不好,挂掉了。
3.10.阿里
阿里的问题相对更发散,问题偏业务、偏应用场景,最终在三面之后收到了拒信。
3.11.商汤科技
面试体验最差的公司且没有之一,参考我的这篇帖子:https://www.nowcoder.com/discuss/269964。
(四)技术栈
4.1.Android基础
对于应届生,大多数的公司更看重基础和源码一些。
书籍:《第一行代码》、《Android开发艺术探索》、《Andoir进阶之光》部分。
相关链接:
https://blog.csdn.net/weixin_38244174/article/details/94335429
https://blog.csdn.net/weixin_38244174/article/details/92627290
涉及知识点:
1.Activity的启动模式和生命周期(特殊情况下生命周期)。
2.进程间通信(Bundle、AIDL、Messenger等的使用和优劣势)。
3.Binder(源码)。
4.BroadCastReceiver的静态注册、动态注册、分类等。
5.View的事件体系、View的工作流程以及自定义View。
6.View动画、帧动画和属性动画。
7.消息传递机制:Handler(源码)工作机制、AsyncTask(源码)、HandlerThread(源码)。
8.Android的三级缓存策略,如何高效加载Bitmap?ImageLoader、Picasso、Glide(源码)、Fresco。
9.Android的插件化技术。
10.性能优化之ANR优化、内存泄漏泄漏原因及优化、ListView和RecyclerView的优化及区别、布局优化等等。
11.JNI和ndk相关。
12.Frgment的生命周期、相比Activity的优势。
13.网络加载框架:Xutils、Okhttp(源码)、Volley、Retrofit。
14.Service的生命周期、两种启动方式。
15.数据存储:文件存储、Sqlite、SharedPreference、LitePal。
16.ContentProvder的写法。
17.线程池的分类、写法和优势。
18.MVC、MVP、MVVM。
目前能想到的就这么多。多写多练多看源码是提高之道。
4.2.Java基础
书籍:《Java语言程序设计基础篇》、《Java语言程序设计进阶篇》(Y.Daniel Liang)、《深入了解Java虚拟机》、JavaGuide。
相关链接:
https://blog.csdn.net/weixin_38244174/article/details/92631738
https://github.com/Snailclimb/JavaGuide
涉及知识点:
Java基础:三大特性;接口抽象类区别;拆箱装箱;==和equals的区别;hascode与equals;static关键字;final关键字;异常处理等;基本数据类型。
Java容器:无外乎List、Map和Set。ArrayList(扩容、源码)、LinkedList(源码)、Vector的区别;HashMap(源码)、HashSet和Hashtable的区别;ConcurrentHashmap的实现方式、HashSet如何保证不重复的。
Java并发:进程、线程区别;并发、并行的区别;死锁与避免,sleep和wait方法;sychronized、volatile关键字了解及区别;Java内存模型;线程池;锁的分类。
JVM:Java内存区域;JVM垃圾回收;类加载过程;类加载器。
4.3.数据结构
书籍:《数据结构-用C语言描述》
相关链接:
https://blog.csdn.net/weixin_38244174/article/details/89599374#comments
https://blog.csdn.net/weixin_38244174/article/details/92631738
涉及知识点:
栈与队列;二叉树的遍历查找、哈夫曼树、红黑树;图的深度广度优先遍历;查找(顺序、折半、哈希法);九大排序时间复杂度、空间复杂度、稳定性。
4.4.计算机网络:
书籍:《计算机网络》(谢希仁第七版上篇)、JavaGuide
相关链接:
https://blog.csdn.net/weixin_38244174/article/details/90707622
https://github.com/Snailclimb/JavaGuide/blob/master/docs/network/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.md
涉及知识点:
TCP/IP结构与功能;三次握手与四次挥手及为什么是这样?TCP、UDP区别;流量控制、拥塞控制、滑动窗口;url的输入到显示主页;状态码;HTTP长连接短连接;Session和Cookie;Http1.0和Http1.1的区别;Http和Https的区别。
4.5.操作系统
书籍:Github的CS-notes
涉及知识点:
线程、进程区别;读者-写者问题;死锁的条件、预防(互占不循)、检测和避免(银行家);虚拟内存,分段、分页;页面调度算法(Lru、FIFO、OPT等)。
4.7.设计模式
书籍:《大话设计模式》
涉及知识点:单例模式;工厂模式等。
4.8.算法
书籍:《剑指offer》、Leetcode探索之腾讯篇。
(五)简历
一份好的简历是建立在平时认真积累、与求职意向相吻合的基础上的。下面是我的一些建议:
1.不要用花里胡哨的模板,搞技术的尽可能格式简洁,内容丰富;
2.个人信息写清楚:姓名(哪一年毕业),电话、邮箱、CSDN博客或Github链接等。
3.求职意向、受教育经历要写清楚。
4.项目内容/实习经历(至少是互联网前几的公司,否则只会降低自己的Level)按照时间、项目名称、项目内容、负责部分、完成情况进行说明,科研成果需说明哪个区几作;
5.曾获的奖项如果有互联网+比赛、数学建模大赛的成绩固然好,没有的话写奖学金感觉也可以,拿奖学金的话说明也不会差到哪里去。
6.专业技能分为了解、熟悉、精通三等,一般不要填写精通,技能在于精而不是多,有的同学恨不得把所有的语言都写上...。
贴一个别人的简历。
(六)建议:
1.未雨绸缪,厚积薄发。研究生的研究方向很可能与找工作的方向不一致,踏实完成导师布置任务的同时,一定要抽出时间思考自己的方向。与学长、同学多交流。在完成项目的同时找到兴趣点。厚积薄发是指在Github、CSDN上都有相应的贡献,厚积才能薄发。
2.项目为主,基础为辅。既要有与工作方向相契合的项目,有难度和创新点,简单的CRUD项目就算了;又要在计算机基础上多下功夫,Android基础、Java基础、计算机基础知识等等缺一不可。
3.放平心态,冷静大方。复习需要放平心态,不要因为今天这个同学拿了这个公司的offer那个同学拿了那个公司的offer而出现情绪上的波动,从而影响自己的效率。一颗平常心,答出真水平。面试是互相选择的过程,在回答面试官的问题时尽可能礼貌客气,尽可能有理有据,尽可能深入底层,尽可能全面概括。但碰到某些苛刻的面试官(譬如*汤某面试官,别说什么压力面)要勇于怼上去。
4.及时沟通,面试总结。和HR及时沟通,若不及时沟通可能会出现某团一个月后加面我的情况,如果HR面一周后及时询问,应该不会出现加面的情况;某米的HR面时自己说了想将base从北京改到南京,然后又加面了,emm..不应该的。每面试结束一场一定要听至少一遍,总结一遍,这样才会有成长(挂了的面试听起来也太痛苦了叭)。
5.刷题刷题再刷题...刷面经。算法的话如果平时积累没那么多的话,把剑指offer和Leetcode腾讯篇、头条篇刷上两三遍就差不多稳了,毕竟大多数的手撕代码只会给面试者十几分钟的时间去写,难度也会相对低一些。刚开始的话可以刷一刷面经,这里也感谢牛客平台和众位大佬的面经帖。
6.坚持就是胜利。想想自己的两年半研究生涯,从刚开始进入实验室的种种不适应到现在项目组的小组长,一路走来着实不易。考研选择、给学姐打杂、被分配到好几个项目等等,很苦很累,但坚持下来了,而且我可以说在每一个项目组都有在认真积极的解决问题,从不曾抱怨过。山重水复疑无路,柳暗花明又一村。坚信量变引起质变,美好的事物终将发生。
感恩,感谢。下一站,字节跳动,我来了!
安卓开发交流群:651325026。微信交流群: