笔者背景:
由于个人原因需要更换工作,双非硕,1年Java工作经验(京东),技术栈涉及SSM、Redis(JD自研)、MQ(JD自研)、RPC(JD自研)框架、异步调度框架等,有DDD背景。
面试总共经历3个月左右,1年社招面试难度和3/5年面试难度几乎无差别,唯一有差别的就是3/5年的人,项目经历会丰富点,在项目中碰到的技术难点会多一点,面试中被问到的CS基础就会少一点。
面试过的公司:
- 面试挂掉的公司:
天眼查(2面挂)、猿辅导(2面挂)、vivo(广告部门,2面挂)、美团支付(1面挂)、杭州阿里mmc(HR挂)、字节跳动(抖音广告、国际广告等4个BU,全挂)、腾讯看点(2面挂)、腾讯广告(3面过了,部门调整不招人了) - 拿Offer的公司:
滴滴(橙心)、Shoppe(SSC)、招银网络、微众银行(企业贷业务)、微信支付(6面)、快手(大数据团队)、深圳阿里(ICBU)
面试中除了问项目经历之外,还会问CS基础、算法题、简历中写的中间件原理、框架原理、主语言的原理。
面试时间每轮30min-90min不等,主要看你和面试官是否看对了眼,三分实力、七分运气。
也确实存在如果背景好一点(好的教育经历、大厂经历),面试是会简单一些(如算法题可能就出个很简单的)
下面给出一些学习资料,社招和校招均可参考,校招看了认真去学,肯定可增加拿SSP的几率。
CS基础:
刷题:
- 剑指Offer,2遍以上
- LeetCode高频题,专项刷题
中间件原理:
- MySQL:JiKe时间,MySQL45讲,丁奇,讲得贼好
- Redis、MQ、RPC:公司内网自学(Rocket MQ、Kafka,Dubbo、Spring Cloud),学习主要组件的作用,和主要特性的实现原理,如如何保证事务、顺序消息? Kafka为什么快?Dubbo注册中心如何实现?分别是AP还是CP?
- Redis设计与实现:https://www.w3cschool.cn/hdclil/
设计模式
- 从Spring源码中学、跟Mentor学(首先要掌握常用的哪些设计模式,单例、工厂、策略、模板方法等)
JAVA & 框架
- Spring/Spring Boot: 《Spring源码深度解析》
- Java:主要看书(基础我就不说了)《Java并发编程的艺术》、《深入理解JVM虚拟机》
架构设计能力
1.《凤凰架构》
2. 在网上找些架构设计的题目看看思路
下面是我的面试记录
天眼查
- Spring Boot相比如Spring提供了哪些特性?
- Spring Boot注解自动装配过程是什么样?
- BeanFactory和FactoryBean有什么区别?
- Bean相关可以进行扩展的接口?
- SQL最佳实践都有哪些?
- 索引使用有哪些原则和优化点?
- 为什么会有左匹配?
- Redo log 什么时候刷磁盘?
- Redis为什么单线程还快?
- Redis什么操作能支持高并发?
- 分布式系统,如何保证数据一致性?
- 失败的数据,重试时,如何保证撇弃已经操作过的数据?
- 两个栈实现队列,并优化
猿辅导
一面
- Mysql索引,二叉排序树与B+树的区别?
- 假设B+树的高度是4,最大支持多少数据量?
- spring boot自动装配实现原理
- Spring 解决循环依赖
- Redis高级数据结构?布隆过滤器?hyperloglog?
- Zset底层数据结构?ziplist + skipList
- redis快的原理
- 零拷贝原理
- Dubbo注册中心,可以使用redis来做吗?
- Zk保证了cap中的哪两个?为什么?
- Nginx是四层还是七层?
- Java锁升级过程?
- 并发环境下的hashmap有什么问题?
- 为什么要有spring事务传播?
- 给定一个链表,找到目标元素target,并翻转之后的包括target的k个元素。
- 将一个数组划分为M个非空子数组,找个每个子数组各自和最大值最小。二分
二面
- 项目里为什么要使用MQ?而不是直接调用?考虑点在哪里?
- 如何利用MQ(分布式)实现顺序消费?
- Redis缓存过期key删除策略?惰性和定时
- 只有惰性行不行?定时有什么用?
- 远程调用,服务是busy状态时,会怎么办?fail over的机制?
- Fail over策略,以及适用场景?(不是路由策略)
- 接口升级是通过方式进行?dubbo 版本号机制?具体操作的过程?考量点,怎么做的?
- 可重复读的mvcc是如何做的?不可重复读和幻读有什么区别?
- 多线程参数,以及工作过程?多线程中的线程与普通线程的有什么区别?运行完毕之后,前者为阻塞状态,后者为死亡状态
- 判断镜像二叉树
ViVo
一面
- 未来规划?具体是怎么执行?
- 平时看哪些书?
- 所做业务的技术难点?
- new 一个对象都有哪些过程?(类加载过程,都验证哪些内容)
- 如何做的给对象分配多少内存?
- 对象的对象头都有哪些信息?
- Eden区间如何分配的内存?随机分配?还是按照什么规则?
- Redis 底层数据结构类型都有哪些?比如list底层?(双向链表+压缩链表)
- 一条sql语句被服务器接收,执行,返回的过程?
- sql中where、having区别?having必须和group by一起使用吗?
- Mysql innodb叶子节点存储一条数据还是多条?
- Lock底层原理?
- cas是如何实现的?
- cms和g1有什么区别?cms有什么缺点?
- sql调优都有哪些实践?
- 线程参数意义,丢弃策略有哪些?队列如何产生作用的?
- 系统性的学习:书籍
二面
- Innodb数据结构只有b+树吗?
- b+树的优势?
- 为什么走主键索引效率会比较高?
- 测试环境走索引,但是线上不走索引?怎么解决?
- Sql的执行计划优化器是如何进行优化的?
- Mysql遇到了锁表的情况或者死锁的情况吗?
- Mysql相关的锁?乐观锁、悲观锁、间隙锁?
- 什么时候会用间隙锁?
美团支付
- Java原生线程池的种类?fixed、single、cached、schedule
- 几种线程池的区别?
- 核心线程数个数如何确定?cpu/io
- 这几种线程池分别使用的什么队列?阻塞队列有哪些?使用场景?
- 线程池分配任务顺序(执行过程)?LinkedBlockQueue有什么缺点?
- ThreadLocal原理,使用场景,以及缺点?给每个线程分配一块内存空间,占用多余的空间。
- JMM模型,不是JVM内存结构?volatile原理?重排序;缓存数据失效、总线加锁、线程将变量从主内存拷贝到线程所属的内存区域中
- JVM内存结构?
- 内存分配,指针碰撞原理?会有什么问题?
- 项目使用什么垃圾收集器?G1,为什么使用G1,与CMS的区别?CMS的内存碎片对项目有影响吗?如果通过其他参数对内存进行压缩是否也能整理内存碎片?
- G1的优势?
- 其他JVM参数?-Xss、-Xmx、-Xms,mx和ms如何设置的?为什么要配置为一致?避免每次垃圾回收完成后JVM重新分配内存
- Mysql事务隔离级别?各个级别解决了什么问题?
- 幻读是什么意思?RR级别下会出现幻读吗?如何解决幻读问题的?如何解决不可重复读问题?
- b+树的数据结构,聚集与非聚集索引区别?
- 非聚集索引查询数据的过程?
- 联合索引的数据结构是什么样的?
- Abc联合索引,在where中使用的c、b、a还会使用到索引吗?
- Mysql主从复制原理?具体过程?
- 堆排序?
- MVCC原理?基于undo log的回滚链实现的。
字节跳动(抖音广告)
一面
- java与python的区别?
- Python的弱类型是如何实现的?
- 线程与进程的区别?
- 一个需要做并行的任务,多进程和多线程如何选择?
- 进程和线程,它们都有上下文切换,进程耗时的点在哪里?
- 进度是如何调度的?具体的调度算法?
- 什么时候会出现线程安全问题?如何避免?
- 堆和栈的区别?只用堆或者只用栈可不可以?
- 堆内存和栈内存使用性能有差异吗?
- 操作系统的中断是如何实现的?作用是什么?(硬件中断和软件中断)
- 有很多中中断,操作系统是如何处理中断,如何区分不同的中断?以键盘中断为例
- Tcp链接断开的过程?为什么需要2MSL?
- Tcp拥塞控制是如何做的?如何知道有没有发生拥塞?
- 遇到网络拥塞之后,是如何做的?网络恢复后,是怎么做的?
- 快重传是如何做的?
- varchar(20)和char(20)有什么区别?varchar额外存储字符长度.
- int(20)和int(10)的区别?
- Sql优化过程
- 10亿数据,需要翻页查询,每页显示10条,如何优化?(id,name,age)
- 先拿id,再查数据,会有什么好处?除了避免回表还有什么优势吗?
- 给定一个数组,找到一些三元组,使组合和为0,且三元组不能重复。
二面
- Sql优化是怎么做的?
- Mybatis为什么反射慢?因为找寻找字段,使用jdbc优化,额外采用hashMap去建立映射关系
- 4个表join的sql,且数据量很大,如何优化?可额外采用mapreduce
- UDP报文的格式是什么?一个UDP消息包含哪些部分
- redis为什么比mysql快?
- Redis数据结构是什么?使用的是什么模型?epoll、poll、select的区别?
- Epoll在操作系统层面上的理解
- Zset的使用场景?允许重复吗?
- JVM的组成?栈帧里面有什么?
- Class文件存在哪里?
- 一个方法的参数存在哪里?(栈帧里面?)
- HashMap的数据结构?通过hashcode如何定位到数据?
- t1、t2线程交替打印ab、打印三次
- 说道用uuid来防重,那uuid用什么生成?雪花ID组成部分
- 线程安全的linklist
- 其他实现同步的工具?syn和reentrantlock的使用场景?低并发和高并发时、该怎么选?
- 反问:云计算方向、java、springboot、大数据(大数据会多一点)
- 算法题忘了
Shopee
一面
- 虚拟内存的作用?原理?
- Redo log 作用?如何保证事务?
- DDD中,实体和值对象的区别?
- DDD中,Service和Repository的分层?
- Redis中String的底层?
- 跨域的原因,如何解决?
- https过程
- 大数相加
二面
- 慢sql是如何优化的
- Tcp拥塞控制,是怎么做的?滑动窗口,慢启动,快恢复,快重传?
- TCP三次挥手和握手机制
- Innodb如何保证数据一致性?
- Innodb有哪几种锁?Innodb同时操作两张表,是如何进行加锁的?
- Innodb索引结构?和B树区别?
- 最长不重复子串长度
- JMM结构是什么样?(不是jvm内存结构)
- 一个对象从创建到回收的过程
- Young gc、minor gc、full gc的区别?
- 说说对Redis的理解?redis单线程为什么会快?Redis的zset数据结构?跳跃表?红黑树?
- Zk是如何保证一致性的,选举过程?
- 线程之间的通信方式
- synchronized和reentrantlock区别
阿里ICBU (offer)
一面:
- redis缓存穿透?
- a 调 b,b调c,如何保证事务一致性?
- Mybatis,一级缓存和二级缓存的区别?默认是什么?
- 1.7和1.8中cchashmap的区别?
- 设计一个用户提现操作,从哪些角度去考虑?前端到后端如何设计?风险把控。
- Dubbo注册中心,如何保证高可用和可考虑?
- 工厂模式和策略模式的区别?
- 栈内存泄漏和堆内容泄漏场景?
- 业务:sbu,跨境出口贸易,资金流结算,ToB,事务、安全、严谨的。
- 沟通氛围比较好。
二面:
- 考察软素质
三面:
- 项目中的难点,(超卖)有哪些解决方案,优缺点?
- 常用设计模式,在实际工作中是如何使用的
- 常用设计原则,在实际工作中是如何体现的
- CAP理论,在项目中是如何应用的
- 线上问题定位:
- java 服务端 对外提供很多服务
- 并发增大,请求变慢,无响应,但cpu利用率很低
可能的原因有哪些,以及进一步定位如何做?
腾讯看点(2面挂)
- volatile关键字作用?double-check的单例模式?volatile在其中的作用?
- cms的四个阶段?
- JIT的作用?
- Zookeeper原理?什么时候用zk?Dubbo注册中心是如何使用zk的?服务上线与下线zk是如何感知的?
- 布隆过滤器作用?(判断是否不在内存中)误判什么时候会出现?(hash key冲突、过滤器长度太短)
- Redis,zset的数据结构(ziplist(元素个数128个以下,长度小于64,字典(存放key和分值)+跳表))
- redis集群?hash槽,等
- 异步框架原理?
- Innodb如何解决幻读?next-key lock(record lock + gap lock)?快照读是mvcc解决。什么是当前读(select for update、 insert、update、delete)与快照读(普通select)?
- 二级索引叶子节点是什么?索引覆盖是什么?mysql利用什么排序更快?索引
- HTTP协议与RPC协议的区别(文本与二进制,无连接的)?HTTP1.1与HTTP2.0的区别(io多路复用、二进制(分帧、速度快))?HTTP2.0的缺点?HTTP3.0?
- 虚拟内存(基于内存分页、局部假设)?缺页中断过程?(内存足够、内存不够LRU进行页面置换、页表寻找物理地址)?
- 多级页表作用?(解决页被频繁置换的问题)
- 找出所有三个数相加为0的组合,去掉重复
微信PCG广告(3面之后没下文了)
一面:
- Java基础,就哪些常见的八股文
- SSM框架原理、中间件技术原理。
- 算法题,不难,树相关的,具体忘了
二面(周六,滨海大厦现场面的):
- 上来让写到算法题
- 讲所做业务的框架,主要流程,业务拓扑图
三面:
- 问了写软素质,以及项目难点之类的。
- 面试通过后,短信告知待安排HR面,等了2个星期,我主动打电话询问情况时,告知简历已被释放,部门调整,不招人了。
微信支付(offer)
一面:
- 项目介绍
- 项目中用到Redis的实现原理(复制同步原理、高可用实现、key删除原理、常用数据结构实现原理等)
- MQ如何保证事务、顺序、不丢失等等
- RPC框架负载均衡如何做,注册中心原理、寻址服务原理、一个请求到达到请求返回整个过程,以及高并发请求的背景下,整个请求响应过程。
- 算法题,忘了是啥,不难。
二面:
- 40min,让做两到算法题(mid难度)。
- 项目介绍
- 项目技术难点,以及解决方案
面试结束后,布置了个大作业,一周完成
三面:
- 项目介绍,项目技术难点,以及解决方案
四面:
- 项目介绍,项目技术难点,以及解决方案
五面:
- 项目介绍,项目技术难点,以及解决方案
- 大作业实现方案、优化提升思路
六面:
- 项目介绍,项目技术难点,以及解决方案,软实力较多
全部评论
(3) 回帖