前言:

前一段时间和大牛们交流了一下,据反馈现在Android岗位也没有以前那么多了,没这么好找了,面临着互联网的寒冬,不仅仅是Android,大量公司模仿O2O模式导致死掉企业的很多,在加之培训机构大量的培训人,导致供大于求,当然这不意味着饱和,只是市场更趋于合理一些(只要技术好不用怕的)。最近结合一些面试的同学和大牛们反馈,前几天有大牛去阿里面试顺便整理了下一些面试题目。希望对大家有所帮助,后期会不断更新添加新的面试题。可以帮大家查漏不缺。以下是(阿里、腾讯、百度、华为、和字节跳动的试题汇集

就算写出答案也没必要(我写了部分面试答案,有需要的朋友可以浏览文末资料领取全部),因为开发与实际答案会有所不同,再者怕误导大家,所以这些面试题答案还是自己去理解吧!切记:不要背答案,多理解。

Android高级总结

1.说下你所知道的设计模式与使用场景
2.Java语言的特点与OOP思想
3.说下java中的线程创建方式,线程池的工作原理。
4.说下handler原理
5.内存泄漏的场景和解决办法
**6.如何避免OOM? **

答:1.使用更加轻量的数据结构:如使用ArrayMap/SparseArray替代HashMap,HashMap更耗内存,因为它需要额外的实例对象来记录Mapping操作,SparseArray更加高效,因为它避免了Key Value的自动装箱,和装箱后的解箱操作
2.便面枚举的使用,可以用静态常量或者注解@IntDef替代
3.Bitmap优化:
a.尺寸压缩:通过InSampleSize设置合适的缩放
b.颜色质量:设置合适的format,ARGB_6666/RBG_545/ARGB_4444/ALPHA_6,存在很大差异
c.inBitmap:使用inBitmap属性可以告知Bitmap×××去尝试使用已经存在的内存区域,新解码的Bitmap会尝试去使用之前那张Bitmap在Heap中所占据的pixel data内存区域,而不是去问内存重新申请一块区域来存放Bitmap。利用这种特性,即使是上千张的图片,也只会仅仅只需要占用屏幕所能够显示的图片数量的内存大小,但复用存在一些限制,具体体现在:在Android 4.4之前只能重用相同大小的Bitmap的内存,而Android 4.4及以后版本则只要后来的Bitmap比之前的小即可。使用inBitmap参数前,每创建一个Bitmap对象都会分配一块内存供其使用,而使用了inBitmap参数后,多个Bitmap可以复用一块内存,这样可以提高性能
4.StringBuilder替代String: 在有些时候,代码中会需要使用到大量的字符串拼接的操作,这种时候有必要考虑使用StringBuilder来替代频繁的“+”
5.避免在类似onDraw这样的方法中创建对象,因为它会迅速占用大量内存,引起频繁的GC甚至内存抖动
6.减少内存泄漏也是一种避免OOM的方法

7.说下Activity的启动模式,生命周期,两个Activity跳转的生命周期,如果一个Activity跳转另一个Activity再按下Home键在回到Activity的生命周期是什么样的
8.onRestart的调用场景
9.是否了SurfaceView,它是什么?他的继承方式是什么?他与View的区别(从源码角度,如加载,绘制等)。
10.如何实现进程保活

答:a: Service设置成START_STICKY kill 后会被重启(等待5秒左右),重传Intent,保持与重启前一样
b: 通过 startForeground将进程设置为前台进程, 做前台服务,优先级和前台应用一个级别,除非在系统内存非常缺,否则此进程不会被 kill
c: 双进程Service: 让2个进程互相保护对方,其中一个Service被清理后,另外没被清理的进程可以立即重启进程
d: 用C编写守护进程(即子进程) : Android系统中当前进程(Process)fork出来的子进程,被系统认为是两个不同的进程。当父进程被杀死的时候,子进程仍然可以存活,并不受影响(Android5.0以上的版本不可行)联系厂商,加入白名单
e.锁屏状态下,开启一个一像素Activity

11.说下冷启动与热启动是什么,区别,如何优化,使用场景等。
12.为什么冷启动会有白屏黑屏问题?
13.Android中的线程有那些,原理与各自特点
14.ANR的原因
15.三级缓存原理
16.LruCache底层实现原理:
17.说下你对Collection这个类的理解。
18.JVM老年代和新生代的比例
19.jvm,jre以及jdk三者之间的关系?JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。
20.谈谈你对 JNIEnv 和 JavaVM 理解?
21.Serializable与Parcable的区别?

Android多线程总结

1.什么是线程
2.线程的状态
3.线程的创建
4.线程中断
5.Thread为什么不能用stop方法停止线程

答:1.即刻抛出ThreadDeath异常,在线程的run()方法内,任何一点都有可能抛出ThreadDeath Error,包括在catch或finally语句中。
2.释放该线程所持有的所有的锁。调用thread.stop()后导致了该线程所持有的所有锁的突然释放,那么被保护数据就有可能呈现不一致性,其他线程在使用这些被破坏的数据时,有可能导致一些很奇怪的应用程序错误。

6.重入锁与条件对象,同步方法和同步代码块
7.volatile关键字
8.java内存模型
9.原子性 可见性 有序性
10.线程池ThreadPoolExecutor
11.线程池的种类
12.线程同步机制与原理,举例说明
13.arrayList与linkedList的读写时间复杂度
14.为什么HashMap线程不安全(hash碰撞与扩容导致)

答:HashMap的底层存储结构是一个Entry数组,每个Entry又是一个单链表,一旦发生Hash冲突的的时候,HashMap采用拉链法解决碰撞冲突,因为hashMap的put方法不是同步的,所以他的扩容方法也不是同步的,在扩容过程中,会新生成一个新的容量的数组,然后对原数组的所有键值对重新进行计算和写入新的数组,之后指向新生成的数组。当多个线程同时检测到hashmap需要扩容的时候就会同时调用resize操作,各自生成新的数组并rehash后赋给该map底层的数组table,结果最终只有最后一个线程生成的新数组被赋给table变量,其他线程的均会丢失。而且当某些线程已经完成赋值而其他线程刚开始的时候,就会用已经被赋值的table作为原始数组,这样也会有问题。扩容的时候 可能会引发链表形成环状结构

15.进程线程的区别
16.Binder的内存拷贝过程
17.传统IPC机制的通信原理(2次内存拷贝)
18.Java内存模型(记住堆栈是内存分区,不是模型)
19.类的加载过程
20.什么情况下会触发类的初始化
21.双亲委托模式
22.双亲委托模式的好处
23.死锁的产生条件,如何避免死锁
24.App启动流程
25.Android单线程模型
26.RecyclerView在很多方面能取代ListView,Google为什么没把ListView划上一条过时的横线?
27.HashMap如何保证元素均匀分布

Android View总结

1.View的滑动方式
2.View的事件分发机制
3.View的加载流程
4.View的measure layout 和 draw流程
5.自定义view需要注意的几点

HR问题汇总

1您在前一家公司的离职原因是什么?
2讲一件你印象最深的一件事情;
3介绍一个你影响最深的项目;
4介绍你最热爱最擅长的专业领域;
5公司实习最大的收获是什么;
6与上级意见不一致时,你将怎么办;
7自己的优点和缺点是什么?并举例说明?
8你的学习方法是什么样的?实习过程中如何学习?实习项目中遇到的最大困难是什么以及如何解决的;
9说一件最能证明你能力的事情;
10针对你你申请的这个职位,你认为你还欠缺什么;
11如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办;
12项目中遇到最大的困难是什么?如何解决的;
13你的职业规划以及个人目标;未来发展路线及求职定位;
14如果你在这次面试中没有被录用,你怎么打算;
15评价下自己,评价下自己的技术水平,个人代码量如何;
16通过哪些渠道了解的招聘信息,其他同学都投了哪些公司;
17业余都有哪些爱好;
18你做过的哪件事最令自己感到骄傲;
19假如你晚上要去送一个出国的同学去机场,可单位临时有事非你办不可,你怎么办;
20就你申请的这个职位,你认为你还欠缺什么;
21当前的offer状况;如果BATH都给了offer该如何选;
22你对一份工作更看重哪些方面?平台,技术,氛围,城市,money;
23理想薪资范围;杭州岗和北京岗选哪个;
24理想中的工作环境是什么;
25谈谈你对跳槽的看法;
26说说你对行业、技术发展趋势的看法;
27实习过程中周围同事/同学有哪些值得学习的地方;
28家人对你的工作期望及自己的工作期望;
29如果你的工作出现失误,给本公司造成经济损失,你认为该怎么办;
30若上司在公开会议上误会你了,该如何解决;
31是否可以实习,可以实习多久;
32在五年的时间内,你的职业规划;
33你看中公司的什么?或者公司的那些方面最吸引你。

我是以专题的形式来分析关于Android面试通过秘籍,整理资料不易,在Android学习或者在面试方面有需要提升,准备的朋友可以加入我的技术交流群Android高级架构里面不仅仅有Android各类专题面试资料,BAT高级源码面试题,还有提供学习的系统进阶视频资料,现在面对找工作的困境,需要提升自己的朋友们推荐加入。

webp