Android面试

一、Java

1、 设计模式

  • 单例模式
    • 熟悉五种单利模式
    • 饿汉式和懒汉式的区别
    • 能手写线程同步单例类
    • 双重校验锁单例类
      • 两次判空的目的
      • volatile 关键字的用法
  • 生产者和消费者模式:能手写出来

2、线程

  • 线程的生命周期,sleep和wait的区别
  • 多线程
    • 多线程同步的方法
      • synchronized在jvm里是如何实现的(锁升级和锁优化)
      • Lock
      • volatile:关键字的用法
    • 多线程实现
      • runnable
      • thread
      • 线程池
      • AsyncTask

3、网络

  • TCP和UDP的区别
  • TCP三次握手流程
  • HTTPS实现原理
  • HTTP 1.x 与HTTP 2.x的区别
  • 安全性要求高的登陆密码加密如何实现
    • 对称加密和非对称加密

4、Object类有哪些方法

5、Java垃圾回收机制

6、内存泄漏、内存溢出的区别

7、HashMap实现原理及JAVA7和JAVA8中的区别

  • Java8 单个桶元素超过8转红黑树
  • 头插和尾插

8、ConcurrentHashMap实现原理及JAVA7和JAVA8中的区别 传送门

9、HashMap、ArrayMap和SparseArray的区别

10、LRU算法实现

11、强引用、软引用、弱引用和虚引用的区别

12、运行时异常和编译时异常的区别

二、Android基础

1、context的继承结构,Application中的Context和Activity中的Context的区别

2、Application生命周期

3、 MVC、MVP和MVVM的区别

  • MVVM框架:LiveData组件、jetpack、MVRx

4、apk打包流程、apk包目录结构

5、raw和assets的区别

6、IP直连

7、Android事件分发机制,cancel事件的作用

8、Android事件冲突

  • NestedScrolling
  • ViewGroup.requestDisallowInterceptTouchEvent()的实现原理

9、View的绘制流程

  • UI刷新机制

10、自定义注解

11、Android布局优化

12、Android内存优化

13、Android和H5交互

  • Android和H5通信的方式
  • addJavascriptInterface安全漏洞实现原理:反射

14、Handler机制

  • handler实现流程
  • 消息队列没有消息是如何做到不阻塞线程
  • epoll、select、poll的区别
  • message.obtain()如何实现message复用

15、RecyclerView和ListView缓存实现

16、APP保活如何实现

17、Intent可以传递哪些类型的数据

三、Android 框架

1、插件化和热修复 传送门

2、 OKHttp

  • 拦截器的实现
  • 如何自定义加载进度条
  • 如何实现DNS拦截

3、Fresco和Glide的区别

  • 图片缓存机制
  • 生命周期管理如何实现

4、RxJava

  • 熟悉的操作符:just、from、map、flapmap等
  • 如何实现线程切换
  • 被观察者多次线程切换时,为什么只有第一次生效
  • 背压实现原理

5、ButterKnife实现原理

6、LeakCanary实现原理

7、EventBus实现原理及优缺点

四、Android framewoke

1、Apk安装过程

2、android应用启动过程

3、 activity启动过程

4、Android跨进程通信

  • android如何实现跨进程通信:AIDL
  • bundle实现原理
  • bundle和共享内存的区别

五、算法

1、两个栈实现一个队列

2、最短路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值