某HR吐槽:面试了不下千人,我最反感求职者面试时一直追问说这个岗位是干什么的,这只会暴露你的不重视、无知,毫无自主思考性
刚看到个贴子,说有HR抱怨:面试了上千人,最讨厌候选人反复追问“这个岗位到底是干什么的”,觉得这是轻视和没准备的表现。
我觉得这事吧,换位思考一下,HR的点也没错。毕竟岗位信息写在JD上,如果面试时还一问三不知,确实会让人怀疑你的用心程度。网友们也有人觉得候选人只是想确认实际工作内容,避免信息差,但过度追问反而可能让人觉得不独立思考。
从我的角度看,面试前做足功课是基本功,就像你去超市买东西,起码得看清楚标签;但同时,候选人也有权利通过一两个关键问题确认真实职责,防止“货不对板”。关键差别就在于,你是有准备地问,还是无准备地追问。
面试就像双向选择,尊重和专业是底线。带着功课去提问,才更容易赢得尊重,也更显得靠谱。【备注:文末可领最新资料】
算法题:查找超预订员工
小题先交代下背景啊——昨天晚上十一点多,在公司楼下抽烟,隔壁组小李又在喊:“谁把我排班给排穿了?我一天三场会?!”我当时困得眼冒金星,但这事儿我太熟了,典型的“超预订员工”检测,排会、排工单、排门店班次都一个路子。就是那个…怎么说呢…我们要在一堆时间段里,找出被安排得重叠、超过承载上限(有的人一天最多带K个单)的员工,对吧。
输入是一堆记录:员工id、开始时间、结束时间。半开区间 [start, end),这样 end==下一段的 start 不算冲突。每个员工还可以有一个“容量上限”K,比如新人K=1,资深K=2。我们要把所有“在某一时刻并发安排数 > K”的员工找出来。嗯就这意思。
说白了就是“扫描线”。把同一员工的所有时间段拆成事件:start记+1,end记-1,按时间排序,时间相同让-1在前(避免尾接头误判)。从头累加,一旦并发数>该员工K,这人就超预订了。为啥逐人?因为跨人之间互不影响,能并行也能分散内存。复杂度嘛,排序是主耗时,O(N log N)。
1)时间戳别用字符串比较,转成long或分钟数;2)脏数据(end<=start)直接丢或修正;3)没配K的默认给1;4)区间定义半开,不然边界会很烦人…唉,别问我怎么知道的,血泪史。
import java.util.*;
publicclassOverbookedDetector{
staticclassBooking{
String empId;
long start; // 建议用epoch分钟
long end;
Booking(String e, long s, long t) { this.empId = e; this.start = s; this.end = t; }
}
publicstatic Set<String> findOverbookedEmployees(List<Booking> bookings,
Map<String, Integer> capacityByEmp){
Map<String, List<long[]>> events = new HashMap<>();
for (Booking b : bookings) {
if (b.end <= b.start) continue; // 脏数据跳过
events.computeIfAbsent(b.empId, k -> new ArrayList<>())
.add(newlong[]{b.start, +1});
events.get(b.empId).add(newlong[]{b.end, -1}); // 半开区间
}
Set<String> bad = new HashSet<>();
for (Map.Entry<String, List<long[]>> e : events.entrySet()) {
String emp = e.getKey();
int cap = capacityByEmp.getOrDefault(emp, 1);
List<long[]> es = e.getValue();
es.sort((a, b) -> {
if (a[0] != b[0]) return Long.compare(a[0], b[0]);
// 同时刻,先-1再+1,避免 end==start 被算重叠
return Integer.compare((int)a[1], (int)b[1]);
});
int cur = 0;
for (long[] ev : es) {
cur += ev[1];
if (cur > cap) { bad.add(emp); break; }
}
}
return bad;
}
// 小样例,随手测一下
publicstaticvoidmain(String[] args){
List<Booking> list = Arrays.asList(
new Booking("A", 9*60, 10*60),
new Booking("A", 9*60+30, 11*60),
new Booking("B", 9*60, 10*60),
new Booking("B", 10*60, 11*60), // 刚好拼接不冲突
new Booking("C", 9*60, 10*60),
new Booking("C", 9*60+10, 9*60+20) // C如果K=2就不超
);
Map<String,Integer> cap = new HashMap<>();
cap.put("A", 1);
cap.put("B", 1);
cap.put("C", 2);
System.out.println(findOverbookedEmployees(list, cap)); // 预期 [A]
}
}
逐人排序,若总区间数是N,则总体 O(N log N),内存 O(N)。并发组装的时候注意别一次性把所有人的事件扔进一个大数组,按人处理更稳。
本来还想扯下可视化告警、冲突自动重排…等等我先接个电话…行了先这样,回头有人问我再补点儿坑位处理哈。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html