- 博客(41)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 用java带你了解网络IO模型
使用java带你了解BIO,NIO,AIO,什么是多路复用,什么是select/poll/epoll,用最简单的图解让你去深入理解IO模型
2023-05-22 17:49:24
2098
27
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 基于java(springboot)和go-cqhttp实现QQ机器人
如何实现QQ机器人?如何将chatgpt接入QQ,本文将教你如何基于java和go-cqhttp实现的qq机器人,该项目可以实现chatgpt对话,但不限于chatgpt功能
2023-05-08 17:14:12
3429
14
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 深入解析spring boot配置加载原理,配置文件的加载顺序是怎么实现的?
1.spring boot的配置是如何加载的2.spring boot的bootstrap配置文件为什么不生效3.spring boot配置的加载顺序怎么实现
2022-08-29 17:23:29
5619
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Sharding JDBC分片和读写分离详解
Sharding Sphere简介5.0版本官网 https://shardingsphere.apache.org/document/5.0.0/cn/overview/#%E7%AE%80%E4%BB%8BApache ShardingSphere 产品定位为 Database Plus,旨在构建多模数据库上层的标准和生态。 它关注如何充分合理地利用数据库的计算和存储能力,而并非实现一个全新的数据库。ShardingSphere 站在数据库的上层视角,关注他们之间的协作多于数据库自身。连接、增
2021-12-03 17:51:29
1821
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 RocketMQ两万字详解
目录简介1.RocketMQ搭建(基于linux)1.1 安装NameServer1.2 安装Broker1.3 控制台安装2 .集成Spring Boot测试2.1添加依赖2.2 添加yml配置2.3 添加生产者消费者代码3.了解RocketMQ的组件3.1 Broker3.2 Topic3.2.1 Tags3.3 NameServer3.4 Producer3.5 Consumer3.5.1 pull3.5.2 push3.6 Message Queue4.RocketMQ原理4.1 生产者4.1.1
2021-10-28 11:37:39
1537
1
原创 spring boot使用elasticsearch分词,排序,分页,高亮简单示例
最简单的elasticsearch案例,分词,分页,排序,高亮
2023-05-30 12:00:39
1975
13
原创 优雅代码之路-观察者模式教你如何广播通知
目录代码地址简介代码示例代码地址https://gitee.com/nssnail/design-pattern/tree/master/%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F简介观察者模式(Observer Pattern ),又叫发布-订阅( Publish/Subscribe )模式、模型-视图( Model/View)模式、源-监听器(Source/Listener )模式或从属者( Dependents )模式。定义一种一对多的依赖关
2021-11-10 17:09:43
738
1
原创 优雅代码之路-策略模式的优雅应用,不用再担心if...esle灾难
目录代码地址简介代码示例代码示例-2Spring Boot示例总结代码地址https://gitee.com/nssnail/design-pattern/tree/master/%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F简介策略模式(Strategy Pattern )又叫也叫政策模式( Policy Pattern ),它是将定义的算法家族、分别封装起来,让它们之间可以互相替换,从而让算法的变化不会影响到使用算法的用户。属于行为型模式。策略模式使用的就是面向对
2021-11-04 11:20:25
371
原创 优雅代码之路-在工厂模式中如何优雅的生产不同实例
1.简单工厂模式简介简单工厂模式 ( Simple Factory Pattern )是指由一个工厂对象决定创建出哪一种产品类的实例,但它不属于GOF23种设计模式。简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心。比如在日常中,我们经常在麦当劳肯德基等地方看到饮料机,这些机器可以直接选择橙汁,可乐等饮料就可以直接生产出来,而不需要知道生产的过程别人也能用,这时候饮料机就好比如工厂,而饮料就是生产的产品类图如下代码示例Drin
2021-11-03 12:31:28
393
原创 优雅代码之路-状态模式中如何优雅的切换状态
目录简介使用场景1. 状态模式类图和简单实现2. 封装装换逻辑3. 电梯状态实战4. 状态机实战5. 总结5.1优点5.2 缺点5.3 使用场景5.4注意事项简介实例源码地址: 状态模式状态模式(State Pattern )也称为状态机模式(State Machine Pattern),是允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类,属于行为型模式。原文:Allow an object to alter its behavior when its internal sta
2021-11-01 14:45:33
1031
原创 看完就知道什么是线程池了
目录一、为什么要用线程池二、初识线程池线程池的核心属性图解工作流总结一、为什么要用线程池在我们日常的开发中,并发是不可避免的,如果所有任务都使用单线程去完成,那么所有任务都会阻塞等待上一个任务完成,这种方式会带来很严重的性能问题,是不可取的。但是在并发过程中,如果任务数量过多,大量的数据频繁的创建和销毁也是会严重影响性能,而且如果线程一直没执行为在等待,而其他线程也一样,频繁的创建又没这么快销毁,那么将很容易造成oom异常(内存溢出)所以我们为何要使用线程池1.反复创建线程导致开销大2.过多的线
2021-04-28 11:38:22
183
原创 一篇教你学会手写springIoc
目录1、创建maven项目2、搭建基本架构2.1 NSAutowired2.2 NSComponent2.3 NSComponentScan2.4 NSConfiguration2.5 NSController2.6 NSService2.7 ScanConfiguration2.8 UserService2.9 UserServiceImpl2.10 PayController2.11 OrderController2.12 UserController3、核心逻辑实现3. 1 定义bean容器3.2 大
2021-04-09 18:30:13
274
2
原创 idea maven添加依赖后出现程序包不存在,找不到符号
今天遇到一个神奇的bug,就是引进新的maven依赖后出现程序包不存在,找不到符号如下网上查找了很多方法1、 项目右键maven->Reimport2、 终端输入 mvn idea:idea3、 重启项目大法好像都不起作用,目前版本是idea2021然后我发现,关闭项目,将目录下的.idea删了,重启项目emmm,居然行了...
2021-03-17 14:45:55
3153
6
原创 spring boot+quartz 快速上手
目录概述功能实现1 、添加依赖2、添加核心配置类3、添加quartz实体4、添加定时任务5、配置job的属性和启动扩展(集群问题)概述定时任务是非常常见的业务,想必大家都知道,我也就不多说,就说如何操作,以前我看别人的文章也是老是翻源码还写得不清楚,现在我们来简单操作一遍功能实现1 、添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr
2021-03-12 16:56:12
253
原创 spring boot+vue导出excel封装
目录概述功能实现1、添加依赖2、创建自定义注解2.1 是否需要导出Excel注解2.2 导出字段的属性注解2.3 导出sheet的属性注解3、创建工具类3.1导出工具类3.2 设置样式工具类4、创建切面5、前端实现(基于vue)6、 测试6.1、单个sheet测试6.2 多个sheet测试概述Excel导入导出是一个比较常见的功能,在我开发的过程中,我发现使用poi进行导出的时候,每次都要经过每一行的数据处理,是比较麻烦的,所以我打算将其封装成一个组件使用,这样开发效率就会高了许多,减少不必要的时间成本
2021-03-09 18:05:47
349
原创 spring boot自定义缓存,使用fifo,lru,lfu算法实现
目录概述功能实现项目结构1.创建Cahce接口2.创建基础缓存类3.实现FIFO,LFU,LRU三种淘汰算法3.1、FIFO(先进入先淘汰)算法3.2 LRU(最近最少使用)算法3.3 LFU(历史访问率最低)算法4.定义缓存同步,日志4.1定义同步缓存4.2 定义日志缓存5.定义缓存注解,缓存切面等核心实现5.1 定义缓存注解5.2 定义缓存常量5.3 定义缓存异常类5.4 定义Vo缓存实体5.5 定义缓存工厂类5.6 定义缓存切面6.测试缓存6.1 定义测试实体6.2 定义测试业务6.3 定义测试接口6
2021-03-08 18:21:51
1072
原创 mysql语法归档
目录1.基础语法1.insert2.update3.delete4.select基本查询条件查询(where)排序(order by)1.基础语法创建user表,基本表结构如下1.insert基本语法结构insert into [table]([column...]) values([values....]);插入一条数据:insert into user(id,name,password,phone,email,creater,createTime) values(null,"张三","
2021-01-09 14:52:55
411
2
原创 spring boot使用aop实现一个简易版日志功能
今天我们来使用aop来实现简易版的日志记录,话不多说,直接来上手创建日志表log创建用户实体类,日志实体类创建日志类接口创建扫描注解创建切面测试接口1.创建日志表logCREATE TABLE `log` ( `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键Id', `Executor` varchar(64) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DE
2020-12-01 00:02:44
597
2
原创 vue的封装之路(二)-封装一个基于element ui的省市区级联选择器
其实很多人都做过省市区的选择器,这也是很常见的是吧,但是在我们使用过程中,总不可能在每个页面中都写一个这样的下拉选择吧,所以我们今天就将省市区级联选择器封装成一个组件,以后要用直接拿就行了1.拿到国内和国外的两个json文件json的gitee地址获取abroad.json和city.json2.在components下创建city目录,创建以下文件3.编辑city.js文件将json放进city.js文件里导出//国内var domestic = { "北京": {
2020-11-30 01:26:42
5199
原创 Mybatis拦截器与PageHelper一起使用无法拦截分页前的sql解决方案
在使用mybatis拦截器的时候,遇到一个很蛋疼的问题,就是无法拦截pagehelper分页插件执行之前的sql,每次拦截都是已经拼接完sql,而且无法拦截pagehelper中那个select count语句,然而今天我来给大家讲下我是如何解决这个问题的我在网上查过N篇文章,结果都是直接给出了pagehelper的官方文档,一开始看到别人写的时候还以为这个人这么6的,结果这是官方文档~,这里我也不多说了,先将官网放出来你们有空可以看看https://github.com/pagehelper/Myba
2020-11-28 22:30:09
5792
14
原创 vue的封装之路(一)-正则共用和校验方法设置
何为封装,就是将我们的代码公共的部分提取出来用一个方法区代替,这样就可以减少维护成本,并且方便了咋们的CV大法,提高CV效率本章节将讲我在vue中的一些封装过程,以vue+element为例我在做项目的我就发现了一个问题,正则校验是每个项目都不可避免的,比如金额校验,百分比校验,手机号、邮箱等等所以我就打算将这些全都仍在一个js文件里,以后直接调用就好了,也方便管理1.在view/api 目录下创建pattern.js文件//整数const IntegerRegex = /(^-?[1-9]\d
2020-11-18 22:10:58
2180
3
原创 spring boot logback日志按日期年月日写入
最近发现要求我弄个日志写入功能,我寻思着这就是一个简单的东西,百度上一般都能找到,结果让我很失望,不知道是不是我不会找,没有一个符合需求的需求调用Slf4j时写入日志文件文件目录按年月日(yyyy-MM-dd)录入1.添加配置文件logback-spring.xmltimestamp 获取当前日期,就是这玩意找了大半天<?xml version="1.0" encoding="UTF-8"?><!-- 日志级别从低到高分为TRACE < DEBUG <
2020-11-18 16:33:59
4689
4
原创 基于spring boot+element ui文件上传的实现与回显(二)-通过Base64实现
本章节将讲解如何用spring boot+element ui实现base64文件上传与回显,下章节将讲述如何用base64实现文件上传I/O上传点击此处思路:创建文件上传接口element自定义文件上传接口base64转换测试上传1.创建文件上传接口接口 @PostMapping("/saveOne") public SysResult saveOne(@RequestBody SysFile sysFile) { sysFile.set
2020-11-18 16:18:28
508
原创 基于spring boot+element ui文件上传的实现与回显(一)-通过I/O实现
基于spring boot+element ui文件上传的实现本章节将讲解如何用spring boot+element ui实现I/O文件上传与回显,下章节将讲述如何用base64实现文件上传思路:1. 创建文件上传接口2. I/O写入3. 调用element文件上传接口1.创建文件上传接口@RestController@RequestMapping("/file")public class FileController { @Autowired private Fil
2020-11-08 16:21:38
1144
1
原创 springboot mybatis拦截器实现数据权限控制
概述该章节讲述如何用自定义注解通过mybatis拦截器实现数据权限的功能在产品让我实现数据权限的时候,我第一个反应就是去每个sql上加个where条件?然后我又马上否定了,这样做不现实,如果每个sql都要去修改加上条件判断将会很冗余并且不利于维护和修改。所以后来我就想到了用mybatis拦截器去尝试实现,然后发现百度过去,都是一些看不懂的,那些将原理的也很多自己都是理不清搞得我自己也懵了,所以这次我不会写的很复杂,实现功能就好那么接下来我们就开始干吧温馨提示:本章节基于jdk11,如果var关
2020-11-02 13:22:52
5696
7
原创 谈谈什么是JVM
什么是JVM初步了解JVM什么是jvm?作为一名java程序员,jvm是我们经常听到的东西,特别是一些初级程序员,或许你问他什么是jvm,他就仅仅只是跟你说是java虚拟机,那么我们作为一名爱学习,有梦想的java程序当然不可能止步于此。那jvm到底是个什么东西呢,我们来看下官方文档给的图解看到这幅图,是不是突然WC,这什么鬼来的。其实根本不用想这么复杂,我们只看外层,明显知道JDK>JRE>JVM,也就是JDK包含JRE,JRE包含JVM,所以我们可以得出:JDK是用于支持Jav
2020-09-09 18:13:06
271
原创 腾讯云使用教程
腾讯云购买腾讯云购买流程,主要以学生服务器为例,学生认证后即可购买,我这已经购买完毕这时候我们已经购买完毕,密码应该会以短信的形式发给你,我们也可以在控制台修改登录密码然后我们可以通过公网IP登录我们的服务器,这时候可以用linux的操作工具,xshell或者其他的xftp工具都可以下面是用这个工具链接:https://pan.baidu.com/s/1E3k4-Q_tB9kWDhu4fDJmTw提取码:lu1f然后输入公网IP和用户名密码就能进去了进去之后就会有如下图两个东西,一个
2020-08-21 19:29:09
1128
原创 HashMap的深入浅出
什么是HashMapHashMap的组成?JDK1.8之后,HashMap由数组,链表(单向链表)和红黑树组成。HashMap存储的是什么?下面我们来看下HashMap中的源码文件中的Node对象static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> ne
2020-08-08 11:17:19
298
原创 synchronized的深入浅出
一、初识synchronized1.售票案例在了解synchronized之前,我们先来回顾一下上一个章节的案例public class TicketWindow implements Runnable{ private static final int MAX = 50; private int index=1; @Override public void run() { while(index<=MAX) { System.out.println(Thread
2020-08-06 20:19:42
286
原创 线程的start与run的关系,线程创建的两种方式
线程的start与run的关系在之前的一章我们讲过,我们new一个Thread对象那么线程也仅仅是new阶段,并没有真正意义上的创建线程,只有在调用start方法的时候,才是能说他是一个线程,那么为什么调用start的时候会启动线程并调用run方法呢,下面我们来看看他的源码。 public synchronized void start() { if (threadStatus != 0) throw new IllegalThreadStateExcept
2020-06-24 16:02:02
585
原创 线程生命周期与CPU调度简述
生命周期概述在每个线程中都有自己的局部变量表、程序计数器、以及生命周期等,本章节将描述什么是线程的生命周期。首先线程的生命周期可分为五个重要阶段:newrunnablerunningblockedterminated具体流程如图所示(该图来源于《Java高并发编程详解》)1.new状态当我们采用new关键字创建一个Thread对象时,该对象就是一个new状态,但是他并不是可执行状态,严格来讲这并不是线程,只是一个普通的对象,只有当他调用start方法的时候,才能称之为线程。2.r
2020-06-23 18:35:21
365
原创 线程概述与Java代码实现线程
概述什么是进程和线程其实很容易理解,进程是什么?就是平时我们经常用到的exe程序其实就是个进程,比如qq,迅雷等,那么一个进程中就会有很多个线程。比如我们迅雷下载,我们可以同时下载多个文件,那么每一个下载操作都可以称作线程,多个文件同时下载,这就叫做并发,所以所谓的高并发就是量级的线程同时操作,这就叫做高并发。其特性特点有一下几点线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个进程可以开启多个线程。多线程扩展了多进程的概念,使得同一个进程可以同时并发
2020-06-23 15:43:40
140
原创 什么值传递和引用传递
经常听别人说值传递和引用传递,其实很多人初学者都搞不懂这两个的区别,今天就来讲下什么是值传递和引用传递值传递和引用传递概述那怎么是值传递呢,顾名思义,就是我给你个值,然后你可以拿到这个值,这种值传递是基于基本类型的传递,如下所示int a=1;//定义变量a赋值为1int b;此时的内存结构应该是这样的经过赋值后b=a;内存结构就会变成这样那么什么是引用传递呢,其实引用传递都是针对对象而言,总所周知中的对象存的都是内存地址值,例如String s1=new String("aaa
2020-06-20 15:26:41
510
2
原创 短信失效验证判断
本章节主要描述短信15分钟内有效验证,过期则验证失败,以阿里云短信(java ssm)为例,如果不知道如果发送短信验证码的请看上一个章节。验证码发送添加VerificationCode类此类用于接收code验证码和手机号,因为业务需要,验证完验证码之后需要手机号进行业务操作,这里不做解释,根据自己需求而定package com.rxys.util;import java.util.Random;import java.util.TimerTask;import java.util.co
2020-06-20 12:42:50
1384
4
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人