部分面经记录,有的录音懒了没写下来。
字节跳动
无笔试,直接约面。
飞书LOE
一面 9.24
一小时左右。
- ✔ 自我介绍
- ✔ 谈实习,说一下难点和解决方法
- ❌ flutter或Android中的手势消费原理
- ❌ flutter是如何生成一个安卓应用的
- ✔ flutter渲染原理,三棵树
- ❌ flutter的桥,调用native能力,如调用相机
- ✔ 线程和进程的区别
- ❌ 多线程相关,线程间哪些是共享的?进程间哪些是共享的?
- ❌ 什么是线程安全,如何保证线程安全
- ✔ Java的基本数据类型与包装类型有哪些?二者有什么区别?
- ❌ 深拷贝和浅拷贝的区别?具体是如何copy的?
- ✔ 链表和哈希表的区别,适用场景
- ✔ HashMap实现原理,若用对象作为键,修改对象的属性,获取到的值会改变吗
- ❌ requestlayout 和 invalidate 的区别
- ❌ RecyclerView是如何展示列表数据的?notifyItemChanged局部刷新列表数据,其他局部刷新的方法
- ✔ MMKV的使用,相对 SharedPreferences 的优点
- ❌ TCP和UDP的区别,TCP的可靠传输是怎么实现的?
- ❌ 2G的单词,给100M空间,如何知道出现频率top10的单词?
- ✔ flutter对比原生安卓的优劣势
- ❌ flutter用的布局模型是什么
- ❌ 编程题:输出二叉树的后序遍历(不用递归)
计网基础还是不熟悉。问了一些安卓相关的也没答上来。
java在虚拟机中除了线程计数器、jvm栈和方法栈是线程私有的,其余的java堆、方法区、和运行时常量池都是线程共享的内存区域。
9.25已挂 T^T
美团
笔试 9.21
两个小时。30道选择题,共60分;2道编程题,共40分。
编程题第一题AC,第二题做的时候已经有思路了,但是时间来不及细细斟酌代码了。
前端岗位和客户端岗位考的是同一场,选择题考了挺多JavaScript,还有一些CSS。
核心本地商业-美团平台
一面 9.27
一小时左右。
- ✔ 自我介绍?学习过哪些编程语言?通过什么方式?打算从事哪些技术栈?
- ❌ 批量下载用Android怎么实现?线程池有了解吗?
- ✔ 简单介绍MQTT
- ❌ MQTT和HTTP底层有什么区别?如何用Android写一个推送?
- ✔ 如何解决Flutter组件多层嵌套的问题?
- ✔ 如何防止XSS攻击?
- ✔ 数据库如何存储密码?MD5如何校验密码?哈希算法如何保证密码不被知晓?彩虹表破解?
- ✔ JSON数据的value可以有哪些数据类型?
- ✔ 链表和数组的区别?
- ✔ 面向对象三大特性,分别讲一下
- ✔ 静态变量和非静态变量的区别?静态变量什么时候分配内存的?
- ❌ 什么是内存泄漏?如何排查?例举Android中常见的内存泄漏?
- ✔ 发送HTTP请求时要填哪些参数?请求头、请求方法、响应字段
- ✔ HTTP、TCP分别是哪一层的协议
- ✔ HTTPS为什么安全?SSL的过程
- ❌ 客户端如何判断服务端的证书是合法的?客户端如何知道证书被中间人篡改了?
- ✔ TCP三次握手过程,为什么要三次?
- ✔ 进程和线程的区别
- ❌ 两个线程如何通信?Android子线程与主线程的通信,子线程如何通知主线程刷新UI
- ❌ 进程间如何通信?用代码如何实现?
- ✔ 编程题:合并两个有序链表
- ❌ 编程题:代码实现死锁
- ✔ 同步和异步的区别
问的还算简单,结尾直接约了二面在当天。不过二面面试官没空,推到第三天了。激动
二面 9.29
40分钟左右。
- ✔ 有什么想补充的?打算做哪方面技术栈?
- ✔ Flutter的优点
- ❌ 结合底层机制、编译原理、程序运行,Flutter是如何从Dart源码到应用程序并运行的?
- ❌ 结合Flutter和前端在布局渲染方面的共同点,界面是如何渲染显示的?canvas相关
- ❌ 结合编译原理,非页面的代码,业务逻辑代码是怎么运行的?如发一个网络请求。源码如何在设备上运行起来?Dart语言的编译流程?
- ✔ Java的编译流程?JVM起到什么作用?
- ✔ 为了让程序运行,JVM需要做什么事?
- ✔ 用C语言和Java的区别?
- ✔ 面向过程和面向对象各自的特点
- ✔ 学习了哪些专业课程?在实际开发中用到了哪些?
- ✔ 在业务开发中不同的网络协议如何做选择?
- ✔ 数据结构与算法在实际开发中的应用?有哪些常用的数据结构
- ❌ 数据超出数组长度如何处理?如何扩容?
感觉面试官很想问我dart和Flutter底层的运行原理,可惜确实不了解。
9.30已挂。差点以为好运来了,呜呜呜
软硬件服务-骑行事业部
一面 10.11
被捞了。一小时左右。
- ✔ 自我介绍,介绍项目、实习
- ✔ 进程和线程的区别
- ✔ Java中的几种锁
- ✔ 进程通信的几种方式
- ✔ 对象锁和类锁的区别
- ✔ OSI七层网络模型,传输层的协议
- ✔ TCP和UDP的区别
- ✔ HTTP基于哪个传输层协议,有哪些版本,3.0基于TCP还是UDP,各版本的区别
- ✔ HTTPS加密过程,为什么要混合加密?
- ✔ 四种引用方式与区别
- ❌ 软弱虚引用的使用场景
- ✔ 浅拷贝和深拷贝
- ✔ HashMap原理,链表和红黑树转换的阈值,ConcurrentHashMap如何保证线程安全
- ❌ Java8前后的ConcurrentHashMap实现方式的区别
- ✔ volatile关键字的作用
- ✔ Java中类的加载机制
- ❌ 类加载器有哪几种
- ❌ Android中的handler消息机制
- ❌ 四大组件的作用
- ❌ Activity、Service、BroadcastReceiver什么情况下会出现ANR
- ✔ Activity的启动模式
- ❌ ListView和RecyclerView的区别
- ✔ RecyclerView四级缓存机制
- ❌ 如何计算和屏幕一样大小的图片的占用内存
- ❌ Android的事件分发机制
- ✔ 编程题:分层输出二叉树的层序遍历
开头问了一下实习,可能是觉得没什么好聊的,转而问八股了。之前面美团基本只问了八股没怎么问Android,这次一问,好多都没答上来。
最后手撕环节,层序遍历用队列一气呵成写完,面试官要求分层输出,和刚刚的小黑盒一面的代码题一模一样,但是没有去看。看的出来面试官很想让我过,一直在提示我,但是始终没有get到点,好在最后用自己的方法也是做出来了,被自己蠢哭。
反问的时候问了面试官自己有哪些薄弱点,面试官说我Android相关的需要再更深入了解,手撕代码有待加强。
阿里淘天
1688部门
一面 10.17
45分钟左右。
- ✔ Android和Flutter的区别
- ✔ 编程题:用数组实现栈
- ✔ 编程题:两个线程交替打印
- ✔ Java中锁的类型
- ❌ AtomaticInteger是如何实现的?
- ✔ 如何自定义View
- ✔ 如何用RecyclerView实现一个数据列表?有哪些关键方法?
- ❌ 如何用RecyclerView实现每个列表项不一样的布局?RecyclerView的源码看过吗
- ✔ 如何用RecyclerView实现一个数据列表?有哪些关键方法?
- ❌ 下载器断点续传、并发下载如何实现?
最后反问觉得哪块比较薄弱,面试官说都还好,许愿过。
百度
虾皮Shopee
Android开发工程师-深圳
笔试 10.8
一面 10.19
- ✔ 编程题:删除单向链表倒数第n个节点
- ✔ Flutter和其他跨平台框架有什么区别?
- ❌ AtomaticInteger是如何实现的?
- ❌ getStorage持久化存储在本地的文件格式是什么样的?怎么从磁盘中读取的?
- ✔ 在主线程中进行IO操作可能出现什么问题(ANR)?在子线程中操作会有吗?
- ✔ MMKV和SharedPreferences的区别
- ❌ 用protobuf数据协议和SharedPreference的区别
- ✔ HTTP协议的常见响应码
- ✔ HTTP三个版本之间的区别
- ❌ Android中跨进程通信的几种方法,几种方法之间的区别(binder和消息队列)
- ✔ MQTT基于TCP还是UDP,MQTT的优势
- ❌ 用TCP可以做推送吗?还有哪些协议可以推送?
- ❌ 图片加载器用过哪些?Image.network源码看过吗?
- ✔ Android中的数据库如何使用?
- ✔ HashMap和ConcurrentHashMap的区别
- ❌ HashMap和LinkedHashMap的区别
- ✔ 多线程同时访问HashMap可能会发生什么问题?
- ✔ Java中sleep()和wait()的区别
- ✔ 悲观锁和乐观锁
- ✔ 项目中用拦截器做了什么
- ❌ 自己的项目中token有几级,多久过期
- ✔ 项目中的基于拓展方法做屏幕适配
- ✔ HTTPS加密过程,为什么要混合加密
- ❌ 如何知道服务器发来的证书是合法的?
反问,可以再加强算法数据结构、网络、操作系统,一些常问的问题。
二面 10.26
场景拷打穿插八股,逮着简历上写的一个下载器问,问的很细。
面试官没开摄像头,上来就问我实习公司的规模,是不是去的外包公司,我直接???
而且很多时候感觉她没理解我说的东西,问的一些问题也奇奇怪怪的,我之前的回答都说了,结果又问一遍。面试体验不太好。
- ✔ 为什么放弃转正?
- ❌ 下载器的设计架构?用了什么设计模式
- ✔ 单例如何保证对象只被创建一次
- ✔ volatile的功能
- ✔ 什么是线程和进程
- ❌ Flutter下载没有用到多线程,是如何让主线程不卡死的?
- ✔ 实现一个安卓的下载管理器怎么做
- ✔ 下载完成是如何通知主线程的?
- ❌ CPU是如何调度线程和进程的?调度算法?
- ❌ 进程切换开销比线程切换开销大的原因
- ❌ 死锁条件
- ✔ 有哪些锁
- ✔ 使用自旋锁的场景,有什么优点和缺点?如何避免缺点
- ❌ 用过哪些设计模式?工厂模式的应用场景和设计理念?
- ✔ HTTPS相关?如何确认证书的合法性?
- ❌ HTTPS一定安全吗?是否有漏洞?
- ❌ 抓包原理?如何抓HTTPS
- ✔ 网络请求涉及的整个流程
- ❌ DNS会带来哪些问题?DNS劫持是怎么做到的?如何解决?
- ❌ 如何提升HTTPS请求速度
- ❌ 多路复用的原理
- ✔ HTTP2.0 和 HTTP3.0 的区别
- ❌ HTTP3.0 QUIC为什么更快?如何实现可靠性的
- ✔ 下载器缓存策略,如何做本地持久化
- ❌ 图片加载缓存原理,LRU,如何实现图片缓存,用什么数据结构?
- ✔ 哈希表原理
- ❌ Android中解决哈希冲突的方法
难度挺大,出现了好多之前没问过的,像线程调度、HTTPS抓包、DNS劫持、LRU。
已挂。
iOS开发工程师-深圳
笔试 11.5
一面 11.9
之前随手投的iOS开发,居然发笔试了,做完又给面试了。
- ✔ 对iOS方向怎么想
- ✔ 为什么选Flutter而不是其他跨端框架
- ❌ Flutter的劣势?RN的优势?
- ❌ MQTT订阅发布步骤?为什么MQTT比HTTP更稳定
- ❌ TCP和UDP的区别
- ❌ 多路复用是什么
- ✔ 基于流和基于报文的区别
- ❌ 接收方如何知道发送方流数据的总大小?如何知道从哪一位字节开始?
- ✔ 有直接用TCP实现过连接吗
- ✔ 端口是什么?服务器和客户端的端口分别有什么用?
- ✔ 除HTTP、MQTT外其他的建立连接的方式
- ❌ 服务器如何主动给客户端推送消息?
- ✔ MMKV的优势
- ❌ 了解过mmap吗?
- ✔ DNS
- ❌ HTTPS抓包
- ✔ HTTPS加密过程
- ❌ 如何判断证书是否合法
- ✔ 进程和线程的区别
- ✔ 哪些部分是线程私有的?哪些是线程共享的?
- ❌ 线程间通信的方法
- ✔ 消息队列如何实现进程间通信
- ✔ 什么是管道,常见的管道,Linux中的管道符
| - ✔ 线程安全,有哪些锁
- ✔ 编程题:手写快排
反问:无iOS经验影响大吗?
答:没什么影响,受限于设备原因大部分校招生都没啥iOS的经验。
反问:哪部分比较薄弱?
答:计网的一些细节,某些特性是属于TCP还是HTTP有些记混了,MMKV原理和mmap可以去了解