logo头像

我有一个梦想

Android大厂面试题

本文于 909 天之前发表,文中内容可能已经过时。

京1:

  1. butterknife原理,R2文件?
  2. Handler异步消息,同步屏障?同步消息?looper.perpare()何时创建?message.obtain()?
  3. Vsync,垂直同步信号?
  4. UI滑动渲染优化?
  5. 内存泄漏?leakcarray原理?
  6. oom的条件?
    1. 开辟多个线程导致oom?
  7. bitmap的存储形式在系统中的存储?存储在哪?
  8. 布局优化?LinearLayout draw几次?
  9. IPC机制,binder机制的理解?为什么使用线程池?(一个服务端对多个客户端)
  10. flutter渲染机制?flutter的树?

京2:

  1. 移动端自动化开发
  2. EventBus原理?优点?缺点?切换线程的方式
  3. ViewModel+LiveData
  4. 音箱和手机的差异化?android版本,厂商room,客户群体不同
  5. apk瘦身?
  6. 启动优化的时间检测?启动器优化方式
  7. 组件化?如何设计一个组件

小米1:

  1. Activity的生命周期?activityA在下拉框的时候的生命周期?(不变化)onDestory有立即执行吗?

  2. activity启动后在最后一帧绘制在哪?

  3. android启动打点?AOP?启动优化?开启一个线程?AMS,反射?如何对函数进行插桩?

    ASM对.class文件修改,生成.dex文件前搞定,在.class和.dex文件转化中间作修改

  4. leakcanary原理?自己如何做内存泄漏器?各个函数之间的耗时情况?

  5. 亮点?有向无环图?contentprovider的初始化?

  6. Handler内存泄漏的原因?怎么处理?handler持有Activity强引用,messageQueue持有handler的强引用

  7. view的绘制?dispatchDraw()和onDraw()的执行顺序?

  8. 如果绘制一个圆,保证这个圆的中间不被绘制?cavas进行裁剪,画布上就缺一块,则子view绘制不上

  9. view的事件分发?如果dispatch返回true,会拦截到onInterrcept和onTouch

  10. bitmap的优化?bitmap的大小的计算?2x的大小图片放大1x的图片中,bitmap会变大

  11. 线程池?阻塞的处理?exectue和submit的区别,如何捕获线程池错误(ThreadFactory)

  12. 生产者消费者通知?

  13. 线程同步?加锁,Sychronized,ReentrantLock

  14. Hashmap,hash值计算?为什么这么计算?arraymap和hashmap?

  15. 数组和链表的区别?

  16. https加密形式

小米2面:

  1. 启动优化?bitmap预加载?如何更快加载图片?还有别的什么优化?
  2. Glide的into方法是怎么执行的,如何显示到imageView中的?
  3. Glide的加载流程?fragment如何绑定?imageView正在加载,再次加载另一个图片,具体会执行什么?
  4. Android启动流程?Activity启动流程?
  5. ViewModel?LiveData的理解 ?mvvm的理解?
  6. 网络请求异步框架?线程池?
  7. 链表反转(逆置)

Yy1:

  1. okhttp io的方式?okio,java中io的方式?责任链模式?连接池复用?

  2. Glide的缓存结构?为什么要用activieResource?

  3. EventBus的简述?字节码=.class文件,注解方式?

  4. RecyclerView缓存形式?

  5. MotionLayout的内部原理

  6. Mvvm需要注意什么?内存泄漏?持有view的引用

  7. leakCanary原理,gc间隔=5s,在idleHandler中使用延迟5s的操作,大概是主线程闲置后在等待5s中进行验证后执行gc?Fragment怎么监听内存泄漏的?fragmentManager.registerFragmentLifecycleCallbacks中检测

  8. apk瘦身?so库合并

    先把所有要打包的库编译生成静态库,然后使用如下命令把它们合并成一个*.so:

    1
    gcc -shared -o c.so -Wl,--whole-archive a.a b.a -Wl,--no-whole-archive
  9. 启动优化?其他的优化框架,

  10. 线程,进程,协程?时间分片?协程是怎么做的?那个io?

  11. handler机制?子线程中如何使用handler?handler中的Looper.prepareMain和Looper.prepare的区别?主线程永不退出,死循环?同步屏障?

Yy2:

  1. 音频协议?
  2. 协程,进程,线程的区别?
  3. mvvm?组件化?
  4. websocket协议和http协议的区别?
  5. butterknife原理?注解的三种形式?
  6. 动态代理的方式?2中?动态代理的关联?
  7. 类型擦出?范性?
  8. 类加载过程?类什么时候初始化?静态类的初始化过程?
  9. 编译器优化?
  10. GCroot?栈溢出?(递归)
  11. java异常有几种?可以捕获oom异常吗?可以,在bitmap中如果触发oom可以进行try catch
  12. 动画?差值器,估值器?
  13. 二叉树之字形打印

581:

  1. 组件化ARouter框架原理?

    编译时注解生成类文件,存储全局路由管理,通过反射创建对象。

    如果是Activity,通过Intent进行跳转传参,Fragment,BroadCastReceiver,Service等都是通过反射创建对象的

  2. LiveData,viewModel机制,如何绑定生命周期,viewModel中持久化是怎么做的,LiveData中的粘性事件

    粘性事件是通过版本号控制的,当进入active状态后,会比对version版本,进行订阅者的通知

  3. Activity的启动过程

  4. RecyclerView机制

  5. Handler机制

  6. java中锁的机制,volatile的可见性怎么理解?Synchronized怎么理解?自旋锁怎么理解?ReentrantLock怎么理解?

  7. kotlin中的协程?

    kotlin中协程通过挂起函数来实现协程的处理,使用CPS变换,suspend

    每个挂起函数都会被编译为Continuation ,将函数体编译为状态机

  8. ASM

  9. flutter理解?fish-redux的分层?数据流向?

    view—–>action—->effect—–>reducer—–>store—–>view

58 2:

  1. 项目相关。。。

36012:

  1. Fragment切换,add和replace,复用的问题?

  2. Fragment可见性准确保证?

  3. Fragment构造传参的劣势?

    在Activity异常退出重建Fragment的时候,会执行Fragment的无参构造方法,如果通过setArguments进行传递参数,Activity在构造Fragment时会通过反射午餐构造实力

  4. 内联优化?

  5. aapt1和aapt2的区别

    aapt1进行全量编译

    aapt2进行差量编译

  6. 垃圾加载的GC root

  7. LRU算法怎么实现的

  8. java中的容器有哪些?线程安全的有哪些?

    Vector 与ArrayList几乎相同,但是线程安全

    Stack 继承自Vector

    CopyOnWriteArrayList 写实拷贝

    ConcurrentLinkedQueue 基础链表同步队列

    LinkedBlockingQueue

    HashTable

    ConcurrentHashMap

58 3:

  1. 对排序?
  2. http请求过程,https的过程
  3. 数组和链表的区别
  4. 栈中调用方法的过程
  5. LRU算法的实现

美团 1:

携程 1:

快手 1:

知乎 1:

  1. Activity的生命后期
  2. onConfigurationChanged?其他回掉时机?onSaveInstanceState回调?分屏?
  3. ARouter?
  4. Fragment的生命周期?onCreateView可以返回null吗?
  5. fragment怎么初始化?fragment为什么不推荐携带参数?androidx中提供fragment传参?Fragment重建?
  6. viewModel持久化?viewmodel重建?可以存储Bundle?
  7. java内存模型?volatile原理?可见性,非原子性,禁止指令重排
  8. 组件化开发?
  9. 二叉树镜像?

知乎 2:

  1. mvvm的理解
  2. 离开公司的原因
  3. 未来的方向,2c方向,架构方向
  4. 架构师主要负责,技术选型
  5. 为什么选择知乎?
  6. 知乎界面的分析+选型+排期
  7. 你的优势,为什么给你发offer?
  8. android启动器?线程池选型?
  9. 大文件查找方案?
  10. 整数的逆置,头和尾是0的情况排除