![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网课
文章平均质量分 72
hhcccchh
这个作者很懒,什么都没留下…
展开
-
2021-05-30 排序优化:如何实现一个通用的、高性能的排序函数
今天,我会讲三种时间复杂度是 O(n) 的排序算法:桶排序、计数排序、基数排序。因为这些排序算法的时间复杂度是线性的,所以我们把这类排序算法叫作线性排序(Linear sort)。之所以能做到线性的时间复杂度,主要原因是,这三个算法是非基于比较的排序算法,都不涉及元素之间的比较操作。这几种排序算法理解起来都不难,时间、空间复杂度分析起来也很简单,但是对要排序的数据要求很苛刻,所以我们今天学习重点的是掌握这些排序算法的适用场景。...转载 2021-05-30 17:34:39 · 154 阅读 · 0 评论 -
2021-05-25 线性排序:如何根据年龄给100万用户数据排序
今天,我会讲三种时间复杂度是 O(n) 的排序算法:桶排序、计数排序、基数排序。因为这些排序算法的时间复杂度是线性的,所以我们把这类排序算法叫作线性排序(Linear sort)。之所以能做到线性的时间复杂度,主要原因是,这三个算法是非基于比较的排序算法,都不涉及元素之间的比较操作。...转载 2021-05-30 10:41:37 · 193 阅读 · 0 评论 -
2021-05-25 JAVA线上故障排查全套路
1线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。CPU一般来讲我们首先会排查cpu方面的问题。cpu异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用j转载 2021-05-25 22:56:22 · 257 阅读 · 0 评论 -
2021-05-24 如何用快排思想在O(n)内查找第K大元素
今天,我讲两种时间复杂度为 O(nlogn) 的排序算法,归并排序和快速排序。这两种排序算法适合大规模的数据排序。归并排序和快速排序都用到了分治思想,非常巧妙。我们可以借鉴这个思想,来解决非排序的问题,比如:如何在 O(n) 的时间复杂度内查找一个无序数组中的第 K 大元素?归并排序的原理归并排序的核心思想还是蛮简单的。如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。归并排序使用的就是分治思...转载 2021-05-24 23:35:53 · 226 阅读 · 0 评论 -
2021-05-16 排序(上):为什么插入排序比冒泡排序更受欢迎?
如何分析一个“排序算法”?排序算法的执行效率排序算法的内存消耗冒泡排序(Bubble Sort)插入排序(Insertion Sort)选择排序(Selection Sort)转载 2021-05-18 00:11:28 · 125 阅读 · 0 评论 -
2021-05-15 递归:如何用三行代码找到“最终推荐人”
如何理解“递归”? 递归需要满足的三个条件 如何编写递归代码? 递归代码要警惕堆栈溢出 递归代码要警惕重复计算 怎么将递归代码改写为非递归代码? 如何找到“最终推荐人”? ...转载 2021-05-16 00:39:56 · 91 阅读 · 0 评论 -
2021-05-12 09丨队列:队列在线程池等有限资源池中的应用
如何理解队列 顺序队列和链式队列转载 2021-05-15 00:07:51 · 82 阅读 · 0 评论 -
2021-05-11 08丨栈:如何实现浏览器的前进和后退功能
栈的特点 栈是一种操作受限的“线性表”,只需要在一端操作插入和删除。先进后出,后进先出; 如何实现栈 栈主要包含两个操作,在栈顶插入一个数据,或者在栈顶删除一个数据; 栈在函数调用中的应用 支持动态扩容的顺序栈 栈在表达式中的应用 使用两个栈,一个存储操作数,一个存储运算符;数字直接入栈;当运算符入账,遇到栈顶运算符优先级别低于或者等于它的时候,就把前面两个数取出来执行运算,再把结果入栈; 栈在括号匹配中的应用 我们假设表达式中只包含三种括号..转载 2021-05-11 23:37:05 · 191 阅读 · 0 评论 -
2021-05-10 07丨链表(下):如何轻松写出正确的链表代码?
技巧一:理解指针或引用的含义技巧二:警惕指针丢失和内存泄漏技巧三:利用哨兵简化实现难度技巧四:重点留意边界条件处理技巧五:举例画图,辅助思考技巧六:多写多练,没有捷径...转载 2021-05-11 21:51:41 · 94 阅读 · 0 评论 -
2021-05-09-链表(上):如何实现LRU缓存淘汰算法
链表的特点 通过指针将一组零散的内存块串联在一起;内存块称为链表的结点;为了将所有的结点联系起来,每个链表的结点除了存储数据之外,还需要记录链上下一个结点的地址,这个记录下个结点地址的指针叫后继指针; 单链表 双向链表 循环链表 双向循环链表 链表vs数组性能 如何实现lru缓存淘汰算法 如何判断一个字符串是回文字符串,如果这个字符串是链表存储的,时间空间复杂度如何 ...转载 2021-05-10 23:45:17 · 89 阅读 · 0 评论 -
2021-05-09实战一(上):业务开发常用的基于贫血模型的MVC架构违背OOP吗
什么是贫血模型?什么是充血模型? 为什么说基于贫血模型的传统开发模式违反 OOP? 基于贫血模型的传统开发模式既然违反 OOP,那又为什么如此流行? 什么情况下我们应该考虑使用基于充血模型的 DDD 开发模式 ...转载 2021-05-09 22:26:17 · 120 阅读 · 0 评论 -
2021-05-08-数组:为什么很多编程语言中数组都从0开始编号?
数组:线性表数组基本概念 数组的特点 数组和链表的区别 数组下表为什么从0开始转载 2021-05-09 00:55:01 · 79 阅读 · 0 评论