- 博客(36)
- 收藏
- 关注
原创 Spring事务和事务传播机制
事务传播机制就是:多个事务方法存在调用关系时,事务是如何在这些方法间进行传播的。比如有两个方法A,B都被@Transactional修饰,A方法调用B方法A方法运行时,会开启一个事务,当A调用B时,B方法本身也有事务,此时B方法运行时,是加入A的事务,还是创建一个新的事务呢?这就涉及到了事务的传播机制。Spring中使用事务,有两种方式:编程事务和声明式事务,其中声明式事务时使用较多,在方法手上添加@Transactional就可以实现了。
2024-12-09 15:56:45
1364
原创 汉诺塔问题
在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。假如n = 2时,只需要将A中上面的盘子放到B中,再将A中的盘子放到C中,最后将B中的盘子放在C中。虽然题目要求一次只能移动一个,此处我们是将两个看成一个整体进行移动。通过上述图可以发现,n = 3时和n = 2时的情况是相类似的。) ,再将A中盘子移动到C,最后再将B中的盘子借助A移动到C。假如n = 3时,只需要将A中上面两个盘子借助C移动到B中(假如n = 1时,只需要将A中的盘子直接搬到C中。
2024-08-05 12:29:39
330
原创 MyBatis操作数据库(入门)
在应用分层学习中,我们了解web应用程序一般分为三层,即Controller、Service、Dao。在之前的案例中,请求流程如下:浏览器发起请求,先请求Controller,Controller接收到请求之后,调用Service进行业务逻辑处理,Service再调用Dao,但是Dao层的数据是Mock的,真实的数据应该从数据库中读取。我们学习MySQL数据库时,已经学习了JDBC来操作数据库,但是JDBC操作太复杂了。JDBC操作示例回顾创建数据库连接池DataSource。
2024-07-01 11:35:19
989
原创 验证码案例
验证码实现方式很多,可以前端实现,也可以后端实现,网上也有比较多的插件或者工具包可以使用,咱们选择使用Hutool提供的小工具来实现。Hutool是一个Java工具包类库,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类。验证码功能位于cn.hutool.captcha包中,核心接口为ICaptchacreateCode创建验证码,实现类需同时生成随机验证码字符串和验证码图片getCode获取验证码的文字内容verify验证验证码是否正确,建议忽略大小写。
2024-06-08 18:49:12
776
原创 SpringBoot配置文件
为了更方便简单的访问数据库,出现了一些持久层框架,其实就是对JDBC进行了更深层次的封装,让用户通过几行简单代码就可完成数据库的访问。如果采用硬编码的方式,就直接在程序中指定字体大小,所有的用户使用的都是同一个字体大小,但是不同的用户有不同的偏好,我们可以把手机字体的大小放在配置文件中,当程序启动时,读取配置,以用户设置的字体大小来显示。的问题,把可能会改变的信息,放在一个集中的地方,当我们启动某个程序时,应用程序从配置文件中读取数据,并加载运行。使用单引号会转义,就是说,\n不再表示换行了。
2024-06-06 11:08:40
3107
原创 Spring IoC&DI
在前面的章节,我们学到了Spring Boot和Spring MVC的开发,可以完成一些基本功能的开发了,但是什么使Spring呢?Spring、Spring Boot和Spring MVC又有什么关系呢?容器是用来容纳某种物品的装置。比如我们生活中的水杯,垃圾桶,冰箱这些都可比喻成容器。List/Map:数据存储容器Tomcat:Web容器。
2024-05-31 18:31:09
1175
1
原创 Cookie和Session
无状态的含义指的是:默认情况下HTTP协议的客户端和服务器之间的这次通信和下次通信之间没有之间的关系。但是实际开发中,我们很多时候是需要知道请求之间的关联关系的。例如登陆网站成功后,第二次访问的时候服务器就能知道该请求是否是已经登陆过了。上述图中的令牌通常就。例子:比如去医院挂号。
2024-05-23 17:47:59
1083
原创 Spring MVC
Spring MVC全程Spring Web MVC,它是基于Servlet API构建的原始Web框架,从一开始就包含在Spring框架中。它正式名称为Spring Web MVC,但它通常被称为Spring MVC,Spring MVC是一个WEB框架。MVC是Model View Controller的缩写,它是软件工程中的一种软件架构设计模式,它把软件系统分为模式、视图和控制器三个基础部分。指在应用程序中专门用来与浏览器进行交互,展示数据的资源是应用程序的主题部分,用来处理程序中数据逻辑的部分。
2024-05-19 21:58:55
1085
原创 创建Spring Boot项目及配置
首先需要在IDEA插件里面搜索Spring,选择Spring Boot Helper,注意此插件是付费的,需要点击下图的Plugin homepage进入一个官网,随后选择下图框出来的版本进行下载就行,其它版本都是收费的,但是对IDEA的把呢不能有要求,在下图中有显示版本的范围,下载完成之后不要对此压缩包进行解压,直接在IDEA上将此压缩文件进行上传即可。在pom文件中,我们发现版本这有问题,我们首先可以尝试多刷新几次,看是否能够下载下来,如果下载多次都不行,可以去中央仓库进行查找该版本是否存在。
2024-05-10 13:01:20
845
原创 【将Maven源改为国内阿里云镜像源】
2、在settings.xml文件中,找到<mirrors>元素。如果你的settings.xml文件中没有<mirrors>元素,你需要手动添加它。它应该在<settings>元素内部,但不在任何其他元素内部。首先,你创建的项目需要依赖的包,会到你的本地仓库去查找,如果没有进行搜索到,就会到中央仓库去查找,在中央仓库搜索到了就会加载到你的本地仓库,然后你的项目就会在本地仓库中进行搜索到了,这也就是。3、在settings.xml文件中,mirrors中添加mirror块,进行配置,具体配置如下图。
2024-05-10 11:07:30
2223
原创 Servlet原理&&Servlet API
Tomcat通过Socket读取到这个请求(一个字符串),并按照HTTP请求的格式来解析这个请求:根据请求中的Context Path确定一个webapp,再通过Servlet Path确定一个具体的类,再根据当前请求的方法(GET或者POST或其他)决定调用这个类的doGet或者doPost方法。service中根据请求的类型不同,调用不同的方法,doGet,doPost方法等等,会执行多次,每收到一次HTTP请求就执行一次。注意:响应对象是服务器要返回给浏览器的内容,这里的重要信息都是程序员设置的。
2024-04-03 16:40:18
784
原创 【Servlet基础】Servlet项目创建
Tomcat在调用doGet的时候,Tomcat就会解析这次的HTTP请求,生成一个HttpServletRequest对象,这个对象的属性啥的都是和HTTP协议格式匹配的,相当于Tomcat帮我们把HTTP请求解析好了,同时Tomcat也会构造出一个空的HttpServletResponse对象(此处的空对象不是null,而是一个new好但是没有初始化属性的对象),把这个resp对象也会传递到doGet里面。这里的1和3都是Tomcat帮我们实现的,我们写代码只关心2,也就是doGet要完成的工作。
2024-04-02 09:22:09
1407
原创 HTTPS
HTTPS也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层,HTTP的内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况。
2024-03-29 09:54:32
2182
原创 HTTP协议
HTTP协议全称为超文本传输协议,就是可以传输文本及其它格式的数据,如音乐、图片、视频等,是一种广泛应用的应用层协议;对于应用层协议的解释: 将数据从A端传送到B端,TCP/IP协议相当于顺丰的功能,但是两端还要对数据进行加工处理或使用,所以还需要一层协议,不必关心通信的细节,只关心应用,这层协议就是应用层协议;我们平时打开的网站都是通过HTTP协议来传输数据的,HTTP协议是基于传输层TCP协议实现(HTTP1.0,HTTP1.1,HTTP2.0都是基于TCP,HTTP3.0基于UDP实现),
2024-03-28 09:30:30
1673
原创 Socket套接字(实现TCP和UDP的通信)
Socket套接字,是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。换句话说,一个Socket由一个IP地址和一个端口号唯一确定,利用Socket能比较方便的实现两端的网络通信。
2024-03-17 20:39:22
2101
1
原创 网络原理之初识
网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。
2024-03-16 11:16:59
503
1
原创 文件操作-IO
文件路径可以是绝对路径和相对路径。绝对路径表示文件在文件系统中的完整位置,从根目录开始。相对路径表示文件相对于另一个文件或目录的位置。
2024-03-15 15:44:31
1728
2
原创 七大排序【java数据结构】
【本节目标】1、掌握七大基于比较的排序算法基本原理及实现2、掌握排序算法的性能分析3、掌握Java中常用的排序算法。
2023-11-15 21:06:28
72
1
原创 优先级队列(堆)
队列是一种先进先出(FIFO)的数据结构,但是在某些情况下,该场景下,使用队列显然不合适,例如:在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话。在这种情况下,。这种数据结构就是。
2023-11-07 14:20:44
70
1
原创 树与二叉树
遍历就是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问,访问结点所做的操作依赖于具体的应用问题(比如:打印结点内容),遍历是二叉树最重要的操作之一,是二叉树上进行其他运算的基础。N代表根结点,L代表根结点的左子树,R代表根节点的右子树,则根据遍历根节点的先后次序有以下几种遍历方式:(三种遍历方式的区别在于打印/访问根节点的时机不同)度为 0 的节点为 n0,度为 1 的节点为 n1,度为 2 的节点为 n2,因为是奇数个结点,所以度为1的结点个数为0,n1 = 0。int value;
2023-10-29 19:25:42
64
1
原创 【多线程进阶】常见的锁策略和CAS
ABA问题是指在使用ABA操作进行比较-交换时,如果变量在此期间被修改了两次及以上,那么CAS操作可能会出现误判。举一个栗子:假设存在两个线程t1和t2,有一个共享变量num,其初始值为A,step1:接下来线程t1想使用CAS把num值改为Z,那么需要的操作是先读取num的值,记录到oldNum变量中,step2:然后再使用CAS判断当前num的值是否为A,如果为A,就修改为Z,但是,
2023-10-13 19:30:23
63
原创 【多线程基础】线程池
创建线程池采用了工厂模式,用了ExecutorService的静态方法,因为不用这种方法的话,如果都传两个参数,编译器无法分辨线程池的特性,而采用工厂模式的话就可以随用随取。线程池主要功能就是提升程序的执行效率的,为了减少冗余的创建,就是减少每次启动、销毁线程的损耗。如果任务队列中的任务满了,再添加任务,我就会丢弃最老的任务,把新的任务添加进来。如果任务队列中的任务满了,再添加任务,就丢弃要添加的任务。:如果任务队列中的任务满了,再添加任务,谁添加的谁负责。workQueue:线程池的任务队列。
2023-10-10 12:54:26
2838
1
原创 【多线程基础】定时器
1、一个带优先级的阻塞队列为什么要带优先级呢?因为阻塞队列中的任务都有各自的执行时刻,最先执行的任务一定是delay最小的,使用带优先级队列这种数据结构就可以高效把这个delay最小的任务找出来。2、队列中的每个元素是一个Task对象。3、Task中带有一个时间属性,队首元素就是即将要执行的任务。4、同时会有一个线程一直扫描队首元素,看队首元素是否需要执行。1、首先构建一个MyTask类,表示一个任务//取当前时刻的时间戳+delay,作为该任务实际执行的时间戳@Override。
2023-10-08 19:53:51
64
1
原创 【多线程基础】单例模式
单例模式是指在内存中只会创建一次对象的设计模式。在程序多次使用同一对象时,为了防止频繁的创建对象而增加资源的开销,但是单例模式就可以让程序在内存中只创建一个对象,让所有需要调用的地方都共享这一单例对象。
2023-10-08 17:20:51
69
1
原创 【多线程基础】wait和notify
notify() 方法也是一个 Object 类的方法,所有 Java 类也都默认继承了该方法,都可以调用该方法,这个方法也是被 final 修饰的,因此也不可被子类重写,子类只能使用 Object 的实现。wait()方法在调用当前线程之前获取所在对象的监视器锁🔒,如果没有获取对象的监视器锁,直接调用wait()方法,会抛出。wait()方法是Object类的一个方法,因此Java中的所有类都默认继承了该方法,也就是都能使用该方法。:wait()和sleep()都可以暂停线程的执行。
2023-10-06 12:04:46
82
1
原创 【多线程基础】Thread类的基本用法
上一篇文章我们讲了Java关于进程和线程的区别和联系,接下来给大家分享一些线程是如何创建的以及线程的一些基本用法!
2023-10-05 21:59:37
76
原创 【多线程基础】进程与线程间的区别和联系
PS3:现在我们只有一个房间,安排两个滑稽老铁进行吃50只鸡,就相当于创建了两个线程,那么吃鸡的效率就大大提升了,并且此方式吃鸡的开销就小很多啦。PS2:现在我们有两个房间,就相当于创建了两个进程,安排两个滑稽老铁进行吃鸡,每人吃50只鸡,吃鸡的效率是提高了,但是此方式吃鸡的开销比较大。4、进程之间具有隔离性,一个进程挂了不会影响到别的进程,同一个进程里的多个线程之间,一个线程挂了可能会把整个进程带走,进而影响到其他线程。3、进程是操作系统资源分配的基本单位,线程是操作系统调度执行的基本单位。
2023-09-27 22:45:04
78
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人