尾声
如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。
PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
架构篇
《Jetpack全家桶打造全新Google标准架构模式》
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
字节面试题
电面一
-
dp是什么,sp呢,有什么区别
-
自定义View,ViewGroup注意那些回调?
-
界面卡顿的原因以及解决方法
-
android中的存储类型
-
service用过么,基本调用方法
-
Handler机制
-
LinearLayout、FrameLayout、RelativeLayout性能对比,为什么
-
Activity的生命周期,finish调用后其他生命周期还会走么?
-
FW层熟悉么,源码看过么
-
GC回收机制熟悉么,分代算法知道么
-
Java的类类加载原理
-
内存泄漏如何排查,MAT分析方法以及原理,各种泄漏的原因是什么比如
-
Handler为什么会泄漏
-
gradle熟悉么,自动打包知道么
-
介绍下先的app架构和通信
-
自己负责过哪些模块,跟同事相比自己的优势是什么
-
遇到过什么印象深刻的问题,怎么解决的
-
现场面试:三场
First:
-
最近都做了哪些工作?
-
遇到了什么印象深刻的问题。A:会顺着你介绍的项目问下具体实现。
-
推送消息有富文本么?
-
热修复了解么,用的什么?
-
apk包大小有限制么?怎么减少包大小?
-
工作中有没有用过或者写过什么工具?脚本,插件等等
-
比如:多人协同开发可能对一些相同资源都各自放了一份,有没有方法自动检测这种重复之类的
-
写过native的底层代码么
-
view的绘制熟悉么,介绍下
-
gc相关的算法
-
anr是因为什么产生的,怎么排查
-
界面上的话,有什么优化措施么?比如列表展示之类的,平时遇到过内存问题吗,怎么优化的?
-
平时用过哪些设计模式?
Second:
-
介绍下最近一年主要做了什么工作
-
会对简历上突出的技能进行详情的询问:
-
比如:音频合成的具体步骤,以及遇到的一些问题和细节处理。
-
会根据面试发散一些问题,问到,seek方法播放到末尾后重新播放会有一些卡顿的不流畅问题,怎么避免,从交互设计或者技术角度。(个人表示没怎么关注这种)。
-
项目团队多少人,怎么分配工作
-
线程之间怎么通信的?
-
app的架构是怎么样的,并且为什么这样,有什么优缺点?
-
算法熟悉么?给了一个二叉排序树,出了一个给定节点找到它的下一个元素(指的是大小顺序的下一个)的算法题。
-
为什么找工作,自己的优势是什么
Third:
-
技术问题不再局限于简历,可能根据简历和回答情况渐进并扩散。
-
感觉各个技术面试官之前并没有沟通,可能会问到类似的问题
-
介绍下自己主要负责的工作
-
Activity的生命周期有哪些,知道onRestart么,介绍下
-
savedInstanceState知道么,干什么用的,什么时候有值,什么时候为空,平时是怎么用的
-
View绘制熟悉么,介绍下,能说下是实现原理么?
-
平时用过什么开发工具,分析工具?
-
ANR是怎么回事?怎么查?Service会引起ANR么?
-
Activity的启动模式有哪些?栈里是A-B-C,先想直接到A,BC都清理掉,有几种方法可以做到?这几种方* 法产生的结果是有几个A的实例?
-
有什么工具可以看到Activity栈信息么?多个栈话,有方法分别得到各个栈的Activity列表么
-
都熟悉哪些命令?知道怎么用命令启动一个Activity么?
-
SharedPrefrences的apply和commit有什么区别
-
java里带$的函数见过么,是什么意思
-
MD5是加密方法么,Base64呢
-
有博客和github,主要是写的什么?有哪些关注
-
android 8.0 有哪些新特性
京东面试题
一面(京东)
1、基本的数据类型有哪些?
2、String、StringBuilder、StringBuffer的区别?
•String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间
•StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量
•StringBuilder是可变类,速度更快,单线程操作字符串,但线程不安全
3、Fragment是什么,使用场景和生命周期
4、说一下Context和内存泄露
5、线程创建的方法?
6、Activity的启动模式和适用场景?
7、ViewPager用过吗?然后扯到了它和Fragmen联合;
二面
1、自我介绍
2、介绍一下项目经历,项目中遇到最大的问题是什么?怎么解决的?
3、用过什么第三方库吗?说一下****Glide 和 Picasso****有什么区别?
4、如果让你自己设计图片框架,该怎么操作?
5、内存泄露和内存溢出说一下
(1)内存泄漏memory leak :是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。
(2)内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。
6、内存溢出的原因及解决方法:
(1)内存溢出原因:
①内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
②集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
③代码中存在死循环或循环产生过多重复的对象实体;
学习分享
①「Android面试真题解析大全」PDF完整高清版+②「Android面试知识体系」学习思维导图压缩包
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
326539)]
[外链图片转存中…(img-SKULkIxx-1715906326539)]
[外链图片转存中…(img-BnifKazt-1715906326540)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!