秋招面经

部分面经记录,有的录音懒了没写下来。

秋招记录

字节跳动

无笔试,直接约面。

飞书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可以去了解