
JavaEE
文章平均质量分 92
快到锅里来呀
种一棵树最好的时间是十年前,其次是现在
展开
-
Spring 事务(编程式事务、声明式事务@Transactional、事务隔离级别、事务传播机制)
1. 在 Spring 项目中使用事务,有两种方式:编程式手动操作和声明式自动提交,声明式自动提交使用最多,只需要在方法上添加注解 @Transactional2. 设置事务的隔离级别 @Transactional(isolation = Isolation.SERIALIZABLE),Spring 中的事务隔离级别有5种3. 设置事务的传播机制 @Transactional(propagation = Propagation.REQUIRED),Spring 中的事务传播级别有 7 种原创 2023-03-02 08:00:00 · 10842 阅读 · 7 评论 -
Spring Boot 统一功能处理(用户登录权限效验-拦截器、异常处理、数据格式返回)
统一用户登录权限的效验实现接口 HandlerInterceptor + WebMvcConfigurer统一异常处理使用注解 @RestControllerAdvice + @ExceptionHandler统一数据格式返回使用注解 @ControllerAdvice 并且实现接口 @ResponseBodyAdvice原创 2023-02-27 08:00:00 · 5646 阅读 · 44 评论 -
Spring AOP(AOP概念、组成、Spring AOP实现及实现原理)
AOP(Aspect Oriented Programming):面向切面编程,它和 OOP(面向对象编程)类似。它是一种思想,是对某一类事情的集中处理。AOP 是一种思想,而 Spring AOP 是实现(框架),这种关系和 IOC(思想)与 DI(实现)类似原创 2023-02-22 08:00:00 · 10465 阅读 · 8 评论 -
MyBatis 之四(动态SQL之 if、trim、where、set、foreach 标签)
动态 SQL 是 MyBatis 的强大特性之一。使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。本篇主要学习动态 SQL的五个标签 if trim where set foreach原创 2023-02-20 08:00:00 · 3029 阅读 · 28 评论 -
MyBatis 之三(查询操作 占位符#{} 与 ${}、like查询、resultMap、association、collection)
进行一对一查询,需要使用 association 标签,表示一对一的结果映射,其中property 属性:指定其中所要一对一的那个属性resultMap 属性:指定那个属性所关联的结果集映射columnPrefix 属性:用来解决多表中相同字段数据覆盖的问题和一对一 标签类似,一对多也需要标签 ,来表示一对多的结果映射其中也是需要设置 property(对象中的属性名)、resultMap(映射对象对应的字典)、columnPrefix(一般不要省略,解决了多张表中相同字段查询数据覆盖的问题)原创 2023-02-18 08:00:00 · 2219 阅读 · 13 评论 -
MyBatis 之二(增、删、改操作)
MyBatis 增删改操作三步走1. 在 mapper(interface)里面添加增删改方法的声明2. 在 XMl 中添加增删改对应的标签和修改的 sql 代码3, 在 UserMapper 中右键 Generate 点击 Test 生成测试类原创 2023-02-16 08:00:00 · 1812 阅读 · 36 评论 -
MyBatis 之一(概念、创建项目、操作模式、交互流程)
MyBatis 是什么• MyBatis 是一款优秀的持久层框架• MyBatis 也是一个 ORM (Object Relational Mapping)框架,即对象关系映射• 它支持自定义 SQL、存储过程以及高级映射• MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作• MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录M原创 2023-02-14 08:00:00 · 1925 阅读 · 34 评论 -
Spring MVC 之返回数据(静态页面、非静态页面、JSON对象、请求转发与请求重定向)
Spring MVC 之返回数据1. 默认情况下返回静态页面2. 返回一个非静态页面的数据2.1 @ResponseBody 返回页面内容2.2 @RestController = @ResponseBody + @Controller3. 实现登录功能,返回 JSON 对象3.1 前端使⽤ ajax,后端返回 json 给前端3.2 前端发送 JSON 的标准格式4. 请求转发(forward)或请求重定向(redirect)4.1 请求转发:forward4.2 请求重定向:redi原创 2023-02-12 08:00:00 · 5084 阅读 · 45 评论 -
Spring MVC 之获取参数(对象、JSON格式数据、URL地址参数、文件、Cookie)
Spring MVC可以获取1. 获取单个参数2. 获取多个参数3. 获取对象4. 后端参数重命名 @RequestParam5. 接收 JSON 格式的数据 @RequestBody6. 从 URL 地址中获取参数 @PathVariable7. 上传文件 @RequestPart8. 获取Cookie (@CookieValue)/Session/header8.1 获取 Request 和 Response 对象8.2 获取 Cookie8.3 获取 Header(请求头)里面的信原创 2023-02-10 08:00:00 · 3483 阅读 · 37 评论 -
Spring MVC(概念+项目创建+@RequestMappring)
Spring MVC 是一个 Web 框架;Spring MVC 是基于 Servlet API 构建的;MVC 是一种思想;而 Spring MVC 是一个具体的实现框架.Spring MVC 是一个基于 MVC 设计模式和 Servlet API 实现的 Web 项目, 同时 Spring MVC 又是 Spring 框架中的一个 Web 模块, 它是随着 Spring 的诞生而存在的一个框架原创 2023-02-08 08:00:00 · 2347 阅读 · 48 评论 -
Spring Boot 单元测试
单元测试,是指对软件中的最小可测试单元进行检查和验证的过程叫单元测试在 Spring Boot 中,最小可测试单元是指 方法单元测试是开发者编写的一小段代码,用于检测被测代码的一个很小的、很明确的(代码)功能是否正确执行单元测试就是为了证明某段代码的执行结果是否符合我们的预期原创 2023-02-01 08:00:00 · 6902 阅读 · 2 评论 -
Spring Boot 热部署(热加载)
idea 热部署作用:自动帮开发者重启 spring boot 项目,从而达到修改代码之后能够“实时”的看到最新的效果原创 2023-01-30 15:43:46 · 4178 阅读 · 32 评论 -
SpringBoot(项目创建使用+配置文件+日志文件)
1. Spring Boot 项目创建2. 写一个 Hello World 并运行3. 配置文件的作用及格式4. properties 配置文件的基本语法5. 读取配置文件6. yml 配置文件说明7. properties 和 yml 的区别8. SpringBoot 日志文件8.1 日志的作用8.2 自定义日志打印8.3 日志的级别8.4 日志持久化8.5 更简单的实现日志打印lombok原创 2023-01-10 08:59:18 · 4675 阅读 · 58 评论 -
我的博客系统[Servlet]
目录后端程序1. 需求分析2. 概要设计3. 编写数据库操作的代码3.1.使用maven,引入依赖3.2 封装 数据库的 DataSource3.2.1 使用单例模式,把数据库的 DataSource 和 建立连接 还有 断开连接也给封装进去3.2.2 创建实体类3.2.3 针对这两个实体类涉及到的 增删改查 进行进一步的封装,也就是把 jdbc 代码给封装一下4. 进行前后端交互4.1 实现博客列表页(blog_list.html)4.2 实现博客详情页(blog_datail.html) 4.3 实现登原创 2022-12-10 08:00:00 · 2303 阅读 · 37 评论 -
JVM(内存划分+类加载+GC)
🐲 1. JVM 内存划分🐲 2. JVM 类加载🦄 2.1 类型加载是干啥的🦄 2.2 类加载的简略流程 🦄 2.3 什么时候会进行类加载🦄 2.4 双亲委派模型🐲 3. GC 垃圾回收机制🦄 3.1 GC 是什么🦄 3.2 GC 回收哪部分内存🦄 3.3 GC 具体是怎么回收的🦖 3.3.1 怎么判定某个对象是否是垃圾 (引用计数/可达性分析)🦖 3.3.2 具体是怎么回收的 (标记清除/复制算法/标记整理/分代回原创 2022-12-13 15:38:46 · 3741 阅读 · 51 评论 -
Linux(常用命令)
目录🦄 1. 目录操作的命令🦄 2. 文件操作的命令 🦄 3. 创建/删除目录操作🦄 4. 目录/文件 的 移动/复制/改名🦄 5. vim 对文件进行编辑🦄 6. 文本查询 在Xshell中创建一个新的会话 ,创建成功后,就是这样的,(1) ls (ls --> list 列表) 列出当前目录下都有啥 (2) ls / (Linux 中 / 表示根目录) (3) ls -l / 以列表的形式展示内容(相当于 文件资源管理器)使用 ll / 和上面这个效果一样 (4) pwd 查看原创 2022-12-07 08:00:00 · 1527 阅读 · 36 评论 -
Linux(在 Linux 上搭建 java 部署环境(安装jdk/tomcat/mysql) + 将程序部署到云服务器上的操作)
🐲 1. 在 Linux 上搭建 java 部署环境🦄 1.1 安装 jdk🦄 1.2 安装 tomcat🦄 1.3 安装 mysql🐲 2. 将[博客系统]部署到云服务器上🦄 2.1 先在云服务器上,创建和之前 windows 上一样的数据库🦄 2.2 将博客系统程序代码进行打包(war包)🦄 2.3 进入webapp目录下,然后把刚刚打包好的 war 直接拖拽过去原创 2022-12-09 08:00:00 · 2629 阅读 · 26 评论 -
Spring(Bean 作用域和生命周期)
1. 案例1: Bean作用域的问题2. 作用域3. 设置 Bean 的作用域4. Spring 的执行流程5. Bean 的生命周期原创 2022-12-04 08:00:00 · 2865 阅读 · 58 评论 -
Spring(存储Bean对象五大类注解,获取Bean对象三种注入方式)
1. 先进行配置扫描路径2. 存储 Bean 对象( 添加注解存储 Bean 对象)2.1 @Controller [控制器存储]2.2@Service [服务存储]2.3 @Repository [仓库存储]2.4 @Configuration [配置存储]2.5@Component [组件存储]2.6 五大类注解的作用和关系2.7 Bean的命名规则2.8 使用方法注解 @Bean2.8.1 重命名 Bean3. 获取 Bean 对象 (对象装配)原创 2022-12-02 15:45:20 · 4668 阅读 · 44 评论 -
Spring(Spring的理解+DI+Spring的创建)
1. Spring 是什么2. DI3. 面试题: IoC 和 DI 有什么区别?4. Spring 的创建5. 将 Bean (对象) 存储到 Spring (容器) 中6.将 Bean (对象) 从 Spring (容器) 中取出来7. 面试题: ApplicationContext 和 BeanFactory的区别8. getBean 更多用法原创 2022-11-30 08:00:00 · 2114 阅读 · 44 评论 -
Servlet(Cookie和Session)
🐲 1. Cookie 的工作流程🐲 2. Servlet中操作 Cookie 和 Session 的api🐲 3. 案例1: 模拟登录🐲 4. 上传文件🐲 5. 案例2: 上传文件原创 2022-11-26 08:00:00 · 1648 阅读 · 46 评论 -
猜数字+表白墙(html+css+JS)
1.猜数字2. 表白墙3. 服务器版的表白墙4. 将表白墙的数据在数据库中持久化保存原创 2022-09-26 08:30:00 · 689 阅读 · 19 评论 -
Servlet API(HttpSerrvlet+HttpServletRequest+HttpServletResponse)
🐲 1. HttpServlet🐲 2. HttpServletRequest HTTP请求🦄 2.1 打印请求信息(创建 ShowRequest 类)🦄 2.2获取 GET 请求中的参数(创建 GetParameter 类)🦄 2.3获取 POST 请求中的参数(创建PostParameter 类)2.3.1 请求的 body 是 x-www-form-urlencoded form表单2.3.2请求的 body 是 json 格式🐲 3. Http原创 2022-11-24 08:00:00 · 2874 阅读 · 47 评论 -
创建第一个Servlet程序“hello world“(创建流程+页面出错情况)
🐲 1. 动态页面之Servlet🐲 2. 写第一个Servlet的程序:"hello world!"🦄 2.1 创建项目🦄 2.2 引入Servlet依赖🦄 2.3 创建目录结构🦄 2.4 编写代码🦄 2.5 打包程序🦄 2.6 部署程序🦄 2.7 验证程序🐲3. 创建Servlet流程简化🐲4. 工作原理流程分析🐲5. 访问页面出错原创 2022-11-22 08:00:00 · 1945 阅读 · 49 评论 -
HTTP(http+抓包Fiddler+协议格式+请求+响应)
🦄1. 了解HTTP🦄2. 抓包🦄3. http协议格式🐲3.1 完整的HTTP请求格式🐲3.2 完整的HTTP响应的格式HTTP请求🦄4. 认识URL🦄5. http中的"方法"🐲5.1get 是最常用的HTTP请求方法🐲5.2. post 产生的途径面试题: get 和 post 的区别"post" 和 "get" 安全性问题🦄6. 请求报头header🐲6.1 Host:表示服务器主机的地址和接口🐲6.2Con原创 2022-11-17 08:00:00 · 7569 阅读 · 50 评论 -
TCP/IP协议
1. 应用层2. 传输层2.1 UDP协议2.2 TCP协议(*三次握手四次挥手重点!!!)2.2.1 确认应答机制2.2.2 超时重传2.2.3 连接管理2.2.4 滑动窗口2.2.5 流量控制2.2.6 拥塞控制2.2.7 延迟应答2.2.8 捎带应答2.2.9 面向字节流2.2.10 TCP中的异常处理2.3 TCP和UDP之间的对比3. 网络层3.1 IP地址不够用的问题解决方案3.2地址管理3.3路由选择原创 2022-10-26 08:00:00 · 6018 阅读 · 59 评论 -
网络编程套接字之一【网络协议+OSI+TCP/IP+封装和复用】
协议分层:分层的好处,类似于面向接口编程,定义好两层间的接口规范,让双方遵循这个规范来对接。而网络协议分层就有OSI和TCP/IP网络通信是(即网络数据传输)经过的所有网络设备都必须共同遵从 的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。原创 2022-10-18 08:00:00 · 1398 阅读 · 40 评论 -
网络编程套接字之二【UDP】
网络编程套接字,就是研究如何写代码完成网络编程套接字(socket):是操作系统给应用程序提供的API,来让应用层和传输层进行交互,实际上API也就是传输层给应用层提供的网络传输层中,有很多种协议,其中最常见的就是 TCP 和 UDP,这两种协议的特性差别是比较大的,所以操作系统就提供了两种不同风格的APITCP 和 UDP 的区别TCP UDP 解释有连接 无连接 打电话是有连接,这是通信双方建立好连接,才能通信(交互数据)A打电话给B,B接了,才能说话发短信/ 发微信 是无连接直接一发就过去原创 2022-10-21 08:00:00 · 1540 阅读 · 24 评论 -
网络编程套接字之三【TCP】
ServerSocket 是创建TCP服务端Socket的API。Socket 是客户端Socket,或服务端中接收到客户端建立连接(accept方法)的请求后,返回的服务端Socket。不管是客户端还是服务端Socket,都是双方建立连接以后,保存的对端信息,及用来与对方收发数据的原创 2022-10-23 08:00:00 · 2484 阅读 · 50 评论 -
HashTable, HashMap, ConcurrentHashMap 之间的区别
a)ConcurrentHashMap 的键值不可以为nullb)ConcurrentHashMap 使用的数据结构是 数组 + 链表 + 红黑树c)ConcurrentHashMap 最重要的点要说 线程安全ConcurrentHashMap 相比比较于HashTable 有很多的优化,最核心的思路就是:降低锁冲突的概率(1)锁粒度的控制(2)ConcurrentHashMap 只给写操作加锁,读操作没加锁(3)充分利用到了CAS的特性(4)ConcurrentHashMap 对于扩容原创 2022-10-08 08:30:00 · 947 阅读 · 30 评论 -
详解文件IO操作
Java标准库,在“流”的概念上,提供了一组类,完成读写文件的操作这组类,分为两种(这两种都是抽象类,不能实例化)a)字节流(以字节为基本单位),适用于二进制文件InputStream 读 OutputStream 写b)字符流(以字符为基本单位),适用于文本文件Reader 读 Writer 写上面的这些都是 父类,在标准库中,给这些父类还提供了各种子类的实现,以适应各种不同常见下的读写需求InputStream --> FIleInputStre原创 2022-10-06 08:00:00 · 1246 阅读 · 31 评论 -
多线程之五(JUC+线程安全的集合类+死锁)
(1)Callable 描述的任务是带返回值的(2)Reentrantlock核心用法,三个方法a)lock() 加锁b)unlock() 解锁c)tryLock(超时时间)加锁, 如果获取不到锁, 等待一定的时间之后就放弃加锁(3)信号量的基本操作时两个:a)P 操作,申请一个资源c)V 操作,释放一个资源信号量可用视为是一个更广义的锁锁就是一个特殊的信号量(可用资源只有1的信号量)(4)CountDownLatch同时等待 N 个任务执行结束使用CopyOnWriteArray原创 2022-10-19 08:00:00 · 993 阅读 · 58 评论 -
多线程之四(锁策略+CAS+synchronized)
CAS的ABA问题只要有一个记录,能够记录上 内存 中数据的变化,就可以解决ABA的问题了记录就是另外搞一个内存,保存M的“修改次数”(版本号)或者是“上次修改时间”通过这个方法,就可以解决ABA问题synchronized加锁的具体过程(1)偏向锁(2)轻量级锁(3)重量级锁synchroized更多的是考虑降低程序员使用负担,所以内部就实现了“自适应”的操作原创 2022-09-29 08:30:00 · 1708 阅读 · 49 评论 -
多线程之三(【多线程案例】单例模式+阻塞式队列+定时器+线程池)
线程池优点总结(*)(1)降低资源消耗:通过重复利用已创建的线程来执行任务,降低线程创建和消耗造成的消耗(2)提高响应速度:因为省去了创建线程这一步,所以当拿到任务时,可以立即开始执行(3)提高线程的可管理性:我们可以自己加入新的功能,比如说定时、延时来执行某些线程,也可以监控线程,控制最大并发线程数等功能原创 2022-09-24 08:30:00 · 1807 阅读 · 24 评论 -
顺序打印(有三个线程,线程名称分别为:a,b,c...)
1.顺序打印-普通版有三个线程,线程名称分别为:a,b,c。每个线程打印自己的名称。需要让他们同时启动,并按 c,b,a的顺序打印2.顺序打印-进阶版有三个线程,分别只能打印A,B和C要求按顺序打印ABC,打印10次输出示例:ABCABCABCABCABCABCABCABCABCABC原创 2022-09-22 08:00:00 · 1676 阅读 · 45 评论 -
多线程之二(【线程安全】synchronized+volatile+wait+notify)
1.线程安全1.1 出现线程不安全1.2 线程不安全的原因1.3 解决线程不安全(加锁)2.加锁使用synchronized关键字2.1 修饰方法2.2 修饰代码块2.3 synchronized的特性2.4 锁竞争3. volatile关键字(保证内存可见性)3.1 volatile能保证内存可见性3.2 volatile不保证原子性3.3 JMM(java内存模型)4.wait和notify(协调多个线程的执行顺序)4.1 wait和notify方法原创 2022-09-20 09:11:29 · 815 阅读 · 55 评论 -
多线程之一(进程理解、线程理解与创建、Thread类、线程状态)
线程状态NEW: 安排了工作, 还未开始行动(Thread对象创建出来了,但是内核的PCB还没创建,(还没真正创建线程))RUNNABLE: 可工作的. 又可以分成正在工作中和即将开始工作(就绪状态(正在CPU上运行+在就绪队列中排队))BLOCKED: 这几个都表示排队等着其他事情(等待锁的时候进入阻塞状态)WAITING: 这几个都表示排队等着其他事情(特殊的阻塞状态,调用wait)TIMED_WAITING: 这几个都表示排队等着其他事情(按照一定的时间,进行阻塞sleep)原创 2022-08-21 11:56:21 · 1265 阅读 · 87 评论