- 博客(162)
- 资源 (10)
- 收藏
- 关注
原创 可能内存溢出的高级排序算法-归并排序
归并排序在经典递归实现中需要的额外空间相对较多。这是因为在归并排序的过程中,需要与原始数组大小相同的额外空间来存储临时合并的数组。所以,其空间复杂度为O(n),其中n表示待排序数组的长度。在递归过程中,需要创建临时数组来存储分割后的子数组,这些临时数组会随着递归的进行不断地被创建和释放。
2024-04-26 22:26:41
418
原创 Sql参数
这意味着当Java对象中的某个属性映射到SQL语句参数时,如果该属性的类型为Integer且其值为null,那么在SQL语句中对应的参数也将是null。因此,在选择Integer还是int作为SQL语句的参数类型时,需要考虑你的业务逻辑是否需要处理null值。否则,如果列不允许null值,或者你不需要在Java代码中表示null值,那么可以使用int。请注意,虽然这里讨论的是Java中的Integer和int,但实际的SQL数据类型(如INT、BIGINT等)将取决于你使用的数据库系统。
2024-03-26 09:30:14
443
原创 @Bean和@Component相似与区别
Component修饰的类是由Spring框架来统一管理和创建的,Spring会自动处理这些类的实例化、依赖注入等。总的来说,@Component和@Bean都是Spring框架中用于管理Bean的重要注解,但它们在用途、使用方式、控制权以及目标范围等方面存在明显的区别。其次,它们的使用方式也有所不同。而@Bean则是方法级别的注解,需要标注在方法上,并且该方法的返回值会被Spring框架管理。在Spring框架中,@Bean和@Component都是重要的注解,但它们之间存在一些明显的区别。
2024-03-25 16:18:16
299
原创 JVM篇详细分析
并不属于虚拟机的内存结构,其属于操作系统的内存,不由JVM进行管理,常见于NIO操作,用于数据缓冲区。线程共享的区域,用来保存对象的实例,数组等。线程私有的,每个线程一份,内部保存字节码的行号,用于记录正在执行字节码指令的地址。每个线程运行时所需要的内存就是虚拟机栈,特性为先进后出,每个栈由多个栈针组成,每个栈针对应其方法调用所需要的内存(参数,返回地址等)。垃圾回收不涉及栈内存,垃圾回收只是堆内存,当栈针弹出后,内存就被自动释放了。可以避免某一个类被重复加载,当父类被加载后无需重复加载,保证了唯一性。
2024-03-25 11:52:59
516
原创 内存泄露?什么是ThreadLocal
ThreadLocal是Java中的一个类,用于实现线程数据隔离。每个线程在访问ThreadLocal变量时,通过其get和set方法,都会获取或创建一个属于该线程的局部变量副本。当线程结束时,这些变量副本会随着线程一起被回收。
2024-03-23 16:01:03
554
原创 ReentrantLock锁
在上面的示例中,methodA 方法首先获取了 ReentrantLock 的锁,然后在 methodA 内部调用了 methodB。由于 methodB 也尝试获取同一个锁,但因为 ReentrantLock 是可重入的,所以同一个线程(这里是 methodA 调用的线程)可以多次获取同一个锁而不会造成死锁。注意,每次获取锁后,都应该在 finally 块中确保释放锁,以防止因异常导致的锁未被正确释放,从而造成死锁。
2024-03-21 10:46:15
330
原创 Class<T> clazz是什么意思
比如在你提供的 copy 方法中,Class 被用作参数类型,以确保创建的新实例是正确的类型 T,并且可以从源对象复制属性到该类型的实例上。Class 是Java中所有类型元信息的类,包括基本类型、数组、类类型、接口、枚举和注解类型等。总结一下,Class 在Java中是一个泛型类类型,用于表示一个具体的类类型 T 的类对象。Class 中的 T 允许你指定这个 Class 对象所代表的具体的类类型,这样你就可以在代码中更安全地使用它,因为编译器会进行类型检查。
2024-02-19 22:04:13
846
原创 有关stream中map方法的作用概述
这个方法引用是一个函数,它将字符串参数转换为整数。map方法应用这个函数到流中的每个元素,并收集结果到一个新的列表中。在Java的Stream API中,map方法是一个非常常用的中间操作,它用于对流中的每个元素执行一个给定的函数,并将结果映射成一个新的流。map方法不会修改原始流中的元素,而是创建一个新的流,其中包含了原始流中每个元素经过转换后的结果。map方法接受一个函数作为参数,这个函数被应用于流中的每一个元素。Function接口只有一个抽象方法apply,它接受一个参数并返回一个结果。
2024-02-12 23:50:30
559
原创 stream流中distinct方法重写equals相关
该方法的行为依赖于元素的equals()和hashCode()方法。当你使用distinct()方法时,Java会检查流中每个元素的hashCode(),如果hashCode()相同,则进一步使用equals()方法来确定元素是否真的是重复的。因此,如果你想要distinct()方法按照你期望的方式工作,你可能需要重写对象的equals()和hashCode()方法。总之,如果你想要distinct()方法按照你期望的方式工作,你可能需要重写equals()和hashCode()方法。
2024-02-12 18:41:00
542
原创 基于Bean的方法声明交换机队列以绑定
创建交换机以及队列可以手动实现,但在生产环境中不太合适,故用java代码生成更为方便一些。配置完该配置类后启动该项目,登录rabbitmq后便可发现已经生成并绑定。
2023-12-10 12:04:35
284
原创 DataGrip连接虚拟机上Docker部署的Mysql出错解决
如报错如下: Public Key Retrieval is not allowed com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed。而后可以打开DataGrip连接了,如果连接不上执行如下。把datagrip连接设置高级(Advanced)处找到。首先判断CentOS的防火墙,如果开启就关闭。执行完上述3步骤皆可连接。如还是连接不上并报错和。
2023-12-05 17:17:33
861
原创 ChatGPT最强?文心一言与ChatGPT对比
对于同一个问题我们分别对文心一言3.5和ChatGPT3.5输出回答,结果如下图,可以看到文心一言的回答更好,文心一言是由百度开发的人工智能语言模型,它的中文理解能力主要是基于百度强大的搜索引擎和自然语言处理技术。文心一言更加注重中文语言的细节和语境理解,它能够更好地理解中文的语义和语法结构,并能够更准确地生成中文文本。
2023-11-19 21:48:07
1467
原创 01背包问题
还有足够的容量可以装该商品,但装了也不一定达到当前最优价值,所以在装与不装之间选择最优的一个,即V(i,j)=max{V(i-1,j),V(i-1,j-w(i))+v(i)}。V(i,j)=V(i-1,j-w(i))+v(i)时,说明装了第i个商品,该商品是最优解组成的一部分,随后我们得回到装该商品之前,即回到V(i-1,j-w(i));其中V(i-1,j)表示不装,V(i-1,j-w(i))+v(i) 表示装了第i个商品,背包容量减少w(i),但价值增加了v(i);
2023-02-16 12:06:22
613
2
原创 Python推导式
Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。Python 支持各种数据结构的推导式:列表(list)推导式字典(dict)推导式集合(set)推导式元组(tuple)推导式[表达式 for 变量 in 列表] [out_exp_res for out_exp in input_list]或者 [表达式 for 变量 in 列表 if 条件][out_exp_res for out_exp in input_list if con
2022-05-05 20:25:49
846
原创 数据库操作分类以及索引类型
二. SQL语言的分类SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块:SELECT <字段名表>FROM <表或视图名>WHERE <查询条件>2 .数据操纵语言DML数据操纵语言DML主要有三种形式:插入:INSERT更新:UPDATE删除:DELETE数据定义语言DDL数据定义
2022-03-19 19:39:03
577
原创 数据库操作分类
二. SQL语言的分类SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块:SELECT <字段名表>FROM <表或视图名>WHERE <查询条件>2 .数据操纵语言DML数据操纵语言DML主要有三种形式:插入:INSERT更新:UPDATE删除:DELETE数据定义语言DDL数据定义
2022-03-19 19:37:48
756
原创 JVM垃圾回收相关
垃圾回收:两种判断对象死活方法: 引用计数器法(java不用):最初给每一个对象添加一个引用计数器,引用时加一,回收时减一,为零时回收。有循环引用的问题死循环。可达性分析算法(java用):从GC Roots找,找不到就是废物的垃圾就应该回收死的。4种引用: 强引用:Object oc=new Object()有强引用垃圾不会回收软引用:有用但非必须的对象弱引用:下次回收一定回收掉虚引用:最弱垃圾回收4种算法:1:标记回收法:标记的回收,造成大量内存碎片,回收效率也不高。2:标记整理算法:
2022-01-17 22:31:00
159
原创 Mysql中引擎的Innodb和Myisam区别
Mysql中引擎的Innodb和Myisam区别:1:Innodb:支持事务(原子,一致,隔离,持久),事务安全。Myisam:不支持事务,事务不安全。事务处理涉及到三个最重要的命令:BEGIN,ROLLBACK,COMMIT2:Innodb:行级锁,Myisam:表加锁。3:Innodb:不支持全文索引,Mysiam:支持全文索引(可快速搜索包含具体某个词或一组词的行)(create fulltext index content_tag_fulltextn fulltext_test(conten
2022-01-17 22:28:36
915
原创 锁降级JUC高并发
**锁降级:将写入锁降级为读锁,读锁不能升级为写锁,ReentrantReadWriter 可重入读写锁。ReentrantReadWriteLock rwlock=new ReentrantReadWriteLock(); ReentrantReadWriteLock.ReadLock readLock=rwlock.readLock(); ReentrantReadWriteLock.WriteLock writeLock= rwlock.writeLock();//
2022-01-16 16:58:38
1306
原创 JUC辅助类 Semaphore
Semaphore sem = new Semaphore(3);//6辆车3个停车位 for (int i = 1; i <= 6; i++) { new Thread(() -> { try { //抢占 sem.acquire(); System.out.println(Thread.currentT
2022-01-16 14:18:50
79
原创 JUC辅助类CountDownLatch确保线程有序安全
CountDown计数器减一方法,await方法线程等待阻塞,变为零继续执行import java.io.IOException;import java.util.concurrent.CountDownLatch;public class Asd { public static void main(String []args) throws InterruptedException { CountDownLatch cut=new CountDownLatch(6);//
2022-01-16 12:58:01
2278
原创 关于web.xml中导入依赖,对应maven-jar包不下载问题(springboot)
如导入如下依赖<dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>3.5.1</version> </dependency>问题描述:解决方法:点击如右图所示刷新重新启动即可...
2022-01-09 22:43:49
403
原创 关于springboot启动的默认页面等初始配置问题
1:static目录下的资源可以通过localhost:8080直接访问到,:2:localhost:8080/index.html //1.项目搭建:1.pom.xml导入jar包 //2.application.yml配置SpringBoot、数据库连接信息 //3.App.java是项目的启动文件 //4.Bootstrap+SpingBoot+MyBatis+MyBatisPlus3:static/index.html是整个项目的入口文件4:配置mave
2022-01-07 22:38:49
1050
原创 单链表实现选择排序
#include <stdio.h>#include <stdlib.h>typedef int Status;typedef int ElemType;//定义链表类型 typedef struct LNode{ ElemType data; struct LNode *next;}LNode, *Linklist;//初始化一个链表 Status Init_LNode(Linklist &L) { L = (LNode*)malloc(size
2021-11-24 16:57:05
719
原创 顺序表插入删除
`int find ( Sqlist L, int x ){for ( int i=0; i<L.length; ++i ){ if( x<L.data[i] )return i ;}return i ;}void insert ( Sqlist &L ,int x ){ int j, p ;p=find (L,x)for ( j=L.length-1; j>=p;–j )L.data[j+1]=L.data[j] ; L.data[p]=x ;++( L.
2021-11-23 16:39:49
417
原创 一元多项式相加链表
node *add(node *&head1,node *head2){//一元多项式相加 (将一元多项式相加的结果存放在head1中) node *a,*b,*p; a = head1->next; b = head2->next; p = head1; while(a != NULL && b != NULL){ if(a->exponent == b->exponent){ a->coeffi
2021-11-08 16:48:09
194
原创 指针的运算
指针类型的关系运算指向相同类型数据的指针之间可以进行各种关系运算。指向不同数据类型的指针,以及指针与一般整数变量之间的关系运算是无意义的。指针可以和零之间进行等于或不等于的关系运算。例如:p==0或p!=0 p++ p+q p+5...
2021-06-09 23:43:40
126
原创 关于不能用非静态变量初始化静态指针解释
解释:因为内存中静态对象的生存周期大于非静态,用非静态变量初始化静态指针,非静态对象生命周期结束后,指针就被迫无指向,变成野指针,不利于内存空间安全管理,容易引起系统崩溃。...
2021-06-09 23:34:54
157
原创 原型设计Axure————动态面板的基本功能(全项目在本号下载中心里)
项 目 结 果:一、实验目的1)学会动态面板的使用,如何创建动态面板、命名动态面板、创建动态面板的状态和命名状态。2)学会动态面板的常用功能,理解它们的含义以及它们使用的场景。3)学会制作淘宝登录页签的切换效果,进一步深化动态面板的使用。二、实验内容1:学会动态面板的使用2:学会动态面板的8个常用功能3:学会制作淘宝登录页签的切换效果三、实验过程及结果1:学会动态面板的使用2:学会动态面板的8个常用功能2.1 动态面板的显示与隐藏效果2.2 动态面板的调整大小以适合内容2.3
2021-06-09 17:00:51
607
原创 静态数组和动态数组的内存寻地址
从寻址的角度来说,静态数组采用的是直接寻址,而动态数组都是两次寻址,这和动态数组本身实现是有关系的。静态数组的变量本身就是数组第一个元素的地址。动态数组的变量存放的是一根指向到申请空间的首址指针。...
2021-06-07 23:39:29
519
原创 C++delete以及堆栈内存分配
delete只能用于释放堆指针,也就是new出来的指针,而不能用于栈指针。分配时:在程序中定义一个变量,它的值会被放入内存中。如果申请使用动态分配,它的值将放到堆中 :用new产生。如果没有申请动态分配,它的值将放到栈中:int *GetStackPoint(int *s){int k=222;s=&k;//无动态分配,直接指向k的地址}。...
2021-06-04 00:00:26
576
原创 leetcode27请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。
解:因为本题只给要删除的节点,乌头结点,故应采用交换val值得方法,对于省略的结点,本题中不释放memory也对。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: void delet
2021-06-03 23:51:53
389
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人