首页 > 菜鸡后端实习面经、凉经(滴滴、京东、百度、爱奇艺、快手等)
头像
创新港蔡徐坤
编辑于 2020-07-20 09:15
+ 关注

菜鸡后端实习面经、凉经(滴滴、京东、百度、爱奇艺、快手等)

更丰富的内容可以上这来看
https://www.jianshu.com/p/0a988f3c3da0

正式面经

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

不会的问题加粗

一、滴滴

在牛客网上投递的,面试体验真的很好,效率也很高,一天发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. RPC项目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扩展的两种),(max啥时候会回收)
  3. 什么情况下使用什么样的阻塞队列(linked、array、同步队列、优先级队列的不同)
  4. AQS介绍一下(state可重入、读写锁、如何实现公平,非公平)
  5. HashMap、ConcurrentHashMap大全套

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. 反问

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

滴滴

一面(闲聊)

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

  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. 限流的实现讲一下(令牌桶、ip,还具体讲了以下令牌桶)
  10. 怎么保持缓存数据和数据库数据的一致性(没加入消息队列之前,这两个操作是一致的,加入消息队列之后,先预减库存,成功的话在通过消息队列减数据库库存,这里数据库使用了唯一索引来保证多次下单的幂等性,如果数据库减库存失败,会把缓存当中的库存加回去)
  11. 为什么要加入消息队列(异步下单提高可用性,但是好像QPS没有上升)
  12. 为什么QPS没有上升?(我觉得是阿里云服务器单核2G的限制)
  13. 你是部署到服务器上的吗,所有东西都装在一块?阿里云服务器对学生是不是有优惠?(是的,学生十块钱一个月?面试官:竟然还要钱?2333)
  14. 说一下事务的四个特性和详细介绍(ACID)
  15. ACID具体介绍一下(当时一致性具体内容忘了,为了避免尴尬,说了一下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(服务注册、发现)
  27. redis不可以吗?(也可以,但是redis需要我自己去维护这个provider是否还存活)
  28. zookeeper有什么特性,讲一下(临时节点、持久节点、ZAB)
  29. 怎么实现负载均衡策略的(我只做了最简单的轮询、加权、随机,通过在zookeeper中配置,然后将引用按照权重将Channel的引用加入到一个List当中)
  30. 怎么实现透明调用的(自定义一个注解,然后在BeanPostProcesser中拦截使用了这个注解的接口,然后使用Cglib动态代理进行远程调用)
  31. 如何实现异步调用的?(将Future储存起来,再新建一个线程去维护这个Future的状态)
  32. 为什么我们要使用RPC而不是使用HTTP(讨论了挺久的,我还是没回答上来)。后续整理了一下,感觉可能是当时我没理解到位想问的问题,放在这里: https://www.jianshu.com/p/f193bc194e3c
  33. 你这个RPC有什么地方需要改进的,和我说一下(还好我真的总结一下,准备以后重构的,写在github上边了,然后打开github给面试官看了..)
  34. 嗯,行,还总结了一下,那我再看看你另一个项目,说一下分布式事务的几种方式吧(2pc、3pc、tcc、基于消息)
  35. 2pc和3pc有什么区别?(当时我是真的忘了,不过面试官说没事,后边再去补补就行)
  36. 为什么要用docker部署(docker的优点)
  37. 熔断降级有什么区别?(我回答的是降级是发生在熔断之后的,后来面试官说进行限流的时候也会降级)
  38. Hytrix的工作原理
  39. 项目方面先问到这里,下面我来考考你的基础吧,你知道什么排序算法?(ps:已经把项目底裤都扒下来了。选择、冒泡插入、堆排、快排、归并、希尔、基数)
  40. 用记事本写个快排吧
  41. (写的过程中)你有没有博客?给我看看(我有,但是没写什么东西,但是面试官还是要,就把这个博客的地址发给他了)
  42. (写的过程中)怎么那么多关于docker的(我最近在把微服务用docker重新部署)
  43. (写的过程中)看到你有个唯品会的面经,最后拿到offer了吗?(hr面挂了,只招应届的。那是我疫情期间随便投的了,那时候还没开学)
  44. (然后应该看到我关于redis的笔记了)你这redis写了这么多,刚才介绍怎么没说呢?(我真的不知道该怎么说啊。。。)
  45. 你说一下哈夫曼编码(好久没用了,一时没想起来,后来想起来是用于压缩算法的那个)
  46. 说一下关于图的算法(迪杰斯特拉)
  47. 反问(今天就到这里吧,我去和一面面试官讨论一下,后续应该没有技术面了)

三面(基础+项目)

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

总结

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

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

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

京东(数科)

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

一面(项目)

二面(基础)

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

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

京东

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

一面(项目+基础)

  1. 秒杀幂等性怎么实现的?(当时回答的是通过版本号,那时候在考试没有了解幂等性解决的问题,其实在这个项目当中是使用唯一索引实现的)

二面(基础)

  1. HashMap在多线程中对不同的key进行读写操作会有问题么?(回答的不会,然后说了一下扩容产生死链之类的,后续查阅资料在扩容的过程中如果发生读写还是会产生问题的)
  2. 秒杀用Redis缓存热点数据,怎么缓存的?(不是很理解面试官的意思,缓存不就是将热点数据存到redis当中么?后来回答了采用分片集群,但是面试官好像不是很满意,有知道的朋友可以说一下)

百度

一面

设计数据库

  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关键字的作用?(只回答了防止序列化,面试官说还有其他的)
  5. Redis底层数据结构(SDS+跳表)
  6. 我说的不是这个,是数据结构(?然后说了常规的和特殊的数据结构)
  7. 你这都说了七八种了吧(?)

HR面

soul

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

一面(基础)

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

全部评论

(4) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐