我的情况
14年刚毕业的时候,Android开发市场发展火热,无数人员涌入Anroid开发行业,人员增长率快,自然市场竞争力就大。当因为学历不高、职业技能不熟悉再加上没经历过项目实战,导致我的简历,大小公司拒收,最后只能来到了一家外包公司。
因为二本学历遭到某公司的唾弃的经历让我愤怒!但是也无可奈何,经历永远是过去式,职业技能才是未来应该占主导的!
来到外包公司以后,我的脸上满面愁容,因为在外包里,大部分程序员的时间都在ctrl C ctrl V,就像没有灵魂的代码机器,他们永远不知道。
外包公司的经历给简历带来的是毁灭性的打击:
因为之前公司是外包,所以老于的简历在求职人群之中跌落低谷,别说拿到offer,面试的机会也只有寥寥数次。
所以我干脆静下心来花了一年的时间学习,玩命似的的学习Android,因为知道掌握“吃饭”的技能不够强大,有很大的提升空间。于是开始不停逛Github找自己不会的实战项目,从博客上找资料,去各大网站收集Android开发学习视频,一步一步从最基础的做起。
盲目的学习还是效果差一点,后面开始学习怎么系统去学习,从大佬那里手机整理出了一份非常系统的学习路线,一个一个知识点的去死抠,读官方文档,阅读学习大佬们的源码,然后最后就是修改简历,准备好一切后开始投递简历。
面试结果:投递的简历大、中、小型各种公司不少于20家,面试大厂过了掌阅和腾讯,小公司过了一大堆,最后选择入职腾讯,从1512薪到2015薪,涨薪幅度12W 。
面试情况
腾讯一面
1.mmap native 日志优化? 2.广播和 EventBus 的区别? 3.常用设计模式你了解哪些? 4.跨进程通信有哪些? 5.简单讲讲 binder 驱动吧? 6.跨进程传递大内存数据如何做? 7.说说 ConcurrentHashMap 的实现原理说下,初始化大小是多少? 8.启动优化怎么优化? 9.你写的 rxpay 和 rxlogin 具体怎么实现的? 10.kotlin fullter 方面的
腾讯二面
1.单例设计模式都写写,静态内部类是怎么保证线程安全的? 2.synchronized 底层实现原理,ReentrantLock 公平锁与非公平锁。 3.主线程等待所有线程执行完毕,再执行某个特定任务怎么实现?原理和源码看过没? 4.自定义 view 的一般流程,要注意些什么如何优化,点击事件和长按时间分别是怎么实现的? 5.四种启动模式,在源码分析中的原理是怎样的? 6.讲讲 bindService 的过程,你当初是怎么优化后台服务进程的? 7.开发中你都用到了哪些设计模式?说说当时具体的场景。为什么你要用方法工厂,另外两种呢?
腾讯三面
1.讲讲 handler 的底层实现原理? 2.说说你做的日志记录优化? 3.你看过 binder 驱动的源码,说说他的内存映射过程,说说客户端等待服务端处理返回的流程,如果要跨进程传递大内存数据你具体会怎么做?简单写一写吧。 4.在公司做过哪些优化? 5.过程中遇到的一些最难解决的问题? 6.提到了动态修复替换加载 so ,那你知道怎么修复 class 吗?怎么修复资源呢? 7.还有什么要问的?
面试中问道的问题远远不止这些,这些知识我记得印象比较深刻,给大家进行列举出来的。其实面试中问的还是比较全面,比如有问道:日志、广播、设计模式、跨进程通信、Binder、Kotlin、Fullter等相关问题。
关于其他公司的面试题我把大概记得的整理了出来,分成了Android和Java两类问题,大家也可以参考下:
Android问题:
- 四大组件之间怎么实现通信(binder,冷启动) 2.Glide三级缓存,大图加载,活动缓存设计的必要,与Picasso有什么区别 3.说下MVP,以登录为栗子,与MVC对比有什么好处 4.启动模式,异同,activity A 打开 B 生命周期调用 5.handler设计模式、阻塞机制、同步屏障机制、线程切换、Looper、ThreadLocal 6.Retrofit的实现原理(动态代理 注解),rxjava如何实现线程切换、背压、版本区别 7.apk加固原理,加壳脱壳; 8.apk瘦身做了哪些,缩减了多少M 9.说个自定义view,绘制过程 10.说下事件分发机制,两个并列的view,点下去移到另一个,都调用哪些方法 11.内存泄漏有哪些,handler内存泄漏原因,如何解决,工具 12.tcp三次握手、四次挥手,HTTP与HTTPS区别,HTTP1.0与2.0区别,get与post区别 13.组件化原理,与插件化不同点,动态代理
Java问题:
1.注解类型,区别,元注解 2.说下对锁的理解:sync、lock、cas、volatile、JMM、读写锁 3.HashMap原理,存取过程,为什么用红黑树,红黑树与完全二叉树对比,HashTab、concurrentHashMap,concurrent包里有啥 4.泛型的理解,类型擦除 5.说下JVM的了解,内存模型,垃圾回收算法,可达性分析,引用计数法,四种引用 6.对称非对称加密、md5原理
程序员如何从外包跳到大厂?
简历是成功的一半
简历的重要程度在面试过程中占到50%,把简历写好也是一个技术活,就和你写晋升ppt一样,很多程序员上班摸鱼划水,最后周报和晋升答辩还能写出花来,你仔细想想这其中的套路?
格式排版没那么重要,讲清楚你干了啥,按照STAR原则来,把它当做一次你的上份工作经历的晋升答辩来对待,项目成果一定要量化!量化!量化!简历筛选就1分钟不到,把重要的东西强调出来!
面试能力和技术能力一样重要
很多职场老油条在面试这一环节上,绝对是跑得比其他人快的,因为这当中就是有套路!他们熟悉各大厂面试官面试的流程,大同小异其实,甚至把问的题目都摸得差不多了。
所以很多应届生在校招之前可以多问问你们的学长学姐,了解你想去的公司的面试套路,不要打没准备的仗!面试时很多坑,如果不做好足够的准备,你不被面试官坑也会被HR坑!毕竟短短的1个小时左右面试,看不出来太多。
进入和大厂对标业务的小厂,曲线救国
现在Android领域的大环境太好,部分岗位已经趋于饱和,大厂更加难进,但小厂你就得搞清楚它的核心业务是什么,比如要么进C端垂直领域里前几名的小厂,要么进深耕B端的稳了很多年的小厂,因为很多大厂在细分领域里后续要加大投入,一旦你是这个领域里的头部,大厂一开始涉足这个领域,你的机会就来了!
小厂也有它的优点,在小厂更容易有机会,大厂很多都是螺丝钉,我身边很多人都是在小厂干出了不错的成绩后来进大厂的。时间会证明一切!
从大厂的边缘部门进入
其实大厂并没有很难进,难进的是大厂的核心业务,两者对人才要求肯定是不一样的。这就和你当初选择大学一样,是进好的大学的边缘专业还是选择一般大学的重点专业?
这里只说一点,社会发展速度太快了,现在你看到的核心和重点,或许在三五年之后会变成边缘,同样地,现在的边缘将来很可能就成为了核心。
毕竟现在一个互联网创业公司的生存时间已经短到了2年,谁能确定未来呢?
从大厂的边缘业务切入,后面抓住机会转核心,未必不是一个好选择。先拿到船票再说!
去大厂必先技术沉淀
就拿上面我自己为例,我最后靠的是什么进的腾讯?
是学历吗?还是经验?
不,都不对,是努力,是技术,你要知道以后起决定作用的是自己的职业技能;
做东西的时候要有自己的亮点,比如你解决了什么难点?做前端的话那基本就是加载速度,用户体验跟耗时,webpack优化。做后端那就往CAP方面去靠,怎么做到高并发高可用的。
无论你是不是外包,只要你能力过硬,大场随时可以进。
技术积累冲击大厂
Android面试会涉及到很多杂而乱的知识点,所以想要进入大厂,你不仅需要有十分扎实的基本功,还需要有完整的解答逻辑!
接下来分享的这份锦囊里还包含了百度、阿里、腾讯、京东等众多大厂的Android面试真题,详细介绍了各企业的面试重点、解决方案,帮助大家做好面试准备,斩获大厂高薪 offer!
通过这份锦囊,你能收获:
- 了解大厂的面试考核标准,有的放矢地准备面试;
- 掌握一手最新Android面试真题,有针对性地刷题;
- 为自己心仪的公司提前做好准备,面试更有信心。
多余的话就不讲了,接下来将分享面试的一个复习路线,如果你也在准备面试但是不知道怎么高效复习,可以参考一下我的复习路线,有任何问题也欢迎一起互相交流,加油吧!
Android学习路线图
首先,对于没有学习方向,知识不体系的人,我把我工作几年整理的学习路线分享给大家,做一个借鉴作用,还不知道怎么学习的人可以直接照着我这个学习路线一个个的去学习,知识不体系的人可以参考下我整理路线的方式,总之希望能够帮到你们!
①看视频进行系统学习
前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。
②读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
③面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三。
④2020大厂面试高频知识点
- 图片
- 网络和安全机制
- 数据库
- 插件化、模块化、组件化、热修复、增量更新、Gradle
- 架构设计和设计模式
- 性能优化
- Android Framework
- Android优秀三方库源码