初期准备
起初真就见财起意,但是由于本人执行力太差,大一下在家期间原本希望的早起刷题并没有实现,暑假又以准备开学考试为由没有刷题,真正刷题是大二上学期在决定申请之后,刷力扣大概一两个月的时间,算法面试题的集合中动态规划几乎没做(划重点这里会考!),其他部分做了七七八八。但是完成度不高,不够精细,基本都是先想一会然后看答案,如果不太难就自己复刻,太难没耐心想就会理解之后copy。而且重难点的题目没有多次巩固。一方面是时间问题,刷题的时间集中在了复习周+美赛爆肝期间(不过事实证明时间确实是海绵里的水,没空是因为还不够渴望);另一方面是方法问题,由于对需要达到怎样的程度并没有清晰的认识,在钻研的深度上有所欠缺。
软实力准备
写了简历,结合了自己做过的一些小项目和课程大作业(呜呜这里也划重点),但是简历当时写的不够精简。
找了HR姐姐给自己内推,之后出现情况也很及时的去push了 夸夸自己!
本人搞笑实录
留了两个邮箱,但是一直以来主要通过新浪联系,导致没发现最后最关键的通知面试信息投到谷歌邮箱去了,还好在朋友开始面试之后去问了hr姐姐 我是憨憨
不知道是否是回复面试通知确认时间太晚的原因,我第二天的上海base面试竟然被放鸽子了,于是只能过年后回来再面。我早早面完的同学第二天就收到了拒信orz
手撕代码部分
第一场 北京base
Q: 有N个盒子,盒子内壁厚度不计,只有盒子长和宽大于等于另一个盒子的长和宽的时候能套盒,求能够套盒的最大数目
与一般的排序不同,有两个维度,先对于长排序,然后考虑对宽思考,在面试官姐姐的提示下考虑用了动态规划的思路(还好我对记忆化搜索以及动态规划的名词有点印象),前一个盒子的最大套盒数=max{比它小的盒子的最大套盒数}+1
思路理清楚之后上手写代码,同时用一些简单的测试用例来检查了一些小bug,(比如初始状态写错了)发现盒子宽度是逆序的时候会出现无法处理的情况,于是通过修改排序函数中比较大小的函数来规避 注意返回的逻辑变量与期望的大小是相反的 写完这些面试时间已经到了
总体来说,上来自我介绍的时候说了姓名学校入学时间,好死不死说了一句学过数据结构了 之后首先是问了实习会做什么 其次问了面试官对我有什么建议。面试官肯定了我的表达能力,但是说我的代码能力需要加强,可以多看看面经,我心里有一点点慌。貌似我踩雷了,不应该让面试官再回忆我的缺点的
第二场 上海base
Q: 计算N个数中,抽取k个数的最大和
转换成求K个最大数,又转换成快速排序的算法,在面试官小哥哥的提醒下意识到K个最大数内不需要排序,所以在写出快速排序的基础上还需要进行修改。。然而我发现自己对快速排序理解还不够深刻,解释原理的时候磕磕绊绊,在解释分界线的时候误认为是一半之处,小哥哥还顺着我的话往下说真是呜呜呜谢谢不戳穿之恩。是否继续递归需要分情况讨论:较大一组数的数量大于/小于/等于K 根据需要停止/继续排序 算复杂度,我认为原本最终停下时的被排序的子数组长度是1,在本题情况下是n/k,所以结合原本快速排序的时间复杂度,本题版本的时间复杂度应该是 $$ O(nlog \frac{n}{k}) $$ 面试官说应该要更小一些(惊恐的怀疑自己算错了,从语气中听出来的)。之后自己设计了一组简单的用例,但是只测试到了一种情况,还有一种来不及测试针对性的用例,于是面试官问了一些设计用例的测试思路。从数据规模,排列方式,k的大小选择上都说了一些。最后一个当我提到的时候面试官也正好开口了,说明是重点。
除了问题,开头还问了我的简历中的项目,问了消消乐 结果因为听不清加上英文没对上我还去翻了自己的简历才反应过来,自己的简历也要好好复习哇
基础功不扎实,回答的时候磕巴空白很多,写代码也卡了很久,天哪连基础的快速排序都磕磕绊绊的 虽然后来还坚强的走完了流程 但是我觉得听语气上来说 我应该是凉了。
之后只好意思问了提升自己的方法这个问题,得到的建议是偏工业方向的,做经典的项目,对比学习经典的代码来提高。
后记
其实是在结果没出来之前码字的,我心里残存的不甘心和渴望反映在了梦境里,我真是高考都没那么心心念念过。事实证明我的努力完全配不上我的在意。也罢,从在意的事情的失败上来学习面对失败,同时也学到很多面试小技巧,以及认识到了自己的诸多不足和five之处。谨以此警醒自己。