前前后后加起来面了3个月,觉得自己还是菜鸡一个,还是平时没好好下功夫刷算法题,系统化,体系化地看原理,很多东西停留在表面,一被深入提问就支支吾吾答不上来。下面是面试过的一些公司的技术面面试题,希望能给需要的人一点参考。
一、百度——搜索
一面 面试时间1小时
- 项目里IM库的整体架构?
- LeakCanary的底层原理?
- 内存泄漏有哪几种?怎么解决的?
- WebView缓存预加载是怎么做的?
- 如何与前端进行交互的?有哪些交互方法?
- ANR有哪几种?是怎么定位的?
- OkHttp的底层原理
- hashMap底层原理
- 死锁有哪些解决方法?
- https的原理是怎么样的?
- 项目用的是MVC,MVP还是MVVM?
- Kotlin相比java有哪些优势?
- Kotlin协程有用过吗?有哪些优点?
- 如何定位友盟上的Bug?
- 算法:给定一个数组和目标值,找出该数组中加和等于目标值的两个数的数组下标。升级问题:找出加和等于目标值的三个数的数组下标。
二面 面试时间1小时
- 介绍项目,分工,迭代,时间周期,规模
- ANR是什么?四大组件导致ANR的时长是多长?
- 崩溃率怎么定位?如何定位?是多少崩溃率?
- 负责哪个项目模块?难点是什么?怎么做的?有什么效果?
- 项目中视频上传是怎么选择的压缩库?为什么要做这个选择?
- 绘制优化又是怎么做的优化?平均层数是多少层?
- 内存泄漏是怎么定位的?为什么会发生内存泄漏?
- 四大引用分别是什么?强引用,软引用,弱引用,虚引用
- Activity的四种启动模式?相机是哪种启动模式?
- Activity栈是由谁管理的?
- 同一个Activity栈中可能有不同的进程在里面吗?
- Application Context,Activity的context,Service的context, BroadCast的context和contentProvider的context有什么区别?应该在什么时候用呢?
- MVP和MVVM的区别?
- 为什么离职?有目标城市吗?
- 平时怎么学习?自学吗?
- 算法题:找出两个字符串的最大公共子串?
二、荔枝App
笔试(30min 4道题)
- 哪些情况会出现内存泄漏?如何定位内存泄漏?
- 需要下载一张64M的图片并展示,尽可能完善地设计一个方案
- 给定字符串A和字符串B,在单线程中找出字符串B中第一次出现字符串A的位置;如果是多线程应该怎么找呢?
- 描述解决过的一个专业问题,是如何分析定位和解决问题的?
面试(1h)项目配八股交叉来的
- 自我介绍
- 内存泄漏(EventBus内存泄漏,Handler内存泄漏)什么是内存泄漏?为什么会产生内存泄漏?
- Lint定位进行绘制优化是怎么优化的?除了Lint还用什么工具定位?
- onResume()时可以获取到自定义View的宽高吗?自定义View的绘制流程?
- 说说Handler机制?
- 说说进行一次网络连接经历的过程?(从DNS到TCP到Http到Https)
- 说说网络链接中的数据加解密?为什么要使用对称加密而不使用非对称加密?
- 从事过项目推进的角色吗?如果要让你从事项目推进的角色你觉得要把控哪些节点呢?
- 了解JetPack库吗?
- liveData?
- 为什么使用MVVM?有什么好处?
- 从MVC迁移到MVVM有哪些东西是需要考虑的?
- 了解模块化和组件化吗?
- 将UI展示和数据解耦有什么好处呢?
- 了解过协程吗?说说协程是什么有什么优点?
- 了解引用类型吗?有哪些引用类型分别是什么?
- 了解垃圾回收机制的分代吗?为什么要使用老年代?
- EventBus的底层源码了解过吗?
- 平时怎么学习?
- 还用过哪些第三方库?使用过程中出现问题怎么定位和解决呢?
- 说说你做过的印象比较深的一项优化?(讲了WebView预加载)
- 那下载资源包出现每次都下载吗?(有版本号)
- 那是使用单线程下载吗?怎么下载的?
- 如果要优化下载速度怎么优化呢?(答了差分和多线程)
三、科大讯飞——教育
笔试+性格测试
笔试(牛客网,60min)
- 单选20(计算机组成原理,计算机网络,操作系统,设计模式,java,Android都有涉及)
- 算法题(二叉树相关,找一棵树中有左右子树的结点数)
面试(30min)
- 说说tcp和udp的区别
- 说说http和https的区别
- 说说hashmap
- 说说项目中做过的记忆最深的点
- 说说view事件的分发机制
- 说说当一个view左右滑一个view上下滑要怎么解决滑动冲突?在父view拦截还是子view拦截?
- 说说handler机制?
- 说说binder原理?
- 说说LRUcache?
- 抓过包吗?为什么抓到的包还是明文?
- ank和syn有什么区别?
- 协程和线程池有什么区别?
- view的三种绘制方式?有什么区别?
四、富途牛牛
面试时长:1h30min
- 介绍消息机制
- 介绍Kotlin协程,Kotlin如何捕获异常,运行在同一个线程中的两个协程异常会相互影响吗, Kotlin内联函数
- 介绍项目中的设计模式
- 介绍MVVM,MVC
- 介绍Glide的缓存机制
- 介绍内存优化
- 介绍页面的绘制优化
- 介绍序列化方法
- 智力题:36匹马,6个赛道,赛出前三名,要赛几次?
- 算法题:股票买卖
五、阿里——UC
一面(1h8min)
- 项目相关
- View的绘制流程
- 应用程序的启动流程
- Acitivity和Application哪个先启动?
- OkHttp 用了什么设计模式原理?
- 为什么使用Glide?对比别的图片库的优势?
- 工作中最有挑战的事是什么?
- 薪资,工作强度,期望薪资,为什么离职等
六、 欢聚集团——bigo
面试时长40分钟
- 介绍项目,画一下项目的架构图,两个没有依赖关系的模块之间如何通信
- 怎么处理线上bug,遇到了哪些棘手的线上bug怎么解决的
- webView加载速度优化,怎么优化的,之前多少秒,之后多少秒
- 开发过程中遇到的多线程问题,假设有1000个上传任务,怎么设计线程池,核心线程数设置为多少比较合适
- 说下mvp和mvvm的最大区别是什么
- 说下并发情况下如何使用集合,用currentHashmap有什么弊端吗
- cas和synchronized有什么区别?
- 说下内存优化,怎么优化的,leaakcanary的原理是什么
- 觉得自己当前项目有什么地方是用的不爽的,要怎么改进?
七、中望软件——看图大师
笔试: 20道单选6道多选1道编程
编程:找出字符串中第一个不重复的字母的位置输出
面试:
java/Android
- 内存泄露怎么优化的
- 屏幕适配怎么做的
- 类加载器的双亲委派
- Activity的启动模式
- Android13 14的新特性
- 自定义view怎么做的
- onDraw中有什么注意事项
- openGL有了解过吗
- handler机制(原理,主线程,内存屏障)
C++(因为我说我工作没用过就问了我基础)
- 说说指针和引用的区别
- C++的三大特性
- 说说在头文件中写了静态变量会怎么样
- 说说友元
- 说说C++中的内存泄露
- 设计模式
八、酷狗
- 说一下LeakCanary的原理
- 怎么做到线上检测内存泄漏
- Profiler怎么用的,用了些什么
- 卡顿怎么检测的
- 线上怎么监测卡顿
- OkHttp原理
- 说说缓存拦截器的原理
- 缓存存哪了,怎么存,怎么管理,多用户情况下怎么处理
- DiskLRUCache
- 说自己做的最有难度和成就感的工作
九、字节——剪映
- 内存优化(内存泄漏监控,还有别的优化吗?)
- 绘制优化(怎么做的,include和merge有什么区别?还有别的优化吗?)
- WebView优化(怎么做的?资源包怎么更新?还有别的方案吗?)
- 介绍OkHttp框架
- 介绍线程同步的方式
- HTTPS是如何加解密的?
- 介绍建造者模式,建造者和创建的对象之间的关系
- 泛型<? Super T>和<? Extend T>
- 做题:Z字形打印二叉树
十、库洛
- 内存优化(LeakCanary原理,四种引用,可不可以监控service的内存泄漏,还有别的优化吗?)
- Bitmap 一张半透明的图片原先为ARGB_8888可以压缩为RGB_565吗
- 如果一张大图加载到内存发生了OOM可以怎么解决
- 介绍一下Glide库原理
- 了解过Glide库中的Bitmap Pool吗
- 为什么内存缓存里需要用弱引用缓存和LRUCache缓存两层
- LRUCache用什么样的数据结构实现的
- WebView预加载优化是怎样做的
- Handler机制
- 两条线程同步怎么实现
- Notify()是在哪里?
- 线程安全问题怎么解决?
- 想实现同时加载10个线程调用接口,然后统一刷新UI应该怎么做?
- CAS锁适用于什么样的场景?
- 介绍协程,和线程什么关系?
- 为啥离职