为什么大厂程序员都要面试算法

这不是广告

大部分起这个标题的都是广告,为了告诉你通过一些课程就能让你进入大厂。我主要是说给我自己听,我是如何决定在工作这么多年后开始学习算法,以及这样判断的决策依据是什么?

一、算法和数据结构是什么

算法是什么?

  • 具体的问题
  • 设计解决整个问题的流程设计
  • 评价流程好坏的标准和方法

算法分类

下面两大分类包含了所有

  • 明确知道如何算的流程,1+1=2,利用计算器更快速计算。
  • 不知道如何算,但是知道怎么尝试,通过计算机代替人工尝试的流程。

举例

  • 问题: 给定个正数数组排序
  • 算法: 选择排序,冒泡排序,堆排序等众多经典的解题思路,我们当然可以创造自己的算法。
  • 评价: 不同排序方法的复杂度

数据结构是什么?

数据结构是数据存储组织的方式,是很多算法的运行载体,合适的数据结构可以带来更高运行或者存储效率。

  • 连续结构 连续区域,通过下标寻址非常迅速
  • 跳转结构 内存不连续,通过指针快速跳转多区域内存地址。

基本数据结构

  • 数组 连续 查询快 修改慢
  • 链表 跳跃 查询慢 修改快

二、算法和数据结构工作中能用到吗?

以我多年的工作经验来讲,对于当下中国90%的从事Coding工作的程序猿来说,都是用不上的。更准确的说法是,用不上传闻中大场面试的各种刁钻题目。原因有几个方面:

  • 业务的原因,外包,国企,二三线城市的企业占了市场的70%以上。这类企业对程序员的要求是几乎业务实现,即增删改查。这类工作可以借助已有的框架、工具、开源项目、搜索引擎+一个努力且不太笨的程序员都可以实现。
  • 专业分工,对于对算法高度要求的企业,通常都有专门的算法科学家,这些科学家写好了算法,程序员只需要掌握如何让算法在程序中跑起来即可。(注:很多算法岗位也是工程师不是科学家)
  • 你的老板不懂,算法和数据结构是最近几年才开始在行业内疯狂内卷,算法最强的一般是工作5年左右或者在校学生。工作十年以上的算法精通的一般是遭受社会毒打且本人足够优秀自学出来的。你的老板自己很可能不会,所以站在不会算法的阵营,发出“算法无用”。对面试者算法要求自然不会高,觉得这个人能干就好。
  • 业务紧迫,以后再优化。当前业务不能给与足够的时间用于思考最优解,随意先写一个基本实现的,想着以后用一个NB的算法重构,然后就没有然后了。在一线大厂也普遍存在有能力写更好的算法,实际上写的一团shit的代码。

所以,大家普遍有一种感觉,面试之前要疯狂刷算法。进入工作后,主要搞好同时关系,表现积极一些就可以了。业务上老板只关心你的进展和生产稳定。并不会要求你每天讲讲你的算法由多NB,因为总是一帮人比你更NB。

三、为什么我们要学习算法

3.1 大厂为啥要面试算法?

  1. 工作中确实要用到二叉树,红黑树、图论等等。10%
  2. 大家都是这么面试的,让被面试者做个题,我可可以干点别的。20%
  3. 聪明度,可以看出来候选人是不是够聪明。40%
    - 竞赛冠军、高考高分、算法高手都是够聪明且努力的一拨人。
    - 解决算法问题,认为你可以解决业务总的实际问题。
    - 思维和逻辑能力,对一个题目思路清晰,解答流畅,思维和逻辑能力好。
  4. 代码能力。很多面试题花一两天就可以准备充分。但是代码能力确实长期积累的能力。通过代码整洁度、简洁性、命名、模块等等可以看出候选人的代码基础。简单问题不行,完全没思路的候选人大概率不能编码。 30%

大厂真的很看重你的学历和聪明度,这是不自觉的划分界限。让那些低学历且笨的人离得远远的,找个大佬带带自己。

3.2 为什么我要学习算法?

  1. 在某些场景下懂算法,确实可以解决真实的业务问题。
  2. 算法被大厂一流的程序员认可一定有他的原因,虽然我还没办法站在这个高度思考。但先要从行为上向他们看齐。
  3. 算法的联系可以让你更好的掌握一门语言,通过对内存一点点的探索可以提升coding的思维习惯。
  4. 掌握一些问题的解决方法和方案,很多算法其实是计算机的精华知识,如果不学习你在面对问题时就需要自己思考一套解决方案。有了足够的算法联系,可以让你思路更开阔,设计更精妙。
  5. 算法可以解决面试的问题,让我找到更好的工作。
  6. 我想我可能一辈子都会在这个行业,虽然年龄不小了,但未来还很长,我想称为一名程序员,写一点能够让自己满意的作品。我不太知道如何到达,但算法和数据结构一定是绕不过的一步。
  7. 就如下围棋做死活题一样,就把学习算法当做一种游戏吧,锻炼一下大脑,探究一下自己的能力。命名算法带来的好处远大于围棋,为啥要不选择一个更好的路走呢。

和绝大部分比普通人一样,30岁之后平凡可能注定伴随一生。但还是想挑战一下,也许可以不平凡呢?

Some say, the moon?
Why choose this as our goal?
And they may well ask
why climb the highest mountain?
Why, 35 years ago, fly the Atlantic?
We choose to go to the moon.
We choose to go to the moon.
We choose to go to the moon in this decade and do the other things, not because they are easy, but because they are hard

四、学习规划

今天是2022年5月4日,后面每周都会花一定时间学习算法,结果分享到CSDN的博客里。主要是题目和解法,外加一些心路历程和学习心得。分为下面三个阶段:

  • 第一阶段:到2023年5月4日,
    每周都要学习一点算法,尽量每周都要有1+的文章。目标是:培养算法的兴趣和学习习惯,掌握基本的算法题目和解法,建立算法的整体体系。对标围棋业余1段
  • 第二阶段:2023年以后,保持定期体的算法联系,钻研一些算法的专项题目,争取对某一个领域有一定理解。对标业余3段
  • 第三阶段:2024年以后,不再要求投入专门的时间在算法上,要通过实际的工程,开源项目学习,体会高手们的coding思路。看淡算法的价值。 这个以上靠自学很难突破,需要耐心和机遇。

原则:

  1. 坚持优先,数量和质量次。开始追求保持良好习惯,不做太高的目标设定。不要脱离舒适区太远。
  2. 刻意练习,循循渐进,不要停留在固定的题目类别上,更多的是对解决问题过程思路广度和深度的积累。不以做难题为导向,更多看重题目的适用场景和价值。
  3. 多动手。
  4. 只用一套教材,由浅入深。注重基础概念和数据基础。
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值