最后
文章不易,如果大家喜欢这篇文章,或者对你有帮助希望大家多多点赞转发关注哦。文章会持续更新的。绝对干货!!!
- Android进阶学习全套手册
关于实战,我想每一个做开发的都有话要说,对于小白而言,缺乏实战经验是通病,那么除了在实际工作过程当中,我们如何去更了解实战方面的内容呢?实际上,我们很有必要去看一些实战相关的电子书。目前,我手头上整理到的电子书还算比较全面,HTTP、自定义view、c++、MVP、Android源码设计模式、Android开发艺术探索、Java并发编程的艺术、Android基于Glide的二次封装、Android内存优化——常见内存泄露及优化方案、.Java编程思想 (第4版)等高级技术都囊括其中。
-
Android高级架构师进阶知识体系图
关于视频这块,我也是自己搜集了一些,都按照Android学习路线做了一个分类。按照Android学习路线一共有八个模块,其中视频都有对应,就是为了帮助大家系统的学习。接下来看一下导图和对应系统视频吧!!!
-
Android对标阿里P7学习视频
- BATJ大厂Android高频面试题
这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
所以,我先给自己定了几条:
不能问一些简单的弱智白痴问题,必须要有深度,绝对不能让“应聘者”感到:“面试官的问题很Low!”的感觉。
尽量少说话,不然万一问了“应聘者”一个问题,“应聘者”回答后,反问我一个,我回答不上来,那更糗。
还有几个,当时想出来的,现在想不起来了。
我们暂且简称“应聘者”为“B”吧。
我: 简述Handler消息机制。
“B”: 嗯?
我: 就是说一下Handler发送和接收消息的实现,尤其是Message的消息载体的工作流程。
“B”:这个,额,不太清楚。。。
我:(赶紧换一个方向)Service和IntentService有什么区别?
“B”: Service和什么?
我: IntentService。
“B”: 没用过。。(他开始有点不好意思)
我: (哦,没事,这个可能确实太冷门了)那Service和Activity之间的通讯怎么实现?
“B”: 这个,通信,额,你指的是?
我: 就是传值,比如Service里面某个后台任务结束,怎么通知当前活动Activity,并且把结果传递出去?
“B”: 哦,这个,啊,想想。。。沉默10s后。。。
B: 额,比如用广播的方式?(我都尴尬的主动给了他一点提示)
“B”: 哦,对,广播,Broadcast之类的。
我: 那还有其他方式吗?
“B”:嗯,广播,额。。。(又是10s后)比如?
我: 接口回调。。。(算了不纠结这个,他知道广播,那顺便问个这个),那Context 的sendBroadcast和LocalBroadcastManager 的sendBroadcast有什么区别?
“B”: 这个没听说过。。。。。。。
后面的问题,我从MVP、MVVM等流行结构框架问到多线程同步,然后再问点击事件分发,到自定义View,再聊动画效果实现,基础的ArrayList、HashMap底层实现,final static关键字用法,进阶的设计模式里面单例模式和观察者模式的实现,java类加载、内存分配,他没有一个问题能确确定定的回答出来,要么“不知道”、“没用过”,要不支支吾吾的说不出个123。
哦,对了,聊的过程中,他反复说自己用过什么什么第三方的库显得自己很能干。
我问他:有没有开源过什么自己写的库? 他说没有。那我问他:读过ImageLoader的源码吗?ImageLoader的本地缓存机制是怎么实现的?他说不知道。我告诉他,你说的所有的库,我都用过,并且绝大部分我都看过源码实现,另外,像ImageLoader、Pull2RefreshListView这种库,我工作两年后就自己实现过简易的版本,还分别做过扩展。
最终最终我确定这个所谓的10年工作经验的“应聘者”,就是网上那种“一个经验用了N年而不是有N年经验”的人。
回过头我又仔细看了看他的简历,10年过程中,这个人换了8家公司,最长的一家呆了不到2年,最短的半年就不干了,简历里也没有自己独立完成过的项目,简历上大部分所谓的Android项目,全部都是基础控件的简单罗列,没用过设计模式,没用过分层框架设计,跟我第一年参加工作写出的东西一个鸟样。
在这次面试后期又面试了几个人,说实话都不尽如人意,这些面试者都有一个共同点:任何他们知道的知识点都是停留在知道、用过的层面,具体实现和怎么扩展优化都答不出来。
再想想这两年都在说Android开发饱和,我感觉这个说法有欠缺,饱和的是这种初级安卓开发,会简单的页面实现,但程序可扩展性和维护性,欠缺考虑,框架结构设计缺失。(当然不是说代码必须按照条条框框的写,而是说在合适的地方用合适的方法,某个地方明明一个方法函数就能解决,后期没有什么需要扩展的地方,那你非得按照JAVA面向对象思想,写一个类对象,再用个设计模式一框,那就舍本求末了。
我感觉我现在依然徘徊在中级工程师级别,由于各种原因,比如家庭等等,我学习的时间也感觉比刚工作的时候少了好多,精力也差好多,一想到这些,就有种念头:我可能永远也达不到那种网上动辄能码出10000 star开源库的大牛,或者随手写个深入透彻的解惑答疑的技术博客就有N个评论和转发的神人。所以我又有些动力,努力学习下去,这些人才应该成为自己的目标。
下面我从面试官角度来分析,在面试过程中的对候选人一些考查点吧。知己知彼百战不殆,面试过程中逆向思考一波,有助于我们怎么应对技术面。
候选人人设是否跟简历一致:
主要看候选人是否坦诚真实,这个会直接影响能不能通过。候选人上的项目经验和技能点应该尽可能与候选人匹配,比如说,候选人说做了XX项目,但是问起是怎么实现的,却答不上来,或者说熟悉xx技能点,却只会调用常用的api,对其源码细节一点都不熟悉,那多半是不给过的。如果候选人要吹牛B,能拿出能圆上吹牛B的实力,也是可行的。比如说某某模块其实是你同事做的,但是你也完全理解了,可以应答如流,面试官是不会计较的。
技术的扎实程度和项目经验匹配程度:
考查包括对技术的理解和解决问题的能力,包含一些细节,运用的场景,实现的原理等等,目的是为了测试候选人技术水平上限。答得越清晰,越深入,对细节掌握越牢靠越好,不一定需要全部答出答完美才能拿到offer,但这些题回答的效果最能影响到offer能谈多少钱。小厂偏重于技能、项目经验匹配度,大厂偏重于基础、原理。小公司,面试官通常希望候选人尽快上手,就希望候选人有类似竞品或者功能开发经验的候选人,所以也可以从这些方面做准备。大公司呢,可能会提出一些场景来考查候选人怎么设计,这就要求候选人功底深厚,逻辑严谨了。上面的题集我没写答案,因为我觉得很多题本就没有标准答案,也没有必要背题的“标准答案”,优秀的回答,应该是形成自己的理解输出的,说的有理有据就行。
最后我想说
为什么很多程序员做不了架构师?
1、良好健康的职业规划很重要,但大多数人都忽略了
2、学习的习惯很重要,持之以恒才是正解。
3、编程思维没能提升一个台阶,局限在了编码,业务,没考虑过选型、扩展
4、身边没有好的架构师引导、培养。所处的圈子对程序员的成长影响巨大。
金九银十面试季,跳槽季,整理面试题已经成了我多年的习惯!在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!