准备了3个月零21天,面试字节跳动挂在了第三面:算法+JVM+Spring+Redis+MySQL等
写在开头
互联网时代最明显的标志就是每一家互联网公司都有各自的核心拥护者例如在程序员群体中大多数人都拥有阿里梦这也表明许多程序员都是阿里系的坚定支持者想要进入阿里工作一直是他们的梦想而我不同的是90后我对字节跳动却有着特殊的情怀2012年出生的字节跳动凭借飞速的发展靠着头条和抖音两大王牌产品的成功已经成为内容领域的领军企业吸引了众多年轻用户的关注并且也包括了我的一部分朋友
今年10月,我向字节跳动提交了一份简历,深感荣幸地收到了本次招聘流程中的面试邀请.在参与了本次字节跳动的招聘流程后,我经过大约半年的时间充分准备后,最终获得了初步offer.初次和第二次笔试环节均较为顺利地通过.然而,在第三次面谈时因心态未处于最佳状态,导致对 interviewing官的第一印象并不太理想.结果与预期相当遗憾地落空.不过并未因此感到沮丧,决定明年再次申请.
以下展示的面题,学习资料等,均可以关注文末公众号获取
字节跳动三面凉经
字节跳动一面:
你好!我是小明。
今天和朋友讨论项目进展。
对Redis有所了解吗?您知道哪些常用的数据结构?
对红黑树的了解如何?
既然两种数据结构的时间复杂度均为O(logN),那么为什么不用红黑树而选择其他结构呢?
在设计一个线程池时,请问您是如何确定其最大线程数量?
如果是以IO操作为主的应用场景,请问该如何设定线程池规模?
如果是以计算型操作为主的系统,请如何配置线程池规模?
请问您能否详细解释一下跳表的查询流程?
我想了解一下Dubbo的工作原理。
对CAS协议是否熟悉?除此之外还有哪些同步机制呢?
练习题:给定一个长度为2n的数组A,其中包含n个奇数和n个偶数,请设计一个算法使得所有奇数都放置在奇数索引位置(从0开始),偶数放置在偶数索引位置.请阐述您的思路
请问您是否有任何问题需要我进行解答
字节跳动二面:
- 自我介绍
- 问项目
- 分布式追踪的上下文是怎么存储和传递的?
- SpringMVC不同用户登录的信息怎么保证线程安全的?
- 我们聊聊mysql吧,说下索引结构,为什么使用B+树?
- Dubbo的RpcContext是怎么传递的?主线程的ThreadLocal怎么传递到线程池?你说的内存泄漏具体是怎么产生的?
- 线程池的线程是不是必须手动remove才可以回收value?那你说的内存泄漏是指主线程还是线程池?
- 什么是索引覆盖?
- Java为什么要设计双亲委派模型?
- 什么时候需要自定义类加载器?
- 做题:手写一个对象池
- 有什么想问我的
字节跳动三面:
- 自我介绍
- 接下来就是全部问的项目,对自己的项目细节逐个盘问,最后问了下如何改进方案
- Dubbo踩过哪些坑,怎么解决的?
- 对线程安全的理解
- 乐观锁和悲观锁的区别?
- 这两种锁在Java和MySQL分别是怎么实现的?
- 说说Spring的生命周期吧
- 说说GC的过程
- 强制young gc会有什么问题?
- 知道G1么? 回收过程是怎么样的? 你提到的Remember Set底层是怎么实现的?
- CMS GC有什么问题?
- 怎么避免产生浮动垃圾?
- 有什么想问的么?
面试前,我如何刷题?
如何有效进行考前刷题训练?这一问题普遍存在于应届生或跳槽人士中。尽管他们具备很强的技术实力,在实际操作中却屡屡碰壁。回想之前的求职经历发现,主要问题在于沟通技巧欠佳,而面对的技术难题对我来说仍属易 handled.因此,考前刷题对于求职者的职业发展至关重要!以下是我面试前的刷题资料。
01 算法(LeetCode+算法必备39题)
- 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
- 判断101-200之间有多少个素数,并输出所有素数。
- 打印出所有的 “水仙花数 “,所谓 “水仙花数 “是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 “水仙花数 “,因为153=1的三次方+5的三次方+3的三次方。
- 题目:将一个正整数分解质因数。例如:输入90,打印出90=2 3 3*5。
- 题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
- ......

准备了大半年,面试字节跳动居然挂在第三面(Java岗面试总结)
算法必备39题

准备了大半年,面试字节跳动居然挂在第三面(Java岗面试总结)
LeetCode中文版
02 Java虚拟机(JVM相关)
- 内存模型的具体划分以及各个分区的作用与分配细节
- 解释 garbage collection 的两种主要判定标准
- garbage collection 的三种实现方法:标记清除机制、标记整理策略以及复制算法的特点与适用场景;如果要优化收集方法,请根据具体情况进行选择并提出优化思路
- garbage collection 收集器的主要类型及其各自的特点对比
- 小型 garbage collection 和完全 garbage collection 发生的具体条件与时机
- 类加载过程中涉及的主要步骤与流程解析
- JVM 内存划分为若干个区域,请详细说明每个区域的功能与作用
- 如何判断一个对象是否存活并提供相应的检测方法
- 双亲委派模型中类加载器的派生机制及其工作原理
- 解释类加载器的概念及其主要类型,并列举典型实例

准备了大半年,面试字节跳动居然挂在第三面(Java岗面试总结)
03 Spring相关
- 请简要说明Spring框架的定义,并列举其主要组件有哪些。
- 在应用开发中选择Spring框架有哪些潜在的优势?
- 请阐述Spring框架中的注入机制是如何实现对象管理的。
- 在功能上,请说明BeanFactory与ApplicationContext之间的主要区别。
- 如果希望通过XML文件配置Spring参数,请具体说明操作步骤。
- 在配置选项上,请比较基于Component-Driven Design的方法与基于Classpath-based configuration的区别。
- 如果采用Java代码进行配置,请描述具体的实现流程是什么样的?
- 请详细解释Spring Bean在整个生命周期内的运行流程是怎样的。
- 在作用域划分上,请分析不同类型的Bean之间存在哪些差异。
- 如果将一个Bean设置为单例模式运行时是否会牺牲线程安全性?
- 在单例模式下运行时是否会影响多个线程同时访问同一个Bean实例?
- ...

准备了大半年,面试字节跳动居然挂在第三面(Java岗面试总结)
04 Redis相关(分为上卷-易和下卷-难)
- 什么是 Redis?简述它的利弊?
- Redis 相较于 memcached 的比较优势是什么?
- Redis 支持的数据类型有哪些?
- Redis 在物理资源方面主要消耗什么?
- 如何理解 Redis 的事务?
- Redis 和 memcached 区别在哪里?在高并发场景下为何单线程的 Redis 在效率上有时会超越多线程的 memcached?
- Redis 主从复制是如何实现的?Redis 集群模式又是如何构建的?Redis 中 key 的寻址机制是怎样的?
- 使用 Redis 设计分布式锁,请说明实现思路。能否使用 ZK 来实现此功能?如果可以,请具体说明其实现过程。两者之间有何异同?
- 了解 Redis 持久化吗?其底层采用何种方式实现?有何优缺点?

准备了大半年,面试字节跳动居然挂在第三面(Java岗面试总结)

准备了大半年,面试字节跳动居然挂在第三面(Java岗面试总结)
05 MySQL高频55题
- 一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert一条记录,这条记录的 ID 是 18 还是 15 ?
- Mysql 的技术特点是什么?
- Heap 表是什么?
- Mysql 服务器默认端口是什么?
- 与 Oracle 相比,Mysql 有什么优势?
- 如何区分 FLOAT 和 DOUBLE?
- 区分 CHAR_LENGTH 和 LENGTH?
- 请简洁描述 Mysql 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
- ......

准备了大半年,面试字节跳动居然挂在第三面(Java岗面试总结)
我如何汲取经验,上手实战?
01 MySQL性能优化的21个最佳实践
- 对缓存进行优化以提升查询效率
- 解释你的SELECT语句
- 当只需要一行数据时使用LIMIT 1
- 建立索引以提高搜索字段的检索速度
- ......
- 根据需求选择合适的存储引擎
- 使用对象关系映射器来管理数据库对象
- 注意避免使用永久链接

准备了大半年,面试字节跳动居然挂在第三面(Java岗面试总结)
02 Spring Boot 实战(8个章节快速掌握SpringBoot实战)
- 基础学习
- 创建初始应用
- 个性化设置
- 质量验证
- 利用Groovy和Spring Boot工具链进行开发
- 集成Grails框架于Spring Boot环境中
- 全面探索Actuator功能
- 发布Spring Boot应用实例

准备了大半年,面试字节跳动居然挂在第三面(Java岗面试总结)
03 Redis实战(3个部分,11个章节,从入门-核心-进阶,彻底掌握Redis)
- 初步了解Redis
- 开发基于Redis的Web应用
- Redis命令集
- 数据安全性及性能优化措施
- 基于Redis的支持系统开发
- 开发基于Redis的应用组件框架
- 以搜索功能为核心的程序开发
- 搭建基础社交网络平台
- 减少内存占用空间方案设计
- 提升Redis功能扩展性的技术探索
- Lua脚本语言在Redis中的应用开发

准备了大半年,面试字节跳动居然挂在第三面(Java岗面试总结)
总结
始终重视各类岗位对专业能力的要求,在企业招聘过程中无论是大型公司还是中小型企业的面试题都各有特色。尽管考察的核心知识点却基本一致,在刷题的过程中我们不仅要学会举一反三还要深入理解题目背后的逻辑和解题思路这样才能培养出真正能够应对各种变化问题的能力最终实现职业发展的目标不断积累专业知识技能与经验才能在激烈的竞争中脱颖而出最终祝愿每一位求职者都能够收获理想的工作机会
写在最后:福利时间
关注下方公众号直接获取

