双非渣硕,开发一年,苦刷算法三个月,四面字节成功斩获 offer
背景
本人双非硕士,软件工程专业,1 年工作经验(银行外围系统,又老又久,无高并发场景)Java 后端开发,无实习经历,通过 BOSS 找的字节猎头。
刚开始说是被飞书拒绝了,然后被教育捞起来了。
不絮叨了,直接看面经!
一面
时间:7 月 24 日 1 小时
ps:很基础的知识点考察,涵盖了 IO,网络等基本的理论知识,数据库和多线程会结合个人的语言和使用过的软件框架做提问,一面很基础,基本都答上来
hashmap 原理,底层实现,线程不安全的原因,怎么扩容,底层数组大小为什么是 2^n,扩容死锁产生的过程(不会), 1.7 和 1.8 的区别 concurrenthashmap 原理,结构,为什么线程安全,分段锁怎么实现 synchronized 和 lock 区别, volatile 原理了解吗 Lock 底层实现原理, AQS 怎么实现的
Redis 数据类型,删除策略,持久化方案,分布式方案,redis cluster 方案原理(没看具体的架构内容),分布式一致 hash 知道吗?IO 模型:IO 模型有哪些,select 和 epoll 原理,select 的缺点(搞 Java,如果没有高并发场景的经历,IO 这块也就不怎么了解了,基本都是复习多线程的知识去了)OSI 模型(五层和七层)
介绍下 tcp 和 udptcp 握手,挥手慢启动,快速重传,快速恢复 time-wait 介绍下 innodb 特点 innodb 索引物理结构主键,回表,覆盖索引与 MyISAM 对比
算法:三数之和,要求给出时间复杂度和空间复杂度,刚开始暴力三重循环,后来要求优化
二面
时间:7 月 31 日 1 小时
ps:结合项目经历提问,面试官会结合简历和一面结果适当补充一些基本理论知识和常用框架的提问,个人对 kafka 不太了解,可能面试官不太满意
项目经历:分库分表,不借助中间件怎么实现,MyCat 了解过吗(不了解),分库和分表怎么选择?结合项目场景讨论划分规则其他项目经历,反射、注解的原理,有用过线程池吗?Java 线程池有哪几种?Java 线程池的构造参数?什么是阻塞队列?Java 有哪些阻塞队列?https 建立连接的过程是怎样的?
了解中间人攻击和跨域攻击吗?
进程与线程的区别和联系进程的切换发生了什么线程的切换为什么比进程的切换代价小进程通信的方式和举例
kafka 的产生背景和在项目中的使用 topic 和 partition,partition 是干什么的 Consumer Group 是干什么的怎么将 partition 分配到多个 broker 上?怎么动态调整 partition 和 broker 的数量?rebalance 什么时候发生,rebalance 过程(这个真不知道)
Linux 的 shell 用的怎么样?grep、sed、awk 有用过吗?(只会 grep...)
怎么监控机器性能?
Linux 文件系统了解吗?软连接和硬连接?
矩阵顺时针旋转 90°和逆时针旋转 90° 股票买卖(几个变种问题没做出来,但是基本的应该还行)
三面
时间:8 月 6 日 1 小时
ps:主要是系统设计,发散性问题,另外,面试官吐槽了我的简历,建议简历老老实实套模板,不要花里胡哨,程序员的简历要整洁明了
kafka 如何做到高可用(不会,面试官不太满意,因为我的工作经历没有互联网高并发,而且 kafka 的确没怎么看)
设计热榜,动态展示 top K
N 个线程交替打印,怎么实现,写出来,跑一下
设计长短地址转换
四面
基本流程,问离职原因,聊人生等等
总结
整体字节跳动的面试感受,面试官很专业,要求基础知识很熟悉,面试之前一定要准备后再去面试。LeetCode 题目也要刷。手写算法留的时间不多,3-10 分钟,如果 3 分钟还没写,就要求讲出解题思路。
切记面试前一定要刷题和准备,简历上的项目不熟悉的千万不要写上去,写上去的项目备好 2-3 个技术方案。
分享一些面试字节跳动必刷算法笔记
ps:面过字节的朋友都知道,字节的算法是问的最多的
推荐这份左神写的《程序员代码面试指南,IT 名企算法与数据结构题目最优解》
书籍涉及算法与数据结构编程题目 240 道以上,并且个人实现出最优解,大部分题目为面试高频。
限于文章篇幅原因,只能以截图的形式展示出来,有需要的小伙伴 点击这里凭本文截图即可获取!
目录(算法分为将、校、尉、士四个等级来表示难易程度)
第 1 章栈和队列
设计一个有 getMin 功能的栈(士★)
由两个栈组成的队列(尉★★)
如何仅用递归函数和栈操作逆序一个栈(尉★★)
猫狗队列(士★)
用一个栈实现另一个栈的排序(士★)
用栈来求解汉诺塔问题(校★★★)
生成窗口最大值数组(尉★★)
构造数组的 MaxTree (校★★★)
求最大子矩阵的大小(校★★★)
最大值减去最小值小于或等于 num 的子数组数量(校★★★)
限于文章篇幅原因,就展示到这里了,有需要的小伙伴 点击这里凭本文截图即可获取!
评论