Review
阿里的面试特点:【自我介绍】->【项目介绍】->【场景解决】->【基础知识】,阿里面试除了基础以外,也很看重候选人的解决问题的思维。还是需要候选人有点积累的,假如 你写的项目不是自己的,很容易就被问出来。
- 再一次聊项目,功能,架构,角色,量级
- 面试官说我不了解源码就没继续追问了
面试官说,不论去哪儿,做的开心是最重要的~
Review-Java:
-
synchronized的原理、synchronized是否可重入、synchronized如何实现可重入、synchronized锁自旋会先来先到吗
-
对Java并发有什么了解、对哪个了解得比较深(synchronized,他发现上次问过了..)、公平锁非公平锁、ReentrantLock传参后是如何实现的公平锁
-
HashMap等集合在for循环中自己调用remove方法可以不
- 线程池的参数
- 能不能自己实现一个java.lang.String并加载
- IO复用模型有三种:select,poll,epoll; poll和epoll的区别
- 进程同步的方式
- 如何自己实现内存分配和管理?不太懂,然后说了jvm的垃圾回收机制
- 如何实现群消息已读(对于每一个messageid,存当前readids + unreadids,当群成员A已读某一条消息时,把A userid从unreadids移除写到readids上就好了,客户端更新到messageid对应的详情列表,就可以展示m人已读,n人未读)
- JVM内存模型,垃圾回收算法,垃圾收集器的区别,GC调优
- 两线程交替打印
- 多线程模拟100分钱随机分给20个人,每个人最少分配到2分钱
- HashMap和ConcurrentHashMap,HashMap中的红黑树,两者rehash的区别
- 讲一下ConcurrentHashMap
- 为什么比HashTable的效率高
- CAS操作,有什么问题,解决方案
- concurrentHashMap
- 1.7 两级hash
- 1.8 volatile + CAS + synchronized
- 刚刚你说了线程池,你线程池是用的什么,参数有哪些,为什么这么设置
- 线程池核心线程满了怎么办,里面的阻塞队列是干什么的
- 说说ThreadLocal是什么
- CAP理论知道吗,为什么不能同时满足
- 锁有哪些实现方式
- JVM的内存模型,垃圾回收算法,垃圾收集器
-
-
如何判断垃圾对象(JVM)
-
- HashMap的原理,其他线程安全的Map
- 线程模型
- IO模型(包括操作系统底层IO模型和常见BIO、NIO、AIO、IO多路复用的原理)
- 类加载机制
- 为什么需要双亲委派
- AQS原理
- 自旋锁的unsafe怎么实现的
- 什么时候gc会影响应用的可用性
- Synchronized 1.8后左了那些优化
- 轻量级锁
- Java类加载器有哪些种类,每种都用来加载什么
- 双亲委派,String 类是由那个类加载器加载的
- volatile 关键字原理
- 介绍下动态代理
Review-Spring、Springboot、Springcloud:
-
AOP的用法,AOP动态代理的实现方式有哪些以及区别说下
- 你们公司内部的RPC框架,介绍一下
- RPC是什么,和http调用有什么区别
- 如何实现延时任务
-
Spring AOP的了解、Spring如何通过Cglib实现的动态代理
-
项目的登录逻辑、设置token的过期时间、如果token被拦截伪造登录了咋办、单点登录
-
Spring IOC了解吗
- 说一说你项目的架构
- Spring里面的bean怎么回事
- Spring里面有哪些设计模式
-
单例模式(写个自己觉得最好的)
- SpringMVC和SpringBoot有什么区别
- SpringBoot的自动配置是怎么实现的
- 怎么做服务拆分,边界怎么划分的
- dubbo调用过程是怎样的,PB知道吗
- thrift了解过吗
- etcd或consul知道吗
- 多个服务中如何快速排查问题
- rpc怎么实现服务发现
-
-
RPC:
如何实现一个IOC容器
springboot的过滤、拦截和tomcat的过滤、拦截
bean的作用域,为什么默认单例(线程考虑)
-
Review-Mysql:
-
写一个SQL语句:student(名字、课程、成绩),找出所有成绩超过80的学生名字
-
聚簇索引了解不、select * from 表,咋执行
-
MySQL默认的隔离级别,事务的ACID
-
建立了哪些索引,联合索引哪个放在了前面
-
索引的底层结构
-
使用expain时比较关心哪些参数?
- 什么是覆盖索引
- MySQL集群。假如集群出现延迟怎么处理。
- MySQL索引,聚簇索引和二级索引
- MySql的索引优化,索引失效的情况
- 悲观锁和乐观锁
- MVCC
- Mysql的一致性是什么,数据库redolog,undo log,MySQL的索引结构,为什么二级索引叶子节点不能直接存储行数据的指针,这样可以不回表,怎么考虑的?
- MySQL的事务介绍,ACID的实现原理是什么(想问MySQL的日志)
- 怎么提高数据库读写性能,SQL调优
- MySQL(索引原理,查询优化,三大日志)
- 二阶段提交
- 数据库 左连接、右连接、内连接、外连接区别
- 项目数据量多少
- 分库分表的话查一条数据怎么查?(通过分片键和分片规则,找到这条记录的存储位置,再查找)
- SQL题(有一张考试分数记录表exam,包含字段(id,student,subject,score;)选出每个student的最高score记录,需要包含所有字段)
主从复制以及binlog日志主从如何保持一致性
Review-Redis:
-
Redis除了缓存还用在了哪
-
Redis的持久化机制
- Redis的zset实现延时任务
- Redis的持久化机制,持久化能保证不丢失数据吗
- Redis的数据结构,线程模型
- Redis高可用方案
- 如何实现限流
- Redis为什么这么快
- 缓存穿透和缓存雪崩
- 分布式锁
- 如何实现全局的id生成策略
- Reids的集群和选主
- redis里面的zset,跳表怎么实现,怎么增删,
- Redis里面的数据结构有什么场景
- Redis怎么实现锁(redis锁的所有坑都说了一遍)
- redis是怎么rehash的
- 分布式锁的实现方式(MySQL,zk,Redis都说了一遍,并且分析了各自的优缺点,这个问题问的频率太高了)
- Redis中的淘汰方式有哪些(淘汰策略)
- Redis(数据结构的内部实现、淘汰原理策略、持久化、集群、扩容、数据同步、以及一些常见缓存问题的解决方案)
- mget和pipeline区别
- mget和pipeline都是多命令一起执行,只有一次往返的网络IO
- mget在集群下可以并行去获取,pipeline还是串行
- 主从同步的细节
- 全同步
- 增量同步
- 分布式锁
- 可重入怎么实现
- 如何保证原子性
- 为什么删除的时候要重新get一下
- 需要保证删的这个服务实例拥有锁
- 删除Redis数据的时候没有删除成功怎么办
- redis key的过期策略 (定期删除:定期随机抽取20个key检查过期并删除 惰性删除:读取key时检查到过期则删除)
zset底层实现,跳表插入数据的流程
Redis数据结构,String底层的考虑
redis、mysql如何保证数据一致性
Redis持久化机制以及如何保证分布式场景下追加AOF文件的一致性
Review-消息队列(Kafka):
- 介绍一些Kafka的一些概念
- Kafka如何保证消息有序
- 消息推送如何保证不重复
- Kafka如何保证消息的可靠性(高可用):重复发送,数据落地,确认信号
- producer-consumer
- 用过什么消息队列,有什么特点
- 怎么保证消息幂等消费
- zk是什么分布式模型(想问的CAP定理),主从怎么做选举
- zk只有一个主节点,写性能不高,zk怎么解决的
- zk介绍一下,有哪些节点类型,特点
- zk中的watch机制是怎么实现的
Review-高并发:
-
对负载均衡有了解吗、项目瓶颈在哪,如何判断项目瓶颈?
-
负载均衡的轮询策略
- 设计题:秒杀系统
- 分布式事务知道吗,有哪些方案(说了2PC,3PC,TCC,MQ) 补偿性事务、后置提交优化 、两阶段提交
- 分布式之后会遇到什么问题,CAP的各个情况介绍一下
- nginx的upstream是干什么的
- 项目量级多大,QPS最高的接口是怎么做的
- 抢红包设计
- 超发如何解决
Review-Structure:
- HashMap结构、扩容操作、如果扩容红黑树节点会转回去吗
- 红黑树
Review-算法:
-
代码:LeetCode15:三数之和 时间复杂度
-
代码:LeetCode39:组合总和
-
智力题:9个人,一枚色子,选出两人,怎么比较公平?
-
代码:LeetCode79:单词搜索
- 提供一个整型数组以及一个整数s,如果该数组中存在n个连续元素,且元素相加之和大于等于s,则返回满足该条件的连续元素的最小长度;否则返回0
- 给定m个不重复的字符 [a, b, c, d],以及一个长度为n的字符串tbcacbdata,问能否在这个字符串中找到一个长度为m的连续子串,使得这个子串刚好由上面m个字符组成,顺序无所谓, 返回任意满足条件的一个子串的起始位置,未找到返回-1。比如上面这个例子,acbd,3。给定m个可能重复的字符[a, b, d, d]呢?
- Two Sum
- K Group反转链表。写了栈和迭代两种实现方式,链表的题写起来真痛苦,很容易边界出错
- 第K大的数
- 算法题LFU
- 一致性hash
- 一个机器down掉,数据会怎么分布
- 考虑虚拟节点的情况
- 一个机器down掉,数据会怎么分布
- k个有序数组合并
- 两种实现,分析算法复杂度
- leetCode 2 两数相加
Review-网络:
-
token的结构、项目中登录的逻辑(简述)、token有什么问题、其他保持状态的方式
- 为什么要四次挥手
- 浏览器打开一个网站的过程中会经历哪些网络处理,DNS的具体过程是啥
- get和post区别(是否可以缓存)
- http和https区别
- 中间人攻击
- https如何抓包(Fiddler or Charles)
- TCP如何可靠
- 滑动窗口,流量控制,拥塞控制
Review-linux:
- docker的网络模式
- Linux的内存管理
- docker的实现原理
- wc -l `find . -name "*.java"` | awk '{ sum=sum+$1 } END { print sum }'
- Linux管道是一个操作方式为文件的内存缓冲区
- |是匿名管道,父子进程间使用,父进程先打开一个管道,然后fork出子进程,子进程通过拷贝父进程的地址空间拿到管道的描述符,从而可以读写
- ctrl + c,会发送SIGINT的信号,等同于kill -2(interrupt),程序那边接收到这个信号后做处理
- ctrl + z,会发送SIGTSTP的信号
- socket io模型(select, poll, epoll)
日志里面第一列是ip, 查询出现次数前10的ip cat xxx.log | awk '{ print $1 }' | sort -n | uniq -c | sort -r -k1 | head 10
- 负载很高的时候,怎么查
Review-HR:
-
做项目时怎么学习一门技术的,做项目前如何前期调研
-
读过哪些开源项目的源码
-
对字节有什么了解?
-
是否有继续深造的打算,为什么不打算深造
-
三轮面试的感受,三轮面试除技术外的感受,对哪个面试官印象比较深刻,面试回去后做了什么提升
-
到岗时间,最快入职时间
-
学习途径
-
最有成就感的一件事
-
简单介绍一下项目,是团队项目吗
-
有投递其他公司吗
-
为什么投递字节商业变现后端?为什么选择后端?
-
用三个词进行自我评价
-
希望字节这个平台能给自己带来什么
-
除了实习之外以后的职业规划
-
心目中的大厂是什么
-
反问
-
你周围最欣赏的人,最欣赏的品质是什么?
- 为啥离职,怎么想的
- 怎么和团队的人沟通,和成员出现冲突时怎么解决。
- 期望薪资,你现在的薪资
- 说说看,假如你是部门技术经理,线上商户数据丢失怎么办
- 怎么将一个产品推荐给其他的团队,怎么界定边界
- 怎么样协调关系
(我才2年啊喂,到这里我已经快冒汗了,生怕最后一关毙掉了) - 你和同事相处的情况怎么样,说说你帮助同事的一次经历
- 离职原因
- 职业规划
我给大家的建议就是慢慢来,不管是社招还是校招,制定自己的计划,一定要有自己的知识体系,针对自己薄弱的地方进行强化复习,不放过任何一个细节。
简历上写的东西一定要会,一般都是针对简历来提问的。如果在预习的过程中感到困难或者吃力,那就对了,等你熬过去了,就是胜利。祝福大家都能拿到满意的offer。