[暑期实习面经] 技术面经记录
1. 文远知行-后端开发一面(1h) 4月14日 (1天后约二面)
1.自我介绍
2.拷打项目和实习 主要做了什么 基本都是自己在说 最后问了一下高并发情况下是否考虑到的问题;
3.八股:
数据库的一级索引和二级索引;
一级索引和二级索引用的什么数据结构;
有什么特点是利于范围查找的;
count(*) count(1) count(id) 查找效率有什么区别;
说说TCP的三次握手和四次挥手;
http和https的区别;
java的HashMap的底层原理;
解决哈希冲突还有什么方法;
如果将底层的数组改成LinkedList有什么问题;
线程和进程的区别;
4.手撕:
LC-240 搜索二维矩阵
没有题目本体,口述的题目,自己写测试数据、输入输出,让先说一下思路;
一开始回答前缀和,后来发现不对劲,然后说是用z型查找,还没说清楚做法,唐完了,然后让说说时间复杂度。后来问还有没有其他方法,说了按行或列进行二分查找,但时间复杂度不行,问有没有log(m)+log(n)的方法,提示按照矩阵分块二分递归。最后让写了z型查找的方法。
2. 腾讯-应用宝客户端一面(1h) 4月16日 (秒挂)
1.面试官介绍+自我介绍
2.拷打实习
看到我实习里有关openGL和vulkan相关经历,想询问openGL的知识点,直接红温,说自己没有系统的学过,跟着项目边学边做的,然后问了自己的技术栈,意思是想招有关图形模拟器客户端相关的,毕竟没什么人做过这个;
3.项目相关八股:
jwt是做什么的,具体怎么实现的;
token加密实现了解吗;
缓存穿透;
布隆过滤器是做什么的,底层实现;
布隆过滤器的信息损失体现在哪一步;
项目难点是什么,怎么做的;
java的垃圾回收;
StringBuffer和StringBuilder区别;
双亲委托机制;
java的四种引用;
4.手撕:
大数相加
单例模式两种写法
5.闲聊
问了一下自己常用语言,职业规划
3.淘天-全栈开发一面(电话30min) 4月17日
1.自我介绍
2.拷打项目
介绍项目的架构,涉及到的技术栈,问了我算法是怎么实现的,简单看了一下上线的内容;
3.项目相关八股:
针对mysql做了什么优化;
java怎么调用的后端算法;
说说对springboot的理解;
springboot的自动装配原理;
springboot的启动入口类讲讲;
autowire注解的原理;
数据库和缓存的一致性;
4.反问
介绍组内业务,主要技术栈
4.美团-客户端开发一面(1h) 4月18日
1.自我介绍
2.拷打项目
介绍项目的内容,问如果一个用户的搜索有多个请求该怎么办,多设备同时登录的话该怎么解决;
3.八股盛宴:
==和equals的区别;
操作字符串有哪些类;
java的泛型机制;
抽象类是否必须有抽象方法;
内存泄漏有哪些场景;
list、set、map的区别;
HashMap和HashTable的区别;
有什么方法可以保证线程安全;
HashMap怎么扩容;
队列的pop和remove的区别是什么;
创建线程的方式有哪些;
线程的submit和execute的区别;
synchronized修饰静态方法和实例方法的区别;
http与https的区别;
JVM的组成结构;
四大引用;
如何判断对象是否被回收;
4.手撕
大数相加。核心代码模式,不需要主动翻转字符串;
5.反问
核心业务,技术栈。
5.文远知行-后端开发二面(1h) 4月21日(1天后约三面)
1.面试官自我介绍+自我介绍
2.深挖项目
热门查询为什么要用Zset;
Zset有哪些操作;
Redis怎么保证7天热点数据的查询,其中二维的数据该怎么存;
声明线程池需要哪些参数;
核心线程池和最大线程数按照什么规则去设置;
最大线程池的默认值是什么;
多线程下你是怎么保证线程安全的;
举个例子怎么去实现乐观锁;
如果按照版本号查到的和之前的版本号不一样该怎么办;
重试的效率也不高,怎么提高乐观锁的效率;
并发激烈的话怎么优化这种机制;
springboot的bean作用域有哪些;
数据库的1+N问题遇到过吗 怎么解决的;
用过RPC框架吗;
SpringCloud中的通信协议和普通的http有什么区别吗;
3.手撕
口述随机链表的复制,ACM模式。
4.反问
招人的要求,技术栈。
6.荣耀-java开发一面(30min) 4月23日
1.自我介绍
2.浅问项目和实习
介绍华为实习的具体工作;
介绍项目里的关键技术;
项目里的需求是怎么提的,架构怎么搭的;
看你打过比赛,介绍一下互联网+比赛的内容;
3.八股
ArrayList和LinkedList区别;
常用的线程池有哪些;
项目中的线程池是怎么创建的,有哪些关键参数;
重写和重载的区别;
HashMap的底层实现;
4.Sql题
口述一个查询部门最大薪资的统计,单表查询;
5.反问
招人的标准。
ps:面试官是校友,人还怪好嘞
7.淘天-全栈开发二面(电话50min) 4月23日
1.自我介绍
2.拷打实习和项目
介绍华为实习的具体工作,具体内容是什么,目的是什么;
你觉得开发安卓和鸿蒙有什么区别;
自己在这个过程遇到的最大问题是什么;
项目的架构是什么,都是你一人开发的吗;
你认为最大的难点是什么;
你自己的分布式是怎么做的,为什么这样做;
3.项目拓展场景&&八股
如果后续部署分布式集群,你会采取什么样的方案;
数据库的集群该怎么做路由和负载均衡(回答了客户端的负载均衡,服务端考虑一致性哈希);
一致性哈希在节点数比较少的时候会有什么问题;
该怎么解决上述问题;
JWT的具体实现和过程;
为什么要采用JWT,还有没有其他登录认证方案,JWT好在哪里;
JWT难道不会存在跨域的问题吗(开始唐式表演);
JWT的token没有在客户端持久化吗;
JWT跨域应该有域名的约束吧,a.com和b.com肯定是跨域的,那你该怎么解决这个问题;
用url传token作为参数的话是可以的,但是安全性怎么解决;
你自己的缓存一致性怎么解决的;
为什么要先更新数据库,再删缓存,能不能直接更新缓存而不是删除;
数据库里更新完了,缓存还没失效,不是也会读出旧值吗;
刚刚说的可能性可能发生比较小,有没有其他的解决方案(答了消息队列,分布式锁,延迟双删);
为什么要用延迟双删,和之前的有什么区别,或者说之前先更新数据库,再删缓存极端情况下,延迟双删可以解决怎样的问题,或者有什么样的缺陷;
mySQL的索引底层实现是什么;
为什么要用B+树;
为什么B+树层高不高;
比B树好在什么地方;
4.闲聊
家是哪里的;
目前有几个offer;
能接受写客户端吗;
后续职业规划是什么;
5.反问
招人的标准。
8.文远知行-后端开发三面(50min) 4月24日
ps: 下午两点面试的,面试官说在家不方便开摄像头,声音有气无力的,态度极差。先介绍了一下目前的业务,是做智能驾驶仿真的,不涉及算法,更谈不上java后端,还问能不能接受来广州,项目和实习一点不关心,也不懂java,感觉随便找几个问题来问了一下,每次回答完都像是刚起床才反应过来,心不在焉的
1.自我介绍
2.纯八股吟唱
Redis怎么做分布式锁,现场写一个;
怎么去释放锁;
写个单例模式;
看你是写java的,java中的继承类和继承接口什么区别;
怎么分析SQL查询效率;
Linux了解吗,其中的PROC文件夹干什么用的;
硬链接和软连接是什么区别,使用场景上有什么区别;
Inode是什么,存放什么内容;
常用端口有哪些,怎么查端口;
动态链接和静态链接;
了解什么是容器吗;
镜像和容器什么区别;
怎么去镜像或容器里保存数据;
什么是长链接和短链接;
3.手撕
口述一个链表的k位轮转,数组轮转的链表版本;
问他要写ACM模式还是核心代码模式,面试官说你就在下面写,我不管你什么模式,写出来就行。最后控制台没有输出结果,直接打印一个字符串也没有,他说他不懂java,让我看看我主函数是不是写错了难绷,在本地编译器里是能跑的,他说那算了你说说思路吧;
4.反问
转正率怎么样,他说不知道,主要看HR还有个人表现。
9.滴滴-后端开发-一二面(一面50min+二面1h)4月24日
ps:滴滴一面完10min立马开启二面,主打一个高效率,背景办公室全是拷打八股的声音。两场问题比较集中,故放在一起说了:
1.自我介绍
2.深挖项目
两个面试官基本上都对我在华为的实习不感兴趣,都对自己的项目做了详细的了解,先对每个亮点问了具体怎么实现的,为什么要这样实现,需求背景是什么,基于一些项目内容做了拓展,然后噩梦就开始了:
如何避免非法查询的,对其进行限流可以控制吗;
为什么要用RabbitMQ,负载均衡和SSH反向隧道是怎么做的;
你刚刚提到了负载均衡,那个k8s了解吗;
k8s的弹性伸缩是什么,Node、容器等基础组件了解吗;
CDN是什么,为什么用,怎么评价CDN的效果和性能;
介绍一下什么是缓存穿透、击穿和雪崩;
布隆过滤器的底层实现,自己是怎么做的;
缓存永不过期的话,数据一致性怎么保证;
假如我不想用代码的层面去同步缓存和数据库,有什么解决方案;
A表修改了一个字段,B表该怎么同步这个字段的内容;
如果消息丢失了该怎么办;
热点Key丢失是怎么解决的,预热是怎么做的,限流可以解决热点key的问题吗;
MySQL全文模糊查找该怎么做;
全文索引了解吗,具体是怎么做的,适合什么字段;
缓存一致性问题,为什么选择删缓存而不是更新缓存;
更新缓存为什么不是一个原子操作,怎么避免不读到脏值;
为什么不把全部的数据加载到Redis里做查询;
内存足够大的话,数据全放到Redis里存可以吗;
JWT是用来做什么的,一定是安全的吗;
JWT在使用过程中对业务有什么影响吗;
如果有中间人抓包截取了JWT,作为劫持攻击该怎么办;
设置短期失效的话,在短期内抓包也能攻击啊,有没有别的方法;
建议我从服务器解耦的角度来考虑;
Websocket和Http长链接的区别;
二者对服务器性能有什么影响;
3.场景题
如何设计一个扫码微信登录的系统?
扫码之后,PC是怎么知道手机已经扫码的;
如果多个同学同时打开微信客户端去扫码,又去各自用自己的手机扫,怎么知道具体哪个同学扫的是哪个码呢;
4.手撕
Z型打印;
k个一组翻转链表;
手写全部代码,解释某行代码的思路和原因;
5.反问
目前的技术栈和业务;
对校招生的要求。
10.蚂蚁国际-后端开发一面(1h) 4月27日
ps: 约的晚上6点,面试官迟到了15分钟才到,说是一直在别的会议,而且似乎是HR代的技术面,整个过程不知道他想问什么,最后应该是急着下班吃饭去了,反问也没怎么回答
1.自我介绍
2.自己挑一个项目开始折磨
说一下什么是滑动窗口限流;
怎么设定的窗口大小和阈值;
为什么这样设置,自己怎么评估的TPM;
自己查询中慢SQL执行一次耗时多久;
还有没有别的限流方式;
令牌桶和滑动窗口的区别是什么,场景有什么不同,优缺点是什么;
说说使用线程池的场景;
如果线程池中的一个并发任务处理失败了会怎么样;
如果提交的任务特别多,怎么控制缓冲队列的大小;
定长的缓冲队列和不固定的队列有什么区别;
生产中应该采用什么任务队列;
任务队列满了会怎么样;
有什么样的拒绝策略,该在什么时候使用;
怎么通知前端任务处理完毕;
completeFuture和future的区别;
线程池里什么支持有返回值;
为什么要用线程池,一个任务执行要多久;
为什么要用消息队列,消息乱序的话怎么解决;
分布式集群下消息乱序该怎么解决;
一个机器按照奇数位去投消息,另一个机器按照偶数位去投消息,该怎么保证消息的顺序执行(说了半天没听懂他到底想干什么);
项目里最大的挑战是什么;
多级前缀索引为什么不直接按照100的长度处理就行;
concurrentHashMap和HashMap的区别是什么;
为什么支持并发,底层实现是什么;
如果想要每个key都去改变,同时插入10个数据,是怎么操作的(也是说了半天没听懂到底要干什么);
分段锁是怎么实现的,1.7之前和1.8之后的区别是什么;
在刚才插入数据的情景下,需要加几个锁(还是不知道到底想问什么);
HashMap可以用ArrayList作为Key吗;
ArrayList扩容的话会影响我的业务,让你来设计的话,有什么方案,底层代码有什么想法吗,业务有什么可以修改的吗;
CopyOnWriteArrayList的扩容是怎么做的;
3.反问
招人的要求,说就是官网的要求;
业务技术栈,就说了常规的中间件。
11.蚂蚁国际-后端开发二面(50min) 4月29日
1.自我介绍
2.拷打项目
介绍一下项目架构和技术难点;
这个检索主要针对什么内容,有什么维度;
前缀索引是什么建的,为什么要用前缀索引;
消息队列是怎么用到的;
预测模块的具体细节;
3.八股
进程和线程的区别;
创建线程的方式;
有哪些线程池,为什么要用线程池;
线程池的具体参数与含义;
java集合有哪些,有什么特点;
多线程下有哪些锁;
CAS的应用场景有哪些;
4.手撕
随机链表的深拷贝(核心代码模式),时空复杂度是什么;
4.反问
业务内容和技术栈。
Comments NOTHING