-
聊聊组件化
-
ndk 有没有写过(肯定没写过啊)
-
sharedperfence原理 commit apply之间的差别 如果写入失败了会怎么样
-
如何做包体积优化,如果让你做dex包体积优化你会怎么做
-
apt 和gradle transform的差别是什么
apt生成的是java的class,而且不能更改原始的类,而transform这个东西你可以为所欲为,但是毕竟操作的是字节码,风险系数更高,面试官还特地问了我下是不是有classnotfound问题,其实貌似真的发生过,但是想想感觉有些丢人没敢承认,毕竟有点一知半解。
- .class .java .dex之间的区别是什么
吐了,虚拟机什么的我面试的时候都给忘了。哎,太难了。.java是给开发看的,.class是给机器看的,而.dex是给安卓虚拟机看的。当然这边更多是想问安卓虚拟机相关的,反正答的稀烂
- okhttp 的拦截器机制 如果让你监控网络请求的耗时你会怎么写
把责任链说了,写了关键字得分了,面试官也没继续往下问,其实还是可以聊聊dispatcher什么的,okhttp的源代码说实话有点深。
-
kotlin 协程和java的线程有什么区别
-
启动优化是如何做的
我个人拙见哦,启动的东西要么延迟,要换缓存。时间轴总长其实比较难以优化,我们参考的是阿里的starup的任务图模式。
- 如何只拉起推送进程而不拉起app的进程
死亡题目,完全不知道答案。
- TraceView 和 Systrace直接的区别
哈哈哈,之前看过,然后忘了,这种东西一阵子不用吧就真的会忘掉。
面试总结:
对于这次的面试我的看法就是真的好难啊。要准备基础还要刷算法题,不仅问Android,还要问jvm虚拟机,顺便问问并发,还要会kotlin,最好还能来个flutter,给各位跪了。
下面是我在这次面试之后做出的一些反思以及对之后面试的一个学习复习方法:
技术储备不够面试被怼
为什么有些程序员就算是开发很多年了,去面试依旧会被怼呢?
大部分原因都来自于:技术储备不够。
太多程序员在平时都是做着crud的工作,有些技术都是等到工作上要用到了才去学习,就是因为大家平时用到什么去学习什么,以至于面试的时候面试官问点延伸性或者他需要的人才技术就回答不上了。
简单来说就是:只有当下公司的业务能力,没有解决技术的能力,缺少技术创新的能力。
以至于最后只敢找跟之前公司差不多性质的,缩短了自己的职业规划,工作越找越不满意。
平时应该如何进行技术储备、高效复习呢?
那些底层知识都很枯燥,每次学完就忘,一合上书就忘得差不多了,不知道要怎样学才好了。
其实造成这样的现象最主要的原因是没有掌握系统的学习方法,也没有系统的资料辅助理解和学习。
知识点就是那些,基本上,翻来覆去就是那些换汤不换药的问法。但是现在大家上班要写业务代码,下班又是家庭琐碎,要想自己静下心来好好学习根本不可能,仅仅只是有用信息的筛选就足够麻烦。
1、去学习「自己知道自己不会」的知识
其实在开发过程中,总有一些自己想学但是因为项目压力或者其他原因,然后自己打算放在以后 再学的东西,也就是所谓「自己知道自己不会」的知识。
例如:
-
比较常用的一些框架,比如客户端的网络请求、图片加载框架
-
常用的一些类和集合的源码,比如 ArrayList、LinkedList、HashMap(面试必问)
-
觉得自己无法清晰表达出来的概念,如「内存泄露」、「Java 并发」
这个阶段是一个对自己当前知识体系查漏补缺的一个阶段,你要做的,就是把自己不会的东西完 整的列出来,然后逐个击破。
2、全方位的学习,构建自己的「知识体系」
其实很多人在平时学习技术和日常开发过程中,学了非常多的东西,但很少有人会去系统地复习,从而构建自己的知识体系,导致自己学到的很多知识点没办法更好的产生联系,而且可能会 导致学了某个知识点没过多久就忘了。
那如何构建我们的「知识体系」呢?
Android 里面所谓的「知识体系」,我认为主要包含这几个部分:
-
Java 和 Anroid 基础
-
计算机网络
-
操作系统
-
设计模式
-
数据结构和算法
也就是说我们需要将这几个部分逐步击破,慢慢完善我们的知识体系,这个阶段是最花时间和精力的,但是坚持下来会让我们的基础变得更加扎实,而且能最大限度的构建我们的知识体系。
3、学习「自己不知道自己不会」的知识
这时候面试题的作用就出来了,「面向面试题编程」其实是一个查漏补缺、增强自己编程基础的非常好的方式。
在做面试题的时候,你会遇到很多奇奇怪怪的问题,很多都是你「之前没有接触过」或者「有接触过却没有往那方面想」的问题。
刚开始遇到这些面试题确实很让人很不舒服,但是这些面试题也确实能够最大限度地提升我们对知识之间联系的理解以及引发我们对一些具体使用场景的思考。
当然更重要的是我们可以通过刷往年各大互联网公司的面试题,让我们对于公司面试题有一个大致的认识而且也能提前了解到面试官面试时候的一些套路和做法。
遇到不懂的面试题直接回答不懂,但最好能将面试官的思路往我们会的东西带。
在面试的时候,切勿不懂装懂
我们面试的是技术岗位,有几斤几两,面试官问几个问题就知道 了,如果面试官问到的某个知识点,你只是有点印象或者没多少了解的话,直接回答这个知识不是很熟就行了。不然被面试官针对这个知识点追加几个问题的话,分分钟打你脸。
当然,在说对这个知识不是很熟之后,可以试着将面试官的面试思路往我们会的东西带,例如我 在阿里二面的时候,面试官问我有没有用过 B 树,因为我对 B 树不是很熟,所以我当时是这么讲 的:“对于 B 树不是很熟悉,但之前在看 HashMap 源码的时候,有研究过红黑树,对红黑树比较熟。” 然后成功地将面试官的问题转向了我熟悉的红黑树和 HashMap 的源码上面。
总结
想要拿到满意的 offer,**「坚持」**是最重要的,抛开了努力和坚持,其他的一切方法论都毫无用处。
任何一个行业都是不容易的,唯有持续的**「有效」**努力,才能走得更远。 以上便是我对于面试的一些经验和体会,希望能对大家有所帮助。
最后很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,下面的学习路线帮你解决问题!
知己知彼才能突破难关,所以这里分享我整理的这份10+家大厂面试真题送给大家:
- Android学习路线图
首先,对于没有学习方向,知识不体系的人,我把我工作几年整理的学习路线分享给大家,做一个借鉴作用,还不知道怎么学习的人可以直接照着我这个学习路线一个个的去学习,知识不体系的人可以参考下我整理路线的方式,总之希望能够帮到你们!
- 模块化学习资源
接下来是每个模块我整理出来的文档学习资料,帮助大家更细致化的学习。
《Android汇总复习资料—Java》
《Android汇总复习资料—Android》
《Android汇总复习资料—Android扩展》
《Android汇总复习资料—Kotlin》
总结
其实要轻松掌握很简单,要点就两个:
- 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
- 多练。 (视频优势是互动感强,容易集中注意力)
你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。下面资料部分截图是我花费几个月时间整理的,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Android程序员们学习。**
[外链图片转存中…(img-zHHfi5vT-1714604668089)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!