Android面经踩坑题记录(入职字节已断更)

1,056 阅读23分钟
2021.11.1小结

如果你看到这句话,说明我的秋招已经结束啦,拿到了百度和字节的offer,这次校招打算入职字节跳动啦,希望在字节能有好的机遇叭!

断更


秋招开始

2021.10.20

字节跳动正式批(三)

最大乘积字数组 手撕 砝码问题 有五个砝码,为2g,3g,5g,8g,16g,其中有一个重量有问题,如何找出,说思路

什么时候开始学的安卓?学校里有开安卓的课吗?说一说Https的加密?DNS的解析流程?说说死锁的产生和避免?TCP是如何保证安全的?说说synchronized关键字?它可以保证可见性吗?volatile保证什么性质?什么是指令重排序?知道动态代理吗?说说插件化?为什么想要去了解插件化和热修复?说说泛型擦除?说说线程池?线程池的作用?如何自己实现一个线程池?自己项目里有哪些难点?说说事件分发?如何自己封装一个onClickListener?看过哪些源码?介绍下MVC,MVP和MVVM的区别?最近有什么想学的技术吗?自己有什么职业规划?自己有什么优点和缺点?缺点对工作有影响吗?了解字节的工作节奏吗?蘑菇街的作息是什么?自己在学校的作息是什么样的?对上班地点由要求吗?目前还有哪家offer?

反问环节:自己有哪些不足?

多看源码,对源码了解不够,基础还要继续加强


2021.10.18

字节跳动正式批(二)

有三个线程,编写代码使其循环打印ABC 10次,形如ABCABCABCABC... 手撕

在蘑菇街上班做什么工作?说说四种引用?有用过虚引用吗?Https的加密说一说?ssl的加密和http明文传输有什么区别?具体说说公钥和私钥?存在服务端恶意请求公钥后截获数据的问题吗?final关键字的作用?修饰类,方法,变量的区别?Jvm什么时候进行垃圾回收?必须要等Jvm自动回收吗?System.gc()一定会垃圾回收吗?不一定的话是否代表这个方法没有用?垃圾回收的算法介绍一个你最熟悉的?可达性分析是什么?哪些对象可以作为GC Roots?如果你要做可达性分析的话会用BFS还是DFS?说说标记清除算法?介绍一下自己觉得的两点?


2021.10.14

字节跳动正式批(一)

相交链表 手撕

介绍一下在蘑菇街的工作?接触过哪些业务逻辑?说说ListView和RecyclerView的区别?自己用过RecyclerView的第三级自定义缓存吗?详细介绍下轮播hint是如何实现的?说说事件分发机制?介绍下事件分发三个方法?点击事件序列是如何处理的?如何自己封装一个onClickListener?原来做过哪些性能优化工作?如何区分什么时候使用LinearLayout和RelativeLayout?为什么嵌套影响性能?ViewStub如何使用?include标签和merge标签如何使用?为什么自己的项目里把ViewPager迁到ViewPager2?如何解决里面的事件冲突?为什么会产生事件冲突?具体原因是什么?介绍一下Dalvik和ART?ART和Dalvik的编译有何区别?.apk文件打包的流程?AOT机制是做什么的?介绍下插件化和热修复?JVM有哪些内存分区?虚拟机栈里有什么?局部变量表是什么?动态链接的作用是什么?虚拟机栈存在于哪里?栈帧里有什么?内存泄漏如何产生?Android里什么情况容易出现内存泄漏?Handler为什么会出现内存泄漏?如何解决?

这段代码用了Jvm里哪些内存分区?

Object a = new Object();
static Object b = new Object();
void count(Object cc){
    Object d = new Object();
}

反问环节:字节面试侧重项目还是基础?我还有哪些要加强?

每个人不一样,看简历。刚才没回答上的问题可以回去思考下


2021.10.11

快手(一)

有一组0,1,2的数字任意排列,要求不适用额外空间,一次遍历使得最终排序形似00001112222

工作地点有要求吗?学习过程中遇到过哪些困难?怎么解决?遇到过印象最深的困难是哪个?同步和异步的区别?异步会阻塞吗?串行和并行的区别?单核CPU的并发和多核CPU的并发有什么区别?同步并发和异步串行的含义是什么?如何解决Hash冲突?一般链表法在什么地方会使用?如何只遍历一次找单向链表的中间节点?如何设计一个带优先级权值的队列?快排的最好最坏时间复杂度?如何推导出的?快排的思想介绍下?基准只能以某一边为基准吗?可以随机吗?随机基准如何进行快排?插入排序的时间复杂度?MySql用过吗?修改用什么字段?假如B表存在Key和Value,A表也存在Key和Value,写一个sql语句使得B表存在键值时删除键值?TCP的特点是什么?是可靠传输吗?TCP会丢包吗?UDP的特点是什么?TCP的流量控制是如何实现的?自己常用什么请求?Post请求和Get有什么区别?Https的加密是如何实现的?Http请求是如何发起的?Https是哪一层协议?ssl加密里是如何解析公钥的?DNS解析流程说一下?根域名DNS之上是什么DNS?


2021.10.8

OPPO(一)

平时逛哪些博客网站?基本什么时候学习?不打算考研么?大一大二做过项目吗?有哪些做的比较好的项目具体介绍下?感觉自己进步最大是哪一块?上班有哪些收获?网络如何进行性能优化?觉得自己项目里还有哪些地方可以做优化的?TCP的粘包和拆包是什么?三次握手介绍下?三次握手的意义是什么?TCP的504状态码是什么意思?自己常用哪些数据容器集合?介绍一下这些数据集合的区别?HashMap加载因子为什么是0.75?Hash冲突是什么?介绍一下put,get,resize方法?什么时候树化以及什么时候退化?为什么是6不是8?知道innoDb吗?觉得Kotlin和Java有什么区别?上班的时候基本做什么工作?做了哪些性能优化的工作?知道哪些垃圾回收器?G1的垃圾回收方式是什么?老年代什么时候进行回收?

反问环节:您是哪里人?讲话口音不像大陆的

是广东的,普通话不太好


2021.9.26

蚂蚁(二三)

大学期间参与过ACM吗?大一大二在做什么?简单说说在实习期间的工作?解决了什么问题?说说Handler?View的绘制?为什么不可以在子线程更新UI?标签流布局是怎么实现的?搜索框轮播是怎么实现的?Flutter做了哪些逻辑?性能优化的基本手段有哪些?老东家的内部框架有了解过吗?看过哪些源码?挑一个说说?Http和Https协议的内容?密钥交换的具体流程?软件工程学的是哪本计算机网络?

可不可以去北京?

自我总结

不要面阿里。。。会变得不幸。阿里的流程慢是因为笔试做迟了,这几面的面试官感觉都是刷kpi的。。。


2021.9.24

百度(一二三)

手撕单例模式 DCL双检查模式 静态内部类单例?手撕

介绍一下四大组件及其功能?Activity的生命周期?活动A按下Home键的生命周期回调?横竖屏翻转的时候生命周期调用?View的事件分发机制?View的绘制流程?Activity的启动模式?数据存储可以用什么?SharedPreference了解吗?项目里用过吗?第一行代码看的第二版还是第三版?安卓打包以后是什么后缀?.apk里包含了什么?有试过把.apk包拖到AS里去看构成吗?了解OOM吗?哪些情况会造成OOM?ANR是什么?如何造成?gradle里api和implementation有什么区别?组件化的理解?单元测试知道吗?如何看View的绘制层级?对性能优化这块有什么了解?有测试过绘制耗时吗?插件化了解吗?四种引用?类加载机制?JVM三种类加载器是什么?他们的关系?安卓的三种类加载器?创建线程的方式有哪些?你倾向于使用什么?为什么?线程的五个状态?锁的种类?ArrayList和LinkedList的区别?ArrayList是线程安全的吗?那么哪个集合是线程安全的?队列是哪个类?双端队列呢?CAS机制? CAS是什么锁?面向对象设计原则有哪些?设计模式了解哪些?计算机网络五层模型是什么?每一层的协议?Http的端口号?进程和线程的关系?安卓的跨进程可以使用什么?实习学到了什么?怎么去克服困难的?Git使用过么?git提交代码的流程?追加修改用什么命令?分辨率适配做过吗?

目前有offer吗?为什么不想留在老东家?


二叉树的层序遍历?二叉树的交错层序遍历?手撕

在蘑菇街做什么工作?Linux和安卓的跨进程通信手段有哪些?Binder机制的作用?Binder的内存映射有大小限制吗?View的绘制?Measure的测量模式有哪三种?分别什么含义?reuestLayout和Invalid方法的作用?SparseArray了解吗?说一下HashMap?红黑树了解过吗?接口和抽象类的区别?接口里的方法可以不实现吗?依赖倒置的使用?static可以修饰什么?CAS机制?CAS是悲观锁还是乐观锁?对synchronize的理解?

反问环节:百度女面试官很多吗?我的基础怎么样?

(因为这次面我的一二面面试官都是女程序员,所以问了这个问题)

百度也有很多女程序员。基础挺宽的,但是希望可以继续学习,因为有的深的东西似乎问不下去


反转m到n区间的链表?手撕

Activity的生命周期?说说Activity的启动?

未来的个人规划?自己的优缺点?为什么不留在老东家?可以来北京吗?对百度知道有兴趣吗?看过哪些源码?考不考研?对百度的看法?为什么选择百度?

反问环节:我的基础怎么样?

还可以,但是有的细节还要继续了解


2021.9.8

bilibili(一二)

进阶版跳台阶,假如一个人可以跳任意n级台阶呢?

为什么想学安卓?OkHttp源码讲一讲?线程池是如何设计的?一些重要的参数?接口和抽象类的区别?使用和定义的区别上各自说说?接口可以声明为private吗?protected呢?四个权限修饰符的区别?静态方法可以重写吗?为什么不可以?a += b和a + b有区别吗?int类型 + double类型会有什么问题?编译能过吗?假如Integer a = 10,b = 10,a == b会返回什么?“==”用于比较什么?有看过HashMap的源码吗?具体有什么区别?扩容机制有什么改变?什么时候会树化?什么时候树会退化成链表?一个线程可以有几个Looper?几个Handler?有多个Looper会有什么问题?为什么主线程不需要创建Looper?Runnable和Message有什么区别?handleMessage的优先级?Activity A到B的切换会调用什么生命周期?接听电话是Activity会调用什么生命周期?

平时怎么学习?看过哪些书?有问题怎么解决?你是怎么理解Android的?

在蘑菇街负责什么工作?具体有哪些场景?遇到过哪些困难?性能优化的具体数值有去关注过吗?有哪些性能优化手段?条形图有什么含义?Flutter渲染的具体原理?Flutter和Android的具体通信手段?Kotlin和Java的区别举例?用过哪些高阶函数?apply和let的区别?高阶函数的原理又去了解过吗?扩展函数用过吗?协程了解多少?RecyclerView的使用方式?展示原理?源码?事件分发机制了解吗?View是如何与触摸事件绑定的?看过哪些源码?Retrofit的核心原理?热修复框架了解哪些?热修复的原理?组件化原理?输入网址到渲染的具体过程?计算机网络五层模型?各有哪些协议?加密算法有哪些?

手撕LRU,如何用两个栈和一个变量实现栈内逆序

反问环节:游戏部门做哪些工作?

做游戏内sdk开发


2021.9.7

字节跳动(一)

对称二叉树 最小连续子数组

遇到过哪些比较深刻的问题?遇到问题怎么解决的?一个完整的IP地址发起请求的流程?DNS的具体解析IP的流程?TCP的机制?三次握手如果只握两次可以吗?有什么问题?HTTP和HTTPS的区别?ssl加密方式?堆和栈的数据结构差别?进程和线程的区别?进程间的通信方式?并行和并发的区别?进程里的一个线程如果被挂起会影响整个进程吗?死锁的产生?怎么避免?垃圾回收机制说一说?弱引用和软引用的区别?内存泄漏怎么发生的?什么时候写的项目?用了哪些知识?架构设计怎么设计?有哪些面向对象设计原则?迪米克特原则具体说了哪些?单一职责如何使用?面向过程和面向对象的区别和联系?面向对象三大特性?多态如何理解?多态和里氏替换的联系?里氏替换的目的?

自我总结

字节的面试是这几次里头最惨的。基础不扎实,八股文背少了,接不住面试官的发散问题,哎


2021.9.6

蚂蚁金服(一)

ps:时隔许久,结束了蘑菇街的实习开始了秋招,所以这个文章也要继续更新了

介绍一下在蘑菇街的工作?写过哪些功能?首页搜索框轮播的具体实现?瀑布流标签布局如何实现?如果每个item高度不一样如何处理?修复了哪些bug?onMeasure方法的两个参数如何理解?测量模式有哪几种?这几种测量模式和wrap_content或者match_parent有什么区别?布局如何优化?采用过哪些手段?常用布局的性能比较?Flutter写起来感觉怎么样?如何复用公共组件的?请求分页参数是如何优化处理的?组件化怎么理解?AndroidManifest文件怎么处理?有看过组件化相关的文章吗?

反问环节:蚂蚁是偏重项目经历吗?如何看出一个面试者的基础?

刚才提问也可以看得出来蚂蚁是比较偏重项目经历的,由于面试了很多人所有能从项目经历里看出有没有对需求的反思和改进,可以看出你的基础如何

自我总结

这次面试官很和蔼,聊天一样的面试,体验很好,但是估计我答的不太好,因为他催我去做笔试,把分考高点。。。。


腾讯(一)

无序数组寻找中位数 无序数组寻找第K大 手撕快排

有什么东西是你学习过程中遇到比较困难的?有什么进步?MVP架构解释一下?MVVM呢?Java里的引用类型有哪些以及区别?RecyclerView详细说说使用时遇到的坑以及解决方式?事件分发讲一下?Handler使用的多吗?讲一下原理?Message入队时会有并发问题吗?为什么用synchronized不用mutex信号量机制?具体讲一下synchronized关键字大的jvm实现?操作系统还有多少印象?进程和线程的区别?进程间隔离是怎么做的?讲一下热修复的原理?在蘑菇街做了哪些工作?Flutter的架构了解吗?Flutter相比原生的优势?Flutter的AOP机制?设计模式看过吗?有应用吗?

反问环节:我基础有哪些问题?

基础还行,有空可以再精进,操作系统等通用性知识要及时回顾,编码都要考的,要多写算法


以下是春招

2021.4.15

腾讯(一二)

无序链表删除重复项,括号匹配

Handler机制,loop()方法死循环为什么不会造成卡死?为什么不会消耗CPU资源?

View的绘制流程,事件如何拦截,SurfaceView使用过吗?

JVM类加载流程,双亲委派机制及其优势,内存模型和垃圾回收机制?

HTTP和TCP关系?HTTPS加密原理和证书的作用?HTTP2.0特性?TCP链接的概念?四次挥手三次握手的异常情况?

如何用UDP实现TCP?TCP机制有哪些?拔掉网线后TCP链接的页面如何显示?

线程池?进程线程区别?消息通讯有哪些方式?

ListView和RecyclerView缓存机制对比,用过哪些图片加载库?Glide中最重要的是哪个方法?做了哪些事情?

MVVM和MVP和MVC架构?了解哪些设计模式?

Socket编程写过吗?Kotlin语言了解过吗?看过哪些源码?

多继承和单继承的优势与劣势?虚拟内存是什么?CPU亲和度是什么?线程间通信的机制有哪些?

Android性能优化方面接触过哪些?

反问环节:我目前有哪些问题?

计网操作系统没有自己主动去深挖某一个点,Android了解还行,愿意去阅读源码是个好习惯


快手(一)

反转链表(剑指offer),可能旋转的数组最小值(leetcode-154)

Activity的生命周期?跳转到Activity B后执行哪些方法?从B返回呢?

事件分发机制?View的绘制流程?如果View B里有View A,点击事件是如何分发的?有哪些情况?

TCP三次握手和四次挥手,具体原因?

HTTPS加密过程?

JVM垃圾回收机制和算法?四种引用?

快速排序特点和时间复杂度?

volatile关键字的作用?

ViewPager可以怎么实现轮播图Banner?


有新的面试机会再更叭

2021.4.18更新

百度(一二三)

冒泡排序及其优化,反转多个字符串

四大组件?Activity的生命周期?A启动B透明主题生命周期变化?四种启动模式?具体使用场景?App的生命周期?

八大基本数据类型在64位机和32位机所占字节数?HashMap的get(),put(),以及扩容机制?浅拷贝深拷贝的区别?clone()怎么实现浅拷贝和深拷贝?

Handler机制,looper怎么在子线程创建?MessageQueue是什么数据结构?主线程需要创建吗?为什么主线程不需要自己创建?主线程Looper是在哪个位置,什么时候创建的?事件分发机制?为什么View没有onInterceptTouchEvent()方法?

用过Bitmap吗?自己写过Bitmap加载之类的demo吗?String,StringBuilder,StringBuffer的区别?

数组链表的区别?JVM内存分区?垃圾回收机制?可达性分析哪些可以作为GC Roots?为什么不用引用计数?虚拟机栈里存储了什么?String a = "123"使用了哪些内存分区?

计算机网络五层模型?TCP哪一层?Http和Https的区别?SSL怎么加密?

毕业后的规划?对实习团队有什么期待?还面过哪几家?距今多久了?自己有哪些优点缺点?目前在学习的课程哪门觉得最难?为什么?

反问环节:之后该怎么学习?

打好基础,学好计算机网络和操作系统,多学习前沿技术


有新的面试机会再更叭

2021.4.23更新

蘑菇街(一)

图片加载为什么用Glide?自己设想一下Glide的缓存机制?NestedScrollView和RecyclerView怎么解决OOM?ViewPager怎么缓存?数据量过大怎么处理?EventBus为什么通过注解可以订阅?为什么用EventBus不用广播?JSON解析的原理?为什么用GSON解析?GSON的输入输出是什么?动画的原理?

异常和错误?wait()和notify()的应用?String为什么设计为final?StringBuilder和StringBuffer的区别?CopyOnWriteArrayList接触过吗?序列化和反序列化?

反问环节:学习方式有什么问题?

挺好的,以后多看书多写


CVTE(一)

找出字符数组里出现次数最少的字符

Handler机制?不发消息时是怎样的?如果应用结束时MessageQueue还有消息怎么处理?Glide源码?Glide相比别的图片加载库的优势在哪?从点击一个图标的icon到启动发生了什么?View的绘制流程?自定义View实现方式?如何防止UI过度绘制?UI过度绘制和哪个方法有关?子线程可以操作UI吗?ThreadLocal原理?怎么实现Local属性?OOM的原理?

了解哪些设计模式?如何破坏单例性?如何防止单例的内存泄漏?Hashmap相对于别的容器的优势?工作原理?JVM内存分区?这些分区是如何工作的?一个手机有多大的堆内存?

Http和Https?为什么是非对称加密?证书的作用?

自我总结

这次CVTE算是以上几次面试里最难的一次了,问了一些问题前几次面试和平时学习都没有接触过,一些问题顺着问下去比较深对我目前来说还比较困难。学习之路还是挺漫长的叭,继续努力


有新的面试机会再更叭

2021.4.26更新

蘑菇街(二)

两数之和,如果给定数组是有序的怎么解决?

项目有哪些难点?难点怎么解决的?印象最深的是什么?自己看过OkHttp的onResponse()的日志吗?怎么去定位这些问题的?大概做了些什么?了解过第三方库的源码和核心吗?说一下Glide?

了解过事件分发吗?onInterceptTouchEvent()做了什么?返回false和true的区别?学过那些课程?

Http和Https的区别?ssl加密协议的内容?比较重要的是哪部分?ssl里只有非对称加密算法吗

常用哪些数据结构?HashMap的1.7和1.8的主要区别?树结构的查找复杂度是多少?链表呢?HashMap呢?

进程间通信的几种方式?

反问环节:学习方式有什么问题?实习的时候做什么?

学习方式挺好的,注意刷算法要回去总结,知识掌握了但是实践用的少,实习的时候有人带,工作和正式员工一样


有新的面试机会再更叭

2021.4.27更新

斗鱼直播(一)

项目是自己做的吗?遇到过哪些比较难的问题?轮播图如何实现的?

“==” 和 “equals”的区别?两个对象hashcode相同的话equals一定相等吗?基本数据类型有哪些?接口和抽象类的区别?Hashmap的工作流程?设计模式用过哪些?单例模式有哪些写法?怎么选择相应的写法?

Handler机制?sendMessage和sendDelayMessage的区别?延时消息的排列?Handler可以有几个?Looper可以有几个?MessageQueue可以有几个?事件分发机制?View和ViewGroup在事件分发上的区别?有哪些Android的布局?布局的性能?布局是如何将xml绘制到界面上的?自定义View的绘制流程?如何防止多次点击?Glide源码是怎么防止内存泄露的?OOM有哪些?四种引用?单例的内存泄漏使用Activity怎么解决?如果必须要关联Activity呢?遇到过OOM吗?Fragment和View的区别?

反问环节:我有哪些基础不扎实?今后的学习方向?

基础还行,源码了解还可以,项目用的一些库比较落后,要及时学习比较新的功能和第三方库


有新的面试机会再更叭

2021.4.29更新

京东(一二)

项目从零搭建是怎么样的思路?用了哪些架构?项目解决了哪些问题?EventBus在你的项目里做了什么?动画做了什么效果?事件分发机制?分发到最后的View时有几种选择?内部拦截和外部拦截?需要重写哪些方法?消息机制?MessageQueue的数据结构?消息怎么排列?Handler的内存泄漏根本原因?如何从多个Handler发的多个Message里确定某一个Message来自于哪一个Handler?OkHttp的核心逻辑?有哪些值得借鉴的设计模式?建造者模式的优缺点?他有哪些拦截器?看过哪些源码?View的绘制流程?自己做过哪些自定义View?

项目具体参考了哪些app的设计?怎么给图片加载优化?如何适配不同分辨率的手机?

GC Roots有哪些?JVM的标记算法?

平时学习大部分都是看书?还有什么别的方式?是自学的吗?对京东有什么想了解的?对我们的项目和业务还有兴趣吗?觉得自己相比于别人有哪些优势?什么时候能实习?


有新的面试机会再更叭

2021.5.7

斗鱼直播(二)

项目有哪些难点?看过哪些源码?EventBus设计理念?核心代码流程?进程和线程的区别?用过多线程吗?异步和同步的区别?HashMap和ConcurrentHashMap的区别?Activity的生命周期?Activity和Fragment的区别?

有一个数据库,段为name,age,sex,怎么查询年龄大于20的全体男性?

反问环节:对于一些概念了解是否正确?数据库需要复习吗?

了解基本正确,但是都是基于书本,实践中会有更多理解。数据库移动端用的少,但是基本要会


如果你能看到这里,其实我的春招已经结束了噢,拿到了京东和蘑菇街的offer,最后还是选择去蘑菇街了,希望在那里能有好的机遇叭。