自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TK-MYBATIS InserList排坑指南

问题1:使用inserList报错java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.SpecialProvider.<init>解题思路:1 jvm找不到对应的class文件,一种情况是maven包没有引用,此类在core包中,一种是jar包冲突2 @Mappscan注解使用错了,用的Spring的Mapperscan,替换为tkmybatis的Mappersan3mapper-spring-boot.

2021-12-31 17:09:42 664

原创 VO BO DAO DTO图解

第 1 个:DAO  DAO(Data Access Object)数据访问对象,它是一个面向对象的数据库接口,负责持久层的操作,为业务层提供接口,主要用来封装对数据库的访问,常见操作无外乎 CURD。我们也可以认为一个 DAO 对应一个 POJO 的对象,它位于业务逻辑与数据库资源中间,可以结合 PO 对数据库进行相关的操作。第 2 个:PO  PO(Persistent Object)持久层对象,它是由一组属性和属性的get和set方法组成,最简单的 PO 就是对应数据库中某个...

2021-12-21 16:36:48 709

原创 浅析匿名函数

Java底层代码中有大量的匿名函数 匿名对象 Lambda表达式;痛定思痛,花点时间了解下:匿名函数:顾名思义没有名字的函数匿名函数的使用场景:集合函数式接口使用 ==>衍生出函数式接口函数式接口:只有一个方法的接口。只要是函数式接口,都可以通过匿名函数来实现。例如java多线程的接口距离:Runnable接口 Function接口,里面都有一个抽象方法,同时用FunctionalInterface标签来标识回归到匿名函数匿名函数通常使用Lambda表达式 ==》了解什

2021-12-03 17:07:46 426

原创 设计模式-代理模式

代理模式比较常见的用于Spring中,比如Jdk动态代理,Cglib代理;还有啥所谓动态代理跟静态代理之分;是什么?为其他对象提供一种代理以控制对这个对象的访问。为什么?常见的一些使用场景:Windows 里面的快捷方式 翻墙使用的nginx网络代理,Spring中使用的切面Aop;甚至于明星的助理;如果要去找明星,先去找明星的助力接触,不直接对接明星;怎么做?静态代理简单的可以看出,静态代理的UML类图的特征是需要将功能类向上抽出一个功能性接口,再创建一

2021-11-12 17:48:57 244

原创 浏览器跨域处理

问题1The 'Access-Control-Allow-Origin' headercontains multiple values 'http://172.xxx.xxx.xxx:xxx, *', but only one is allowed.原因跨域配置重复了,nigix配置了跨域处理,后端代码也配置了跨域处理解决方案删除后端跨域处理逻辑问题2Request header field * is not allowed by Access-Control-Allow...

2021-07-19 17:36:05 144

原创 SpringBoot中ComponentScan扫描逻辑

功能浅析ComponentScan指定扫描路径,spring会把指定路径下带有指定注解的类自动装配到bean容器里。会被自动装配的注解包括@Controller、@Service、@Component、@Repository等等。解析开始:@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)@ComponentScan("com.xxx.*")@MapperScan(basePacka...

2021-07-19 13:53:02 897

原创 Retrofit+SpringBoot应用+源码分析

源码分析核心注解:RetrofitClient代码分析ClassPathRetrofitClientScanner:功能简述:扫描整个包中使用了@RetrofitClient的接口,并将这些class文件解析成BeanDefinition注册进入Spring的IOC容器中,实际注入的是对应的RetrofitFactoryBean后续慢慢解析将RetrofitClient注解加入过滤器链列表 public void registerFilters() { ...

2021-07-16 15:14:22 966 1

原创 请求头不存在或为空

问题点:{"error_message":"请求头不存在或为空![device_id]","error_no":"-20007"}原因分析:nginx代理默认会把header中参数的 "_" 下划线去掉,所以后台服务器后就获取不到带"_"线的参数名。解决方案underscores_in_headers on;参考文献:ngnix.conf 配置说明https://www.cnblogs.com/knowledgesea/p/5175711.htmlupstream功能说明ht

2021-07-16 10:47:04 263

原创 SpringBoot JackSon

作用:参数的序列化反序列配置+日期格式设置主要核心点是日期格式设置如果要保留日期格式为long类型;yml使用如下配置jackson:serialization:write-dates-as-timestamps: true如果想使用自动定义的日期类型,使用配置jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8源码分析:点击配置文件就可以走到对应的解析类中org.springfra

2021-07-09 17:10:51 224

原创 工厂模式

工厂模式:思维导图:使用场景:1、负责生产对象2、 生产一系列对象,对象之间有一定的关联参考资料:

2021-05-12 10:37:05 71

原创 Excel文件的上传下载

Excel文件的读取下载:Excel文件的读取POM依赖包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> &lt

2020-11-04 17:02:08 349

原创 Mybatis的二级缓存剖析

welcome to my blog

2020-08-06 13:18:46 169

原创 泛型的理解

泛型,一个很高端的食材,但是该怎么使用呢,或者什么时候用,很多人都很困惑,因为我们平时不咋用,但是一些源代码里经常可见,比如说集合。关于泛型的介绍资料网上比比皆是,最常见的一个案例就是List我们可以看到List是一个泛型接口 ArrayList又是一个泛型的类List可以定义不同的类型,但是我们看源码可以看到,就拿get方法举例,获取的对象实际是一个Object对象最后再强转成一个我们定的那个对象。那么就很好理解了,泛型类内部使用的基本是围绕Object对象展开的,因为类型不确定,最后对Obj

2020-07-23 11:20:40 95

原创 分布式ID解决方案

闲聊:单表中采用自增主键,会遇到一个问题,如果数据量过大,到时候需要进行分库分表,第一次分可以,没问题,那么拆分后的表使用什么作为id呢,如果还是沿用老的那套,自增,那么就有问题了,大家都有id 1,那么查询的时候我查哪个1呢,是不是就完蛋了,所以不能依赖于数据库的自增主键,分库分表很容易翘辫子,于是就需要第三方来提供id了,不让数据库搞了,这就是分布式id的产生原因。综合起来还是数据量大了,mysql扛不住了。为什么使用?https://www.cnblogs.com/itqiankun/p/113

2020-07-08 17:32:22 153

原创 ZK小技巧

查看注册在zk上的一些服务信息首先进入zkeg:zk安装在docker中docker exec -it zkid bashcd binzkCli.shls /dubbo 查看当前注册的api查询具体的部署的生产者消费者ls /dubbo/[选中任意一个api]/providers(consumers)比较懒,回头再整理参考资料https://www.wandouip.com/t5i281631/https://blog.csdn.net/qq_28817739/article/det

2020-06-02 15:44:22 227

原创 LUA简单实用

Lua是个轻量级语言,比较小众化,所以社区论坛跟java相比肯定不是一个重量级,因此很多问题比较难找到答案。实战实用场景:对redis进行操作,需要批量进行redis指令操作,如果不使用lua,redis指令中也没有什么逻辑语句,涉及到的逻辑语句只能写java代码搞定,这样就需要发版,有的时候没法发紧急版本或者时间不够,这时候就可以使用lua来完成java的逻辑操作,redis支持lua脚本语言另外一种,java程序开发过程中需要使用到一批的redis指令,频繁的调用redis指令需要建立连接,比较耗

2020-05-26 10:54:46 226

原创 SpringBoot配置线程池

线程池主要配置一个基本配置Bean,参数可有考虑配置成环境变量,可有动态的调整,目前是写死的,不是很推荐import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.uti

2020-05-18 13:56:33 428

原创 记录一次RequestBody使用问题

问题描述:前后端进行通信,定义了一个Class来进行接受参数,使用@RequestBody时候postman请求的参数能正常接受到,但是跟前端进行通信的时候,使用@RequestBody 参数获取不到,去掉参数能正常接受。首先了解@RequestBody @RequestParams的含义前后台通信,肯定要规定好通信的数据格式,只有定义了数据格式才能正确的进行解析前后台的传参有两种,一种是url后面跟的传参,这些使用RequestParams进行接受 也可以省略还有一种是放在请求体里的,body体

2020-05-15 09:27:08 291

原创 分页插件PageHelper

PageHelper使用https://blog.csdn.net/qq_35387940/article/details/91530234源码解析分页,首先是查询该页结果列表,同时还要查寻总共多少条,因为前端页面要去展示分页的导航栏等信息,换句话其实有两条SQL使用PageHelper本身肉眼看到的就是一个查询,而且这个查询没有limit分页的参数,总数的查询也看不到,其实这些都隐藏起来了PageHelper使用SQL增强的方法自动帮我们做了SQL的拼接,总数的查询。PageHelper.st

2020-05-14 14:50:53 284

原创 Canal重启问题

Canal同步出现异常服务重启后可能会遇到如下问题mysql binlog日志会设置定时清除机制,如果碰上了,有可能查找binlog日志会找不到,这时候你只能调整binlog日志的名称,采用新的binlog日志,老的数据丢了无法找回如何配置呢?查看binlog日志是否开启show variables like ‘log_bin’;查看当前binlog名称以及位置show master...

2020-03-12 18:27:30 3547

原创 项目框架日志设计

一般来说项目前后贯穿日志,请求参数 返回参数 异常参数,一般采用sping中的切面 来做处理处理方案比较简单:定义一个切面,前置 后置 异常里面配置对应的日志打印逻辑切点的配置有三种1 使用自定义注解 2使用已知注解如RequestMapping等 3不使用注解使用表达式execution@Pointcut("@annotation(org.springframework.web.bind...

2020-03-04 11:05:03 291

原创 Docker部署出现的一些问题以及解决方案

1 linux中docker部署日志出现中文乱码解决方案:https://blog.csdn.net/zyf_balance/article/details/53172581主要是修改dockerfile文件追加编码配置

2020-03-03 16:52:08 317

原创 Canal使用篇

Canal是一种新技术,对于新技术,大家都是懵逼的,最简单的是找准一个切入点,切进去,选择一个什么切入点呢?一般选择官网,去官网看简易的Demo(吐槽:官网的demo很简易,只能满足你的一些低级需求,高级的就得看一些高手的研究文章)Demo的作用是使用,先用起来,原理我们后面研究,先搭建起来:mkdir /tmp/canalwget https://github.com/alibaba/c...

2020-01-14 17:23:32 554

原创 Jvm性能调优

Jvm性能调优Remote RMI开启端口监控 -Dcom.sun.management.jmxremote.rmi.port=9093 -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9093 -Dcom.sun.management.jmxremote.ssl=false -Dc...

2019-12-30 16:27:16 123

原创 Java性能优化

吐槽Java程序压测报告反馈吞吐量过低的时候,这个时候,很多小伙伴摸不着从何处去进行优化,优化的点如下:索引索引是最常见的,也是很多通病,大部分情况下索引创建能提升很大一部分性能。常见的检测方法:explain select * from xxx;查看是否使用索引,以及索引是否生效,有的时候索引会失效,比如说复合索引某些字段为空,这种经常会遇到mysql连接数 show va...

2019-12-30 14:30:34 402 1

原创 性能压测

性能压测注意事项Jmeter压测注意点:Jmeter压测会产生一系列的问题,影响因素很多,比如带宽影响,宿主机的性能等都会影响压测结果,一般推荐千兆带宽,内网压测,宿主机配置过低可以采用集群压测,内外网压测差距极大...

2019-12-30 13:45:35 170

原创 Git使用简化说明

git常见指令操作add说明:add操作只是把文件上传到暂存区回滚:revertcommit说明:commit操作是把文件放到本地仓库git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到inde...

2019-11-22 13:42:07 87

原创 分布式架构

RPC框架 DubboRPC框架的作用:服务层的分布式架构单体架构接入层 服务层都裹在一起,硬拆成分布式的话可以用F5硬件拆分,路由负载均衡,nigix将接入层跟服务层拆开,分别做分布式,接入层用nigix负载均衡,服务层用dubbo来做负载均衡Dubbo跟nigix的负载均衡的区别Dubbo的负载均衡是处理在服务层面的,是对服务的负载均衡Nigix的负载均衡是处理在接入层面的,htt...

2019-09-06 15:56:35 86

原创 事务以及锁相关理解

锁的分类不使用锁会出现什么情况上锁的方式是通过设置事务来进行上锁的,上锁的操作由mysql进行执行,我们只需要配置事务的类型,实际是配置锁的生命周期,锁的位置,锁的作用范围参考文献https://blog.csdn.net/u014439239/article/details/78086729...

2019-06-03 22:59:18 180

原创 主从复制 读写分离

如何保证主从的一致性1 允许一定时间内的误差,比如用户修改订单提示一分钟后生效,人为的延迟时间,直到数据同步2 不采用读写分离,读写在同一个库里进行3 主从复制 读写分离 一般都是读多写少 变化不大,可以将变化的数据记录下来,然后读的时候去判断当前的数据是否发生了改变,如果改变了读主库,如果没有就去读从库,数据的状态设置失效时间,一般结合redis使用参考资料https://blog....

2019-06-02 13:42:13 93

原创 Netty

是什么?Netty:功能点:解决粘包拆包问题netty提供了多种半包解码器lineBasedFrameDecoder 解析到换行符,那就是一个完整的数据包lengthBasedFrameDecoder 解析一定长度为一个完整的数据包DelimiterBasedFrameDecoder 特殊字符作为包与包之间的分隔符stringDecoder 将二进制字符流转换成字符串编解码开发...

2019-05-29 15:31:02 111

原创 IO多路复用技术初见

IO多路复用技术?刚开始接触这个东西是在redis中,redis使用单线程处理,辅之以IO多路复用技术,查阅了很多的资料,都是一知半解.后来在研究一个名词NIO的时候发现,IO多路复用技术是从这里衍生出来的.NIO,英文名称是NEW INPUT OUTPUT,俗家名称新式IO,顾名思义还有传统IONIO有三个名词:缓冲区 通道 Selector,理解了这三个名词基本上就知道啥意思了先说...

2019-05-17 17:42:08 101

原创 Redis学习笔记

Redis1 常见的五种数据结构以及使用场景2 Redis为什么会很快?3 Redis 持久化持久化方案有两种 RDB 将当前进程中的数据生成快照保存到硬盘(因此也称作快照持久化) 手动触发 触发指令bgsave:创建一个子进程,由子进程来负责创建RDB文件 使用场景:主从复制 全量同步 自动触发 save m n 指定当m秒内发生n次变化时,会触发bgsa...

2019-05-16 20:10:23 132

原创 Redis为什么设计成单线程

Redis为什么设计成单线程在回答这几个问题之前先问几个问题1 多线程的本质是什么?多线程的本质其实还是单线程,因为在任一个时间点其实只有一个线程在抛,只不过CPU切换线程速度太快,让我们感觉是多个线程在一起跑,其实所有的指令还是一个接着一个的跑的。2 多线程一定比单线程快么?答案肯定是否定的了线程快,是因为其降低了不必要的耗时,耗时其实主要集中在两大块 磁盘IO 线程切换磁盘...

2019-05-16 14:34:14 1189

原创 kafka学习笔记

1.1 Kafka的特性:高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。物理传输kafka消息是以log文件的方式存放在磁盘中,磁盘空间大,因此可以存放的内容多.读很快低延迟是因为消息存储的数据结构是用队列的方式存储的,先进先出,用...

2019-05-14 17:40:52 113

原创 JVM学习笔记

java虚拟机的内存模型线程共享:方法区存储运行时常量池、静态变量、类信息、JIT编译后的代码等数据堆给创建的对象分配空间【最大的一块儿】线程私有:本地方法栈native修饰的方法Java Native Interface JNI 【实际理解为natiave 本地方法】虚拟机栈方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方...

2019-05-14 11:38:19 115

原创 数据结构

数据结构:什么是数据结构?个人觉得用抽象的数据类型来描述数据结构比较好抽象数据类型(ADT):一个数学模型 以及定义在该模型上的一组操作简化:数据+操作 (D,S,P) 元素 关系 操作基本数据结构(逻辑分类):集合线性结构树形结构图状结构或者网状结构物理分类(物理上的存储结构):顺序存储结构链式存储结构算法:对特定问题求解步骤的一种描述特性有穷性确定性可行性...

2019-05-10 16:24:42 112

原创 二叉查找树

定义:二叉树,节点上的数据加上顺序左节点数据<根节点数据<右节点数据时间复杂度 lgN缺点:无法维持最坏情况下的时间复杂度为lgN因为二叉树的平衡极其容易遭到破坏,插入元素的先后顺序 插入 删除操作都会破坏平衡,不可控因素太多,因此二叉查找树只能是个概念树,是个半成品.解决平衡问题,推出了23查找树...

2019-05-10 16:15:08 70

原创 23查找树

2-3树定义定义:是一个多分叉树数据项最多是2子节点最多是3子节点肯定比数据项多1有序树操作:查询:类似二叉查找树 二分法查找插入:满节点处理:先插入 中间元素冒泡上浮到父节点左右节点分裂成2个节点保证了树的平衡总结:因为二叉查找树的平衡非常容易给破坏,比如插入元素的顺序 删除 新增都会破坏二叉树的平衡,因此引入23查找树平衡如果破坏了,那么最坏的情况时间复杂度会变成N,...

2019-05-10 16:11:57 711

原创 B+ B-树

定义:1、根结点至少有两个子女;2、每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 <= j <= m - 1;(数据项的个数比子节点个数少1)3、除根结点以外的子节点的个数:┌m/2┐ <= k <= m ;4、所有的叶子结点都位于同一层。PS:m是阶数查找:类似二叉查找树插入:插入类似23查找法先插入 然后将中间的元素冒泡到父节点,然后将剩...

2019-05-10 16:03:17 167

空空如也

空空如也

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

TA关注的人

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