写在开头
互联网时代,最明显的标志就是每一家互联网公司都有属于自己的“拥护者”,比如在程序员界内,大部分都拥有阿里梦,这也意味着不少程序员都是阿里系的铁杆粉丝,想进入阿里工作是他们的梦想。而我不同,90后的我对字节跳动却是情有独钟。2012年出生的字节跳动,凭借飞速的发展,靠着头条和抖音两大王牌产品,成为了内容领域的王者,也受到不少年轻工作的青睐,其中也包括了我自己。
今年10月份,我给字节跳动投了简历,很荣幸接到面试邀请。这次面试机会,我准备了大半年才拿到,一面二面还算顺利,但在三面时候心态没放好,所以给面试官印象不太好,结果跟想象一样,凉了,不过并未气馁,准备准备明年二战。下面分享一波这次的面试经历以及个人的总结。
注意注意:以下整理的字节跳动面试题(含答案),以及算法+JVM+Spring+Redis+MySQL数据库等五类面试答案、学习笔记、实战文档,私信我【成长】免费领取!
字节跳动三面凉经
字节跳动一面:
- 自我介绍
- 聊项目
- Redis熟悉么,了解哪些数据结构? zset底层怎么实现的?
- 红黑树了解么,时间复杂度?
- 既然两个数据结构时间复杂度都是O(logN),zset为什么不用红黑树
- 线程池的线程数怎么确定?
- 如果是IO操作为主怎么确定?
- 如果计算型操作又怎么确定?
- 跳表的查询过程是怎么样的,查询和插入的时间复杂度?
- 说下Dubbo的原理?
- CAS了解么?还了解其他同步机制么?
- 做题:数组A,2*n个元素,n个奇数、n个偶数,设计一个算法,使得数组奇数下标位置放置的都是奇数,偶数下标位置放置的都是偶数。先说下你的思路
- 你有什么想问我的?
字节跳动二面:
- 自我介绍
- 问项目
- 分布式追踪的上下文是怎么存储和传递的?
- SpringMVC不同用户登录的信息怎么保证线程安全的?
- 我们聊聊mysql吧,说下索引结构,为什么使用B+树?
- Dubbo的RpcContext是怎么传递的?主线程的ThreadLocal怎么传递到线程池?你说的内存泄漏具体是怎么产生的?
- 线程池的线程是不是必须手动remove才可以回收value?那你说的内存泄漏是指主线程还是线程池?
- 什么是索引覆盖?
- Java为什么要设计双亲委派模型?
- 什么时候需要自定义类加载器?
- 做题:手写一个对象池
- 有什么想问我的
字节跳动三面:
- 自我介绍
- 接下来就是全部问的项目,对自己的项目细节逐个盘问,最后问了下如何改进方案
- Dubbo踩过哪些坑,怎么解决的?
- 对线程安全的理解
- 乐观锁和悲观锁的区别?
- 这两种锁在Java和MySQL分别是怎么实现的?
- 说说Spring的生命周期吧
- 说说GC的过程
- 强制young gc会有什么问题?
- 知道G1么? 回收过程是怎么样的? 你提到的Remember Set底层是怎么实现的?
- CMS GC有什么问题?
- 怎么避免产生浮动垃圾?
- 有什么想问的么?
面试前,我如何刷题?
面试前如何刷题,是很多应届生或跳槽人士的难点,所以技术能力都有,但在面试中总是失利。实际上我的三面之所以被挂,也是自己的表达方式有问题,实际上技术题都尚未难到我,所以面试前刷题,非常重要!以下是我面试前的刷题资料。
01 算法(LeetCode+算法必备39题)
- 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
- 判断101-200之间有多少个素数,并输出所有素数。
- 打印出所有的 “水仙花数 “,所谓 “水仙花数 “是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 “水仙花数 “,因为153=1的三次方+5的三次方+3的三次方。
- 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
- 题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
- ......
算法必备39题
LeetCode中文版
02 Java虚拟机(JVM相关)
- 内存模型以及分区,需要详细到每个区放什么
- 说一下GC 的两种判定方法
- GC 的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?
- GC 收集器有哪些?CMS 收集器与 G1 收集器的特点。
- Minor GC 与 Full GC 分别在什么时候发生?
- 类加载的几个过程
- JVM 内存分哪几个区,每个区的作用是什么?
- 如何判断一个对象是否存活?
- 类加载器双亲委派模型机制?
- 什么是类加载器,类加载器有哪些?
- ......
03 Spring相关
- 什么是 Spring 框架?Spring 框架有哪些主要模块?
- 使用 Spring 框架能带来哪些好处?
- 请解释下 Spring 框架中的 IoC?
- BeanFactory 和 ApplicationContext 有什么区别?
- 如何用基于 XML 配置的方式配置 Spring?
- Spring 有几种配置方式?
- 如何用基于 Java 配置的方式配置 Spring?
- 怎样用注解的方式配置 Spring?
- 请解释 Spring Bean 的生命周期?
- Spring Bean 的作用域之间有什么区别?
- Spring 框架中的单例 Beans 是线程安全的么?
- ......
04 Redis相关(分为上卷-易和下卷-难)
- 什么是 Redis?简述它的优缺点?
- Redis 与 memcached 相比有哪些优势?
- Redis 支持哪几种数据类型?
- Redis 主要消耗什么物理资源?
- 怎么理解 Redis 事务?
- redis 和 memcached 什么区别?为什么高并发下有时单线程的 redis 比多线程的memcached 效率要高?
- redis 主从复制如何实现的?redis 的集群模式如何实现?redis 的 key 是如何寻址的?
- 使用 redis 如何设计分布式锁?说一下实现思路?使用 zk 可以吗?如何实现?这两种有什么区别?
- 知道 redis 的持久化吗?底层如何实现的?有什么优点缺点?
- ......
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 支持的四种事务隔离级别名称,以及逐级之间的区别?
- ......
我如何汲取经验,上手实战?
01 MySQL性能优化的21个最佳实践
- 为查询缓存优化你的查询
- EXPLAIN 你的 SELECT 查询
- 当只要一行数据时使用 LIMIT 1
- 为搜索字段建索引
- ......
- 选择正确的存储引擎
- 使用一个对象关系映射器(Object Relational Mapper)
- 小心“永久链接”
02 Spring Boot 实战(8个章节快速掌握SpringBoot实战)
- 入门
- 开发第一个应用程序
- 自定义配置
- 测试
- Groovy与Spring Boot CLI
- 在Spring Boot中使用Grails
- 深入Actuator
- 部署Spring Boot应用程序
03 Redis实战(3个部分,11个章节,从入门-核心-进阶,彻底掌握Redis)
- 初识Redis
- 使用Redis构建Web应用
- Redis命令
- 数据安全与性能保障
- 使用Redis构建支持程序
- 使用Redis构建应用程序组件
- 基于搜索的应用程序
- 构建简单的社交网站
- 降低内存占用
- 扩展Redis
- Redis的Lua脚本编程
总结
想强调的一点是,无论大厂小厂,面试所考察到的面试题都是不一样的,但是要考核的核心知识却是大同小异,所以在刷题的过程中,我们一定要学会举一反三,多思考目的和原因,这样碰到一些“变形”的问题时,才能应付得了。总而言之,多学习多刷题,多给自己增加知识储备是没有错的,最后祝愿小伙伴们都能够拿到心仪offer,跳槽的朋友也顺顺利利!
写在最后:福利时间
再分享一波我的JAVA架构专题面试真题+解析+我的JAVA学习文档,评论+转发,关注我,私信回复【成长】即可免费领取!
本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/1925739.html