美文网首页面试题
2022Android面经,历时一个半月,斩获大厂offer

2022Android面经,历时一个半月,斩获大厂offer

作者: tinyvampirepudg | 来源:发表于2022-07-16 17:15 被阅读0次

    今年行情极差,有相当多的同学遇到了给了口头offer,但是最终offer没下来;甚至正式offer给了,但是最终流程也没走完。

    欢迎投递简历,可review简历,可内推滴滴、小米等各大厂,微信号13718150827。

    废话不多说,先是三件套送给大家:

    1、面经
    先奉上2020年的面经:2020Android面经,历时一个半月,斩获3个大厂offer

    2、算法题:
    Java版本写的《剑指offer第二版》,测试用例、LeetCode上对应地址均有。
    剑指offer第二版Java代码,参考对应的LeetCode题目

    3、复习路径和资料:
    Android复习路径以及复习资料整理
    ps:这个后续会更新为最新的,大家先看下2020年的。

    面试题排名不分先后,大公司的在后面。

    快看漫画

    • mvp架构,如何实现一个Fragment,base系列如何实现?
    • 触摸事件的传递,View如何消费
    • 自定义View中,getMeasuredWidth和getWidth有什么区别
    • 线程池如何管理?异常如何处理?
    • 应用启动速度优化。
    • activity启动速度优化?
    • view优化。viewstub原理,哪些方法被跳过?如何被替换?
    • RecyclerView原理,RecylerView优化
    • hybrid和jsBridge。实例分析。flutter如何做呢?
    • 数据本地化方案:文件、sp、数据库
    • SharedPreference的commit和apply优化、有什么问题?如何解决?
    • 权限适配问题。

    牛客网(口头offer后都能给你放鸽子,你品)

    一面:

    • 项目
    • lint检测原理,插件
    • 组件化:分层的目的
    • flutter

    二面:

    • NA端截图如何传递给h5?共享的方式呢?
    • Hummer了解么?
    • 子线程能刷新UI么?为何只能主线程刷新UI?
    • Activity间的通信方式。
    • 系统为何不设计Activity#setData这种方式,让外部可以给activity提供数据呢?
    • https安全性如何保证的?Charles能抓取https么?app如何防止抓包?
    • 如何防止接口被mock,防止反爬虫?(内容签名,加盐)
    • 设计模式了解么?举例说明。
    • 算法题:无重复字符的最长子串

    三面:

    四面:

    • 项目
    • 路由方案
    • python脚本
    • 首页精细化刷新方案
    • sdk
    • 三个字概括自己
    • 成就感最强的项目

    蓝湖

    一面:

    • 项目
    • 说一个你遇到的最难的问题
    • 算法题:无重复字符的最长子串

    二面:

    • 项目
    • 性能优化,举例
    • 架构,好的架构如何设计
    • kotlin
    • sdk如何设计
    • 引入sdk时有哪些指标要考量?
    • 包体积优化
    • 算法题:101. 对称二叉树

    作业帮

    一面:

    • kotlin语法,函数为何设计为一等公民,协程
    • 泛型,为何要擦除?好处是什么?坏处呢?kotlin的泛型呢?泛型如何不擦除?
    • jvm、dalvik、art介绍下,解决了什么问题?
    • UI优化,UI渲染原理。哪些是CPU做的,哪些是GPU做的?
    • 为何掉帧?原理,怎么解决
    • 卡顿,原理,如何解决。
    • 如何量化UI优化的数据?
    • TCP/UDP。三次握手、四次挥手的必要性。
    • https的安全性如何保证的。
    • jetpack

    二面:

    • 项目
    • IM如何实现:长链接如何实现?乱序问题,丢失问题如何解决?

    陌陌

    • app启动流程,launcher之后的流程
    • window是何时创建的?
    • Handler,Looper为何不会导致ANR?Handler的延时消息如何保证?Looper和Thread如何保证关系?
    • GC机制,回收算法,GCRoot的类型
    • 多线程同步的方式有哪些?线程池?线程同步?
    • synchorized和Lock的区别?synchorized是如何实现加锁的?偏向锁的实现?锁膨胀的过程
    • https的密钥交换流程

    集度

    一面

    • 对话框治理方案
    • 网络:http演进过程:1.0 --> 1.1 --> 2.0。https:加密过程
    • 锁:常见使用,分类,死锁
    • 线程池核心参数
    • binder:内存copy几次。mmap几次映射
    • activity中,new Handler(),如果内存泄漏了,分析它的GCRoots引用链。
    • 事件分发:从手接触开始,一个完整的流程。
    • SharedPreference存在哪些问题?
    • Glide:如何管理生命周期?Cache?如果一张下载一张大图,有两个尺寸不同的View去加载,在内存中几份缓存?
    • View#onClickListener中,sleep(100s),会不会anr?
    • 三个线程依次打印,有哪些方式?
    • 用两个栈实现队列。

    二面

    • 你的Kotlin能力如何?
    • 你的架构设计能力如何?
    • 设计模式:装饰者和适配器模式的异同
    • 平时看哪些架构设计方面的书?
    • Intent你如何理解?
    • 跨进程传递数据,为何要序列化?
    • 启动一个Activity,为何要设计成跨进程的方式?app自己做不行么?
    • 下载一个几百M的大文件,如何校验文件正确性?如何修复?

    白龙马

    一面:

    • 开发业务
    • 稳定性排查
    • 运行时性能优化
    • 内存泄漏检测
    • GCRoots类型,Handler内存泄漏的引用链分析
    • 显示内存泄漏如何检测
    • Handler机制原理。消息屏障原理
    • 启动优化,启动流程,启动时间如何检
    • ArrayMap和HashMap相比较
    • 如何捕获crash,线上crash如何捕获
    • OOM线上监测方案
    • 卡顿检测方案
    • 设计一个图片加载库,磁盘缓存如何实现。
    • LRU实现
    • 如何统计项目中所有Button的点击事件

    二面:

    • 性能优化相关的:首页卡顿优化;
    • 负责的业务

    搜狐视频

    • 事件分发
    • 消息机制
    • 进程间交互方式
    • binder优势、binder内存大小
    • 锁、锁升级
    • volatile语义,各自是如何实现的?
    • Java内存模型
    • JVM分区、栈帧包含什么?各个分区各自的回收方式
    • 类加载机制、类加载步骤及细节
    • TCP和UDP的区别,TCP建立连接的过程
    • 设计模式。拦截器与责任链的区别
    • 长链接实现
    • 项目细节。
    • 算法题:55. 跳跃游戏

    拼多多

    • 包体积优化,改进空间
    • jsBridge原理
    • 个保法整改,如何成体系
    • AActivity在前台,跳转BActivity,生命周期方法有哪些会执行?A的onStop一定会执行么?
    • Intent可以携带哪些数据?数组类型。
    • 如何探测binder剩余多少空间?
    • 线程池核心参数,有哪些问题?
    • 死锁,如何避免。

    Bilibili

    Java:

    • HashMap的数据结构,如何保证快速查找,容量为何要设计为2的n次方这样?对扩容有没有影响?
    • ArrayMap 和 SparseArray
    • ConcurrentHashMap
    • HashTable,为何废弃
    • 多线程存在哪些问题?
    • synchorized实现
    • juc包下的lock如何实现的?有了synchronized,为何还要有这个?
      cas的原理
    • AtomicInteger如何保证原子操作
    • CAS如何保证原子操作
    • volatile的特性。拿一个特性举例说明
    • Java为何设计出可见性这个问题

    Android:

    • View#request之后,流程是怎样的
    • 事件分发:View设置了一个onClickListener,那么它的onTouchEvent中,DOWN的时间,返回的是true还是false?为何?
      如果一个View没有消费DOWN事件,那么MOVE和UP事件还会不会给它?
      CANCEL事件是如何触发的?
    • 滑动冲突解决过么?举例说明
    • getMeasuredWidth和getWidth有什么区别?什么时候会有不同?如何让getWidth的值跟getMeasuredWidth不同?
    • activity#onResume中,View展示出来了?原理
    • 通过view#post获取view宽高,可以获取到么?原理
    • 如何把消息交给子线程的Handler执行?
    • new一个Thread,在run方法里面写三行代码:
    Loop.prepare;
    Loop.loop;
    输出一行log。
    

    问,这行log会不会执行。

    • RecyclerView:
      Adapter#notifyDataChanged和Adapter#notifyDataRange方法有何区别?加载下一页数据时,我调用哪个合适?在onBindViewHolder方法中,view#getParent有值么?ViewHolder#recycler方法,何时会被调用?stableId了解过么?如果设置了它,页面内的ViewHolder会走onCreateViewHolder和onBindViewHolder方法么?此时这些ViewHolder是放在哪个缓存里的?

    美团

    一面:

    • 项目经验
    • 图片压缩。RGB565,为何不是556呢?
    • python脚本。
    • dumpsys脚本
    • 包体积优化:python脚本。
    • 枚举类替换是否有必要?
    • 性能优化:布局性能优化。首页刷新优化。
    • Activity启动流程。
    • 谁根据Intent中的信息去查找对应的进程呢?去查找对应的Activity呢?PKMS。
    • PKMS和AMS都是SystemServer启动起来的,它两在同一个进程里面。
      app的最近打开过的应用,知道谁做的么?关机开机后依旧保存,如何保存到磁盘的?谁做的?
    • 算法题:143.重排链表

    二面:

    • 地理位置相关的,你了解多少?
    • 对比前两家公司,地图特殊的方面,你做过什么
    • 你在上家公司,成长阶段分为几部分?里程碑的节点有哪些?
    • 最近看了哪些书
    • 算法题:
      数组中的第K个最大元素
      08.09. 括号

    字节-幸福里

    一面:

    • 合规排查,sdk如果调用了HttpURLConnection这种方式,你如何排查?
    • 假设三天之内完成,但是sdk三天改不完,你如何sdk处理?
    • SDK如果直接调用系统API呢?
    • 如何具备经济擦屁股的能力?
    • ASM能hook第三方sdk里面的类么?第三方的jar包呢?
    • python扫描文件,跟IDE里面全局搜索,有区别么?
    • 如何解决还没有暴露的合规问题?比如某天规则增加了?线上如何做?如何减少调整?你有没有比较好的解决方案?
    • webview:WebView里面,js调用native方法,它底层的原理是什么?为什么js能调用到Java的方法?webkit提供了这个功能,那它是怎么实现的?js调用native的方法时,是同步的还是异步的?java方法return一个值,js那边能立即拿到么?通过js调用一个java方法,这个java方法都是@onJavaInterface注解过的,这个方法是运行在哪个线程?
    • AB实验:分组,有没有需要注意的,或者关键点?怎么做到尽可能随机?
      如果N个实验在并行,实验跟实验之间,怎么去防止相互干扰?行为之间会有相互影响。样本隔离开的话就会有问题,多个实验都想要大量数据,如何设计?如何统计实验的指标?如何确认两个指标的关联关系?SQL层面如何实现?
    • 网络请求:https请求如何保证安全性?Charles能抓https请求么?能抓的话那安全性在哪?app如何防止代理抓包?
    • UI性能优化,加载绘制等,有哪些方面可以做的?
    • Java中静态方法,能不能被子类重写?编译会报错么?
    • 匿名内部类能不能访问外部类的私有方法?匿名内部类编译后也是独立的外部类,它为何能访问外部类的私有方法?如果能访问,是不是破坏了java的语义?怎么做到的?
    • 算法题,多线程顺序打印ABC。

    二面:

    • 图片压缩
    • 自定义路由方案
    • 注解处理器
    • 运行时注解和编译期注解的例子
    • 项目的产品指标
    • View绘制
    • ChoreoGrapher中Callback的类型
    • 同步消息、异步消息、消息屏障
    • RenderThread了解么
    • 包体积优化:access优化、R文件、arsc文件优化
    • 埋点方案设计
    • jetpack用过么
    • GCRoots分析
    • 如何监控页面卡顿?ChoreoGrapher方案呢?
    • mvi了解么?
    • kotlin了解么
    • 算法:反转链表,用递归

    字节-懂车帝

    • 项目经历。
    • Transform原理,Transform中是否能修改sdk中的class文件。
    • Handler机制,IdleHandler执行时机。Handler#postDelay(runnable, 20s) 一个消息,然后把手机时间调整为1分钟后,刚才的runnable会不会执行。
    • ThreadLocal是如何做到线程间的不共享数据的,ThreadLocalMap里面的key和value是什么。
    • 线程池的核心参数。如果core为5,提交了三个任务,分别被三个线程执行了,其中一个任务提前执行完毕了,此时再提交一个任务,这个任务是如何执行的?
    • Jetpack:LifeCycle如何实现的?LiveData,连续set两个相同的数据,会收到几次;连续post两个相同的数据,会收到几次;liveData能在子线程接收么?ViewModel:如何实现Activity旋转之后,依旧能恢复数据的?
    • Java泛型:为何会有Java泛型?泛型擦除;运行期能获取到泛型数据么?List<? extends Demo>; 与 List<? super Demo>的区别;PECS原理。
    • View事件传递;事件是从哪里到达Activity的?ViewRootImpl的作用?有A、B两个Button,各自设置了OnClickListener,在A上按下,移动到B上抬起,会触发OnClickListener么?为何?UP事件谁接收到了?OnClickListener触发的条件是哪些?
    • 算法题:①用两个栈实现队列②用栈实现最小栈③二叉搜索树,如何找到最小的公共父节点。

    抖音

    • 性能优化:UI绘制优化
    • 讲一下你做的比较好的项目
    • JVM的分区,各个分区的作用
    • android里面的两种序列化方式,如何实现的
    • SharedPreferences:两种提交方式,缺点,如何解决
    • 网络:浏览器输入域名后,后续的过程。DNS的细节(先从本机开始)。
    • Java中的锁,实现。
    • ANR:定义、如何解决。广播、service的anr时间
    • data/trace.txt文件格式
    • 包体积优化
    • 算法:k个一组反转链表

    小米造车

    一面:

    • 自定义View有哪几种方式?核心流程。一次完整的绘制流程是怎样的?
    • 如何给控件的背景设置圆角。
    • Activity生命周期是谁控制的?
    • 异步消息如何区分?作用
    • UI卡顿的原因有哪些?如何优化?
    • 内存泄漏常见的有哪几种?如何检测?LeakCanary原理,Activity、Fragment
    • 算法题:单链表中,无序,查找最小的n个数。

    二面:

    • framework了解么?
    • View绘制?
    • so奔溃如何解决?
    • 卡顿如何解决?
    • ANR如何解决,trace.txt如何看?
    • 算法题:打印ViewGroup的信息,仿照adb dumpsys的输出。

    相关文章

      网友评论

        本文标题:2022Android面经,历时一个半月,斩获大厂offer

        本文链接:https://www.haomeiwen.com/subject/baohirtx.html