Android面试涉及到的知识点相对较多,总结下来,大致分为以下几方面:
1、线程中sleep和wait的区别
2、Thread中的start()和run()方法有什么区别
3、关键字final和static是怎么使用的
4、String,StringBuffer,StringBuilder区别
5、Java中重载和重写的区别
6、equals跟==的区别
7、抽象类跟接口的区别
8、抽象类能否实例化,为什么
9、Java中的锁
10、Http https区别,https的实现原理
11、Http位于TCP/IP模型中的第几层?为什么说Http是可靠的数据传输协议?
12、HTTP链接的特点
13、TCP和UDP的区别
14、Socket建立网络连接的步骤
15、Tcp/IP三次握手,四次挥手
16、java注解,反射,泛型的理解与作用
17、java线程,场景实现,多个线程如何同时请求,返回的结果如何等待所有线程数据完成后合成一个数据线程种类
18、JAVA GC原理
19、volatile的作用和原理
20、ReentrantLock原理
21、Java为什么要推出HashMap,它是如何解决hash冲突的
22、ArrayMap跟SparseArray在HashMap上面的改进
23、java虚拟机和Dalvik虚拟机的区别
24、设计模式、手写单例
(Java相关答案地址)
数据结构:
点击查看
算法:
算法部分要注意平时理解和积累,至少要会手写一种排序算法和一种查找算法,其它的算法原理最好理解
点击查看
1、怎么理解数据结构?
2、什么是斐波那契数列?
3、迭代和递归的特点,并比较优缺点
4、了解哪些查找算法,时间复杂度都是多少?
5、了解哪些排序算法,并比较一下,以及适用场景
6、快排的基本思路是什么?最差的时间复杂度是多少?如何优化?
7、AVL树插入或删除一个节点的过程是怎样的?
8、什么是红黑树?
9、100盏灯问题
10、老鼠和毒药问题,加个条件,必须要求第二天出结果
11、海量数据问题
12、(手写算法)二分查找
13、(手写算法)反转链表
14、(手写算法)用两个栈实现队列
15、(手写算法)多线程轮流打印问题
16、(手写算法)如何判断一个链有环/两条链交叉
17、(手写算法)快速从一组无序数中找到第k大的数/前k个大的数
18、(手写算法)最长(不)重复子串
1、Activity生命周期
2、Activity的启动模式
3、App及Activity的启动过程
4、Broadcast分类,使用、区别
5、对服务的理解,如何杀死一个服务。服务的生命周期(start与bind)
6、View的绘制流程
7、事件分发
8、Handler的原理
9、Android动画种类、区别
10、Fragment与Fragment、Activity通信的方式
11、保存Activity状态
12、Activity,Window跟View之间的关系
13、ViewHolder有什么用
14、Intentservice有什么用
15、有哪几种创建线程的方式,优缺点
16、Android中跨进程通讯的几种方式
17、进程和线程的区别,如何给四大组件指定多进程
18、同步与异步
19、Android UI适配
20、bitmap的三级缓存思想与如何优化bitmap
21、SurfaceView 与View的区别
22、Bundle传递数据为什么需要序列化
23、Android OOM及ANR的产生原因及处理
24、app优化:性能优化、内存优化、启动优化、图片优化、布局优化、响应优化、电量优化、网络优化、安装包优化
25、讲解一下Context
26、Android与H5的交互
27、混合开发
28、RxJava
29、MVP,MVC,MVVM
30、session与cookie的区别
31、如何取消一个网络请求
32、如何实现一个推送,极光推送原理
33、如何进行单元测试
34、进程的优先级、进程保活(不死进程)
35、JNI/NDK基本使用,java如何调用C语言的方法
36、经典第三方框架原理
37、AIDL理解
38、Binder机制原理
39、ClassLoader
40、静态代理跟动态代理
41、AMS,WMS,PMS
42、组件化原理,模块化机制
43、热更新与插件化,它们的实现核心原理是什么,它们的区别,如何进行dex替换
44、Hook以及插桩技术
45、逆向技术
46、代码管理工具,为什么会产生代码冲突,该如何解决