大厂高频面试题

Android

  • Activity启动流程

    • Zygote启动流程(小米)
    • ActivityRecord是什么、Activity的四种启动模式(小米、百度)
    • Launcher启动App的流程,中间有几种跨进程通信(滴滴)
    • Launcher启动图标,有几个进程(滴滴)
    • ActivityThread的main方法里面做了什么事,什么时候启动第一个Activity(斗鱼)
  • View的绘制流程

    • 详细的绘制流程(腾讯、滴滴)
    • 结合Activity的声明周期,View是在什么时候进行显示的(小米)
    • 屏幕刷新机制、双重缓冲,三重缓冲,黄油模型(斗鱼)
    • onCreate,onResume,onStart里面,什么地方可以获得宽高(斗鱼)
    • view.post可以获得宽高,有看过view.post的源码吗(斗鱼)
    • 自定义LinearLayout,怎么测量子View宽高(字节)
    • setFactory和setFactory2有什么区别(字节)
    • 怎么优化xml inflate的时间,涉及IO与反射。了解compose吗(字节)
    • checkthread的问题包括thread是什么时候被赋值的,从Window到ViewRootImpl的创建,几者之间的关系(字节、腾讯)
    • Window跟View的关系(字节)
    • onMeasure方法、MeasureSpec的理解(滴滴、vipkid)
    • Activity.setContentView中的xml文件是如何转化成View并显示到Activity中的(小米)
    • LayoutInflater是如何把xml布局文件转换成View对象的(小米)
  • 事件分发机制

    • 事件分发机制流程(滴滴、小米、vipkid)
    • 滑动冲突如何解决(美团、小米、vipkid)
    • RecyclerView是怎么处理内部ViewClick冲突的(Vivo)
    • ViewPager中嵌套ViewPager怎么处理滑动冲突(腾讯、小米)
    • 怎么写一个不能滑动的ViewPager(斗鱼)
    • ViewGroup在Action_Move时onIntercept返回true,事件怎么传递(滴滴)
    • setOnTouchListener,onClickeListener和onTouchEvent的关系(字节)
  • RecyclerView

    • RecyclerView的特点和缓存(滴滴、百度)
    • RecyclerView的缓存机制(B站)
    • RecyclerView 缓存结构,RecyclerView预取,RecyclerView局部刷新(字节)
  • Service

    • 两种启动模式的区别
    • 多个Activity共同bind一个service,一个Activity destory,问service的情况(字节)
  • Handler

    • Handler是怎么切换线程的,Handler同步屏障(Vivo、百度)
    • 同步消息,异步消息(斗鱼)
    • Handler机制了解吗、一个线程有几个Looper(猿辅导)
    • Handler内存泄漏的GCRoot是什么(滴滴)
    • IdleHandler用过吗、它的调用时机(滴滴、字节、新浪)
    • Handler休眠是怎样的?epoll的原理是什么?如何实现延时消息,如果移除一个延时消息会解除休眠吗(字节)
    • ThreadLocal干嘛的?用法和原理(京东)
    • MessageQueue中的Message是如何排列的(京东)
    • Looper.loop( )为何不会阻塞进程(小米)
  • Binder

    • 经过几次copy、从哪里copy到哪里(小米、百度)
    • 多进程怎么实现?如果启动一个多进程APP,会有几个进程运行(滴滴)
    • AIDL in out oneWay代表什么意思(字节、小米)
    • 跨进程通信了解多少?管道了解吗(字节、百度)
    • binder是cs架构,Server端的binder都是运行在同一个线程里面么(百度)
  • SharedParence

    • SharedParence可以跨进程通信吗(网易云、字节)
    • commit和apply的区别(网易云、字节)
    • SharedPreference原理、读取xml是在哪个线程(滴滴)
    • SharedPreference线程安全性,锁的对象是谁(字节)
  • 序列化

    • Serializable与Parceable的区别(网易云)
    • Bundle是什么数据结构、利用什么传递数据(网易云)
  • LifeCycle

    • LifeCycle的原理(斗鱼)
  • WebView

    • h5与native通信是怎么进行的(B站、百度)
    • WebView秒开的一些优化(网易云)
    • WebView性能优化做过什么工作(字节)
  • 屏幕适配

    • 屏幕适配做过什么工作(B站)
  • Apk打包过程

    • 了解APK打包的过程吗(滴滴、小米)
    • 为什么会有R文件这个映射表?直接使用资源的路径不好么(小米)

性能优化

  • 什么是OOM、ANR(新浪)
  • ANR了解过吗?有没有实际的ANR定位问题的经历(Vivo、小米)
  • 性能优化你做过哪些?(Vivo)
  • Android中Bitmap内存大小的计算(滴滴、新浪、vipkid)
  • drawable资源下Bitmap的加载顺序、drawable-hdpi、drawable-xhdpi、drawable-xxhdpi(京东)
  • 有做过什么Bitmap优化的实际经验、比如Bitmap如何压缩、缩略图、大图加载优化(Vivo、百度)
  • 有什么实际解决UI卡顿优化的经历(Vivo)
  • App启动优化做过什么工作?如果首页就要用到的初始化(滴滴)
  • xml的解析耗时在哪些方面,反射,读文件,解析(字节)
  • app瘦身、包体积如何优化(字节、京东)

第三方框架

  • 插件化

    • 实现原理(小米、猿辅导、字节)
    • 资源的插件化id重复如何解决(斗鱼)
    • 插件化的原理是什么、有没有什么非运行时插件化的解决方案(滴滴)
    • 插件化换肤方案(字节)
  • 热修复

    • 热修复的原理(快手、滴滴)
    • tinker的原理(B站)
    • tinker的patch文件如何生成,patch文件是全部加载dex文件首部么(滴滴)
    • 资源的热修复的原理,会不会有资源冲突的问题(腾讯)
  • OkHttp

    • OkHttp怎么实现连接池、里面怎么处理SSL(腾讯、滴滴)
    • OkHttp的缓存逻辑实现,CacheInterceptor源码实现(字节)
    • OkHttp的重试机制(滴滴)
  • Retrofit

    • Retrofit的实现原理、涉及到的设计者模式(滴滴)
    • Retrofit怎么做post请求(网易云)
  • RxJava

    • RxJava怎么切换线程(尚德、腾讯)
  • Glide

    • Glide源码实现(滴滴)
    • Glide是如何对图片进行缓存的(Vivo)
  • ARouter

    • 组件化之间如何去除强依赖(京东)
    • ARouter详细原理(Vivo、腾讯、猿辅导、滴滴)
    • ARouter怎么实现接口调用(腾讯)
    • ARouter怎么实现页面拦截(腾讯)
    • ARouter的原理是怎样的?注解处理器是处理java还是字节码(滴滴)
  • LeakCanary

    • LeakCanary的原理(百度)
    • 为什么不用虚引用?引用队列里面存的是什么(百度)
  • bugly

    • bugly日志收集的原理是什么(滴滴)
    • 怎么收集java的crash,native的crash(字节)

Java

  • 泛型

    • 泛型擦除、协变和逆变(美团、小米)
    • 泛型是怎么解析的,比如在retrofit中的泛型是怎么解析的(B站)
    • 泛型为什么要擦除(滴滴)
  • 反射

    • 反射是什么,在哪里用到,怎么利用反射创建一个对象(尚德)
    • 反射可以反射final修饰的字段吗(滴滴)
    • 既然泛型有编译期类型擦除,那么运行时无法获取到具体类型;而反射能在运行时获取到Class的类型(京东)
  • 注解

    • 编译期注解处理的是字节码还是java文件(猿辅导)
    • Source和Class、Runtime注解的区别(滴滴)
  • 线程

    • 线程池的种类(快手、滴滴)
    • 线程间同步的方法(B站)
    • 阿里编程规范不建议使用线程池,为什么(滴滴)
    • 如何让两个线程循环交替打印
    • 怎么中止一个线程,Thread.interrupt()一定有效吗(滴滴)
    • 进程和线程的区别(vipkid)
  • 锁相关

    • Java中的多线程数据安全问题、JMM(新浪)
    • 写一个单例,volatile的作用,为什么需要(快手)
    • volatile如何实现内存屏障(快手、斗鱼)
    • volatile 修饰 boolean能保证原子性么(字节)
    • synchronized底层原理是什么(尚德)
    • synchronized的对象锁和类锁有什么不同(字节、滴滴)
    • JMM可见性,原子性,有序性,synchronized可以保证什么(滴滴)
    • synchronized和volatile的区别(快手、字节、百度、vipkid)
    • synchronized是公平锁还是非公平锁,ReentrantLock是公平锁吗?是怎么实现的(B站、百度、vipkid)
    • 什么是CAS(快手、vipkid)
    • 源码中有哪里用到了AtomicInt(滴滴)
  • HashMap

    • HashMap的数据结构,扰动函数,扩容(快手、京东、小米)
    • HashMap的原理(斗鱼)
    • HashMap查找的时间复杂度是多少(滴滴)
    • hashCode的扰动算法,涉及到一个数字,31,这个31是怎么来的(字节)
  • ConcurrentHashMap

    • 实现原理,put方法,树化,扩容,继承了谁,扩容的时候,其余桶怎么感知(字节)
    • HashTable和ConcurrentHashMap的区别(京东)
  • LinkedHashMap

    • LinkedHashMap的数据结构(B站)
    • LinkedHashMap是线程安全的么、如何实现线程安全(京东)
    • LRU如何实现的(京东、滴滴)
  • ArrayList和LinkedList区别(快手)

  • SparseArray和ArrayMap。具体实现原理和特性(滴滴、小米)

  • 强引用、弱引用、软引用、虚引用的区别(小米)

  • equals,==有什么区别(快手)

  • 自动装箱发生在什么时候?编译期还是运行期(滴滴)

  • 接口和抽象类的区别,接口中可以有属性么(滴滴)

  • Aop、AspectJ、ASM了解么(滴滴)

  • 类的static属性字段,比如 public static int a = 1,被赋值几次(字节)

JVM

  • 垃圾回收算法、GC

    • 如何让GC不回收(快手)
    • GCRoot是什么、什么可以作为GCRoot(猿辅导、百度)
    • 新生代和老年代分别用什么算法(斗鱼、小米)
  • 内存模型

    • 内存模型分区、哪些是线程私有的、哪些是线程共享的(美团、斗鱼、小米)
    • JVM堆和栈的区别(小米)
  • 类的加载机制

    • 什么是双亲委派机制(京东呢)
    • 对象加载的过程,属性先加载还是方法先加载(尚德)
    • 静态方法,静态对象为什么不能继承(尚德)
    • PathClassLoader与DexClassLoader有什么区别(网易云、斗鱼、字节)
    • JVM类加载机制了解吗,类什么时候会被加载,类加载的过程具体生命周期是怎样的(滴滴)
    • class文件的组成?常量池里面有什么内容(滴滴)
    • java和字节码有什么区别(滴滴)

Kolin

  • 说一下kotlin的优缺点,let和with的区别(滴滴)
  • kotlin的in、out(小米)
  • kotlin ?的原理(快手、滴滴)
  • lazy使用(网易云)
  • kotlin与Java互相调用有什么问题(网易云)
  • kotlinc与javac编译字节码有什么区别(滴滴)
  • 说说你对协程的理解(快手)
  • 协程有什么作用、可以完全取代rxjava吗(猿辅导)
  • 协程可以在Java项目中使用吗(滴滴)
  • 协程介绍一下,讲一个协程的scope与context,协程的+号代表什么(字节)

设计者模式

  • 设计模式的6大原则(小米)
  • 单例的几种实现方式(小米)
  • 代理模式中静态代理和动态代理区别与实现(快手、滴滴)
  • 动态代理有什么作用(猿辅导)
  • 策略模式和桥接模式的区别(滴滴)
  • 代理模式与装饰模式的区别(尚德、字节)
  • 装饰器模式,适配器模式区别(字节)
  • Android源码中有哪些设计模式(腾讯)
  • 手写一个单例模式(斗鱼)
  • 动画里面用到了什么设计模式(滴滴)
  • OkHttp里面用到了什么设计模式(滴滴)

网络相关

  • http请求包、响应包(美团)
  • tcp/ip协议分层(美团)
  • tcp和udp的区别(小米)
  • tcp的三次握手、四次挥手(快手)
  • http-1.0、1.1、2.0有什么区别(网易云)
  • https链接过程(美团、小米)
  • 滑动窗口的最大值(小米)

算法

  • 最大回文字串(小米)
  • 随机打印k个数(小米)
  • 链表去重(美团)
  • 翻转链表(快手)
  • 按层打印二叉树(快手)
  • 反转数组(快手)
  • 链表求和(快手)
  • 二叉树的最大深度(快手)
  • 二叉树最长结点集合(猿辅导)
  • K个一组反转链表(猿辅导)
  • 不同面值的几个硬币,怎么求满足条件的最小值(猿辅导)
  • 一个大致有序的数组如何排序,最快时间复杂度(B站)
  • 斐波那契台阶(字节)
  • 二叉树的每一层最左边节点(字节)
  • 生产消费者模型(字节)
  • 数组里的元素,组合起来求最大值(腾讯)
  • 两个用单链表表示的大数相加,求他们的和。单链表元素的值为0~9(滴滴)
  • 求单链表的倒数第n个结点,时间复杂度为O(1)的解法(百度)
  • 遍历目录及其子目录,使用非递归的方式(百度)

设计及思考

  • 如果让你来实现一个网络框架,你会考虑什么(腾讯、猿辅导)
  • 如何封装一个字符串转数字的工具类(滴滴)
  • 设计一个埋点数据上报库,需要哪几个模块,提供哪样的接口(字节)
  • 实现一个文件下载上传功能(腾讯)
  • 设计一个云相册的功能(腾讯)

你可能感兴趣的:(大厂高频面试题)