普通学校,我是该打ACM还是做项目?

大家好,我是帅地。

之前星球有一位大一的小伙伴问帅地,因为学校一般,他是应该继续刷算法,打 ACM,还是把时间花在做项目上好呢?

他发的字有点长,我就不截图太多,只截图我的概括

image-20210713124043754

打 ACM 的话,大一大二就会少很多时间学习其他知识,但有机会拿到 ACM 奖牌,可以给简历加分;不打 ACM 的话,就有大把的时间学习计算机基础,刷 leetcode,做项目,然后早点去实习,但又觉得学历一般,怕过不了大厂简历面。

所以,对于普通学历的人来说,ACM 打还是不打?

不知道大家有没有这个疑惑?反正我当时是没有,因为我大一对招聘求职这块还不了解,假如你在大一大二就有这个疑惑,我觉得你已经超越了很多人了,因为很多人在大一大二,根本对求职一无所知。

对于这个问题,帅地先给大家说两个身边读者的真实案例吧。

读者一(没打ACM)

学校是二本,比较差劲,学习氛围也差,他没打过 acm,我让他大一好好刷算法题,在之后刷计算机基础,也就是计算机网络,操作系统这些基础课程。

再之后就是深入去了解一门编程语言,例如Java,Python,C++ 或者 Go,在之后就是学框架做项目,算是 leetcode 刷了几百道,然后计网和操作系统在大二第一学期就刷了,之后做了几个前后端分离的的项目。

这个小伙伴在今年春招拿了腾讯阿里的实习 offer。

读者二(打ACM)

也是二本,学校也一般,不过学校也有 ACM 队,学校最好的成绩是拿过省牌,忘了金牌还是银牌了,不过这个同学挺喜欢刷算法题,所以大一大二基本是在 acm 队刷题,最后貌似是拿了个省铜,在之后就开始刷疯狂刷计算机基础知识,然后在随便做一些小项目。

结果是这个同学在今年拿到了网易和腾讯的实习 offer。

这两个同学的共同点就是,准备的早,有扎实的基础,不错的算法能力以及不错的项目经验,区别就是打 ACM 的算法能力更强,而不打 ACM 的项目经验更加丰富。

当然,他们有这么强的学习意识,也算是有我的一份功劳吧,毕竟从大一就一直找我唠叨,问这问那的。

打不打?

通过上面我说的例子(其实还有很多这种,毕竟我十几万读者),如果你准备的早,有扎实的专业知识,不错的算法能力和项目经验,就算你的学历一般,那么你还是有机会拿到大厂 offer 的。

重要的不是打不打,而是你在各个方面学的如何。

帅地之前也问过腾讯和字节的 HR,他们都说简历主要看:学历,靠谱的实习经历,笔试成绩,比赛奖项。

所以学历虽然很重要,但绝对不是唯一。

特别是对于互联网一线大公司,获得面试的机会,还是不难的,例如像腾讯阿里字节跳动这些公司,还是不会卡学历卡的太紧的,因为他们还是比较愿意花成本去寻找人才。

当然,有些公司还是比较卡学历的,例如 ViVO 啊,华为啊,一些国企啊,像这些的话,就真的挺卡学历,基本需要 211 或者 985 才行。

不过我说的是开发岗哈,虽然现在开发岗也越来越卷了。

所以呢,打不打不是核心,核心是你这两年的学习。

假如打 ACM,那么你的算法肯定很扎实,到时候算法笔试和算法面试这块不需要准备太多,而对于计算机基础,学校有教,你有一定基础,那么复习起来很快的,项目之类的也可以突击。

假如不打,那么可以多刷 LeetCode,然后学习自己选的技术栈,之后有机会多去实习,有了强大的项目经验和扎实的基础,以后拿个不错的 offer,还是机会很大的。

如果你是小白,并且不打ACM,也可以看看我写的学习路线:

1. 后端通用学习路线

2. 适合普通大学生的 Java 后端开发学习路线

3. 适合普通大学生的前端开发学习路线

打不打的一点小建议

不过,关于打不打,我还是有点小建议。

如果你本身不喜欢打 ACM,体会不到那种 beat100% 的乐趣,那么我觉得还是不打了;或者说你的学校连个牌子都没人拿过,又或者学校连个 ACM 集训队都没有,去比赛还是自己自费去,特别麻烦,那么也建议别打了。

不打的话,也要坚持去刷算法题,然后,做项目,找日常实习。 核心就是自己算法不能太差,基础得搞扎实,如果自己可以多多折腾一些开源项目就更好了。

反正要想进大公司,要嘛你有强大的算法能力支持,要嘛你有强大的项目经验,就算进不了大公司,也能拿个不错的 offer 吧。

另外,无论打不打,该看的书还是得看,至于看啥书,帅地这里都总结了:少走弯路,必读计算机经典书籍推荐

ACM/ICPC比赛成绩会按照一定的规则计算各位参赛者的名次并实时显示排行榜,计算规则主要参考解题的数量及罚时,解题数量越多,罚时越少,则排名越高。 解题数量很容易计算,只需考察比赛中标记为“Accepted”的题数即可。罚时计算则相对复杂,对于提交到竞赛系统中的每道题目,系统会给出一个罚时,为从比赛开始到该题提交的代码第一次被“Accepted”的时间。请注意,只是第一次“Accepted”。对于“Accepted”之前的每次提交,都有20分钟的罚时,但如果该题目最终未解出,则不计罚时。 先在有一个比赛的题目通过情况记录,请生成该比赛的排行榜。 示例输入: 2008-04-25 18:00:00 2008-04-25 23:30:00 1000 1001 1002 1003 1004 38 602203621 1002 Accepted 756K 30MS C++ 2008-04-25 18:04:59 37 liheyuan 1002 Wrong_Answer 768K 10MS C++ 2008-04-25 18:28:05 36 ftest 1000 Accepted 888K 10MS C++ 2008-04-25 21:30:32 35 ftest 1000 Accepted 904K 10MS C++ 2008-04-25 21:30:55 34 gaojianwei 1000 Accepted 768K 10MS C 2008-04-25 22:15:58 33 gaojianwei 1001 Wrong_Answer 904K 10MS C 2008-04-25 22:18:01 32 gaojianwei 1004 Accepted 768K 10MS C 2008-04-25 22:24:23 31 lzz 1000 Accepted 904K 10MS C++ 2008-04-25 23:29:27 30 lzz 1001 Wrong_Answer 904K 10MS C++ 2008-04-25 23:30:17 示例输出: Rank Name Solved 1000 1001 1002 1003 1004 Penalty 1 gaojianwei 2 4:15:58 -1 0 0 4:24:23 8:40:21 2 602203621 1 0 0 0:04:59 0 0 0:04:59 3 ftest 1 3:30:32 0 0 0 0 3:30:32 4 lzz 1 5:29:27 0 0 0 0 5:29:27 5 liheyuan 0 0 0 -1 0 0 0:00:00
<think>嗯,用户问的是ACM中的继承概念,我需要先确认“继承”在这里的具体含义。在编程和算法竞赛中,"继承"通常是面向对象编程的概念,比如类之间的继承关系。不过,ACM竞赛主要关注算法和数据结构,可能用户提到的“继承”有其他特定含义。 首先,我回忆一下ACM竞赛常见的内容,可能涉及到的继承概念比较少见。或许用户指的是组合数学中的递推关系,或者动态规划中的状态转移,有时候可能被类比为“继承”。比如子问题之间的状态转移类似于继承之前的结果。 接下来,查看用户提供的引用资料。引用[1]提到排序、搜索和图算法,引用[2]涉及数论中的同余和扩展欧几里得算法,引用[3]和[4]主要关于ACM入门和经历。这些都没有直接提到继承的概念。可能需要从其他角度考虑,比如代码复用或结构设计中的继承。 考虑到ACM竞赛中的代码通常注重效率和简洁性,可能较少使用面向对象的继承,但有时在构建复杂数据结构时会用到。例如,使用C++的类继承来扩展某些数据结构的功能,比如自定义的线段树节点继承基础节点,添加额外属性或方。 另外,可能在问题建模中使用类似继承的思想,比如在状态压缩或状态转移中,子状态继承父状态的部分属性。例如,动态规划中的状态继承前一个状态的结果,进行状态转移,虽然这更多是递推关系而非传统继承。 需要进一步确认用户的问题是否可能存在的误解,或者是否有其他竞赛相关的术语称为“继承”。例如,在图算法中,生成树是否被视为继承结构?或者在组合数学中的递推公式是否被称作继承? 综合来看,可能的解释是用户混淆了术语,或者想了解特定情境下的继承应用。因此,在回答时应当分情况讨论:面向对象编程中的继承在ACM中的应用,以及算法设计中的类似继承思想,如状态继承或结构复用。 需要确保回答准确,同时引用提供的资料。虽然引用中没有直接提到继承,但引用[1]提到数据结构学习重点,可能涉及结构设计中的继承;引用[3]提到头文件的使用,可能与代码组织有关,但关联性较低。 最后,生成相关问题时要围绕可能的继承应用场景,如面向对象在ACM中的使用,或算法中的状态继承,确保问题有助于用户进一步探索。</think>关于ACM竞赛中的“继承”概念,需要明确其在不同上下文中的含义。以下是结合算法竞赛特点的解释: ### 1. **面向对象编程中的继承(代码实现层面)** 在ACM编程中,虽然较少使用复杂的面向对象设计,但在某些场景下可能用继承优化代码结构: ```cpp // 示例:线段树节点继承 class BaseNode { public: int l, r; int sum; }; class ExtendedNode : public BaseNode { // 继承基础属性 public: int lazy_tag; // 添加惰性标记功能 }; ``` 这种用多见于需要扩展数据结构功能的场景[^3]。 ### 2. **算法设计中的"状态继承"(抽象建模层面)** 在动态规划等算法中,状态转移过程常体现继承思想: $$dp[i][j] = dp[i-1][j] + dp[i][j-1]$$ 此处$dp[i][j]$的计算继承了前序状态的结果,类似状态属性的继承[^1]。 ### 3. **数学递推关系中的继承性** 组合数学问题中常通过递推公式实现数值继承: $$C(n, k) = C(n-1, k) + C(n-1, k-1)$$ 该公式表示组合数继承自更小规模的子问题结果[^2]。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值