双非学历为进大厂天天刷Java面试题,面试却履败,原因竟是算法?

简介: 疫情过后,招聘与求职受影响到底有多大?我不知道,但我的真实感受是,即使有疫情的影响,最近还是持续有朋友来跟我说他们今年工作的新动向。有人跳槽去了大厂,有人下定决心出来创业,也有人还在观望,等待更好的机会。

写在前面

疫情过后,招聘与求职受影响到底有多大?我不知道,但我的真实感受是,即使有疫情的影响,最近还是持续有朋友来跟我说他们今年工作的新动向。有人跳槽去了大厂,有人下定决心出来创业,也有人还在观望,等待更好的机会。

这位还在“等待更好机会”的朋友,其实已经拿到了几个 Offer,在我看来都是不错的方向,待遇也很可观。但其实,他自己的目标,是头条一个招聘了很久的岗位。这也能理解,每个程序员都有一个甚至几个自己的 Dream Company。

我问他既然有目标,为什么不行动,你的实力应该也没问题。他说,“说出来你可能不信,技术面我有信心,但是头条面试比较注重算法,这是我的短板,所以还得准备准备”。接着他问我,工作中大家实际用到算法的情况不是很多,为什么大厂面试一定要考,而且算法考试还都是 Hard 模式。

我想,对于很多人来说,问出来这个问题的时候,已经有答案了。第一,作为一名合格的程序员,如果你连基础的算法都学不会,那面试官肯定会怀疑你的智力以及学习能力。第二,工作中处处会用到算法,只是你没接触到而已,不信你随便打开一个开源项目,看看里面是不是有数据结构与算法的应用场景。

现在大多普通程序员都在面向业务编程,能够使用现有的语言、框架、操作系统、编译环境满足业务需求就可以了,就算不懂算法,也同样可以完成工作。

然而,在高可用架构、人工智能、云原生应用、跨平台框架、区块链这些“高大上”话题频频出现的今天,优秀的互联网企业更愿意高薪聘请的,往往是那些能与公司一起,快速跟上时代发展的人。他们熟悉计算机的底层逻辑,他们能够迅速掌握新技术的核心要领,他们能利用数学、数据结构与算法、计算机组成原理这些基础知识,提高现有的业务效率,从而创造更可观的利润。

换句话说,“僧多粥少”的情况下,企业用“算法面试”这样的方式,能帮助自己甄别更优秀的人才。

从这个角度,你也就不难理解为什么那些大公司面试,都喜欢问算法类的题目了。

今天给大家分享一份京东T8大牛手写的《数据结构与算法》学习笔记,通过这份学习笔记能够对算法有一定的了解。

《数据结构与算法》学习笔记内容简介

由于文章篇幅要求简短,这里只介绍学习笔记大概包含哪些内容。完整版《数据结构与算法》学习笔记可以点击此处来获取就可以了!

想要说明的是,排序算法/数据结构的代码可能不是最优解,代码的实现都是以比较容易理解的方式去写的。几乎每句代码都有对应的注释,应该是能看懂的

笔记内容结构图

一、冒泡排序

冒泡排序(Bubble Sort,台湾译为:泡沫排序或⽓泡排序)是⼀种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。

二、选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始(末尾)位置,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)

三、插入排序

插入排序的基本操作就是将一个数据插入 到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。 是稳定的排序方法。

四、快速排序

快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中-部分的所有数据都比另外- -部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

五、归并排序

归并排序(MERGE-SORT)是建立在归并操作.上的一种有效的排序算法该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合井,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

六、希尔排序

希尔排序(Shell's Sort)是插入排序的-种又称“缩小增量排序”(Diminishing Increment Sort)是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1 959年提出而得名。

七、堆排序

堆排序(Heapsort)是指利用堆积树(堆) 这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。

八、基数排序(桶排序)

基数排序(radix sor)属于“分配式排序"(distribution sort,又称"桶子法"(bucket sort)或binsort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些”桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为0 (nlog()m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。

九、递归

递归在程序语言中简单的理解是:方法自2调用自己

递归其实和循环是非常像的,循环都可以改写成递归,递归未必能改写成循环,这是-一个充分不必要的条件。

十、链表

十一、栈

十二、队列

十三、二叉树

好了,以上就是《数据结构与算法》学习笔记的大概内容。完整版领取方式可以点击此处来获取就可以了!

相关文章
|
29天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
67 2
|
2月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
91 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
18天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
48 14
|
28天前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
1月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
1月前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
23天前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
29 6
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
54 4
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
106 4
|
2月前
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩分享分库分表的基因算法设计,涵盖分片键选择、水平拆分策略及基因法优化查询效率等内容,助力面试者应对大厂技术面试,提高架构设计能力。
美团面试:百亿级分片,如何设计基因算法?