- 博客(121)
- 资源 (5)
- 收藏
- 关注
原创 SpringBootTest启动时出现循环依赖问题
单元测试的时候引入我们开发的配置文件发现不生效,在特定的业务逻辑下需要该配置,但我们需要使用。在公司项目开发中由于。
2024-11-21 16:46:02
348
1
原创 Netty组件基础
netty是一个异步、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。1、channel可以理解为数据通道2、把msg理解为流动的数据,最开始输入的是ByteBuf,但经过pipeline的加工,会变成其他类型对象,最后输出又变成ByteBuf3、将handler理解为数据的加工工序3.1、工序有多道,合在一起就是pipeline,pipeline负责发布事件(读,读取完成)传播到每个handler,handler对自己感兴趣的事件进行处理(重写了相应事件处理方法)
2023-12-25 16:06:05
521
原创 Netty入门基础知识
当调用一次channel.read或者stream.read后,会切换至操作系统内核态来完成真正的数据读取。而读取有分为两个阶段:等待数据阶段、复制数据阶段。
2023-12-18 13:49:55
124
原创 ElasticSearch基础及常用查询
Es是一个使用java语言并且基于Lucene编写的搜索引擎框架,它提供了分布式的全文搜索功能,提供了一个统一基于RESTful风格的WEB接口。Lucene本身就是一个搜索引擎底层,ES本身就是对Lucene的封装。分布式主要是为了扩展ES的横向扩展能力。全文检索(倒排索引):将一段词语进行分词,并且将分出来的单个词语统一放到一个分词库中,在搜索时,根据关键字去分词库中检索,找到匹配的内容。
2023-12-18 11:11:29
585
原创 Spring Security Oauth2以及整合sso
}注意一定要实现接口,并重写其中的方法JSON Web Token(JWT)是一个开放的行业标准(RFC 7519),它定义了一种简洁的、自包含的协议格式,用于通信双方传递json对象,传递的信息经过数字签名可以被验证和信任,JWT可以使用HMAC算法或使用RSA的公钥/私钥对来签名,防止被篡改。
2023-03-11 16:00:55
930
原创 Spring Security基础入门
用户认证通过后,为了避免用户的每次操作都进行认证可将用户的信息保存到会话中,会话就是系统为了保持用户当前用户的登录状态所提供的机制,常见的有基于Session的方式、基于token等方式基于session的认证方式有servlet规范定制的,服务端要存储session信息都要占用内存资源,客户端需要支持Cookie;基于token的方式则一般不需要服务器存储token,并且不限制客户端的存储方式。
2023-03-10 11:21:02
769
原创 SpringAMQP
Advanced Message Queuing Protocol(简称AMQP),是应用于在应用程序或之间传递业务信息的开发标准。该协议与语言和平台无关,更符合微服务中的独立性要求Spring AMQP是基于AMQP协议定义的一套API规范,提供了模板来发送和接收消息。包含两部分,其中spring-rabbit是底层的默认实现。
2023-02-07 22:32:33
701
原创 Docker以及私有镜像仓库搭建
镜像就是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成DockerFile就是一个文本文件,其中包含一个个的指令,用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer指令说明示例FROM指定基础镜像ENV设置环境变量,可在后面指令使用COPY拷贝本地文件到镜像的指定目录RUN执行Linux的shell命令,一般是安装命令EXPOSE指定容器运行时监听的端口,是给镜像使用者看的ENTRYPOINT镜像中应用的启动命令,容器运行时调用。
2022-10-04 00:32:56
1860
原创 Gateway网关以及跨域问题解决
Zuul是基于Servlet实现的,属于堵塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具有更好的性能。请求路由后,会将当前路由过滤器和DefaultFilter、GlobalFilter合并到一个过滤器链(集合)中,排序后依次执行每个过滤器。每一个过滤器都必须实现指定一个int类型的Order值,order值越小,优先级越高,执行顺序越靠前。全局过滤器的作用是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。
2022-09-25 17:42:06
10334
原创 Feign远程调用以及Feign的最优使用
Feign是一个声明式的httpf服务端,Feign官方地址其作用就是帮助我们优雅的实现http请求的发送,解决RestTemplate远程调用存在的问题类型作用说明修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL响应结果的解析器http远程调用的结果做解析,例如请求解析json字符串转为java对象请求参数编码将请求参数编码,便于通过http请求发送支持的注解格式默认是SpringMVC的注解失败重试机制。
2022-09-24 23:32:02
939
原创 Eureka注册中心以及Ribbon负载均衡
1、服务消费者改如何获取服务提供者的地址消息?2、如果服务提供者有多个,消费者如何进行选择?3、 消费者如何得知服务提供者的健康状态?
2022-09-20 23:15:19
354
原创 微服务介绍以及远程调用
微服务是对传统单体服务进行业务拆分,拆分成多个独立的服务。微服务包括服务集群、服务网关、注册中心、配置中心、消息队列、分布式日志服务、系统监控和链路追踪、分布式缓存、分布式搜索、数据库、 Jenkins持续集成服务器以及Docker web自动打包容器,等经过良好架构设计的分布式架构方案。
2022-09-18 22:11:14
753
原创 八大排序算法(Java实现)
简介我们知道任何一个编程语言只是一个工具,学习编程最重要的是编程思维,为此我们学习八大经典排序算法对我们的编程思维有很大的帮助的,为了更好的理解经典的排序算法,使用图文并茂的方式来加深理解,本博文使用的是我个人最容易理解的动态来展示其原理。冒泡排序冒泡排序是八大经典排序算法最简单也是最容易理解的算法,它也是这八大排序算法的基础,在这些算法中大部分涉及到交换元素的操作这也是冒泡排序算法的核心所在。算法基本思想:比较相邻的元素,如果前一个元素比后一个元素大就交换位置,直观的描述为每次遍历都将最
2021-12-29 15:35:41
994
1
原创 操作系统专题:计算机体系结构/内存分层体系
计算机基本硬件结构内存分层内存管理过程在操作系统中需要做到以下几点:1.抽象:即不关心底层的细节也不关心外设的位置,我们只需要访问一个连续的地址空间即可(这个地址空间称为逻辑地址空间)2.保护:因为内存中可以存储不同进程的地址空间,为了防止不同进程相互破坏彼此的地址空间,所以需要将不同的进程的地址空间独立出来3.共享:进程之间可能需要交互,需要进程之间进行安全可靠的数据传递4.虚拟化:当内存空间不够的时候,将需要存储的数据到内存中,不需要存储的数据就存储在磁盘中,当需要该数据时就从磁盘
2021-11-28 21:27:24
458
原创 操作系统专题:基础
简介操作系统是计算机体系结构、程序设计语言、数据结构、算法的综合性学科,而在操作系统中的CPU资源、IO资源的合理分配以及线程调度等重要概念有重要的思想,而操作系统是可以理解成是接近底层硬件资源管理的庞大软件,这对我们开发其他软件获取软件开发架构思想有着很大的启发。操作系统的启动及基础概念计算机基本组成计算机基本组成由CPU、I/O、内存等组成操作系统:一开始并没有加载到内存中而是存储在Disk中,然后由BIOS(基本IO处理系统)提供支持,BIOS在计算机通电开机后会执行检查外设,检
2021-11-28 14:32:52
853
原创 数据结构专题:顺序表和链表
简介再编程中最主要的是算法思想,而且算法又是基于数据结构来实现的,而我们知道在物理内存存储结构中只有顺序表和链表两种形式,所在所有的数据结构中都是以顺序表和链表为基础进行演变或者映射,为了减少学习成本熟练掌握顺序表和链表是非常有必要的,这是我们学习树、图等复杂的数据结构奠定良好的基础。顺序表/** * 顺序表 * @Author:TangJiachang * */class MyArraysList<T> { /** 存储数据的数组 */ private Obj
2021-11-21 14:52:39
408
原创 远程连接mysql报10038错误
为安装CentOS的时候安装了MySQL,然后用Navicat进行远程连接然后报了10038的错误,经过几经折腾终于解决了,先记录下来以免以后再次遇到相同的问题1、服务器3306端口未打开然后在命令行输入firewall-cmd --query-port=3306/tcp若这里显示的是no,那么需要让防火墙开启3306端口:1.开启端口3306firewall-cmd --zone=public --add-port=3306/tcp --permanent2.重启防火墙firewal.
2021-08-20 17:05:24
602
原创 Java sun.net.ftp.FtpClient判断ftp服务器文件夹是否存在
由于sun.net.ftp.FtpClient本来是没有判断文件夹是否存在的函数的,当文件上传到ftp服务器指定的文件夹的时候就需要对该文件夹做一层判断,判断这个文件夹是否存在。当我点进FtpClient源码的时候,我看到了这个这里它是通过或者指定文件夹来返回一个文件对象的迭代器,所以就可以通过这个迭代器来判断指定的文件夹是否存在具体代码:public static boolean isDirExist(FtpClient ftpClient,String dir){ .
2021-08-18 11:46:36
2013
原创 Java定时任务
简单的定时器设置计划任务,也就是在指定的时间开始执行某个任务TimerTask 封装任务Timer类 定时器定时器public class Demo1 { @SuppressWarnings("all") public static void main(String[] args) throws InterruptedException { MyTask task = new MyTask(); Timer timer = new Timer
2021-06-28 15:36:59
187
原创 Java并发协作控制
sychronized 同步限定只有一个线程才能进入关键区简单粗暴,性能损失有点大LockLock 也可以实现同步的效果实现更复杂的临界区结构tryLock方法可以预判锁是否空闲,同时tryLock包含了Lock允许分离读写操作,多个读,一个写性能更好ReentrantLock类,可重入的互斥锁ReentrantReadWriteLock类,可重入的读写锁lock和unlock函数案例/** 可重入锁 */private static final Reentra
2021-06-28 14:14:53
163
1
原创 Java并发数据结构
常用的数据结构是线程不安全的ArrayList , HashMap , HashSet非同步的多个线程同时读写,可能会抛出异常或者数据错误传统Vector , Hashtable等同步集合性能过差并发数据结构:数据添加和删除阻塞式集合:当集合为空或者满时,等待非阻塞式集合:当集合为空或者满时,不等待,返回null或者异常ListVector 同步安全,写多读少ArrayList 不安全,不同步Collections.synchronizedList (List list) ..
2021-06-27 16:23:49
163
原创 Java并发框架
从JDK 5开始提供Executor Frame Work (java.util.concurrent.*)分离任务的创建和执行者的创建线程重复利用(new线程的代价很大)共享线程的概念预设好的多个Thread,可以弹性增加多次执行很多很小的任务任务的创建和执行过程解耦合程序员无需关心线程池执行任务的过程主要类: ExecutorService,ThreadPoolExecutor,FutureExecutors.newCachedThreadPool / newFixedTh..
2021-06-26 18:10:01
571
1
原创 Java多线程
多进程当前的操作系统都是多任务的操作系统每个独立执行的任务就是一个进程操作系统将时间划分为多个时间片(时间很短)每个时间片内将CPU分配给某个任务,时间片结束,CPU将自动回收,在分配给另外一个任务。从外部看,所有任务是同时在执行的,但是在单核CPU上,任务是按照串行依次运行的,如果是多核,多个进程任务可以并行运行多进程优缺点优点:可以同时运行多个任务程序因IO堵塞,可以释放CPU,让CPU为其他程序服务当系统有多个CPU时,可以为多个程序服务缺点:太笨重,不好管理
2021-06-25 16:16:55
132
1
原创 git的使用
简介简单说就是用于管理多人协同开发项目的技术。当没有进行版本控制或者版本本身缺乏正确的流程管理,在软件开发过程中将引入很多问题,如代码一致性,软件内容的冗余,软件过程的物质性,软件源代码的安全性,软件源代码的安全性,以及软件整合问题Git常用命令查看配置git config -l设置用户名和邮箱git config --global user.name "tang" git config --global user.email 1390351280@qq.com查看用户名和邮箱g
2021-06-25 12:54:56
110
1
原创 Java处理PDF文件
Apache PDFBox主要功能:创建、提取文本,分割 / 合并 / 删除 …主要类:PDDocument PDF文档对象PDFTextStripper PDF文本对象PDFMergerUtility 合并工具写入PDF文件public static void main(String[] args) { createPDFFile();}@SuppressWarnings("all")public static void crea
2021-06-16 23:14:53
3308
1
原创 Java处理Excel文件
Apache POI (处理Excel)主要的类有:XSSFWorkbook 整个文档对象 (XLSX格式的)XSSFSheet 单个sheet对象XSSFRow 一行对象XSSFCell 一个单元格对象HSSFWorkbook 整个文档对象 (XLS格式的)HSSFSheet 单个sheet对象HSSFRow 一行对象HSSFCell
2021-06-16 21:55:32
726
原创 解决Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0:exec (default-cli) on project Mav
File ->Settings -> Build, Execution, Deployment -> Build Tools -> Maven -> Runner将这个勾勾取消就行了
2021-06-16 18:49:35
227
原创 Java Word文档模板内容替换
Apache POI可处理docx,xlsx,pptx,visio等文件纯Java工具包,无需第三方依赖主要类XWPDFDocument 整个文档对象XWPFParagraph 段落XWPFRun 一个片段(字体样式相同的一段)XWPFPicture 图片XWPFTable 表格Maven导入POI<dependencies> <dependency>
2021-06-16 18:05:24
3461
2
原创 Java处理Word文档
Word文件处理常见功能docx解析,docx生成(完全生成,模板加部分生成)处理的第三方库Jacob,COM4J(Windos平台)POI、docx4j、OpenOffice / Libre Office SDK(免费)Apache POI可处理docx,xlsx,pptx,visio等文件纯Java工具包,无需第三方依赖主要类XWPDFDocument 整个文档对象XWPFParagraph 段落XWPFRun 一个片段(
2021-06-16 18:02:38
1850
原创 解决IDEA Maven控制台输出中文乱码
Settings --> Runner --> VM Options:- Dfile . encoding=UTF-8点击Edit Configurations…这样子就输出正常了
2021-06-16 00:29:47
172
原创 Java生成读取条形码及二维码
条形码将宽度不等的多个黑条和白条,按照一定的编码规则排序,用以表达一组信息的图像标识符通常代表一串数字 / 字母,每一位有特殊含义一般数据容量30个数字 / 字母二维码用某种特定几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息比一维条形码能存储更多信息,表示更多数据类型能够存储数字 / 字母 / 汉字 / 图片等信息可存储几百到几十KB字符ZxingZxing主要是Google出品的,用于识别一维码和二维码的第三方库主要类:BitMatr
2021-06-15 16:09:57
2110
1
原创 Java文件基本操作
File文件类java.io.File是文件和目录的重要类(JDK6及以前是唯一)目录也使用File类进行表示File类与操作系统无关,但会受到操作系统的权限限制常用方法createNewFile , delete , exists , getAbsolutePath , getName , getParent , getPathisDirectory , isFile , length , listFiles , mkdir , mkdirsFile不涉及到具体的文件内容、只会涉及属性
2021-06-14 23:59:59
963
原创 Java中的数据结构
数组数组是一个存放多个数据的容器数据是同一个类型的所有的数据是线性规则排列可通过位置索引来快速定位访问数据需明确容器长度// 数组初始化int[] a; // 没有new即没有申请内存空间int[] a = new int[2]; // 数组长度为2,且元素都为0int[] a = new int[]{ 1, 2, 3 }; // 逐个初始化int[] a = { 1, 2, 3 }; JCFJCF是一个容器框架,容器框架是为了表示和操作容器而规定的一种标准体系结构
2021-06-13 23:51:54
181
1
原创 Java的String、StringBuffer和StringBuilder
Java字符串相关类String类String类是一个不可变对象,加减操作性能较差常用方法方法作用charAt()返回指定索引的字符concat()返回两个字符串的拼接结果concat()判断该字符串是否包含指定字符串endsWith()判断该字符串是否以指定字符串结尾startsWith()判断该字符串是否以指定字符串开头replaceAll()replaceAll()与replace()都是替换全部指定字符串,不同的是repl
2021-06-12 17:42:33
86
原创 java double、float类型的比较
在java中,针对double、float类型的运算和比较都最好不要直接进行,可以依靠BigDecimal来进行一、比较大小转换成 long 再比较,(这是long是基本类型,而不是Long对象,对象比较不要用 ==)Double.doubleToLongBits(0.042421d) == Double.doubleToLongBits(0.2342401d) Double.doubleToLongBits(453.02d) > Double.doubleToLongBit.
2021-06-12 16:32:48
321
原创 Java流
Stream流Stream流是一个来自数据源的元素队列并具有聚合操作的Stream流包含了如下三个部分元素序列:一个流对外提供一个接口,可以访问到一串特定的数据。流本身是不存储元素的,但可以根据需要进行计算转化数据源:数据来源,如数据结构,数组,文件等聚合操作:流支持像SQL操作或者其他函数式语言的操作,如filter / map / reduce / find / match / sorted等public static void main(String[] args) {
2021-06-06 16:08:40
175
原创 Java的Lambda表达式
由于Java是面向对象的开发语言,所以很多功能函数都是通过传递基本类型的变量或者传递对象变量来进行数据交互的,从Java8开始支持Lambda表达式,可以在功能函数上传递方法或者代码块。Lambda表达式如果有返回值,返回值类型会在上下文推断出来,不需声明只在几个分支有返回值是语法错误// 参数,箭头,一个表达式(String first, String second) -> first.length()-second.length() // 参数,箭头,{多个语句}.
2021-06-05 22:33:04
332
1
原创 Java注解
Java修饰注解的注解(元注解)@Target 设置目标范围@Retention 设置保持性@Documented 文档@Inherited 注解继承@Repeatable 此注解可以重复修饰Java自带注解@SuppressWarning 压制警告,修饰变量 / 方法 / 构造函数 / 类等@SuppressWarning(“unchecked”) 忽略unchecked警告
2021-06-04 17:50:09
137
java常用数据类型转化JSON插件
2020-10-14
Linux常用命令与SHH服务.docx
2020-05-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人