JavaEE
文章平均质量分 94
JavaEE相关知识
楠枬
保持思考
展开
-
Spring AOP
AOP(Aspect-Oriented Programming,面向切面编程):是一种软件开发的编程范式,旨在将横切关注点(cross-cutting concerns)与核心业务逻辑分离,以提高代码的模块化性、可维护性和复用性原创 2024-11-04 09:00:00 · 354 阅读 · 9 评论 -
数据链路层
数据链路层是 TCP/IP 五层协议模型中的第二层,主要负责在相邻的网络节点之间传输数据帧,在本篇文章中,我们来学习以太网、帧、MAC地址、ARP等原创 2024-09-07 09:00:00 · 1337 阅读 · 54 评论 -
IP 协议
网络层负责在复杂的网络环境下确定一个合适的路径。IP 协议是网络层中的重要协议,在本篇文章中,我们就来学习 IP 协议原创 2024-09-05 09:00:00 · 1764 阅读 · 68 评论 -
TCP协议
TCP(Transmission Control Protocol 即传输控制协议)是传输层的重要协议之一,对数据的传输进行详细的控制原创 2024-09-03 09:00:00 · 1565 阅读 · 57 评论 -
网络基础知识
本文介绍了网络基础知识,包括网络的发展、局域网、广域网、OSI 七层模型、TCP/IP 五层模型、封装和分用等原创 2024-08-31 09:00:00 · 1545 阅读 · 56 评论 -
线程安全问题
若某个代码,无论是在单个线程下执行,还是在多个线程下执行,都不会产生 bug,则这种情况就称为线程安全;而如果这个代码在单线程下正确运行,但在多线程下,就可能会产生 bug,则这种情况就称为线程不安全或存在线程安全问题,即若多线程环境下代码运行的结果是符合我们预期的(在单线程环境下应该的结果),则说明是 线程安全 的i < 5000;});i < 5000;});t1.start();t2.start();t1.join();原创 2024-08-19 09:00:00 · 855 阅读 · 35 评论 -
wait 和 notify
由于线程之间是的,因此,线程之间执行的先后顺序难以预知,但是,在实际开发中,有时候我们希望合理的协调多个线程之间的执行先后顺序例如:在篮球场上,每个队员都是独立的 执行流,也就是一个 线程当需要完成一个具体的得分动作时,就需要多个队员相互配合,按照一定的顺序执行一定的动作,线程 1 先向 线程 2 "传球",线程2 才能 "扣篮"要完成 协调工作,主要涉及到三个方法:wait()/wait(long timeout):让当前线程进入等待状态notify():唤醒当前对象上等待的线程。原创 2024-08-17 08:51:04 · 1271 阅读 · 53 评论 -
线程的状态
在我们调试多线程代码时,线程的状态可以作为调试的重要依据,在 Java 中,线程有以下几种状态:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED原创 2024-08-16 09:00:00 · 1155 阅读 · 42 评论 -
Thread 类的基本用法
一个线程就是一个 "执行流",,多个线程之间 "同时" 执行着多份代码创建线程比创建进程更快销毁进程比销毁线程更快调度线程比调度进程更快线程是操作系统中的概念,操作系统内核实现了线程这样的机制,并且对用户层提供了一些 API 供用户使用(如 Linux 的 pthread 库)而在 Java 标准库中,将这些 API 进行了封装,因此我们可以直接使用类来实现多线程程序。原创 2024-08-14 09:00:00 · 1267 阅读 · 45 评论 -
进程和线程
进程(Process)是操作系统提供的一种 "软件资源",是操作系统对一个正在运行的程序的一种抽象,即,可以把进程看做程序的一次运行过程,进程依赖于程序运行而存在。线程,也可以称为 轻量级进程,在进程的基础上做出了改进,保持了 独立调度执行这样的 并发支持,同时省去了 分配资源、释放资源 带来的额外开销原创 2024-08-10 09:00:00 · 1300 阅读 · 54 评论 -
JVM(Java虚拟机)
JVM 作为 Java 的核心组成部分,提供了丰富的功能和机制,在本篇文章中,我们主要学习 JVM 的内存区域划分、类加载机制 和 垃圾回收算法原创 2024-07-31 09:00:00 · 1200 阅读 · 47 评论 -
HTTPS
HTTP 协议内容都是按照文本的方式进行明文传输的,这就导致在传输过程中比较危险,可能会被黑客劫持,从而窃取用户隐私信息,或是篡改内容,而 HTTPS 则在 HTTP 的基础上进行了加密,进一步保证用户的信息安全原创 2024-07-29 09:00:00 · 985 阅读 · 60 评论 -
HTTP详解
超文本是一种。原创 2024-07-27 09:00:00 · 13008 阅读 · 41 评论 -
SpringMVC 请求参数接收
在浏览器与程序进行交互时,主要分为将用户(浏览器)和 Java 程序连接起来,也就是访问一个地址能够调用到 Spring程序用户请求时会携带一些参数,在程序中要想办法获取到参数,因此请求这部分主要是的功能在执行了业务逻辑之后,要将程序执行的结果返回给客户,也就是响应在本篇文章中,我们来学习请求(获取参数 )这部分内容。原创 2024-06-27 09:00:00 · 1849 阅读 · 44 评论 -
图书管理系统(详解版 附源码)
本篇文章实现了图书管理系统,完成功能包括用户注册登录,图书的增删查改,完整源码放在文末,需要自取原创 2024-06-25 09:00:00 · 2836 阅读 · 28 评论 -
JWT令牌技术
是一种用于身份验证和授权的方法,常用于网络安全和信息技术领域。在计算机系统中,令牌是一种用于证明用户身份或授权访问的凭证,可以是基于硬件的安全令牌,也可以是基于软件的生成代码或数据。令牌技术允许用户获取一个特定的令牌后,在之后的通信中使用该令牌来证明自己的身份或获得授权。原创 2024-06-09 09:00:00 · 2161 阅读 · 48 评论 -
拦截器(Interceptor)
拦截器(Interceptor)是Spring框架提供的核心功能之一,主要用于拦截用户请求,在指定方法前后,根据业务需求执行预先设定的代码拦截器允许开发人员提前预定义一些逻辑,在用户的请求响应前后执行,也可以在用户请求前阻止其执行,在拦截器当中,开发人员可以在应用程序中做一些通用性的操作例如,可以通过拦截器拦截前端发来的请求,判断Session中是否有登录用户的信息,若有,则放行;若没有,则进行拦截在了解了什么是拦截器之后,我们来学习如何实现拦截器。原创 2024-06-05 09:00:00 · 1380 阅读 · 44 评论 -
密码加密及验证
摘要算法也称为哈希函数,是一种将任意长度的输入消息转换为固定长度的输出值(哈希值)的算法。同样的,我们将加密的过程看做数学中计算y = f(x)的过程,其中 x 为明文,y 为密文,f( )表示加密算法对于摘要算法,可以通过y = f(x)计算密文,而无法通过密文计算明文固定长度输出:摘要算法生成的哈希值长度是固定的,不受输入消息长度的影响。唯一性:对于不同的输入消息,摘要算法应该生成不同的哈希值。原创 2024-06-03 09:00:00 · 1771 阅读 · 34 评论 -
Spring事务
指作为单个逻辑工作单元执行的一系列操作,是一组操作的集合,是一个不可分割的操作。在数据库管理系统中,事务通常用于确保数据库操作的原子性、一致性、隔离性和持久性。事务会把所有的操作作为一个整体,一起向数据库提交或是撤销操作的请求,这组操作要么同时成功,要么同时失败。原创 2024-05-23 09:00:00 · 1234 阅读 · 47 评论 -
简易留言板
添加留言[URL][请求参数][响应]true //添加成功false //添加失败显示留言[URL][请求参数]无[响应]返回留言列表"id": 1,},"id": 2,},"id": 3,原创 2024-05-12 09:04:29 · 1068 阅读 · 47 评论 -
MyBatis——动态SQL
指在运行时动态构建 SQL 查询或命令的过程,动态 SQL 允许根据不同的条件或变量生成不同的 SQL 语句,从而实现更灵活的数据操作在这里,使用的数据表是之前文章 MyBatis(一) 中创建的userinfo表。原创 2024-05-08 09:00:00 · 1965 阅读 · 33 评论 -
MyBatis中的#{} 和 ${}
由于 ${} 存在 SQL注入的问题,因此,在能够使用 #{} 的情况下,我们尽可能选择使用 #{},而在需要使用 ${} 时,我们需要对用户输入的数据进行验证,确保其符合预期的格式和范围。当使用 ${} 时,由于没有对用户输入进行充分检查,而SQL又是拼接而成的,在用户输入参数时,在参数中添加一些 SQL关键字,达到改变SQL运行结果的目的,也可以完成恶意攻击。当使用 ${} 时,由于参数直接拼接在SQL语句中,而字符串作为参数时需要添加 '',而 ${} 不会拼接'',因此程序报错。原创 2024-05-02 09:00:00 · 902 阅读 · 21 评论 -
MyBatis(一)
MyBatis是持久层框架,是帮助我们更简单地操作和读取数据库的工具,其具体数据存储和数据操作还是在MySQL中进行的,因此,需要添加MySQL驱动。在使用MyBatis的过程中,我们可以借助日志,来观察 SQL语句的执行、传递的参数 和 执行结果,因此,我们来学习MyBatis日志打印。我们可以想到我们在学习MySQL时,可以给列名起别名,因此,我们可以通过起别名的方式,让别名 和 实体类属性名相同。在上述操作中,我们使用注解的方式来进行增删改查,在MyBatis中,也可以使用XML的方式来进行操作。原创 2024-04-27 09:00:00 · 1103 阅读 · 25 评论 -
SpringBoot日志
日志级别是开发人员设置的,用来给开发人员看的,开发人员根据自己的理解来判断该信息的重要程度,若将ERROR级别的日志设置成INFO,很有可能会影响开发人员对项目运行情况的判断,当出现较多ERROR级别的日志信息时,也可能没有任何问题,测试的BUG级别更多的是依据现象和影响范围来判断。这些子系统可能是相互独立的模块,也可能是紧密相关的组件,子系统的具体实现对客户端是透明的,客户端只需要通过门面系统与子系统进行交互,而不需要了解子系统的内部实现细节。这样可以减少客户端与系统之间的交互,降低了系统的复杂度。原创 2024-04-21 08:44:41 · 1285 阅读 · 27 评论 -
SpringBoot配置文件
其中,yml 和 properties 的区别 类似与商品的新旧包装,properties类型的配置文件就属于旧包装,也就是是创建SpringBoot项目时默认的文件格式(仓库里还有库存),而yml属于新包装。我们可以发现: 当 .properties 和 .yml 共存时,两个配置文件都会加载,而当配置文件内容存在冲突时,其中,yml是yaml的简写,使用频率较高,yaml与yml的使用方式是。的,因此我们学习了yml文件的使用后,也就能够使用yaml文件。原创 2024-04-12 09:00:00 · 1848 阅读 · 22 评论 -
Spring IoC和DI
为什么要有这么多的类注解呢?这与 应用分层 类似,为了在看到类注解后,就能直接了解当前类的用途@Controller:控制层,接收请求,对请求进行处理,并进行响应@Service:业务逻辑层,处理具体的业务逻辑@Repository:数据访问层,也称为持久层,处理数据访问操作@Configuration:配置层,处理项目中的一些配置信息@Component:泛指组件,当组件不好归类时,可以使用这个注解。原创 2024-03-31 09:00:00 · 1206 阅读 · 19 评论 -
UDP协议
(User Datagram Protocol 即用户数据报协议)是传输层的重要协议之一(还有一个重要协议是TCP)原创 2024-02-18 21:30:00 · 852 阅读 · 24 评论 -
回显服务器(基于TCP)
在学习了基于UDP实现的回显服务器后,我们学习基于TCP实现的回显服务器。原创 2024-02-13 09:00:00 · 986 阅读 · 12 评论 -
回显服务器(基于UDP)
这是因为对于客户端来说,无法保证手动指定的端口是可用的,因此由系统随机分配一个空闲的端口号,而对于服务器端口来说,我们事先知道服务器上有哪些端口被使用,因此我们可以确保指定的端口未被占用,此外,客户端要主动给服务器发起请求,通过服务器端口号找到服务器,若服务器端口号也随机分配,则客户端不能找到服务器。在实现服务器过程中我们需要注意的是,由于服务器要等到客户端发送请求时才能进行接收、解析、计算响应等操作,而服务器不知道客户端什么时候发送请求,因此服务器需要一直“待命”,等待客户端发送请求。原创 2024-01-30 09:00:00 · 1494 阅读 · 18 评论 -
Java文件操作
数据流是一串连续的数据集合,就像水池里的水流,在一端水管供水(即写数据),在另一端水管出水(即读数据)。在写入数据时,可以一点一点或一段一段地写入,这些数据会按照先后顺序形成一个长的数据流,则在读取数据时,可以读取任意长度的数据Java标准库对流进行了一系列的封装,提供了一系列类来完成这些工作,而这些类大体可以分为两大类:1.原创 2024-01-26 09:00:00 · 1353 阅读 · 27 评论 -
线程安全的集合类
的方法,即当发现需要扩容时,创建一个新的数组,同时搬运几个元素过去,后续每次线程操作ConcurrentHashMap时,都会搬运元素,每次操作搬运一部分元素。,当读取顺序表时,此时无线程安全问题,而当有线程要修改其中的值时,就会将list复制一份,修改新表中的内容,并修改引用的指向(操作是原子的,无需加锁)因此,针对读取操作,无需加锁,不同链表的操作,也无需加锁,而当针对同一链表操作时,需要加锁,此时,我们可以考虑使用。哈希表中本就需要有数组,数组的元素都是已经存在的(每个链表的头节点),此时,只需。原创 2024-01-18 09:00:00 · 1388 阅读 · 31 评论 -
JUC的常见类
即,其中存放了一些进行多线程编程时有用的类。原创 2024-01-17 09:00:00 · 1936 阅读 · 12 评论 -
常见锁策略
即加锁过程(处理冲突时)时的处理方式。原创 2024-01-09 09:00:00 · 1373 阅读 · 23 评论 -
Java线程池
线程池能够存储一定数量的线程,当我们需要时,就从池中取出使用,用完再还给线程池。为什么要使用线程池?线程池能够减少每次启动、销毁线程的损耗,同时,在执行任务时,不需要等待线程创建就可直接执行,提高了响应速度,此外,由线程池统一调度和分配线程,有利于线程的管理。原创 2024-01-07 09:00:00 · 1545 阅读 · 22 评论 -
Java定时器
即在设定的时间时执行某事的设备(例如闹钟,在指定的时间响铃),Java中的定时器会在到达设定的时间后,执行指定的代码Java标准库中提供了一个定时器Timer类供我们使用,位于java.util中。原创 2023-12-31 09:00:00 · 4183 阅读 · 28 评论 -
Java阻塞队列
阻塞队列(Blocking Queue)是一种特殊的队列,因其为队列,因此遵循“先进先出”的原则,此外,其是一种线程安全的数据结构,具有以下两点特性:1. 当队列满时,继续入队列就会阻塞,直到有线程将元素从队列中取出2. 当队列空时,继续出队列就会阻塞,直到有线程向队列中插入元素阻塞队列常用于“生产者消费者模型什么是“生产者消费者模型”?“生产者消费者模式”是一种典型的开发模型,通过一个容器来解决生产者和消费者的强耦合问题向队列中添加元素的线程向队列中取出元素的线程。原创 2023-12-23 09:00:00 · 1437 阅读 · 18 评论 -
单例模式:饿汉模式、懒汉模式
单例模式是Java中的设计模式之一,能够保证某个类在程序中只存在唯一一份实例,而不会创建出多个实例单例模式有很多实现方式,最常见的是饿汉和懒汉两种模式。原创 2023-12-14 17:55:50 · 1061 阅读 · 14 评论