字节跳动Android开发实习面试过程(已拿offer)
Posted CSS程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字节跳动Android开发实习面试过程(已拿offer)相关的知识,希望对你有一定的参考价值。
前言
先说明一下, 楼主是二本双非学校, 且非科班生, 有三个App上架, 大三在读,4月1号投了字节的简历, 4月中旬参加了笔试, 4月底收到字节面试邀请,5月初参加了第一轮面试, 5月中旬参加了二面, 5月27日参加了三面,6月8日 offer mail
话不多说,直接进入主题
一面(60分钟)
前15分钟
- 个人介绍, 什么时候接触的安卓开发, 实习能实习多久, 介绍一下项目
- 你说你的软件出现了OOM, 你怎么解决的? 线上crash你是用了什么来分析的?
- 这些项目都是怎么来的? 软件中这些内容都怎么来的? 你知道后端怎么来的吗? 后端是不是爬下来的? 每天有多少上传量呢?
接下来15分钟
- 进程和线程有啥区别呢? 为什么要定义出这样的概念来? 有什么用呢?
- 哈希表是一个怎样的数据结构? 怎么避免hash碰撞? 容量有什么样的特点?
- 数据库有了解吗? 索引了解吗? 怎么实现的快速查找? 快速查找的是什么东西?
- TCP协议如何确保稳定传输?
- 说一下Activity的启动模式
- Handler有了解吗? 说一下原理? 你刚才说到Looper是个死循环, 那么messageQueue 没消息的时候那它不还是会循环占用CPU资源吗?
- 我看你用过一些开源库比如说okhttp, 你能说一下原理吗? 分析一下 okhttp 自带的这些 InterceptorChain 是干啥的? 这些 Interceptor 的用途呢?
然后12分钟
你觉得有什么你擅长的但是我还没问的??
- 那我讲一下屏幕怎么绘制view的吧
- 为什么多次测量性能差了呢? Compose是怎么解决这些的?
- onMeasure里面有个东西叫MeasureSpec, 你说一下这是一个什么样的数据
最后一道算法: 剑指 Offer 38. 字符串的排列 - 力扣(LeetCode) (leetcode-cn.com)
可能当时没答上来的只有个 HashMap 如何尽可能避免碰撞了
二面(45分钟)
- 你主要用的 Java 还是 Kotlin?(我: Kotlin, 面试官:那我问你点 Java 的东西吧)
- 怎么创建一个线程? start 和 run 的区别? 线程和进程的区别? 进程可以没有线程吗?
- android 里面, 主线程的作用是什么? 刷新UI能放到其他线程里面吗? 你说的可以放到其他线程的特殊情况是什么呢? 怎么在子线程弹一个 toast?(提前 Looper.prepare 就行了)
Looper.prepare
做了什么事情呢? 能介绍一下ThreadLocal
的含义吗, 内部实现原理呢?- Java里我们要访问本地一个文件, 我们应该怎么办? FileInputStream读取的是二进制流数据, 怎么读取文本呢? 怎么判断读到文件末尾了呢?
- 你有没有遇到什么比较难的问题呢? (我: OOM 我项目经常出现(这里想让面试官问我项目, 淦 他不问)) 什么场景会产生OOM呢? 什么原因呢? 怎么解决的呢?
- 假设一个图片很大, 应该怎么处理呢? (我: Glide/BitmapFactory(这里想让面试官问Glide 淦 他不问)), 具体是怎么缩放的呢? 假设 BitmapFactory 的 inSampleSize 设置为2的话, 图片内存占用缩小为多少? ARGB_8888和RGB_565的区别?
- HTTP请求常用的header说一下? 常见的状态码说一下? 206是什么? 你用过断点续传吗?
- 介绍一下Jetpack组件的
ViewModel
和LiveData
怎么用的, 为什么ViewModel可以跟随Activity的生命周期而在旋屏时候保留数据呢? (这里说到ViewModel我提到了MVVM架构, 我想让他问, 淦 他没问) - 堆内存和栈内存有啥区别呢? (我这里说堆内存是gc的主要区域, 我想让他问我gc, 淦 他没问) 分别存啥?
- Java里面
ClassLoder
加载机制是什么? 是先去parentClassLoder里面加载还是我自己的里面加载呢? 这样做的目的是什么呢? - Java反射了解吗? 这么去访问一些私有的方法和变量呢?
算法题: 230. 二叉搜索树中第K小的元素 - 力扣(LeetCode) (leetcode-cn.com)
刚开始递归遍历子节点个数, 面试官说你这样还会多次遍历啊, 能降低一下复杂度吗? 然后我用了中序遍历
你这个算法多线程访问可能会出问题啊, 你怎么办, 你不能限制访问者怎么用, 访问者想在多线程去跑这个算法怎么办呢?
一些可能当时没答上来, 答得不太好:
-
线程之间共享内存机制呢?
线程之间是共享内存的, 但是线程之间为什么会出现不同步呢?(多线程可见性) 因为除了内存, 数据还会被缓存到CPU寄存器和各级缓存中, 当修改一个变量的时候, 可能会先写到缓存, 稍后再更新到内存
-
ThreadLocal
实现原理?内部维护了一个简易的
hashmap
, hahsmap的hashcode是根据当前线程的获取threadLocal的顺序,hashcode
是使用nextHashCode
方法操作一个atomicInteger
, 每次都会递增一个指定的值, 然后每一个线程都会维护一个ThreadLocalHashMap
, ThreadLocal的get和set方法实际上就是操作当前线程的ThreadLocalHashMap 对象
三面(40分钟)
- 介绍一下项目
- 介绍一下LaunchMode
- Manifest里面activity的process什么用途, 为什么要多进程呢?
- 一直在介绍项目...
- 反问: 团队对Kotlin支持态度? 对Jetpack的态度呢? 对新人培养呢?
然后呢三面就过了, 没啥难的, 问项目那可太简单了, 只要对自己的项目有足够的自信应该都没问题
最后楼主想说,其实大厂的面试没想的那么难,要轻松掌握很简单,要点就两个:
-
找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
-
多练。 (视频优势是互动感强,容易集中注意力)
你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。下面资料部分截图是我花费几个月时间整理的,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。
自行下载直达领取链接:【点击我即可获得!】
以上进阶BATJ大厂学习资料可以免费分享给大家,需要完整版的朋友,【点这里可以看到全部内容】。
还有一件事,别忘记点赞关注!
以上是关于字节跳动Android开发实习面试过程(已拿offer)的主要内容,如果未能解决你的问题,请参考以下文章