在线等!阿里、百度一面就惨遭吊打,kotlin 语言书籍
1:双亲委托机制?
2:插件化原理?
3:垃圾回收机制及其优缺点?
4:PathClassLoader 和 DexClassLoader 区别?
5:说下 Binder?
6:Android 旋转屏幕后 Activity 生命周期,Bundle 是存储在哪儿的?
7:事件分发机制?
8:Handler 实现?
9:Java 内存?
10:OkHttp 设计模式?
11:算法。
Http 和 Https 的区别
HashMap 的具体实施原理,HashMap 和 Hashset 的区别
Java 的垃圾回收机制
JVM 的原理及线上调优
string,stringbulider,stringbuffer 的区别
Java 的设计模式
在白纸上手写二分法排序算法,这道题我在 lintcode 上面做过原题
有哪些可以保持进程同步的方法
如何避免死锁
常见的数据结构有哪些
leetcode 原题:查找单链表中倒数第 K 个节点的算法,面试官要求手写
百度 Android 岗一面
1:算法:寻找出现超过一半的数字?
2:HashMap 原理?
3:热更新原理?
4:Astnc
Task+HttpClient 与 AsyncHttpClient 有什么区别?
5:Https 握手过程?
6:RecycleView 原理?
7:RecycleView 的使用?
8:Hybrid 通信原理是什么,有做研究吗?
9:ListView 图片加载错乱的原理和解决方案?
10:对称加密与非对称加密?
11:TCP、UDP 差别?
12:TCP 保证可靠的手段?
初级、中级 Android 工程师可能因离职而失业吗?
针对朋友找工作难的问题,我特意咨询了我在腾讯负责面试的朋友,为何 Android 开发普遍感觉找工作难。最后我们得出的结论基本一致:供需极度的不平衡。
这段时间他都在帮部门招人,在拉钩上也挂了 JD,一个多月的时间收到的简历估计有几百份,他发起了面试的不超过 5 个,最后硬着头皮递上去 1 个还被刷了。
可问题就在这里,据他反馈大公司都在招 Android 开发,很多部门还非常着急,但就是招不到合适的人。别跟他说现在做 Android 的人很多,质量是关键,数量一点意义都没有。每年池子里的人就那么多,一份好的简历出来不止公司之间,部门之间甚至是部门内都在抢,但这批人之外,绝大部分人的简历能占用的时间不会超过 5 秒。
以前我们沟通时他就提到过这个问题,在现在这个阶段,公司之间的技术鸿沟已经非常明显,开发者身在其中,也因为自身学习能力,环境,项目等等的差别,技术上的差距越拉越大,造成了工作几年之后的两级分化,并且这种差距的拉开不是靠自己的努力就能弥补的。
我这个 Android 开发八年的朋友,离职后缺乏大型项目经验,至今未找到合适的工作!属于一个典型温水煮青蛙的案例!
离职后的空窗期怎么度过?
俗话说的好:时光易逝永不回,离职后的空窗期其实是给自己一个沉淀的过程。
这里的空窗期主要是没有找到下一家公司的时间。一般来说,在这个空窗期间,我们要根据自己的情况,要么找工作,要么找项目创业,要么学习充电。
Android 学习路线指南
那面对这种情况,作为开发者,我们能做的是什么?最基本的,脱离舒适区,不停磨练自己的技术。
工作前三年是职业生涯中成长最快的几年,在这段时间里你会充满激情,做事专注,也容易养成良好的习惯。在大公司有些同学在前三年中就快速成为某一个领域的技术专家,有些同学也可能止步不前。接下来和大家一起探讨下如何在三年内快速成长为一名技术专家。
学习方法
1:掌握良好的学习心态
2:掌握系统化的学习方法
3:知识如何内化成能力
4:广度和深度的选择
1.掌握良好的学习心态
空杯心态:
首先要有空杯的学习心态,而不是傲娇自满,故步自封,空杯子才可以装下更多的东西。首先要学会取百家之长,带着欣赏的眼光看团队的同事或学校的同学,欣赏每位同事或同学的优点,然后吸取他们的优点,每个同事都有其擅长的能力,比如有的同事技术能力强,那么可以观察下他如何学习的(或者找他请教学习方法),有的同学擅长解决线上问题,那么观察他是如何解决线上问题的,解决思路是什么?如果他解决不了时,他是如何寻求帮助。有的同学擅长使用 IDE 或 MAC 的快捷键,那么可以向他学习提高工作效率。有的同学能快速理解业务知识,观察他是如何做到的,自己如何达到他的程度。沟通能力,解决问题能力以及规划能力都可以向同事学习。
坚持学习:
有的同学可能工作了五年,但是学习的时间可能一年都不到。学技术不能急于求成,只要学习方法正确,量变一定会引起质变。
2.掌握系统化的学习方法
如果学习到的知识不成体系,那么遇到问题时就会非常难解决。有些同学会出现这些情况,比如编码时遇到问题百度搜索,如果百度上找不到答案,这个问题就解决不了。再比如,在开发中要用到某个技术点,就学习下 API,程序调通后就不再深入研究,浅尝辄止,如果程序遇到其他问题也不知道如何解决。
以上情况我认为叫点状学习。遇到一个问题,解决一个问题,需要一项技术,学习一项技术。那么如何由点到面,由面到体,形成系统化学习呢。
首先要确定学习的知识领域,需要达成的学习目标,针对目标制定学习计划,就像你要写一本书一样,先把目录写出来,然后根据目录上的知识点逐步去学习,最后把这些知识点关联起来,形成一个系统化的知识体系。学习的时候,可以制定一个计划,以周为单位,比如第一周学什么,第二周学什么。
比如我们 Android 开发,学习进阶路线是:
3.知识如何内化成能力
成长必须经历一个步骤,就是把知识内化成能力。知识是用脑记住的,能力是用手练习出来的。在工作的几年里,我们可能看过很多书,听过很多技术讲座和视频,但是通过听和看只是让你能记住这些知识,这些知识还不能转换成你的能力。
听和看只是第一步,更重要的是实践,通过刻意练习把听到和看到的知识内化成你的能力。
刻意练习,就是有目的的练习,先规划好,再去练习。
4.广度和深度的选择
技术人员的学习路径有两个维度,深度和广度。很多程序员都有这个疑问,是先深后广,还是先广后深呢?
通过这么多年的学习和思考,我的建议先深后广,因为当技术学到一定深度后,就会有触类旁通的能力,自己掌握的广度也自然有了深度。但是在实际学习过程中,深度和广度相互穿插着学习,比如学习并发编程时,首先学习 JDK 源码,然后学进去之后,开始看 JVM 源码,最后看 CPU 架构,在技术点逐渐深度研究的过程中,广度也得到了完善。
所以无论哪种学习方式,学习态度才是最重要的,在广度学习的时候有深入研究的态度就能达到一定的深度,在深度学习的时候,主动学习相关的技术点,广度也得到拓宽。
职业规划
写给看到最后同学的话:
(1)一定要紧跟技术前进的脚步,尤其是大数据相关的技术,在技术更迭的时候一定要学习熟悉新技术,看源码,哪怕自己在工作中用不到也一定要学。因为这是你下一份工作的敲门砖。
我作为一个老兵,在上一家公司工作 4 年,我没有逼迫自己学习新技术。
结果现在面试碰壁,其实大部分原因就是人家用的都是主流技术,你不会你就被淘汰。
(2)不要给自己设置舒适区,这个就是说,一个公司待久了不要懒惰,不能荒废自己,始终要保持清醒的头脑和进取心,不断学习,不断完善自己的技术,架构设计能力,项目管理能力,交付能力等。
一定要及时从项目中总结经验和不足,最好落实到日记本中,最后通过不断思考,形成自己的做事方法论。
(3)对自己的职业生涯要有一个规划,以后要做哪一块一定要有自己的想法,确定了就要从这个方向完善自己,多学多练。
目前大数据这一块,有数据中台架构的公司不是很多,除了算法岗外,大多数人在团队中都是 1 专多能的角色,今天干干 ETL,明天搞数仓,后天又给 BI 出数据,可能又搞调度系统、报表系统、标签系统、反作弊平台等平台。
没有人会专一做某一块,但是自己一定要想好哪一块是自己以后要走的方向,那么这一个方向确定了就要深入的学习这一块的知识,多看源码,多做练习,如果接触到具体项目,要在项目中沉淀自己,最后形成自己的知识体系。
(4)做事情要有担当,不要根据 OKR 给自己设置界限,有能力有空闲多做一定要多做,这也是别人认可你的最佳途径之一。互联网圈子很小,大家认可你,以后去大厂,换个好工作,也许就更容易。
我们写代码,真的不要单纯的为了生计,单纯的觉得这是一个青春饭,我们可以把它当做一个一辈子的事业,30 岁以后你转型产品,转型架构师,你都是要有 code 的积淀的,不是说能转就能转的。
一个一生的事业,我想是值得你付出时间去学习的,鸡汤就这么多了。
技能储备
下面我提供一下我多年工作以来收集整理的学习路线,给大家做个参考:
学习一线大厂的各项技术:
大厂是我们的技术先驱,不仅仅是各种技术,还有很多令你大开眼界的使用方法,学习这些有利于自己竞争力的提高,深入理解后也可以提升你的学习效率。
现在竞争这么激烈,只有通过不断学习,提高自己,才能保持竞争力。
1.2020 大厂面试高频知识点
图片
网络和安全机制
数据库
插件化、模块化、组件化、热修复、增量更新、Gradle
架构设计和设计模式
性能优化
Android Framework
Android 优秀三方库源码
评论