面试总结(四)

SurfaceView 与TextureView
http://blog.csdn.net/jinzhuojun/article/details/44062175
http://www.cnblogs.com/wytiger/p/5693569.html

Android 动画原理
http://www.jianshu.com/p/db3c3b99cc9c
http://www.2cto.com/kf/201412/362001.html

1.实现一个栈Stack

2.实现两个子线程使用Handler通信

3.画出集合框架继承关系

4.低版本SDK如何实现高版本SDK的api

http://www.jb51.net/article/92313.htm
5.2n+1个数,有n个数出现了两次,如何用最简单的方法找出只出现了一次的数

public class XOR {  
    public static void main(String[] args){  
        int[] arr={3,3,1,2,4,2,5,5,4};  
        int res=0;//初始值   
        for(int i=0;i

http://blog.csdn.net/morewindows/article/details/8214003
http://www.jianshu.com/nb/6923023

6.一个字符串只包含“(”和“)”,确认成对出现的最长子序列“()”
如“(((()))()()”,输出为4
如“()(”,输出为2

一面
1.AIDL流程
2.Serializable与Parcelable序列化原理及区别
http://www.jianshu.com/p/a60b609ec7e7
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0204/2410.html

android上应该尽量采用Parcelable,效率至上

编码上:

Serializable代码量少,写起来方便

Parcelable代码多一些

效率上:

Parcelable的速度比高十倍以上

serializable的迷人之处在于你只需要对某个类以及它的属性实现Serializable 接口即可。Serializable 接口是一种标识接口(marker interface),这意味着无需实现方法,Java便会对这个对象进行高效的序列化操作。

这种方法的缺点是使用了反射,序列化的过程较慢。这种机制会在序列化的时候创建许多的临时对象,容易触发垃圾回收。

Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了

3.子异常父异常调用顺序处理
http://www.magicsite.cn/blog/Java/Java/Java336422.html
4.两个进程如何通信,使用AIDL或者Messagener
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0723/3216.html

5.用过什么设计模式,手写单例,问为什么要判空两次

6.SharedPreferences实现原理,它是不是线程安全的
http://www.sixwolf.net/blog/2016/05/03/Android_SharedPreferences%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/

7.如何实现多进程访问SharedPreferences,并保证安全性
http://melodyxxx.com/2016/08/04/%E5%A4%9A%E8%BF%9B%E7%A8%8B%E4%B8%AD%E5%AE%89%E5%85%A8%E7%9A%84%E4%BD%BF%E7%94%A8SharedPreferences/

8.transient关键字
http://www.cnblogs.com/lanxuezaipiao/p/3369962.html

二面:
1.线程池原理、corePoolSize、maxPoolSize、Queue。

2.完整说一遍从Launcher点击一个应用图标到应用启动的过程

3.内存泄露相关,有关内部类隐含持有外部类引用的问题

4.一个数组10个数从0到9,用三个线程,实现顺序打印
如:线程1打印0,线程2打印1,线程3打印2,然后又是线程1打印3…...如此循环,直到全部打印,然后线程退出
http://www.cnblogs.com/baizhanshi/p/6428810.html
5.volatile关键字原理,他不使用缓存,这个缓存指的是什么
http://www.cnblogs.com/dolphin0520/p/3920373.html

在此解释一下Java的内存机制:
Java使用一个主内存来保存变量当前值,而每个线程则有其独立的工作内存。线程访问变量的时候会将变量的值拷贝到自己的工作内存中,这样,当线程对自己工作内存中的变量进行操作之后,就造成了工作内存中的变量拷贝的值与主内存中的变量值不同。
Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。
这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。
而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。
使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。
由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。

三面:
1.画出你开发的app的架构UML图(...)

2.项目中有什么难点,你是怎么解决的(说了UI跟本地DNS解析,但是人完全瞧不上眼...)

3.用过哪些第三方库,说说他们的原理,你看这些源码学到了什么?

4.你用OkHttp,你为什么用它,有没有跟其他网络库做过对比
5.你觉得你自己优势在哪里?
6.你是怎么学习framework层代码你是怎么学习的,你都看过那些代码?
7.比如说手机请求一个数据,网络找到我们的基站,然后后续流程是什么,怎么到我们的服务器的

一面(主要是拿着简历问)
1.Android自定义view流程
2.事件分发流程
3.两种序列化
4.断点续传怎么做
http://www.jianshu.com/p/2b82db0a5181
http://www.cnblogs.com/hanyonglu/archive/2012/02/20/2358801.html
5.Android热修复、插件化了解多少,双亲委派模型
6.断点续传
7.弹幕效果怎么实现,每条弹幕不使用View如何达到移动效果
http://blog.csdn.net/goodlixueyong/article/details/50734551
http://www.cnblogs.com/JczmDeveloper/p/4872460.html
8.冒泡排序及优化
http://blog.csdn.net/xufeng0991/article/details/47844327
9.java注解,运行时注解,编译前注解

10.做过哪些优化,UI优化、内存优化

二面
1.说一说你对java虚拟机的了解
2.针对第一点所说,提问
3.说下虚拟机类加载过程
4.创建一个对象,如何确定需要分配多少内存
5.Class对象存储在什么位置,为什么
6.GCRoot有哪些,为什么他们可以作为GCRoot
7.volatile关键字
8.对象初始化过程,静态代码块什么时候执行的,调用构造函数子类父类顺序,为什么是这个顺序,在执行完初始化之后还需要哪些操作

笔试题
1.自定义view的流程
2.事件机制
3.Handler、Looper机制
4.activity从后台切换到前台生命周期
5.如果两个很长的数,用普通类型存储不下,使用链表存储,如1——>2——>3——>4即为1234,设计算法两个链表相加
6.实现聊天SDK,设计SDK框架

7.HashMap原理

一面
1.有了Lock锁,synchronized锁为什么会存在
2.Reentrantlock原理、ReadWriteLock原理
3.什么是偏向锁
4.说下Http报文格式
5.304状态码是什么
6.Http请求的缓存,服务端客户端是怎么协商的
7.Binder机制
8.说下Socket编程
9.算法题,一个数组0、1、0、2、1、0、1、3、2、1、2、1, 如下图,蓝色代表水,就任意一个数组转化为下图形式,求能装的水的

Paste_Image.png

你可能感兴趣的:(面试总结(四))