SpringBoot
未读SpringBoot常见配置
1. 常见注解
@RestController
@RequestMapping
@Value
@ConfigurationProperties : 将配置文件中的属性值映射到Java对象中
@GetMapping
@Autowired
@Resource
[!Tip]
@Autowired和@Resource区别。
2. 常见配置
2.1 MySQL数据库配置1234567#数据源连接信息spring: datasource: username: 用户名 password: 密码 url: jdbc:mysql://127.0.0.1:3306/数据库?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC driver-class-name: com.mysql.jdbc.Driver
[!Tip]
MySQL8更换了换数据库驱动类名:com.mysql.cj.jdbc.Driver
2.2 Druid数据库连接池配置123 ...
Redis简单介绍
Redis是一种键值型的NoSql数据库,这里有两个关键字:
键值型
NoSql
其中键值型,是指Redis中存储的数据都是以key-value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json。
而NoSql则是相对于传统关系型数据库而言,有很大差异的一种数据库。
对于存储的数据,没有类似Mysql那么严格的约束,比如唯一性,是否可以为null等等,所以我们把这种松散结构的数据库,称之为NoSQL数据库。
1. 初识Redis
1.1 认识NoSQLRedis诞生于2009年全称是Remote Dictionary Server 远程词典服务器,是一个基于内存的键值型NoSQL数据库。
NoSql可以翻译做Not Only Sql(不仅仅是SQL),或者是No Sql(非Sql的)数据库。是相对于传统关系型数据库而言,有很大差异的一种特殊的数据库,因此也称之为非关系型数据库。
特征:
键值(key-value)型,value支持多种不同数据结构,功能丰富
单线程,每个命令具备原子性
低延迟,速度快(基于内存.IO多路复用.良好的编 ...
一、状态码大类
状态码分类
说明
1xx
响应中——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它
2xx
成功——表示请求已经被成功接收,处理已完成
3xx
重定向——重定向到其它地方:它让客户端再发起一个请求以完成整个处理。
4xx
客户端错误——处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等
5xx
服务器端错误——处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等
二、常见的响应状态码
状态码
英文描述
解释
==200==
OK
客户端请求成功,即处理成功,这是我们最想看到的状态码
302
Found
指示所请求的资源已移动到由Location响应头给定的 URL,浏览器会自动重新访问到这个页面
304
Not Modified
告诉客户端,你请求的资源至上次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向
400
Bad Request
客户端请求有语法错误,不能被服务器所理 ...
Other
未读Windows下强制格式化优盘在Windows中,你可以使用命令提示符(CMD)来强制格式化U盘。以下是具体步骤:
打开命令提示符:
按 Win + R,输入 cmd,然后按 Enter。
输入 diskpart 命令:
在命令提示符窗口中输入 diskpart,然后按 Enter。这将打开 diskpart 工具。
列出所有磁盘:
输入 list disk,然后按 Enter。这将列出所有连接到计算机的磁盘。
选择U盘:
找到你的U盘对应的磁盘号(比如 Disk 1)。
输入 select disk X(这里的 X 是你的U盘的磁盘号),然后按 Enter。
清除U盘:
输入 clean,然后按 Enter。这将清除U盘上的所有数据。
创建新的分区:
输入 create partition primary,然后按 Enter。这将创建一个新的主分区。
选择新分区:
输入 select partition 1,然后按 Enter。这将选择新创建的分区。
格式化U盘:
输入 format fs=ntfs quick,然后按 Enter。这将快 ...
第一部分 Servlet1. 关于系统架构
系统架构包括什么形式?
C/S架构
B/S架构
C/S架构?
Client / Server(客户端 / 服务器)
C/S架构的软件或者说系统有哪些呢?
QQ(通过安装特定的软件客户端才能使用的软件)
C/S架构的特点:需要安装特定的客户端软件。
C/S架构的系统优点和缺点分别是什么?
优点:
速度快(软件中的数据大部分都是集成到客户端软件当中的,很少量的数据从服务器端传送过来,所以C/S结构的系统速度快)
体验好(速度又快,界面又酷炫,当然体验好了。)
界面酷炫(专门的语言去实现界面的,更加灵活。)
服务器压力小(因为大量的数据都是集成在客户端软件当中,所以服务器只需要传送很少的数据量,当然服务器压力小。)
安全(因为大量的数据是集成在客户端软件当中的,并且客户端有很多个,服务器虽然只有一个,就算服务器那边地震了,火灾了,服务器受损了,问题也不大,因为大量的数据在多个客户端上有缓存,有存储,所以从这个方面来说,C/S结构的系统比 ...
10. ServletConfig
10.1 ServletConfig 是什么?
包名:jakarta.servlet.ServletConfig
角色:Servlet 规范的一部分。
类型:一个接口。
注释:jakarta.servlet.Servlet 也是一个接口。
10.2 谁实现了这个接口?
实现者:由 Web 服务器实现。
示例:Tomcat 通过 org.apache.catalina.core.StandardWrapperFacade implements ServletConfig。
考虑:不同的 Web 服务器(例如 Jetty)可能有不同的类和包名,但它们都实现了 ServletConfig。
10.3 与 Servlet 的关系
关联:每个 Servlet 对象都有一个对应的 ServletConfig 对象。
一对一:一个 Servlet 对应一个 ServletConfig,100 个 Servlet 对象会有 100 个 ServletConfig 对象。
10.4 ServletConfig 对象的创建
创建者:由 Web 服务器(如 Tomc ...
13. 模板方法设计模式
模板设计方法(Template Design Pattern)是软件设计模式的一种,它定义了一个算法的骨架,并允许子类在不改变算法结构的情况下重新定义算法的某些步骤。该模式在面向对象编程中很常见,通过基类中的模板方法(Template Method)来控制算法的执行顺序,同时将一些步骤的具体实现延迟到子类中。
13.1 模板设计方法的组成部分:
抽象类(Abstract Class):
定义了一个模板方法(Template Method),该方法包含算法的骨架。
包含算法中的一些具体步骤,这些步骤可以是抽象的(必须由子类实现)或者是具体的(可以被子类覆盖)。
具体子类(Concrete Class):
实现抽象类中定义的抽象方法。
可以选择性地覆盖抽象类中已实现的方法。
13.2 模板设计方法的主要步骤:
在抽象类中定义模板方法,该方法包含算法的步骤。
在抽象类中定义算法中的关键步骤(抽象或具体)。
在具体子类中实现或覆盖这些关键步骤。
13.3 模板设计方法的优点:
代码复用:算法的通用部分在抽象类中实现,避免了重复代码。
灵活性:允许子类根 ...
17. HttpServletRequest接口详解
HttpServletRequest是一个接口,是Servlet规范中的一员。全限定名称:jakarta.servlet.http.HttpServletRequest
HttpServletRequest接口的父接口:ServletRequest
1public interface HttpServletRequest extends ServletRequest {}
17.1 HttpServletRequest接口的实现类谁写的? HttpServletRequest对象是谁给创建的?
通过测试:org.apache.catalina.connector.RequestFacade 实现了 HttpServletRequest接口
1public class RequestFacade implements HttpServletRequest {}
测试结果说明:Tomcat服务器(WEB服务器、WEB容器)实现了HttpServletRequest接口,还是说明 ...
死锁一、什么是死锁在多线程编程中,死锁是一种严重的问题,它发生在两个或多个线程互相等待对方持有的资源,导致所有线程都无法继续执行。这种情况会导致程序挂起,无法正常运行。
二、死锁的四个必要条件死锁通常发生在以下四个条件同时满足时:
互斥条件:至少有一个资源被一个线程独占,其他线程不能同时使用该资源。
请求与保持条件:一个线程已经持有至少一个资源,但又请求另一个资源,而该资源被其他线程持有。
不剥夺条件:线程所获得的资源在未使用完之前不能被剥夺,只能在使用完后自行释放。
循环等待条件:存在一个线程等待队列,例如:线程A等待线程B持有的资源,而线程B等待线程A持有的资源,从而形成一个等待环。
三、示例:产生死锁123456789101112131415161718192021222324252627282930313233343536373839404142434445package com.camellia.thread.deadlock;/** * 死锁演示 */public class DeadlockDemo { public static void main( ...
线程安全问题在多线程编程中,多个线程可以同时访问和修改共享数据,如果不进行适当的同步处理,会导致数据不一致和不可预测的行为。
一、什么时候考虑安全问题?1.1 需要考虑线程安全问题的情况
条件1:多线程的并发环境下。
条件2:有共享的数据。
条件3:共享数据涉及到修改的操作。
1.2 一般情况下的线程安全性分析
局部变量:一般情况下局部变量不存在线程安全问题。特别是基本数据类型的局部变量,因为它们在栈中存储,栈是线程私有的,不是共享的。如果是引用数据类型的局部变量,就另当别论了,因为它们可能指向堆中的共享对象。
实例变量:可能存在线程安全问题。实例变量存储在堆中,堆是多线程共享的。因此,如果多个线程同时访问和修改实例变量,可能会引起数据不一致。
静态变量:也可能存在线程安全问题。静态变量在堆中存储,多个线程可能会同时访问和修改静态变量,从而引发安全问题。
1.3 解决多线程并发操作中的安全问题为了解决多线程并发操作中的安全问题,可以使用线程同步机制,即让线程t1和线程t2排队执行,保证同一时间只有一个线程能够对共享数据进行修改。
线程同步机制:t1线程在执行的时候必须等待t ...