暑期实习的总结帖(最终还是去了字节
一、投递时间线
-
1.16号投递阿里云计算平台
-
2.15号投递钉钉文档
-
2.16号钉钉一面(过)
-
2.17号钉钉二面(过)
-
2.23淘系一面提前批部门(过)
-
3.8号一面tx csig
-
3.10号二面tx csig,莫名挂了
原来以为钉钉稳了,就摆了两周一直到3.20还没结果,我开始慌了,又开始了投递 -
牛客找的淘系另一个部门基础链路提前批,没进系统,3.6一面,3.18二面,3.24三面,3.28四面,一直等hr,内推人说等不到了,节后直接全线锁hc了
-
期间还面了蚂蚁,3.25蚂蚁一面挂,这个挂的我没话说,确实答得不好
-
3.28日美团广告一面,等了一周莫名其妙挂了,没hc了,太晚了
-
此时四月了,还是0offer,开始投递字节
-
3.31字节一面,4.2字节二面,4.6号三面,4.12号offer
二、面经(主要记了重要内容,有一些没有记录)
1.云计算一面(过)
-
订单池的权限管理怎么做(不同的角色看到不同的订单)
-
分布式缓存的定义(内存消耗,数据不一致),为什么用分布式缓存
-
Redis用过没有,哪些用途
-
主要都是项目
-
两道题:一道是适配器设计模式,一道是责任链设计模式,出的很精巧
2.云计算二面(挂,因为实习目的不明确,求知欲望不强?离谱)
大部分围绕项目展开,很少八股
- 实习项目:自己介绍10分钟
- zk选主过程,分布式之间怎么调度
- Http restful调度和RPC的区别
- 说到RPC,RPC常见的组件有哪些:通信协议,网络通信,负载均衡(一致性hash),连接池和注册中心
- 服务端你Netty的Worker和Boss是怎么分配的?
- 注册中心挂掉怎么办?(通常注册中心不是单点的,如果是单点的,检测机制,客户端先本地缓存请求)
- 一道题:重排链表
3.钉钉一面(过)
- 自我介绍
- 大学学过什么课程?操作系统,编译原理,计网,离散
- 你说说你对IO的理解?刚刚你说到CPU执行快?寄存器,电信号驱动,那磁盘为什么慢?电容,充放电慢,那怎么解决CPU和磁盘的速度差异?多级缓存,还有一些缓存行的问题,应用之类的
- ThreadLocal的应用场景,然后他说这是单线程的,如果进程之间想要变量共享怎么办?Socket+共享内存
- 开始MySQL,引导性提问,MySQL为什么能快速检索?我说连接器,分析器,优化器,执行器,最重要的是索引
- 那一条记录在磁盘文件中是怎么存储的?我说页单位。我是指在磁盘怎么存的?答是不是序列化操作,我不太清楚。现在如果是你,你怎么设置?我说生成进制文件存储,那如果两行记录在同一行怎么拆开?分隔符,那万一包含分隔符呢?定长,定长是不是很浪费,我说int值存数据长度,根据长度截
- 一个对象的结构了解么?八股,最重要是数据长度和数据行,他说对吧很多东西可以联系起来。怎么获取对象的大小和地址?toByteArray.length和hashcode,反射我看你写的了解,那你觉得invoke是怎么暴力修改字段的,联系一下刚刚的问题?我想了很久说先获取内存基地址,再根据字段长度得到物理地址,进行替换。应该是他想要的答案
- 反问,协同文档开发
4.钉钉二面(过)
1.自我介绍
2.说项目:公司项目和正在取
3.idea这种继承编辑器为啥比普通文本编辑器打开更快
4.一瓶盐,一瓶糖,舀一勺盐放到糖里,混合均匀后再舀一勺放回盐里,问盐里的糖和糖里的盐那个多?(极限思想,假设一勺就是一整瓶,混匀再放回,所以是相同)
5.平常团队怎么沟通?遇到最难相处的人是谁?
6.人生阶段压力最大的时候?
7.反问
5.淘系一面(过)
- 公司项目:5-8min
- rpc项目说了5-8min开始问
- 你觉得Http和rpc的区别
- zk选主过程
- 同步异步,阻塞和非阻塞的区别
- 说说你对hashMap和conHashMap的理解,我说太宽泛了,他说结合数据结构和putVal流程说一下
- 红黑树的特点,为什么用红黑树?说说你还知道其他哪些树结构
- 进程线程区别
- 进程通信方式
- 创建线程的几种方式
- sync和reenLock的区别
- tcp三次握手流程,tcp和udp的区别
- 事务的隔离级别,分别解决什么问题
- 反问
6.基础链路一面(过)
- 大部分时间是实习项目和自己的项目
- 常见类库里的设计模式(IO流中的设计模式)
- 有向图的环检测算法
- 反射中Method和Field的实现原理
- Field就是通过hashcode和对象头中的数据偏移找到变量存贮地址,修改字节码文件
- Method
- 匿名内部类和lamada表达式的区别
- 排序算法介绍一下
- 常见的线程池和使用场景
- 拥塞算法粘包拆包
7.基础链路二面(过)
-
项目相关
-
图的有环检测
-
拓扑排序
-
1.1、无向图
使用拓扑排序可以判断一个无向图中是否存在环,具体步骤如下:
- 求出图中所有结点的度。
- 将所有度 <= 1 的结点入队。(独立结点的度为 0)
- 当队列不空时,弹出队首元素,把与队首元素相邻节点的度减一。如果相邻节点的度变为一,则将相邻结点入队。
- 循环结束时判断已经访问的结点数是否等于 n。等于 n 说明全部结点都被访问过,无环;反之,则有环。
-
1.2、有向图
使用拓扑排序判断无向图和有向图中是否存在环的区别在于:
- 在判断无向图中是否存在环时,是将所有度 <= 1 的结点入队;
- 在判断有向图中是否存在环时,是将所有入度 = 0 的结点入队。
-
-
DFS
- 使用一个bool数组来表示改节点是否访问过,如果在遍历的过程中,发现某个结点有一条边指向已访问过的结点,并且这个已访问过的结点不是上一步访问的结点,则表示存在环。
-
记录存在环的节点,向sre同学确认部署文件
-
-
负载均衡算***询,随机,hash,一致性hash)
-
Redis集群(哨兵故障转移过程),主从复制过程如果出现数据不一致怎么办
- 看业务是否能忽略
- 分布式锁,RedLock
-
ConcurrentHashMap相关,经典八股
-
关于一个订单下单到支付的流程,如果出现取消支付或者支付超时怎么办?
- 项目中:首先有一个后台线程一直check isAvaiavle字段为0的记录,比对一下下单时间,如果超过指定时长,就删除记录,如果在时间内,再去调用支付接口去check一下是否因为网络原因等是否支付成功,如果支付成功,把isAvaivale字段设为1
8.腾讯csig一面(过)
- 项目中:首先有一个后台线程一直check isAvaiavle字段为0的记录,比对一下下单时间,如果超过指定时长,就删除记录,如果在时间内,再去调用支付接口去check一下是否因为网络原因等是否支付成功,如果支付成功,把isAvaivale字段设为1
-
介绍实习项目
-
海量数据找到重复项(bitmap)布隆过滤器
-
流式数据如何排序(堆排),主要是构建堆,当添加数据时,调整堆
- 堆排思路:比如构建大顶堆,从下到上,从右向左从第一个非叶子节点开始调整,以当前为根节点的子树调整为大顶堆,直到整个树为大顶堆
- 然后构成后堆顶就是最大值,交换堆顶和堆尾的值重新调整树结构
-
synchronized相关,问了几个很灵活的场景
-
异步底层是怎么实现的(CompleteFuture相关)
- 继承FutureTask类,异步由FutureTask控制,配合线程池使用,核心有几个部门
- 使用适配器模式将传入的runnable和callable包装成FutureTask类
- 以及几种执行状态,是volatile类型变量,在多线程访问下及时同步最新值,比如NEW新建,COMPLETING执行中,NORMAL完成,EXCEPTIONAL报错,CANCELLED取消,INTERRUPTED中断等等
- 然后就是run方法,本质上是调用了callable.call()方法,核心在于如何获取异步返回结果
- FutureTask类中有一个WaitNode构成的链表结构,由等待线程构成,所有调用get()的线程,在没有返回结果时,都会存储在这个链表结构上
- 然后在finishCompletion方法中,进行轮询结果,当callable有返回值了,会for循环遍历等待线程的链表,然后unpark唤醒通知线程
- 一些细节比如链表结构和状态都是volatile修饰,CAS操作修改,保证了线程安全
- 继承FutureTask类,异步由FutureTask控制,配合线程池使用,核心有几个部门
-
操作系统中栈和堆中存放的是什么?
9.蚂蚁一面(挂)
-
自我介绍(奖学金???成绩咋样)
-
项目介绍
-
分布式事务(2PC)
-
海量数据找中位数
-
基于二进制位将10G数据映射到不同的文件中,利用快速排序的分割思想寻找中位数。
依次读入一部分数据到内存,根据数据的最高位将数据映射到不同的文件中,然后判断中位数可能存在于于哪个文件然后再继续对哪个文件进行分割,知道能够将数据读入内存直接排序
该方法相对于外排序和堆排序可以减少磁盘IO的次数,每次可以丢弃一部分数据不再进行读取和写入操作通过快排的partition思想,时间复杂度为:o(nlogn) ≈ 10G
-
-
Mysql索引相关
10.美团一面(挂,感觉都答出来了,算法也a了,还是挂了)
- 自我介绍以及实习项目(10min)
- JVM运行时数据区的划分
- 方法执行在栈中的表现,在编译期间可以确定栈帧的大小么?
- Mysql有没有优化过sql语句,是实操过还是理论?
- 常见的索引,哈希,b,b+,刚想开背,就被打断施法了
- RPC中的注册中心了解么?ZK和Nacos实现细节有什么区别?
- 分布式CAP,如何权衡,zk是CA还是CP,zk是CP
- LRU,写完后要求改成线程安全的
- 因为刚刚用了sync,又问了一些实现原理,以及和Reent的区别
- 反问:广告部门,难点在于和算法部门协调,工程算法
11.基础链路转部门三面(过)
- 公司项目
- 怎么解析xml文件的
- 海量数据求top10
12.基础链路四面(挂)
- 实习项目
- 如何设计一个朋友圈,从数据库设计到技术选型保证高可用等等(Feed流)
13.字节一面(过)
- 秒杀项目相关:Redission用来做什么?Redis集群怎么保证数据一致?分布式令牌桶怎么搞?令牌桶的具体实现细节?秒杀流程
- Sync和Reet怎么实现可重入的
- AQS用来干嘛,怎么唤醒阻塞线程的
- monitorenter和monitorexit是JVM层面的指令
- 无序数组,找到和为k的倍数的最短子数组
14.字节二面(过)
-
RPC项目的调用流程
-
Java读取磁盘数据的整个流程
-
对RPC项目有没有做过压测
-
RPC中用到的一些设计模式
-
算法题:重排链表
15.字节三面(过)
- 场景题:如何保证视频流文件稳定传输,大文件传输如何优化(切片,集群分片传输等等把)
- 知道QUIC协议么?
- HTTPS加密流程,从CA到加解密
- 算法:一条单向链表奇数位递增,偶数位递减,重拍使链表递增
还有一些没有记录
三、心路历程总结
整个春招真的是大起大落,从穿棉袄面到穿短袖,笔试面试我都快数不过来了
开始的时候因为阿里抢跑,进了钉钉的流程,以为稳了,被养鱼后,开始慌乱投递,此时已经三月下旬了
阿里整整面了10面,两个部门挂在hr面,一个一面挂的没话说
直到四月还是0offer,每天焦虑到睡不着觉,每天6点就醒了,心里装着事睡不着,(bushi
总之-"阿里,真有你的,养鱼,拖延,撕意向,再见!!!!"
引流:字节 阿里 百度 腾讯
#面试复盘##春招##面经##Java#