自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 排序优化:如何实现一个通用的、高性能的排序函数?

一、如何选择合适的排序算法?1.排序算法一览表2.为什选择快速排序?1)线性排序时间复杂度很低但使用场景特殊,如果要写一个通用排序函数,不能选择线性排序。2)为了兼顾任意规模数据的排序,一般会首选时间复杂度为O(nlogn)的排序算法来实现排序函数。3)同为O(nlogn)的快排和归并排序相比,归并排序不是原地排序算法,所以最优的选择是快排。二、如何优化快速排序?导致快排时间复杂度降为O(n)的原因是分区点选择不合理,最理想的分区点是:被分区点分开的两个分区中,数据的数量差不多。如何优化分区

2020-05-20 21:39:27 254

原创 线性排序:如何根据年龄给100万用户数据排序?

一、线性排序算法介绍1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法的时间复杂度为O(n)。3.此3种排序算法都不涉及元素之间的比较操作,是非基于比较的排序算法。4.对排序数据的要求很苛刻,重点掌握此3种排序算法的适用场景。二、桶排序(Bucket sort)1.算法原理:1)将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行快速排序。2)桶内排完序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了。2.使用条件1)要排序的数据需要很容易就能划分成m

2020-05-18 21:12:48 226

原创 排序(下):如何用快排思想在O(n)内查找第K大元素?

一、分治思想1.分治思想:分治,顾明思意,就是分而治之,将一个大问题分解成小的子问题来解决,小的子问题解决了,大问题也就解决了。2.分治与递归的区别:分治算法一般都用递归来实现的。分治是一种解决问题的处理思想,递归是一种编程技巧。二、归并排序1.算法原理先把数组从中间分成前后两部分,然后对前后两部分分别进行排序,再将排序好的两部分合并到一起,这样整个数组就有序了。这就是归并排序的核心思想。如何用递归实现归并排序呢?递归写递归代码的技巧就是分写得出递推公式,然后找到终止条件,最后将递推公式翻译成递

2020-05-16 08:49:54 306

原创 Spring的事务管理

1.1 案例需求:1.1.1 需求描述:完成一个转账的功能,需要进行事务的管理,使用 Spring 的事务管理的方式完成.1.2 相关知识点1.2.1 Spring 的 的 JDBC 的模板:1.2.1.1 Spring提供了很多持久层技术的模板类简化编程:1.2.1.2 创建数据库和表:1.2.1.3 引入相关开发包:Spring 的基本的开发包需要引入的:6 个1.2.1.4 创建一个测试类: @Test // JDBC 模板的基本使用: public void

2020-05-14 09:12:28 134

原创 排序(上):为什么插入排序比冒泡排序更受欢迎?

一、几种经典排序算法及其时间复杂度级别二、如何分析一个排序算法?1.学习排序算法的思路?明确原理、掌握实现以及分析性能。2.如何分析排序算法性能?从执行效率、内存消耗以及稳定性3个方面分析排序算法的性能。3.执行效率:从以下3个方面来衡量1)最好情况、最坏情况、平均情况时间复杂度2)时间复杂度的系数、常数、低阶:排序的数据量比较小时考虑3)比较次数和交换(或移动)次数4.内存消耗:通过空间复杂度来衡量。针对排序算法的空间复杂度,引入原地排序的概念,原地排序算法就是指空间复杂度为O(1)的排

2020-05-13 20:46:45 212

原创 递归:如何用三行代码找到“最终推荐人”?

一、什么是递归?1.递归是一种非常高效、简洁的编码技巧,一种应用非常广泛的算法,比如DFS深度优先搜索、前中后序二叉树遍历等都是使用递归。2.方法或函数调用自身的方式称为递归调用,调用称为递,返回称为归。3.基本上,所有的递归问题都可以用递推公式来表示,比如f(n) = f(n-1) + 1;f(n) = f(n-1) + f(n-2);f(n)=n*f(n-1);int f(int n) { if (n == 1) return 1; if (n == 2) return 2;

2020-05-10 15:23:20 138

原创 使用 Spring 的 的 AOP 对客户管理的 DAO 进行增强

1.1 案例需求1.1.1 需求描述对于 CRM 的系统而言,现在有很多的 DAO 类,比如客户的 DAO,联系人 DAO 等等。客户提出一个需求要开发人员实现一个功能对所有的 DAO 的类中以 save 开头的方法实现权限的校验,需要时管理员的身份才可以进行保存操作。1.2 相关知识点1.2.1 Spring 的 的 Bean 管理:( 注解方式)1.2.1.1 步骤一: 下载 Spring 的开发包:官网:http://spring.io/下 载 地 址 :http://r

2020-05-10 09:08:58 391 2

原创 队列:队列在线程池等有限资源池中的应用

一、什么是队列?1.先进者先出,这就是典型的“队列”结构。2.支持两个操作:入队enqueue(),放一个数据到队尾;出队dequeue(),从队头取一个元素。3.所以,和栈一样,队列也是一种操作受限的线性表。二、如何实现队列?1.队列API:public interface Queue<T> {public void enqueue(T item); //入队public T dequeue(); //出队public int size(); //统计元素数量public

2020-05-09 20:28:24 141

原创 栈:如何实现浏览器的前进和后退功能?

一、数据结构和算法是什么1、数据结构是指一组数据的存储结构2、算法就是操作数据的方法3、数据结构和算法是相辅相成的,数据结构是为算法服务的,而算法要作用在特定的数据结构之上二、学习的重点在什么地方数据结构和算法解决的是如何更省、更快地存储和处理数据的问题,因此,我们就需要一个考量效率和资源消耗的方法,这就是复杂度分析方法。在学习数据结构和算法的过程中,要学习它的「来历」、「自身的特点」、「适合解决的问题」以及「实际的应用场景」。1、数据结构和算法学习的精髓-复杂度分析2、最常用的、最基

2020-05-08 20:18:36 369

原创 Spring_01

1.1 Spring的概述1.1.1 什么是SpringSpring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器。Spring:SE/EE开发的一站式框架。一站式框架:有EE开发的每一层解决方案。Web层 :SpringMVCService层 :Spring的Bean管理,Spring声明式事务DAO层...

2020-05-08 11:57:28 224

原创 链表(下):如何轻松写出正确的链表代码?

一、理解指针或引用的含义1.含义:将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指针,或者反过来说,指针中存储了这个变量的内存地址,指向了这个变量,通过指针就能找到这个变量。2.示例:p—>next = q; //表示p节点的后继指针存储了q节点的内存地址。p—>next = p—>next—>next; //表示p节点的后继指针存储了p节点的下下个节点的内...

2020-05-07 11:17:59 149

原创 链表(上):如何实现LRU缓存淘汰算法

1.如何分别用链表和数组实现LRU缓冲淘汰策略?1)什么是缓存?缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非广泛的应用,比如常见的CPU缓存、数据库缓存、浏览器缓存等等。2)为什么使用缓存?即缓存的特点缓存的大小是有限的,当缓存被用满时,哪些数据应该被清理出去,哪些数据应该被保留?就需要用到缓存淘汰策略。3)什么是缓存淘汰策略?指的是当缓存被用满时清理数据的优先顺序...

2020-05-06 21:21:37 316

原创 数组:为什么很多编程语言中数组都从0开始编号?

一起带着问题来学习:数组看起来简单基础,但是很多人没有理解这个数据结构的精髓。带着为什么数组要从0开始编号,而不是从1开始的问题?1. 数组如何实现随机访问1) 数组是一种线性数据结构,用连续的存储空间存储相同类型数据线性表:数组、链表、队列、栈非线性表:树、图 连续的内存空间、相同的数据,所以数组可以随机访问,但对数组进行删除插入,为了保证数组的连续性,就要做大量的数据搬移工作。a)...

2020-05-04 22:27:20 155

原创 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度

一、复杂度分析的4个概念1.最好情况时间复杂度:代码在最理想情况下执行的时间复杂度。2.最坏情况时间复杂度:代码在最坏情况下执行的时间复杂度。3.平均时间复杂度:用代码在所有情况下执行的次数的加权平均值表示。4.均摊时间复杂度:在代码执行的所有复杂度情况中绝大部分是低级别的复杂度,个别情况是高级别复杂度且发生具有时序关系时,可以将个别高级别复杂度均摊到低级别复杂度上。基本上均摊结果就等于低...

2020-05-01 09:32:47 235

原创 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?

一、什么是复杂度分析?1.数据结构和算法解决是“如何让计算机更快时间、更省空间的解决问题”。2.因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能。3.分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为复杂度。4.复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系。二、为什么要进行复杂度分析?1.和性能测试相比,复杂度分析有不依赖执行环境、成本低、效率高...

2020-04-30 20:00:30 260

原创 怎么学习数据结构和算法?

什么是数据结构和算法?1、数据结构是指一组数据的存储结构2、算法就是操作数据的方法3、数据结构和算法是相辅相成的,数据结构是为算法服务的, 而算法要作用在特定的数据结构之上学习的重点在什么地方数据结构和算法解决的是如何更省、更快地存储和处理数据的问题,因此,我们就需要一个考量效率和资源消耗的方法,这就是复杂度分析方法。在学习数据结构和算法的过程中,要学习它的「来历」、「自身的特点」、「适...

2020-04-30 16:14:55 343

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除