实习面经(滴滴、京东、百度、爱奇艺、陌陌、快手、金仕达、soul)

个人情况和废话

菜鸡一枚,在疫情期间面了广州的BIGO和唯品会,两家公司到HR面说不招22届的,然后就没找了。并且苏州华为离宿舍只有几站路,本来以为躺着都能进华为,结果今年苏州华为压根不怎么招见习生(但是HR一直拖着,说走流程、马上开始、正在安排),拖到返校想着不能和华为继续拖下去了,重新审视了一次简历,发现项目上只有一个简单秒杀和一个CRUD的项目,然后花了大半个月做了两个项目,应对完接踵而来的考试。然后开始投简历找实习,此时大概是6月28号。
到了7月份,朋友要么不实习或者早就有了offer,此时导师两次询问我实习情况和内推(但是我太菜了,内推失败了),一直到7月7日都没收到offer,这段时间每天失眠,不过7月7日的时候,连续几天收到了几个offer,先后顺序应该是京东(数科、零售)、滴滴(北京、杭州)、爱奇艺(上海、上海)、百度、金仕达

正式面经

由于我面试都是没有录音的,也很少复盘(菜鸡的本质),所以都是回忆版,尽最大可能的记录一下。

不会的问题加粗

一、滴滴(这次面试体验最好的部门,效率非常高)

在牛客网上投递的,面试体验真的很好,最后由于一些个人原因没去成,感到有点内疚。

一面(项目)

  1. 自我介绍
  2. JVM内存区域以及作用(堆、元空间、方法栈、本地方法栈、程序计数器)
  3. JVM垃圾回收算法、常用收集器及工作流程(CMS、G1、ZGC)
  4. 秒杀项目如何进行压测(Jmeter)
  5. 限流怎么做的(令牌桶,令牌桶实现挺简单的,但是很少人做了秒杀的人会了解,特别是慕课那个项目)
  6. Redis集群怎么搭建的(Docker)
  7. 分布式锁的原理是什么、怎么做的(解决多个机器间的资源互斥)
  8. DockerFile最大的层数(后来在网上也没查到)
  9. 怎么保证Redis和数据库的同步(库存补偿)
  10. 项目中如何解决粘包、拆包的问题(基于字符或者基于长度)
  11. 如何保持长连接(Netty)
  12. 如何实现心跳保持(IDLE编解码器监听事件)
  13. Netty为什么快(基于NIO+零拷贝)
  14. zookeeper怎么实现注册、发现的(临时节点存储ip+端口+负载均衡策略)
  15. 为什么不选择Redis作为注册中心(zookeeper临时节点自动宕机自动清除)
  16. ZAB算法讲一下(ZAB是paxos的改版,Mysql是paxos、redis sentinel是raft、zookeeper是ZAB、ZAB的具体实现)
  17. JWT的英文名是什么(JSON WEB TOKEN)
  18. REDIS呢?(Remote Dic Server)
  19. 分布式事务的几种解决方案(2PC,3PC,TCC,基于消息,然后顺带讲了一下优缺点)
  20. 反问

二面(技术栈)

JUC

  1. 你看过《Java并发编程的艺术》,说一下Symchronized的原理(对象头、锁升级机制)
  2. 线程池大全套(执行流程core->BlockingQueue->max),(BlockingQueue->四种阻塞队列),(拒绝策略->JDK四种、DUBBO和Netty扩展的两种),(啥时候会回收)
  3. 什么情况下使用什么样的阻塞队列(linked、array、同步队列、优先级队列的不同)
  4. AQS介绍一下(state可重入、读写锁、如何实现公平,非公平)

Netty

  1. 你看过《Netty实战》,介绍一下Netty,可以从工作方式方面(线程模型->主从Reactor、BossGroup、WorkerGroup区别、EventLoopGroup与线程池的关系、EventLoop、Pipeline、ChannelHandler、Context)
  2. 有哪些框架的底层使用的是Netty(RocketMQ、DUBBO、ElasticSearch)
  3. NIO介绍一下(Selector、Channel、ByteBuffer,IO多路复用,底层的select、poll、epoll(这里我只是了解,不清楚具体实现))

JVM

  1. 你看过《深入理解Java虚拟机》,看完了吗(只看到GC、后边没看)
  2. JVM全套(内存区域、GC算法、垃圾收集器、双亲委派机制、类加载机制)
  3. JVM调优了解吗,OOM了怎么排查(拷贝Dump文件,使用工具查看)
  4. 了解哪些工具(JvisualVM、Jprofiler、Jstack)
  5. Jmap了解吗(no)
  6. 如果想把JVM内存固定为32M如何操作?(XMS、XMX同时设置)
  7. 你看过《Java编程思想》,评价一下这本书(博大精深,内容太多,记不住,但是某些比如面向对象、static和类绑定这些还是留下了深刻印象(面试官:我也是上学的时候看的。早就忘得差不多了,内容太多了。)还好没装逼)
  8. 《Java编程思想》当中介绍的设计模式有哪些(设计模式我不熟悉,但是IO中采用了适配器模式)
  9. 介绍一下适配器(没说出来)
  10. Redis数据结构(String、Hash、Set、Zset、List、Hyperloglog、Bitmap、Grospatial、BloomFilter)
  11. 用过哪些(写Demo都用过,用的最多的还是String)
  12. Redis底层是什么数据结构(Zset是跳表,String是SDS)
  13. 跳表讲一下
  14. Mysql聚蔟索引和非聚簇索引的区别(讲了Innodb和Myisyam的区别,文件结构,和两种索引的区别)
  15. 所以何种情况下使用什么索引(当时没想出来,事后诸葛觉得因为聚蔟索引文件太大了,并且改变数据的时候效率比较低,要不我天天用)
  16. 反问

滴滴这个部门的面试体验真的很好,不知道以后还有没有机会去

滴滴(面试体验也非常好,但是offer发的慢)

一面(闲聊)

一面比较轻松,大概技术面试只面了十分钟,后边一直在闲聊

  1. 自我介绍
  2. HashMap相关
  3. 有没有使用过爬虫,或者对爬虫这方面感兴趣吗?
  4. 大数据相关
  5. 看你了解LVS,介绍一下(三种负载均衡模式)
  6. 知道LVS的作者吗?(面试官说是部门的Leader写的)
  7. 闲聊+反问

二面(项目)

从项目上一点一点的问,如果是云的项目估计回答不出来

  1. 自我介绍
  2. 说一下秒杀模块,怎么进行优化的(主要基于Redis做优化,加入二级缓存,还有一些防刷限流的措施,后续也加入了消息队列,但是对QPS的提升不大)
  3. Redis集群怎么搭建的(Docker)
  4. 哨兵集群介绍一下(基于Raft算法,介绍了选举过程,然后指出我这使用的是分片集群)
  5. 分片怎么保障高可用?(将不同的数据hash到不同的库,然后通过bus自动访问到相应的数据库,每个分片再配置主从保障容错性)
  6. 怎么解决超买超卖的(Redis分布式锁)
  7. Redis分布式锁怎么实现的(setnx+setex,但是这样子不是原子性的,可以采用LUA脚本进行优化,或者直接使用Redisson框架)
  8. 你知道Zookeeper的分布式锁实现方式吗?(临时节点,如果服务器挂了,锁会自己消失)
  9. 限流的实现讲一下(令牌桶)
  10. 怎么保持缓存数据和数据库数据的一致性(没加入消息队列之前,这两个操作是一致的,加入消息队列之后,先预减库存,成功的话在通过消息队列减数据库库存,这里数据库使用了唯一索引来保证多次下单的幂等性,如果数据库减库存失败,会把缓存当中的库存加回去)
  11. 为什么要加入消息队列(异步下单提高可用性,但是好像QPS没有上升)
  12. 为什么QPS没有上升?(我觉得是阿里云服务器单核2G的限制)
  13. 你是部署到服务器上的吗,所有东西都装在一块?阿里云服务器对学生是不是有优惠?(是的,学生十块钱一个月?面试官:竟然还要钱?)
  14. 说一下事务的四个特性和详细介绍(ACID)
  15. 具体介绍一下(当时一致性具体内容忘了,为了避免尴尬,说了一下mvcc版本控制)
  16. 四种事务隔离级别,mysql默认隔离级别(读未提交,读已提交,可重复读,序列化,读已提交和可重复读是通过mvcc版本控制机制实现的)
  17. 说一下mvcc版本控制机制(undo log,隐藏字段)
  18. 读已提交的情况下,事务A读到的事务永远是事务A吗?(猜了一下应该不是,应该是根据版本链找到上一条已提交的事务(面试官:不用紧张,对于实习生来说这里已经超纲了))
  19. 这个秒杀有多少行代码(我真不知道,然后说了RPC项目大概有一千几百)
  20. 我们来说说这个RPC项目吧,怎么实现场链接的(Netty保证的,应该是使用了TCP的长连接特性)
  21. 心跳保持呢(Idle编解码器工作机制)
  22. 粘包半包怎么解决的(LineBased和LengthBased,我是用的是LineBased)
  23. 为什么要使用LineBased,怎么分割的(/r/n,当时没有考虑太多,觉得这个比较简单)
  24. redis知道什么(持久化、集群、九种数据结构)
  25. 如果用户输入/r/n怎么办(计划后续重构的时候改为LengthBased)
  26. 为什么要用Zookeeper(服务注册、发现)
    19 redis不可以吗?(也可以,但是redis需要我自己去维护这个provider是否还存活)
  27. zookeeper有什么特性,讲一下(临时节点、持久节点、ZAB)
  28. 怎么实现负载均衡策略的(我只做了最简单的轮询、加权、随机,通过在zookeeper中配置,然后将引用按照权重将Channel的引用加入到一个List当中)
  29. 怎么实现透明调用的(自定义一个注解,然后在BeanPostProcesser中拦截使用了这个注解的接口,然后使用Cglib动态代理进行远程调用)
  30. 如何实现异步调用的?(将Future储存起来,再新建一个线程去维护这个Future的状态)
  31. 暴击:为什么我们要使用RPC而不是使用HTTP(讨论了挺久的,我还是没回答上来)。后续整理了一下,感觉可能是当时我没理解到位想问的问题,放在这里: https://www.jianshu.com/p/f193bc194e3c
  32. 你这个RPC有什么地方需要改进的,和我说一下(还好我真的总结一下,写在git上边了,然后打开git给面试官看了..)
  33. 嗯,行,还总结了一下,那我再看看你另一个项目,说一下分布式事务的几种方式吧(2pc、3pc、tcc、基于消息)
  34. 2pc和3pc有什么区别?(当时我是真的忘了,不过面试官说没事,后边再去补补就行)
  35. 为什么要用docker部署(docker的优点)
  36. 项目方面先问到这里,下面我来考考你的基础吧,你知道什么排序算法?(ps:已经把我象奴的底裤都扒下来了TAT。选择、冒泡插入、堆排、快排、归并、希尔、基数)
  37. 用记事本写个快排吧
    31.(写的过程中)你有没有博客?给我看看(我有,但是没写什么东西,但是面试官还是要,就把这个博客的地址发给他了)
  38. (写的过程中)怎么那么多关于docker的(我最近在把微服务用docker重新部署)
  39. (写的过程中)看到你有个唯品会的面经,最后拿到offer了吗?(hr面挂了,只招应届的。那是我疫情期间随便投的了,那时候还没开学)
  40. (然后应该看到我关于redis的笔记了)你这redis写了这么多,刚才介绍怎么没说呢?(我真的不知道该怎么说啊TAT)
  41. 你说一下哈夫曼编码(好久没用了,一时没想起来,后来想起来是用于压缩算法的那个)
  42. 说一下关于图的算法(迪杰斯特拉)
  43. 反问(今天就到这里吧,我去和一面面试官讨论一下,后续应该没有技)

三面(基础+项目)

常规的JVM、HashMap、JUC问题,不重复了,其实二面这种情况下,三面大多数都是重复的问题,可能是一面时间太短了。

总结

这个部门给人的感觉也非常好,特别是二面面试官的方式,让我在后续的面试中可以吧问题回答的更完善

重复的问题记录有点多,下边我就不继续重复写之前写过的问题了,只写新的

重复的问题记录有点多,下边我就不继续重复写之前写过的问题了,只写新的

京东(数科)

数科的面试比较短,加起来大概四五十分钟,问题也比较简单,可能部门扩张比较缺人

一面(项目)

二面(基础)

之前没涉及到的主要是场景题

  1. 十亿条数据找出出现最多的top10(我只知道hash、堆排序、归并排序)
  2. Redis的ZSET有什么使用场景(我说了热搜)
  3. 滴滴如何通过用户的地点快速找出附近的车辆(每个区域的车辆设置编号,然后使用Redis的Geo数据结构进行存储)
  4. 如果不用Redis的数据结构呢?(我回答的是一致性哈希)

京东(零售)

这次面试是在考试的过程中,没怎么准备,回答的不是很好

一面(项目+基础)

  1. 秒杀幂等性怎么实现的?(当时回答的是通过版本号,那时候在考试没有了解幂等性解决的问题)

二面(基础)

  1. HashMap在多线程中对不同的key进行读写操作会有问题么?(回答的不会,然后说了一下扩容产生死链之类的,后续查阅资料在扩容的过程中如果发生读写还是会产生问题的)
  2. 秒杀用Redis缓存热点数据,怎么缓存的?(不是很理解面试官的意思,缓存不就是将热点数据存到redis当中么?后来回答了采用分片集群,但是面试官好像不是很满意,有知道的朋友可以说一下)
    实习回来了,当时所说的热点数据是:前缀一样的数据,在某些数仓工具中,会存储到同一个分片上,把这一部分前缀相同的key称为热key,可以通过reverse解决热key的问题。在ridis分片集群中,key是先经过hash再存入分片当中的,所以没有热key数据的问题

百度

一面

设计数据库

  1. 要求建立学生、课程、选课、成绩四张表,要求设计字段及相应的数据类型并建立主键
  2. 然后给了五道题,写SQL,如果使用了笛卡尔积,会问怎么进行优化,大概考察连接、主键、索引、聚合函数、group by等等

二面

  1. Redis的内存淘汰策略
  2. Redis如何进行内存淘汰的
  3. 代码:十进制->二十六进制的转换

爱奇艺(上海)

爱奇艺面试也挺短的

一面(基础)

  1. 旋转数组找数字
  2. topk
  3. 全排列

二面(项目)

  1. DUBBO几种负载均衡的模式(轮询、随机、一致性哈希、最小活跃数)
  2. 介绍一下一致性哈希,一致性哈希和普通哈希有什么区别(说一下原理)

爱奇艺(上海)

爱奇艺面试也挺短的

一面(基础)

  1. 层次遍历
  2. 接雨水
  3. 用过什么前端技术(我就应该说不了解)
  4. 说一下VUE

二面(项目)

陌陌

一面(项目+基础)

Redis的SDS最多可以存储多大的数据?(512M)

二面(基础)

有好多东西好久没复习了,算是发挥最差的一次面试吧,特别难受,回去也把网络和系统复习了一遍

  1. Ping命令是什么协议(ICMP)
  2. ICMP在哪一层(脑子真的瓦特了,ping命令一般只需要ip,明显就在网络层啊,但是就是没想起来)
  3. 分别介绍OSI七层模型每层是干什么的(我面试的时候计网只复习了关于TCP和HTTP的,很多层没说出来)
  4. 交换机、集线器分别工作在哪一层
  5. 进程之间交互方式(没复习,只说了Socket、信号量、管道、共享内存)
  6. 操作系统的主要部分(没复习只说了文件系统、内存管理、IO)

HR面(KPI)

二面之后知道肯定挂了,但是HR面也不好意思不接,结果愣是面了四十多分钟,体验极差。

  1. 用过默默么(没有)
  2. 知道默默干什么的么(陌生人交友)
  3. 还有么(你自己不清楚?)
  4. 还有很多奇怪的问题,估计大家也不想看,就不写了

总结

二面差点以为我投的是嵌入式开发。
当时知道肯定凉了,反问的时候就问了:Java不是用来操控传输层以下层级的吧,怎么连集线器在哪一层都要掌握?
面试官:需要计算每个业务的流量,以更好地设计系统

快手

一面(挂)

  1. 链表的归并排序
  2. 写个单例(我写了个静态变量饿汉单例)
  3. 你写的这个线程安全么(static的,线程安全)
  4. 类加载过程讲一下(解释static为什么安全)
  5. 写一下DCL懒汉式
  6. 解释volatile的作用

金仕达(上海的一家公司)

一面

  1. Java的特性(一次编译,到处运行)
  2. 我要的不是这个,是特性(然后说了封装继承多态,这不是面向对象的特性么...)
  3. 具体介绍以下多态(运行时类型和编译时类型不一样)
  4. transient关键字的作用?(只回答了防止序列化,面试官说还有其他的)

HR面

soul

流程有点慢,等到约二面的时候我已经入职了,就没参加

百度

一面(基础)

  1. 分布式系统设计需要考虑什么方面(我从CAP定理的角度分析的)
  2. 主要是Netty和RPC框架
  3. 口述:将阿拉伯数字转换为汉语表达

你可能感兴趣的:(实习面经(滴滴、京东、百度、爱奇艺、陌陌、快手、金仕达、soul))