双非本科疫情之下拿到网易滴滴offer经验分享

    Hello,大家好。首先感谢大家点开楼主的这一篇文章。自我介绍一下吧,楼主16年毕业,3年半经验,双非本科,非科班出身。之前就职于一家金融科技公司,Java后端开发,近期于疫情之下出来找工作,在互联网寒冬和疫情之下,许多公司都减薪裁员,楼主有幸拿下了网易和滴滴这两个互联网公司的offer,整个过程感受颇多,趁着清明假期,写下此篇文章以作总结和经验分享。

    整体来说面试主要考察基础+项目深度+设计能力+算法。楼主会从年后面试的几家公司中向大家阐述这几个要考察的key point,但由于时间比较久,楼主只能把自己能回忆起来的说一下,有可能会有遗漏。

阿里-淘系技术部(五面挂)

一面:
    技术我就不问了,我看你基础比较好,相信一些常规问题也难不倒你,这样吧你给我讲讲你的业务,讲明白了我就让你过。WTH???后来说了一大堆金融方面的知识,算是把我自己说明白了,最后让写了个笔试题,给发了过去。

二面:

  • 工作中遇到最难的问题是怎么解决的?
  • 分布式事务,RocketMQ事务消息怎么实现的知道吗?生产端出了问题可以回查,消费端失败了怎么办?重试。如果一直失败呢?加入死信,人工介入。那你直接提示用户成功吗?我觉得应该可以吧…
  • Dubbo和Rest有什么区别?你说了这么多Dubbo的优点,照你这么说是不是都应该用Dubbo?对了,我还没问你Rest呢,你知道Rest吗?
  • Http状态码知道哪些?
  • 注解知道吗,说一说怎么回事?项目中用过哪些注解?
  • Redis是怎么搭建的,为什么是3主3从,为什么不是2主2从,为什么不是4主4从?

三面:

  • 说说你的项目经历了哪些系统架构的变迁?
  • 用过Redis相关的一些中间件吗?
  • 余数哈希有什么缺点?
  • ConcurrentHashMap说一下
  • CMS垃圾收集的过程?为什么要有初始标记,为什么不能在重新标记时一块给标记了?

四面:

  • Spring中的bean经历了哪些阶段?
  • SpringBoot说一下
  • select、poll、epoll有什么区别,epoll有哪几种触发方式,各有什么优缺点?
  • RocketMQ为什么能有这么高的吞吐量,除了你说的顺序写、随机读,还有吗?
  • 玩过微博吗,如果让你设计微博的引擎系统,你打算怎么设计,推还是拉?
  • 你在Linux下开发过吗?Linux有个tail命令,能实时输出文件的变化,如果让你实现,你打算怎么做?
  • Linux的文件系统,让你实现,你会怎么做?
  • 我感觉你的基础还可以,但是设计能力欠缺,可能跟你所处的环境有关。笑cry…真实到让人难以接受

五面:
    HR+Boss一起视频面。那天真是倒了血霉了。面试时间到了之后,死活接不到钉钉视频,后来发现是钉钉版本太老,于是升级,最坑爹的是钉钉这个破软件还不能一次升到最新版,一共升了3次,足足浪费了15分钟,期间我也一直在群里道歉,心里想着应该是凉凉了。果不其然,视频打开后,大佬们黑着脸,吓得的我全程说话一直哆嗦,面完之后,大脑处于失忆状态,完全不知道自己说了些啥。

网易(六面过)

一面:

  • 锁是怎么实现的?乐观锁、悲观锁有什么区别?
  • JDK6,Synchronized做了哪些优化?
  • Volatile说一下
  • Java内存模型说一下
  • 线程池说一下
  • Mybatis只定义了一个接口,没有实现类,为什么调接口的方法就能操作数据库?
  • Dubbo是怎么wrap一个interface的?
  • 你们用JDK8吧,了解哪些新特性,闭包知道吗?
  • Redis有哪几种数据结构,项目中的key是怎么设计的?
  • AOP是怎么实现的?JDK和CGLIB有什么区别?
  • 字节码增强框架用过哪些?
  • 解释下什么是IO多路复用
  • 了解Netty吗,说到三次握手,为什么需要三次,为什么两次不行?
  • 我看你平时都在看书、写博客,你看过哪些书,可以贴一下你的GitHub地址吗?

二面:

  • 我看你中间件用的比较多。
  • RocketMQ中Producer、Nameserver、Broker之间是什么关系,一个消息从Producer是怎么发到Broker上的?
  • RocketMQ顺序消息怎么实现的,就算按你说的保证了顺序消息,但业务上收到消息后就是要用线程池并发消费会怎么样呢?
  • RocketMQ随机读有做什么优化吗?
  • 操作系统虚拟内存和物理内存知道吗,物理内存是怎么分配的?
  • Buffer用过吗,比如ByteBuffer,哪个场景下用到的?
  • 如果让你设计一个RPC你会考虑哪些方面?除了协议还有吗,比如编解码、序列化反序列化?
  • 了解过哪些分布式一致性协议?
  • 用过容器吗,比如Docker。
  • 用过K8S吗?

三面:

  • Dubbo调用的服务挂了怎么办,Dubbo是怎么知道服务挂了的,Nginx是怎么知道背后的节点挂了的,有什么探活机制吗?
  • Redis是怎么hash的,了解哪些哈希算法?
  • Redis项目中都用来干吗了?
  • 缓存和数据库怎么保证一致?先写数据库,再删缓存,删失败了咋办?
  • 我看你还用了Canal,大概原理是怎样的,会有日志堆积,消费不过来的情况吗?为什么要用Canal来实现缓存刷新,哪个业务场景下用到的?
  • 你为什么出来找工作?
  • 用ZK还遇到过哪些问题,除了你说的羊群效应?

四面:

  • Rdis怎么保证高可用,主从复制是怎样进行的,会不会有数据不一致的情况?
  • Redis分布式锁怎么实现的,业务处理过程中锁过期了怎么办,锁Key写入主节点后,还没来得及复制到从节点,主节点就挂了,这种情况遇到过吗?
  • Redis比较熟悉哪种数据结构,跳跃表怎么实现的,字典的渐进式Rehash怎么实现的?
  • Redis持久化说一下,Fork中的COW是怎么回事?
  • Redis集群中增加一个节点需要做哪些工作?
  • 使用Redis还遇到过哪些问题?

五面:

  • 为什么用RocketMQ?Kafka、RabbitMQ、RocketMQ各有什么优缺点?
  • RocketMQ,Broker怎么保证高可用?
  • 你说Broker不支持自动选举且Master挂了消息发往Slave,要是出现网络分区呢,网络恢复后,主从不就不一致了?
  • Canal原理是怎样的,Mysql有了binlog为什么还要有undolog?
  • 设计一个分布式链路追踪系统,怎么做,如何做到对业务无侵扰?
  • 有哪些内存是不受Jvm管辖的?
  • 类是怎么被加载到虚拟机的?
  • Jvm调优怎么做的?
  • Netty在哪个场景下用到的?
  • Mysql和Redis,哪个做过调优,怎么做的?
  • 给一个窗口,不断向其中输入字节流,字节是有权重的,让你实时统计100个字节中的前10大,怎么做?
  • 你对开源社区有做过贡献没?

六面:
    HR面,都是常规问题,记不清了。。。请注意态度端正,不要高傲自大!!!

滴滴(三面过)

一面:

  • 工作中遇到最难的问题是怎么解决的?
  • Dubbo调用超时,应该怎么排查,有哪些原因会导致调用超时?
  • 项目上前台到后台的整个处理流程
  • 线程池的各参数应该怎么设置,任务队列用的哪一种,用LinkedBlockingQueue可以吗,如果一直往线程池里提交任务会发生什么?
  • Mysql索引说一下,做过哪些调优?
  • 剩下的记不清了,应该都是比较常规的问题,上面可能也提到过。

二面:

  • 做过哪些代码优化、代码重构,参与过哪些系统设计?
  • 数据库是用Mysql还是Oracle,金额上的小数位数,数据库和代码层面都是怎么处理的?
  • (这两个问题答的烂的一逼,于是后面开启了一系列的基础问题轰炸,好在楼主基础比较好,整个过程还比较”享受“,下面列举几个有印象的)
  • ThreadLocal和线程池一起使用要注意什么?
  • 多条线程并发向虚拟机申请内存,虚拟机怎么处理?
  • SpringMVC的整个处理流程
  • 看你热爱运动,平时都做哪些运动,跑步还是撸铁?
  • 滴滴这边不像你之前的工作,滴滴这边都是2C的业务,所以流量会比较大,系统架构也会很复杂。
  • 好了,感谢你来参加滴滴的面试,一个星期内HR会联系你。

三面:
    HR面,比较常规。面完之后一个礼拜没有动静,打电话过去问,说我们只有一个HC,想再看看有没有更合适的,你要是有offer可以先签。。。
又过了一个礼拜,打来电话问还考虑滴滴吗?对不起已经不考虑了,期待以后再合作。

其他不在这三次面试中的题

  • i=1是线程安全的吗?
  • 怎么取消线程池中的任务?
  • 提交到线程池的callable任务如果都被拒绝,调FutureTask.get会怎么样?
  • 用过哪些设计模式,组合和继承有什么区别,为什么要多用组合少用继承?
  • Mysql的覆盖索引说一下
  • 字节、字符、字符串有什么区别,遇到过中文乱码吗?
  • 你觉得Java能操作到网络通信的哪一层?
  • 你刚刚说客户端发起大量的Tcp连接到服务端,服务端会将部分连接缓存起来,你觉得这个事情是Jvm做的吗?
  • Jdk1.8的HashMap相比1.7做了哪些优化,如果两个元素的哈希值相等,插入hashmap后,红黑树是不是也会失效?
  • Dubbo服务治理怎么理解的?
  • 给定m x n 矩阵,矩阵每行中的整数从左到右按升序排列,每行的第一个整数大于前一行的最后一个整数。判断矩阵中是否存在一个目标值。
    示例:
    输入:
    matrix = [
    [1, 3, 5, 7],
    [10, 11, 16, 20],
    [23, 30, 34, 50]
    ]
    target = 3
    输出: true
  • 你用软引用关联图片来解决内存溢出,同时把软引用放到map缓存,要是图片被回收了呢,不就达不到缓存的目的了?
  • RocketMQ消息发送超时、消费失败,业务上怎么处理的?消费会重复吗,如何保证幂等?
  • 为什么要用AOP,为什么不把你的切面逻辑写在父类里,用继承的方式?
  • IP地址和整形互转
  • Spring中遇到过注解失效吗?
  • RocketMQ如何保证消息一定可达?
  • Dubbo各角色之间是长连接还是短连接,spi知道吗?
  • 你用的是本地缓存?本地缓存在集群之间怎么同步?
  • Redis怎么做排序?
  • 扫码登录怎么实现?
  • RocketMQ中Consumer消费速度太慢导致消息堆积如何处理,不能加线程不能加机器。
  • 解释下什么叫线程安全?
  • 对基本数据类型的读写是线程安全的吗,需不需要加锁?
  • 如何实现一个乐观锁,乐观锁ABA问题怎么解决,如何实现一个悲观锁?
  • 什么情况下用乐观锁,什么情况下用悲观锁?
  • ReentrantLock怎么实现的?
  • 项目上,线程池中的任务抛出了异常怎么处理?
  • 线程池中的线程默认都叫什么名字,定位线上问题,默认的线程名字会带来什么问题,线程工厂有设置过吗?
  • 在main方法中,用完线程池后不shutdown,进程还在吗,知道守护线程吗?
  • IO多路复用在项目上是怎么用的,用的是长连接还是短连接,长连接的套接字如何与线程池中的线程绑定到一起?
  • TCP粘包和拆包问题遇到过吗,怎么解决的?
  • Dubbo中的IOC和AOP说一下
  • Dubbo分层设计说一下
  • RocketMQ异步消息如何实现?
  • 缓存穿透、缓存雪崩、缓存击穿、缓存并发竞争key怎么解决?
  • Redis实现的分布式锁和ZooKeeper实现的分布式锁有什么区别,业务上用的哪一种?
  • 你的图片有多大,那你觉得可以用Redis做缓存吗?知道oss和虚拟内存吗?
  • 软引用和弱引用的使用场景?
  • 限制1s内登录人数不能超过100,用Redis怎么做,用哪种数据结构?
  • Redis中的SDS知道吗,你在看SDS时想起了Java中哪个数据结构了?
  • Redis开启了AOF持久化,同时有RDB和AOF两个文件存在,启动时如何加载?
  • 登录线上机器发现大量close_wait,怎么排查原因?
  • 数据库的行锁怎么实现?
  • 线上机器,Top后显示Load较高,打印GC日志发现只有少量MinorGC,怎么排查?
  • RPC和消息中间件有什么区别,分别适用于哪种场景?
  • 一个服务依赖的另一个非核心服务出现故障,导致本服务不可用,如何处理?
  • 有一批邮件要发出去,且有一个集群来负责具体的邮件发送任务,如何设计让系统尽快完成发送?
  • 从HashMap中拿掉扩容的代码,会怎么样?
  • RocketMQ的消息是如何持久化的?
  • 类的加载过程?
  • 50M内存,两张千万级数据表,如何快速对比,查出哪些数据新增,哪些数据修改?
  • select * from table where a=1 and b=2 and c=3,如何建立索引,如果去掉a=1的条件呢?
  • 画图说一下hashmap的死循环?

这些问题都是楼主亲身经历过的面试原题,也可能跟楼主的简历有关,所以仅供参考

看过的书和代码

下面写一下楼主看过的书和代码:

  • 《Java多线程编程核心技术》作者 高洪岩。非常好,适合多线程入门
  • 《深入理解Java虚拟机》作者 周志明。非常好,适合打基础,建议反复阅读,尤其后面的并发部分。
  • 《Redis设计与实现》作者 黄健宏。通俗易懂,作者写作功底太牛,豆瓣有人评价他为大陆版侯捷
  • 《MyBatis从入门到精通》比较一般,不建议看
  • 《Netty实战》翻译烂如狗屎,有条件建议读英文原版
  • 《Netty权威指南》作者 李林锋。还可以,建议配合着netty实战一起读
  • 《Spring实战》第四版,作者 Craig Walls。非常棒的spring实战级别的书,全书知识点覆盖很广,必读!
  • 《Spring揭秘》从源码级别了解spring bean的一生,讲的很好,刚开始以为是老美的作者,后来才发现是国人写的,真赞!
  • 《SpringBoot实战》作者 Craig Walls。全书篇幅不多,但和spring实战一样,讲的很好,应付面试足够了。
  • 《从Paxos到Zookeeper分布式一致性原理与实践》作者 倪超。作者很牛,但是全书的目录排序有问题,把paxos的部分放到了前面,容易让人产生懵逼和放弃的心态,建议把paxos放到最后看。
  • 《RocketMQ实战与原理解析》作者 杨开元。全书比较一般,很多知识点一带而过,有点如鲠在喉的感觉,建议下载RockeMQ源码,边看边调试
  • 《Dubbo》市面上没有好的书,楼主看的是Dubbo官方文档和社区,对着源码边看边调试,Dubbo很庞大,涉及的知识点非常多,是块难啃的硬骨头,建议慢慢来。
  • 《大型网站系统与JAVA中间件实践》作者 曾宪杰。有点偏向于架构,目前楼主功力尚浅,感受不深,打算若干年回过头来再看一遍,哈哈。
  • 《计算机网络自顶向下方法》第六版,楼主是冲着豆瓣评分去的,但是全书太厚了,翻译也太差了,不好的翻译会让上下文衔接很困难,也容易让人走神,楼主是花了一个多月才看到链路层的部分,有条件建议读英文原版。
  • 《Kubernetes in Action中文版》豆瓣评分9.3,楼主是因为新工作要用到容器方面的知识才去看的,10天看完了前12章。总体来说非常非常棒,知识点从局部到整体,读的过程,思路也从糊涂到清晰,足见作者写作功底,评分不是盖的!
  • 《Pro Git》中文版犹如Chrome浏览器的直译,语句都不通。但是了解GIT还是可以的,篇幅也不多。
  • HashMap、JUC源码属于必看部分,重要性不赘述。看1.7即可,1.8逻辑太多,抓不住重点。
  • Spring源码,看4.x版就好,结合前面提到的书,搞清楚容器加载过程。
  • Dubbo源码,楼主看的是2.5.4版,虽然比较老,但是适合学习,结合官方文档、社区,和源码中的benchmark边调试边看。
  • RocketMQ源码 楼主看的是4.3.2版,重点搞清楚整体架构、推拉模型、顺序消息、事务消息、延迟消息是怎么实现的,结合benchmark多实战。
  • 最后是算法,做算法门槛比较高,但即使不做算法面试也有可能会考,所以还是不能掉以轻心。LeetCode上的题刷下中等难度的就可以。算法容易让人上瘾,要控制度。楼主只刷了60个题,自己还是个菜鸡,就不多发言了。

    全文写到这里就算是结束了,祝大家早日找到满意的工作,楼主这个刚毕业时连Java都没用过的菜鸡都能做到,你还有什么理由做不到呢,加油吧!!!

    最后要感谢下我的父母,为了能让我安心学习和找工作,都没怎么打电话打扰我。还要感谢我的校友,微信昵称“一个好人”,给了我莫大的启发和帮助。不做坏人很容易,做个好人却很难,感谢所有帮助过我的人,好人一生平安!

发布了20 篇原创文章 · 获赞 0 · 访问量 1146

猜你喜欢

转载自blog.csdn.net/fengyq17290/article/details/105333525