JavaEE
文章平均质量分 93
JavaEE相关知识
楠枬
保持思考
展开
-
简易留言板
添加留言[URL][请求参数][响应]true //添加成功false //添加失败显示留言[URL][请求参数]无[响应]返回留言列表"id": 1,},"id": 2,},"id": 3,原创 2024-05-12 09:04:29 · 539 阅读 · 21 评论 -
MyBatis——动态SQL
指在运行时动态构建 SQL 查询或命令的过程,动态 SQL 允许根据不同的条件或变量生成不同的 SQL 语句,从而实现更灵活的数据操作在这里,使用的数据表是之前文章 MyBatis(一) 中创建的userinfo表。原创 2024-05-08 09:00:00 · 1726 阅读 · 31 评论 -
MyBatis中的#{} 和 ${}
由于 ${} 存在 SQL注入的问题,因此,在能够使用 #{} 的情况下,我们尽可能选择使用 #{},而在需要使用 ${} 时,我们需要对用户输入的数据进行验证,确保其符合预期的格式和范围。当使用 ${} 时,由于没有对用户输入进行充分检查,而SQL又是拼接而成的,在用户输入参数时,在参数中添加一些 SQL关键字,达到改变SQL运行结果的目的,也可以完成恶意攻击。当使用 ${} 时,由于参数直接拼接在SQL语句中,而字符串作为参数时需要添加 '',而 ${} 不会拼接'',因此程序报错。原创 2024-05-02 09:00:00 · 706 阅读 · 18 评论 -
MyBatis(一)
MyBatis是持久层框架,是帮助我们更简单地操作和读取数据库的工具,其具体数据存储和数据操作还是在MySQL中进行的,因此,需要添加MySQL驱动。在使用MyBatis的过程中,我们可以借助日志,来观察 SQL语句的执行、传递的参数 和 执行结果,因此,我们来学习MyBatis日志打印。我们可以想到我们在学习MySQL时,可以给列名起别名,因此,我们可以通过起别名的方式,让别名 和 实体类属性名相同。在上述操作中,我们使用注解的方式来进行增删改查,在MyBatis中,也可以使用XML的方式来进行操作。原创 2024-04-27 09:00:00 · 1022 阅读 · 24 评论 -
SpringBoot日志
日志级别是开发人员设置的,用来给开发人员看的,开发人员根据自己的理解来判断该信息的重要程度,若将ERROR级别的日志设置成INFO,很有可能会影响开发人员对项目运行情况的判断,当出现较多ERROR级别的日志信息时,也可能没有任何问题,测试的BUG级别更多的是依据现象和影响范围来判断。这些子系统可能是相互独立的模块,也可能是紧密相关的组件,子系统的具体实现对客户端是透明的,客户端只需要通过门面系统与子系统进行交互,而不需要了解子系统的内部实现细节。这样可以减少客户端与系统之间的交互,降低了系统的复杂度。原创 2024-04-21 08:44:41 · 1192 阅读 · 22 评论 -
SpringBoot配置文件
其中,yml 和 properties 的区别 类似与商品的新旧包装,properties类型的配置文件就属于旧包装,也就是是创建SpringBoot项目时默认的文件格式(仓库里还有库存),而yml属于新包装。我们可以发现: 当 .properties 和 .yml 共存时,两个配置文件都会加载,而当配置文件内容存在冲突时,其中,yml是yaml的简写,使用频率较高,yaml与yml的使用方式是。的,因此我们学习了yml文件的使用后,也就能够使用yaml文件。原创 2024-04-12 09:00:00 · 1080 阅读 · 21 评论 -
Spring IoC和DI
为什么要有这么多的类注解呢?这与 应用分层 类似,为了在看到类注解后,就能直接了解当前类的用途@Controller:控制层,接收请求,对请求进行处理,并进行响应@Service:业务逻辑层,处理具体的业务逻辑@Repository:数据访问层,也称为持久层,处理数据访问操作@Configuration:配置层,处理项目中的一些配置信息@Component:泛指组件,当组件不好归类时,可以使用这个注解。原创 2024-03-31 09:00:00 · 1079 阅读 · 19 评论 -
UDP协议
(User Datagram Protocol 即用户数据报协议)是传输层的重要协议之一(还有一个重要协议是TCP)原创 2024-02-18 21:30:00 · 802 阅读 · 24 评论 -
回显服务器(基于TCP)
在学习了基于UDP实现的回显服务器后,我们学习基于TCP实现的回显服务器。原创 2024-02-13 09:00:00 · 909 阅读 · 11 评论 -
回显服务器(基于UDP)
这是因为对于客户端来说,无法保证手动指定的端口是可用的,因此由系统随机分配一个空闲的端口号,而对于服务器端口来说,我们事先知道服务器上有哪些端口被使用,因此我们可以确保指定的端口未被占用,此外,客户端要主动给服务器发起请求,通过服务器端口号找到服务器,若服务器端口号也随机分配,则客户端不能找到服务器。在实现服务器过程中我们需要注意的是,由于服务器要等到客户端发送请求时才能进行接收、解析、计算响应等操作,而服务器不知道客户端什么时候发送请求,因此服务器需要一直“待命”,等待客户端发送请求。原创 2024-01-30 09:00:00 · 1399 阅读 · 18 评论 -
Java文件操作
数据流是一串连续的数据集合,就像水池里的水流,在一端水管供水(即写数据),在另一端水管出水(即读数据)。在写入数据时,可以一点一点或一段一段地写入,这些数据会按照先后顺序形成一个长的数据流,则在读取数据时,可以读取任意长度的数据Java标准库对流进行了一系列的封装,提供了一系列类来完成这些工作,而这些类大体可以分为两大类:1.原创 2024-01-26 09:00:00 · 1208 阅读 · 27 评论 -
线程安全的集合类
的方法,即当发现需要扩容时,创建一个新的数组,同时搬运几个元素过去,后续每次线程操作ConcurrentHashMap时,都会搬运元素,每次操作搬运一部分元素。,当读取顺序表时,此时无线程安全问题,而当有线程要修改其中的值时,就会将list复制一份,修改新表中的内容,并修改引用的指向(操作是原子的,无需加锁)因此,针对读取操作,无需加锁,不同链表的操作,也无需加锁,而当针对同一链表操作时,需要加锁,此时,我们可以考虑使用。哈希表中本就需要有数组,数组的元素都是已经存在的(每个链表的头节点),此时,只需。原创 2024-01-18 09:00:00 · 1239 阅读 · 31 评论 -
JUC的常见类
即,其中存放了一些进行多线程编程时有用的类。原创 2024-01-17 09:00:00 · 1903 阅读 · 12 评论 -
常见锁策略
即加锁过程(处理冲突时)时的处理方式。原创 2024-01-09 09:00:00 · 1337 阅读 · 23 评论 -
Java线程池
线程池能够存储一定数量的线程,当我们需要时,就从池中取出使用,用完再还给线程池。为什么要使用线程池?线程池能够减少每次启动、销毁线程的损耗,同时,在执行任务时,不需要等待线程创建就可直接执行,提高了响应速度,此外,由线程池统一调度和分配线程,有利于线程的管理。原创 2024-01-07 09:00:00 · 977 阅读 · 22 评论 -
Java定时器
即在设定的时间时执行某事的设备(例如闹钟,在指定的时间响铃),Java中的定时器会在到达设定的时间后,执行指定的代码Java标准库中提供了一个定时器Timer类供我们使用,位于java.util中。原创 2023-12-31 09:00:00 · 2694 阅读 · 28 评论 -
Java阻塞队列
阻塞队列(Blocking Queue)是一种特殊的队列,因其为队列,因此遵循“先进先出”的原则,此外,其是一种线程安全的数据结构,具有以下两点特性:1. 当队列满时,继续入队列就会阻塞,直到有线程将元素从队列中取出2. 当队列空时,继续出队列就会阻塞,直到有线程向队列中插入元素阻塞队列常用于“生产者消费者模型什么是“生产者消费者模型”?“生产者消费者模式”是一种典型的开发模型,通过一个容器来解决生产者和消费者的强耦合问题向队列中添加元素的线程向队列中取出元素的线程。原创 2023-12-23 09:00:00 · 1231 阅读 · 18 评论 -
单例模式:饿汉模式、懒汉模式
单例模式是Java中的设计模式之一,能够保证某个类在程序中只存在唯一一份实例,而不会创建出多个实例单例模式有很多实现方式,最常见的是饿汉和懒汉两种模式。原创 2023-12-14 17:55:50 · 664 阅读 · 14 评论