2021年3月社招新鲜面经总结

1,439 阅读19分钟

网易

一面

主要是介绍下项目,谈到处理并发跟优化的问题

  1. 个人简历讲到二级缓存,里面有一个一直困扰我的问题:就是如何刷新机器集群里面的缓存,我当时回答说根据一个变量来大家一起刷新,比如放在redis上。 后面请教面试官,解惑我很久以前的疑惑:可以使用zk的广播,牛皮~(我怎么没有想到,其实也可以使用redis发布、订阅模式)
  2. redis基础数据结构,底层构造(一万多个槽,通过算法去找哪台机器,跳表),高可用(raft算法,哨兵模式,一致性hash)
  3. jvm相关,从一个类的初始化的过程,谈到jvm,以及如何调优(ps:面试官人很好,一直引导) 回收器:CMS,G1 年轻代回收,老年代,永久代
  4. 索引为啥快,b+树,我记得好像没有说错,就是通过索引来建立树,既然数据已经排好序,查询自然快
  5. 简历谈到锁,讲了下分布式锁,java锁(ReentranLock,Syn...,volitial) 被问到为啥使用分布式锁,初衷还是为了解决并发操作导致的问题,面试官说应该使用数据库的锁,确实这里设计有点问题。当然期间会导致大家都卡住在这里等待,说到怎么优化。话又说回来,如果全部采用mysql的锁量大的话会导致数据库锁的争抢,还是让他们去争抢redis锁吧,哈哈。

二面

  1. socket完整请求过程(由于我实习的项目是使用socket实现聊天功能,有点久远了,哈哈)
  2. tcp三次握手四次挥手,客户端如果没有收到消息怎么办
  3. 请求加密,由于我简历写了,嘻嘻 。这个大家可以去看下,有些细节真的很细。比如加时间戳,保证不会超时被别人拿到使用,还有参数+时间戳+随机数(排序),也就是混淆,然后加密算法加盐,salt,增加别人破解的难度。
  4. 聊下项目,谈下人生,哈哈(ps:这次面试有点小紧张,面试官很nice,亲切)主要谈下我平时怎么处理并发、调优等等。这一块我可有经验,也很感兴趣。开涛大佬说过三把斧:限流,降级、缓存。我平时也喜欢琢磨这琢磨那,看看我们后台阿里的链路追踪的慢查询,调优,成就感满满的~

感悟:我觉得每一次面试有很多收获,不仅仅是一个检验基础的时刻,也是一次技术交流,有时回答不上来,也能请教下面试官,别人的思路以及可以借鉴好的技术方案。 我个人蛮喜欢读书的,书是人生的老师,生活更如此。我们要在生活的细节处,找到每一个能让自己进步的地方,虚心请教。

唯品会

一面

电话面,嘟...

  1. 自我介绍,巴拉巴拉
  2. 你看过spring官网谈谈。spring官网大概一些:资源Resource,国际化i18n,验证这些模块,具体看我的知识体系
  3. 然后讲了下jvm相关,从类加载过程,双亲委派(唯一性),jvm构造,3个年轻代,年老代,永久代,回收算法。
  4. 讨论下官网中英文MessageSource的实现,跟官网的i18n的区别。由于我们用了shardingJdbc,那个配置我有点忘了,就是根据配置,比如你这个sql会跳到哪个库,哪张表。
  5. 谈下这个抽奖用到一些技术,分布式锁,抽奖算法,mysql一些优化,redis缓存。很多面试官都会问我:你们redis是怎么部署的,有几台。啊哈哈哈,我们都是用了阿里的产品所以没有具体去了解。
  6. 然后来一个逻辑题:一个杯子6升水,一个杯子5升水,如何倒出3升水,我是没有想到会问这个的,omg
  7. mysql官网你也是看过的,大概讲下。事务级别,间隙锁,谈到我们生产遇到的问题:之前有个老哥就是索引设计不好,一个操作批量插入,一个操作是更新,经常导致死锁。后面我们架构师就把mysql改成rc级别,从此没有出现死锁情况,然后我再谈下索引失效的情况。
  8. 然后问了我们技术框架
  9. 最后我问了唯品会的技术框架,很多自研,挺强的,nice~

腾讯

一面

  1. 上来就是一道算法题,蛇形打印二叉树
  2. 自我介绍,巴拉巴拉
  3. 简历写着处理并发东西,简单介绍一下。又是引用了开涛大佬的 那三板斧,限流:hystrix(信号量、线程池拒绝策略,讲一下线程池的原理,核心参数),缓存(redis,本地缓存guavaCache)谈到缓存击穿问题,以及实现。
  4. 分布式锁(redis px nx ,redission看门狗,红锁) Q:谈谈对分布式锁的看法 A:(ps:很简单)不外乎就是为了防止并发操作导致的问题,像java reentranlock,syn只是适用于本地,对于分布式环境需要一个分布式锁来解决并发问题。
  5. 谈到怎么实现一个延迟任务,定时器的话也是有延迟的。我谈到了一个是redis key过期监听事件,另一个实现是zset,去排序任务,快过期的任务取出来,然后推到MQ的延迟队列里头。 Q:Mq延迟实现?举了RabbitMq案例,它有两种实现,一种是配置死信队列,一种延迟插件。 原理是:一直消费失败,达到一定的次数之后,丢到死信队列里面。通过broker定时push去转发消费。
  6. Q:分布式事务? A:(ps:还好我看过RocketMq官网)原理是Base最终一致性,有个本地消息状态表,server发送half消息,如果本地事务执行成功,会提交half消息。提交完成,由客户端去消费消息。 如何保证不丢失消息?消息重投、消息重试过程
  7. Q:你有什么问题要问的吗? A:我很好奇,因为我投的是搜索项目组,我之前也有玩了下es,看了点大厂索引同步的过程。很好奇腾讯是怎么优化的?首先有个大小库,这样的话建立索引的时候,读取会比较快。(ps:我们微商城也是有主从库,来避免说读写的压力)

个人做的不太好的地方:算法方面比较薄弱的,可以看到其他问题还是相对轻松的回答了。继续加油~

腾讯新零售

一面

每个面试官都有自己的特点,这位小哥直接问cpu底层跟操作系统层面。

  1. Q:像字段不断的扩展,会使用什么样的一个优化方案? A:按照我们以前的设计是json去扩展,如果数据量很大的话就炸了(后来请教面试官的话:行转列的实现方案,这个我之前有听过,有点忘记了)
  2. 分布式锁一个获得锁的过程?说了下公平锁,非公平锁争抢的过程
  3. syn cpu,操作系统层面的实现,(瑟瑟发抖)
  4. concurrenthashmap扩展过程,有个扩展因子
  5. 可见性volitial的操作系统的怎么实现的?天啊,怎么跟网易问的一模一样
  6. rocketmq事务消息实现,如果说本地事务执行完,server的事务消息没有反应怎么办?这个我是听过肥朝,朝总之前按照这个思路去设计分布式事务的想法去回答的,就是会有个反查的过程,就是如果一直没有反应,会定时去查这个消息状态表,然后去回滚,提交这个事务。
  7. GC root回收是怎样的一个过程。新生代如果没有引用的话,直接回收,如果老年代有引用新生代的话,会标记card_table?这块我不太熟

总结

个人平时还是偏向业务方面,所以在比较底层方面没有去深入。比较好的地方,很重要的一个环节是问面试官步骤,探讨下不同的思路,促使自己不断的进步!

阿里灵犀互娱

一面

距离地铁站还是蛮远的,听说有班车,楼下看到了

  1. Q:画下你们系统的架构图 A:从spring cloud开始讲,我们注册中心换成nacos,然后gateway,还有hystrix,用户请求之后,数据有些会从redis去读,也会从本地缓存LocalCache读取,谈了一下缓存击穿问题,然后到mysql
  2. Q:限流方面 A:redis+lua,主要是计数器的实现方式。sentinel阿里的限流,我们公司主要用的是阿里的限流产品rds?我没有用过
  3. 设计一个秒杀场景
  4. (ps:仿佛面试官的电脑里头有面试题,哈哈哈)说下tcp,udp的区别
  5. netty了解过吧?说下nio,seletor,还有请求链(InputHandler,OutHandler,编码解码)
  6. 索引的作用,讲下索引失效的情况
  7. 大概问了我redis,mysql部署还有量有多大。其实我们只是并发量很大,但是实际的数据量可能是记录表比较大,在千万级别也有。
  8. 分布式锁的原理,以及了解

比较好的一点是我们在现场面试,有个小黑板,随便画思路,哈哈哈

阿里新零售

一面

总体感受:听说阿里一面是p7,面试官给我的感受就是对项目有模块化清晰的看法。比如说抽奖,具体细化到活动,奖品,用户三个维度,认证资格过程,中奖领取过程。(提到一个奖池概念)

  1. 上来一道算法题,在有序的两个队列里头,怎么找到并集
  2. 讲下锁的过程,其实我们当时在设计的时候还不太好,我也吐槽过,就是锁了整个方法,其实最应该锁的是类似库存-1这个过程而已。后来面试官也讲到了奖池的概念,优点:比如说配置100个奖品,分3天发,每天可以是一个独立的奖池。可以细分,我看其他微商城模块代码也有一个库存,存redis incr校验过程,跟奖池差不多。关键只需要锁扣减这个过程而已,不需要说整个流程锁死了。
  3. 抽奖算法,说下大概有哪些算法,以及相关设计
  4. mysql搜索引擎
  5. 索引构建,有没有了解过ES,我很少用这个
  6. redis的使用场景
  7. 怎么控制两个线程交替?其实就是需要一个可见变量去控制,像atomic类或者volitial
  8. 问了下大概项目模块,内容
  9. 怎么处理线上的问题,还有oom情况
  10. 压测跟限流怎么做的?

今晚的面试特别值,在最后面试官讲整个抽奖模块的时候,奖池概念,其实就是类似中台的概念,像我们以前写的思路,扣减库存,是否超发等等。都可以用这个去完成,说白了就是模块化。 不然你会冗余很多代码,优化的方面也能基于抽奖池去做缓存,像incr递减,用于校验库存的功能,也不用说直接锁死整个方法。

阿里UC

一面

  1. 很长一段时间在梳理我简历上说的项目,也能看到自己简历上的不足吧,就是对项目没有梳理好流程。
  2. 具体项目设计
  3. https证书发放 补下知识
  4. mysql隔离级别,索引构造
  5. GC东西,young gc会发生什么,什么回收算法

二面

部门leader面

  1. 问了面有点广,数据库,缓存,项目设计,安全漏洞等等
  2. mysql达到多少需要用到redis
  3. 项目的物理部署,机器、网管这些
  4. mysql调优做过什么,有没有接触过参数调优
  5. https的过程,能否去配置这个加密的函数
  6. 设计模式,在spring,java里面有什么体现
  7. 询问平时的工作繁忙程度,平时一天的规划

蚂蚁金服-国际支付

一面(电话面)

个人感觉电话面会发挥好些,由于我的电脑有点卡,网络也不太好,OMG~

  1. mysql隔离级别以及对应的锁
  2. 索引,以及一些场景问题
  3. 幂等性的实现,redis的话,如果事务执行失败怎么办?mysql的话,主服务器宕机咋办
  4. 抽奖算法的设计问题
  5. 限流的算法,令牌跟漏桶的区别以及应用
  6. 缓存穿透的问题
  7. 笔试题:第一道其实是TOP k的算法,第二道实际开发的开发命题,大概是只有同步rpc请求数据,怎么短时间内拿到更多的数据

二面

电话面,我家的电脑确实有点卡,庆幸~

  1. 分布式储存的问题,设置过期时间,缓存击穿
  2. 异步,线程池丢失任务的问题,可以使用异步队列重复投送
  3. 索引的构建
  4. 平时在团队的情况,我做过蛮多项目组的,活动中心,微商城,企业系统等等,有些是主力,有些是小弟,论业务熟悉度,我排不到前面,有些干久了就是主力,不管你多菜,是这个道理。但是论技术以及学习能力,我当仁不让,哈哈。
  5. base在深圳的话,离广州蛮近的,可以,加油~

三面

一开始面试官问我意向是p6,还是p7,我想了想有点闷逼,只知道p7应该年包有50-70W吧,不过也冲刺试试~

  1. 如果有个全链路压测的话,你会怎么设计?这就有点把我问闷逼了,如果考察jmeter还是讲讲,那就按正常需求来,肯定是要把正常数据跟压测数据区分开,区分开的话可以有特定的标识,然后这个标识在分布式环境传递,这个跟分布式链路的spaceId跟tarceId原理是一样的,不展开说了。
  2. java 乐观锁跟悲观锁的区别
  3. springboot跟springcloud区别,config的原理,是推还是拉
  4. redis集群部署方式以及区别,为啥比较快,还有跟memcache的区别
  5. mysql一些调优,然后事务隔离级别

四面

  • 事务消息的原理,如果保证消息不丢失。(ps:我觉得个人没有回答错,发送端多次重投的机制,然后会有标识,ok,fail,进行多次发送。Broker的话,有同步,异步刷盘的过程,消费端消息重试去解决)

  • 索引,聚集索引跟唯一索引的区别

每次面试官给忠告的话,感觉凉凉,哈哈。

  • 一般建议2-3年跳比较好,这个年限自己控制不了的,让时间去回答。我也见过蛮多两年跳大厂,从蘑菇街到阿里,从小厂到网易,虎牙到腾讯pcg,当然要么学历好,技术底子牛,履历好,工作年限不是问题。
  • 项目对口,我之前做电商,蚂蚁更多的是金融类,意味着需要消耗更多时间去熟悉,确实~多花点时间跟精力也是可以解决的,这个也是招聘者参考的点。
  • 思考自己以后是往业务还是中台去发展,这个有点模糊。像我们公司的中台,其实就是一个领域的模块,让其他模块调用,跟做业务差不多的。我的理解面试官的意思应该是公司内部中间件跟业务部门。

hr面

阿里的hr面基本都是问过往项目经验,以及在团队承担角色

在这里插入图片描述 本博主只能重新整理下回答这类题的要点,吃一暂长一智。

阿里乌鸫科技

电话面(一面)

我刚刚健身完,忽然电话面有点猝不及防,哈哈

  1. threadlocal
  2. 分布式锁
  3. 找出单项列表的的倒数第k个节点,以及有没有优化的方案,当时闷逼了,以为是linkedlist
  4. 红黑树跟二叉树的区别

二面

  1. springboot启动流程
  2. 分布式锁
  3. springcloud注册中心流程
  4. cap
  5. hashtable,ConcurrentHashMap区别
  6. 项目优化点
  7. 多线程

三面(视频面)

  1. 分布式锁
  2. 限流
  3. 平时怎么学技术点
  4. 对工作地点的看法
  5. 平时工作的闲忙情况

在面试过程中,我能感觉到个人表达能力在不断提高。挺棒的,加油~

蘑菇街

一面

面试官的印象:很实在,也挺好的。在面试过程中,会提醒我不用很紧张。其次是面试重点都放在业务实现过程,就很实在。因为我觉得最终还是需要业务来实现价值输出,业务再结合技术。一句话:特别实在。

  1. Q:有没有特别想分享的地方? A:说了下抽奖模块。问了我用户发放奖品的流程是怎样的? 为啥要用定时器(ps:主要是我们有些是凌晨开奖的) 怎么保证用户不重复领取?mysql 唯一索引,抽奖的时候check一下资格,redis防止并发开奖过程
  2. Q:如何扣减库存 A:mysql 库存=库存-1 大于0
  3. 谈下注册中心的流程?
  4. 你们的抽奖代码是每次都新建吗?其实我们每次都会新建,因为算法,或者规则不一样。后来我也有想过优化,比如说抽奖算法,库存扣减,配置化都是能变成模块化,如果说有不同的策略,可以用策略模式。

YY直播

一面

早上视频面,在牛客网,昨晚面UC,浏览器一直卡,牛客的还可以。

  1. Java8一些特性是什么
  2. 线上cpu很高怎么排查
  3. 有没有了解过threadlocal
  4. 线程池用过吗?你会注意哪些点
  5. 你们的服务注册发现是怎么做的?还有哪些框架?有了解dubbo吗
  6. 如果让你review别人代码,你会怎么做?
  7. 你的职业发展规划

YY ShopLine

一面

  • 对公司的认识
  • springboot加载其他框架的方式
  • syn 原理,volitial原理,MVSI内存,(可能单词有点拼错,我后续补上知识点)
  • concurrent包下原理AQS
  • ReentranLock原理,公平锁跟非公平锁
  • 多线程
  • 如果有三个方法需要同时执行,然后再返回,你会怎么做
  • mysql innodb数据结构,跟b树的区别,索引

查漏补缺

欢聚电商

一面

好吧,我又过来被摩擦了一下,因为这是第二次面电商项目组了。 记下我不会的题目吧:

  1. java的线程模型,1对1,简单粗暴,但是也会比较消耗资源,多对1,一个内核线程可以控制多个用户线程,可以方便查看多个线程的操作,但是会造成阻塞。多对多,比较复杂,需要进行中间态协调
  2. AQS 的数据结构,采用FIFO先进先出一个队列,然后有头尾node
  3. springboot加载原理以及自定义start,尴尬死了,这是面通过部门第二次遇到这个问题,回头反思总结下~
  4. 分布式锁两个参数还不太熟悉,waitTime,leaseTime

欢聚活动中台

一面

记录下自己忘记的面试题:

  1. ReentranLock怎么提前释放锁
  2. 阻塞队列的实现方式,哭了,太久没有复习
  3. 索引覆盖 看下58沈剑大佬的博客

充下电:

阻塞队列,首先有个队列,其次是会有阻塞对象,Condition notfull,notEmpty,然后通过这个对象去await等待还有唤醒,然后使用syn去控制并发操作

大概面试题:

  1. 微服务存在的问题
  2. 项目用的知识点:分布式锁,redis数据结构,消息中间件(可靠性,类型),mysql索引类型
  3. java知识:syn,volitail,阻塞队列,锁,线程池(可能遇到的问题,比如说异常,优雅关闭线程池)

货拉拉

一面

记录下漏下的点

  1. Class.forName和ClassLoader区别 这里设计类加载问题,先加载,连接,初始化,连接包括校验,解析。Class.forName是拿到初始化后的类,ClassLoader是没有连接的类

微众银行

也是记录下漏下的点

  1. 定时器框架的区别 比如说xxl-job的话缺点是使用DB锁来实现唯一性,当任务比较多的时候会造成资源争抢 quart的话,无法人性化,跟业务代码冗余比较大

整体总结

  1. 简历上的项目要梳理好流程,包括项目背景,模块,自己负责的工作

  2. 面试的时候要把面试官往自己熟悉的领域牵引

  3. java基础要打牢固,以及平时刷下leecode

  4. 要展示自己,我平时会比较谦虚,但是到该展示自己的时候,要更好的表现自己。我也有个缺点就是表达能力有待提高。

  5. 在面阿里UC部门的时候,老大跟我讲我的一些项目细节还没有到位,就是没法量化这个指标,比如说并发。