面试前就有听说过字节比较考验算法,面试的时候果然是,还好自己刷题比较多,这也验证了一个说法,大家在面试字节等目前比较火的互联网公司,一定要记得多刷题,文末会有自己面试的时候准备好的面试题PDF文档,有注意各位查漏补缺,有需要的可以找我免费获取到,这次面试的答案我也已经整理出来了,文末会有获取方式! 具体的面试题,大家看正文吧!
字节跳动一面
- 自我介绍,我简历里面有一个商城的项目
- 画一个商城项目的所有的模块,然后讲解。
- 在用户登录的时候,由于HTTP是无状态的如何识别不同的用户(session或者cookie) ,然后让说一下session和cook各有什么优缺点
- 单点登录的问题如何解决(服务器集群的情况下,用户如何在一-台服务器上登录,访问其他的服务器就不需要登录了) ?答:服务器集群之间厂播session厂播或者使用Redis共享session
- Redis的底层是通过什 么实现的?
- 为什么Redis他是通过hashtable实现的,但是它的扩容的时候并没有卡顿?
- 为何Redis是单线程的还是这么快?
- 商城如果有用户注册的模块,那么在用户注册成功之后一般会返回一个邮箱连接,然后用户点击连接跳转到商城主页。现在要求连接的有效时间为30分钟,这种服务如何保证?
- 可以在数据表中增加一个超时时间的字段,用户点击连接的时候判断是否已经超时
- 在进行商品展示的时候,如果一个商品有不同的分配,那么可能会涉及到有多级分类的问题- -》如何涉及数据库表,来实现商品的多级分类。
- 把你知道的TCP都说下?
- 说一些TCP的三次握手、四次挥手?以及各自的状态
字节跳动一面
- 对于你的商城项目,如果对于同一个分类有多个卖家,如何设计数据表?
- 对于高并发的系统,如何设计架构才能避免瞬间数据库收到瞬间高流量的冲击? Redis消息队列
- 如果你用Redis实现的话,可能会出现商品超卖的问题,那么你是如何结果商品超卖问题的?
- 一般在支付的过程中,用户支付、账户被冻结、订单的生成、卖家库存减少、卖家收到钱,这是个一系列的过程,那么你如何设计实现分布式的事务?答:消息队列
- 如果用户在提交订单之后向消息队列发送消息,这个时候网络出现异常,消息队列并没有接收到用户发送的消息怎么办?答:消息队列会有一个回调接口,对于那些没有确认或
- 者取消的消息不断的轮训,判断是否提交成功。
- 对于不同的业务我们会进行分库存储,说一下MySQL的主备模式?
- MySQL的主从同步时如何实现的?日志
- 在MySQL的主从同步过程中,SQL线程可不可以并行的执行?答:不可以,因为这样可能SQL执行的顺序不同,导致事务提交时间有差异
- 说一下NIO机制、select系 统调用函数?
- B B+树的特点?
- 字符串匹配
- 二叉搜索树的第K小节点
- 链表每隔K个节点进行翻转。
字节跳动一面
- 自我介绍
- 问GitHub账号
- 设计一个短连接服务-不会,涉及了MD5hash算法
- 两个鸡蛋问题,如果有100层楼,如何判断出恰好在第几层楼摔坏?
- 能不能推演出一个数学公式
- 用户访问一个URL的全部过程
- 一般情况下,我们的IP的存储都是将点十进制转化为-个长整型进行存储,如1.2.3.4--》 1234,现在有一个20w行的文件,其中文件的每一行都存储了一些信息:
- 设计一个IPquery的服务,以最快的形式,根据我查询的IP返回用户的基本信息。(用 代码实现)
本次面试答案,以及收集到的大厂必问面试题分享:
JVM
- 线程
- JVM内存区域
- JVM运行时内存
- 垃圾回收与算法
- JAVA四中引|用类型
- GC分代收集算法VS分区收集算法
- GC垃圾收集器
- JAVA IO/NIO
- JVM类加载机制
Java集合
- 接口继承关系和实现
- List
- Set
- Map
- JAVA多线程并发
- JAVA并发知识库
- JAVA线程实现/创建方式
- 4种线程池
- 线程生命周期(状态)
- 终止线程4种方式
- sleep与wait区别
- start与run区别
- JAVA后台线程
- JAVA锁
- 线程基本方法
- 线程上下文切换
- 同步锁与死锁
- 线程池原理
- JAVA阻塞队列原理
- Clicarrier. CountDownLatch. Semaphore的用法
- volatile关键字的作用(变量可见性、禁止重排序)
- 如何在两个线程之间共享数据
- ThreadLocal作用(线程本地存储)
- synchronized和ReentrantL ock的区别
- ConcurrentHashMap并发
- Java中用到的线程调度
- 进程调度算法
- 什么是CAS (比较并交换乐观锁机制锁自旋)
- 什么是AQS (抽象的队列同步器)
Spring 原理
- Spring特点
- Spring核心组件
- Spring常用模块
- Spring主要包
- Spring常用注解
- Spring第三方结合
- Spring 10C原理
- Spring APO原理
- Spring MVC原理
- Spring Boot原理
- JPA原理
- Mybatis缓存
- Tomcat架构
微服务
- 服务注册发现
- API网关
- 配置中心
- 事件调度(kafka)
- 服务跟踪(starter-sleuth)
- 服务熔断(Hystrix)
- API管理
Netty与RPC
- Netty原理
- Netty高性能
- Netty RPC实现
- RMI实现方式
- Protoclol Buffer
- Thrift
网络
- 网络7层架构
- TCP/IP原理
- TCP三次握手/四次挥手
- HTTP原理
- CDN原理
RabbitMQ
- 概念
- RabbitMQ架构
- Exchange 类型
设计模式
- 设计原则
- 工厂方法模式
- 抽象工厂模式
- 单例模式
- 建造者模式
- 原型模式
- 适配器模式
- 装饰器模式
- 代理模式
- 外观模式
- 桥接模式
- 组合模式
- 享元模式
- 策略模式
- 模板方法模式
- 观察者模式
- 迭代子模式
- 责任链模式
- 命令模式
- 备忘录模式
- 状态模式
- 访问者模式
- 中介者模式
- 解释器模式
负载均衡
- 四层负载均衡vs七层负载均衡
- 负载均衡算法/策略
- LVS
- Keepalive
- Nginx反向代理负载均衡
- HAProxy
数据库
- 存储引擎
- 索引
- 数据库三范式
- 数据库是事务
- 存储过程(特定功能的SQL语句集)
- 触发器(一段能自动执行的程序)
- 数据库并发策略
- 数据库锁
- 基于Redis分布式锁
- 分区分表
- 两阶段提交协议
- 三阶段提交协议
- 柔性事务
- CAP
分布式缓存
- 缓存雪崩
- 缓存穿透
- 缓存预热
- 缓存更新
- 缓存降级
一致性算法
- Paxos
- Zab
- Raft
- NWR
- Gossip
- 一致性Hash
JAVA算法
- 二分查找
- 冒泡排序算法
- 插入排序算法
- 快速排序算法
- 希尔排序算法
- 归并排序算法
- 桶排序算法
- 基数排序算法
- 剪枝算法
- 回溯算法
- 最短路径算法
- 最大子数组算法
- 最长公共子序算法
- 最小生成树算法