摘要:大厂动辄几万人,十几万人,几十万人,一些部门准时下班,是存在并且合理的。这不,有球友就在群里斩钉截铁的回复“百度是不加班的”。
昨天有球友感慨说,来字节实习后,竟然是 1075 的工作强度,想想当初是真没理由拒绝。
我这么说,可能有同学会奉上一句“不是说字节和心脏,只有一个跳动的吗?”
当然有同学也会赌上这么一句:“if true,我吃。。。”
但我只能说大可不必,大可不必啊,还是挺难吃的,别问,问就是我吃过,啊不不不,我真不知道,
大厂动辄几万人,十几万人,几十万人,一些部门准时下班,是存在并且合理的。这不,有球友就在群里斩钉截铁的回复“百度是不加班的”。
所以,真不用质疑,因为质疑没毛用,拿个字节的 offer 去体验一波不就知道了。
有同学可能就会反驳说,“笑死,字节的 offer 这么好拿,我会不去?”
有拿到字节暑期实习的球友分享了他的上岸心得,双非本末9硕,科班,去年11月才转Java,无竞赛,无实习,无论文,那希望球友接下来的分享能给大家一些启发和帮助。
一字未改,但没贴全,只挑了一些我认为大家需要特别注意的点
个人面试感受:面试 = 70%项目 + 20%八股 + 10%撕题 (+ 200%运气,确实很吃面试官倾向)
八股:MySQL>Redis>JUC≈Java基础>JVM>>SSM,额外榜单:计网/OS
为什么将 MySQL 放在首位?可能因为我本身做的就是数据库,而我的项目设计的和 MySQL 差别特别大,所以很多面试官都喜欢问我 MySQL xx 实现和我的区别。(因为我本身搞数据库的,所以答的东西就不算常规八股了)
Redis 经常被问到的就是项目里面会用到的点,常见八股。
JUC 和 Java 也是根据项目来问的,线程池 AQS 等等,也是常规八股。
JVM 就被问过一次类加载和垃圾回收,SSM 就是问自动装配。
撕题:本科时刷过近 300 道,11 月才拾起来的,现在刷了 513 道。
⚠️注意事项:
其实我一开始,事无巨细地看,甚至边看边想,“我靠 Java 这么难,怎么这么多东西,这么细,这么深,全是源码怎么搞得完”
后来面试的时候才意识到,大部分面试官不会挖这么深,甚至指不定他们就开着面渣逆袭来问的哈哈,所以也没必要做到像满分答案那样事无巨细。
当然最基础的那些肯定是要答得上才行,该延伸的地方延伸。
当时我面字节的时候,连着几道计网和 OS 的题都答的血烂,但面试官就告诉我,问这些题其实是想听听新的东西,普通的八股大家都会背,没什么新意。
甚至我吟唱的时候他直接说,“好了知道你会了”
最后反问时面试官也明说,这一面他给过,因为我对数据库的理解在面试官来看很“独特”,当然可能字节面试官真的很特殊。
所以字节三轮面试都是完了马上约下一面,五天速通
所以相比起事无巨细地抠细节,不如深入深入再深入地在每个方面精心准备一两个点,侃侃而谈来得更好。当然最基础的那些肯定是要答得上才行。
62.事务的隔离级别有哪些?
隔离级别定义了一个事务可能受其他事务影响的程度,MySQL 支持四种隔离级别,分别是:读未提交、读已提交、可重复读和串行化。
读未提交会出现脏读,读已提交会出现不可重复读,可重复读是 InnoDB 默认的隔离级别,可以避免脏读和不可重复读,但会出现幻读。不过通过 MVCC 和临键锁,能够防止大多数并发问题。
串行化最安全,但性能较差,通常不推荐使用。
详细说说读未提交?
事务可以读取其他未提交事务修改的数据。也就是说,如果未提交的事务一旦回滚,读取到的数据就会变成了“脏数据”,通常不会使用。
什么是读已提交?
读已提交避免了脏读,但可能会出现不可重复读,即同一事务内多次读取同一数据结果会不同,因为其他事务提交的修改,对当前事务是可见的。
是 Oracle、SQL Server 等数据库的默认隔离级别。
什么是可重复读?
可重复读能确保同一事务内多次读取相同数据的结果一致,即使其他事务已提交修改。
是 MySQL 默认的隔离级别,避免了“脏读”和“不可重复读”,通过 MVCC 和临键锁也能在一定程度上避免幻读。
-- Session A:STARTTRANSACTION;
SELECT balance FROM accounts WHEREid=1; --返回500
-- Session B:
UPDATE accounts SET balance = balance +100WHEREid=1;
COMMIT;
-- Session A再次查询:
SELECT balance FROM accounts WHEREid=1; --仍返回500(可重复读)
-- Session A更新后查询:
UPDATE accounts SET balance = balance +50WHEREid=1; --基于最新值550更新为600
SELECT balance FROM accounts WHEREid=1; --返回600
什么是串行化?
串行化是最高的隔离级别,通过强制事务串行执行来解决“幻读”问题。
但会导致大量的锁竞争问题,实际应用中很少用。
如果 B 是普通的 SELECT,也就是快照读,它读的是旧值,即事务 A 修改前的快照,并且不会阻塞;如果 B 是当前读,比如SELECT … FOR UPDATE,它会被阻塞直到事务 A 提交或回滚。-- 会话 A 中,更新王二的余额STARTTRANSACTION;
UPDATE accounts SET balance = 8000WHEREname = '王二';
-- 此时并没有 COMMIT
-- 会话 B 中查询王二的余额
SELECT * FROM accounts WHEREname = '王二';
-- 会话 B 会读取到 旧值 1000
-- 会话 C 中使用当前读查询王二的余额
SELECT * FROM accounts WHEREname = '王二'FORUPDATE;
-- 会话 C 会被阻塞,直到会话 A 提交或回滚
怎么更改事务的隔离级别?
MySQL 支持通过 SET 语句修改事务隔离级别,包括全局级别、当前会话,但一般不建议在生产环境中随意修改隔离级别。
测试环境下可以使用 SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; 可以修改当前会话的隔离级别。
使用 SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED; 可以修改全局隔离级别,影响新的连接,但不会改变现有会话。
ending最后,把二哥的座右铭送给大家:没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。共勉 。
来源:乱九