关注我一年多的读者,在春招补招中顺利上岸,拿到了大厂 offer,我一直在强调:意识 + 打法是努力的前提。
拿到大厂 offer 再回来感谢的人,以及愿意分享自己这段经历的人,都是真正在我文章中受益的,这让人很暖心。
下面是作者全文,请仔细认真阅读!
个人背景
俺终于签好了三方,春招还没结束,没有offer的兄弟姐妹不要放弃,好好奥利给,要相信付出终有回报鸭~ 文章较长,前面是笔者的经历以及心路历程,后面是笔者的学习方法以及面经,没时间阅读只需要看面经的同学直接翻到最后看就好。
先汇报一下战果,我是某双非一本智科专业,经过两年的努力面试来了差不多100次几乎面试了所有互联网公司,终于拿到头条蘑菇街百度小米合合信息的offer,薪资的话大概是按照我写的顺序排序的哈,大家offerShow公众号查一波就好,头条的薪资还是比较诱人的,但是绩效的占比会比较高,没有选头条的原因主要是因为女朋友的工作找在了杭州,所以选择了965的蘑菇街,选择方面的问题看个人权衡吧,我就不多说了。
学习之路
说来这一路还是很艰辛的,从18年国庆节开始,大三的我终于确定了自己的学习方向,之前的我真的不知道该往哪个方向,毕竟我只能算半个计算机专业哈,只学过一些计算机基础课程之后学校安排的就是模式识别自然语言处理之类的高端课程,虽然知道时好专业但是自己不甚喜欢不感兴趣,没有学习的动力。
于是乎我大一就只是学学基础课程,大二上学期还在迷茫地这个方向学一学遇到瓶颈了然后再换个方向学一学,一直没有决定自己最终的发展方向。终于在大二下学期加入的社团里结识了如今已在腾讯的大佬(在此感谢崔老板和谱哥,谱哥大佬也是崔老板推荐给我的,看了很多谱哥写的文章和其他兄弟们写的经验,真的对我帮助很大很大),一开始崇拜就完事儿了,因为这个学长是C++开发,所以我也寻思着自己也搞一手C++说不定也能进腾讯。
于是向学长取经后开始尝试C++,在经过一个月的学习后,我发现这玩意儿属实不适合我,对我来说简直0动力0成就感。那时候感觉自己不过还是条咸鱼罢了,干啥啥不行,做什么腾讯梦。之后和学长交流说感觉这玩意儿我整不来,那年18年,头条开始高薪招0基础客户端,学长建议我走这条路。因为自己一直是手机狂魔,三个月就要换一个牌子的手机体验体验系统,对手机情有独钟啊。然后先搞了一本郭教主的《第一行代码》开始了我的不归路,跟着郭教主的指导一步一步做出可视化的东西,我开始发现这才有意思啊,能够直接和用户打交道,这才nb啊。于是就开始了自己的Android路。
说来Andriod的学习并不容易,因为总体来说相较于其他的各个方向(不知道对不对我只深入学习了Android...),Android的学习资源是比较散的,成体系的书比较少,每一本书之间都有较大的跨度。比如我当时看完'《第一行代码 》之后开始看《Android开发艺术探索》,我看了三天三夜,满脑子问号。这什么玩意儿?我咋都没见过?有啥用?看了一大半理解的部分也就百分之二十不到。
然后开始在知乎,公众号上找一些付费的问答专栏寻找答案,但是学会了的人和没学会的人看问题的角度是完全不同的。咨询的作用可以说是微乎其微问的,结果都说是多做项目,遇到不会的就查。然后自己就开始跟着慕课开始做一些项目,并且同时保持快速地看书,感觉不一定要理解,要找到能为我解惑的那一本然后好好看看。
这个阶段说起来没多久但是当时真是非常煎熬的一段时间。因为我觉得在后期可以通过做项目,不会的再去查来拓宽自己的知识面,但是对于一个刚入门的新手来说,没有系统地接触到很多东西,做项目基本没有思路,碰到什么去查什么也没有完整的体系。但是我在探索的路上保持着做笔记的习惯,不会的咱就写嘛,先背会,以后遇到了就知道了。
实习秋招
上面这种方式的效率非常非常低,在经过三四个月的学习后开始了实习生的春招,无疑被残虐。一次一次怀疑自己的,一次一次地感觉自己或许没这脑子。但是每次失利后和女票聊聊天,感觉生活还得继续,以后要养媳妇儿养娃,让家里过上好日子,就又咬牙开始啃书(这意识、这动力很足)。
之后努力有了初步的回报,找到了一份对口的实习,这一年也基本一直保持学习的状态,实习对于在校学生来说还是非常重要的,可以接触一些大型项目,和自己写的小玩意儿完全不是一个Level,最关键的是可以遇到一群师傅,因为都是过来人,所以有疑问或者自己的思考之类的都可以和他们交流然后悟出一些东西,也感谢TAL的好哥哥们教会了我很多,hhh。
再之后就是紧张又刺激的秋招,因为我秋招开始的比较晚很多公司的面试都错过了,但是仍然面了很多次,尤其是头条。慢慢的经过超级多轮的面试我的小笔记本也逐渐壮大并且有了自己的体系。脑子里的知识树也逐渐清晰了起来。
笔者头条面试从19年4月找实习开始到最后拿到offer一共面试18次,前两次基本就是一面挂,一面不挂二面挂。后面就是三面挂,三面又挂,三面双挂???最后一次终于没挂哈,但是也看开了。一面挂的时候感觉自己太菜了,还要努力,二面挂的时候感觉自己有进步,还要加油。三面挂感觉...有点可惜,不甘心;三面又挂:不会吧,就这么没缘分?三面双挂:拉倒吧求我我都不去了(默默又找hr内推)。
上面说的都挺轻松哈,但是对当时的我来说,每一次挂都是很大的打击。所以现在还没心仪offer的铁子一定要坚持住嗷。学弟学妹们遇到瓶颈也不要放弃,毕竟我这种傻篮子好好努力都能有offer,你也阔以。
学习路线
学习路线的话我经过这么多弯路以及思考大致总结了一下,不只是学习路线,也是面试准备的思路:
1.首先Java基础很重要,需要花时间对Java中数据结构,Java并发,JVM虚拟机等有比较深入的认知。
2.然后就是Android方面的知识,从四大组件到消息机制,到事件分发等等等。
3.多做项目,前提就是前面两个搞差不多,不然就是照抄代码,根本不理解。
4.Android的一些开源框架原理,学习这些原理可以提高自己对整个架构的理解,对设计模式的理解。
5.操作系统,计算机网络。Android岗位来说这部分内容其实是比较少的,应对面试的话0基础一周也能学会。当然这里是针对应届生校招哈,之后要进阶的话可能还要对Linux有一定的了解。开发设计网络框架的话也要对网络很熟悉。
6.每天做一道算法题,首先剑指offer全文背诵理解,然后再搞其他的。这个东西主要是保持手感,说实话感觉对算法题的理解要是不到一种境界,面试手撕代码都是运气占比比较大,面试官问一个你见过的,10秒思路就想起来了,没见过的五分钟不见得有思路。
学习大致路线就是这六点,关于第二点补充几本书,按顺序看即可,期间根据能力做项目拓宽眼界。《第一行代码》+入门级项目熟练掌握基础组件+《Android开发权威指南》+接触Handler,IPC的项目+《开发艺术探索》《Andriod群英传》+自学RecyclerView(需要很全面,因为很重要),MVVM、MVP架构思想,视频以及Camera等;虽然还是会有些跳跃,最后我也会尽量详细地放在简书上,供大家参考。
面经真题
接下来就到了大家最喜欢的面经环节,因为面试公司太多了我就不按公司分类了,直接按照我的笔记顺序从基础到进阶地给大家过一遍哈。
还是先说一下面试技巧,首先,下面的这些问题都搞明白,搞得清清楚楚,最好每个问题都有逐字稿。然后就是心态要好,不管面试回答得怎么样,保持happy,不会的话也不要慌张,就当是一场梦,醒了很久还是很感动就完事儿了。说不定你今天很阳光,没说上也很阳光保持求知,给面试官留下好印象,另一个大兄弟没说上但是慌慌张张的,整个后半场都发挥不好了,你不就过了嘛。其实大家都是人,招人也不是只看技术的,技术过关然后性格好对胃口,有一种可以以后做朋友的感觉,哪怕你技术没那么全面但是很开朗阳光,和一个极度内向或者傲气的大牛比较的话我觉得都有很大机会。好了话不多说开始查漏补缺:
首先,Java方面的话一定要全面,各种数据结构,语言特性,并发操作都要熟悉,而且不仅要会用,还要看看关键源码理解原理。JVM也要理解,因为Android的虚拟机其实和JVM很相似,所以开发中很多技术比如热更新之类的都和JVM中的一些原理很相似。因为Java相关的面试问题实在太多太广了我就不一一写出来了。后续简书会上传我笔记上所有的内容。
Android相关:
1.四大组件,背的滚瓜烂熟先,然后注意启动模式以及场景,四大组件需要非常全面的理解。
2.消息机制 !必问!handler原理以及里面的各种小细节,这个点可以说问的问题太多了,你想象不到的问题
3.事件分发机制,各种情况下的传递和返回。
4.滑动冲突
5.各种Layout差别,性能差别,特性差别
6.RecyclerView 这玩意儿太重要了铁子们,关于这个东西的缓存机制,分段加载,等等问的非常多,直接就能看出来你的实战经验丰不丰富
7.AsyncTask
8.HandlerThread,IntentService
9.LruCache:
这里就可以引入LinkedHashMap
10.Activity、Window、DecorView、ViewRootImpl、AMS ...这些个东西之间的关系,一定要捋清楚。
11.View的Measure,Layout,Draw。这部分内容概念很简单,但是面试不会问你简单的概念,都是通过场景来问你怎么处理,所以结合一定的实践需要深刻理解。
12.IPC通信方法以及Binder机制 重中之重 基本必问,内容很多,大家自行选择学习方法。
13.Bitmap压缩
14.动画 动画这部分也是看你有没有实战过的常问问题,被问了几次都不是常规的概念问题。
15.dp sp px
16.sharePreferences
Android进阶相关:
1.Android多线程端点续传
2.全局异常捕获过吗,怎么搞的
3.MVC,MVP,MVVM
4.Binder原理,架构
5.Activity启动流程
6.内存泄漏优化,布局优化
7.组件化,热修复热更新原理
8.权限机制
9.RequestLayout/Invalidate区别
10.LayoutInflater
11.框架原理:okhttp,Retrofit,Glide,Arouter
计算机网络以及操作系统:
1.网络分层
2.tcp、udp 重点 常问
3.http、https 重点 常问
4.DNS 常问 以及各层的常用协议
5.线程进程 重点,包括区别,通信等等
6.内存管理
7.死锁,异步同步等概念
常见的问题就这么多,面经的一些详细内容还有自己笔记的内容我会逐步上传到简书,因为最近忙着搞毕设可能更新会比较慢大家可以先码住到时候看,主要针对今年要参加秋招和明年春招的想要从事Android开发的学弟学妹们参考,其他就是平常对一些三方库的使用和原理的理解以及三方库中整个架构的设计和使用的设计模式以及思想,需要多多积累。
大家也都知道最近大环境不好,找工作属实不易,要求也越来越高,但是干这行就得时刻保持学习的状态,既然选了就尽量奥力给嗷。
那么就说这么多,各位加油,江湖见!祝大家都能拿到自己心仪的offer~
本文作者:ColorfulXL(同简书账号)
推荐阅读:
2019年参加秋招的他们,现在怎么样了?
双非本科斩获腾讯暑期实习offer
想进百度,想拿算法岗offer,可以看过来了
认真的人 自带光芒