工作 8 年手写不出反转链表是不是进不了 bat 了?

2021-01-04 21:23:36 +08:00
 shenwu35

心烦意乱图上画半天无法代码写出,跟自己较劲不看答案, 硬写都快抑郁了,看答案下次还是忘记,所以硬肝,这很痛苦,救命。

现在还没肝出来,怎么宽慰自己?

10402 次点击
所在节点    程序员
72 条回复
irytu
2021-01-05 01:19:54 +08:00
其实还是写少了 而且这玩意跟你工作多少年还真没多大关系 试问几个公司没事业务让你操作链表 二叉树这类数据结构的 就算有 你能年年有机会这么搞吗?

写代码,量累到一定地步了,自然会有质变,至少熟练度肯定也有改善的,反正就是写写写,让比你厉害的人给你 review 提建议

那些劝退的 其他不说 就想问你们生来什么都会不用学 啥都不准备 个个都能手撕大厂面试官? 有的人准备在前 有的人准备在后 真不知道有啥好劝的

楼主要是闲着可以整点副业做做 写写代码 你每天写一点 时间久了就好了 面试准备一点套路也行 推荐一本书 crack the coding interviews,前面几章别跳过,leetcode 按类别刷题,复习到哪里就写几道相关的题,我有时间下班就写几道,没时间或者累了就休息,没必要搞很累
dartabe
2021-01-05 01:58:32 +08:00
链表题就是要多做几道就熟了 有套路的
iConnect
2021-01-05 06:25:12 +08:00
你现在回去做高考数理化试卷,也不如原来分高。这是需要训练保证的,不表示比以前更蠢了
Nerv
2021-01-05 08:08:59 +08:00
递归思想的写法比较好理解和记忆。有时候没有思路是因为心态问题,不要给自己太大压力。
djoiwhud
2021-01-05 08:50:09 +08:00
工作 9 年多,让我面试写链表反转是不可能的。连快排都搞不定了,只会写冒泡排序。

都这把年纪了,为啥要执著于进 bat 呢?这行业赚钱的人从来不是以技术为评估标准排序的。要淡化码农的印记。
serverABCD
2021-01-05 08:59:06 +08:00
啊这,,虽然业务代码和 leetcode 没什么关系,但是反转链表,反转二叉树,回朔,深广度优先遍历不应该信手拈来么。加油
Suddoo
2021-01-05 09:10:11 +08:00
这个我只能写出递归版本,迭代版本要复习一下才能写出来
jcto
2021-01-05 09:13:57 +08:00
请了解钻牛角尖。
yangxin0
2021-01-05 09:14:21 +08:00
这种基础算法和数据结构最好能随意写,链表、栈、二叉树、排序,另外别把 bat 抬得太高里面有牛人但是大部分还是 crud
lewis89
2021-01-05 09:15:54 +08:00


https://leetcode-cn.com/problems/minimum-window-substring/

错了很正常,我这看完题解 写出代码 还 debug 了 差不多 1 个小时,

多写测试用例,我一般都是在 IDE 里面写的,有 test case 多断言 比较容易找出问题

其实我一直都反对白板编程的,大部分人脑短期记忆力并不好,记不住大量的上下文,

尤其是推演算法正确性 特别是很多题涉及到+1 -1 的地方 更容易出错,需要记住很多中间状态以及上下文才能推演出一个小的 test case 的正确性,除非你模板背得特别好,还刚好碰上那道题,那当我没说。

特别是平时根本没怎么写过的套路代码的更容易在这方面犯糊涂,

即使真实的面试 我也建议 先把 test case 边际条件先写在一边,然后复盘代码的时候照着 test case 往下看

平时业务代码过于复杂的话,我也会写好简易的单元测试,这种脚手架的代码 可以帮助定位问题

另外推荐一下算法小抄那本书,用作面试是绝对够了。
gongshishao126
2021-01-05 09:17:59 +08:00
@luckyrayyy 冒昧的问一下,正则也要会手写吗~~~我用的时候一般都是百度,比如简单的校验手机号、身份证号等等,是不是要恶补掌握一下
hbhswj
2021-01-05 09:20:15 +08:00
看了一些评论,实在忍不住说两句,😂某些大佬不知道写代码强不强,反正敲键盘挺 6 。

楼主加油,力扣小刷怡情即可,不是搞算法的,没必要死磕,看答案自己写看答案自己写,重复直到有个概念即可。

还有一些评论里说转行的、劝退的、酸的,不用理会,现实中的他们可能别说题了,最起码的毅力都没有,才会来网络上找找存在感,吹吹牛 b 。不是说话难听,毕竟网络上都是人均 985,刚下飞机~
qwerthhusn
2021-01-05 09:27:24 +08:00
同工作 8 年,花了 10 分钟写出来了,还跑了 main 修改了两把才成功。

Node reverse(Node head) {
Node priv = head;
Node node = head.getSetNext(null);
while (node != null) {
Node originalNext = node.getSetNext(priv);
priv = node;
node = originalNext;
}

return priv;
}
lewis89
2021-01-05 09:30:36 +08:00
其实算法面试主要考察就两方面的能力,而这两方面的能力大多在程序员的现实工作中是几乎不怎么需要的。

1. 长期记忆能力,你需要背诵算法题的套路模板,并加以理解记忆,以便于在算法面试中快速搜索到解题思路,这大概是程序员最不需要的技能,因为本科教科书上大量的算法都在网络上有各种千奇百怪的解法与解读,而程序员在工作中很大一个工作任务就是阅读理解他人的文档,使用前人的工作成果或者在前人的基础上加以改造,现实中也不会有面试这样紧迫的时间以及几乎没什么工具辅助的情况下要求你快速解题,而且现实中我们大多记住一些算法的复杂度以及这个算法能解决的问题即可,待需要的时候去查找即可,例如我根本记不住拓扑排序算法以及模板,但不妨碍我用它来解决有向图中存在环的问题,因为需要的时候,我仓库里面有大量的资料,随时可以整理出来用于解决问题。

2.短期记忆能力,你需要记住算法中大量中间上下文,以便通过几个简易的 test case 验证出算法的正确性,而且很多题需要好几个 test case 才能验证代码的正确性,这对我这种短期记忆力不好的人真的是一个折磨,因为我在工作中验证复杂代码正确性的时候,大多都是借助机器的栈幁跟 debug 来验证,而且 test case 都是手写好,机器执行的,而不是人脑执行的,我人脑执行 test case 的时候 即使借助纸板记录 也还是经常掉链子,这也是我做算法题目前 比较慢的原因,当然随着做得多了,短期记忆力会提上来。
luckyrayyy
2021-01-05 10:25:17 +08:00
@gongshishao126 啊,不是,这个是 leetcode 上的一道题,实现一个非常简单的正则表达式匹配,只有.*两种特殊字符和普通字母。
hejw19970413
2021-01-05 10:44:08 +08:00
一遍不行写两遍 两遍不行写 3 遍 , 就刚开学英语一样,我记得第一个单词就是苹果 apple,一天到晚就是 a p p l e 这辈子都肯定不会忘的, 还是得多练。 就比如说你这道题 。 其实就基础的交换问题。只不过就是得先记录下次我要和谁进行交换。
zypy333
2021-01-05 10:46:21 +08:00
冒昧问下你肝是为了证明自己还行,还是想进 bat
raaaaaar
2021-01-05 10:53:22 +08:00
无她,唯手熟耳
todd7zhang
2021-01-05 10:59:56 +08:00
筛选链表的题, 从简单一路刷一下去,手熟就秒出
Suddoo
2021-01-05 11:08:18 +08:00
@djoiwhud 是的,有时候技术并不是最重要的,技术一般混得好的大有人在

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/741661

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX