笔者处于重庆,Android从事4年半,寒冬之际裸辞出来面试。经历过后,以后要更加努力,扎实基础,砥砺前行。
下面是遇到的面试题,题目可能较为简单,以下以一句话的方式描述答案,可能有所欠缺,望读者指出。
1.开发中与遇到Activity被回收,其持有的Fragment没有被回收。如何解决这种问题?
答:这种情况会造成持有的Fragment重叠出现,在savedInstanceState方法中写入标识,在onCreate方法中根据标识判断是否需要重新创建Fragment
2.多线程的同步问题,以及死锁是如何产生的。
答:多线程中对于同一个数据加上关键字synchronized,死锁是因为互相持有资源导致,A在等待B释放资源,B也在等待A释放资源。
3.单例模式使用在哪些方面,单例模式下的同步问题
答:LayoutInfater,Glide,EventBus。针对要使用单例的对象设置同步锁。
4.内存溢出和内存泄漏的概念
答:内存溢出是由于应用 使用内存超过系统分配的最大内存,内存泄漏时由于大量对象没有被使用,但由于被引用无法被系统回收。
5.如何避免内存泄漏
答:将强引用的对象转变成软引用和弱引用,创建对应的WeakReference/SoftReference对象,通过该对象get获取引用对象,并在使用的时候判断引用对象是否为空。由于是软引用/弱引用,系统回收机制则会适时回收该对象。
6.必须使用强引用的时候如何保证不发生内存泄漏
答:在逻辑中,使用完该引用对象后及时销毁,避免一直持有。
7.堆(Heap)和栈(Stack)的区别
答:基本类型的变量以及对象的引用是在栈中(指针在栈中),对象数据和数组在堆中(对象在堆中)。
8.SurfaceVidew的原理以及与TextureView的区别
答:SurfaceView是在一个新起的单独线程中绘画更新视图画面。TextureView需要在硬件加速的环境下使用,消耗内存多,延时1-3秒
9.图片的三级缓存,LurCache在其中的用途
答:图片下载是按照 网络-缓存-LurCache的顺序进行。读取图片按照LurCache-软引用-内存/SD卡-网络的顺序逐级查找进行显示。
10.Android点击事件分发流程
答:DecorView 分发给Activity,Activity分发给ViewGroup,ViewGroup分发给焦点View,焦点View响应该事件,不响应的话按照View层级逐级向上传递指导Activity层
11.Android的存储方式/数据持久化
答:SharePreference,文件存储,SQliteDataBase
12.Sqlite数据库多线程使用如何保证数据同步
答:SqliteOpenHelper使用单例模式。
13.隐式启动和显示启动的区别
答:显示启动直接表明要启动的页面。隐式启动通过Action,Catorgy筛选出可启动的页面。
14.SharePreference中的apply和commit的区别
答:commit有返回值而apply无返回值,apply时修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘