SQL基础知识

1. 数据类型 整数类型 TINYINT:非常小的整数,通常占用 1 个字节。在 MySQL 中,有符号的范围是 -128 到 127,无符号的范围是 0 到 255。常用于存储状态码等数据量较小的整数。 1 2 3 4 -- 在 MySQL 中创建一个包含 TINYINT 类型列的表 CREATE TABLE example_table ( status TINYINT ); SMALLINT:小整数,一般占用 2 个字节。有符号范围是 -32768 到 32767,无符号范围是 0 到 65535。 INT(INTEGER):常用的整数类型,占用 4 个字节。有符号范围是 -2147483648 到 2147483647,无符号范围是 0 到 4294967295。适用于存储用户 ID、数量等。 BIGINT:大整数,占用 8 个字节,可存储非常大的整数。 浮点类型 FLOAT:单精度浮点数,占用 4 个字节,可提供大约 7 位的小数精度。 1 2 3 4 -- 在 MySQL 中创建包含 FLOAT 类型列的表 CREATE TABLE product ( price FLOAT ); DOUBLE:双精度浮点数,占用 8 个字节,提供大约 15 位的小数精度。精度比 FLOAT 更高。 日期和时间类型 ...

2025-03-08 · 2 min · 334 words

Springboot:Redis

摘要 Redis 主要支持以下几种数据类型: string(字符串): 基本的数据存储单元,可以存储字符串、整数或者浮点数。 hash(哈希):一个键值对集合,可以存储多个字段。 list(列表):一个简单的列表,可以存储一系列的字符串元素。 set(集合):一个无序集合,可以存储不重复的字符串元素。 zset(sorted set:有序集合): 类似于集合,但是每个元素都有一个分数(score)与之关联。 位图(Bitmaps):基于字符串类型,可以对每个位进行操作。 超日志(HyperLogLogs):用于基数统计,可以估算集合中的唯一元素数量。 地理空间(Geospatial):用于存储地理位置信息。 发布/订阅(Pub/Sub):一种消息通信模式,允许客户端订阅消息通道,并接收发布到该通道的消息。 流(Streams):用于消息队列和日志存储,支持消息的持久化和时间排序。 模块(Modules):Redis 支持动态加载模块,可以扩展 Redis 的功能。 String(字符串) string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据,比如jpg图片或者序列化的对象。string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。 key value name “zhangsan” ege “15” 常用命令: SET key value:设置键的值,重复设置会覆盖原来的值。 GET key:获取键的值。 INCR key:将键的值加 1。 DECR key:将键的值减 1。 APPEND key value:将值追加到键的值之后。 Hash(哈希) hash 类型是一个键值对集合,是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。比如存储用户的 id、姓名、年龄、性别等信息。文章的 id、标题、内容、作者等信息等。每个哈希最多可以存储 2^32 - 1 个键值对。 key field value user1 name “zhangsan” ege “15” 常用命令: ...

2025-03-06 · 9 min · 1913 words

Springboot:过滤器

1、权限过滤器 项目中创建PermissionFilter类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 package com.example.demo.config; import jakarta.servlet.*; import jakarta.servlet.annotation.WebFilter; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; // 权限过滤器 @WebFilter(urlPatterns = "/*") public class PermissionFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 将 ServletRequest 和 ServletResponse 转换为 HttpServletRequest 和 HttpServletResponse // 这样可以使用 HTTP 协议特有的方法 HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; // 模拟从请求中获取用户角色 // 这里假设用户角色已经在会话中,并用于后续的权限检查 String userRole = (String) httpRequest.getSession().getAttribute("userRole"); // 模拟需要 ADMIN 角色才能访问的路径 // 如果请求的路径以 "/admin/" 开头,检查用户角色是否为 ADMIN // 如果不是 ADMIN 角色,返回 403 错误,表示用户没有访问权限 if (httpRequest.getRequestURI().startsWith("/admin/")) { if (!"ADMIN".equals(userRole)) { httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "You don't have permission to access this resource."); return; } } // 如果用户有权限或者请求的资源不需要权限,继续执行链中的下一个过滤器或目标资源 chain.doFilter(request, response); } }

2025-03-05 · 1 min · 147 words

Springboot:拦截器

在请求被处理前,执行一些公共逻辑,例如检查用户是否认证、是否有权限访问受保护的资源、日志记录等; 可以在请求被处理前,对请求的数据进行预处理,还可以对返回的结果进行统一处理。 1、Cors跨域处理 在项目中创建config文件包,然后创建WebConfig类,代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package com.example.demo.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { /** * 添加跨域资源共享(CORS)映射配置 * 该方法用于配置允许从哪些域对资源进行跨域请求 * * @param registry CorsRegistry对象,用于注册CORS映射 */ @Override public void addCorsMappings(CorsRegistry registry) { // 配置跨域请求的映射路径,"/**"表示匹配所有路径 registry.addMapping("/**") // 配置允许跨域请求的源,此处为本地开发环境地址 .allowedOrigins("http://localhost:5173") // 允许在请求中携带凭证(如Cookies) .allowCredentials(true) // 配置允许的请求头,"*"表示允许所有请求头 .allowedHeaders("*") // 配置允许的HTTP方法,此处允许GET、POST和DELETE请求 .allowedMethods("GET", "POST", "DELETE"); } } 2、登录校验 1、创建拦截器 定义一个类并实现HandlerInterceptor接口。 ...

2025-03-05 · 3 min · 543 words

Springboot:项目配置

1、配置Maven 安装Maven 因为IDE自带的不太好用,加载比较慢,需要先将maven安装到本地,然后配置到IDE中。 下载地址: https://maven.apache.org/download.cgi 下载Binary zip archive到本地,解压到本地就可以用了 本地目录比如:D:\Development\Java\apache-maven-3.9.8 修改Maven仓库国内镜像 打开 maven 的配置文件( windows 机器一般在 maven 安装目录的 conf/settings.xml ) https://developer.aliyun.com/mvn/guide 在conf/settings.xml的标签中添加 mirror 子节点: 1 2 3 4 5 6 <mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror> 找到localRepository说明内容,下边增加一行 1 <localRepository>D:\Development\Java\maven-repository</localRepository> 修改系统环境变量 PATH中添加maven的bin目录 例如:D:\Development\Java\apache-maven-3.9.8\bin 可以在命令中查看版本:mvn -v 修改IDEA配置 打开IDEA,文件→设置→构建执行部署→构建工具→Maven Maven主路径:修改为Maven的安装路径,比如:D:\Development\Java\apache-maven-3.9.8 用户设置文件:修改为主路径下的setting文件,比如:D:\Development\Java\apache-maven-3.9.8\conf\settings.xml 本地仓库:系统默认会根据setting读取对应的localRepository地址,如果没有读取则需要手动修改 2、配置热部署 安装spring-boot-devtools依赖工具 1 2 3 4 5 6 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> 打开IDEA: ...

2025-03-05 · 1 min · 69 words

Springboot:HelloWorld

1、创建Springboot项目 使用IDEA创建Springboot项目: 生成器:选择Spring Initializr 名称自定义,位置选择合适的位置,语言选择Java,类型选择Maven,组、工作、包按需填写 JDK选择17以上,建议21(需要先安装),Java选择JDK对应的版本,打包选择Jar 点击下一步 选择Spring Web,点击Next,填写项目名称和路径,点击Next,选择Java版本,点击Next,选择依赖,点击Next,选择项目结构,点击Next,点击Finish。 选择依赖: Spring Web:用于构建Web应用程序(必选) Spring Boot DevTools:用于开发时的自动重启(可选) Lombok:用于简化Java代码(可选) Spring Boot Starter Test:用于测试Spring Boot应用程序(可选) 点击创建 2、启动项目 等Maven安装完全部依赖后,就可以启动项目了(建议先查看项目配置方法,将Maven仓库切换到阿里云镜像) 打开项目中src/main/java/com/example/demo目录下的DemoApplication.java文件,点击class左侧的绿色箭头,就可以启动项目了,也可以使用快捷键Shift+F10启动项目,或者点击IDEA上方的绿色箭头启动项目。 打开浏览器:http://localhost:8080/ 看到如下结果,说明项目创建成功。 1 2 3 4 5 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Thu Aug 08 12:08:16 CST 2024 There was an unexpected error (type=Not Found, status=404). 3、创建Controller 在项目目录下,创建controller目录,创建HelloController.java文件,代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 package com.example.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloWorldController { @GetMapping("/hello") public String hello() { return "Hello World!"; } } 打开浏览器:http://localhost:8080/hello 就可以看到:Hello World! ...

2025-03-05 · 1 min · 103 words

正则表达式教程

匹配符 符号 意思 ? 0个或1个 + 1个或多个 * 0个或多个 . 除换行符\n之外的任何单字符 ^ 开始符,在方括号内容使用是取反的意思 $ 结束符 () 子表达式,匹配整体:123 [] 子表达式,逐个匹配:1、2、3 \ 转义字符 {} 限定表达式 {n,m} 满足条件且长度为n~m的字符串,{n}匹配n次,{n,}匹配至少n次 [^abc] 取反,匹配除了a、b、c之外的其它内容 [a-z] 区间,匹配a~z的所有字母,还有[0-9]、[A-Z]等 . 匹配除了换行之外的所有字符,等同于[^\n\r] | 多个选择一个 [\s\S] 匹配所有但不包括换行,\s所有空白符,等价于[\f\n\r\t\v]。\S所有非空白符,等价于[^\f\n\r\t\v]。 \w 匹配字母、数字、下划线。等价于 [A-Za-z0-9_] \f 换页符,等价于\x0c和\cL \n 换行符,等价于\x0a和\cJ \r 回车符,等价于\x0d和\cM \t 制表符,等价于\x09和\cI \v 垂直制表符,等价于\x0b和\cK 修饰符 修饰符 含义 g global - 全局匹配 i ignore - 不区分大小写 m multi line - 多行匹配,尤其是有^和$边界符时 s 特殊字符圆点 . 中包含换行符 \n u Unicode,匹配Unicode字符 不同语言 语言 . [] ^ $ () {} ? + | () javascript √ √ √ √ √ √ √ √ √ php √ √ √ √ √ python √ √ √ √ √ √ √ √ √ √ java √ √ √ √ √ √ √ √ √ √ PHP处理emoji 1、emoji保存到数据库中:将emoji的Unicode以json格式存在数据库中 ...

2022-12-19 · 1 min · 212 words

项目管理三要素

项目管理的三要素分别是: 时间 成本 质量 项目启动时三要素维持的是一个等边三角形,随着项目的推进这个三角形的夹角肯定会变形,因为每一个要素的变化都会影响其他两个元素,导致夹角的变化。 做为项目经理的职责就是掌控这个三角形维持着一个合理的角度。在一个项目中,客户往往关心的是质量;而老板掌控着资源,也就是决定着成本;只有时间才是项目经理唯一可以完全掌控的要素。 三个要素互相制约,找准一个平衡点,才能让三者平衡。很多时候,由于外在和内在的压力,取舍是免不了的。要做好取舍分析,项目经理要懂得六件事: 要很清楚地了解项目冲突的基本原因; 重新确认项目的目的; 了解项目现处的环境及目前状况; 寻求可行的其它方法; 选择最佳的其他方法; 重新策划项目计划。

2022-10-28 · 1 min · 13 words

胜任力模型

职场优秀素质: Ownership(主人翁精神) Proactive(主动积极) Passion(工作热情) Optimism(乐观自信) Result-Driven(结果导向) Thoughtful(思维缜密) Sense of Urgency(紧迫感) Negotiator(谈判专家) Inspiring(煽动力) Taste(个人品位) Yes, I Can(我能) 顶级素质 Negotiator(谈判专家) Inspiring(煽动力) Taste(个人品位) 领先素质 Result-Driven(结果导向) Thoughtful(思维缜密) Sense of Urgency(紧迫感) Yes, I Can(我能) 底层素质 Ownership(主人翁精神) Proactive(主动积极) Passion(工作热情)

2022-07-13 · 1 min · 33 words

JavaScript常用校验方法

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 // 是否为空 vernull = function(value){ if(value.trim(value).length == 0){ return false; }else{ return true; } } // 身份证校验 veridc = function(value){ var ext = /(^\d{15}&)|(^\d{18})|(^\d{17}(\d|X|x)$)/; return ext.test(value); } // 英文校验 veren = function(value){ var ext = /(^[a-zA-Z]+$)/; return ext.test(value); } // 数字校验 vernum = function(value){ var ext = /^[0-9]*$/; return ext.test(value); } // 小数校验 verdou = function(value){ var ext = /^[0-9]+(.[0-9]{1,3})?$/; return ext.test(value); } // 邮箱校验 vermail = function(value){ var ext = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/; return ext.test(value); } // 手机号校验 vermob =function(value){ var ext = /^1[3456789][0-9]{9}$/; return ext.test(value); }

2021-11-15 · 1 min · 133 words