昨天刚面完字节——面试经验和总结(已拿 offer)
一面时间: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 KN 个线程交替打印,怎么实现,写出来,跑一下设计长短地址转换四面基本流程,问离职原因,聊人生等等
总结整体字节跳动的面试感受,面试官很专业,要求基础知识很熟悉,面试之前一定要准备后再去面试。LeetCode 题目也要刷。手写算法留的时间不多,3-10 分钟,如果 3 分钟还没写,就要求讲出解题思路。切记面试前一定要刷题和准备,简历上的项目不熟悉的千万不要写上去,写上去的项目备好 2-3 个技术方案。分享一些面试字节跳动必刷的面试题与学习文档
为此我专门整理了一份《Java 进阶学习》分享给大家,内容涵盖:计算机基础、Java、JVM、spring、算法、微服务、分布式、大厂面经、技术脑图等等...共 1600+页 质量非常高!!!
不管最近要不要去面试,建议大家都保存一份!!学完之后不论是 厂内晋升 还是 跳槽涨薪 都不在话下!
有需要的小伙伴可——【点击免费领取】
内容如下:
大厂面试题真题解析(38 页)
JVM(183 页)
多线程(221 页)
Mysql(216 页)
Spring(338 页)
Spring Boot(41 页)
经典面试题(35 页)
Spring Cloud(50 页)
Dubbo(55 页)
Mybtis+Redis(27 页)
Linux+网络(66 页)
MQ+Kafka+Zookeeper(40 页)
Netty(21 页)
大数据+hadoop(31 页)
算法(38 页)
设计模式+项目+高并发(41 页)
内容展示:
Java 基础部分
Java 概述
基础语法
类与接口
变量与方法
内部类
重写与重载
对象相等判断
值传递
Java 包
IO 流
反射
常用 API
集合容器概述
Collection 接口
HashMap
多线程
Java 异常
Tomcat
Java 基础面试题
JVM 部分
JVM 的主要组成部分及其作用
堆栈的区别
处理并发安全问题
内存溢出异常
JVM 内存模型,GC 机制和原理
双亲委派
深拷贝和浅拷贝
JVM 性能调优
线程
JVM 内存区域
JVM 运行时内存
垃圾回收与算法
JAVA 四种引用类型
GC 分代收集算法 VS 分区收集算法
GC 垃圾收集器
JAVA IO/NIO
JVM 类加载机制
JVM 面试高频题
多线程部分
线程,程序、进程的基本概念。以及他们之间关系
线程的基本状态
线程的创建方式
线程池原理
线程的生命周期
线程安全
volatile 关键字的用法:使多线程中的变量可见
volatile、ThreadLocal 的使用场景和原理
synchronized、volatile 区别
synchronized 锁粒度、模拟死锁场景
Java 并发和并行
怎么有效提高并发量
进程通讯的方式:消息队列,共享内存,信号量,socket 通讯等
线程通讯
并发、同步的接口或方法
同步锁与死锁
进程调度算法
CAS
AQS
NIO
多线程面试高频题
MySQL 部分
数据库基础知识
数据类型
引擎
索引
事务
锁
视图
存储过程与函数
触发器
常用 SQL 语句
SQL 优化
数据库结构优化
MySQL 锁:悲观锁、乐观锁、排它锁、共享锁、表级锁、行级锁
分布式事务的原理 2 阶段提交,同步异步阻塞非阻塞
数据库事务隔离级别,MySQL 默认的隔离级别
Spring 如何实现事务
JDBC 如何实现事务
分布式事务实现
SQL 的整个解析、执行过程原理、SQL 行转列
红黑树的实现原理和应用场景
MySQL 分表自增 ID 解决方案
理解分布式id生成算法 SnowFlake
MySQL 索引背后的数据结构及算法原理
MVCC
MySQL 索引原理之聚簇索引
关系型和非关系型数据库区别
MySQL 面试高频题
Spring 部分
Spring lOC
Spring AOP 的原理
Spring AOP 两种代理方式
Spring 如何保证 Controller 并发的安全?
Spring 中用到哪些设计模式?
Spring IOC 的理解,其初始化过程?
Spring 的事务管理
Spring MVC 概述 Spring 概述
Spring 控制反转(IOC)
Spring 注解
Spring 数据访问
Spring面向切面编程(AOP)什么是 AOP
SpringMVC 面试题
SpringMVC 原理
Spring 数据访问
Spring 原理
Spring 核心组件
Spring 面试高频题
SpringBoot 部分
Spring Boot 概述配置
安全
比较一下 Spring Security 和 Shiro 各自的优缺点
Spring Boot 解决跨域问题
监视器
整合第三方项目
Spring Boot 实现异常处理
Spring Boot 特性
Spring Boot 原理
Spring Boot 实现定时任务
Spring Boot 比 Spring 做了哪些改进?
Spring Boot热加载
Spring Boot 设置有效时间和自动刷新缓存,时间支持在配置文件中配置
hibernate和 ibatis 的区别
讲讲 mybatis 的连接池
Spring Boot 经典面试题
SpringCloud 部分
什么是 Spring Cloud
为什么需要学习 Spring Cloud
Spring Cloud 发展前景
Spring Cloud 对比下 Dubbo,什么场景下该使用 Spring Cloud?
Spring Cloud熔断机制介绍
CAP 原理和 BASE 理论
分布式事务、分布式锁
设计目标与优缺点
整体架构
Spring Cloud Config
Spring Cloud Netflix
Spring Cloud Bus
Spring Cloud Sleuth
Spring Cloud Stream
Spring Cloud Task
Spring Cloud OpenFeign
Spring Cloud 的版本关系
SpringBoot 和 SpringCloud 的区别?
服务注册和发现是什么意思?Spring Cloud 如何实现?
负载平衡的意义什么?
什么是 Hystrix?它如何实现容错?
什么是 Netflix Feign?它的优点是什么?
Spring Cloud 断路器的作用
Spring Cloud 面试题
Dubbo 部分
基础知识
架构设计
集群配置
通信协议
设计模式
运维管理
SPI
分布式系统原理
Dubbo 完整的一次调用链路介绍
Dubbo 支持几种负载均衡策略?
Dubbo 支持哪些协议,每种协议的应用场景,优缺点?
Dubbo 超时时间怎样设置?Dubbo 有些哪些注册中心?
Dubbo 集群的负载均衡有哪些策略 Dubbo 是什么?
Dubbo 的主要应用场景?Dubbo 的核心功能?Dubbo 的核心组件?
Dubbo 服务注册与发现的流程?
Dubbo 的架构设计?
Dubbo 框架设计—共划分了 10 个层:Dubbo 的服务调用流程?
Dubbo 支持哪些协议,每种协议的应用场景,优缺点?
Dubbo 有些哪些注册中心?
为什么需要服务治理?
Dubbo 与 Spring 的关系
Dubbo 和 Dubbox 之间的区别
Dubbo 和 Spring Cloud 的关系
Dubbo 和 Spring Cloud 的区别
Mybatis 部分
JPA 原理
MyBatis 简介
Mybatis 缓存
Mybatis 的一级缓存原理(sqlsession 级别)
MyBatis 缓存
MyBatis 数据源与连接池
MyBatis 的解析和运行原理
Spring MVC 运行流程
什么是 MyBatis?
讲下 MyBatis 的缓存
Mybatis 是如何进行分页的?分页插件的原理是什么?
简述 Mybatis 的插件运行原理,以及如何编写一个插件?
为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
MyBatis 与 Hibernate 有哪些不同?
MyBatis 的好处是什么?
简述 Mybatis 的 Xml 映射文件和 Mybatis 内部数据结构之间的映射关系
Redis 部分
Redis 概述
数据类型
持久化
过期键的删除策略
内存相关
分区
分布式问题
其他问题
消息中间件如何保证消息的一致性
如何进行消息的重试机制?
Redis 数据类型
Redis 集群如何同步
Redis 的数据添加过程是怎样的:哈希槽
Redis 的淘汰策略有哪些
Redis 集群基础
Redis Cluster主从模式
Redis 为什么这么快?
Redis 采用多线程会有哪些问题?
Redis 支持哪几种数据结构 Redis 跳跃表的问题
Redis 是单进程单线程的,如何能够高并发?
Redis 如何使用 Redis 实现分布式锁?
Redis 分布式锁操作的原子性,Redis 内部是如何实现的?
评论