程序员老鬼

某大厂开始补贴女员工冻卵了,一人10万~

刚看到个贴子,说某大厂开始给女员工补贴冻卵,一人十万,这话题一出,评论区直接炸锅了。程序员的视角来说,我觉得这事吧,说好听点是企业关怀,说直白点还是利益最大化。

Image

网友有说“这福利真好”,也有吐槽“公司变相PUA”。我怎么看呢?企业出钱让你延后生育,表面上是给选择,实际上还是让你把青春都奉献给业务需求和KPI。说白了,这种福利就像是给你配置了更高性能的服务器,要求你24小时不宕机,但主机到底愿不愿意,没人真在意。

不过话说回来,能多一种选择总归不是坏事。只希望大家记得,所谓“福利”是把双刃剑,怎么用得看个人,别被画的大饼蒙了眼。每个人的选择都值得被尊重,但别忘了为自己而活。【备注:文末可领最新资料】

算法题:寻找没有被执行的任务对

哎,昨天晚上加班到快十一点,脑子有点迷糊,你们要说找没被执行的任务对那个算法啊,刚好上周我们组写接口自动化的时候遇到过类似的需求。那个场景其实挺生活化的,就是小李他管的那套定时任务系统,经常有人加新任务进来,然后测试一顿测,结果一上线,有些任务压根没执行,日志一看就是没跑,领导还老是问到底哪个任务是“闲着”的。说白了,就是有一组任务对(比如A执行B,B执行C),但实际执行日志里有的压根没出现,这就要找出这些“没被执行的任务对”呗。

其实那个思路我觉得还挺简单的,就是,假设你有两个list,一个是所有配置里的任务对,比如ListconfigPairs,另一个是实际已经执行过的任务对,比如ListexecutedPairs。最后目标就是把那些在configPairs里但是executedPairs里没有的找出来呗——就这么个破事。

其实代码写起来也不难,基本一顿HashSet加遍历就完了,反正小李写完让我帮忙review,我直接把他那一堆for循环给砍了,改成下面这样:

publicclassTaskChecker{
staticclassTaskPair{
        String from;
        String to;
publicTaskPair(String from, String to){
this.from = from;
this.to = to;
        }
// 注意hashCode和equals一定要重写,不然HashSet玩不转
@Override
publicbooleanequals(Object o){
if (this == o) returntrue;
if (o == null || getClass() != o.getClass()) returnfalse;
            TaskPair taskPair = (TaskPair) o;
return Objects.equals(from, taskPair.from) && Objects.equals(to, taskPair.to);
        }
@Override
publicinthashCode(){
return Objects.hash(from, to);
        }
@Override
public String toString(){
return from + "->" + to;
        }
    }

publicstatic List<TaskPair> findUnexecutedPairs(List<TaskPair> configPairs, List<TaskPair> executedPairs){
        Set<TaskPair> executedSet = new HashSet<>(executedPairs);
        List<TaskPair> result = new ArrayList<>();
for (TaskPair pair : configPairs) {
if (!executedSet.contains(pair)) {
                result.add(pair);
            }
        }
return result;
    }

// 随便测测
publicstaticvoidmain(String[] args){
        List<TaskPair> config = Arrays.asList(
new TaskPair("A", "B"),
new TaskPair("B", "C"),
new TaskPair("C", "D"),
new TaskPair("D", "E")
        );
        List<TaskPair> executed = Arrays.asList(
new TaskPair("A", "B"),
new TaskPair("C", "D")
        );
        List<TaskPair> notExecuted = findUnexecutedPairs(config, executed);
        System.out.println("没被执行的任务对: " + notExecuted);
    }
}

你们别笑啊,这种事你用stream写更骚气,但是我们组那谁谁谁就是看不懂,老让我写简单点。其实思路也就那样,先把执行过的任务对扔到HashSet里,然后遍历所有配置,看谁没执行过,直接加到结果里头。你看那个main方法模拟的数据,最后输出就是[B->C, D->E],对吧,就是这俩没执行过,很直观。

这玩意实际项目里用的时候,我们还给那个TaskPair加了一堆注释,怕以后谁乱搞。你别小看哈,线上出了问题全靠这点代码兜底,不然到时候一群人追着日志看,累死。代码要通俗易懂点,谁来了都能接手。

对了,有一次小王把TaskPair的equals没写好,HashSet里就没法查,结果老是查不出来,还以为系统出bug了,折腾半天才发现自己写漏了。唉,这种小细节一不注意真坑人。

反正啊,这种算法,说难也难不到哪去,主要就是思路清楚点,Java里数据结构用明白了就行。具体你们要真用,别忘了把异常啥的catch一下,别像小李那样直接裸奔。

-END-

我为大家打造了一份RPA教程,完全免费:https://www.songshuhezi.com/rpa.html

最后给大家分享一份不错的副业资料,点击下方公众号,回复关键字: 副业 领取,也可以链接我领取,微信:hls404