字节跳动 Android校招 三面回馈社会(Offer)
准备面试的时候刷了很多面经,这里也把自己的分享下,做个回报好了,顺便攒攒人品,一到这种时候人就迷信起来了。
一面
面我的面试官是做 iOS 的,就没问我 Android 的。
- ipv6 答不上来
- http 状态码
- http 请求
- https 请求过程
- 传送大图到服务器,进度功能实现: 这里扯了很多,一开始我理解成断点续传了,后面就是给的方案是 http 每次传一部分,根据状态码是否成功来处理,后面面试官觉得这个答案不行,让我从 TCP UDP Socket 这些角度去想,我说这些实现起来就更简单了,比如TCP就双向通信之类的。。
- gc
- 数据库索引,b tree b+ tree
- 设计模式
- 进程间通信,我说了几个,面试官说可以说 Android 的,好得!
- 算法: 字符串匹配,返回对应 index, 我用的 HashMap 实现。
大多数都是问的网络,网络不是我擅长的领域,有些别的想不起了。。。
不止是题目,面试官会深入进去怼的,别问我怼啥,被怼的忘光了都!
面试官人很好,还强调了他低头是写面试评价。。。
二面
面试官依旧很 OK,可惜网络状态不佳。
面试官:我看上一面问了你网络层面比较多的问题,那我接着问了
我:。。。好。
先自我介绍
- Http1.1 和 Http 1.0 区别
- keepalive 作用
- keepalive 底层实现,这块我是不清楚的,我就猜测了下给了他一个答案。
- 操作系统怎么在堆上和栈上分配内存,我不太清楚,就说了 Java 虚拟机是咋分配的,结果问了我 Java 虚拟机是咋在操作系统上分配的,对不起我不知道!(后面强调了 c 的 api,我还是母鸡啊!)
- 操作系统进程和线程
- 虚拟内存
- 虚拟内存的缓存,我不清楚,依旧给了个猜测
- 手写单例,写了双重检索的,后面问我有别的吗,我说了静态内部类实现的,问我为啥静态内部类安全。
- Android Framework,我问是 AMS 那些的吗,面试官说那太复杂了,你说下 handler , loop吧,然后问了一些相关的问题。(感动啊)
- 广播和本地广播的区别,实现原理
- 你用 map 写个 lru 吧,我说能用 LinkedHashMap 吗,不能, 后面我说了个思路,面试官觉得不行,然后说了 LruCache 怎么实现的, LinkedHashMap 怎么实现的,我说 LinkedHashMap 是用了 HashMap,在里面维护了一个双向链表,每次访问数据的时候修改链表。后面我就打算仿写一个 LinkedHashMap 来实现,多亏面试官即使打断,这个太费时间了,就不用写了。
- 手写生产者消费者,这里面试官一边看代码一边提问题,我跟着问题修改代码,其实就是把一个比较low 的生产者消费者优化成了面试官想要的样子(面试官在这里终于笑了)。
- 问问题环节
Q:我想了解下相关的业务
A:这个职位是最后统一定的,我不能告诉你
Q: 问评价
A: 还是不能告诉你。
over
最后问问题环节牛客网这边网络好像不通畅,我就听到了不可以告诉你。。。
同样大致问题是这些,其他的也想不起来了,这块网络操作系统混合双打。
面试官人很棒,会诱导你慢慢回答,而且考虑很周到。
补充
好像还有个 rxjava 的问题,这里补充下
一面问我 rxjava,我说我之前封装过一个 rxbus,来实现消息总线,后面我是说了下消息总线对代码的影响还是比较大的,我到后面是尽量避免这样的操作。
二面问我,一面评价说你觉得 rxjava 并不好,我赶紧说不是不行,rxbus 只是 rxjava 功能的一小部分,而是消息总线这样的方案有利有弊。
后面说rxbus 具体封装 ,太久远了想不起来了,然后说了 rxjava 其他的用法和优点这一类的。
后来问我不用消息总线怎么实现通信,我说了可以用原生的方式 startActivityForResult 之类的。
跨Activity怎么办?
所以我说消息总线这些有利有弊,应该在设计上尽量避免这样的操作。
三面
- 自我介绍,介绍了自己实习写的刷新加载的组件
- 问我自己组件里怎么解决的嵌套滑动冲突,三个方面实现完美分发事件
- 说 retrofit 动态***这块
- retrofit 动态***里面如果传的不是 interface 怎么办,这块我不清楚,我就直接说不太清楚,然后说了 retrofit 关于注解的处理
- 注解生命周期,编译时注解解析
- 你用过 weex,说下weex实现原理,我说我没有看过 weex 源码,但是我实现过一个动态页面渲染框架,说了下我的渲染过程和实现方案。
- 最近想学的技术,说了音视频,但是因为准备春招放下了
- 为什么想学,说了自己之前做一个 APP,里面播放器无法使用没认证的 Https 请求,打算自定义一个播放器,在底层处理证书这块,然后在说了下不知道这样的方案可不可行。
- 使用 https 请求这个不难的, 我说因为我这个是自己签的,就没法认证。
- 那你 okhttp 里面怎么认证的, 说了拦截器
- 还有个 ConcurrentHashMap 同步方案, 然后问了 CAS
- 环状链表
- TCP握手挥手
问问题环节
跟二面一样的问题,顺便问了下今年的怎么招聘的,凉面太多看的我很慌张。
一二三面问题可能搞混,顺序有些打乱,有些问题可能记不清了,三面面试官依然棒,虽然问题节奏很快,但是问题都很棒。
健忘症想起来可能还问了这些(记不起来第几面的了,大部分在第二面吧
- 锁, synchronized 和 ReenTrantLock
- 抢占式锁和非抢占式锁,ReenTrantLock 怎么实现非抢占式
- notify 和 sleep 区别
- onTouch 和 onClick (这个我隐约中好像被问过
- 注解处理器,这个我二面三面都有扯到,因为自己实现过动态路由的简单功能
- cookie 和 session 记得没答好这个
两星期后收到了offer,终于赶在毕业前上岸了
#字节跳动##面经##校招##春招##安卓工程师#