【Java后端面经】2021-5月字节跳动热乎凉经!

55 篇文章 0 订阅
11 篇文章 0 订阅

一面:时间5月10号 20:00,

1.项目相关(我是做支付交易相关的,刚好面的也是支付部门)
其中有个问题:① 热点账户如何解决的;② 只出账户拆分成多个子账户,那某个子账户进行扣减的时候,该子账户钱不够了怎么办?

2.如何解决资源竞争激烈问题,转换一下问题就是并发场景下如何提升性能。说我使用java,那就已java语言为例,说说你使用的
说了:乐观锁、悲观锁(java各种锁相关,不过字节不是java,所以没有详细说,大概说了下思路),这个主要还是往如何在并发场景下提升处理性能,两个大方向:
① 尽量实现不共享数据,并发线程独享(然后提了threadLocal)
② 如果无法避免共享,首先可以考虑选择CAS + 自旋(乐观锁,竞争不是非常激烈的场景适用), 加同步锁场景下尽量:减少锁粒度、锁时间、拆分共享数据(和上面的热点账户解决方案对应)

3.MySQL相关
① 各事务隔离级别,每种隔离级别区别、能解决什么样的问题
② 可重复读隔离级别如何实现的
③ redo log 和 undo log 区别和作用,保存的内容
④ 项目中是否参与过表设计,在进行表设计时,你会考虑哪些方面?(尽量多说自己的考虑) 比如创建索引(普通索引、联合索引、唯一索引)该考虑哪些、如何给大字段创建索引等等,尽量多说,不过要说好这个,还是得先学好MySQL底层的一些原理,再加上实践

4.Redis 中如果某个请求命令响应比较久,会是哪些原因
我的回答:① 可能命令本身涉及的数据操作耗时有些高(bigKey查询、聚合运算)
② redis服务刚好在RDB持久化(bgsave 时,主线程fork子进程也是会被阻塞的,redis实例保存的数据量越多,阻塞时间越久)
③ 可能出现网络环境拥堵
写面经的时候想到的:
④ 可能请求命令到达了redis,但是由于redis单线程处理命令机制,该命令前面有其他的大的事务、bigkey等耗时的命令在处理
⑤ bgrewriteaof AOF日志重写(如果开启了的话),也是需要主线程fork子进程

5.算法:力扣155最小栈的小改版,getMin换成getMax,可能前面面的久,就出了一道题,刷过的,忘记了,再加上面试有些紧张把getMax实现想多了,然后面试官帮忙分析和指引,最后是做出来了

一面总结:
暂时记得这些,问的基础的都是自己会的,而且在团队内做过分享的,但是回答的时候因为有些紧张(今年没面过,直接来面字节了,没有先试试手)答不是很顺,面试时长 1h10min 左右

二面:时间5月11号 20:00

先大概总结下:范围不广,但是相对问的比较深!基本没聊项目 总共面了 1h20min
1.开始就来框架 (这是我目前近一年多学习最少的,基本没有学习框架源码之内的),spring中的bean的生命周期等(这个面试官应该之前java转来的,前面问了很多java相关的,哎~本以为不会怎么问java相关的)

2.java中的concurrenthashmap 1.8的有什么新的特性(答得不全、之前看了,忘记了,最近备战真没怎么看java源码相关的,之前知道的也都忘了差不多了)

3.如何将非常多的数据高效快速的插入到concurrenthashmap中?
我答得是初始尽量开辟可预知的初始容量,避免频繁扩容、如果实在无法避免,就改造扩容机制(采用和redis一样的渐进式扩容机制),然后面试官说还有呢?其实一直往改造concurrenthashmap的方向在想,然后实在想不出了,让面试官给点提示,然后面试官提到使用多线程(….这….我内心感觉这不是必须的吗?concurrenthashmap能保证线程安全)
但是又接着问说多线程情况下,即使锁粒度再小,也会存在同步竞争问题,这种情况怎么办,性能还是会有影响(脑袋一时间空白,事后分析想到应该是想让我说出1.8加入的CAS,自旋+CAS在竞争的时候不会使线程状态转换,如果用锁方式会使线程释放CPU进入到阻塞等待态,这就意味着会有线程上下文切换,带来性能上的影响)

4.零拷贝了解吗,什么原理,什么场景下会使用,说了基本流程(被面试官说不够细,有点粗)和零拷贝使用场景,但是面试官问的细,说你没有说到磁盘数据如何到的内核缓冲区(DMA)、到内核缓冲区后如何通知CPU(软中断)等等,看过,主要是忘记了,在面试官来看不够透彻,总结不够

5.数据库:什么场景下索引会失效:显示函数、隐式函数转换、索引值区分度不够优化器最终不会选择、数据量少的时候、模糊查询没有使用到前缀原则、not null(就提了这一个问题,数据库还好,二面面试官说一面面试官反馈我数据库方面不错,所以二面面试官直接说了不会怎么提数据库了)

6.分布式事务两阶段提交存在的问题、三阶段提交又是什么,解决了什么问题?(其实之前学架构专栏的时候,思考过,奈何时间久了,事后才想起来)

7.RocketMQ 分布式事务实现的步骤流程

8.Reactor、Proactor模型,答了几种IO模型,以及Reactor和Proactor对应的IO模型,但是不是面试官想要的,面试官想问的Reactor哪三种实现,(事后也发现学过,但是忘记了,另外可能今天面的时候脑子也不好使,昨晚失眠了,一整天都是想呕的状态)

二面总结:

1)状态问题,这次二面提到的问题除了java框架类的,都是之前是有花时间学过也思考过的,但是就是忘记了或者说这次面试状态不是完全在线脑子迟钝(没休息好)
2)反思一下,之前学习的时候有些东西没有高度总结,当时学的时候确实影响深刻,但是过段时间特别想这种面试场景,可能因为前面答得不好心里的连锁反应,就会出现思考停滞、脑袋空白(主要是第一个问题就是java框架,可能自己心理素质也有关吧)
3)二面其实范围也不是很广,主要是比较深,网络相关的、redis、并发、设计模式这些个人感觉还是有一些沉淀的,然后还有一些案例设计、架构相关的都没问
4)自己经常用的java语言框架没准备,自以为像字节是go,java框架相关的应该不会问,要问也是一些架构设计相关或者设计题相关的

总结:有时候面试的时候,问到不会的或者顿时没有思路的,不要一时间脑子一片空白就内心慌了,可以多请教面试官能不能稍微指引一下,往往可以让你想起来,如果你真的之前有过深入全面的思考和总结的话,肯定能通过面试官的指引后说出远不仅只有标准答案的回答。另外要再多学会总结。
最近一直在准备,完全忽略了生活,或许缘分还没到、实力也还不够,长路漫漫,把心态和节奏缓下来, 再沉淀沉淀吧~

最后说一句,小编整理了2021最新完整面试题及答案(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、JVM、源码、算法等详细讲解,详细的学习规划图等学习资料,点击此链接即可领取!

                     (求关注)如果觉得本文对你有帮助,请三连支持一下 谢谢!

在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值