字节Android开发岗首战算法被惨虐,复盘两个月再战拿下2-2

每个程序员都拥有一座大厂梦,我也不例外,以前面试字节跳动,居然被算法问倒了,不少算法都没解出来,解出来的也还不是最优解,才二面就凉凉了。回去以后也潜心复习了,准备了二战,现在终于进入了字节跳动,被录用,定级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.动态规划

  • 斐波那契数
  • 不一样路径
  • 爬楼梯
  • 零钱兑换
  • 打家劫舍
  • 编辑距离

因为篇幅限制,展现了部份内容截图,须要这些文档资料的,能够点赞支持一下我,而后【点击这里】免费阅读下载。

但愿全部的程序员都可以学习起来,努力实现咱们的大厂梦!

相关文章
相关标签/搜索