[上机考试指导]

上机编程考试准备

1.0 提前做的准备

首先,这里默认投递岗位是需要进行上机编程的岗位。一般来说需要候选人,提前一段时间进行刷题训练,增强相关算法的熟悉程度。一般来说,对于上机编程的考试题目类型相对来说比较固定。
我们可以根据开始题目类型进行优先级划分,从而以更加合理的方式来分配备考精力。
第一优先级就是:DFS/BFS, 滑动窗口,双指针,二分, 哈希, DP; DP需要结合不同的公司的出题偏好进行斟酌,有的公司比较喜欢考DP,有的公司机试题DP反而不多。
第二优先级就是:贪心,树、图论、数学相关, 对于树而言,简单的其实就那些,难点的花费大量精力也收益不大,图论也是类型, 数学则更加抽象和费劲,在机试中考察的概率很低。
此外贪心则是一个玄学,要是熟悉简单的贪心,很容易看出,要是没遇到过的或者没想到的贪心,估计一时半会也难想,所以降低优先级。

2.刷题指南

首先找各个专题进行突破,要熟悉各个模板的套路,非套路的则需要根据逻辑思维进行模拟,能优化就优化,不能优化,暴力求解。毕竟没见过的题目,要在考试中完全写对的概率比较低。
在国内机试中,一般情况下都是按照case给分的,哪怕用例过一部分,也是有分的。所以在一定情况下,可以暴力获取一定分数。

2.1 第一优先级备考策略

然后大概讲讲刷各种专题时需要注意的点。
对于二分,需要注意,上下边界,对于mid是取long还是int, 除此之外,check函数的灵活使用,于此同时需要注意二分并不是需要满足单调性才能使用,其只需要满足性质二段性即可。
对于DFS/BFS,则需要掌握基本的搜索框架,比如BFS,层次遍历,权为1的最短路问题,多源BFS问题, 双向BFS问题,及难度更大一点的双端BFS模型,至于A*算法考的可能性也不大,性价比低,量力而行。
对于DFS而言,需要注意不重不漏的进行遍历方法的掌握, 经常会根据题目需要使用到回溯技巧,于此同时,DFS中蕴含着大量的剪枝机会,一般情况下不会这么裸的使用DFS搜索结果。剪枝技巧务必要掌握,一般常见的最优性剪枝,记忆化剪枝,等效性剪枝、可行性剪枝。
滑动窗口,一般都是用双指针维护一个区间序列的某些性质,需要注意什么的时候增加窗口,什么时候缩小窗口。比较典型的是求窗口内的最大值最小值问题这些。
双指针来说,思维比较简单,一般都是嵌套在题目内部的一个小技巧,一般不会单独拿出来进行考试,不然太easy了。
Hash的话,也是类型的小技巧。不是太难,一般多用于缓存一些信息或者是进行字符串匹配中用的多。
DP问题属于比较灵活,代码短小,但是存在思维难度大,这个一方面是通过掌握常见模型, LIS, LCS, 线性DP, 背包问题,还有一些其他的DP只能等着后面慢慢熟练掌握,挑选考试可能性大的,比如二维DP模型,背包九讲其实已经能解决很多问题了。
除此之外,还有什么前缀和、差分等小技巧也要注意。

2.2 次优备考专题

主要是图论,树,还有贪心等。
图论的话,优先掌握拓扑序,还有Dijkstra算法,其他的量力而行。
树的话,大概掌握基本的树相关知识就行,难的平时没训练过,一时半会儿也想不到。
贪心的话,主要是常见的区间贪心模型掌握清楚就行。

2.3刷题引导

主要是针对leetcode上刷, 至于面向ACM/OI的平台题目相对于没有训练过的人来说难度较大。
可以结合外面的leetcode讲解来刷,市面上有不少专门讲刷题的公众号什么的,可以关注一下。
我这里暂时先推荐三叶的刷题相关公众号,讲的很好。

3. 获分策略

万一备考时间太短了, 不得不采用一些盘外招。但是这些招我希望你永不会用上。
主要就是骗分策略,一般来说机试都是一个分数线,过了就可以进入下一轮。
一般情况下,有的用例输出的数据比较规整。有时,对于一个题目,直接返回0甚至可以过50%的用例。
可以通过对测试数据进行硬编码打表,来返回一些用例结果。也能获取部分分数。
但是需要慎用,可能会有后面的复查或者review环节,万一被发现了,需要能够自圆其说。

上一篇:leetcode-46. 全排列-不含重复元素的全排列-dfs-swap


下一篇:运维架构师---Kubernetes容器平台