双非本科的艰难春秋招面经(阿里字节百度意向)

我是想以时间倒叙的方式回顾我整个秋招\春招

背景双非本科,我秋招offer就三家百度,阿里,字节,春秋招的面经全在下面了
骚话都在这里另外一个帖子
https://www.nowcoder.com/discuss/527289?source_id=profile_create&channel=1009
春招比较多的答题的心理话,虽然删除了一些,后面秋招基本偏向简要记录,如果希望以时间线看的话,可以从后往前,这个才是我的心路变化

目录

字节跳动 2020-9-16(Offer)
美团 2020-9-14(一面挂)
百度 2020-9-10(Offer)
腾讯云产品部 2020-9-10(二面挂)
阿里 2020-9-9(Offer)
微信支付 2020-9-4 (一面挂)
斗鱼 2020-8-28(hr面挂)
网易云 2020-8-14 (hr面挂)
快手 2020-8-11 (三面挂)
百度云 2020-7-25 (一面挂)
字节跳动 2020-5-12 (Offer)
CBU 2020-3-13 (不面)
蘑菇街 2020-3-12 (二面挂)
腾讯CSIG 2020-3-11 (Offer)
淘系 2020-3-7 (口头Offer)
天猫 2020-3-5 (不面)
CVTE 2020-3-2 (二面挂)
淘系广告 2020-3-1 (不面)
字节跳动 2020-2-27 (Offer)
蚂蚁金服 2020-2-12 (不面)
CVTE 2020-1-13 (hr面挂)

字节跳动 2020-9-16(Offer)

一面

1、java的注解是运行时还是编译时执行?字节码里面会带有注解的信息吗

2、讲讲HashMap底层一个put调用的方法

3、讲讲红黑树

4、讲讲动态代理(三种都讲讲)如何实现的RPC框架的动态代理有想过吗(没有,应该是Dubbo的SPI)

5、兑换硬币

6、二叉树前序遍历

7、线程池

二面

1、讲讲异步IO(AIO,BIO,NIO)

2、讲讲多路复用(select\poll\epoll)

3、内核态和用户态

4、手写一个线程池(显然不会)

5、复制链表

6、虎羊问题

7、讲讲Java的锁

8、一致性hash算法说一下

三面

1、讲讲项目的优化点和bug

2、给出一个数组,找出满足i<j<k且nums(i)<nums(j)<nums(k)

3、接雨水

4、讲讲你在学习的过程中觉得有意思的点

美团 2020-9-14(一面挂)

1、秒杀有什么难点

2、讲讲秒杀限流、降级、熔断(降级应该是关闭一部分非核心业务)

3、如果给你开新版本会怎么做(做分布式,忘记说做分布式事务了)

4、如果一台JVM每隔一小时OOM一次,你会从哪方面排查

5、两个数组合并(这里其实可以用一下交换的策略减少内存开销)

6、划分服务按什么划分(业务,代码量)

7、数据不一致怎么办

百度 2020-9-10(Offer)

一面

1、讲讲java的异常体系

2、jvm的结构(PC,堆,虚拟机栈,本地方法栈)哪个地方会出现内存溢出(除了pc都会)了解过运行时常量池吗

3、讲讲synchronized同步方法和同步静态方法有什么区别,讲到对象头,里面有有什么

4、volatile的作用

5、讲讲集合类,讲讲红黑树

6、限流用的是什么(guava的包做的服务器限流)

7、linux复制和移动用什么指令,服务器之间的用什么

8、redis的分布式hash

9、ThreadLocal了解吗(直接扣源码)

10、引用类型有多少种(强软弱虚)

11、equal和hashcode(这是1.6的规范)

12、mysql讲讲rr和rc的区别(readview和mvcc那一套讲讲)

13、讲讲垃圾回收算法和gcroot

二面

1、数组和链表有什么区别

2、200亿条记录,每条记录有唯一id,如何加快查询,16G内存,可用磁盘

3、算法:前中序确定一棵树

4、聊项目

5、限流和降级是一回事吗?

6、rpc框架需要考虑哪些

7、了解微服务吗?为什么要使用微服务

三面

1、聊实习

2、印象深刻的大学的事情

3、遇到的困难

4、聊项目

腾讯CSIG 2020-9-10(二面挂)

一面

1、讲讲java的异常体系

2、讲讲http报文格式(首行+报文头+空行+报文体)讲讲报文头

3、讲讲jvm有什么参数

4、讲讲redis消息订阅发布模式(不会)redis有什么数据结构(5个)排行榜有什么数据结构(sorted set)讲讲redis的集群模式(三种模式,主从,哨兵,集群)

5、讲讲http1/2的区别

6、tcp和udp的区别

7、讲讲项目如何做到高可用的无状态

8、源站探测方案

9、了解MTU吗,UDP包头过大怎么办(会分片,MTU默认1500)

二面

1、讲讲String、StringBuilder、StringBuffer

2、怎么做限流的

3、协程和线程

4、go语言的GPMS是什么(稍微讲了讲)

5、char可以存下中文吗(应该)中文多少个字节(他妈的,我回答3个,其实是utf-8是这样的)unicode和utf-8有什么关系(Unicode 是「字符集」UTF-8 是「编码规则」)

6、guava的限流组件底层源码

7、如何设计一个go的error(底层就是一个interface)

8、红黑树和AVL树

9、数组和链表如何设计一个hash表(参照hashmap)如何优化(用红黑树)

10、优化之后,瓶颈时在哪里?(tomcat,redis,mysql,mq)

11、讲讲快排(优化讲讲)

12、sychronized

13、mysql的两个存储引擎

阿里 2020-9-9(Offer)

一面

1、聊聊atomic,讲讲unsafe有什么方法,CAS使用AtomiReferrence能解决ABA问题吗?

2、聊聊volatile(可见性顺序性)

3、讲讲synchronized(objectmonitor)为什么说synchronized是重量级锁?ReentranLock是重量级锁吗

4、聊聊ReentranLock和Synchronied的差别

5、mysql的Innodedb和myisam(表级锁,事务)

6、聚集索引和非聚集索引有什么区别

7、mysql如何实现事务回滚(undolog和redolog,把一个update的流程去讲一遍)

8、MVCC了解吗(利用的就是undolog+readview去实现,讲讲readview,然后讲讲可重复读和读已提交的区别)

二面

恐怖的场景题

三面

1、Hash冲突的解决

2、建模场景题,不会

3、红黑树

4、讲讲实习项目和自己做的项目

5、性格

6、看的书籍

交叉面

1、聊实习

2、看的书籍

3、聊秒杀的分布式事务

微信支付 2020-9-4 (一面挂)

1、朋友圈(并查集)

2、lc600 不含连续1的非负整数

3、atm先扣钱还是先吐钱(其实应该是先吐钱,然后对他加锁,对账)

4、了解操作系统的信号量和互斥锁吗(一个有资源数,一个没有)

5、mysql如果abc联合索引,那么b进行查询,走索引吗(应该不走)

6、一条棍子,组成三角形的概率多大(分析另外两段x,y,a-x-y最后得到1/4)

7、有哪些排序是稳定的(归并,插入,忘了冒泡排序)

斗鱼 2020-8-28(hr面挂)

一面

1、操作系统进程和线程区别,进程通信

2、JVM结构,OOM

3、有了解过tomcat吗(没有)调优过吗(没有)

4、分布式session怎么做的

5、如果上传一个大文件15m,在spring设置最大文件10m,报错怎么处理,是在tomcat端就抛异常(先看日志,看是哪里出问题,面试官:直接说需求做不了)

6、Spring的IOC和AOP

7、链表反转

8、信号和信号量(信号好像是底层的东西,信号量是个同步机制,信号:(signal)是一种处理异步事件的方式。信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程外,还可以发送信号给进程本身)

二面

1、项目

2、redis数据结构,说说跳表

3、hashmap底层,一个put的过程(忘了整个讲讲扩容)

4、mysql主从复制

5、synchronized和reentrantlock的区别,讲讲AQS

网易云 2020-8-14 (hr面挂)

一面

1、项目

2、String StringBuilder StringBuffer 区别

3、delete和drop的区别

4、索引不好的地方(频繁改动)

5、说说垃圾回收算法(复制,标记清除,标记整理)整个垃圾回收的过程(新生代永久代)

6、给出几个例子判断索引是否失效

7、sleep和wait的区别(会不会释放锁,超时时间,线程状态)

8、synchronized和volatile的区别(讲讲区别就好了)

9、讲讲hashmap(整个put的过程,1.7和1.8的区别)

10、mq如何保证消息不丢(投递前,投递中,投递后)

11、redis击穿(布隆过滤器和返回空对象)

12、redis和mysql数据不一致(先删再改)

13、讲讲java的线程池

14、讲讲jvm垃圾回收算法,讲讲过程(三种算法,整个垃圾回收的过程)

15、讲讲linux常用指令(隐藏?)

16、binlog的用处,应用场景(https://blog.csdn.net/u013405116/article/details/89373692)

二面

1、聊项目

2、redis替换算法

3、设计一个评论系统

快手 2020-8-11 (三面挂)

一面

1、讲讲实习优化代码(优化告警)

2、聊聊秒杀,redis和数据库不一致怎么处理

3、RabbitMQ的作用(单纯做解耦)

4、聊聊Redis的RDB和AOF,适用于什么场景?
5、讲讲ConcurrentHashMap

6、你们用的mysql隔离级别(可重复读)有什么特性(可重复读,解决幻读)如何解决幻读(MVCC和间隙锁)间隙锁如何两边范围

7、讲讲垃圾回收机制(7个垃圾回收器讲讲)

8、讲讲avl树和红黑树

9、b+树和b树区别(能够范围查询)b树也可以范围查询,例如中序遍历去查询(我觉得是这样遍历次数更多)

10、算法:逆序对

二面:

1、聊了一堆项目背景

2、ArrayBlockingQ和LinkedBlockingQ应用场景 ArrayBQ是怎么实现的(循环队列)SynchronousQueue应用场景(不清楚)

3、http1.0 1.1 2.0,如果http2.0一个连接多个请求中,一个请求阻塞会导致所有请求都阻塞吗会不会有请求阻塞把整个链路都阻塞的情况?

4、TCP怎么去取合适的拥塞值(慢启动,先2倍,再自增,最后减半)在客户端还是在服务端做拥塞?那么拥塞窗口在哪里控制(服务端)

5、AVL树和红黑树最大区别(旋转次数,更加适用于增删查改)有测过吗?(没有)

6、B树和B+树,为什么查询B树效率会慢(因为不平衡,而且无法做到范围查询)如果让它做范围查询会怎么样(感觉效率会变低)为什么不用红黑树?(多叉,本质原因就是树的高度会低!)

7、算法:一个数组,由两个有序序列形成例如 1 3 5 2 4 6

三面

1、讲讲jvm的内存管理

2、聊聊项目,了解腾讯项目的底层?

3、操作系统内存管理理解吗?

4、秒杀中的一个商品数量非常多怎么办

5、性格优缺点

6、设计一个数据结构,队列中出队列最多次数的字符(一个hash,一个队列,如果并发将其改造成并发的容器,如果分布式改造为分布式的容器)

7、实习干的活

百度 2020-7-25 (一面挂)

1、实习经历

2、mysql的Innodb的有什么特点(说了事务,整个update的过程,忘了说行锁)

3、mysql的int多少个字节(妈的,没想到啊,4个字节)例如int(10)和int(5)有什么区别

4、聊聊Synchronized(直接聊底层原理)锁膨胀的过程(无锁,偏向锁,轻量级锁,重量级锁)

5、1.8有什么新特性(这里没讲啥)内存结构有什么变化?(永久代移除)为什么要把永久代变为元空间

6、了解JVM优化吗?讲讲优化参数

7、maven的install和package有什么差别,realease版本和快照版本有什么不同

8、git有多少个工作空间?(三个)听说过reset吗

9、聚集索引和稀疏索引的差别,Innodb为什么一定要有主键?(因为标识一条数据是唯一的,而且它和MyISAM不一样,它的数据是存在一起的,只能通过主键去取得唯一)

10、如何进行索引的优化(explain)怎么看(看id,type,key,possible key extra)还有吗?(没了)

11、开放场景题,设计一个订单系统(负载,缓存,分库分表,消息队列)

12、给出具体方案,订单系统(1、直接用db 2、异步分布式事务扣库存 3、分布式锁 4、分段锁)

13、PrintGCDetail如何看(这东西里面有新生代垃圾回收后有多少内存,老年代回收后有多少内存)

-----------------------------以上是我的秋招历程------------------------------------

字节跳动 2020-5-12 (Offer)

1、rabbitmq的延时队列怎么实现(不会,https://www.cnblogs.com/shihaiming/p/11081948.html)

2、三次握手第三次包丢包会怎么样(服务端会重发,因为客户端不知道包丢失了,所以服务端会超时重发)第三个包丢失了,客户端继续发数据会怎么样(服务端会拒绝接收?感觉他会重发第二次握手的包)

3、select和poll的区别

4、算法题:矩阵最长递增路

5、如何设计关注和被关注(一开始设计直接拉关注人的信息,然后排序,显示,面试官觉得太慢,他的解法:每个人维持一条队列,将最新消息扔到队列里面,(实话说,我觉得这个方案复杂度不是更大吗?如果一个大v的粉丝100w,对就需要插入一百万次))

阿里CBU 2020-3-13 (不面)

一面

1、聊聊ReentranLock(讲讲底层代码实现)

2、synchronized是可重入的吗(讲讲monitor)

3、SpringMVC的请求流程(整个流程讲讲)

4、Redis在项目中如何使用(商品详情,库存都放到redis里面)如何解决超卖问题(用sql保证)

5、数据库的锁写的性能差如何解决(其实这里回答应该回答分布式锁,忘了,答了异步下单)写失败怎么办(用一个库存流水记录)

6、数据库的隔离级别(4个)mysql默认隔离级别(可重复读)会出现幻读吗?(mysql做了优化不会出现幻读,一个是用快照读有一定概率不会出现幻读,真正不会出现幻读的情况是next key,也就是间隙锁)快照读原理(undo日志和read view 保证,undo日志中有事务的id,它一直找到比当前活跃事务的id小的记录就是可以读的read view)

7、mysql主从复制(讲了讲原理)

8、k个链表排序(直接上堆吧)

蘑菇街 2020-3-12 (二面挂)

一面

1、synchronized和Lock的区别(说了本质实现,原理实现,公平非公平,可中断,可超时)

2、countdownlatch和carrybarrier的区别(一个是加一个是减,barrier可以重置,countdownlatch不可以)

3、HashMap和CocurrnetHashMap有什么区别(cas+synchronized的区别,整个put的区别MOVE节点的区别)

4、SpringIOC的整个流程(整个流程讲一遍)Listener是在哪里注入的?(在之前,但是这段代码没有仔细看)

5、红黑树和二分查找树的比较

6、秒杀的流程

7、为什么要使用红黑树(泊松分布,极端的情况链表会导致复杂度过大,红黑树复杂度是logn)

8、数据库索引(B+树和hash)B+树和红黑树有什么区别(B+树不能支持范围查询)

9、线程池(讲讲线程池弊端)

二面

1、sql是如何执行的

2、你怎么发现性能瓶颈

3、如何调优(这个话题围绕着整场面试)

4、full gc什么时候发生?(新生代gc后,system.gc(),老年代满了,元空间满了)

5、明确表示,他们想要一个有调优经验的人

腾讯CSIG 2020-3-11 (Offer)

一面

1、讲讲协程,和线程有什么区别

2、内核态用户态(安全)是只有安全这个原因吗?(是)

3、给了一个select\poll\epoll的场景(完全不会)

4、Linux原子锁(不会)

5、解释型语言和编译型语言有什么差别(这个没答出来解释型,相当于多了一个翻译的过程,所以性能会比较慢)

6、UDP不可靠在哪里?(没有ack,没有重传,无序,不能分片)设计一个可靠的UDP(前面的缺点都涉猎一遍)还有吗?(没有了)UDP在哪里分片?(应该在网络层,我回答数据链路层)

7、算法题将二分搜索树转换为双向链表

8、树的序列化有什么什么高效的方法?(字符串)还有没有更高效的方法(字符串压缩)还有没有?(没有了)

9、docker和k8s有了解吗?(没了解)

10、操作系统的通信(socket,消息,共享内存,管道)详细讲讲==(只有共享内存没说)==共享内存如果两个程序要读写应该怎么办?(加锁?)加锁无法解决(不会了)

二面

1、synchronized和Lock有什么区别(忘记说公平和非公平了,说说底层实现)

2、秒杀的流程

3、IO多路复用(select、poll、epoll)应用场景(不会,被吐槽,懂原理不会应用?)

4、如何保证不超卖(数据库sql保证)

5、讲讲udp(不可靠,快速)因为头部字段少更快吗?(因为没有ack机制)如何设计可靠的UDP

6、做题目大数相乘(妈的,少了一行导致跑不起来,而且忘记cpp中string不能直接相加)

7、序列化和反序列化(讲讲概念)为什么需要序列化(因为到另一个系统一定需要序列化,不可能用一个object去传,其实是因为系统可能不是同一个系统所以需要序列化)

8、讲讲堆排序(利用堆实现排序)

9、锁可重入吗?(又深入讲了一遍)

10、聊聊死锁(4个条件)死锁避免

三面

1、讲讲有哪方面研究成体系

2、还有哪方面要提高(分布式,一紧张忘了讲些什么了)

阿里淘系 2020-3-7 (口头Offer)

一面

1、了解数据结构吗,讲讲排序算法(快排,堆,归并,选择,冒泡,插入)讲讲快排(快排的优化,何时会退化到O(n^2))哪个排序是稳定的?(只有归并排序是稳定的)

2、从1亿的数字里面取前100小的(用一个最大堆去取)这一般1亿个int都是放在哪里(磁盘)为什么(int是4个字节,1亿是10^9,那么就有4G,一般都不会直接放入内存,容易爆满)

3、如何给1亿个数字排序?(将这一亿个数字拆成100*100w的文件,每个文件排好序,维持一个100的堆,然后排序)

4、讲讲Spring(IOC,AOP)然后讲讲IOC(整个流程beanFactory,Bean的创建过程)

5、讲讲秒杀怎么优化(redis,异步,将库存放在redis,两级缓存,整体流程)瓶颈在哪里(mysql)

6、讲到单例,Bean有多少种类型(单例,多例,Request,Session,Global Session)

7、讲讲HashMap(整个put的过程,忘了讲1.7的死循环问题)

8、有什么问题想问的?(问了分布式锁,一般系统用Redis,然后利用hash分发到某一台Redis做分布式锁,但这不会导致单点故障吗?)

9、数据库连接数配了多少(两三百吧)

二面

1、讲讲学习排名

2、讲讲学校获取的成就

3、讲讲ACM,遇到难题有什么(单调队列+线段树,动态规划)

4、讲讲动态规划

5、最有成就的项目(秒杀,只是去做,了解很多并发相关的知识)

6、redis的令牌和库存哪个判断更好?

7、如果商品几百万上亿,那该怎么设计

9、http的跨域问题(没了解过)

10、全文索引(没了解过)

11、讲讲CAP(一致性,可用性,分区容错性,一般只能保证两个)mysql属于哪个,redis属于哪个(CA和CP)可以同时满足CAP吗?(不能)

12、怎么对数据库优化(主要对sql进行分析)要对哪些字段进行建索引(经常查询和排序的字段建立索引)

13、http的整个流程(CDN加速,DNS解析,三次握手,四次挥手)

14、https和http的区别(443和80的区别,https数据是加密的)https加密的流程(CA证书加密)

15、什么是java线程安全问题?(本质就是可见性的问题,两个线程同时对共享资源修改)不安全的类有哪些?(ArrayList,LinkedList,HashMap都是不安全的)StringBuffer安全吗?(安全,因为它的所有方法都加了synchronized)了解线程池吗?(7个参数,线程池的工作流程,线程池的作用,线程池的弊端,阻塞队列)线程池的execute和submit有什么区别(execute主要用于runnable不需要返回值,submit最主要用于callable,能够有返回值,用一个Future接收,然后用一个get方法获取结果)

16、开发过程遇到什么问题(压测redis,redis宕机问题,定时任务莫名的bug)

17、异常怎么看?(看类型,看信息描述)

18、讲讲OOM(栈溢出,元空间溢出,堆溢出,gc limit,新建太多的线程,直接内存爆满,忘了讲讲OOM怎么去排查了)

19、guavaCache有什么不好的?(有时间限制,可以LRU,可能会存在脏读的问题,你放入的数据可能要容忍一定的脏读,但可以提升吞吐率,忘记说容量大小的问题了)

20、说一说和别的秒杀不同的点(在登陆的方面的不同,还有队列上的不同。。。没提几个)

21、写java的规范(写锁的时候多用juc,少些嵌套锁,专锁专用)

22、http的状态码(100、200、300、400、500都讲讲)

23、有没有了解什么技术,AI或者大数据之类的(主要了解架构方面的知识)

24、CPU100%怎么排查(先top然后ps或者jps找到进程号,ps -mp 找个线程号,找到线程将16进制转换为十进制,然后用jstack查找线程号)

25、看什么书?怎么了解技术(上官网,看Dubbo代码示例),有没有什么技术是你主动学习的?(Cloud和Dubbo也算主动学习吧)

26、有用过debug吗?(有用过,讲讲debug的细节,忘记讲远程debug了)

27、深拷贝和浅拷贝的区别

三面

1、mybatis源码读过吗?(没有)怎么解析sql到执行sql(从jdbc开始,先加载驱动,然后写sql,sql赋值,他有preparedStament,然后做一个orm的映射,也就是你要映射进去的对象,通过反射拿到Filed,statment有行有列,通过列去注入属性,有多少行,就有多少个对象)

2、CDN了解过吗?讲讲工作原理?(不了解)没了解过,你猜它是怎么实现的?(最短路径?答错)

3、看过Spring哪些源码(Spring IOC,AOP,多级缓存,SpringBoot的启动)

4、讲讲AOP源码(讲讲动态代理,讲讲AOP具体实现)怎么学习源码的?(一行行debug)

5、注解怎么注入进去的?(乱答一通,就是有一些注解的解析器,那些注解就是有一些元注解@Target,@Document,继承的一样东西,然后里面有一些value,通过value去判断,也去取值判断)

6、xml怎么解析的?

7、讲讲SpringBoot启动流程(@SpringBootApplication注解,然后注入一个ImportSelect,然后这个ImportSelector返回String[]然后反射注入一些自动配置类,这些类再spring.factory里面)为什么要使用全类名(说了ImportSelector只有全类名才能注入容器,其实这里应该答通过反射所以才要用全类名)

8、Redis数据类型(string,hash,list,set,sorted set,string底层是SDS,sorted set底层是跳表+hash)跳表是怎么样的数据结构(多级索引,对链表进行二分查找,复杂度logn,忘记说了支持范围查询,编写简单)

9、了解过其它的缓存中间件吗?(memcache)有什么区别?(主从,分片,集群,持久化,数据类型,忘记说性能)用过吗?(用过,底层实现是一些chunck,然后具体细节忘了)

10、说说快排和堆排序(快速排序的优化,堆排序的具体实现)

11、如果你的店铺系统有成千上万的QPS怎么办(高并发系统的处理方案,redis,集群,es,mysql分库分表,mq异步)

12、分库的中间件了解吗?(sharding jdbc 和 mycat )讲讲区别(jdbc就是用于客户端的,mycat就是单独部署的,忘记说这些公司对这些技术的调研,小型公司就直接用shrading jdbc,大型公司有自己的团队可以研发封装mycat,忘记说他们有支持天的分库和hash分库了)

13、HashMap说一下数据结构(看过源码,数组+链表+红黑树)HashMap线程安全吗?(不安全,举例子1.7的死循环问题,size,链表添加)

14、Concurrenthashmap1.7和1.8(1.7是分段锁,1.8是细粒度化的锁,讲put的过程一半被打断,忘记说synchronized)

15、redis怎么保证线程安全

16、了解过限流组件吗?(Hystrix,资源隔离,限流,熔断,降级都讲讲)

17、了解linux的io模型吗?(是指select,poll,epoll吗)它们区别是什么(连接数,连接数增加效率会怎么样,复制的差别)什么叫内核空间了解吗?(不了解)

18、SpringMVC的整体流程(DispatchServlet然后到各种分发)和Servlet有什么区别(Servlet就是一个映射就必须要一个Servlet去对应,跳转呢就是使用重定向或者转发,如果说地址多了会出现大量的Servlet)

19、302和301有什么区别(302临时重定向,301永久重定向)

20、TCP四次挥手和三次握手有什么差别(三次握手发送SYN,四次握手发送FIN,并且双方都要断开一次连接)

21、进程间通信有什么(管道,socket,共享内存,消息)

22、HTTP2.0的新特性(二进制分帧层,首部压缩减少开销,多路复用双向传输,服务端去推送资源)

23=注解的解析是在编译时还是在运行时?(乱答,运行时)

24、cookie和session有什么区别(服务端和客户端)客户端怎么发送cookie(cookie是放在报文头中的,发送的时候会带上cookie)

25、HTTP报文头有什么(Host,Reffer,User Agent,Content-Type,connection,Accept)HTTP报文格式(首行带上uri,请求协议版本号,请求方法,请求头,空行,请求体)

26、看过java编译出来的class文件吗?(看过,用javap -verbose 去查看字节码,讲了讲同步方法和同步代码块的一些区别)还用过其它工具吗?(有一些二进制文件的查看工具,没用过)

四面

1、秒杀的流程

2、最难过的一件事

3、了解阿里吗?

4、怎么样学技术

5、业务重要还是技术重要?

6、最难过的时候会放弃吗?

交叉面

1、拿token这一部分如果超高并发怎么解决?(做限流,hystrix)讲讲这个hystrix限流原理(忘了,其实这里应该做一个路由才是对的,感觉吧,应该对接口做限流?接口1它10秒钟最大允许访问100次,其实就是最简单的限流算法,一开始被问懵逼了)

2、有人用机器刷你怎么办?(做验证码)验证码怎么做?(发个http请求到后端,然后从后端回写回去)验证码和token的本质不是一样的吗?(是一样的。。。妈的,说不出话了)

3、有没有能够抗住1wQPS(没有)那么可不可以直接把库存放到jvm内存呢?(想了很久,没回答上,感觉应该可以吧?)

4、用token去做解耦,真的能做到解耦吗?(可以阿,然后就被打脸了)用秒杀商品访问正常商品不就绕开了风控了吗?(其实也是,必须要做一些强耦合)

5、atomic了解吗?(讲讲CAS,底层unsafe)使用场景(相当于乐观锁的使用场景,和synchronized比较一下,其实应该还有一个是使用在单个值修改的场景没说)

6、有测过一开始的瓶颈高并发吗?(没有,直接打脸)

7、没有机器的情况如何优化(对单台机器做优化)

天猫 2020-3-5 (不面)

一面

1、怎么秒杀

2、做了什么限流

3、讲讲多线程(Thread,Runnable)自己手动写线程吗?(线程池)

4、阻塞队列,讲讲常用的阻塞队列(take,put方法,讲讲LinkedBlockingQueue和ArrayBlockingQueue的差别)优先队列的了解过吗?(忘记说了,其实底层就是用堆。。。)

5、讲讲可重入锁(Synchronized,ReentranLock都是可重入锁,讲讲底层实现)

6、讲讲ReentranLock(讲讲AQS,非公平和公平的差别,讲讲state,队列,acquire方法和release方法,unsafe类)

7、责任链模式用过吗?(就是为了解耦,自己无法处理,将问题抛给下一个,在SpringMVC的拦截器中有所体现)

8、了解Hadoop和Hbase吗?(不了解)

9、红黑树跳表了解吗?(了解一点)

10、读过哪些源码?(JDK源码)

11、听过最短路径算法吗?(讲讲最短路径算法)

二面

1、读什么书

2、讲讲高并发场景

3、从书中学到什么

CVTE 2020-3-2 (二面挂)

一面

1、秒杀系统登陆的流程,cookie是怎么使用的(先写入redis,之前版本采用cookie,后面直接采用token的方式构建分布式session)

2、秒杀的流程(先发起请求,redis扣,入库,入库失败回滚redis增加,前端一直轮询订单)

3、讲讲线程池(线程池7个参数,阻塞队列,线程池的作用,线程池的流程,api提供的线程池的弊端)

4、full gc如何排查(jstat -pid 然后查gc多少多少,然后jmap去导出内存快照,jhat去查询快照文件或者MAT,仔细分析,是否有内存泄漏大对象一直驻留等问题)

5、mybatis如何防止sql注入(一定要使用#而不能使用$直接拼接,而且也有函数拼接)

6、mybatis的二级缓存了解过吗(没有)

7、为什么有了mybatis的缓存还需要redis做缓存(因为从一个效率上,mybatis还是需要从io上读取,而且内存是有限的肯定会有LRU不能存储大量的对象这个忘记说了,而且我们需要对这些缓存集中管理,在集群环境上基本上来说不可能做到准确地删除缓存,虽然可以通过队列的方式来删除,但是代价太大了,而且redis基于纯内存操作快速)

8、服务器有做集群吗?(做了tomcat集群)nginx如何做负载(轮询,因为机子都是相同配置,没必要使用权重的方式)

9、说说mysql的事务(ACID,隔离级别)

10、说说索引(索引就是一种数据结构,B+树,B树,Hash的区别)

11、给你一条sql如何做优化(explain,里面会有id,type,extra,还有index,possible index忘记说了==,最主要是防止出出现全表扫描的情况,要在where条件下的字段尽量添加索引走索引会快很多,尽量避免出现外部排序,使用临时表,在排序字段也要尽量添加索引)

12、定时任务是如何执行的(quartz去做定时任务,但是也可以通过spring 定时任务去做,也就是corn表达式,在0点的时候做这个先查再插)

13、项目有分模块吗?(有,店家系统和客户的系统,但没有做成服务)

14、为什么要将ssm演进为springboot?(因为现在不太流行ssm了,所以对它进行了改进,优化了xml,而且也是为了体验版本的迭代,而且springboot也是符合主流)

15、团队开发的流程你平时思考过吗?(先了解业务,然后可能需要画一下图,一般都是从数据库开始写起来,确认前端的参数窗口,最后才是动手写代码)

16、项目有没有做幂等(有,不能创建多张单)

17、数据库读写分离有用吗?(没用,所以也没讲)

二面

1、项目的难点

2、分布式事务的解决方案(5个)

3、为什么不用其它方案?(太难了无法实现)

4、讲讲项目中的数据库表

5、你数据表属于遵循什么范式(第一第二第三)

6、讲讲第一第二第三范式(原子,主键,消除传递依赖)

7、有没有什么违反范式的操作?(增加冗余)

8、写sql,找出top10的商品名称

9、你的知识都是自学吗?

10、如何学习一门技术(先用,然后了解底层)

淘系广告 2020-3-1 (不面)

一面

1、如何学习分布式知识(有需求就学)

2、讲讲CAP原则(三选二,保证AP)有没有强一致性的问题?(没有)

3、刚讲了保证高可用,如何保证高可用(集群,主从,redis和mysql都有)

4、如果是tomcat集群,如何感知他挂了(想了挺久,类似于注册中心一样的东西,其实感觉应该是zookeep注册服务,用keepalive来感知服务,老是回答不知道)

5、为什么要用分布式session(搭建了多台服务器)如果用tomcat的session复制,会出现什么问题?(出现没有登陆的情况?IO很频繁,当然不采用这个方案)还有没有其它问题?(想不出)

6、了解状态码302吗?如何实现登陆后跳到原本的页面?(用cookie?)量大了怎么办?(重定向)具体怎么做?(不会!其实可以在跳转登陆的页面记录当前所在页面的网址,然后登陆成功直接重定向到那个网址就可以了)

7、数据库悲观锁怎么实现(不会,一般使用select xxx for update)什么是乐观锁什么是悲观锁(乐观认为不会加锁,先查再更新,字段添加一个时间戳或者版本号,悲观一定加锁阻塞其它线程,乐观锁只是一个逻辑概念)刚说乐观锁加版本号,比较的过程是怎么比较的(回答了update xxx where version=version,感觉不对)

8、HashMap了解吗,讲一讲(1.7和1.8区别讲讲,整个put的流程)为什么要用红黑树?(查询效率)

9、equal和==有什么区别(equal默认实现就是=,一般equal用作比较属性,=只是用作比较引用地址)

10、hashcode(hashcode是native方法)不同会怎么样,相同会怎么样(1.6的规范规定了重写hashcode一定要重写equal,不能用hashcode判断是不是同一个对象)

11、HashMap的线程安全问题本质是什么(安全问题先是回答了1.7的扩容问题,然后回答了可见性问题,可见性问题本质就是CPU缓存,他懵了,后面回答了是因为共享变量)

12、ThreadLocal了解吗,他是线程安全的吗?(是线程安全的,因为在ThreadLocal里面定义了一个ThreadLocalMap,这个Map放在Thraed中,相当于这个ThreadLocal是线程独占的,不会有线程安全问题)

13、问个操作系统的问题,CPU怎么被打满?(用while循环)用多少个线程?(CPU+1?不会,回答可能要看是io密集,或者cpu密集,必须要用CPU核数才能跑满100%)io密集用多少线程,cpu密集用多少线程?(cpu密集用cput+1,io密集直接2*cpu,或者一条公式,公式忘了)io有哪些类型(一开始以为是bio,nio,aio,后面纠正是有哪些io,网络io,读写io)tomcat一般多少个线程?(400到800,回去查查)

14、多线程一定好吗?(当然不是会有上下文切换的开销,有时候还不如单线程)

15、什么关键字能解决可见性问题?(volatile,然后就不继续问了)

16、讲一讲登陆过程,输入密码,为什么要加盐?(前端做一次加盐md5,就算前端是直接显示在上面,但是数据库也做了加盐md5)session设置多长时间过期?(30分钟)

17、多级缓存是什么意思(guavacache放一个,redis放一个,如果可以就nginx放一个,guavacache是可以值)如果互联网公司都用这种方案会出现什么问题?(他其实想问的就是这个问题,会存在内存溢出的问题,我已经设置了100条容量LRU,并且设置了过期策略60s)redis你设置最大内存多少(可以调参数,我没调)

18、秒杀的流程是怎么样的?(先发起请求,redis扣库存,落库,回滚往redis加回去,前端js进行轮询)会不会多个商品的问题(不会,因为做了商品id+userid做唯一键)如果一周搞一个活动怎么办,因为会出现唯一键的问题(加一个活动id)

19、讲讲垃圾回收(垃圾肯定先进入新生代,然后gc之前先判断老年代内存够不够,不够再进行内存担保,如果都不满足先full gc,然后垃圾回收如果survivor区放不下,直接放入老年代,如果老年代放不下,再来一次full gc,如果还放不下直接oom)

20、讲讲full gc,怎么排查频繁full gc(新生代老年代元空间的垃圾回收,怎么排查,jstat,jmap导出快照,jhat查看快照,一般采用MAT)这些工具都用过吗?(玩过)

21、讲一讲索引(索引就是数据结构,B+,B,Hash)什么时候建立索引(需要多次查询的字段)

22、听说过覆盖索引吗?(直接从索引列上读取,不需要读磁盘,都是全表扫描,在explain里面是index而不是all)

23、redis扣减库存失败了怎么办?(用mq)如果一直失败怎么办?会不会出现少卖的情况?(会,所以我只能采用分布式事务的方式,感觉没有给他一个满意的答案,只能保证不超卖,所以我说了一种扫描订单定时任务的方式)

24、抽象类和接口,什么时候会用到抽象类(有一个公共的方法需要所有的类去使用,忘了,例如说AQS只是一个抽象类,然后把你的业务代码去自己重写方法,就是这么设计的)

25、maven如何解决依赖冲突?(排除一个,或者统一版本没答出来)

26、Spring拦截器用过吗?你项目中是怎么样实现的?(是用ArgumentResovler去实现的,这样能解耦更优雅,只要判断哪个接口需要User这个对象,那么就传入User这个对象就可以了,但是拦截器必须要指定页面,虽然也是解耦,但是你改动的代码变得更多了,当时脑子短路这些没怎么想到,拦截器也其实也是差不多的道理,其实只要用到User,都会有耦合,例如判断if(user=null?),但是我通过注入的方式,能够把从Redis获取User这段代码都放到一起,而拦截器是做不到的,一定需要到处获取)

27、http是有状态的吗?cookie和session有什么区别?

28、有多少个创建线程的方法?(两种,Thread,Runnable,本质都是通过Thread的start方法)start方法和run方法有什么区别(start底层是start0,他会传入run方法调用cpp的操作系统方法,而run方法只是一个普通方法)

字节跳动EA 2020-2-27 (Offer)

一面

1、算法题打家劫舍I

2、算法题打家劫舍II

3、Redis单线程为什么那么快(内存,IO多路复用,单线程模型,没有线程上下文切换的开销,排队机制,类比队列泄洪)

4、缓存击穿如何解决(我用限流的方式,面试官问熔断了解吗?前几天看的,但忘记了,熔断其实就是拒绝服务,过段时间再查看服务是否恢复)

5、Spring事务的实现原理(什么意思,没听懂)

6、Redis基本数据类型(string,hash,sorted set, set ,list)项目用哪个(string)

7、Mysql用什么引擎(Innodb,MyISAM,说区别)

8、索引有什么(介绍区别,B+树,B树,Hash)

9、B+树和AVL树有什么区别(绝对平衡,B+树旋转次数少)本质的区别(没回答出来,面试官说的,B+树比较低一点,然后范围查询快,AVL树只有两个节点,高度会高一点)

10、AOP原理(JDK,CGlib,介绍编译时,类加载时,运行时的动态代理,Spring属于运行时动态代理,介绍AOP整个运行的流程)

11、=行锁到底加在什么地方(应该是索引????我回答了在聚集索引和非聚集索引上)

12、有学过其它语言吗?例如说Go?(学过Python)

13、如果让你转Go语言你怎么看(语言都是工具,没所谓)

14、听说了IO模型吗(BIO,NIO,AIO区别)

15、HashMap了解吗(把1.7和1.8的区别全部答出来,成环问题,红黑树)

16、G1垃圾回收器(不分代,对比cms,没有内存碎片,混合回收默认分8次,可以设定预期的垃圾回收时间,忘记讲STW,也忘记讲其它垃圾回收器在大内存机器垃圾回收时带来的时长过高)

17、Redis分布式锁有用过吗?(setnx,如果设置成功就返回true,如果不成功返回nil,这个分布式锁容易导致死锁,所以需要设置超时时间expire)

18、Redis持久化有什么(讲RDB,AOF,然后4.0版本之后是两个都用)

提问环节:

1、字节跳动最看重什么?(都看重,看重自己做的项目,也看重跟老师做的项目)

2、字节跳动一般会用开源框架吗?(一般不用,因为开源框架有商业的风险)

3、实习生要做的工作是怎么样的?(一般任务比较细,字节跳动技术氛围很不错)

二面

1、树的之字打印

2、输入baidu.com整个流程(dns,tcp三次握手,渲染,tcp四次挥手)

3、秒杀的三个难点

4、操作系统进程的通信(管道,信号量,消息,socket,文件,共享内存)

5、cdn简单介绍(不了解)

6、jvm管理(pc,虚拟机栈,本地方法栈,方法区,堆,垃圾回收过程,然后被打断)

7、微服务了解吗?(学过一点)

8、学过什么框架(Spring)简单介绍aop、ioc(简单介绍)

9、实习时长?(暑假两到三个月吧)大四有没有课?(没有)

10、OSI模型(七层,四层,五层)

蚂蚁金服 2020-2-12 (不面)

一面 2020-2-12

1、说一下数据库索引(索引的定义,B+,B树,Hash)

2、继承有什么作用,有什么业务场景(多态)

3、为什么要使用并发,单线程和多线程谁快(IO阻塞,多CPU电脑,一个线程阻塞了不能让CPU没事干--没答出来)

4、线程和进程有什么区别(进程是CPU的资源分配的单位,线程是CPU调度的单位)

5、内核态和用户态有什么区别,为什么用户态到内核态开销大(中断?)

6、线程池的几个参数,线程池的工作原理

7、堆排序怎么实现的(大顶堆)

8、TCP三次握手

9、https的工作流程(整个流程讲一遍被打断)

10、redis穿透,他问击穿也就是穿透(限流+返回空值)

11、用过什么数据结构?HashMap有什么要注意的点,为什么HashMap那么高效?(因为数据结构是数据+链表+红黑树,基本上节点很快就能查出来,注意的点,不能并发,迭代的时候修改值会导致CurrnentModifyException,不能反复扩容很消耗性能--没答出来,引导后回答出来了)

12、进程如何进行通信?(管道---没了解过)

13、数据库的事务隔离级别,mysql默认隔离级别,可重复读和已提交读有什么区别

二面 2020-2-20

1、有没有对项目做优化(打算做分布式事务,利用RocketMQ,将异步下单并且扣减库存逻辑,改为同步下单异步扣减库存,那么这样就保证下单成功并且扣减库存,如果不用分布式事务就会出现这样各种问题,面试官说项目并没有做成服务,对分布式事务的理解可能有些偏差(实际上我是想往这方面去靠,但忘了))

2、为什么要用分布式session(因为做了tomcat集群,必须要用分布式session)

3、了解SpringBoot和Spring的源码吗,如果一个A父类,B是A的子类,A懒加载,B直接加载,IOC内是A和B实例状态(没读懂题目,应该错了)

4、哪门科目最好(C语言,想抽自己两巴掌,就应该回答数据库)C语言多级指针了解吗(二级指针)C语言的二级指针为什么要这么用(指向指针的指针。。。然后就不会了)

5、说有一点挺有趣的,超卖利用数据库sql去保证是一下子想到还是找到错误在去改的?

6、C语言和Java的差别(虚拟机的差别,垃圾回收的差别,C语言在不同机器上的差别,Java因为有不同厂商实现的虚拟机所以在不同环境跑出来也是一样的)

7、既然说有垃圾回收机制,那么Java就不会有内存泄漏问题吗?

8、Spring源码使用的设计模式(单例模式很多对象都是单例的,工厂模式BeanFactory,责任链模式SpringMVC拦截器调用如果不能处理就抛到下一个拦截器,模板模式RedisTemplate,JDBCTemplate,适配器模式(SpringMVC中的HandlerAdapter),策略模式(没答),代理模式(没答,JDK动态代理和CGLib),观察者模式(没答,很多Listener))

9、看JVM虚拟机看什么书,学到什么东西(周志明的《JVM高级特性》,学到什么JVM的类加载机制,双亲委派,JVM内存模型,其实很想说一波垃圾回收的,忘了)然后打断问A a=new A()分别放到虚拟机的哪里(引用放在虚拟机,实例放到堆中,类信息放在元空间中)

10、有没有什么爱好(羽毛球)

11、除了Java有没有研究别的东西,语言和其它方向都行(拿python爬虫,为了解脱双手,写爬虫爬图,爬小说,自动签到)遇到什么困难(反爬,遇到加密问题,然后已经抓出js代码,但是代码太长没信心重写,这里其实还可以吹一波自己学Scrapy框架但没自己瞎写的好用,像什么线程池加快爬虫一堆操作当时没想到,也可以说说自己爬虫遇到429请求太多限制请求,遇到下载不了陷入假死状态,利用日志找出已找到和成功的日志找出失败的图片。。。)

12、学习成绩怎么样

13、广州那么远,实习会有问题吗?

14、有一点就是下单如果下单失败,就会把redis存库减掉,但不会超卖出现少卖的情况这个怎么解决?(其实我已经想到这个问题了,当时脑抽没有把自己那套方案分布式事务的方案讲出来,那套方案就是用于解决这个问题,还想要添加一个检测服务查看订单是否失效回滚redis内容,其实这个代码已经改过了,但没有上传到github上,得到教训,面试官真的会认真读你代码)

15、Connection、HashMap源码有读过吗,无参构造的HashMap里面会有什么(没听到Connection是啥,面试官解释了一遍也不知道,我真菜。。。HashMap里面的table一开始是什么都没有的,是一种懒加载的机制,只有在add的时候才会初始化,然后hash()找到桶,然后拉链法,然后变成红黑树)

16、现在打算做新的项目还是继续优化秒杀项目?(继续优化,也去读更多的源码,学更多的虚拟机,学更多的优化技术,是没有说出自己分布式事务的方案好在哪里,应该说自己想要做成服务架构)

17、是否遇到内存泄漏问题?(没遇到过)

CVTE 2020-1-13 (hr面挂)

一面:

数据库秒杀表的结构是如何设计的,为什么要这么设计(没答好)

Redis插入订单失败会怎么样?(缓存和数据库不一致会怎么样)

HashMap如何实现的,之前的版本用什么实现的,HashMap中为什么要使用红黑树,与平衡二叉树相比,红黑树有什么比较好的优点(没答出来)

B+树和B树的区别,为什么要使用B+树,还有什么索引(hash,BitMap),叶子节点上存的是什么数据(没答出来,只答了聚集索引和稀疏索引,好像就是正确答案?)?

Http和Https的区别,为什么在Https加密的时候会有什么公钥,密钥,证书给的是公钥还是密钥(答了https的过程,为什么会有密钥公钥证书没答出来)

nature join 和 left join 有什么区别

UDP和TCP的区别

MQ技术选型

缓存一致性问题,先插数据库还是先插缓存

如果缓存没有写入成功那么怎么办(可以利用MQ的重回队列投递机制保证,如果还是不成功,那么就要排查是哪里出了问题)

Redis和memcache技术选型

23种gof设计模式(单例,适配器,工厂,观察者没了....)

策略模式的应用(场景应用,有很多微信,支付宝,增加更多的接口,怎么使用设计模式去设计,没答出来)

跳台阶问题,一次可以走1,2,3步,n个台阶有多少个走法

二面:

SpringBoot1.5和2.0有什么区别(没答出来)

分布式session有多少种方案(redis或者tomcat的session复制,脑海记得还有nginx没答出来)

有没有一种策略可以保证秒杀直接返回是否秒杀成功

分布式session如何实现的,讲一下逻辑

Redis为什么可以减成负数(这里不一定说有多少个库存就一定有多少个请求访问,它是预减,库存为1,请求数达到100个,后面答出来了)

如何解决超卖问题,可以利用数据库来保证超卖问题

前端如何知道是否秒杀成功?(mq将队列异步化,前端轮询的机制)

数据量大会不会在队列堆积(个人感觉会)

HashMap不安全,项目为什么可以用一个boolean值去判断(不需要保证hashmap是安全的,因为肯定会有请求进来的)

Redis的数据结构

从一张表中查询出每一科最高分数的学生(不止一个),临时表查出每一科的最高分和科目id(没答出来,面试官诱导我出错,我答分sql)

#面经##校招##阿里巴巴##百度##网易##字节跳动##快手#
全部评论
楼主你好,请问你是实习、校招还是社招?
点赞 回复
分享
发布于 2020-09-27 14:01
也就三家???
点赞 回复
分享
发布于 2020-09-27 14:05
春招专场
校招火热招聘中
官网直投
你这个双非真的牛逼
点赞 回复
分享
发布于 2020-09-27 19:37
是中科院大学的巨佬么?
点赞 回复
分享
发布于 2020-09-27 20:10
大佬的面筋量很足,看了一天多了
点赞 回复
分享
发布于 2020-10-11 21:14
Clustering Index 和 Dense Index 你咋都叫成聚集了,还是我看错了
点赞 回复
分享
发布于 2020-11-29 19:31
双非能有这么多笔试机会很好了,很多双非笔试都不会发
点赞 回复
分享
发布于 2021-06-07 11:53
给我看傻了 楼主真乃巨佬 我也搞了个秒杀项目,看了你的面经感觉随便一面都顶不住
点赞 回复
分享
发布于 2021-06-19 18:03
如果有学弟学妹们想投字节广告 欢迎内推 可以直达我们部门哦
点赞 回复
分享
发布于 2021-07-25 09:03

相关推荐

23 170 评论
分享
牛客网
牛客企业服务