hr筛选简历约面试,其实粗暴到只看年龄、学历、期望薪资、工作经历、跳槽频次等
前两天在公司茶水间碰到小王,他刚面完一家大厂,脸色挺郁闷的。说他那份简历,HR可能连标题都没看完就直接Pass了——理由很简单,年龄偏大、学历一般、期望薪资高、不是同行、还跳槽频繁,这几个标签一打,三秒就判死刑。
听得我这个老程序员脑子里都自动浮现出一个if-else筛选逻辑:
if (age > 35 || !matchIndustry || salary > budget || jumpTooMuch) return"PASS";
就这么粗暴😅。
其实咱做技术的都知道,简历只是个入口,你写得多漂亮,系统也许第一轮就按规则刷掉了。那种机器筛选,甚至比我用grep找日志还快。想想有点心酸,但这也是现实——HR KPI压着,他们看不到你在代码里熬夜踩的坑,也不会关心你bug背后的优化思路。
所以啊,别只想着“技术牛逼就够了”,投简历前先想想怎么绕过那三秒钟的if判断,不然面都见不到。【备注:文末可领最新资料】
算法题:132 模式
昨晚十一点半,我在公司楼下吹了会儿风,手机刷到个老朋友问的题,说是“132 模式”,我当时还愣了下,啥叫132来着…哦对,就是找三个下标 i<j<k,让 nums[i] < nums[k] < nums[j]。听着有点拗口对吧,但这个形状很好记:先小、再大、再夹个中间的。
你可以想象股价曲线,先有个低点 a₁,再冲到高点 a₂,然后回落一点变成 a₃,但这 a₃ 还比 a₁高。只要存在这种“低—高—中”的顺序,就算找到了。暴力三重循环肯定能做,但…你们懂的,n 到了十万,直接原地升天。
我一开始也想用“前缀最小值+中间扫描”,结果越写越乱。后来想起一个更顺手的思路:从右往左扫,用一个栈去维护一个“可能当中间值的递减序列”,再用一个变量 third 去记住“已经确认能当 a₃ 的最大值”。逻辑大概是这样:我往左看一个数 nums[i],如果它比 third 还小,那不就有 a₁ < a₃ 的条件了嘛?而栈里放的那些比当前大的值,其实更像是候选的 a₂。期间只要我发现右边有不少小于这些候选 a₂ 的数字,就把它们弹出来作为更好的 third。说得可能有点绕…等下我贴代码。
publicclassPattern132{
publicbooleanfind132pattern(int[] nums){
if (nums == null || nums.length < 3) returnfalse;
java.util.Deque<Integer> stack = new java.util.ArrayDeque<>();
// third 表示当前能当 "2" 的最好人选(也就是 a3),尽量大但必须 < 某个 a2
int third = Integer.MIN_VALUE;
// 从右往左走,右边世界更完整
for (int i = nums.length - 1; i >= 0; i--) {
int x = nums[i];
// 如果当前数已经比 third 小,说明存在 a1 < a3,且之前见过的某个 a2 > a3
if (x < third) returntrue;
// 维护一个严格递减栈,弹出所有 < x 的值,
// 被弹出来的都是比当前 x 小、且之前站在某个更大的 a2 左边的家伙,
// 它们可以当更大的 third(更接近 a2,更容易满足夹在中间)
while (!stack.isEmpty() && x > stack.peek()) {
third = Math.max(third, stack.pop());
}
// x 入栈当候选 a2
stack.push(x);
}
returnfalse;
}
// 小测一下
publicstaticvoidmain(String[] args){
Pattern132 p = new Pattern132();
System.out.println(p.find132pattern(newint[]{1, 2, 3, 4})); // false
System.out.println(p.find132pattern(newint[]{3, 1, 4, 2})); // true -> 1,4,2
System.out.println(p.find132pattern(newint[]{-1, 3, 2, 0})); // true -> -1,3,2
System.out.println(p.find132pattern(newint[]{1, 0, 1, -4, -3})); // false
}
}
就是那个…从右往左时,栈里始终是个严格递减的候选 a₂ 列表。只要遇到一个更大的 x,就把所有比 x 小的弹走,这些被弹走的家伙,本质是“处在某个更大 a₂ 左边的数”,它们都能当 a₃,我用 third 记一个最大的,这样更容易让未来某个更小的 a₁ 成功夹住:a₁ < third < 现在或未来的某个 a₂。等我看到一个 x 比 third 还小,结构立马闭环。时间 O(n),空间 O(n),还挺香的。
有朋友会问:third 为啥取最大?因为 a₃ 越接近 a₂,越容易被更多更小的 a₁ 命中;如果 third 太小,能命中的 a₁ 就少。还有就是别从左往右硬凑,那个要维护的关系反而更绕。还有还有,整型范围…我们用的是 int,题目也就 int,没啥溢出问题,放心。
实在不放心的话,自己加两组边界:全降序(一定 false)、有重复元素(不影响,因为不要求严格不等的下标值,要求的是数值严格大小关系)。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html