- 博客(31)
- 收藏
- 关注
原创 简单链表功能实现
两链表从头节点开始遍历(两链表都是头插法产生,方便运算,即头部低位,尾部高位),依次相加,算出当前位与进位值,当前位存入结果链表,进位值参与下一位预算。2. 两链表长度若不相等,相交节点必然在长链表差值之后,则使长链表指针后移差值个节点,使得两个链表剩余长度相同,再同时后移遍历,遇到相同节点跳出循环,证明相交。两链表从头节点开始遍历比较,小的放入结果链表中,后继节点继续比较,大的不动,直至一个链表为空,另一个则一直放,两链表都为空时合并完成。将链表遍历放入栈,再从栈取出存入链表,借助栈先进后出完成反转。
2023-09-27 15:20:48
91
原创 TCP/UDP的简单理解
这个过程中,每一次握手的目的都是为了确认对方的能力和意愿,确保连接的可靠性和正确性。UDP:无连接的不可靠的字节流传输协议,可以一对一,一对多,多对一,多对多,性能相对较好,一般用于直播、语音、视频等要求实时性且允许丢包的场景。TCP:点对点面向连接的可靠性字节流传输协议,只能一对一,由于需要保证可靠性所有性能较差,一般用于重要数据的传递,如文件、邮件传输等。),当cwnd > ssthresh时,进入拥塞避免,使cwnd的上升速度从指数级降为线性级,控制拥塞窗口的增长速度。
2023-09-23 16:41:35
112
原创 JVM内存管理
1-1当计数器的值为0的时候,那么该对象就是可被GC回收的垃圾对象a对象引用了b对象,b对象也引用了a对象,a、b对象却没有再被其他对象所引用了,其实正常来说这两个对象已经是垃圾了,因为没有其他对象在使用了,但是计数器内的数值却不是0,所以引用计数算法就无法回收它们。可达性分析算法也是JVM 默认使用的寻找垃圾算法。通过定义了一系列称为“GC Roots”的根对象作为起始节点集,从 GC Roots 开始,根据引用关系往下进行搜索,查找的路径我们把它称为 "引用链"。
2023-09-13 19:31:07
100
原创 JVM虚拟机基础
JVM(Java虚拟机)是JRE的重要组成部分,它是一个虚拟的计算机,可以执行Java字节码文件。Java程序首先被编译成字节码,然后由JVM解释执行字节码文件,JVM的主要功能是将字节码转换为机器码并运行程序。JVM提供了一种平台无关的方式来运行Java程序,因为它可以在不同的操作系统和硬件架构上运行。JVM还提供了垃圾回收机制和其他一些优化,以提高程序的性能和稳定性。
2023-09-11 18:44:10
135
原创 一些简单的Linux命令
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、 支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和 64位硬件。
2023-09-08 15:18:25
47
原创 Spring Security 安全认证框架
Spring Security是一种基于Spring框架的安全框架,它提供了一系列的安全工具和功能,用于保护Web应用程序和服务。Spring Security可以用于管理用户身份验证、授权、会话管理等安全方面的功能,同时还支持许多常见的安全协议和标准,如OAuth、OpenID等。通过使用Spring Security,开发人员可以更轻松地实现安全性,以保护其应用程序和服务。
2023-09-07 17:03:27
113
原创 Shiro权限管理框架
Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。Shiro 是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。如下是它所具有的。
2023-09-07 15:43:09
288
原创 RocketMQ
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。对于消息中间件,常见的角色大致也就有Producer(生产者)、Consumer(消费者)例如:寄快递。
2023-09-01 20:37:34
589
原创 ElasticSearch
JavaRestClient操作elasticsearch的流程基本类似。核心是client.indices()方法来获取索引库的操作对象。初始化RestHighLevelClient创建XxxIndexRequest。XXX是Create、Get、Delete准备DSL( Create时需要,其它是无参)发送请求。调用RestHighLevelClient#indices().xxx()方法,xxx是create、exists、delete。
2023-08-24 19:26:47
95
原创 Java 8新特性
通过链式编程,使得它可以方便地对数据进行链式处理。方法参数都是函数式接口类型。一个 Stream 只能操作一次,操作完就关闭了,继续使用这个 Stream 会报错。Stream 不保存数据,不改变数据源。
2023-08-22 21:03:24
239
原创 SpringBoot
虽然Spring的组件代码是轻量级的,但它的配置却是重量级的(需要大量XML配置)。为此, Spring2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。尽管如此,我们依旧没能逃脱配置的魔爪。开启某些Spring特性时,比如事务管理和 Spring MVC,还是需要用XML或Java进行显式配置;
2023-08-20 12:24:24
59
1
原创 Spring MVC
MVC模式时模型(Model)、视图(View)、控制器(Controller)的简写,其核心思想时通过将请求处理控制业务逻辑数据封装数据显示等流程节点分离的思想来组织代码。所以,MVC 是一种设计模式,而Spring MVC是一款基于MVC设计模式思想实现的MVC框架,属于Spring技术栈的一部分。Spring MVC 可以帮助我们进行更简洁的 web 层开发。
2023-08-20 09:41:54
78
1
原创 Redis
Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。
2023-08-17 19:48:07
55
1
原创 ThreadLocal
ThreadLocal(线程局部变量)是Java中的一个类,它提供了一种可以将数据与线程绑定的机制。每个ThreadLocal对象可以绑定一个特定的值,这个值只能被对应的线程访问和修改,其他线程无法访问。这种机制可以保证各个线程中的数据是相互独立的,避免了多线程并发访问时的线程安全问题。ThreadLocal通常被用于多线程环境下需要共享数据,但又要保证数据安全的情况。
2023-08-15 21:03:03
58
1
原创 Synchronized同步锁
同步锁是一种保证线程安全的机制。就是使用Synchronized(语法级)关键字将一段代码逻辑用同一把锁锁起来,哪个线程竞争到了这把锁哪个线程才有权访问这段代码,其余线程只能阻塞等待,保证了同一时刻只有一个线程执行上锁代码,保证了代码的原子性,从而确保线程安全。
2023-08-14 20:56:35
237
1
原创 Spring Bean的生命周期
Spring Bean的生命周期是从 Bean 实例化之后,即通过反射创建出对象之后,到Bean成为一个完整对象,最终存储到单例池中,这个过程被称为Spring Bean的生命周期。
2023-08-08 19:34:07
100
1
原创 SpringAop
AOP(Aspect-Oriented Programming: 面向切面编程):将那些与业务无关,却为业务模块所共同调用的逻辑(例如事务处理、日志管理、权限控制等)封装抽取成一个可重用的模块,这个模块被命名为“切面”(Aspect),便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。
2023-08-04 17:27:24
47
1
原创 SpringIOC
关键字:IOC名词解释,作用是解耦,使用IOC容器管理项目组件之间的耦合关系IOC( Inversion of Control,中文释义:控制反转 ) 是Spring框架的核心思想之一,主要用于解耦。IOC是指将创建对象的控制权转移给Spring框架进行管理。由Spring框架根据配置文件或注解等方式,创建bean对象并管理各个bean对象之间的依赖关系。使对象之间形成松散耦合的关系,实现解耦;
2023-08-02 19:31:22
55
原创 CopyOnWriteArrayList核心源码阅读
CopyOnWriteArrayList是ArrayList的一个线程安全变体。它被优化为读取而不是写入的列表。当我们往一个集合容器中写入元素时(添加、修改、删除),并不会直接在集合容器中写入,而是先将当前集合容器进行Copy,复制出一个新的容器,然后新的容器里写入元素,写入操作完成之后,再将原容器的引用指向新的容器。这确保所有读取是一致的且线程安全。使用CopyOnWriteArrayList的情况通常是当你对列表的。
2023-07-20 18:15:29
92
原创 ReentrantLock与synchronized的区别
总之,ReentrantLock和synchronized都是Java中用于实现线程同步的机制,但它们之间有一些细微的差别。ReentrantLock提供了更多的功能和灵活性,但在低度并发的情况下,synchronized的性能通常更好。因此,在选择使用哪种机制时,应该根据具体的应用场景来进行选择。
2023-07-18 18:27:59
232
1
原创 线程池的执行流程
线程池是一种预先创建一定数量的线程,然后将多个任务分配给这些线程来执行的技术,它可以最大程度地减小线程的创建和销毁造成的开销,提高系统的性能和稳定性。线程池通常包含三个重要的组件:任务队列、工作线程和管理器,其中任务队列用于保存等待执行的任务,工作线程用于执行任务,管理器用于创建、销毁和监控线程池中的线程,以及分配任务给空闲线程。线程池可以提高程序的响应速度,减少资源占用率,提高系统的可扩展性和可靠性。
2023-07-17 19:38:12
63
1
原创 线程的创建方式
总之,以上四种方式都可以用来创建线程,具体使用哪种方式取决于实际需求。继承 Thread 类和实现 Runnable 接口是创建线程的最基本方式,而 Callable 和 Future 接口可以用于需要返回结果的耗时操作,线程池则可以用来管理大量需要重复执行的任务。
2023-07-17 18:19:43
97
1
原创 AES算法的两种工作模式
综上所述,ECB模式适用于短文本的加密,而CBC模式适用于长文本的加密,并且相比于ECB模式,CBC模式在数据保密性方面更为安全。但是,CBC模式的加解密需要使用IV(初始化向量),如果IV被攻击者获取,则安全性将会受到威胁。因此,在使用CBC模式时一定要注意IV的保密性。
2023-07-16 14:00:56
681
1
原创 Java反射机制
反射是Java语言中一种强大的特性,它允许程序在运行时动态地获取和操作类、对象、方法以及字段等信息。以下是反射的一些总结:反射提供了一种可以在运行时获取类的信息的机制,比如类的名称、修饰符、字段信息、方法信息、构造方法信息等。反射可以动态地创建类的实例,可以通过Class类的newInstance()方法创建一个类的对象。反射可以动态地获取和设置对象的属性值,可以通过反射获取对象的指定字段的值或设置它的值。反射可以动态地调用对象的方法,可以通过反射获取对象的指定方法并调用它。
2023-07-12 21:49:17
93
1
原创 Hash加密算法总结
Hash加密算法是一种快速、不可逆和安全的算法,被广泛应用于数字签名、数据完整性验证等信息安全领域。常见的Hash算法包括MD5和SHA算法。Hash算法的应用场景包括数据完整性验证和数字签名等。
2023-07-10 18:45:27
9390
1
原创 FTP服务器案例
FTP协议包括服务器端和客户端,本博客通过对服务器端文件的查看、上传和下载三方面进行了简单功能的实现,展示了FTP协议是如何基于TCP协议实现的。
2023-07-08 16:12:48
134
1
原创 JavaMail案例
在这几个示例程序中,我们使用了JavaMail API来创建了一个邮件会话,然后根据邮件发送方的邮箱和密码以及邮件接收方的邮箱地址,创建了一个邮件对象,并设置了邮件的主题和正文内容。最后,通过Transport类的send方法发送了这个邮件。需要注意的是,在发送邮件之前,需要先在邮件发送方的邮箱中开启SMTP服务,并生成一个授权码或应用程序密码,用于验证身份。总的来说,JavaMail是一个功能强大的API,可以用于实现各种邮件相关的应用。
2023-07-08 15:43:42
890
1
原创 HashMap的数据结构
HashMap是Map的常用子类,基于哈希表(数组+链表)的Map接口实现,提供所有可选的映射操作。关键特点:无序、key唯一、value允许重复、key和value允许为null。
2023-06-13 15:08:44
51
1
原创 LinkedList源代码阅读
LinkedList集合的数据结构是双向链表,由若干个Node对象组成,因此适合数据频繁添加删除操作,写多读少的场景。由于采用链表结构,每次添加元素,都会创建新的Node节点并分配空间,所以不存在扩容。
2023-04-27 17:50:32
89
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人