自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring 事务设计原理

通过生成代理类的方式,对事务注解的方法进行方法增强,即开启事务,执行方法,最后根据方法执行的情况进行提交或回滚事务,默认注解回滚的是运行时异常。2.Spring对事务的支持,确实很强大,但是从本质上来讲:事务是否生效取决数据库底层是否支持(比如MySQL的MyISAM引擎就不支持事务,Spring事务也无效),同时一个事务的多个操作需要在同一个Connection上。事务也往往是在业务逻辑层来控制。1.事务是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败。事务具有ACID四个特性。

2023-07-28 15:57:49 131

原创 rabbitMQ如何保证数据不丢失

A: 对于当前的操作, 每一个channel都会存在若干的unack消息(未确认消息). 比方说, rabbitMQ正在发送的消息 、 消费者实例接收到消息之后但没有处理完 、 执行了ack但是因为ack是异步的也不会马上变为ack信息 、 开始批量ack延迟时间会更长.对于这些场景,都会存在unack的消息. 此时如果rabbitMQ无限制的过多过快的向消费者实例发送消息,就会导致庞大的unack消息积压在消费者实例的内存中,如果继续保持发与积压的状态,最终会导致消费者实例的oom!

2023-06-28 21:39:50 1321

原创 如何中断一个线程

如果一个线程处于了阻塞状态,如线程调用了thread.sleep、thread.join、thread.wait、1.5中的condition.await,则线程在检查中断标示时如果发现中断标示为true,会在这些阻塞方法(sleep、join、wait、1.5中的condition.await)调用处抛出InterruptedException异常,并且在抛出异常后立即将线程的中断标示位重新设置为false。方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果取决于程序本身。

2023-05-30 13:40:47 179

原创 分布式事务相关整理

有了这张表,就可以启动一个后台任务,扫描这张表中事务的状态,如果一个分布式事务一直(设置一个事务周期阈值)未到状态 3,说明这条事务没有成功执行,可以将事务状态置为 error,通过人工介入进行干预。2)阶段二:提交阶段。若所有的服务的 try 接口在阶段一都返回 yes,则进入提交阶段,协调者调用所有服务的 confirm 接口,各个服务进行事务提交。1)性能差,在准备阶段,要等待所有的参与者返回,才能进入阶段二,在这期间,各个参与者上面的相关资源被排他锁住,影响了各个参与者的本地事务并发度;

2023-04-26 17:16:47 417 1

原创 MySQL面试记录

MySQL面试记录

2023-03-31 17:46:07 226

原创 事务不起作用 Closing non transactional SqlSession

说明: 代理模式中,只拦截外部方法调用,开启事务。类内部调用无法实现事务控制。

2023-02-27 14:55:01 803

原创 MySQL优化方案

适当使用前缀索引,MySQL 是支持前缀索引的,也就是说我们可以定义字符串的一部分来作为索引。我们知道索引越长占用的磁盘空间就越大,那么在相同数据页中能放下的索引值也就越少,这就意味着搜索索引需要的查询时间也就越长,进而查询的效率就会降低,所以我们可以适当的选择使用前缀索引,以减少空间的占用和提高查询效率。假如我们没有添加索引,那么在查询时就会触发全表扫描,因此查询的数据就会很多,并且查询效率会很低,为了提高查询的性能,我们就需要给最常使用的查询字段上,添加相应的索引,这样才能提高查询的性能。

2023-01-31 20:17:01 885

原创 maven命令指定打包模块

mvn clean package -pl -am -amd。-amd是引入依赖的依赖也进行编译。-am是引入指定模块的依赖也编译。-pl是指定打包module。

2022-12-31 08:56:22 1912

原创 on duplicate key update 加 逻辑删除有坑及处理方案

on duplicate key update 加 逻辑删除有坑。解决方案:把逻辑删除的记录,唯一键字段加上随机序列保证不冲突即可。

2022-12-31 08:52:55 243

原创 java list 分批插入

【代码】java list 分批插入。

2022-12-31 08:51:30 297

原创 Linux操作学习记录

Linux操作学习记录

2022-10-16 21:32:15 293

原创 log4j2 lookup功能

在log4j2.xml中,可以获取到项目工程中的变量,使用${占位符}即可

2022-09-29 09:19:07 826

原创 Centos7更新时间、时区

Centos7更新时间、时区 timedatectlset-time ntpdate

2022-08-01 21:19:50 519

原创 CMAKE报错找不到Java

CMAKE报错找不到Java报错:CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:165 (message): Could NOT find Java (missing: Java_JAVAH_EXECUTABLE Development) (found version "1.8.0.272")Call Stack (most recent call first): /usr/share/

2022-07-07 20:45:06 1219 1

原创 自定义延迟队列

实现自定义延迟队列

2022-06-29 23:23:21 222

原创 Sock5 server docker镜像

1.基础材料ss5.dockerfileFROM centos:7.6.1810 MAINTAINER SoarARG SRC_APPCOPY $SRC_APP .RUN TOolS="wget gcc make pam-devel openldap-devel openssl-devel" \ && yum -y install $TOolS --nogpgcheck \ && tar xvf $SRC_APP \ && cd

2022-05-31 18:34:13 726

原创 jenkins 远程 withCredentials.sshUserPrivateKey 方式、identity 文件怎么配置?

jenkins 远程 withCredentials.sshUserPrivateKey 方式、identity 文件怎么配置?0.用户名/密码的方式[withCredentials.usernamePassword] 只需要在全局凭据上,然后粘贴下面的stage到pipeline中测试// 调用上面定义好的方法stage('Hello12345') { steps { script{ def remote = [:] ...

2022-04-24 14:43:29 5613 3

原创 安装confluence报403 Forbidden、XSRF check failed问题解决

​​​​​​​Running Confluence behind NGINX with SSL | Confluence Data Center and Server 7.17 | Atlassian Documentationhttps://confluence.atlassian.com/doc/running-confluence-behind-nginx-with-ssl-858772080.html1.要严格参照官方文档配置2.主要原因是Confluence的XSRF防护,要改的内容 <

2022-04-18 22:38:40 1672

原创 Nginx配置TCP请求转发

Nginx配置TCP请求转发第一步:# 编译安装 stream 组建./configure --with-streammake第二步:将现有的nginx -s stop备份nginx -> nginx.bak第三步:将新编译好的nginx拷贝到sbin目录下第四步:添加与http同级配置stream { # 添加socket转发的代理 upstream socket_proxy { hash $remote_addr consistent...

2022-03-31 22:42:58 11997 4

原创 之字遍历二叉树并填充next指针

//蚂蚁一面 评测题目: 给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点,//填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。//初始状态下,所有next 指针都被设置为 NULL。public class Test { public static void main(String[] args) { // pointToNext(root); } publi...

2022-02-07 18:25:12 706

原创 JZ85 连续子数组的最大和(二)

JZ85 连续子数组的最大和(二)描述输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,找到一个具有最大和的连续子数组。1.子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组2.如果存在多个最大和的连续子数组,那么返回其中长度最长的,该题数据保证这个最长的只存在一个3.该题定义的子数组的最小长度为1,不存在为空的子数组,即不存在[]是某个数组的子数组4.返回的数组不计入空间复杂度计算数据范围:1&

2022-01-23 20:38:39 284

原创 编程:获取子部门列表(包括隔代子部门)

题:根据id,获取所有子部门列表(包括隔代子部门,一直到叶子节点)public static List<Department> getSub(int id, List<Department> allDepartment)package com.juwenzhe.test.ms;import cn.hutool.core.collection.CollectionUtil;import java.util.ArrayList;import java.util.Li

2021-12-15 22:05:02 541

原创 [JD] 五、服务容错方案

[JD] 五、服务容错方案一、服务容错应用场景分析与设计二、熔断组件Hystrix分析三、Hystrix服务熔断降级应用一、服务容错应用场景分析与设计1.服务容错的意义及容错要解决的问题 单个节点故障可能被无限向上放大 同一个分组下的接口被一个调用方压垮、影响到其他调用方,即多租户相互影响 瞬时流量激增,系统压力大 2.解决方案 1> 资源隔离 可以针对线程资源隔离,比如将请求的接口设置单独的线程池 可以使用信号量...

2021-11-13 15:56:45 550

原创 [JD] 四、配置中心分析

[JD] 四、配置中心分析一、配置中心在分布式架构中的作用二、开源配置中心产品选型三、Apollo深入分析一、配置中心在分布式架构中的作用1.配置的作用 可以在不重新编译代码的情况下,改变程序运行逻辑、调整整体边界,被调用模块路由信息等。方便维护,提高工作效率。2.本地配置 一般重启生效,不容易维护,生效慢3.配置中心 配置中心是分布式系统中集中化管理线上应用程序配置的管理中心。可以做到集中管控、批量操作和热发布。 配置中心一般具备以下功能: 1&...

2021-11-09 23:28:53 210

原创 [JD] 三、注册中心原理分析

[JD] 三、注册中心原理分析一、注册中心的作用与设计分析二、开源注册中心选型三、Nacos注册中心分析四、ZK实现与ZK注册中心分析五、注册中心与服务治理一、注册中心的作用1.注册中心是用来实现为服务实例的自动注册与发现,是分布式系统中的核心基础服务。2.注册中心的主要功能:服务注册、服务发现、健康检查、变更通知。· 服务注册:服务提供方将自身路由信息发布到注册中心,供消费方获取,用于与提供方建立连接并发起调用。 路由信息包括注册服务节点ip、监听端口等 服务信息包括:...

2021-10-29 00:11:41 1660

原创 [JD] 二、Dubbo实现原理

[JD] 二、Dubbo实现原理一、Dubbo核心特性二、Dubbo整体设计三、Dubbo扩展点加载机制四、Dubbo扩展点特性一、Dubbo核心特性 Dubbo具备面向接口代理的高性能RPC调用、服务注册与发现、运行期流量管理、智能负载均衡和高度可扩展等特性二、Dubbo整体设计1.Dubbo总体分为 业务层、RPC层、Remote三大层(下图左侧)2.在框架细分的10层分层架构中,各个层次的设计要点 · 服务接口层(Service):该层是与实际业务逻辑相关的,根...

2021-10-28 00:40:07 197

原创 [JD] 一、基础架构与RPC框架剖析

[JD] 一、基础架构与RPC框架剖析一、基础架构二、RPC实现原理三、RPC服务消费/提供方核心功能设计实现四、主流RPC产品对比一、基础架构 基础架构设计主要考虑的几个方面:业务开发框架、存储、管理平台、MIS支撑、运维、基础组件、基础服务· 业务开发框架又可以划分:网关、业务逻辑层、数据访问层· 存储主要有:关系型存储MySQL、TiDB、缓存系统Codis、固化KV存储等· 管理平台可以包含:服务管理平台、监控、日志平台、消息中心、任务调度平台、配置中心等· MIS支撑:..

2021-10-26 22:46:08 1109

原创 大数自增和打印

一、使用字符串实现public static void main(String[] args) { StringBuffer number = new StringBuffer("001"); while (!numberIncr(number)) { printNumber(number); }}private static boolean numberIncr(StringBuffer number) { int nLength = num...

2021-09-30 21:42:46 76

原创 Holer Sever实现https访问内网的方式

Holer Sever实现https访问内网的方式一、自建holder serverholer服务端 https://github.com/wisdom-projects/holer-server#readme二、实现https访问内网在holer实现的内网访问教程中,未提及很多关于实现https访问内网的细节,以下是本人实践分享:1.在阿里云按照教程启动了一个holer server,之后在nginx/conf目录下会生成一个holer目录 2.更新 vip.your-domain.top

2021-08-29 21:31:58 289

原创 k8s 证书过期的处理方法(k8s v13.4)

k8s 证书过期的处理方法(k8s v13.4)kubeadm安装的k8s集群有一个证书问题,证书的有效期为一年,过期的话kubectl命令就会异常。解决办法如下:查看证书是否有效:# sudo openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ’ Not '输出:Not Before: May 24 03:32:37 2019 GMTNot After : May 23 03:32:38 2020 GMT

2021-07-11 21:49:09 629

转载 MyBatis 流式查询(转)

流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。如果没有流式查询,我们想要从数据库取 1000 万条记录而又没有足够的内存时,就不得不分页查询,而分页查询效率取决于表设计,如果设计的不好,就无法执行高效的分页查询。因此流式查询是一个数据库访问框架必须具备的功能。流式查询的过程当中,数据库连接是保持打开状态的,因此要注意的是:执行一个流式查询后,数据库访问框架就不负责关闭数据库连接了,需要应用在取完数据后自己关闭。MyB

2021-06-30 22:27:24 174

原创 并发编程学习笔记01 - 基础

并发编程学习笔记01 - 基础一、前言 1.看源码有必要吗? 2.如何看源码?二、并发编程基础 1.什么是线程? 2.线程的创建与运行 3.线程的等待与通知 4.等待线程执行中止的join方法 5.让线程睡眠的sleep方法 6.让出CPU执行权的yield方法 7.线程中断 8.线程上下文切换 9.线程死锁 10.守护线程和用户线程 11.ThreadLocal实现原理一、前言 1.看...

2021-05-31 00:50:12 89

原创 LeetCode94 - 二叉树的中序遍历

LeetCode94 - 二叉树的中序遍历链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal给定一个二叉树的根节点 root ,返回它的 中序遍历。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[2,1]时间复杂度:O(n.

2021-04-19 23:59:45 84

原创 LeetCode242 - 有效的字母异位词

LeetCode242 - 有效的字母异位词(难度:简单)链接:https://leetcode-cn.com/problems/valid-anagram给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode.

2021-04-19 23:30:29 113

原创 LeetCode239 - 滑动窗口最大值

LeetCode239 - 滑动窗口最大值链接:https://leetcode-cn.com/problems/sliding-window-maximum给你一个整数数组 nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 ...

2021-04-08 00:23:41 92 2

原创 LeetCode155 - 最小栈

LeetCode155 - 最小栈(难度:简单)链接:https://leetcode-cn.com/problems/min-stack设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop()—— 删除栈顶的元素。top()—— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","..

2021-04-07 21:49:01 93

原创 LeetCode49 - 字母异位词分组

LeetCode49 - 字母异位词分组链接:https://leetcode-cn.com/problems/group-anagrams给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"]输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]说明:所有输入均为小写字母。不考虑答案输出的顺序。...

2021-04-07 21:17:10 76 1

原创 LeetCode901 - 股票价格的跨度

LeetCode901 - 股票价格的跨度链接:https://leetcode-cn.com/problems/online-stock-span编写一个 StockSpanner 类,它收集某些股票的每日报价,并返回该股票当日价格的跨度。今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。例如,如果未来7天股票的价格是 [100, 80, 60, 70, 60, 75, 85],那么股票跨度将是 [1, 1, 1, 2, 1, 4, 6]。示.

2021-04-06 23:11:38 143

原创 LeetCode122 - 买卖股票的最佳时机 II

LeetCode122 - 买卖股票的最佳时机 II链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股.

2021-04-06 22:13:41 71

原创 LeetCode121 - 买卖股票的最佳时机

LeetCode121 - 买卖股票的最佳时机链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[..

2021-04-06 21:49:59 103

空空如也

空空如也

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

TA关注的人

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