本科毕业斩获字节offer的我做了什么准备?大厂面试经验试题分享

本文分享了作者本科毕业后成功获得字节跳动offer的面试经验,涵盖了字节跳动的面试流程,包括笔试和面试环节。在技术面试中,重点讨论了Java多线程、JVM、Redis、Spring等相关问题,提供了详细的试题解析,包括volatile关键字的使用场景、多线程同步、线程局部变量等。同时,文中还提及了其他大厂如美团点评的面试题,以及Java集合框架、IO和NIO、最佳实践等多个面试热门话题。
摘要由CSDN通过智能技术生成

前言

字节面试整体流程大致分为笔试,性格测试,面试,综合面试,回学校等结果。笔试来说,字节的难度较中等,选择题难度和网易腾讯差不多。最后的代码题,相比下来就简单很多,一共3道题目,前2题很容易就AC,题目已经记不太清楚,不过难度确实不大。最后一题最后提交的代码过了75%的样例,一直没有发现剩下的25%可能存在什么坑。

笔试部分太久远,我就不怎么回忆了。直接将面试。

面试

如果说腾讯的面试是挥金如土(毕竟每个面试官都配了一间单独的房间),那字节就是戒奢宁俭。两个大会议厅坐满了面试官,其中一个是初面面试区,另一边是综合面试区。初面区的面试官会来等待区一个一个叫我们过去面试。

面试桌采取一对一的形式,技术岗的面试通知短信虽然没有通知说要带简历,但是仍然带了一份以免中途需要。(事实证明这是一个明智的选择)

初面

初面面试官点到我的名字之后,我跟着面试官去他的那个位置。

综合面试

初面完之后,面试官指引我去综合面试区等待综合面试。

我把那些试题以及我平时收藏的一些试题整理成了一份文档

试题:

1)Java 中能创建 volatile 数组吗?

能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到 volatile 的保护,但是如果多个线程同时改变数组的元素,volatile 标示符就不能起到之前的保护作用了。

2)volatile 能使得一个非原子操作变成原子操作吗?

一个典型的例子是在类中有一个 long 类型的成员变量。如果你知道该成员变量会被多个线程访问,如计数器、价格等,你最好是将其设置为 volatile。为什么?因为 Java 中读取 long 类型变量不是原子的,需要分成两步,如果一个线程正在修改该 long 变量的值,另一个线程可能只能看到该值的一半(前 32 位)。但是对一个 volatile 型的 long 或 double 变量的读写是原子。

3)volatile 修饰符的有过什么实践?

一种实践是用 volatile 修饰 long 和 double 变量,使其能按原子类型来读写。double 和 long 都是64位宽,因此对这两种类型的读是分为两部分的,第一次读取第一个 32 位,然后再读剩下的 32 位,这个过程不是原子的,但 Java 中 volatile 型的 long 或 double 变量的读写是原子的。volatile 修复符的另一个作用是提供内存屏障(memory barrier),例如在分布式框架中的应用。简单的说,就是当你写一个 volatile 变量之前,Java 内存模型会插入一个写屏障(write barrier),读一个 volatile 变量之前,会插入一个读屏障(read barrier)。意思就是说,在你写一个 volatile 域时,能保证任何线程都能看到你写的值,同时,在写之前,也能保证任何数值的更新对所有线程是可见的,因为内存屏障会将其他所有写的值更新到缓存。

4)volatile 类型变量提供什么保证?

volatile 变量提供顺序和可见性保证,例如,JVM 或者 JIT为了获得更好的性能会对语句重排序,但是 volatile 类型变量即使在没有同步块的情况下赋值也不会与其他语句重排序。 volatile 提供 happens-before 的保证,确保一个线程的修改能对其他线程是可见的。某些情况下,volatile 还能提供原子性,如读 64 位数据类型,像 long 和 double 都不是原子的,但 volatile 类型的 double 和 long 就是原子的。

5) 10 个线程和 2 个线程的同步代码,哪个更容易写?

从写代码的角度来说,两者的复杂度是相同的,因为同步代码与线程数量是相互独立的。但是同步策略的选择依赖于线程的数量,因为越多的线程意味着更大的竞争,所以你需要利用同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值