大家好,我是二哥呀。
近期,字节对年终奖进行了大刀阔斧的调整,简单点说,就是基数和系数双重放大,对于那些绩效高的小伙伴来说,年终奖要比往年高一大截,爽歪歪。
-
现金部分最高可达 3 个月,绩效突出的员工还可以获得额外的期权,约 10%。并且部分期权奖励直接改为现金形式发放。真正做到落袋为安,舒服。
-
绩效期权将以月总包(包括月薪和期权月均价值)作为计算基数。
总之就是,公司挣钱了,给员工们喝点汤。
据查,最新一轮的期权回购价格是每股 1279 元(约),10 股就差不多 13k 了。并且不同于入职时的按季归属,绩效期权时按月匀速归属的,且一旦归属后即可全部申请参与公司回购。
这下,心脏又有跳动的动力了(
)
昨天看字节官方招聘说,25 届目前还有 1000+ HC,包括客户端、前端、测试、后端等岗位,最后一场笔试的时间为 12 月 4 日 19:20-21:00,所以向往字节的小伙伴们可以再冲刺几天。
秋招扫尾阶段,有一个很有趣的现象就是,你以为自己没戏了,结果是个捡漏王,以前你觉得高攀不起的,现在可能反而很轻松。
星球
里也有不少球友拿到字节的 offer,薪资幅度还是很不错的,大家也可以接接好运,也许就能赶在最后的冲刺阶段上岸了呢。
那接下来,我们就以 Java 面试指南中收录的字节跳动面经同学 19 番茄小说一面为例,来看看如果想备战字节这种大厂面试的话,应该如何去准备。
背八股就认准三分恶的面渣逆袭
从这份面经能看得出来,整体难度在大厂里属于比较低的那种了,所以,不要对大厂怀有畏惧感,放平心态,你真的也可以。
-
-
2、三分恶面渣逆袭在线版:https://javabetter.cn/sidebar/sanfene/nixi.html
字节跳动面经同学19番茄小说一面
static关键字的使用
static 关键字可以用来修饰变量、方法、代码块和内部类,以及导入包。
修饰对象
|
作用
|
变量
|
静态变量,类级别变量,所有实例共享同一份数据。
|
方法
|
静态方法,类级别方法,与实例无关。
|
代码块
|
在类加载时初始化一些数据,只执行一次。
|
内部类
|
与外部类绑定但独立于外部类实例。
|
导入
|
可以直接访问静态成员,无需通过类名引用,简化代码书写,但会降低代码可读性。
|
多态的用法,多态的实现原理
多态指同一个接口或方法在不同的类中有不同的实现,比如说动态绑定,父类引用指向子类对象,方法的具体调用会延迟到运行时决定。
举例,现在有一个父类 Wanger,一个子类 Wangxiaoer,都有一个 write 方法。现在有一个父类 Wanger 类型的变量 wanger,它在执行
wanger.write()
时,究竟调用父类 Wanger 的
write()
方法,还是子类 Wangxiaoer 的
write()
方法呢?
//子类继承父类
class Wangxiaoer extends Wanger {
public void write()
{ // 子类覆盖父类方法
System.out.println("记住仇恨,表明我们要奋发图强的心智");
}
public static void main(String[] args) {
// 父类引用指向子类对象
Wanger[] wangers = { new Wanger(), new Wangxiaoer() };
for (Wanger wanger : wangers) {
// 对象是王二的时候输出:勿忘国耻
// 对象是王小二的时候输出:记住仇恨,表明我们要奋发图强的心智
wanger.write();
}
}
}
class Wanger {
public void write() {
System.out.println("勿忘国耻");
}
}
答案是在运行时根据对象的类型进行后期绑定,编译器在编译阶段并不知道对象的类型,但是 Java 的方法调用机制能找到正确的方法体,然后执行,得到正确的结果,这就是多态的作用。
多态的实现原理是什么?
多态通过动态绑定实现,Java 使用虚方法表存储方法指针,方法调用时根据对象实际类型从虚方法表查找具体实现。
截图来自博客园的小牛呼噜噜:虚拟方法表
Hashtable与HashMap
HashMap 不是线程安全的,因此在早期的 JDK 版本中,是用 Hashtable 来保证线程安全的。
①、Hashtable 是直接在方法上加 synchronized 关键字,比较粗暴。
二哥的 Java 进阶之路:Hashtable
String,StringBuilder,StringBuffer的区别,使用性能
String
、
StringBuilder
和
StringBuffer
在 Java 中都是用于处理字符串的,它们之间的区别是,String 是不可变的,平常开发用得最多,当遇到大量字符串连接时,就用 StringBuilder,它不会生成很多新的对象,StringBuffer 和 StringBuilder 类似,但每个方法上都加了 synchronized 关键字,所以是线程安全的。
Linux中的IO多路复用
IO 多路复用是一种高效管理多个 IO 事件的技术,通过单线程监控多个文件描述符(fd),实现高并发的 IO 操作。
常见的 I/O 多路复用机制包括 select、poll 和 epoll 等。
特性
|
select
|
poll
|
epoll
|
文件描述符限制
|
受
FD_SETSIZE
限制
|
无限制
|
无限制
|
时间复杂度
|
O(n)
|
O(n)
|
O(1)
|
数据复制
|
需要
|
需要
|
不需要
|
工作方式
|
线性扫描
|
线性扫描
|
事件通知
|
内核支持
|
所有 UNIX 系统
|
所有 UNIX 系统
|
Linux 2.6 及以上版本
|
适用场景
|
少量连接
|
中等连接
|
大量并发连接
|
比如说你是一名数学老师,上课时提出了一个问题:“今天谁来证明一下勾股定律?”
同学小王举手,你就让小王回答;小李举手,你就让小李回答;小张举手,你就让小张回答。
这种模式就是 IO 多路复用,你只需要在讲台上等,谁举手谁回答,不需要一个一个去问。
有盐先生:IO 多路复用
Redis 就是使用 epoll 这样的 I/O 多路复用机制,在单线程模型下实现高效的网络 I/O,从而支持高并发的请求处理。
MySQL中的事务
事务是一条或多条 SQL 语句组成的执行单元,要么全部执行成功,要么全部失败,不会出现部分执行的情况。
事务具有四个基本特性,也就是通常所说的 ACID 特性,即原子性、一致性、隔离性和持久性。主要作用是保证数据库操作的一致性。
三分恶面渣逆袭:事务四大特性
事务隔离级别,哪个是默认的,特点
事务的隔离级别定了一个事务可能受其他事务影响的程度,MySQL 支持的四种隔离级别分别是:读未提交、读已提交、可重复读和串行化。
三分恶面渣逆袭:事务的四个隔离级别
什么是读未提交?
读未提交是最低的隔离级别,在这个级别,当前事务可以读取未被其他事务提交的数据,以至于会出现“脏读”、“不可重复读”和“幻读”的问题。
什么是读已提交?
在读已提交级别,当前事务只能读取已经被其他事务提交的数据,可以避免“脏读”现象。但不可重复读和幻读问题仍然存在。
什么是可重复读?
可重复读能够确保在同一事务中多次读取相同记录的结果是一致的,即使其他事务对这条记录进行了修改,也不会影响到当前事务。
可重复读是 MySQL 默认的隔离级别,避免了“脏读”和“不可重复读”,但可能会出现幻读。
什么是串行化?
串行化是最高的隔离级别,通过强制事务串行执行来避免并发问题,可以解决“脏读”、“不可重复读”和“幻读”问题。
但会导致大量的超时和锁竞争问题。
MySQL中一条SQL的执行流程
我就说一下查询语句的吧。
二哥的 Java 进阶之路:SQL 执行
第一步,客户端发送 SQL 查询语句到 MySQL 服务器。
第二步,MySQL 服务器的连接器开始处理这个请求,跟客户端建立连接、获取权限、管理连接。
第三步(MySQL 8.0 以后已经干掉了),连接建立后,MySQL 服务器的查询缓存组件会检查是否有缓存的查询结果。如果有,直接返回给客户端;如果没有,进入下一步
。
第三步,解析器对 SQL 语句进行解析,检查语句是否符合 SQL 语法规则,确保引用的数据库、表和列都是存在的,并处理 SQL 语句中的名称解析和权限验证。
第四步,优化器负责确定 SQL 语句的执行计划,这包括选择使用哪些索引,以及决定表之间的连接顺序等。
第五步,执行器会调用存储引擎的 API 来进行数据的读写。
第六步,MySQL 的存储引擎是插件式的,不同的存储引擎在细节上面有很大不同。例如,InnoDB 是支持事务的,而 MyISAM 是不支持的。之后,会将执行结果返回给客户端
第七步,客户端接收到查询结果,完成这次查询请求。
https与http的区别,加密的实现
HTTPS 是 HTTP 的增强版,在 HTTP 的基础上加入了 SSL/TLS 协议,确保数据在传输过程中是加密的。
二哥的 Java 进阶之路:http和 https 的区别
HTTP 的默认端⼝号是 80,URL 以
http://
开头;HTTPS 的默认端⼝号是 443,URL 以
https://
开头。
SSL/TLS 在加密过程中涉及到了两种类型的加密方法:
-
非对称加密:服务器向客户端发送公钥,然后客户端用公钥加密自己的随机密钥,也就是会话密钥,发送给服务器,服务器用私钥解密,得到会话密钥。
-
三分恶面渣逆袭:HTTPS 主要流程
键入url到页面显示的流程
这个过程包括多个步骤,涵盖了 DNS 解析、TCP 连接、发送 HTTP 请求、服务器处理请求并返回 HTTP 响应、浏览器处理响应并渲染页面等多个环节。