时间线:5.26笔试,5.30一面,6.7二面,6.13三面,目前已收到HR面通知。
5.26笔试:时间太久印象不深了,简单聊聊,不知道怎么过的
已经有其他大佬发过题目和解答,可以在牛客上搜到,实习生和应届生题目一样。本人Python选手,第一题印象中是用哈希表做的,然后一边遍历数组一边用哈希表记录每种卡片的数量,凑齐了就每个减一,但因为各种原因以及神秘的输入输出bug,一直到时间过去一个多小时才AC,中间去做了第二、三题。第二题没想到正确的贪心思路,测试用例过了,但官例通过率0%,果断放弃。第三题我应该是用了排序+二分查找,过了50%官例(超时),后面不知道怎么优化了。第四题数论题,这种题以前没怎么刷过,随便写了一个能过测试用例的算法,官例通过率0%。
多多笔试是真狠,错误的方法一分都不给,本来以为寄了,结果过两天居然收到面试通知了,笔试就稀里糊涂混过去了。
5.30一面:也不知道答得怎样,反正也过了
- 自我介绍:我也没实习经历就讲了讲我正在写的论文,面试官先问了几个跟论文有关的问题,我比较熟悉自己的论文所以答得还行。
- 机器学习掌握情况:先问了深度学习,我直接说不会,只了解一些简单的模型。然后问决策树分割节点的原理,以及交叉熵的概念,这一块我还真不太了解,只答出了交叉熵的作用,后来翻书发现决策树是靠交叉熵计算信息增益来划分节点的,涨知识了……
- 算法题:第一题:输入n个数对[ai, bi],将这n个数对按照指标 w1 * ai + w2 * bi 从小到大排序,问是否存在 w1, w2 使得 [a0, b0] 在上述规则下排在最前面?没想到好的思路,只说了一下特殊情况,面试官提示了一下还是没想出来。第二题:买卖股票,力扣原题,秒了。第三题:买卖股票II,力扣原题,秒了。面试结束。
pdd用的是他们自己的面试平台,中间不能切屏,上面有txt版本的代码编辑器,就是白纸手写。输入输出格式很随意,我都不知道他们后台是怎么运行的,但是按照面试官的要求写就行,有时候是核心代码模式,有时候是面试官让我把测试用例手打上去然后ACM模式,有时候只看你写的函数。
6.7二面:体验很好,全程畅聊
- 自我介绍:跟一面差不多,然后面试官问我论文里面一些步骤的想法,我简单讲了下。
- 机器学习:简单问了下掌握情况,但没拷打。
- 线性代数:讨论线性方程组Ax+b=0解的个数,无解、唯一解、无穷多解。分类讨论一下,但我当时有点紧张,没想起来用线性空间表述,用矩阵的秩以及可逆性讨论的,比较啰嗦。
- 算法题:(力扣343 整数拆分)把正整数n分解成k(>=2)个正整数的和,问这些正整数的最大乘积是多少?这道题以前没做过,先给一些初步分析(偏暴力),在面试官提示下做出来了,其实就是一道数学题。最开始给的思路是平均分配,各个数之间的差不超过1,然后k从2到n遍历取最大。面试官提示如果第一步二等分,怎么让乘积更大,想到不断二分的贪心做法,到最后只剩下2和3。面试官进一步提示怎么确定2和3的个数,想到6=2+2+2=3+3,2*2*2=8<9=3*3,于是可以不断地把3个2换成2个3,继续贪心,最后剩下至多2个2,然后讨论n模3的余数把2的个数算出来,再特判一下n=2和n=3的情况就结束了。6.17小更新:今天刷代码随想录的时候发现这居然也是力扣原题,有动态规划的常规做法,但时间复杂度居然要O(n^2)?这岂不是比我最开始想到的暴力均分还暴力……然后贪心做法居然是递推,时间复杂度O(n)?那岂不是跟我的暴力做法一样……如果真的假设没有幂函数这种东西的话,就给面试官写个快速幂吧,好歹能压缩到O(log n)时间复杂度(乐)
总体感觉很好,面试官挺和善的,也不怎么拷打,总共聊了一个多小时才下线。
6.13三面(主管面):本来以为很轻松,结果汗流浃背
- 自我介绍:讲完没问啥东西就过了
- 机器学习:每轮都被问,鼠鼠表示压力山大……看我不太会就没继续问了
- 算法题:输入一个单链表,把最后一个节点插入到第一个节点后面,倒数第二个节点插入到第二个节点后面,以此类推。例子:1->2->3->4->5->6,原地操作得到 1->6->2->5->3->4。刚开始只想到暴力模拟的方法,用两个指针操作,一个从前往后走一个从后往前走,问我时间复杂度和空间复杂度,我说因为每次找到尾节点需要遍历整个链表,所以时间复杂度O(n)空间复杂度O(1),说实话我以为面试官会给提示让我想更好的办法,但他居然直接让我写代码实现了,这个暴力其实不太好写,我弄了几个指针操作半天汗流浃背。粗略写完之后讲了下自己的思路,面试官也没运行,就问我还有没有更好的办法。这时候才想到可以二分链表+翻转链表+合并链表,三步O(n)解决,每一步都是力扣原题,把这个思路讲了之后面试官让我写,写完就结束了,也不知道他有没有后台运行
这个面试官看着挺严肃的,全程没怎么说话,基本就是问答,算法题少见地考了链表,感觉之前遇到的大多数是数组的贪心或者策略。可能最后想到正确做法捞回来了。
本人非科班而且四月份才开始刷力扣(从零开始学Python和算法,枯了),然后陆续投简历,刚开始要么简历挂要么笔试挂,抱着随便试试的心态投了pdd的算法,结果居然一路通关了?大概干两个月苦力然后准备秋招了。
血的教训:投实习一定要趁早,最好提前一年准备,感觉批次越早笔试越简单,岗位也越多,投晚了大厂基本招完了,剩下几个岗位一堆人竞争,只能在笔试面试狠狠上强度。。。