- 博客(18)
- 资源 (6)
- 收藏
- 关注
原创 数据结构与算法-二叉树,前序,后续,中序遍历
树的几个重要元素1,节点:树里面的元素2,父子关系:节点之间相连的关系3,子树:当节点大于1是,其余不相交的节点的集合称作子树4,度:一个节点拥有子树的数量称作度5,孩子:节点的子节点6,双亲节点7,兄弟节点9,森林:由N个不相交的树组成节点的高度:节点到叶子节点的最长路径节点的深度:根节点到该节点的边个数节点的层数:节点的深度+1树的高度:根节点的高度二叉树1,每个节点最多有两个节点2,第N层最多有2^(N-1)个节点满二叉树:除叶子结点外,每个结点都有左右两个子结点。完
2020-12-28 11:51:44 215
原创 采坑-rabbitmq线上消费消息特别慢,一条消息延迟最高超过5分钟
在使用spring-boot +rabbitimq时,发现消息延迟的厉害,严重影响系统使用。经过三天的排查发现一个巨大的坑。贴出核心代码:这个是用户注册的一个消息处理器,某人居然在消息处理的过过程中使用线程睡眠的方式将整个消费队列的睡眠2分钟。这个会导致同一个消费队列下的消费能力下降N个档期,优化方案,将代码删除。使用延迟方案解决...
2020-12-25 09:42:56 4168 2
原创 数据结构与算法-算法的魅力-一行代码性能提升千百不止
无意计算机底层原理及JVM底层后,就发现一行代码竟然会让系统性能提升一千倍不止。不是吹牛,本人亲测优化后:唯一的区别就是将临时变量提取出来,如果是200w+数据,第一种方式需要很久很久很久才会出结果,而加了临时变量后,性能提升千倍不止;原因分析:频繁的开辟新的空间导致JVM频繁的垃圾回收,导致运行效率下降个人建议:在开发中如果需要用到临时变量,最可能避免频繁的开辟大空间,销毁空间,这对系统性能提升有很大很大的帮助接下来看下归并排序优化前package edu.sort;import java
2020-12-22 14:14:53 191
原创 数据结构与算法-贪心算法
贪心算法的套路:一定会有一个排序。哈夫曼编码,贪心算法,压缩算法。最短路径贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。贪心算法其最重要的两个点就是:贪心策略:排序通过局部最优解能够得到全局最优解一般通过以下问题就可以通过贪心算法解决:1.针对某个问题有限制值,以及有一个期望的最好结果,通常是从某些数据中选出其中一些,达到最好的结果。2.一般会有一个排序,找出贡献最大的。3.举例看贪心
2020-12-21 21:00:03 318
原创 数据结构与算法-插入,冒泡,选择,希尔,归并,快速排序优缺点及使用场景
常见的算法对比如下如何选择使用什么排序算法1 分析场景:稳定还是不稳定2.数据量:数据量小的时候选什么?比如就50个数,优先选插入,数据量比较大如(5000*5000=25000000)则选择其他排序3.分析空间:综上所述,没有一个固定的排序算法,都是要根据情况分析的。但是如果你不会分析的情况下 选择归并或者快排。C++ qsort:快排+插入排序jdk里面有arrays.sort:一种是基础类型,int double 用的快排。对象排序,用的是归并+timeSort...
2020-12-20 18:43:20 498
原创 数据结构与算法-冒泡排序
核心思路:冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。package edu.sort;import cn.hutool.core.util.ArrayUtil;/** * 冒泡排序 * 时间复杂度:O(n^2) * 空间复杂度:O(n) * 思路:冒泡排序智慧操作相邻的的两个数据, * 每次冒泡操作都会对相邻的两个.
2020-12-20 18:39:38 259
原创 数据结构与算法-插入排序
1.将数组分成已排序段和未排序段。初始化时已排序端只有一个元素2.到未排序段取元素插入到已排序段,并保证插入后仍然有序3,重复执行上述操作,直到未排序段元素全部加完。循环次数:2,时间复杂度:n^2最好的情况 O(n)最坏的情况 O(n^2)package edu.sort;/** * 插入排序 * * @author: LHT * @date: 2020/12/14 14:44 */public class InsertionSort { /** .
2020-12-20 18:38:03 194
原创 数据结构与算法-快速排序
1.时间复杂度:nlogn 最坏的情况就是O(n^2)2.空间复杂度:O(n)3.稳定性:不稳定4.快排和归并的对比:(1)归并排序的处理过程是由下到上的,先处理子问题,然后再合并。(2)快排其实就是从上到下,先分区,在处理子问题,不用合并。其优化就是优化基准数,提供一个取三个数中间的思路.package edu.sort;import cn.hutool.core.util.ArrayUtil;/** * 快速排序 * 核心概念:基准数。一般取第一个。 * 第一遍对比,结果
2020-12-20 18:36:21 432 4
原创 数据结构与算法-插入排序和归并排序
常见的算法快速排序、冒泡排序,希尔排序,二分排序(二路归并)(nlogn),桶排序,堆排序,基数排序插入,希尔,归并选择,冒泡,快速堆排序:##分析算法的指标1,时间效率2,空间复杂度3,比较次数和交换次数4,稳定性1 9 3 5 3第一种:1 3 3 5 9第二种:1 3 3 5 9哪一种是稳定的?相同的两个数排完序后,相对位置不变。意义:电商里面订单排序:首先会按金额从小到大排,金额相同的按下单时间。我从订单中心过来的时候已经按照时间排好序了。1插入排序假设有个这样的问
2020-12-14 16:48:36 271
原创 数据结构与算法-递归思想,及使用场景和优化思路
什么情况下可以使用递归1,一个问题可以分解为几个子问题的解,我们可以通过分治思想将一个数据规模大的问题分解为很小的问题2,这个问题和分解之后的子问题,求解思路一样。3.一定有一个最后确认的答案,技递归的终止条件斐波那契数列1 1 2 3 5 8求解公式fn(n)=fn(n-1)+fn(n-2)package edu.rec;/** * 什么情况下可以使用递归 * 1,一个问题可以分解为几个子问题的解,我们可以通过分治思想将一个数据规模大的问题分解为很小的问题 * 2,这个问题和分解
2020-12-14 11:55:33 220
原创 基础数据结构与算法-数组,队列,链表,栈
package edu.stack;/** * @author: LHT * @date: 2020/12/13 11:38 */public class MyStack { String[] data = new String[1]; int index; /** * 入栈 * * @param value * @return */ public int push(String value) { .
2020-12-13 15:41:27 178
原创 数据结构与算法-链表
1.链表的定义链表通过指针将一组零散的内存块串联在一起。其中,我们把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的下一个结点的地址。画图演示:2.特点(1)不需要连续的内存空间。(2)有指针引用(3)三种最常见的链表结构:单链表、双向链表循环链表和单向表类似,不过头尾相连(4)头结点:第一个节点(5)尾结点: 最后一个节点...
2020-12-12 16:20:32 374
原创 数据结构与算法-算法设计原则,评价算法的两个重要指标及时间复杂度计算的意义
1,设计原则正确性,可读性,健壮性,高效性与低内存内存占用小,CPU占用最小,运算最快2,评价算法的两个重要指标时间复杂度:运行一个程序所需要的时间 O空间复杂度:运行一个程序索引需要的空间 OOM3,账时间复杂度计算的意义?怎么测试接口的性能?压测,冒烟,要依赖测试环境,流程长,规模和数据不准确比如排序算法:123 、321 效率不一样一个数和1亿个数不一样。导致结果不准确。所以需要自己计算时间复杂度时间复杂度表达方式:O(n) O(ologn)...
2020-12-12 16:04:37 2342
原创 centor6.7安装rocketmq
centor6.7安装rocketmq1.首先下载安装文件下载地址:http://rocketmq.apache.org/release_notes/release-notes-4.7.1/wget安装wget https://mirror.bit.edu.cn/apache/rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip安装unzip的安装包unzip rocketmq-all-4.7.1-bin-release.zip运行Roc
2020-12-12 16:04:19 165
原创 数据结构与算法-基础数据结构-数组
数据结构与算法(基础数据结构-数组)1.数组的定义所谓数组,是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组。int 的数组你就不能存float 也不能存double数组是用于储存多个相同类型数据的集合。通常用Array表示,也称
2020-12-12 16:03:21 240
原创 JAVA面试题,判断一个数是否是2的N次方
1,while(n>1){n%2==0;//不等于0,肯定不是,等于0及,n=n/2;}2,位运算1: 012:103: 0114: 1007: 01118: 1000判断方法if(n&(n-)==0) 是 否则 不是代码/** * 高效率和低内存 * 判断一个数是否是2的N次方 */public class ACM2N { /** * 1: 01 * 2:10 * 3: 011 * 4: 100
2020-12-07 21:25:52 727
原创 什么是Mybatis?优缺点及使用技巧
1、什么是Mybatis?1、Mybatis 是一个半 ORM( 对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身, 不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能, 灵活度高。2、MyBatis 可以使用 XML 或注解来配置和映射原生信息, 将 POJO 映射成数据库中的记录, 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。3、通过 xml 文件或注解的方式将
2020-12-03 15:09:05 3057
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人