大家好,我是二哥呀。
有 gap 期的话,找工作是比较被动的,哪怕教育背景很不错,比如 985 本。
星球里就有这样一位 23 届的球友,985 本,在 xx 工作过一年,做的是 Java 开发,因为公司想让他转 PHP 开发,就索性裸辞了。
24 年10 月份拿到了两份 offer,一个是华为 od,另外一个暂时先保密,薪资待遇比华为 OD 这个低一些。
可能很多小伙伴看到这里会觉得 985 本去华为 OD 太亏了吧?
但现实情况摆在面前,当你第一份工作的内容很 low,技术发展受限,再加上一小段 gap 期,再找工作的时候就会非常难受。
小厂看不上,大厂够不着
。
唯有华为 OD 这种大厂外包,是一个相对说的过去的选择。
第一,华为 OD 的面试相对容易一些,我们来看一下往期《Java 面试指南》里收录的面试题感受一下。
基本上都是比较常见的题目,比如说 MySQL 用过哪些函数,容易吧?
Linux 使用过的命令、chmod 参数,不难吧?
多线程、线程池也属于常规题目。
HTTP、OSI 七层模型、了解哪些设计模式、Docker 也都是面渣逆袭上强烈要求大家掌握的内容。
剩下的 Redis 了解多少,队列和栈的区别,引用类型的变量有什么特点,都很 easy。
第二,华为 OD 比较不在乎你以往的工作经历,只要你学历是 985 本、211 本,都会给机会。
第三,华为 OD 的薪资待遇相对来说,比很多中小厂给的都要靠谱的多。
像我之前统计的这份华为 OD 薪资一览表,其实就很能说明问题。
拿济南 OD 的 16K 来说,虽然没办法和大厂动辄 20-30k 的薪资比,但如果比较的对象是当地的企业,那真的要赢麻了。
找工作最忌讳的是,别人说垃圾你也觉得是垃圾。
就比如说很多人羡慕华为的工作,但喷华为的人可不在少数。
就比如说大厂的外包很多人连门槛都摸不到,但是依然会 diss 几句,外包不如狗,OD=our dog。
很多事情,喷几句是会舒服,但与事无益。
我现在遇到黑子的标准做法是,不回应不反驳,默默拉黑
。
就拿 985 本去华为 OD 这件事来说,亏不亏?
如果你没有更好的 offer,肯定不亏。
如果你腾讯、阿里、百度、字节、京东、美团的 offer 都拿了个遍,你去华为 OD 干什么,亏麻了呀。
适可而止。
给自己和解吧,别背着沉重的包袱前行。
三分恶面渣逆袭
JOIN操作为什么要小表驱动大表?
第一,如果大表的 JOIN 字段有索引,那么小表的每一行都可以通过索引快速匹配大表。
极客时间:Index Nested-Loop Join
时间复杂度为小表行数 N 乘以大表索引查找复杂度 log(大表行数 M),总复杂度为 N*log(M)。
显然小表做驱动表比大表做驱动表的时间复杂度 M*log(N) 更低。
第二,如果大表没有索引,需要将小表的数据加载到内存,再全表扫描大表进行匹配。
极客时间:Block Nested-Loop Join
时间复杂度为小表分段数 K 乘以大表行数 M,其中 K = 小表行数 N / 内存大小 join_buffer_size。
二哥的 Java 进阶之路:join_buffer_size
显然小表做驱动表的时候 K 的值更小,大表做驱动表的时候需要多次分段。
-- 小表驱动(高效)
SELECT * FROM small_table s
JOIN large_table l ON s.id = l.id; -- l.id有索引
-- 大表驱动(低效)
SELECT * FROM large_table l
JOIN small_table s ON l.id = s.id; -- s.id无索引
-
当使用 left join 时,左表是驱动表,右表是被驱动表。
-
-
当使用 join 时,MySQL 会选择数据量比较小的表作为驱动表,大表作为被驱动表。
----这部分是帮助大家理解 start,面试中可不背----
为了验证这一点,我特意新建了两个表 departments 和 employees。
二哥的 Java 进阶之路:join 的验证,创建两个表
插入测试数据:
-- 插入测试数据
INSERT INTO departments VALUES
(1, '研发部'),
(2, '市场部'),
(3, '人事部');
-- 插入更多数据到员工表
INSERT INTO employees VALUES
(1, '张三', 1),
(2
, '李四', 1),
(3, '王二', 2),
(4, '赵六', 2),
(5, '钱七', 3),
(6, '孙八', NULL),
(7, '周九', 1),
(8, '吴十', 2);
然后用 explain 查看执行计划:
二哥的 Java 进阶之路:join 的执行计划
当使用 left join 的时候,第一行是 employees 表,说明左表是驱动表;当使用 right join 的时候,第一行是 departments 表,说明右表是驱动表;当使用 join 的时候,第一行是 departments 表,说明 MySQL 默认选择了小表作为驱动表。
----这部分是帮助大家理解 end,面试中可不背----
这里的小表指实际参与 JOIN 的数据量,而不是表的总行数。大表经过 where 条件过滤后也可能成为逻辑小表。
-- 实际参与JOIN的数据量决定小表
SELECT * FROM large_table l
JOIN small_table s ON l.id = s.id
WHERE l.created_at > '2025-01-01'; -- l经过过滤后可能成为小表
也可以强制通过 STRAIGHT_JOIN 提示 MySQL 使用指定的驱动表。
explain select table_1.col1, table_2.col2, table_3.col2
from table_1
straight_join table_2 on table_1.col1=table_2.col1
straight_join table_3 on table_1.col1 = table_3.col1;
explain select straight_join table_1.col1, table_2.col2, table_3.col2
from table_1
join table_2 on table_1.col1=table_2.col1
join table_3 on table_1.col1 = table_3.col1;
ending
一个人可以走得很快,但一群人才能走得更远。
二哥的编程星球
已经有 7800 多名球友加入了,如果你也需要一个良好的学习环境,
戳链接 🔗
加入我们吧。这是一个
编程学习指南 + Java 项目实战 + LeetCode 刷题
+
简历精修
的私密圈子,你可以阅读星球专栏、向二哥提问、帮你制定学习计划、和球友一起打卡成长。
两个置顶帖「球友必看」和「知识图谱」里已经沉淀了非常多优质的学习资源,
相信能帮助你走的更快、更稳、更远
。
欢迎点击左下角
阅读原文
了解二哥的编程星球,这可能是你学习求职路上最有含金量的一次点击。
最后,把二哥的座右铭送给大家:
没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟
。共勉 💪。