- 博客(54)
- 资源 (1)
- 收藏
- 关注

原创 FastDFS分布式文件系统详解
FastDFS 简介FastDFS 是基于 C 语言开发的,是一个轻量级开源的高性能分布式文件系统。主要功能有:文件存储、文件同步、文件访问(文件上传/下载),解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。FastDFS 特别适合中大型网站以文件为载体的在线服务,适合存储 4KB ~ 500MB 之间的小文件,如照片共享网站、视频共享网站(图片、文档、音频、视频等等)。Github地址FastDFS 架构Client客户端,实现文件上传下载的服务器,就是我们自己的项目所部.
2022-03-24 23:15:57
8144
原创 oracle 以timestamp为条件进行范围查询
SELECT * FROM TEST1 WHERE TO_CHAR(TIMESTAMP,‘yyyy-MM-dd’) > SUBSTR(‘2017-07-21 16:49:59’,0,10)
2022-10-30 12:38:32
3241
原创 面向对象的五大基本原则
其核心思想为:一个类,最好只做一件事,只有一个引起它的变化单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相互之间就产生影响,从而大大损伤其内聚性和耦合度。通常意义下的单一职责,就是指只有一种单一功能,不要为类实现过多的功能点,以保证实体只有一个引起它变化的原因。 专注,是一个人优良的品质;同样的,单一也是一个类的优良设计。交杂不清的职责将使得代码看起来特别别扭牵一发而动全身,有
2022-06-26 18:37:01
286
转载 Elasticsearch与MySQL数据同步
1、数据同步思路分析方案一:同步调用方案二:异步通知方案三:监听binlog小结方式一:同步调用方式二:异步通知方式三:监听binlog导入项目完成对酒店数据的【增删改查】实现数据同步操作hotel-admin项目作为酒店管理的微服务。当酒店数据发生增、删、改时,要求对elasticsearch中数据也要完成相同操作步骤:在hotel-admin、hotel-demo中引入rabbitmq的依赖:配置springboot核心配置文件yml在hotel-demo项目中定义一个类记录交换机和队列的
2022-06-08 17:21:18
5126
原创 数据库三大范式
概述一般地,在进行数据库设计时,应遵循三大原则,也就是我们通常说的三大范式,即第一范式要求确保表中每列的原子性,也就是不可拆分;第二范式要求确保表中每列与主键相关,而不能只与主键的某部分相关(主要针对联合主键),主键列与非主键列遵循完全函数依赖关系,也就是完全依赖;第三范式确保主键列之间没有传递函数依赖关系,也就是消除传递依赖。第一范式例子引入第一种表设计第二种表设计分析第一种表设计不满足第一范式,为什么不满足第一范式?因为region列不具有原子性,能拆分成省份、市和具体地址;第二范式
2022-05-28 01:15:30
291
原创 初步了解位运算
位运算的基础我们常用的 3, 5 等数字是十进制表示,而位运算的基础是二进制。即人类采用十进制,机器采用的是二进制,要深入了解位运算,就需要了解十进制和二进制的转换方法和对应关系二进制十进制转二进制时,采用“除 2 取余,逆序排列”法用 2 整除十进制数,得到商和余数;再用 2 整除商,得到新的商和余数;重复第 1 和第 2 步,直到商为 0;将先得到的余数作为二进制数的高位,后得到的余数作为二进制数的低位,依次排序例如十进制数 101 转换为二进制数的计算过程如下:101 % 2 =
2022-05-26 22:43:26
183
原创 java异步调用的几种方式
一、通过创建新线程public static void main(String[] args) throws Exception{ System.out.println("主线程 =====> 开始 =====> " + System.currentTimeMillis()); new Thread(() -> { System.out.println("异步线程 =====> 开始 =====> " + System.currentTim
2022-05-24 21:26:39
14533
原创 使用js正则表达式验证
正则表达式常用符号 1. /^$/ 是一个通用的格式; 2. ^ 匹配输入字符串的开始位置; 3. $ 匹配输入字符串的结束位置; 2. * 匹配前面的子表达式零次或多次; 3. + 匹配前面的子表达式一次或多次; 4. ? 匹配前面的子表达式零次或一次; 5. \d 匹配一个数字字符,等价于[0-9]; 6. ( ) 标记一个子表达式的开始和结束位置; 7. . 匹配除换行符 \n 之外的任何单字符; 8. \ 将下一个字符标记为或特殊字符、或原义
2022-05-22 13:55:19
2470
原创 mysql数据库有什么锁
MySQL数据库中的锁有:共享锁,表示对数据进行读操作排他锁,表示对数据进行写操作行锁,对一行记录加锁,只影响一条记录意向锁,为了在一个事务中揭示下一行将要被请求锁的类型1、共享锁(Shared Lock,也叫S锁)共享锁(S)表示对数据进行读操作。因此多个事务可以同时为一个对象加共享锁select * from ad_plan lock in share mode;2、排他锁(Exclusive Lock,也叫X锁)排他锁表示对数据进行写操作。如果一个事务对对象加了排他锁,其他事务
2022-05-22 13:26:14
1584
原创 java正则匹配查找是否包含大写字母
/** * . 表示任一字符 * * 等于{0,} 表示任意数量 * .* 表示任意数量的任意字符 * .*[A-Z]+.* 包含大写字母的字符串 * * @param str * @return */ public static boolean judgeContainsStr(String str) { String regex=".*[A-Z]+.*"; Matcher m=...
2022-05-13 18:05:38
571
原创 AutoGenerator代码生成器的使用
AutoGenerator是什么?AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Pojo、Mapper、Mapper XML、Service、Controller 等各个模块的代码如何使用?创建一个maven项目添加依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"
2022-05-01 00:42:51
1076
原创 SpringSecurity安全性框架详解
SpringSecurity简介Spring Security是一个高度自定义的安全框架。利用 Spring IoC/DI和AOP功能,为系统提供了声明式安全访问控制功能,减少了为系统安全而编写大量重复代码的工作。使用 Spring Secruity 的原因有很多,但大部分都是发现了 javaEE的 Servlet 规范或 EJB 规范中的安全功能缺乏典型企业应用场景。同时认识到他们在 WAR 或 EAR 级别无法移植。因此如果你更换服务器环境,还有大量工作去重新配置你的应用程序。使用 Spring Se
2022-04-30 16:32:28
4089
原创 基本的排序算法
选择排序在每一次循环中找到最小的值,将该值的索引赋值给minPos,都找完之后将该值和i所对应的值做交换public class demo1 { public static void main(String[] args) { int[] arr = {5,3,6,8,1,7,9,4,2}; for(int i=0;i<arr.length-1;i++){ int minPos = i; for(int j=
2022-04-23 03:48:49
250
原创 JUC底层原理
1.什么是JUC源码+官方文档:JUC是 java util concurrentjava.util 是Java的一个工具包~业务:普通的线程代码 ThreadRunnable: 没有返回值、效率相比于Callable 相对较低2、线程和进程进程:一个程序,QQ.EXE Music.EXE;数据+代码+pcb一个进程可以包含多个线程,而且至少包含一个线程!Java默认有2个线程:main线程、GC线程线程:开了一个进程Typora,写字,等待几分钟会进行自动保存(线程负责的)对于J
2022-04-18 23:09:16
1109
原创 mysql 执行存储过程
存储过程MySQL 5.0 版本开始支持存储过程。存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句优点存储过程可封装,并隐藏复杂的商业逻辑存储过程可以回传值,并可以接受参数存储过
2022-03-29 21:58:07
11118
原创 使用谷歌kaptcha框架生成验证码
引入依赖<!-- google kaptcha依赖 --><dependency> <groupId>com.github.axet</groupId> <artifactId>kaptcha</artifactId> <version>0.0.9</version></dependency>controllerpackage com.xxxx.server.controller;
2022-03-20 20:38:20
471
原创 RabbitMq使用改进 邮件服务 保证消息可靠性
消息落库,对消息状态进行打标实现流程发送消息时,将当前消息数据存入数据库,投递状态为消息投递中开启消息确认回调机制。确认成功,更新投递状态为消息投递成功开启定时任务,重新投递失败的消息。重试超过3次,更新投递状态为投递失败1. 定义消息状态常量新建MailConstants.javapackage com.xxxx.server.pojo;/** * 消息状态 * * @author zhoubin * @since 1.0.0 */public class MailCo
2022-03-19 02:58:02
578
原创 RabbitMq使用 邮件服务
1.设置邮箱服务以163邮箱为例:注册 163 邮箱,登录 163 邮箱后,设置邮箱账户开通 smtp 服务需要根据注册时的手机号发送的验证码来开通获取邮箱客户端授权码。开通成功后,会显示个人授权访问码,该授权码是后面通过 Java 发送邮件的认证密码,非常重要。2.创建邮件服务项目添加依赖<dependencies><!--rabbitmq 依赖--> <dependency> <groupId>org.springframe
2022-03-16 23:18:43
4313
1
原创 EasyPOI使用 导出导入Excel数据
导入依赖<!--easy poi依赖--><dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-starter</artifactId> <version>4.1.3</version></dependency>1.导出数据一.员工类员工类使用 Excel 定义了需要导出的属性,
2022-03-13 16:54:36
3350
原创 mybatis分页配置
配置类package com.xxxx.server.config;import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * Mybaits分页配置 */@Configur
2022-03-13 14:38:58
1948
原创 日期转换配置
package com.xxxx.server.converter;import org.springframework.core.convert.converter.Converter;import org.springframework.stereotype.Component;import java.time.LocalDate;import java.time.format.DateTimeFormatter;/** * 日期转换 * * @author zhoubin *
2022-03-12 19:48:51
85
原创 全局异常处理
package com.xxxx.server.exception;import com.xxxx.server.pojo.RespBean;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.RestControllerAdvice;import java.sql.SQLException;import java.sql.S
2022-03-10 21:54:11
350
原创 Netty服务器实时通信
1.添加依赖<dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.49.Final</version></dependency>2.主程序import io.netty.bootstrap.ServerBootstrap;import io.n
2022-02-13 14:16:04
733
原创 MybatisPuls使用
特性:无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD操作,更有强大的条件构造器,满足各类使用需求支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),
2021-12-19 23:41:34
547
原创 Redis分布式缓存
什么是缓存(Cache)1.定义:就是计算机内存中的一段数据2.特点:读写快,断电即失3.缓存解决的问题:提高网站吞吐量和运行效率减轻数据库访问压力注意使用缓存时一定是数据库中数据极少发生修改,更多用于查询这种情况 比如收货地址等4.本地缓存和分布式缓存区别:本地缓存:存在应用服务器内存中的数据称为本地缓存分布式缓存:存储在当前应用服务器内存之外的数据称为分布式缓存集群:将同一种服务的多个节点放在一起共同对系统提供服务的过程称之为集群分布式:有多个不同服务集群共同对系统提供服
2021-12-16 21:47:20
960
原创 JWT验证
什么是JWTJWT用于分布式系统的单点登录SSO场景,主要用来做用户身份鉴别或者资源接口安全性的技术身份鉴别资源接口安全性检验,保护服务器资源不被泄露1.认证流程首先,前端通过Web表单将自己的用户名和密码发送到后端的接口。这一过程一般是一个HTTP POST请求。建议的方式是通过SSL加密的传输(https协议),从而避免敏感信息被嗅探后端核对用户名和密码成功后,将用户的id等其他信息作为JWT Payload(负载)、将其与头部分别进行Base64编码拼接后签名,形成一个JWT。形成
2021-12-13 23:31:58
3899
原创 java设计模式
Java 中一般认为有 23 种设计模式,总体来说设计模式分为三大类:创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。代理模式静态代理模式//真实对象和代理对象都要实现同一个接口public class StartMarry { pub
2021-12-08 10:10:48
103
原创 mybatis 中的CDATA用法及说明
一、概述平时在mybatis的映射文件写sql时,很多时候都需要写一些特殊的字符。例如:"<" 字符 “>” 字符 “>=” 字符 “<=” 字符,但是在xml文件中并不能直接写上述列举的字符,否则就会报错。因为在解析xml文件时候,我们如果书写了特殊字符,在没有特殊处理的情况下。这些字符会被转义,但我们并不希望它被转义,所以我们要使用<![CDATA[ ]]>来解决。在CDATA内部的所有内容都会被解析器忽略。所以,当我们在xml文本中包含了很多的"<" 字符
2021-11-26 11:16:48
9837
1
原创 java注解 @Resource的作用
@Resource 的作用相当于 @Autowired,只不过 @Autowired 按 byType 自动注入,面 @Resource 默认按 byName 自动注入罢了。@Resource 有两个属性是比较重要的,分别是 name 和 type,Spring 将 @Resource 注释的 name 属性解析为 Bean 的名字,而 type 属性则解析为 Bean 的类型。所以如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type 属性时则使用 byType 自动注入策略。
2021-11-04 11:12:40
2647
原创 如何在windows下修改redis的密码
设置密码有两种方式。1. 命令行设置密码运行cmd切换到redis根目录,先启动服务端redis-server.exe另开一个cmd切换到redis根目录,启动客户端redis-cli.exe -h 127.0.0.1 -p 6379客户端使用config get requirepass命令查看密码config get requirepass1)“requirepass”2)"" //默认空客户端使用config set requirepass yourpassword
2021-11-04 10:52:21
2548
原创 Linux常用的基本命令
处理目录的常用命令ls: 列出目录cd:切换目录cd…:返回上一级目录pwd:显示目前的目录mkdir:创建一个新的目录rmdir:删除一个空的目录cp: 复制文件或目录rm: 移除文件或目录mv: 移动文件与目录,或修改文件与目录的名称ls (列出目录)在Linux系统当中, ls 命令可能是最常被运行的。选项与参数:-a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)-l :长数据串列出,包含文件的属性与权限等等数据,没有隐藏文件;(常用)所
2021-10-06 02:51:03
125
原创 spring框架基础
下载地址Spring中文文档需要的架包<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.0.RELEASE</version></dependency><dependency> <groupId&
2021-10-06 01:59:10
213
原创 springboot封装JDBC JdbcTemplate
对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理。Spring Boot 底层都是采用 Spring Data 的方式进行统一处理各种数据库,Spring Data 也是 Spring 中与 Spring Boot、Spring Cloud 等齐名的知名项目。Sping Data 官网:https://spring.io/projects/spring-data数据库相关的启动器 :可以
2021-10-06 01:56:33
451
原创 java集合基础
迭代器List<String> list = new ArrayList<>(); list.add("121212"); list.add("55555"); list.add("7777"); Iterator<String> it = list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } System.out.println(it.
2021-10-06 00:47:38
88
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人