
每个程序员都拥有一座大厂梦,我也不例外,以前面试字节跳动,居然被算法问倒了,不少算法都没解出来,解出来的也还不是最优解,才二面就凉凉了。回去以后也潜心复习了,准备了二战,现在终于进入了字节跳动,被录用,定级2-2。程序员
1、首站字节被挂
对于这个独角兽企业,LZ当时报了很大的指望,可是没有确切的了解面试状况(对本身蜜汁自信),没有了解到字节对算法这么看重,稍稍懈怠了下,没想到直接挂了,字节面试流程仍是很快的,意识到不对的时候已经晚了……面试
- 给定一个整型数组,查找三个元素相加等于0的全部三元组,要求去重
- 给定一个数组,调整该数组,使其知足堆的性质(初始化建堆)
- 判断一个链表是否为回文链表,说出你的思路并手写代码
- 你知道哪些排序算法,这些算法的时间复杂度分别是多少,解释一下快排?
.....
想起来的就这些了,当时被问得一脸懵逼,半小时憋不出几行代码来,浪费了一次宝贵的面试机会。算法
我我的其实也不是特别喜欢作题,好玩的事情太多了,可是没办法,现状就是这样,Android程序员这几年太多了,竞争愈来愈激烈,就各类手段卡你呗,说不内卷那也是不可能的。我以前也是温水煮青蛙,出去面试了才被教各类作人!数组
你没有好的公司项目背景,只有作题。(除非学校,学历,项目经验,开源项目,公司背景等有不错的优点)数据结构
2、二战字节
字节一面:
- Activity生命周期,每一个回调方法的做用是什么
- 事件的分发机制
- 内存泄漏
- 遇到过滑动冲突吗?滑动冲突的解决方法
- Hashmap原理
- Hashmap扩容机制
- 手撕双重校验锁,volatile的做用
- synchronized和volatile的区别
- 线程池的参数
- 异常机制
- synchronized修饰static 方法和修饰普通方法有什么区别
- 双亲委派模型,为何要这样
- sharedPreferences的原理,多进程下是否可使用,apply和commit 有什么区别
- 算法题:每k个反转链表;一个长度为N的整形数组,数组中每一个元素的取值范围是[0,n-1],判断该数组否有重复的数,请说一下你的思路并手写代码......
字节二面
- 四大基本组件和做用
- Activity生命周期,启动模式,taskAffinity,横竖屏转换,onNewIntent
- Service两种启动模式,有什么区别。
- 广播,广播分类。普通广播、异步广播、有序广播
- view的绘制流程
- Framelayout wrap_content TextView match_parent 怎么显示
- 约束布局和RelativeLayout的区别
- 布局优化
- include、viewStub、merge 的使用和区别
- mvp、 mvc、mvvm
- 如何建立一个viewModel
- Handler
- ThreadLocal
- 算法题:二叉树查找,将这条路上的结点存储;之字形打印二叉树,使用辅助栈实现,实现完后问我:不使用辅助空间怎么作。回答递归,而且递归时记录当前层数
字节三面
1.适配器和装饰模式各自特色和使用场景
2.视频编解码是怎么作的
3.三色球排序
......mvc
四面(HR)
到这一步就是正常走流程了,就不叙述了……app

3、二战字节前,我是如何复习的?
LZ其余技术掌握的还算牢靠,主要是算法方面有些欠缺,复习时主攻的算法。异步
从朋友那薅到一份《2021最新版数据结构与算法⾯试题⼿册》,硬着头皮所有啃完了,不直接看答案,先本身思考,否则很容易忘记,实在不会的看题解,看看别人的解题方法。作完了以后总结思路和常见套路。mvvm

1.哈希布局
- 请说⼀说,Java中的HashMap的⼯做原理是什么?
- 介绍⼀下,什么是Hashmap?
- 讲⼀讲,如何构造⼀致性哈希算法。
- 请谈⼀谈,hashCode() 和equals() ⽅法的重要性体如今什么地⽅?
2.⼆叉树
- 求⼆叉树的最⼤深度
- 求⼆叉树的最⼩深度
- 求⼆叉树中节点的个数
- 求⼆叉树中叶⼦节点的个数
- 求⼆叉树中第k层节点的个数
- 判断⼆叉树是不是平衡⼆叉树
- 判断⼆叉树是不是彻底⼆叉树
- 两个⼆叉树是否彻底相同
- 翻转⼆叉树or镜像⼆叉树
- 两个⼆叉树是否互为镜像
- 求两个⼆叉树的最低公共祖先节点
3.链表
- 谈⼀谈,bucket若是⽤链表存储,它的缺点是什么?
- 有⼀个链表,奇数位升序偶数位降序,如何将链表变成升序?
- 如何反转单链表
- 如今有⼀个单向链表,谈⼀谈,如何判断链表中是否出现了环
- 随机链表的复制

4.数组
- 写⼀个算法,能够将⼀个⼆维数组顺时针旋转90度。
- ⼀个数组,除⼀个元素外其它都是两两相等,求那个元素?
- 找出数组中和为S的⼀对组合,找出⼀组就⾏
- 求⼀个数组中连续⼦向量的最⼤和
- 寻找⼀数组中前K个最⼤的数
5.排序
- ⽤Java写⼀个冒泡排序?
- 介绍⼀下,排序都有哪⼏种⽅法?请列举出来
- 介绍⼀下,归并排序的原理是什么?
- 介绍⼀下,堆排序的原理是什么?
- 谈⼀谈,如何获得⼀个数据流中的中位数
- 你知道哪些排序算法,这些算法的时间复杂度分别是多少,解释⼀下快排?
6.堆与栈
- 请你解释⼀下,内存中的栈(stack)、堆(heap) 和静态区(static area) 的⽤法。
- 说⼀说,heap和stack有什么区别。
- 最⼩的k个数
- 滑动窗⼝最⼤值
- 丑数前
- 前K个⾼频元素
- 有效的括号
- 最⼩栈
- 柱状图中最⼤的矩形

7.⾼级算法
- 请你讲讲LRU算法的实现原理?
- 为何要设计 后缀表达式,有什么好处?
- 请你设计⼀个算法,⽤来压缩⼀段URL?
- 谈⼀谈,id全局惟⼀且⾃增,如何实现?
- 最后⼀个单词的⻓度
8.动态规划
- 斐波那契数
- 不一样路径
- 爬楼梯
- 零钱兑换
- 打家劫舍
- 编辑距离

因为篇幅限制,展现了部份内容截图,须要这些文档资料的,能够点赞支持一下我,而后【点击这里】免费阅读下载。
但愿全部的程序员都可以学习起来,努力实现咱们的大厂梦!