- 博客(80)
- 收藏
- 关注
原创 树--搜索二叉树
线索二叉树充分利用了指针空间,同时又便于寻找结点的前驱结点和后继结点。线索二叉树适用于经常需要遍历寻找结点前驱或者后继结点的二叉树。
2024-05-29 13:09:02
883
1
原创 树--哈夫曼树和哈夫曼编码
我们要传输一条数据:i like like like java do you like a java //共40个字符通过ASCII码将其转化为对应的二进制形式:按照二进制来传递数据,总长度为359(包括空格)。通常我们不会这么去做,主要是因为我们要传输的数据太长了,很不划算。
2024-04-28 15:22:43
712
原创 树--B+树
1.非叶子节点仅具有索引作用,也就是说,非叶子节点只能存储Key,不能存储value2.树的所有叶节点构成一个有序链表,可以按照key排序的次序依次遍历全部数据。
2024-04-27 19:24:11
257
原创 树--平衡二叉树(AVL树)
它是一颗空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两颗子树都是一颗平衡二叉树。平衡因子: 左子树的高度 - 右子树的高度。我们将平衡因子的绝对值小于1的的有序二叉树称为平衡二叉树。
2024-04-16 13:10:02
385
原创 树--排序二叉树的删除
一、二叉排序树的删除二叉排序树的删除情况比较复杂,有以下三种情况需要考虑。删除叶子节点 (比如:2,5,9,10) 删除只有一个子树的节点(比如:1) 删除有两个子树的节点 (比如:7,3,10)分析情况一删除叶子节点 (比如:2,5,9,10)思路:分析情况二删除只有一个子树的节点(比如:1)思路:分析情况三删除有两个子树的节点 (比如:7,3,10)思路:二、代码实现1.查找相应的节点/** * * @param value 希望删除
2024-04-16 13:01:55
220
原创 dfs回溯 -- Leetcode46. 全排列
本题是最典型的回溯法实现。使用深度优先遍历,每一次“碰壁”后才回头(即遍历到最后一个才回溯)。给定一个不含重复数字的数组。
2024-04-13 14:58:41
302
原创 树--构建二叉排序树
二叉排序树:对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点。
2024-04-13 14:15:20
497
原创 树--结构基础部分分析
4.如果二叉树的所有叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子节点在左边连续,倒数第二层的叶子节点在右边连续,我们称为完全二叉树。当结点从队列中pop出来打印的时候,把结点的左子树和右子树根结点push进入队列,这样能够保证同一个深度的结点在队列中连续排布。能提高数据存储,读取的效率,比如利用二叉排序树,既可以保证数据的检索速度。同时也可以保证数据的插入,删除,修改的速度。优点:在一定程度上对数组存储方式进行优化(比如插入一个节点,只需要将插入节点,链接到链表当中可删除的效率也很好)。
2024-04-13 14:10:56
351
原创 Java 哈希表
我们先来看如下的一道题:有一个公司,当有新的员工来报道时,需要将该员工的信息加入(id,性别,年龄,住址,...),当输入该用户id时,需要查询到该员工的所有信息。要求:不使用数据库,尽量节省内存,速度越快越好 --> 哈希表分析清楚上边的题以后我们来用代码将其实现。首先分析这个代码有哪些组成。根据拆分我们可以知道一个哈希表是由节点组成链表,每一个链表都存放在数据当中的每个节点当中,如下图。
2024-04-06 20:00:42
446
原创 美团笔试算法题 -- 寻找实数
小美拿到了一个由复数组成的数组,她想知道其中有多少个实数?实数:有理数和无理数的总称。其中无理数是无限不循环小数,有理数包括整数和分数。第一行输入一个正整数,代表数组的大小。第二行输入几个复数,代表小美拿到的数组。1 <n< 10^5后台数据保证复数为a或者a+bi的形式,其中a和b为绝对值不超过109的整数。一个整数,代表实数的数量。42【只有第一个和第四个是实数】
2024-04-06 18:48:15
452
原创 Java集合详解(三)-- Set集合
int age;@Override//先对姓名字典序比较 如果相同 比较年龄=0) {elsereturn 0;输出abcd:12agg:12agg:21ffas:8。
2024-04-05 19:32:05
790
原创 Java集合详解(一)-- List集合
java集合可分为Set、List、Queue和Map四种体系。Java集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)“丢进”该容器中。从Java 5 增加了泛型以后,Java集合可以记住容器中对象的数据类型,使得编码更加简洁、健壮。④.add(int index, Object element) 在列表的指定位置(从0开始)插入指定元素⑤.set(int i, Object element) 使用元素element替换索引i位置的元素,并返回被替换的元素。
2024-04-05 18:29:42
1146
原创 Redlock分布式锁
Redis 官方站这篇文章提出了一种权威的基于 Redis 实现分布式锁的方式名叫Redlock,此种方式比原先的单节点的方法更安全。安全特性:互斥访问,即永远只有一个 client 能拿到锁;避免死锁:最终 client 都可能拿到锁,不会出现死锁的情况,即使原本锁住某资源的 client crash 了或者出现了网络分区;容错性:只要大部分 Redis 节点存活就可以正常提供服务。
2024-04-05 11:48:40
1037
原创 2.SpringBoot利用Thymeleaf实现页面的展示
Thymeleaf是一个现代服务器端Java模板引擎,适用于Web和独立环境,能够处理HTML,XML,JavaScript,CSS甚至纯文本。Thymeleaf的主要目标是提供一种优雅且高度可维护的模板创建方式。为实现这一目标,它以自然模板的概念为基础,将其逻辑注入模板文件,其方式不会影响模板被用作设计原型。这改善了设计沟通,缩小了设计和开发团队之间的差距。Thymeleaf也从一开始就设计了Web标准 - 特别是HTML5 - 允许您创建完全验证的模板,如果您需要的话。
2024-04-04 21:28:04
504
1
原创 消息队列简介
定义消息队列:一般我们会简称它为MQ(Message Queue)。Message Query(MQ),消息队列中间件,很多初学者认为,MQ通过消息的发送和接受来实现程序的异步和解耦,mq主要用于异步操作,这个不是mq的真正目的,只不过是mq的应用,mq真正的目的是为了通讯。他屏蔽了复杂的通讯协议,像常用的dubbo,http协议都是同步的。这两种协议很难实现双端通讯,A调用B,B也可以主动调用A,而且不支持长连接。
2024-04-03 20:17:48
1190
原创 MySQL介绍
MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。阿里巴巴数据库系统也大量用到了 MySQL,因此它的稳定性是有保障的。MySQL是开放源代码的,因此任何人都可以在 GPL(General Public License) 的许可下下载并根据个性化的需要对其进行修改。MySQL的默认端口号是3306。http :80tcp:23ftp : 21ssh : 22事务是逻辑上的一组操作,要么都执行,要么都不执行。
2024-04-03 19:08:59
854
原创 MySQL 索引详解
如果一个索引包含(或者说覆盖)所有需要查询的字段的值,我们就称之为“覆盖索引”。我们知道InnoDB存储引擎中,如果不是主键索引,叶子节点存储的是主键+列值。最终还是要“回表”,也就是要通过主键再查找一次。这样就会比较慢覆盖索引就是把要查询出的列和索引是对应的,不做回表操作!
2024-04-02 21:55:40
1361
原创 Java并查集详解(附Leetcode 547.省份数量讲解)
并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。并查集的思想是用一个数组表示了整片森林(parent),树的根节点唯一标识了一个集合,我们只要找到了某个元素的的树根,就能确定它在哪个集合里。【摘自只看上面这段例子可能会发懵,让我们来看一个详细的例子。大家看剧都知道,古时候基本上都会拉帮结派,形成大大小小许多帮派。这些帮派都会有等级划分,大当家,二当家,等等。类似于这样的结构。
2024-03-29 15:44:21
1066
2
原创 Java虚拟机运行原理
代码开始运行时, new 两个 Test 对象, 会创建一个栈帧放入栈中,栈帧中存着两个对象的地址,分别指向存在堆中的数据。在运行到exchange方法时,Java 会新建一个栈帧,并把 test 和 test1 都复制一份过去。写一个 exchange 方法,在方法中交换两个Test 对象,最后输出两个对象中 a 的值。在Main方法中创建两个 Test 对象,并给 a 赋不同的值。如果这样写的话最后输出结果就是2, 1了。所以最后输出为 1, 2。最后输出的结果是多少?
2024-03-26 11:15:49
187
原创 Java拆装箱及128陷阱
而在Integer的valueOf()方当中,如果数值在-128-127之间,就都存储在一个数组当中,该数组相当于一个缓存,当我们在-128-127之间进行自动装箱的时候,我们就直接返回该值在内存当中的地址,所以在-128-127之间的数值用==进行比较是相等的。而不在这个区间的数,需要新开辟一个内存空间进行装箱,所以用==比较是不相等的。由于Java中存在自动拆装箱,故Integer包装类型和int基本类型是等价的,所以a == c 以及 c == d 也为True。c == d 一定为True。
2024-03-26 10:36:57
227
原创 Java并发编程
多线程20~40个线程性能最快。线程优先级没有用,程序正确性不能依赖线程的优先级高低。sleep(0),sleep(1):快速让出CPU。Thread.yield():让出CPU并不是立即让出,会有一定的延迟。如果未执行完,切换回来会继续执行。线程优先级由操作系统决定。
2024-03-24 18:56:01
1291
原创 发展规划--IM系统
内核态的进程可以访问内核空间,也可以访问硬件设备(磁盘,网卡等)调用系统的一切资源,用户态的进程没有这样的权限,也不能直接调用内核代码定义的函数。在即时通讯项目里,不会采用这种模型,因为一般情况下,是一个socket连接对应一个独立的线程,如果用这种模型,在高并发项目中,需要很多的线程来维护大量的socet连接,内存,线程之间的切换开销会很大,性能很低。5G应用,多终端应用,物联网应用,小程序,工业互联,大数据应用等等大前端时代的到来,程序员不能只关注crud,因为以后的服务并发量只会越来越多。
2024-03-24 18:54:49
654
原创 Kafka简介
kafka是一款分布式、支持分区的、多副本,基于zookeeper协调的分布式消息系统。最大的特性就是可以实时处理大量数据来满足需求。
2024-03-24 18:53:54
1097
原创 Java基础面试整理
在Object类当中,equals()方法比较数据的内存地址,但是在一些类当中equals()方法会被重写,就会有其他的作用,例如String类首先比较的是两个字符串的地址是否相同,如果相同返回true,如果字符串地址不相同,那么首先会判断要比较的是否属于String类型,如果是,然后在比较里边的内容是否相同。5.接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的对象 从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。this调用本类中的其他方法;
2024-03-24 18:52:05
730
原创 Redis基础知识
字符串类型,可以包含任何数据,最大可以是512MB,内部的实现结构和ArrayList类似,采用内分配冗余的形式,来减少内存的频繁分配(降低CPU压力)// 数组容量T capacity;// 数组长度T len;// 特殊标识位byte flags;// 数组内容byte[] buf;
2024-03-24 18:47:25
659
原创 vue3功能实现
到这里完整的方法就可以实现了,虽然比vue2稍微复杂一点,但是熟练后编写更加方便。在vue2中,要实现一些方法(增删改查)一般都是写在一起的。但是在vue3中,实现一个方法需要用到很多文件。service文件中定义方法。
2023-07-15 18:50:58
662
原创 VUE路由相关
这几行代码的意思是拦截url中含有 "/api/v1" 的请求,并在 "/api/v1" 前加上target中的url即 "https://107.0.0.1:8080/api/v1",此时url会变为 "https://107.0.0.1:8080/api/v1/api/v1",然后在rewrite中会将url中的 “/api/v1” 替换为 “”,此时我们才会访问到nginx的地址即 "https://107.0.0.1:8080/api/v1"(当然这也不是后端服务器的地址)。
2023-07-14 23:24:47
706
原创 vue2向springboot传值接收不到
在这个方法中,我们需要向后端传的值有currentPage(当前页码)、pageSize(一页数据条数)和查询的对象。一般传参数时,页数,页面大小等和数据库无关的字段会直接加在url上,@PostMapping("/list。我们在开发项目时,经常会前后端分离,这样方便开发和测试。但是这样写的话,会发现一个问题:前端的参数后端(controller)接收不到。这是后端controller层的方法,通过url来实现方法的调用。原因是在接收前端的参数时需要在后端参数前加注解。注解时,方法必须使用。
2023-07-08 20:56:11
739
1
原创 线程池相关
线程池是一种线程管理技术,它可以在系统初始化时创建一定数量的线程,并将它们放入一个池中等待调用。当有任务需要执行时,线程池中的一个线程会被分配来执行任务,当任务执行完成后该线程会被返回到线程池中,以便下一次使用。线程池的作用是优化线程的创建和销毁过程,通过重复使用已创建的线程来减少不必要的开销,提高系统性能及效率。它还可以帮助控制线程的数量和资源占用,有效避免由于线程过多而导致系统崩溃的情况的发生。
2023-06-29 16:40:32
353
空空如也
数学模型总结:如何在收集到的需求量数据基础上,模拟生成每天的需求量?
2022-12-16
总结lingo求解模型时处理分段函数的方法。
2022-12-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人