程序员面试为什么要考算法题?

1,176 阅读4分钟

文章首发到公众号:月伴飞鱼,每天分享程序员职场经验+科普AI知识!

大家好呀,我是飞鱼

在国内的面试中,尤其是大公司,算法题已经成为几乎必刷的内容。

你要是不会做这些题,基本上就别指望进那些大公司了。

图片

那为什么会这样呢?

其实进了公司之后会发现,平时工作都是CRUD的普通代码,根本不用碰这些乱七八糟的算法题。

但我们知道大厂招人根本不愁,你应聘一个职位可能就有上千人跟你竞争。

那大厂选人的时候挑啥呢?

过去,这些公司一般考的都是所谓的八股文题,比如如何优化性能,如何解决高并发问题等等。

但现在你会发现,这些题早就成了网上的八股文,每个人都背得滚瓜烂熟。

结果就是,都差不多,根本分不出水平来。

所以越来越多的公司开始考察这些算法题了。

而且算法可以很好的辨别是不是从培训机构出来的。

因为培训机构会忽悠很多半路出家,有的跟理科都不搭边的人过来学计算机。

而且培训机构只会教流行框架,不会教这些费时费力但很重要的东西。

作为程序员,大家其实都心知肚明:

刷题网站上那些算法题,工作当中用的很少,面试的时候能快速过关的那些人都是题海战术刷出来的。

但是现在的招聘市场,现状就是这样的。

很多中小厂,甚至有些外包面试的时候,也必考算法题,你让Java之父来面试,他也得刷题。

之前很多人说是为了考察动手能力,但是我觉得其实不是。

我觉得它更像是一种筛选机制,通过这种手段筛选出能更卷的人。

如果面试中算法题真的写不出来怎么办?

如果你有一点思路,但因为某个点卡住了,可以放心大胆写,主动抛出问题,面试官还是很愿意提示你的。

没见过的难题在提示下写出来也会让面试官觉得你还不错。

如果真的完全不会,可以和面试官提出换一道题。

我一直认为,算法题的表现并不完全代表你的工程或编码实力。

但不可否认,很多大公司就是喜欢通过这样的方式来筛选候选人,游戏规则如此,只能接受。

有啥其他看法,欢迎在评论区留言讨论。

想看技术文章的,可以去我的个人网站:hardyfish.top/。

  • 目前网站的内容足够应付基础面试(P7)了!

每日一题

题目描述

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

解题思路

想要做出这道题,需要知道一个数学定理:

  • 两个长度分别为 n 和 m 的数相乘,长度不会超过 n + m。

因此我们可以创建一个长度为 n + m 的数组 res 存储结果。

另外,最后拼接结果时需要注意忽略前导零。

代码实现

Java代码:

class Solution {
    public String multiply(String n1, String n2) {
        int n = n1.length(), m = n2.length();
        int[] res = new int[n + m];
        for (int i = n - 1; i >= 0; i--) {
            for (int j = m - 1; j >= 0; j--) {
                int a = n1.charAt(i) - '0';
                int b = n2.charAt(j) - '0';
                int r = a * b;
                r += res[i + j + 1];
                res[i + j + 1] = r % 10;
                res[i + j] += r / 10;
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n + m; i++) {
            if (sb.length() == 0 && res[i] == 0continue;
            sb.append(res[i]);
        }
        return sb.length() == 0 ? "0" : sb.toString();
    }
}

DDD实战课

课程链接:time.geekbang.org/column/intr…

资料链接:url81.ctfile.com/f/57345181-…

访问密码:3899

从0开始学大数据

课程链接:time.geekbang.org/column/intr…

资料链接:url81.ctfile.com/f/57345181-…

访问密码:3899

趣谈网络协议

课程链接:time.geekbang.org/column/intr…

资料链接:url81.ctfile.com/f/57345181-…

访问密码:3899