查看: 33146| 回复: 79
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 在职ds转码刷题经验分享

   
全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
刷题快七个月了,面试也快到了尾声,本人并不厉害,写这个总结纯粹是为了分享这大半年刷题的经历和经验教训,刷题的时候也看了地里不少的帖子,收获良多,希望自己写的可以造福有需要的人,同时为后面积攒人品,早点签offer,顺利跳槽!!!


背景
在ds组做偏engineer的活,但是没有任何刷题基础。master的时候上了很多ml和ds的课,只上过一门data structure&algorithm的课,除此之外,没有上过别的cs课了。整个过程从九月底,到现在,也算是比较长的了。主要是因为我真的对sde一无所知,没有自信,所以想准备地充分点。目标瞄准junior level的sde/de/mle。

时间线
一共三轮。第一轮,每天3-4题,花了四个月刷了400+新题;一月份底开始第二轮,开始做过的题记笔记,高频和经典题为主,又学习了很多新的算法,大概刷了150老题,50新题,也集中刷了几天的hard,刷到吐血;三月份始投简历,开启第三轮,老题为主,看到老题有些还是不会,像失忆了一样,看到自己以前写的代码也看不懂,才意识到及时复习的重要性。

第一轮
看了地里很多帖子,也问了很多同学,介绍经验的和推荐的资料,真的非常感谢那些分享。最后敲定了educative上的课,也买了algoexpert的课,这个后面说。制定好计划之后,采取行动。

第一轮学习新知识为主,先学习数据结构,配合educative上的data structure和algoexpert上的crush course,先对数据结构有个了解。也翻出了当时上课的讲义,自己用python手写数据结构。之后学习算法,配合educative的pattern课,刷对应的lc上的题。pattern刷完差不多是可以到200题的。自己可能还会刷些别的tag中相关的题。这个阶段持续了四个月,刷了400左右,基本保持每天3-4道。当时加入了一个打卡群,每天几道题,一开始还是挺不错的,起到了监督的作用。

这一轮刷题遵循的原则是想了几分钟不会就看答案,时间花在理解答案上面,看了一个题的答案后,这个pattern类似的题大概可以自己写出来。但是由于这个可能是短期记忆,所以到后面发现都不会了,可以看第二轮的细节。educative上的解释还是很不错的,所以基本没有参考别的资料。pattern刷完后,有些上面没有的题,如果我连solution都看不懂,就会去找视频,主要推荐huahua,backtobackswe,残酷群群主,tech dose的视频,真的讲的非常清楚,看视频一目了然。第一轮是最难受的时候,但是在三个月左右突然又开窍的感觉,慢慢上手了。还是有点慢的哈哈,但是开窍的时候真的很开心。

刷了一定量后,参加了contest,2-3题左右,还是会遇到新题很慌很不自信的感觉。仔细想了想要做些改变,首先我先退出了打卡群,因为我觉得一味追求数量,想提交答案,排在榜首,慢慢地不追求自己有没有搞懂题目。所以后来选择退出。

第二轮
第二轮到了一月底吧,觉得自己该从头复习了,也听了朋友的建议说可以重点刷top liked,而且反思当时刷题数量不够。当时请了假,想趁着假期,刷点高频hard题,不做不知道,一做吓一跳哈哈。刷top liked,很多以前做过的题都不记得了,甚至当时自己做出来的,都看不懂自己当时写的代码。反思下因为当时主要用pattern刷,并没有好好记在心里,自己总结,转化为自己的东西。这次我要求自己写笔记,分析这道题的思路,如果需要画图分析,分析例子,分析时间复杂度,看不同的解法。这个过程还是比较久的。请假那几天每天十个hard题,真的要吐血。但是效果惊人,重新看的时候,有更多的时间思考,比如思考为什么用stack,stack的本质是什么,思考monotic stack的作用,思考recursion到底在干嘛。慢慢地发现看答案理解的速度变快了,有点像张无忌会了乾坤大挪移后看别的都理解快了。另外,我感觉我工作中写代码的效率也变快了,不知道是不是心理作用啊哈哈。

第二轮一半,开始投简历,准备oa题,看公司高频题,还是坚持写notes,当时看亚麻oa都觉得怎么这么难,产生了很大的畏难情绪,但是静下心来想,其实都不难,还学了些新算法,比如dijstra,mst之类的。当时心态其实有点慌,觉得自己太菜了,oa题都看的那么费力,面试可咋办。也发了些帖子请教大家,得出的结论觉得还是要多刷。就静下心继刷题。开始投简历,加hr联系其实还有一段时间,完全有时间提高,不用慌张。

同时开始mock,mock真的太重要了,对心态的锻炼有很大的帮助。虽然当时我刷了不少题,但还是很害怕面试,很大的原因因为没经历过,完全不知道是什么流程。做DS从来没经过coding interview,所以下定决心用pramp来mock,每周至少两次mock,从一开始紧张的不行,脑子一片空白,到后面不会也很平静,到形成自己的一套答题流程,真的每次都在进步,也可以增强信心。mock也可以学习别人的流程,也听到了不少的口音,也模拟了面试前那个紧张的情绪,到后面就一点不紧张了。

notes写多了,好像开始自己动脑子思考算法了,虽然有时候还是碰到做过的不会很慌张。越是哪里薄弱,越是主刷哪里,而且总结当时卡在什么地方,为什么没走下去。这个过程很费时,但是很重要,会有质的飞跃。

第三轮
第三轮高频,用interview的流程去做,分析,写comments,边写别说。

陆陆续续来了面试,从头又复习了遍基础知识,然后对于薄弱的环节,之前没有好好总结的继续写notes总结,比如我之前特别怕binary tree相关的题,就花了一天集中刷,思考,做笔记,就感觉好像理解了。对,这时候学习吸收的能力也增强了,真的。对于之前看过的hard题尽量自己想,形成自己的做法,然后再做。也有了质的飞跃,mock interview的时候逐渐形成自己的流程,再次强调不要怕去mock。

投简历有了回应后,就集中刷oa题,面经题,总结算法。

第三轮的目标是做道每道题都能理解透彻。一直到现在又精刷了100+,经典的hard题可以自己做出来了。面试的时候为了准备一些公司的,就单刷些高频题,当然感觉对recursion的理解又上了一个高度,但是出现了一点overfitting的问题。这边在面试部分详谈

面试遇到的coding interview

面试的第一轮基本都是coding,目前遇到的几类:
1. medium level lc原题
2. 套了lc题外壳的practical coding
3. 完全靠自我发挥的practical coding
4. 比hard还hard非原题但是有点类似的lc题。

具体策略
1. 要保证做的清楚又正确
2. 快速锁定题考察的本质,思路清楚又正确
3. 现场发挥,或者遇到面经,以沟通为主
4. (确认自己肯定写不出)坚决不放弃,积极沟通交流,让面试官了解自己的想法,争取写出brute force

碰到的主要是2,3,4,原题特别少。Mock 的作用这时候出来,自己练过几次了之后,不会慌张,可以冷静分析。每次看到题的时候要告诉自己这是合作的过程,不是你一定要短时间做出来,当然最好的就是又做的出来,又沟通的很好。我拿到的7个coding inteview,除了stripe挂了,别的都过了,当然有一些过了一周多才通知我,不知道是不是不够优秀,做了备胎。其中有两三个没有做出最优解,但是一直保持沟通,积极思考,解释自己的思路,也都过了。所以我觉得保持沟通是很重要的,对方也在考察你的思考过程,如何沟通,看你能不能成为一个靠谱的同事吧。如果面试官不说话,也可以主动问询hint,或者问自己说的是不是对,让他参与到这个过程。

这里说下overfitting的问题,就是对于不那么难的practical coding问题,有时候会卡住,在面试后可能才恍然大悟,这个点还没有好的解决办法。感觉practical coding有时候需要发散性思维和灵光闪现。

几个实战经验:
1. 总结出自己的一套流程:比如上来先分析问题,确认input,output,think out loud the approach, brute force到optimization,写下基本步骤,想edge case,分析复杂度。每一步都可以和面试官确实自己是不是on the right track,让他参与到你的思考中。这个部分可以在mock中慢慢摸索,忌生搬硬套,忌自言自语,忌自我感动
2. 边写边解释。这边有些人可能不习惯,我比较喜欢边写边说,当然有时候容易犯错,要注意。写完每一步可以停顿下来检查。写的时候也可以加上一定的comment
3. 注意clean code,variable name,空格,如果用python,最好写的pythonic一些(如果面试官也熟悉python的话,这个可以通过组主要的语言来了解)
4. test部分,取决于平台和面试官,有些面试官要求dry run,有些面试官直接想test case,有些直接跑现有的test case即可,要问清楚,不要埋头苦干
5. 写完代码做一遍proof read,我本人很容易犯的错误是variable name可能会写错
6. 发现有bug,要沉着冷静debug,这个也是面试官考察的一部分,看你怎么分析问题,怎么debug(当然有些公司要求bug free,可以事先了解清楚)
7. 面经和tag对小公司不太准确,因为组和组的不同;如果找不到靠谱的面经,这时候复习以经典算法为主比较好
8. 轻松上阵,放松心态,才能发挥的最好。可以把不那么想去的公司排在前面做练习,到后面会慢慢地不紧张
9. 注意时间,至少要保证brute force写出来,有些面试官会控制时间,如果不控制自己要关注时间
10. 自信自信自信,写brute force也要写出惊天动地的感觉哈哈
11. 沟通沟通沟通,不要把面试官放在对立面
12. 面试后复盘,哪里做得好,哪里可以做的更好,为什么当时卡住了

可以做的更好的地方
开始面试后,也就渐渐发现六个月刷题的一些问题,如果重来,我自己会避免的:
- 刷题不在于多,刷完pattern后或者更早就应该刷第二遍了。之前一直不相信一题要多刷,自己真的naive,一道题过了一段时间再看,往往会有新的见解和思路,对原有的算法也会理解的更深,而自己能力提高后,理解的也会更快。所以我觉得与其四个月刷了四百题,不如在两三百的时候就结合旧题
- 记笔记很重要,记下自己的思考和思路,而且之前自己做出来的并不意味你之后又可以做出来。而以前的笔记可以帮助你马上恢复记忆。
- 知己知彼,不要过度依赖面经,也不要完全放弃面经,这部分自己还没想好可以如何做的更好,也希望大家分享自己的办法
        
遇到过的问题&如何解决的
- 今天好累不想刷:前期最好要每天坚持,形成习惯,加入打卡群,不刷题可是要交钱的
- 题好难看不懂答案:查找讲解的视频;休息一会儿换换脑子,过一会儿再看
- contest排名不好:不和别人比,想想自己为什么没做出来,如果觉得题目太不典型,可以适当放弃;这里也多说一句contest的问题,我第二轮开始也没怎么参加contest,一方面因为觉得contest的收益不是很高,对于新题的恐惧可以通过mock客服;另外发现有些新题有点偏,不典型,觉得还不如把时间放在搞懂高频题和经典题上
- 很沮丧,不想刷了:可以和朋友家人抱怨,抱怨完了心情好点了,继续刷;要保持心态稳定
- 瓶颈期:刷hard题,学advanced算法,加大难度
-一想到好多不会就很慌:列举出自己薄弱的地方,一个个攻克,光着急是没用的




再碎碎念一些
1. 觉得痛苦的时候就是成长的时候。每次和一道难题干的不行,自己搞懂写出来后感觉神清气爽的不行,一通则百通
2. 量变到质变,需要加入自己的思考。一开始看backtracking,recursion真的搞不懂在干嘛,从知道这个算法,模仿别人写,理解,再用到新的题目上真的每一层都是质变
3. 从薄到厚,从厚到薄。一开始是知识的积累,非常被动,刷完了pattern,似乎自己看过了很多pattern,但是并没有转化成自己的toolbox,但是刷了几遍后就知道了
4. 之前无法别人一题刷很多遍,感觉能做出来一次就够了,现在真香了,每次做真的有新的启发
5. 有几次真的觉得脑子不行了,看了好多题怎么都不会,答案都不会,很绝望,这时候千万不要放弃,今天不行,明天一定可以。而且你会发现,你攀过了这座高峰,会感到非常愉悦的感觉,之前可能在瓶颈期
6. 要对自己有信息,我是属于努力过后才有自信的,但是我后来一直想人要无条件相信自己,当然不是自恋那种,就是虽然我今天不会,但是有一天我会达到的
7. 一旦下定决心刷题,就势必要放弃一些娱乐时间,坚持很重要
8. 刷题的时候要注意调整策略,不要死刷,要根据自己的情况来调整计划和安排,要注重长久发展,一天猛刷10道,不如天天稳定地输出三道
9. 不要想一步登天,不要想着第一遍就可以把最优解理解了,或者说多解全理解了,一步步来,这也是成长性思维的重要性。相信积累的力量
10. 自己注意总结题型,这时候发现你真的把书读薄,试着在脑子里过一遍数据结构和算法
11. 如果觉得不自信,就继续刷题,继续mock,只有自己不断努力,查缺补漏,才会越来越有把握
12. 什么时候开始都不晚,当下就是最好的机会
13. 不用觉得100%准备好了才去投简历,第一个永远不会有100%准备好,第二个投简历到面试还有时间,只要刷题不断,就总有进步
14. 不要怕失败,有时候害怕面试/mock,我害怕是因为怕被发现自己的真正实力好像不咋地,失败是发现问题的过程,查缺补漏


资料分析
- educative的课还是很良心的,比较适合我这样的小白,我主要上了data structurepattern的两门课,而且文本课节约时间
- algoexpert其实不是很建议,我也只刷了30%,有些作者的讲解还不如yt上的,这里强推backtobackswe,小哥哥的声音太好了, 看到他就觉得有希望了。
- 除了上述两个,就是google具体问题,或者看discussion,高手在民间。

真的很感谢刷题这个过程,让我明白了如何学习,也再一次锻炼自己的恒心。上述都是自己的经历和想法,大家还是要根据自己的节奏来安排进度,祝每个刷题的人都拿到理想的offer,也希望自己后面顺利!!

对于转专业的同学,刷题不是万能的,但是不刷题是万万不能的。









补充内容 (2021-04-27 06:40 +8:00):
等顺利入职新公司之后会写个跳槽贴,谢谢大家的大米哈哈。简短说,我没有cs degree,ds转码比较好拿面试的岗位是de,sde-data,mle;genera sde的话瞄准亚麻和gg,对转专业比较友好

补充内容 (2021-04-27 06:50 +8:00):
针对简历的问题,有意转码的ds尽量在平时工作中做些engineering的活,或者考虑如何automate,做pipeline等,简历上尽量凸显自己写代码的能力。

补充内容 (2021-05-11 11:04 +8:00):
最终做了80道hard题,经验是大部分公司还是以m为主的,极难的题也不是lc上的原题,只写出了bf,但是一直不放弃保持交流,所以都给过了。经典和高频的难题还是值得做的,对提高能力,越过瓶颈期有帮助。个人想法

评分

参与人数 57大米 +196 收起 理由
小正_Terence + 1 给你点个赞!
haibianren17 + 1 很有用的信息!
王伊笙 + 3 给你点个赞!
苏明未 + 2 给你点个赞!
LXU + 1 赞一个

查看全部评分


上一篇:找小伙伴一个月刷狗家面筋
下一篇:在思考做一个每周互相mock interview的群组

本帖被以下淘专辑推荐:

推荐
greenday 2021-4-29 08:30:47 | 只看该作者
全局:
qinshimingyue 发表于 2021-4-28 14:13
谢谢,能分享下你当时为什么想转码吗

跟sde比ds真是弟中弟。1. 收入比sde低,在FB DS的rsu是sde的一半多点, else equal 2. 需求量小很多,FB的ds:sde ratio是1:10 3. 缺乏staff/principle ds ic path,现实中存在的ic6尤其是ic7+ ds其实非常少,大家都不是很清楚那个级别的ds ic应该长什么样,这点很sde区别很大。4. DS工作中有意思的部分,什么strategy啊,product leadership什么的,资深sde都能做。

评分

参与人数 1大米 +2 收起 理由
xlsxia + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

推荐
greenday 2021-4-28 22:18:29 | 只看该作者
全局:
楼主辛苦了!曾经也想转码,可静下心来想想转码的efforts实在太大,看了你的帖子成功劝退。。不过有毅力或者现在所在ds岗不咋滴的话,还是尽早转,ds真的太卷,性价比太低
回复

使用道具 举报

推荐
 楼主| qinshimingyue 2021-4-27 08:50:22 | 只看该作者
全局:
liaoshousan 发表于 2021-4-27 08:38
想問樓主轉sde 的原因是什麼呢

有几方面,一、在组里做的偏engineering,发现自己喜欢写代码 二、ds面试太广了,不好复习,有越来越难的趋势 三 ds很多在于analysis和critial thinking,自己不擅长且学不来。。。还是写代码有畅快的感觉
回复

使用道具 举报

全局:
Backtobackswe 推荐+1,口条清楚,思路清晰,我真希望大学时候算法课的prof是这个小哥
回复

使用道具 举报

🔗
开心的猪 2021-4-27 03:58:30 | 只看该作者
全局:
感谢楼主分享,楼主有cs degree吗?简历关都好过吗
回复

使用道具 举报

全局:
很棒的总结。可不可以加一点关于转DS自己简历怎么改的,如何拿到越来越多面试?
回复

使用道具 举报

🔗
troybitchen 2021-4-27 04:56:25 | 只看该作者
全局:
楼主的总结写得很好,我看过很多人的总结,楼主的总结很实用,我打算模仿你的方法
回复

使用道具 举报

🔗
xtang3 2021-4-27 05:00:51 来自APP | 只看该作者
全局:
非常感谢!
回复

使用道具 举报

🔗
北辰一 2021-4-27 05:06:58 | 只看该作者
全局:
请问简历如何过cs hr 那一关的? 你应该都是ds的项目,而且你花的时间在职转码都主要在刷题上了吧,还想请问一下怎么知道一道题的解法是最优解?
回复

使用道具 举报

🔗
kinpika 2021-4-27 05:51:57 | 只看该作者
全局:
lz你好 同想请教简历怎么准备的 做ds投sde岗感觉没项目很难过简历
回复

使用道具 举报

🔗
 楼主| qinshimingyue 2021-4-27 06:37:58 | 只看该作者
全局:
终于通过审核了,谢谢管理员。
回复

使用道具 举报

🔗
 楼主| qinshimingyue 2021-4-27 06:41:16 | 只看该作者
全局:
codyli520 发表于 2021-4-27 03:04
Backtobackswe 推荐+1,口条清楚,思路清晰,我真希望大学时候算法课的prof是这个小哥

同意,而且他的声音太好听了哈哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表