- 博客(148)
- 资源 (1)
- 收藏
- 关注
原创 pagehelper设置分页参数导致threadlocal数据污染
使用分页插件时设置分页参数,会存在当前线程池的线程的threadlocal中作为一个临时变量,在这个线程进行下一次分页查询时带上该参数,如果此次查询没有使用这个临时变量,该临时变量,会在该线程的下次查询中带上该参数,然后才会销毁该参数,该事故的特征是自己的接口无影响,下一次的接口有影响,且SQL日志中会出现多的limit的,
2024-11-18 16:07:05
166
原创 Java中如何判断两个数相等
3.在处理金融计算或需要高精度计算时,通常会使用Bigdecimal类的compareTo方法和equals方法,compareTo方法能够比较任意精度的数,比较常用,但两个bigdecimal对象一个为1.00和1.0时,该方法会认为两个对象相同,因此此时需要判断两个对象是否相同时,需要使用equals方法。1.对于基本数据类型可以使用"= =“比较,对于基本类型的包装类型则需要使用equals方法比较,因为”= ="方法比较的是两个引用知否指向同一对象,equals方法则比较的他们的值是否相同。
2024-10-16 10:10:58
716
原创 阿里MySQL建表规范
必须具备update_time,create_time字段,类型为datetime,除非记录时区信息,使用timestamp,必须具备id字段,为bigint unsigned,自增,步长为1,不包含业务意义。主键索引名pk_xxx,唯一索引名uk_xxx,普通索引idx_xxx。常见例如desc,range,match,deloyed等。字符串长度超过5000,设置为text,另存表,进行关联。字符串长度比较长,且长度差异大,使用varchar。5.规范五主键,唯一索引,普通索引命名规范。
2024-08-10 18:26:24
432
1
原创 kafka学习笔记
stream api允许一个应用程序作为一个流处理器,消费一个或者多个topic生产的输入流,然后生产一个输出流,到一个或者多个topic中,在输入流和输出流之间进行流转。connector api允许构建并运行可重用的生产者或者消费者,将kafka topics连接到已存在的应用程序或者数据系统,比如一个关系型数据库,捕捉表的变更。kafka作为一个集群,运行在一台或多台服务器上,通过topic对存储的流数据进行分类,每条数据包含一个key,value和timestamp。2.用于什么样的场景?
2024-08-08 15:59:20
712
原创 swagger生成api编写指南
指定调用接口的协议,必须是:“http”, “https”, “ws”, “wss”.默认是http.-表示是个数组元素,即schemes接受一个数组参数。#Swagger会提供测试用例,host指定测试时的主机名,如果没有指定就是当前主机,可以指定端口.。#定义的api的前缀,必须已/开头,测试用例的主机则为:host+bashPath。swagger在线官方编辑器:https://editor.swagger.io/swagger生成api的接口文档yaml版本。描述API接口信息的元数据。
2024-07-26 09:36:54
730
原创 mock测试
用于将@mock标记的模拟变量注入到测试类中,mockitoAnnotations.openmock(this)开启mock,配合以上两个注解进行测试,一般放在@beforeEach中在测试之前开启,相当于,每个测试类都开启了。选着待测试类,右键点击generate,在出现的面板中,选择Junit测试版本,generate选项中的setup/@beforeach,并勾选要测试的方法点击ok,就会在test目录下生成对应的测试目录。被@Spy修饰的对象会走真实的方法,而@mock对象不会,
2024-07-24 15:26:45
377
原创 代码重构实践分享
方法设计的精髓:方法是可组合,可重用的代码的最小单位,编写高内聚低耦合的整洁方法,同时把代码有效地组织起来,代码简单直接,不隐藏设计者意图,用干净利落的抽象和直接了当的控制语句将方法有序组织起来。方法要剪短,复杂过长的方法意味着方法抽象层次或者功能不够单一,建议要进行合理抽象分层,要从代码行数,参数个数,嵌套层数,异常种类数的维度间接约束方法的尺寸和复杂度,同时不要修改入参。6.类行数建议控制在500行以内,接口方法控制在20个以内。避免使用JSON作为入参,可读性差,复用不方便。避免嵌套,多使用卫语句。
2024-07-22 14:47:43
241
1
原创 JVM面试
1.JVM是java虚拟机,是一个运行在计算机上的程序,他的职责是运行Java字节码文件2.为了支持java中的一次编译到处运行的跨平台特性,jvm可以在不同的系统上运行3.jvm能自动为对象,方法等分配内存,以及自动的垃圾回收机制。回收不再使用的对象4.jvm能进行即时编译,对热点代码进行优化,提升执行效率(例如for循环中的代码)
2024-02-24 15:41:01
1084
原创 Java多线程之线程池
无论创建那种线程池都必须调用threadpoolexecutor,其核心参数,corePoolSize:线程池维护线程的最少数量,maximumpoolsize:线程池维护线程的最大数量,keeplivetime:线程池维护线程所允许的空闲时间,unit:线程池维护线程所允许的空闲时间的单位,workqueue:线程池所使用的缓冲队列,handler:线程池对拒绝任务的处理策略。newSingleTheadPool创建一个单线程化的线程池,他只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序执行。
2023-04-22 17:27:38
605
原创 springcloudAlibaba---微服务网关GateWay
网关作为流量的入口,常用的功能包括路由转发,权限校验,限流等。Spring Cloud Gateway 是由 WebFlux + Netty + Reactor 实现的响应式的 API 网关。它不能在传统的 servlet 容器中工作,也不能构建成 war 包。Spring Cloud Gateway 旨在为微服务架构提供一种简单且有效的 API 路由的管理方式,并基于 Filter 的方式提供网关的基本功能,例如说安全认证、监控、限流等等。Spring Cloud Gateway 功能特征。
2023-04-01 12:18:38
481
原创 springcloudAlibaba---分布式事物组件Seata
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务由一组SQL语句组成。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。原子性(atomicity):个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态,事务的中间状态不能被观察到的。
2023-04-01 11:59:55
609
原创 springcloudAlibaba---Sentinel
sentinel是阿里巴巴开源的,面向分布式服务架构的高可用防护组件随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。Sentinel具有以下特征:丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控。
2023-03-31 18:35:36
565
原创 springcloudAlibaba---Nacos配置中心
在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个。在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下,默认是DEFAULT_GROUP。集,每个配置集都可以被一个有意义的名称标识。B: 通过 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多个扩展 Data Id 的配置。
2023-03-31 12:43:38
393
原创 springcloudAlibaba---Feign调用组件
Feign是Netflix开发的声明式、模板化的HTTP客户端,Spring Cloud openfeign对Feign进行了增强,使其支持Spring MVC注解,另外还整合了Ribbon和Nacos,从而使得Feign的使用更加方便Feign可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求。日志配置。
2023-03-31 12:11:58
227
原创 spring cloud Alibaba --- Ribbon负载均衡
Spring Cloud Ribbon是基于Netflix Ribbon 实现的一套客户端的负载均衡工具,Ribbon客户端组件提供一系列的完善的配置,如超时,重试等。通过Load Balancer获取到服务提供的所有机器实例,Ribbon会自动基于某种规则(轮询,随机)去调用这些服务。Ribbon也可以实现我们自己的负载均衡算法Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器, 用来替代Ribbon。
2023-03-30 13:51:32
963
原创 Spring cloud Alibaba---nacos注册中心
从互联网早期到现在,系统架构大体经历了以下几个过程:单体应用架构----垂直应用架构----分布式架构----SOA架构----微服务架构,还有service mesh(服务网格化)单体应用架构:一般的网站流量小,服务简单,包含很多模块,做成一个web项目,然后部署到tomcat服务器上,优点:架构简单,开发成本低,维护方便缺点:对于大型项目不便于开发和维护,项目耦合度高,单点容率低,无法针对不同模块进行针对性优化和水平扩展。
2023-03-23 19:07:08
383
原创 Docker容器化技术
• 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。docker是一个开源的应用引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植的容器,然后发布到任何的Linux机器上,完全使用沙箱机制,相互隔离,容器性能开销极低,6.一个镜像可以放在另一个镜像上面,位于下面的镜像称为父镜像,最底层的镜像称为基础镜像。• 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。
2023-03-23 18:46:56
420
1
原创 Mybatis之动态SQL
还是上面的例子,但是策略变为:传入了 “title” 就按 “title” 查找,传入了 “author” 就按 “author” 查找的情形。如果传入了 “title” 参数,那么就会对 “title” 一列进行模糊查找并返回对应的 BLOG 结果。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。set 元素会动态地在行首插入 SET 关键字,并会删掉额外的逗号,你可以通过使用trim元素来达到同样的效果。set 元素可以用于动态包含需要更新的列,忽略其它不更新的列。
2023-03-20 21:42:32
277
原创 nginx 快速入门
nginx是一个高性能的http和反向代理服务器,特点是占用内存少,开发能力强,可作为静态页面的web服务器,为性能优化而开发,支持高性能,高并发正向代理:在用户端(浏览器)配置代理服务器。通过代理服务器进行互联网访问反向代理:只需要将请求发送到反向代理服务器,由反向代理服务器去选这目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外的一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的IP地址。
2023-03-20 19:58:16
946
原创 springboot2 核心功能(二)
一种以以数据为中心的配置文件,一种标记语言基本语法:kv之间有空格● 大小写敏感● 使用缩进表示层级关系● 缩进不允许使用tab,只允许空格● 缩进的空格数不重要,只要相同层级的元素左对齐即可● '#‘表示注释● 字符串无需加引号,如果要加,’'与""表示字符串内容 会被 转义/不转义数据类型:字面量:单个的、不可再分的值。k : v对象:键值对的集合。数组:一组按次序排列的值。配置提示自定义的类和配置文件绑定一般没有提示自定义类绑定的配置提示。
2023-03-01 14:20:55
337
原创 RebbitMQ 消息队列(高级应用)
其中自动确认是指,消息一旦被consumer接收,则自动确认收到,并将相应message从rabbitmq的消息缓存中移除,但在实际业务中,很可能消息收到了,但是业务出现了异常,那么该消息就会丢失,如果设置了手动去人方式,则需要在业务成功处理后,调用channel.basicAck()方法,手动签收,让其重新发送消息。消息可靠性投递,consumer ACK,消费端限流,TTL,死信队列,延迟队列,日志与监控,消息可靠性与追踪,管理。ack指acknowledge,确认,表示消费端收到消息后的确认方式。
2023-02-25 00:11:09
555
原创 RebbitMQ 消息队列(简单使用)
MQ的优势1.业务解耦:不同系统消费信息互不关联,灵活增减系统数量,修改某个系统其他系统也不影响2.异步提速:不同系统之间可同时响应,提升并发量3.削峰填谷:处理消息高峰期,均摊到后面处理,保护系统的稳定性MQ的不足1.系统可用性降低:系统引入的外部依赖越多,系统稳定性越差2.系统复杂度提高:怎么保证消息没有被重复消费,消息丢失,消息传递的顺序性等问题3.一致性问题:MQ如何解决不同系统处理的一致性问题MQ需要满足什么条件?1.生产者不需要获取反馈。
2023-02-24 11:32:04
549
原创 考研政治(一)马克思原理
马克思主义的内涵:1.马克思主义是由马克思和恩格斯创立并为后继者所不断发展的科学理论体系(创立者角度)2.是关于自然,社会和人类思维发展一般规律的学说(内容角度,易考,与唯物史观区别在于唯物史观不包含自然,唯物史观是不研究自然的)3.是关于社会主义必然代替资本主义,最终实现共产主义的学说(目的角度)4.是关于无产阶级解放全人类和每个人自由而全面发展的学说(立场角度)5.是指引人民创造美好生活的行动指南(作用和意义角度)
2022-09-18 09:20:36
44386
原创 计算机组成原理
计算机硬件能识别的数据—二进制0/1用低/高电平分别表示0/1,通过电信号传递数据通过很多电路可以传递多个二进制数位,每个二进制数位成为1bit(比特)数字,文字,图像如何用二进制表示呢?CPU如何对二进制数进行加减乘除运算呢?如何存储这些二进制数据呢?如何从内存中取出想要的数据呢?CPU如何识别和执行我们写的程序呢?什么是计算机系统计算机系统等于硬件(计算机实体,如主机,外设等)加软件(由具有各类特殊功能的程序组成)计算机性能的好坏取决于软硬件功能的总和。
2022-09-10 16:36:21
1541
原创 计算机网络
中继器两端:两端的网络部分是网段,而不是子网,适用于完全相同的两类网络的互联,且两个网段速率要相同,中继器只会将任何电缆段上的数据发送到另一端电缆上,它仅仅作用于信号的电气部分,并不管数据中是否由错误或者不适于网段的数据,两端可连相同的媒体,也可连接不同的媒体,中继器两端的网段一定要是同一个协议,(中继器不会存储转发)...
2022-08-17 12:15:06
592
原创 操作系统图片一览
如果时间片太大,使得每个进程都可以一个时间片内完成。暂时调到外存等待的进程为挂起状态,值得注意的是,PCB并不会一起调到外存,而是常驻内存,PCB中会记录进程数据和在外存中存放的位置,进程状态等信息,操作系统通过内存中的PCB来保持对各个进程的监控,管理,被挂起的进程的PCB会被放到挂起队列中。另一方面,进程调度,切换是有时间代价的(保存,恢复环境),因此如果时间片太小,会导致进程切换过于频繁,系统会花大量的时间来处理进程切换,从而导致实际用于进程执行的时间比例减小,可见时间片也不能太小,...
2022-08-09 11:25:27
1501
原创 数据结构算法部分
单链表头插法尾插法单链表按值查询单链表按值删除单链表打印输出格式 对应数据类型 符号的含义%d int 输出一个有符号的10进制 int 类型%o unsigned int 输出8进制的 int 类型%x unsigned int 输出10进制的 int 类型,字母以小写输出%X unsigned int 输出10进制的 int 类型,字母以大写输出%u unsigned int 输出一个 10 进制的无符号整型printf(“格式控制字符串”,输出表项);scanf(“格.
2022-07-02 18:27:00
195
1
原创 数据结构概念部分
1.数据:数据时所有能输入到计算机并被计算机程序处理的的符号总称2.数据元素:数据元素是数据的基本单位3.数据项:数据项是数据元素的最小单位4.数据对象:数据对象是指性质相通的数据元素集合5.数据类型:数据类型是一个值的集合与定义在此值集合上的一些操作的总称6.抽象数据类型(ADT):通常(数据对象,数据关系,基本操作)这样的三元组来表示抽象数据类型数据项->数据元素->数据数据结构=逻辑结构+存储结构+运算1.逻辑结构:指数据元素之间的逻辑关系逻辑结构分4类基本结构:(1)集合结构(2
2022-06-28 21:26:23
2300
原创 leetcode刷题第八天
查找重复的电子邮箱编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。+----+---------+| Id | Email |+----+---------+| 1 | a@b.com || 2 | c@d.com || 3 | a@b.com |+----+---------+根据以上输入,你的查询应返回以下结果:+---------+| Email |+---------+| a@b.com |+---------+说明:所有电子邮箱都
2022-05-27 21:38:59
263
原创 leetcode刷题第七天
树的子结构输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3 / \ 4 5 / \ 1 2给定的树 B: 4 / 1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。思路解析:若树 BB 是树 AA 的子结构,则子结构的根节点可能为树 AA 的任意一个节点。因此,判断树 BB 是否是树 AA 的子结构,需完成
2022-05-24 22:58:38
209
原创 leetcode刷题第六天
上升的温度表: Weather+---------------+---------+| Column Name | Type |+---------------+---------+| id | int || recordDate | date || temperature | int |+---------------+---------+id 是这个表的主键该表包含特定日期的温度信息编写一个 SQL 查询,来查找与之
2022-05-24 16:43:27
859
原创 leetcode刷题第五天
组合两个表Person+-------------+---------+| 列名 | 类型 |+-------------+---------+| PersonId | int || FirstName | varchar || LastName | varchar |+-------------+---------+personId 是该表的主键列。该表包含一些人的 ID 和他们的姓和名的信息。表: Address+--------
2022-05-21 00:03:30
408
原创 leetcode刷题第四天
丢失信息的雇员表: Employees+-------------+---------+| Column Name | Type |+-------------+---------+| employee_id | int || name | varchar |+-------------+---------+employee_id 是这个表的主键。每一行表示雇员的id 和他的姓名。表: Salaries+-------------+---------+|
2022-05-19 17:24:58
755
原创 leetcode刷题第三天
修复表中的名字表: Users+----------------+---------+| Column Name | Type |+----------------+---------+| user_id | int || name | varchar |+----------------+---------+user_id 是该表的主键。该表包含用户的 ID 和名字。名字仅由小写和大写字符组成。编写一个 SQL 查询来修复名字,使
2022-05-18 20:49:31
264
原创 leetcode刷题第二天
计算特殊奖金表: Employees+-------------+---------+| 列名 | 类型 |+-------------+---------+| employee_id | int || name | varchar || salary | int |+-------------+---------+employee_id 是这个表的主键。此表的每一行给出了雇员id ,名字和薪水。写出一个SQL 查询语句,
2022-05-17 14:24:25
955
原创 leetcode刷题第一天
1.用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )public class Main { public static void main(String[] args) { CQueue sta=new CQueue(); sta.ApppendTail( 2 ); st
2022-05-16 12:13:18
283
原创 jQuery 快速入门---文档、事件、动画(五)
文档处理-增删改内部插入 append() 向每个匹配的元素内部追加内容appendTo() 把所有匹配的元素追加到另一个指定的元素元素集合中prepend() 向每个匹配的元素内部前置内容prependTo() 把所有匹配的元素前置到另一个、指定的元素元素集合中外部插入 after() 在每个匹配的元素之后插入内容before() 在每个匹配的元素之前插入内容insertAfter() 把所有匹配的元素插入到另一个、指定的元素元素集合的后面insertBefore() 把所有匹配的元素插入
2022-05-15 16:35:42
246
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人