专栏名称: 沉默王二
技术文通俗易懂,吹水文风趣幽默。学 Java,认准二哥的网站 javabetter.cn
目录
相关文章推荐
最爱大北京  ·  Deepseek:在北京2000多的退休金怎 ... ·  昨天  
北京吃货小分队  ·  山姆2月最火单品,是它 ·  3 天前  
北京吃货小分队  ·  还有什么东西是满恒记不卖的吗... ·  4 天前  
北京本地宝  ·  北京6个周一不闭馆博物馆! ·  5 天前  
51好读  ›  专栏  ›  沉默王二

字节年终奖,涨到怀疑人生。

沉默王二  · 公众号  ·  · 2024-11-27 14:04

主要观点总结

本文主要介绍了字节跳动年终奖调整、招聘、面试指南以及相关的编程技术知识,包括Java、IO多路复用、事务隔离级别、SQL执行流程、HTTPS和TCP断开连接等内容的详细解释和概述。

关键观点总结

关键观点1: 字节跳动年终奖调整与招聘

字节对年终奖进行了调整,提高现金部分和期权奖励,吸引人才。目前仍有岗位空缺,可参与招聘,并有球友分享成功面试经验。

关键观点2: Java面试指南与相关技术解析

提供了Java面试指南,包括静态关键字、多态、事务隔离级别等内容。同时介绍了Java中字符串处理、IO多路复用等技术的原理和应用。

关键观点3: SQL执行流程与事务特性

详细解释了MySQL中SQL语句的执行流程,包括解析、优化、执行等阶段。同时介绍了事务的四个隔离级别及其特性,以及事务在MySQL中的实现。

关键观点4: HTTPS与TCP断开连接的过程

阐述了HTTPS与HTTP的区别,以及加密的实现方式。同时介绍了TCP断开连接的四次挥手过程,以及TIME_WAIT状态的作用。

关键观点5: 编程学习资源和环境推荐

推荐了二哥的编程星球,提供编程学习资源、项目实战、简历精修等服务。同时介绍了二哥的编程星球中的优质学习资源和项目实战,鼓励大家共同学习成长。


正文

大家好,我是二哥呀。

近期,字节对年终奖进行了大刀阔斧的调整,简单点说,就是基数和系数双重放大,对于那些绩效高的小伙伴来说,年终奖要比往年高一大截,爽歪歪。

  • 现金部分最高可达 3 个月,绩效突出的员工还可以获得额外的期权,约 10%。并且部分期权奖励直接改为现金形式发放。真正做到落袋为安,舒服。
  • 绩效期权将以月总包(包括月薪和期权月均价值)作为计算基数。

总之就是,公司挣钱了,给员工们喝点汤。 据查,最新一轮的期权回购价格是每股 1279 元(约),10 股就差不多 13k 了。并且不同于入职时的按季归属,绩效期权时按月匀速归属的,且一旦归属后即可全部申请参与公司回购。

这下,心脏又有跳动的动力了(

昨天看字节官方招聘说,25 届目前还有 1000+ HC,包括客户端、前端、测试、后端等岗位,最后一场笔试的时间为 12 月 4 日 19:20-21:00,所以向往字节的小伙伴们可以再冲刺几天。

秋招扫尾阶段,有一个很有趣的现象就是,你以为自己没戏了,结果是个捡漏王,以前你觉得高攀不起的,现在可能反而很轻松。

星球 里也有不少球友拿到字节的 offer,薪资幅度还是很不错的,大家也可以接接好运,也许就能赶在最后的冲刺阶段上岸了呢。

那接下来,我们就以 Java 面试指南中收录的字节跳动面经同学 19  番茄小说一面为例,来看看如果想备战字节这种大厂面试的话,应该如何去准备。

背八股就认准三分恶的面渣逆袭

从这份面经能看得出来,整体难度在大厂里属于比较低的那种了,所以,不要对大厂怀有畏惧感,放平心态,你真的也可以。

字节跳动面经同学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 响应、浏览器处理响应并渲染页面等多个环节。







请到「今天看啥」查看全文