自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 Vagrant+VirtualBox快速搭建虚拟机

virtualbox安装https://www.virtualbox.org/wiki/Downloadsvagrant安装https://www.vagrantup.com/单机搭建1 初始化虚拟机# cmd打开终端vagrant init centos/7 #初始化环境vagrant up #启动服务器vagrant ssh #链接服务器修改虚拟机登录方式SSH为密码登录vagrant ssh-config #查看虚拟机ssh信息Host default Host

2021-07-27 10:08:09 364

原创 源码篇《深入理解HashMap》

HashMap的数据结构1、在JDK1.8开始,HashMap的数据结构为一个散列表(数组+链表+红黑树)2、在JDK1.8之前(已1.7 为例子)HashMap采用的是一个数组+链表的结构抛出问题:为什么要引用红黑树?答:当散列表元素达到一定值时,HashMap中的元素达到一定值时,对于链表的查询速率会急剧的下降(数组的特点:利于查找不利于更新 | 链表的特点:利于更新不利于查找),引用红黑树就是基于这样的一个考虑HashMap内部参数 static final int DEFAULT_IN.

2021-04-20 20:52:18 337

原创 SpringBoot整合Gateway跨域配置

@Configurationpublic class CorsConfig { @Bean public CorsWebFilter corsFilter() { CorsConfiguration config = new CorsConfiguration(); config.addAllowedMethod("*"); config.addAllowedOrigin("*"); config.addAllowedHead

2020-12-21 21:03:46 1469

原创 SpringBoot整合Canal数据同步

1、Linux安装Mysql链接地址:https://www.jianshu.com/p/276d59cbc5292、Mysql设置binLog配置(1)检查binlog功能是否有开启(2)如果显示状态为OFF表示该功能未开启,开启binlog功能mysql> show variables like 'log_bin';+---------------+-------+| Variable_name | Value |+---------------+-------+| log_b.

2020-12-21 00:20:15 3343 3

原创 SpringBoot整合微信登陆

SpringBoot整合微信登陆业务流程:1、引入依赖 <!--httpclient--> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency> <!--c

2020-12-19 21:13:22 2706 2

原创 JAVA工具类(自定义)

1、发送HttpClient请求工具类import org.apache.http.Consts;import org.apache.http.HttpEntity;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.

2020-12-19 20:54:36 624 1

原创 Springboot整合微信支付

Springboot整合微信支付注意: 调用微信第三方链接Api必须使用xml格式请求才能获取数据,最终再将xml格式转换成对象,这里给大家提供了HttpClient工具类,需要大家自行在本博客其他文章中获取!一、生成微信支付二维码1、申请开通微信支付获取以下内容:2、引入依赖 <dependency> <groupId>com.github.wxpay</groupId> <artifactId>wxpay-sdk&lt

2020-12-19 20:40:41 2604 2

原创 定时任务Schedule使用

1、启动类(Application)加上注解@EnableScheduling2、创建定时任务类cron表达式:设置执行规则设置规则:七子表达式 (https://cron.qqe2.com/)3、用例项目启动后:在设置时间自动运行@Componentpublic class ScheduleTask { //注意spring整合只能使用6位,最后一位(年)已设置默认值 //每隔五秒钟执行方法 @Scheduled(cron = "0/5 * * *

2020-12-19 20:06:15 310 1

原创 SpringBoot整合JWT

JWT什么是token按照一定规则生成的字符串,其中包含用户信息什么是Jwt(Json web token)token的一种规则JWT格式红色部分::第一部分::Base64URL算法jwt头信息{ "alg": "HS256", "typ": "JWT"}紫色部分::第二部分::Base64URL算法有效载荷(包含主体信息) { "iss": "Online JWT Builder", //签发者 "iat": 1416797

2020-12-13 22:37:58 69

原创 boot+阿里云短信服务+redis

阿里云开通短信服务引入依赖<dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency> <dependency> <groupId

2020-12-13 22:29:33 355

原创 Mybatis遇到的坑

找不到mybatis绑定的xml文件原因:因为自己配的时候是xml文件是放在src/main/java路径下的包中,编译的时候xml文件是不会被加载到的,所以可以自行将xml文件移动到resource中,或者使用一下方法解决:1、配置pom文件 <build> <resources> <resource> <directory>src/main/java</directo

2020-12-09 21:44:59 140

原创 SpringBoot整合EasyExcel使用

EasyExcel1、引入依赖//注意:使用其他版本可能出现POI与easyexcel版本不兼容问题!<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version></dependency><!--xlsx--><depend

2020-12-07 17:26:41 970

原创 JAVA整合对象存储OSS完成图片上传

a

2020-12-07 11:13:46 466

原创 Springboot常见坑

1、项目启动数据库依赖错误解析:boot项目启动时,会默认加载数据库配置,若本身项目无需使用数据库,可在启动注解上排除数据库自动加载的依赖@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)...

2020-12-07 10:27:45 171

原创 统一异常处理

全局异常处理@ControllerAdvice:用于捕获全局异常@ExceptionHandler:传入指定异常类@ControllerAdvicepublic class GlobalExceptionHandler { //指定什么异常执行该方法(Exception:所有异常) @ExceptionHandler(Exception.class) @ResponseBody public R error(Exception e) { e.print

2020-12-06 17:10:38 71

原创 TCP/IP协议之三次握手和四次挥手

TCP:面向连接的安全传输协议主要参数说明ACK:代表是否消息确认SYN:代表是否发送一个链接FIN:代表是否终止连接seq:32位序列号ack:32位确认序列号三次握手详细过程说明:客户端首先向客户端发送一个请求连接的报文,包含了一个32位序列号,并且将报文中的SYN置1,服务器端接收到后,向客户端返回=确认连接的报文=,其中包含了一个随机生成的32位序列号,SYN置1,并且将ACK置1,返回一个32位的确认序列号(客户端发来的序列号加一),客户端收到后,再向服务器发送一个确认报文,其

2020-12-05 22:37:13 74

原创 MyBatisPlus笔记

Mybatis-Plus1.依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency>

2020-12-05 15:59:33 83

原创 统一封装返回结果

package com.atguigu.commonutils;import io.swagger.annotations.ApiModelProperty;import lombok.Data;import java.util.HashMap;import java.util.Map;/** * @Author: Cyrus * @CreateDate: 2020/12/5 *///统一返回结果@Datapublic class R { @ApiModelPropert

2020-12-05 15:53:50 276

原创 分布式项目中需要使用其他服务的配置

第一步Pom中引入服务依赖<dependency> <groupId>com.XXX</groupId> <artifactId>service_base</artifactId> <version>0.0.1-SNAPSHOT</version></dependency>第二步//在启动类配置扫描规则,加载配置类@ComponentScan(basePackages = {

2020-12-05 15:26:11 124

原创 Springboot整合Swagger

Swagger配置1.简介Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(http s://swagger.io/)。 它的主要作用是:使得前后端分离开发更加方便,有利于团队协作接口的文档在线自动生成,降低后端开发人员编写接口文档的负担功能测试 Spring已经将Swagger纳入自身的标准,建立了Spring-swagger项目,现在叫Springfox。通过在 项目中引入Springfox ,即可非常简单快捷的使用Swagger。

2020-12-05 15:18:18 126

原创 代码生成器代码

// 1、创建代码生成器 AutoGenerator mpg = new AutoGenerator(); // 2、全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); gc.setOutputDir("G:\\Cyrus\\guli_parent\\service\\service...

2020-12-05 14:54:27 936

原创 Springboot整合Rabbitmq高级特性

1、消息可靠投递2、消费端限流3、TTL4、死信队列5、延迟队列6、消息追踪7、消息可靠性保障之消息补偿7.2消息幂等性保障之乐观锁机制

2020-12-03 12:21:04 410

原创 SpringBoot整合RabbitMQ

角色:生产者(Producer)消费者(Consumer)1、创建两个子工程(module)2、同时导入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>3、同时配置配置文件内容spring: rab

2020-12-01 21:39:55 73

原创 Mysql之锁

小表驱动大表in:使用场景employee数据量大于departmentselect * from employee where id in (select id from department)类似于:for select id from department d { for select * from employee e where e.id=d.id } 采用的是小表(department)驱动大表(employee)exists:使用场景employee数据量小于d

2020-11-30 17:55:30 115

原创 基于Netty手写RPC框架

RPCRemote Procedure Call:远程过程调用,通讯协议,允许一台计算机调用另一台计算机的程序Client:服务消费者Server:服务提供者调用流程:1、Client以本地调用方法调用服务2、ClientStub将请求方法名、参数封装起来3、ClientStub通过编码后发送4、ServerStub接收到后通过编码发送给Server调用API5、Server返回请求结果给ServerStub进行编码发送6、ClientStub接收到请求结果进行编码后发送给Client

2020-11-30 11:00:50 150

原创 JAVA设计模式之代理模式

代理模式1、通过代理对象访问目标对象,可在目标对象实现的基础上,增加额外的功能操作2、被代理的对象是远程对象、创建开销大或需要安全控制的对象3、三种不同形式静态代理动态代理(JDK代理、接口代理)Cglib代理(内存动态创建对象,无需实现接口)静态代理接口public interface ITeacherDao { public void study();}目标对象(被代理对象)public class TeacherDao implements ITeacherDa

2020-11-29 21:06:07 63

原创 Springsecurity笔记

SpringSecurity1.依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency>2.调试1.默认自动开启拦截@RestControllerpublic class TestController {

2020-11-29 09:12:10 101

原创 JAVA设计模式之桥接模式

桥接模式传统设计问题:每次添加新的类型,都需要重新添加子类1、扩展性问题(类爆炸)2、违反了单一职责原则桥接模式:1、将实现与抽象放在两个不同的类层次独立起来2、结构型设计模式3、基于类的最小设计原则,通过封装聚合和继承等行为让不同类承担不同职责例子Brandpublic interface Brand { void open(); void close(); void call();}HuaWeipublic class HuaWei implem

2020-11-28 17:39:11 107

原创 SpringMVC流程源码解析

SpringMvc流程图通过DEBUG查看源码:1、进入DispatcherServlet类中,找到doDispatch()方法发现调用了getHandler()方法,方法中传入了request请求查看getHandler()方法,返回了一个HandlerExecutionChain对象2、继续往doDispatch()方法下查看,调用了getHandlerAdapter(),方法中传入了一个Handler对象查看getHandlerAdapter()方法我们发现使用了getHand

2020-11-27 22:22:59 205

原创 JAVA设计模式之适配器模式

适配器模式1、将某个类的接口转换成客户端期望的另一个接口表示、主要目的为了兼容性,让原本无法匹配的类可以协同工作2、构建型模式类适配器模式通过一个Adapter类来继承src类(被适配对象),实现dst类(输出对象)接口,完成src->dst适配Voltage220Vpublic class Voltage220V { int output220V() { System.out.println("输出电压220V"); return 220;

2020-11-27 20:34:14 119

原创 Netty解决TCP粘包拆包问题

TCP粘包与拆包TCP是面向连接、面向流的、可靠的服务客户端与服务器端具有成对的socket,通过优化算法Nagle将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。提高了效率,但是接收端难于分辨完整数据包。因为面向流的通讯是无消息保护边界的解决方案1、使用自定义协议(封装成类)+编解码器2、解决服务器端每次读取数据长度的问题例子:自定义协议(封装的类)public class MessageProtocol { private int len; //消息长度

2020-11-27 11:27:26 137

原创 JAVA设计模式之建造者模式

建造者模式生成器模式,将复杂对象的构建过程抽象出来,不同抽象过程的不同方法可以构造不同属性对象核心角色Product(产品角色):一个具体产品Builder(抽象建造者):创建一个product对象的各个部件的接口/抽象类ConcreteBuilder(具体建造者):实现接口,构造部件Director(指挥者):构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。实例

2020-11-26 21:22:29 81

原创 JAVA设计模式之原型模式

原型模式1、用原型实例指定创建对象的类型、通过拷贝原型来创建新的对象2、创建型设计模式、允许一个对象在创建另一个可定制对象羊原型public class Sheep implements Cloneable{ private String name; private int age; private String address; public Sheep(String name, int age, String address) { this.na

2020-11-26 21:21:15 66

原创 JAVA设计模式之工厂模式

工厂模式存在问题:1、不利于扩展2、每次添加新产品需要重新设计orderPizza类简单工厂由一个工厂对象决定创建出哪一种产品类的实例定义一个创建对象的类(工厂)、由这个类来封装实例化对象的行为工厂类/** * 简单工厂类 */public class SimpleFactory { //根据orderType返回对应的Pizza对象 public Pizza createPizza(String orderType) { System.out.pr

2020-11-24 19:59:07 93

原创 Netty之Protobuf使用与实战

Protobufnetty自带的编码/解码器数据再网络中传输都是二进制字节码数据、发送数据需要编码、接收数据需要解码codec的组成部分由两个:decoder和encoder缺点:1、无法跨语言2、底层采用java序列化技术、序列化后体积大(二进制编码的五倍多)、性能低Protobuf介绍1、高效的结构化数据存储格式,可用于结构化数据串行化(序列化)、适合做数据存储或者==RPC【远程过程调用 remote procedure call】数据交换格式==2、支持跨平台、跨语言3

2020-11-24 16:24:57 1244 1

原创 Netty通过WebSocket编程实现服务器和客户端长连接

服务器端public class MyServer { public static void main(String[] args) throws Exception { NioEventLoopGroup bossGroup = new NioEventLoopGroup(1); NioEventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBoo.

2020-11-24 10:50:55 275

原创 JAVA设计模式之单例模式

概述对某个类只存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)饿汉式(静态变量)public class Singleton1 { public static void main(String[] args) { //测试 Singleton instance = Singleton.getInstance(); Singleton instance1 = Singleton.getInstance(); .

2020-11-23 18:09:31 38

原创 Netty群聊系统

要求:1、实现客户端与服务器端之间的数据通讯(非阻塞)2、多人群聊3、服务器端监测客户端用户上线、离线、并实现消息转发4、客户端可以通过channel无阻塞发送消息给其他用户,同时可以接收到其他用户发来的消息(由服务器进行转发)服务器端public class GroupChatServer { private int port; //监听端口 public GroupChatServer(int port) { this.port = port; }

2020-11-23 15:52:00 195

原创 JAVA设计模式七大原则

设计模式七大原则设计模式目的1、代码重用性2、可读性3、可读性4、扩展性5、可靠性6、高内聚低耦合七大原则1、单一职责原则一个类或方法中只做一件事情2、接口隔离原则一个类通过接口去依赖另一个类的所有实现方法(拆接口)public interface InterfaceIsolate { public static void main(String[] args) { C c = new C(); c.depend1(new A());

2020-11-22 20:41:21 69

原创 Redis学习笔记

Redis入门概述Redis能干嘛1、内存存储、持久化,内存中断电即失,持久化很重要!2、效率高、可用于高速缓存3、发布订阅系统4、地图信息分析5、计时器、计数器特性1、多种数据类型2、持久化3、集群4、事务Linux安装下载官网下载:https://redis.io/上传服务器中并解压程序建议放在/opt目录下:进入文件安装环境#依次执行命令yum install gcc-c++makemake install安装后默认存放路径为

2020-11-12 21:44:56 241

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除