拿下了!费时两个月成功拿下了字节offer,在这里分享一下我的四面面经吧

235 篇文章 3 订阅
181 篇文章 0 订阅

写在前面:

一面问得过于简单,二面,三面难度适中过于困难。整体的体验还行。。

字节一面

1.Java如何实现线程安全(synchronized,ReentrantLock,AtomicInteger,ThreadLocal,CAS)

2.CAS如何解决ABA问题(版本号)

3.AtomicInteger的原理(UnSafe类,底层是一句CPU指令,避免了并发问题)

4.可重入锁是什么,非可重入锁又是什么(略

5.代码,实现生产者和消费者,一个长度100的buffer,10个生产者线程,10个消费者线程
(我用了ReentrantLock跟Condition,结果忘记了锁的包路径是啥了,我写成了java.util.concurrent.,后来才知道是java.util.concurrent.locks.。。。)

6.对着代码提问,判定条件的while能不能换成if,为什么?为什么用signalAll,可不可以换成signal,二者有什么区别?
7.Spring,AOP是什么,IOC是什么

8.二叉树的概念?红黑树又是什么,红黑树和其他平衡树的区别在哪

9.TCP三次握手的过程,重发报文的过程。

10.TCP和UDP的区别

11.说一下哪个项目觉得最有挑战,有几个模块,介绍一下

12.代码,LeetCode76

字节二面

1.MySQL的事务特性,事务隔离级别,分别解决了什么问题

2.间隙锁是什么,具体什么时候会加锁(具体什么时候加锁,这里要把所有情况都说清楚。。

3.SQLite如何加锁

4.Java里的锁,有哪几种(synchronized和Reentrantlock)

5.ReentrantLock有哪些特性(可重入,公平锁),可重入是如何实现的(有一个引用数,非可重入只有01值)

6.当某个线程获取ReentrantLock失败时,是否会从内核态切换回用户态?ReentrantLock如何存储阻塞的线程的?(AQS,不断轮询前一个结点是否状态发生了变化)所以什么是自旋锁?

7.JVM,说一下最熟悉的GC(我说了CMS,讲了并行回收,浮动垃圾,最短STW等等),然后追问我CMS的整个回收流程,标记,清理等等,年轻代怎么回收等等。(被问倒了。

7.Redis的持久化如何做到的?(RDB+AOF)

8.RDB具体是如何实现的,RDB生成快照的时候,Redis会阻塞掉吗?(使用BgSave,fork一个子进程去并行生成快照,不会阻塞)

9.既然生成快照的中途依然可以执行Redis,那么从节点获取到快照是不完整的,如何同步?(主从同步,先建立连接,然后命令传播,两个结点中的buffer队列里存储一个offset,差值就是需要同步的值)

10.设计题,设计一个扫码登陆(不会)那换成设计微信红包功能(MySQL的字段,Redis缓存一致性,发红包如何add字段,抢红包如何修改字段,通过一个唯一的版本号去保证CAS的ABA得到解决。但说了很久,面试官依然认为思路混乱)

11.算法题,n*n的矩阵,只能向右或向下移动,从最左上方移动到最右下方,把所有的路径输出(回溯,但剪枝忘了。前面的也答得不好,差不多就溜溜球了,也没有继续挣扎了。。)

字节三面

tcp三次握手 四次挥手

为什么3次钱2次4次行吗

为什么2msl

场景题 一个很大的文件传输到网络上 但网络不稳定 怎么减少重传

怎么确定传上去的文件没有错误

http和https

https的实现

redis了解多少

分布式锁的实现

lur脚本的作用

项目模块有哪些

cookie和session

场景题多个微服务统一登录 session的处理

一个线程打印奇数一个线程打印偶数 交替打印

数组中有无重复元素 不能用hashmap 双指针

反问

技术栈

我的面试经验汇总

下面先给大家上一个总的目录大纲,基础的东西就不进行过多的赘述,我们将会从面试必问的说起,同时由于每篇的内容过多,我们也只说重点,太过基础的内容谁都会,我就不多敲字浪费大家的时间了!
有需要的朋友点击这里自取就好了,希望资料对你有帮助!

SpringCloud

Redis

JVM

MySQL

Zookeeper

Kafka

Dubbo

spring

Rabbitmq

springboot

最后

由于文章篇幅有限,PDF的内容又很多,全部手敲下来很累…所以需要阅读阅读学习的,大家“一件三连后:“查看下方””即可拿到手之后自己学习吧,博主真的打字打累了。

有需要的朋友点击这里自取就好了,希望资料对你有帮助!
预祝大家前程似锦,工作顺利!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你需要在 UI 线程中执行费时操作,那么你可以使用 `async` 和 `await` 关键字来实现异步操作,从而避免阻塞 UI 线程。具体步骤如下: 1. 在按钮的 `Click` 事件中,将费时操作封装成一个异步方法,并使用 `await` 来等待方法执行完成。这样可以确保在执行费时操作时不会阻塞 UI 线程,并且在操作完成后,可以在 UI 线程中继续执行后续的操作。 2. 在异步方法中,使用 `Task.Delay()` 方法来模拟费时操作。你可以将 `Task.Delay()` 方法的参数设置为你需要的等待时间。在等待时间过程中,UI 线程可以继续执行其他操作。 3. 在异步方法中,使用 `Dispatcher.Invoke()` 或 `Dispatcher.BeginInvoke()` 方法来更新 UI 界面。这样可以确保在 UI 线程中进行更新操作,避免出现更新 UI 界面失败的问。 下面是一个示例代码: ``` private async void Button_Click(object sender, RoutedEventArgs e) { // 显示加载动画 this.loadingControl.Visibility = Visibility.Visible; // 执行费时操作 await Task.Run(async () => { // 模拟费时操作 await Task.Delay(5000); // 更新 UI 界面 this.Dispatcher.Invoke(() => { // 更新 UI 界面 // ... }); }); // 取消加载动画 this.loadingControl.Visibility = Visibility.Collapsed; } ``` 在这个示例代码中,我们使用了一个 `Task.Delay(5000)` 方法来模拟一个需要等待 5 秒钟的费时操作。在等待时间过程中,UI 线程可以继续执行其他操作。在费时操作完成后,我们使用了 `Dispatcher.Invoke()` 方法来更新 UI 界面。最后,我们取消了加载动画。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值