自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 行为型模式--模版方法模式(图文详解)

本文以场景(问题)引导切入,模版方法模式解决问题的方式讲解。让大家可以直观的理解模版方法模式。

2023-07-23 17:53:01 216

原创 创造型模式-原型模式(场景体验-》方案解决===代码图解)

设计模式本来就是一个有一些高级的概念,本篇(以及本专栏)文章会以更加直观亲近读者的方式,去讲解每一种设计模式。带领读者从面临的问题开始切入,使用要讲解的设计模式去解决问题。一次来让读者更加直观的了解设计模式的用处。

2023-07-23 14:02:27 570

原创 git rebase (合并代码和整理提交记录)图文详解

使用rebase 可以进行 合并代码以及整理提交记录。本文使用完整的图文讲解,对rebase进行了详细的说明,使用命令进行执行,执行之后的图片、结果都进行了说明。对操作过程中可能出现的问题也进行了说明解释。

2023-07-17 13:42:06 8028

原创 工厂模式提升之路(无痴迷,不成功)

上一篇中聊了工厂模式的进化过程,了解了从简单工厂到工厂方法再到抽象工厂的全过程以及进化原因。进化到抽象工厂确实解决耦合等问题,但是会导致我们扩展时需要修改多个工厂相关类。很不优雅,不符合我们懒人的气质。接下来我们来完善它,让他变得更加优雅;优雅,永不过时!

2023-07-03 13:39:29 154

原创 工厂模式进化之路(从简单工厂到工厂方法再到抽象工厂)

要弄懂一个设计模式我认为不是去看这个模式的定义,应该去了解它解决了什么问题。使用它可以给我带来什么好处。下面从场景开始切入,使用代码进行分析、解析。深入了解工厂模式的进化过程,真正明白,工厂的各个模式的意义。

2023-06-25 21:15:12 296

原创 设计模式-(通俗细致讲解)定义&&目的、分类、原则

通俗细致讲解,带你从根本上理解设计模式存在的意义,帮助为后面单个设计模式的学习打下基础。有图、有代码、有例子、有讲解!!!

2023-04-02 17:43:51 278 1

原创 都说https安全 那为什么https安全,他解决了什么问题?

讲述了,http传输的过程,遇到的问题,https如何解决的问题:数据加密,防止中间人获取数据,如何方式中间人篡改数据,数字签名,CA证书,对数据传输的全流程讲解。图文并用

2023-03-26 09:40:04 634

原创 Mybatis一对多查询 ,以及会遇到的各种问题解答

collection标签的两种使用,column主子表的对应方式

2023-02-23 20:34:39 869

原创 easypoi导出--深度解析为什么,数字类型列的单元格不能合并不能为空

在easypoi的"BaseExportService"这个类中的:"createDoubleCell"这个方法中它只会给数据不是null并且数据长度大于0的单元格赋值你规定的数据值,其余的会通过走”cell.setCellType(0);“这个语句将空值赋值上默认值:0.0D。easypoi导出时,给数字格式的列做纵向合并,前期发现:数字格式进行合并会报错,想要进行单元格合并的话单元格必须是字符串格式。经过对源码的分析最终找到:PoiMergeCellUtil 这个类里的mergeCells 这个方法,

2023-02-05 09:42:33 995

原创 Docker命令-常用命令讲解

Docker常用命令 一:帮助命令二:镜像命令1. docker images 查看所有本地的主机上的镜像2. docker search 镜像名3. docker pull 下载镜像4. docker rmi三:容器命令1.docker run 新建容器并启动2.从容器返回到主机:3.docker ps 列出容器4.删除容器5.启动和停止容器的操作其它常用命令(重要)后台启动容器查看日志查看容器中进程信息查看镜像的元数据进入当前正在运行的容器从容器内部拷文件到主机练习:部署tomcat一:帮助命令do

2023-01-11 12:37:12 493

原创 快速排序-归并排序 (模板可背)

快速排序和归并排序算法的可背模板,为算法比赛准备

2023-01-07 17:45:08 71

原创 JEECGboot数据规则篇

使用一、功能说明列表数据权限,主要通过数据权限控制行数据,让不同的人有不同的查看数据规则;比如: 销售人员只能看自己的数据;销售经理可以看所有下级销售人员的数据;财务只看金额大于5000的数据等等;二、规则字段配置说明(非常重要):①条件规则:大于/大于等于/小于/小于等于/等于/包含/模糊/不等于②规则值:指定值 ( 固定值/系统上下文变量 )日期默认值格式:2020-04-10时间默认值格式:2020-04-13 12:00:00③条件规则是包含: 规则值用逗号分隔1.当前用户上下文

2023-01-06 19:07:14 2417 1

原创 docker 安装

docker安装教程,以及可能会遇到的问题:Failed to start docker.service: Unit not found

2022-11-23 13:55:45 221

原创 docker能干什么以及基本名词解释

作用:应用更快速的交付和部署,更便捷的升级和扩缩容,更简单的系统运维,更高效的计算资源利用;名词:镜像(image),容器(container),仓库(repository)

2022-11-21 17:07:27 424

原创 easy poi实现不定列导出excel (map方式) 规定某些列是数字格式【附带ExcelExportEntity,ExcelBaseEntity属性说明】

由于业务需求,有时会需要进行行转列之后导出,而因为大多数的行转列后的数据列数是不固定的,所以此时传统的使用实体类加注解的方式就无法解决该问题了。在这个类中有type属性,这个属性就是设置列的类型的。这个属性由一个枚举类提供:BaseEntityTypeConstants。这个类可以提供对列的各种操作,一些基础的属性需要去看:ExcelBaseEntity这个基类。代码中使用的:ExcelExportEntity 是easyPoi提供的一个类。

2022-10-03 18:13:47 4558

原创 后端实现行转列 主附表方式(可以直接使用的工具类,附带测试方法,测试结果)

有些时候,因为业务问题,我们需要对附表数据进行行转列,比如:工厂中在对产品排生产计划时,会排每一天生产多少产品,而这个每天生产多少是滚动的,这个月有,下个月也有,下一年也有可能有,所以用主附表的方式表现就不是很直观,所以也就需要用到行转列表现到一个表里,再根据时间进行筛选,选择看那一段时间的。

2022-10-03 15:34:17 671

原创 使用idea,操作git创建分支,回滚版本,合并分支 ---全流程配图---

默认选择的是Mixed,选择的这个然后点击Reset并不会真的回退,只是临时回退,还可以再回去。如果你选择Hard,点Reset就真正的回退了,在你要回退的版本之后提交的代码就没有了。1:点击右下方的一个叫做master的东西,也有可能是其它的名字,那代表你当前所在的是哪一个分支,你创建项目后,默认会创建一个master分支(主分支)。然后出现如下:点击push,就会创建一个叫做test的远程分支与你本地的test分支关联。5:之后就要合并代码,因为一开始创建的分支是空的。...

2022-08-28 16:10:42 2641

原创 nginx反向代理配置

通过对nginx.conf进行编辑实现nginx反向代理功能,可以配置一台服务器,也可配置一组服务器。使用轮询,权重等策略

2022-07-07 08:59:13 12437

原创 springBoot 一表多sheet页导入导出excel ---工具类,实体类,测试类 代码(全)

一表一sheet页的导入导出,有很多工具类可以直接使用。而一表多sheet页的导入导出我没找到工具类,所以我就总结了一下,自己写了一个。首先自己建一个最简单的web项目。除最基础的外,需要添加如下。2.导入:工具:Excel注解:用于实体类字段的标记。如果@Excel使用的不对应,一个字段都翻译不出来。...

2022-07-06 11:16:53 1766 1

原创 今日问题-2022/7/4 lambda体中修改String引用类型变量

1:lambda表达式的作用域中,对于局部引用变量是不做限制的。也就是可以在lambda体中对局部引用变量的值进行修改。原因是引用变量的值是保存在堆中的,是线程共享的所以Lambda可以修改他的值的。String类型的变量是引用变量对吧,但是String类型的变量在lambda体中不允许修改。...

2022-07-05 15:45:31 356

原创 java8新特性之lambda表达式--超级详细版本

  lambda表达式又称闭包。它是推动java8发布的最重要新特性。lambda允许把函数作为方法的参数(函数作为参数传递进方法中)。使用lambda可以使代码更加简洁。例如:我们要创建一个线程输出一句话不用lambda:我们需要写一个类实现Runnable接口,然后实现他的run方法结果:使用lambda:结果:一对比我们就可以看出,lambda为我们节省了好多代码。但实现的功能却是相同的。  lambda表达式为java提供了缺失的函数式编程特点。使我们能将函数当作一等公民来看待。在一

2022-07-04 17:15:35 478

原创 反向代理,正向代理,网关

反向代理,正向代理,网关正向代理与反向代理,正向与反向是如何区分的?正向与反向的目标是客户端,是对于客户端来说是正向还是反向。正向代理:有明确目标的请求是从客户端发出的,客户端发起的请求知道明确的目的地,只不过自己访问不到,比如外网,此时就需要借助一个代理服务器帮助从而去访问要访问的目标。正向代理中,被代理的是客户端,服务器端不知道请求是谁发的。反向代理:有明确目标的请求是从服务器发出的。客户端并不知道自己的请求真实的会发送到那已台服务器,而服务器是知道谁发给他的请求的。反向代理中,被代理的是服务

2022-05-31 21:18:45 865

原创 jeecg中高级查询的写法

jeecg中高级查询的写法 前端:数据结构:后端:controller:mapper:xml:jeecg中高级查询的写法总结:前端:数据结构:queryParam:{ current: 1,//页数 size: 50,//每页条数 //queryType有:and,or //and(所有条件都要求匹配)or(条件中的任意一个匹配) queryType:'多items之间的规则', queryItems:[ { field: "要筛选的字段", //

2022-05-31 14:22:46 1504

原创 nginx配置

nginx配置 work_processes :events:事件驱动模块,http模块:将所有注释删掉,只看最小可运行配置:work_processes :代表要开启一个进程。一般对应虚拟机的物理分配的内核数。events:事件驱动模块,work_connections 1024:代表一个进程可以创建多少连接。http模块:include :可以把其它配置文件引入到改配置文件中,mime.types:里面指明了,什么后缀返回什么类型的数据。default_type appl

2022-05-29 11:16:18 71

原创 nginx目录结构和基本运行原理

nginx目录结构和基本运行原理 目录结构运行原理目录结构找到我们的安装目录使用Xftp可以查看目录结构,使用命令行也可以。重要的目录是:conf、html、logs、sbin目录里面以:”_temp“结尾的都是运行后生成的来临时文件。”conf“里面是配置文件,存放的是主配置文件,最终要的是nginx.conf,其它的配置文件都是被nginx.conf引用的。html:放的是默认情况下的静态资源和网页。index是默认页的名字。logs:存放访问日志,每个人访问都会在logs里面记录。

2022-05-28 17:00:50 378

原创 linux安装nginx详解

nginx关闭防火墙命令:systemctl stop firewalld.service禁止防火墙开机启动:systemctl disable firewalld.service放行端口:firewall -cmd --zone=public --add-port=80/tcp --permanent

2022-05-26 11:58:04 235

原创 kafka是如何处理请求的?

kafka是如何处理请求的?引言kafka的请求处理:Reactor 模式引言  kafka的客户端和Borker之间的交互都是通过“请求/相应”的方式完成的。就像:客户端通过网络发送消息给Broker,Borker发送相应给客户端。  kafka自己定义了一组请求协议,用于实现各种交互操作。比如:PRODUCE请求用于生产消息,FETCH请求用于消费消息,METADATA请求用请求kafka集群元数据信息。kafka的请求处理:Reactor 模式  Reactor模式是时间驱动架构的一种实现方

2022-05-12 21:37:44 462

原创 线程池的七大核心参数以及常用的四种线程池

线程池的核心参数以及常用线程池的种类引言7大核心参数int corePoolSize 核心线程最大数量int maximumPoolSize 线程总数量最大值long keepAliveTime 非核心线程的闲置超时时间TimeUnit unit (keepAliveTime的单位)BlockingQueue workQueue 阻塞队列ThreadFactory threadFactory 线程工厂RejectedExecutionHandler handler 拒绝策略常用的四种线程池newCached

2022-05-07 15:36:19 4515

原创 各种读取resources目录下文件的方法(图文解释)

各种读取resources目录下文件的方法引言读取展示文件的工具方法先获取路径再去获取文件准备:getFile() getPath()须知getResource("").getPath()获取resource路径getResource(fileName).getPath()直接获取完整路径getResource(fileName).getFile()获取完整路径System.getProperty("user.dir")(不能在web应用使用)getCanonicalPath();getAbsolutePa

2022-05-06 20:13:40 11292 2

原创 kafka副本机制详解

kafka副本机制详解什么是副本机制副本机制的好处副本中的角色与其他产品中副本的区别,为什么?In-sync Replicas (ISR/同步副本)Unclean领导者选举什么是副本机制  副本就是一些冗余的数据,副本是在分区的基础上定义的。副本是分区的副本,一个分区可以有多个副本。所谓副本,本质就是一个只能追加写消息的提交日志。同一个分区下的所有副本保存着相同的消息序列,这些副本可以分散的保存在不同的borker上,从而能够一定程度上对抗Broker宕机带来的数据不可用。  在实际生产环境中,每台

2022-05-04 21:15:49 707

原创 git checkout 命令图文详解

git checkout 命令图文详解git checkout branchname (切换本地分支)切换远程分支放弃修改git checkout .git checkout -- filenamegit checkout -f检出文件,分支转换。git checkout branchname (切换本地分支)切换到”branchname“分支,注意是本地分支。切换远程分支需要先将远程分支与本地分支关联。git checkout -b 本地分支名 origin/远程分支名该命令可以将远程仓

2022-05-04 17:42:50 39003

原创 git branch 分支命令图文详解

git branch 分支命令详解git branchgit branch -rgit branch -agit branch < branchName >git branch -m old new / git branch -M old newgit branch -d branchname / git branch -D branchnamegit branch -d -r branchnamegit branch查看本地已经存在的分支,并且在当前分支的前面加 ”*“号标记。git

2022-05-03 16:58:49 19839

原创 git reset 命令详解 git revert命令详解。

git reset 是代码回退到某一版本,git revert 是代码将某一次提交的代码改动回退掉(新建一个commit记录进行回退)。在git的这些命令中git reset是最长常用的,也是最危险的最容易被误用的。它的主要参数是:soft,mixed,hard它们告诉git,当执行reset是,要对index和working copy做什么。

2022-05-02 21:37:25 14729

原创 git status时有Untracked files(racked files(未跟踪)的文件,原因分析以及解决方案,git clean详解

git status时有Untracked files(racked files(未跟踪)的文件,git clean详解原因分析问题解决第一种情况:第二种情况:第三种情况:原因分析  我们要真正弄明白问题的原因,我们就要先知道文件的几个状态。git在未commit之前有三种状态:Untracked files 未跟踪Changes not staged for commit 未提交的更改Changes to be committed 提交的更改什么文件会是未跟踪的呢?那些新创建的

2022-05-02 10:59:32 17902

原创 java开发技巧

只要是用于网络传输的对象,我们都认为它可以当作是DTO对象,也就是Controller层的入参以及返回值都是DTO对象如果我们约束某个对象是DTO对象那我们就将其改名为:xxxDTO。DTO的转化,我们在接收到DTO之后基本都是需要将DTO对象内的某些属性赋值给entity的。我们知道的最常见的赋值方式:使用构造函数直接创建实例的时候赋值,还可以实例创建之后使用set函数一个一个的赋值。上面的两种赋值方式,很容易理解,但是这两种方式在需要赋值的属性数量比较多的时候,就会很繁琐。所以:我们可以..

2022-04-30 15:59:07 476

原创 git从修改到push 各种可能遇到的情况(add,rm,commit,push)

git使用基本流程1:在git管理的目录中添加一个文件:2:右击点击Git Bash Here3:将上面两个文件加入暂存区:4:查看自上次commit之后,是否有对文件再次进行修改。5:发现gitText1.txt我们加错了不想添加了6:提交到本地库:7:查看提交的内容:8:发现我们提交时写的信息不是明晰,我们想改一下:10:推送到远程仓库:1:在git管理的目录中添加一个文件:2:右击点击Git Bash Here3:将上面两个文件加入暂存区:4:查看自上次commit之后,是否有对文件再

2022-04-28 22:17:50 683

原创 kafka java消费者是如何管理TCP连接的

kafka java消费者是如何管理TCP连接的何时创建连接创建几个连接何时关闭连接何时创建连接  根据我以前的文章,我们知道kafka的java生产者在实例已经创建,就创建了TCP连接。生产者的入口类KafkaProducer在构建实例时,会在后台启动Sender线程,这个线程负责Sockert连接的创建。  那java的消费者是什么时候创建的连接呢?是实例创建时吗?并不是,消费者是在调用KafkaConsumer.poll方法时创建的连接。具体的创建时机有三个:发起FindCoordina

2022-04-24 12:06:44 3727

原创 kafka消费者(Consumer)端多线程消费的实现方案

kafka消费者(Consumer)端多线程消费的实现方案kafka Java consumer设计原理设计原理为什么用单线程设计多线程方案:方案一:方案二:两个方案的优缺点:kafka Java consumer设计原理设计原理  首先,kafka Java consumer是单线程的设计。准确来说是双线程,从kafka 0.10.1.0版本开始kafkaConsumer变成了用户主线程和心跳线程的双线程设计。  所谓用户主线程,就是你启动Consumer应用程序的main方法的那个线程。而心跳线

2022-04-23 16:25:15 9326

原创 CommitFailedException异常,原因以及解决方案

CommitFailedException异常 定义发生的场景场景1:解决方案:场景2:解决方案:定义  该异常是Consumer 端提交位移时发生的异常,而且是不可恢复的严重异常。发生的场景场景1:消息处理的总时间超过了预计的max.poll.interval.ms参数值时。解决方案:提高消息处理的速度,减少单条消息处理时间。增长Broker端的max.poll.interval.ms的值。减少下游系统一次性消费的消息总数。下游系统使用多线程来加速消费。(该方式最高级,但是最难实现。

2022-04-22 08:50:52 1041

原创 kafka位移提交详解

kafka位移提交 什么是位移提交,定义。位移提交的分类自动提交和手动提交:同步提交和异步提交什么是位移提交,定义。  Consumer需要向kafka汇报自己的位移数据,这个汇报过程称为位移提交。因为Consumer可以同时消费多个分区。所以位移提交是按照分区的粒度进行的。即Consumer需要为分配给他的每个分区提交各自的位移数据。  作用是:位移提交表示了Consumer的消费进度。这样当Consumer发生故障重启后,就可以读取之前提交的位移,然后从指定位移开始继续消费。类似于书签。  我们

2022-04-21 10:45:53 2749

空空如也

空空如也

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

TA关注的人

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