网易
一面
主要是介绍下项目,谈到处理并发跟优化的问题
- 个人简历讲到二级缓存,里面有一个一直困扰我的问题:就是如何刷新机器集群里面的缓存,我当时回答说根据一个变量来大家一起刷新,比如放在redis上。 后面请教面试官,解惑我很久以前的疑惑:可以使用zk的广播,牛皮~(我怎么没有想到,其实也可以使用redis发布、订阅模式)
- redis基础数据结构,底层构造(一万多个槽,通过算法去找哪台机器,跳表),高可用(raft算法,哨兵模式,一致性hash)
- jvm相关,从一个类的初始化的过程,谈到jvm,以及如何调优(ps:面试官人很好,一直引导) 回收器:CMS,G1 年轻代回收,老年代,永久代
- 索引为啥快,b+树,我记得好像没有说错,就是通过索引来建立树,既然数据已经排好序,查询自然快
- 简历谈到锁,讲了下分布式锁,java锁(ReentranLock,Syn...,volitial) 被问到为啥使用分布式锁,初衷还是为了解决并发操作导致的问题,面试官说应该使用数据库的锁,确实这里设计有点问题。当然期间会导致大家都卡住在这里等待,说到怎么优化。话又说回来,如果全部采用mysql的锁量大的话会导致数据库锁的争抢,还是让他们去争抢redis锁吧,哈哈。
二面
- socket完整请求过程(由于我实习的项目是使用socket实现聊天功能,有点久远了,哈哈)
- tcp三次握手四次挥手,客户端如果没有收到消息怎么办
- 请求加密,由于我简历写了,嘻嘻 。这个大家可以去看下,有些细节真的很细。比如加时间戳,保证不会超时被别人拿到使用,还有参数+时间戳+随机数(排序),也就是混淆,然后加密算法加盐,salt,增加别人破解的难度。
- 聊下项目,谈下人生,哈哈(ps:这次面试有点小紧张,面试官很nice,亲切)主要谈下我平时怎么处理并发、调优等等。这一块我可有经验,也很感兴趣。开涛大佬说过三把斧:限流,降级、缓存。我平时也喜欢琢磨这琢磨那,看看我们后台阿里的链路追踪的慢查询,调优,成就感满满的~
感悟:我觉得每一次面试有很多收获,不仅仅是一个检验基础的时刻,也是一次技术交流,有时回答不上来,也能请教下面试官,别人的思路以及可以借鉴好的技术方案。 我个人蛮喜欢读书的,书是人生的老师,生活更如此。我们要在生活的细节处,找到每一个能让自己进步的地方,虚心请教。
唯品会
一面
电话面,嘟...
- 自我介绍,巴拉巴拉
- 你看过spring官网谈谈。spring官网大概一些:资源Resource,国际化i18n,验证这些模块,具体看我的知识体系
- 然后讲了下jvm相关,从类加载过程,双亲委派(唯一性),jvm构造,3个年轻代,年老代,永久代,回收算法。
- 讨论下官网中英文MessageSource的实现,跟官网的i18n的区别。由于我们用了shardingJdbc,那个配置我有点忘了,就是根据配置,比如你这个sql会跳到哪个库,哪张表。
- 谈下这个抽奖用到一些技术,分布式锁,抽奖算法,mysql一些优化,redis缓存。很多面试官都会问我:你们redis是怎么部署的,有几台。啊哈哈哈,我们都是用了阿里的产品所以没有具体去了解。
- 然后来一个逻辑题:一个杯子6升水,一个杯子5升水,如何倒出3升水,我是没有想到会问这个的,omg
- mysql官网你也是看过的,大概讲下。事务级别,间隙锁,谈到我们生产遇到的问题:之前有个老哥就是索引设计不好,一个操作批量插入,一个操作是更新,经常导致死锁。后面我们架构师就把mysql改成rc级别,从此没有出现死锁情况,然后我再谈下索引失效的情况。
- 然后问了我们技术框架
- 最后我问了唯品会的技术框架,很多自研,挺强的,nice~
腾讯
一面
- 上来就是一道算法题,蛇形打印二叉树
- 自我介绍,巴拉巴拉
- 简历写着处理并发东西,简单介绍一下。又是引用了开涛大佬的 那三板斧,限流:hystrix(信号量、线程池拒绝策略,讲一下线程池的原理,核心参数),缓存(redis,本地缓存guavaCache)谈到缓存击穿问题,以及实现。
- 分布式锁(redis px nx ,redission看门狗,红锁) Q:谈谈对分布式锁的看法 A:(ps:很简单)不外乎就是为了防止并发操作导致的问题,像java reentranlock,syn只是适用于本地,对于分布式环境需要一个分布式锁来解决并发问题。
- 谈到怎么实现一个延迟任务,定时器的话也是有延迟的。我谈到了一个是redis key过期监听事件,另一个实现是zset,去排序任务,快过期的任务取出来,然后推到MQ的延迟队列里头。 Q:Mq延迟实现?举了RabbitMq案例,它有两种实现,一种是配置死信队列,一种延迟插件。 原理是:一直消费失败,达到一定的次数之后,丢到死信队列里面。通过broker定时push去转发消费。
- Q:分布式事务? A:(ps:还好我看过RocketMq官网)原理是Base最终一致性,有个本地消息状态表,server发送half消息,如果本地事务执行成功,会提交half消息。提交完成,由客户端去消费消息。 如何保证不丢失消息?消息重投、消息重试过程
- Q:你有什么问题要问的吗? A:我很好奇,因为我投的是搜索项目组,我之前也有玩了下es,看了点大厂索引同步的过程。很好奇腾讯是怎么优化的?首先有个大小库,这样的话建立索引的时候,读取会比较快。(ps:我们微商城也是有主从库,来避免说读写的压力)
个人做的不太好的地方:算法方面比较薄弱的,可以看到其他问题还是相对轻松的回答了。继续加油~
腾讯新零售
一面
每个面试官都有自己的特点,这位小哥直接问cpu底层跟操作系统层面。
- Q:像字段不断的扩展,会使用什么样的一个优化方案? A:按照我们以前的设计是json去扩展,如果数据量很大的话就炸了(后来请教面试官的话:行转列的实现方案,这个我之前有听过,有点忘记了)
- 分布式锁一个获得锁的过程?说了下公平锁,非公平锁争抢的过程
- syn cpu,操作系统层面的实现,(瑟瑟发抖)
- concurrenthashmap扩展过程,有个扩展因子
- 可见性volitial的操作系统的怎么实现的?天啊,怎么跟网易问的一模一样
- rocketmq事务消息实现,如果说本地事务执行完,server的事务消息没有反应怎么办?这个我是听过肥朝,朝总之前按照这个思路去设计分布式事务的想法去回答的,就是会有个反查的过程,就是如果一直没有反应,会定时去查这个消息状态表,然后去回滚,提交这个事务。
- GC root回收是怎样的一个过程。新生代如果没有引用的话,直接回收,如果老年代有引用新生代的话,会标记card_table?这块我不太熟
总结
个人平时还是偏向业务方面,所以在比较底层方面没有去深入。比较好的地方,很重要的一个环节是问面试官步骤,探讨下不同的思路,促使自己不断的进步!
阿里灵犀互娱
一面
距离地铁站还是蛮远的,听说有班车,楼下看到了
- Q:画下你们系统的架构图 A:从spring cloud开始讲,我们注册中心换成nacos,然后gateway,还有hystrix,用户请求之后,数据有些会从redis去读,也会从本地缓存LocalCache读取,谈了一下缓存击穿问题,然后到mysql
- Q:限流方面 A:redis+lua,主要是计数器的实现方式。sentinel阿里的限流,我们公司主要用的是阿里的限流产品rds?我没有用过
- 设计一个秒杀场景
- (ps:仿佛面试官的电脑里头有面试题,哈哈哈)说下tcp,udp的区别
- netty了解过吧?说下nio,seletor,还有请求链(InputHandler,OutHandler,编码解码)
- 索引的作用,讲下索引失效的情况
- 大概问了我redis,mysql部署还有量有多大。其实我们只是并发量很大,但是实际的数据量可能是记录表比较大,在千万级别也有。
- 分布式锁的原理,以及了解
比较好的一点是我们在现场面试,有个小黑板,随便画思路,哈哈哈
阿里新零售
一面
总体感受:听说阿里一面是p7,面试官给我的感受就是对项目有模块化清晰的看法。比如说抽奖,具体细化到活动,奖品,用户三个维度,认证资格过程,中奖领取过程。(提到一个奖池概念)
- 上来一道算法题,在有序的两个队列里头,怎么找到并集
- 讲下锁的过程,其实我们当时在设计的时候还不太好,我也吐槽过,就是锁了整个方法,其实最应该锁的是类似库存-1这个过程而已。后来面试官也讲到了奖池的概念,优点:比如说配置100个奖品,分3天发,每天可以是一个独立的奖池。可以细分,我看其他微商城模块代码也有一个库存,存redis incr校验过程,跟奖池差不多。关键只需要锁扣减这个过程而已,不需要说整个流程锁死了。
- 抽奖算法,说下大概有哪些算法,以及相关设计
- mysql搜索引擎
- 索引构建,有没有了解过ES,我很少用这个
- redis的使用场景
- 怎么控制两个线程交替?其实就是需要一个可见变量去控制,像atomic类或者volitial
- 问了下大概项目模块,内容
- 怎么处理线上的问题,还有oom情况
- 压测跟限流怎么做的?
今晚的面试特别值,在最后面试官讲整个抽奖模块的时候,奖池概念,其实就是类似中台的概念,像我们以前写的思路,扣减库存,是否超发等等。都可以用这个去完成,说白了就是模块化。 不然你会冗余很多代码,优化的方面也能基于抽奖池去做缓存,像incr递减,用于校验库存的功能,也不用说直接锁死整个方法。
阿里UC
一面
- 很长一段时间在梳理我简历上说的项目,也能看到自己简历上的不足吧,就是对项目没有梳理好流程。
- 具体项目设计
- https证书发放 补下知识
- mysql隔离级别,索引构造
- GC东西,young gc会发生什么,什么回收算法
二面
部门leader面
- 问了面有点广,数据库,缓存,项目设计,安全漏洞等等
- mysql达到多少需要用到redis
- 项目的物理部署,机器、网管这些
- mysql调优做过什么,有没有接触过参数调优
- https的过程,能否去配置这个加密的函数
- 设计模式,在spring,java里面有什么体现
- 询问平时的工作繁忙程度,平时一天的规划
蚂蚁金服-国际支付
一面(电话面)
个人感觉电话面会发挥好些,由于我的电脑有点卡,网络也不太好,OMG~
- mysql隔离级别以及对应的锁
- 索引,以及一些场景问题
- 幂等性的实现,redis的话,如果事务执行失败怎么办?mysql的话,主服务器宕机咋办
- 抽奖算法的设计问题
- 限流的算法,令牌跟漏桶的区别以及应用
- 缓存穿透的问题
- 笔试题:第一道其实是TOP k的算法,第二道实际开发的开发命题,大概是只有同步rpc请求数据,怎么短时间内拿到更多的数据
二面
电话面,我家的电脑确实有点卡,庆幸~
- 分布式储存的问题,设置过期时间,缓存击穿
- 异步,线程池丢失任务的问题,可以使用异步队列重复投送
- 索引的构建
- 平时在团队的情况,我做过蛮多项目组的,活动中心,微商城,企业系统等等,有些是主力,有些是小弟,论业务熟悉度,我排不到前面,有些干久了就是主力,不管你多菜,是这个道理。但是论技术以及学习能力,我当仁不让,哈哈。
- base在深圳的话,离广州蛮近的,可以,加油~
三面
一开始面试官问我意向是p6,还是p7,我想了想有点闷逼,只知道p7应该年包有50-70W吧,不过也冲刺试试~
- 如果有个全链路压测的话,你会怎么设计?这就有点把我问闷逼了,如果考察jmeter还是讲讲,那就按正常需求来,肯定是要把正常数据跟压测数据区分开,区分开的话可以有特定的标识,然后这个标识在分布式环境传递,这个跟分布式链路的spaceId跟tarceId原理是一样的,不展开说了。
- java 乐观锁跟悲观锁的区别
- springboot跟springcloud区别,config的原理,是推还是拉
- redis集群部署方式以及区别,为啥比较快,还有跟memcache的区别
- mysql一些调优,然后事务隔离级别
四面
-
事务消息的原理,如果保证消息不丢失。(ps:我觉得个人没有回答错,发送端多次重投的机制,然后会有标识,ok,fail,进行多次发送。Broker的话,有同步,异步刷盘的过程,消费端消息重试去解决)
-
索引,聚集索引跟唯一索引的区别
每次面试官给忠告的话,感觉凉凉,哈哈。
- 一般建议2-3年跳比较好,这个年限自己控制不了的,让时间去回答。我也见过蛮多两年跳大厂,从蘑菇街到阿里,从小厂到网易,虎牙到腾讯pcg,当然要么学历好,技术底子牛,履历好,工作年限不是问题。
- 项目对口,我之前做电商,蚂蚁更多的是金融类,意味着需要消耗更多时间去熟悉,确实~多花点时间跟精力也是可以解决的,这个也是招聘者参考的点。
- 思考自己以后是往业务还是中台去发展,这个有点模糊。像我们公司的中台,其实就是一个领域的模块,让其他模块调用,跟做业务差不多的。我的理解面试官的意思应该是公司内部中间件跟业务部门。
hr面
阿里的hr面基本都是问过往项目经验,以及在团队承担角色
本博主只能重新整理下回答这类题的要点,吃一暂长一智。
阿里乌鸫科技
电话面(一面)
我刚刚健身完,忽然电话面有点猝不及防,哈哈
- threadlocal
- 分布式锁
- 找出单项列表的的倒数第k个节点,以及有没有优化的方案,当时闷逼了,以为是linkedlist
- 红黑树跟二叉树的区别
二面
- springboot启动流程
- 分布式锁
- springcloud注册中心流程
- cap
- hashtable,ConcurrentHashMap区别
- 项目优化点
- 多线程
三面(视频面)
- 分布式锁
- 限流
- 平时怎么学技术点
- 对工作地点的看法
- 平时工作的闲忙情况
在面试过程中,我能感觉到个人表达能力在不断提高。挺棒的,加油~
蘑菇街
一面
面试官的印象:很实在,也挺好的。在面试过程中,会提醒我不用很紧张。其次是面试重点都放在业务实现过程,就很实在。因为我觉得最终还是需要业务来实现价值输出,业务再结合技术。一句话:特别实在。
- Q:有没有特别想分享的地方? A:说了下抽奖模块。问了我用户发放奖品的流程是怎样的? 为啥要用定时器(ps:主要是我们有些是凌晨开奖的) 怎么保证用户不重复领取?mysql 唯一索引,抽奖的时候check一下资格,redis防止并发开奖过程
- Q:如何扣减库存 A:mysql 库存=库存-1 大于0
- 谈下注册中心的流程?
- 你们的抽奖代码是每次都新建吗?其实我们每次都会新建,因为算法,或者规则不一样。后来我也有想过优化,比如说抽奖算法,库存扣减,配置化都是能变成模块化,如果说有不同的策略,可以用策略模式。
YY直播
一面
早上视频面,在牛客网,昨晚面UC,浏览器一直卡,牛客的还可以。
- Java8一些特性是什么
- 线上cpu很高怎么排查
- 有没有了解过threadlocal
- 线程池用过吗?你会注意哪些点
- 你们的服务注册发现是怎么做的?还有哪些框架?有了解dubbo吗
- 如果让你review别人代码,你会怎么做?
- 你的职业发展规划
YY ShopLine
一面
- 对公司的认识
- springboot加载其他框架的方式
- syn 原理,volitial原理,MVSI内存,(可能单词有点拼错,我后续补上知识点)
- concurrent包下原理AQS
- ReentranLock原理,公平锁跟非公平锁
- 多线程
- 如果有三个方法需要同时执行,然后再返回,你会怎么做
- mysql innodb数据结构,跟b树的区别,索引
查漏补缺
欢聚电商
一面
好吧,我又过来被摩擦了一下,因为这是第二次面电商项目组了。 记下我不会的题目吧:
- java的线程模型,1对1,简单粗暴,但是也会比较消耗资源,多对1,一个内核线程可以控制多个用户线程,可以方便查看多个线程的操作,但是会造成阻塞。多对多,比较复杂,需要进行中间态协调
- AQS 的数据结构,采用FIFO先进先出一个队列,然后有头尾node
- springboot加载原理以及自定义start,尴尬死了,这是面通过部门第二次遇到这个问题,回头反思总结下~
- 分布式锁两个参数还不太熟悉,waitTime,leaseTime
欢聚活动中台
一面
记录下自己忘记的面试题:
- ReentranLock怎么提前释放锁
- 阻塞队列的实现方式,哭了,太久没有复习
- 索引覆盖 看下58沈剑大佬的博客
充下电:
阻塞队列,首先有个队列,其次是会有阻塞对象,Condition notfull,notEmpty,然后通过这个对象去await等待还有唤醒,然后使用syn去控制并发操作
大概面试题:
- 微服务存在的问题
- 项目用的知识点:分布式锁,redis数据结构,消息中间件(可靠性,类型),mysql索引类型
- java知识:syn,volitail,阻塞队列,锁,线程池(可能遇到的问题,比如说异常,优雅关闭线程池)
货拉拉
一面
记录下漏下的点
- Class.forName和ClassLoader区别 这里设计类加载问题,先加载,连接,初始化,连接包括校验,解析。Class.forName是拿到初始化后的类,ClassLoader是没有连接的类
微众银行
也是记录下漏下的点
- 定时器框架的区别 比如说xxl-job的话缺点是使用DB锁来实现唯一性,当任务比较多的时候会造成资源争抢 quart的话,无法人性化,跟业务代码冗余比较大
整体总结
-
简历上的项目要梳理好流程,包括项目背景,模块,自己负责的工作
-
面试的时候要把面试官往自己熟悉的领域牵引
-
java基础要打牢固,以及平时刷下leecode
-
要展示自己,我平时会比较谦虚,但是到该展示自己的时候,要更好的表现自己。我也有个缺点就是表达能力有待提高。
-
在面阿里UC部门的时候,老大跟我讲我的一些项目细节还没有到位,就是没法量化这个指标,比如说并发。