- 博客(94)
- 资源 (1)
- 收藏
- 关注
原创 mybatis开篇
最近工作不太忙,着手研究了下mybatis源码(目前正在学习中。。。)。看了部分,受益匪浅,向大家推荐<<Mybatis技术内幕>>,该书源码是基于mybatis3.4。贴上mybatis的架构图,书籍也是按照这种架构逐步分析的。...
2020-03-18 09:41:31
377
原创 Http状态码梳理及出现的场景(持续)
表示商户系统请求cdn节点时正常,cdn节点和数据中心链路异常(如cdn请求数据中心tcp三次握手失败导致建链失败),此时cdn响应商户503。表示商户系统请求cdn节点时正常,cdn节点和数据中心链路异常(如数据中心返回rst,数据中心硬件设备故障或升级),此时cdn响应商户502。1)商户通过域名访问应用服务接口,域名上了cdn服务,商户请求先到某个cdn运营商的节点,cdn节点将请求转发到数据中心机房,然后通过负载均衡策略将请求转发到应用服务。场景二:入口,商户请求通过cdn厂商转发请求到应用服务。
2025-11-28 18:06:21
203
原创 Maven构建复杂项目
IDEA中maven配置File->setting-maven进行maven配置,如图Bundled(Maven 3)表示使用IDEA默认安装的maven版本3.9.9,Use Maven Wrapper表示使用项目中执行的maven版本(项目拉取中有.mvn文件夹会指定需要的maven版本,会下载使用),也可指定自定义安装的maven版本。这里说的项目构建指的通过mvn命令执行插件命令,此时的maven版本和jdk版本使用的是环境变量配置的版本,可以看出此时使用的是maven3.5.4,jdk8。
2025-11-28 17:06:20
361
原创 Nginx配置DNS缓存
突然,手机上叮叮的短信声此起彼伏,我心头一紧,不会出幺蛾子了吧。2.内部系统中nginx代理请求时,请求的域名,但是未进行dns的配置,默认ip的ttl是永久的,仅再nginx启动或者reload的时候才会触发dns查询,重新解析新的ip。3.因为所有的请求都是通过nginx代理出去的,继续查看nginx的error日志,发现了大量的Connection refused错误,并且上游的ip地址都是同一个A。6.外部系统对接人反馈,域名绑定了多个运营商,其中一家运营商网络断了(ip A),导致了此次事故。
2025-11-07 15:55:23
444
原创 API接口交互异常捕获通用处理逻辑
/HttpClientErrorException的父类,捕获RestTemplate请求时其他暂未遇到的场景的异常。//业务逻辑,使用RestTemplate请求时,绝大多数异常都是RestClientException的子类,客户端请求异常,4xx等状态码,如接口交互式使用了token,token过期了等场景。//客户端请求异常,4xx等状态码,如接口交互式使用了token,token过期了等场景。//服务器内部异常,5xx等状态码。//网络异常,读超时或连接超时,资源不可访问等。
2025-11-05 14:08:45
308
原创 关于SM2软件加密与硬件加密的问题
日常开发工作中,涉及到SM2算法的加密和解密时,如果一方使用软件实现,而另一方使用硬件实现,可能会遇到一些联调过程中的问题。在SM2的加密和解密过程中,涉及到对ASN.1格式的编码和解码。接口上送的sm2加密值为硬件加密机加密后的asn1字节数组,应用程序需要将asn1转换原始数据进行解密,偶现错误发生在转换过程中。如果可能的话,尽量使软件和硬件使用相同的ASN.1库,以确保编码和解码的一致性。1.编码/解码不一致:软件和硬件可能采用不同的ASN.1编码规则或者库来处理ASN.1格式的数据。
2024-04-25 17:42:40
2394
原创 关于服务端返回connection reset(read ECONNRESET)问题的思路
但是host参数也会带来相应的风险即host注入问题,通常服务端会检测Host值并做相应的处理来防范这种风险,因此当要访问的域名和Host中上送的域名不一致时也不能理解服务端响应connection reset错误了。背景:生产联调验收时,商户发送的http请求返回connection reset错误。通过postman向生产环境直接发起请求看是否成功返回--成功。2.telnet、curl命令看服务端是否成功返回--成功。查看整个报文请求(包括报文头和报文体),1.抓包看双方是否成功建立连接--成功。
2024-03-29 09:51:28
4721
原创 国密算法篇
国密算法SM2是由国家密码管理局制定的一种非对称密码算法,包括SM2密钥交换、,国标 GB/T 32907 对 SM4 对称加密算法进行了详细描述。SM4 算法密钥长度。它基于椭圆曲线(ECC)密码理论,具有较高的。公钥加密(非对称加密,公钥加密,私钥解密),加解密速度较快,优于AES算法。效率(同RSA比较)
2024-02-28 14:26:09
1595
转载 nginx 问题汇总
正则匹配的先后顺序是:在配置文件中先出现的先匹配,匹配成功就不再匹配后面的正则表达式。优先级:(1)> (2) > (3) = (4)> (5)匹配,如果一个URI同时满足两个规则的话,匹配。的规则,如果符合就直接返回结果,否则继续匹配。同时出现的情况,仍然按照出现的顺序进行匹配。:匹配URI的前缀,并且后面的正则表达式。换言之,一个URI请求首先检查是否符合。:匹配正则表达式,大小写不敏感;:匹配正则表达式,大小写敏感;,最后就是正则表达式的匹配。的优先级是最高的,其次是。规则不匹配,那么就匹配。
2024-01-05 17:00:00
373
原创 linux应用日志定时清理脚本
服务器项目日志文件随着时间推移,文件数量和体积不断增大,占用磁盘空间。很多历史日志文件无实际价值,却需要人工日常维护。现通过定时任务方式自动清理历史日志文件,保持服务器磁盘空间占用在合理的水平。1.创建日志清理脚本log_clean_35.sh。2.创建清理任务日志clean.log。
2023-11-14 17:47:14
303
原创 Hystrix线程池问题
经定位发现,被调用服务中无对应的请求日志,继续通过日志查询确认是feign调用时出现服务降级,进入降级方法统一返回调用失败。我们知道,feign的调用链路中内置了hystrix逻辑,hystrix出现服务降级的情况有很多种,下图展示了服务降级的场景,从下图可知服务降级通常有三种原因。我们项目的实际情况是活动启动的瞬间并发高导致降级,这种降级只是部分请求的降级,故排除这种情况。1.基于feign的服务调用时,以服务名作为key值,为该key值创建一个线程池,默认大小为10,各个服务名的线程池相互隔离。
2023-05-03 11:22:32
1115
原创 Linux搭建Nexus私服
本文重要介绍了一下几个内容:1.linux中安装nexus,以及nexus中创建仓库,创建用户,创建角色,关联权限供实际项目中使用。2.如何从过个远程仓库中下载jar包(即项目中jar包可能来自于多个仓库),如何将项目发布到nexus仓库。3.如何实现svn主分支并行开发。4.maven release plugin 的使用完成自动版本控制。
2022-10-21 15:55:54
370
转载 LINUX添加只读用户(查日志专用)
第一步:添加用户并设置能够在shell上使用的命令#1.创建用户和登录shelluseradd -s /bin/bash test#2.修改用户密码passwd test#3.创建用户shell执行命令目录(允许用户使用的命令保存在该目录下)mkdir /home/test/.bin#4.root修改用户的shell配置文件(只能root用户修改该文件)chown root. /home/test/.bash_profilechmod 755 /home/test
2022-03-15 18:55:51
3636
1
原创 Eureka集群配置
eureka作为注册中心,生产环境必须多节点部署,保证其高可用性。现以两台服务器来完成集群部署。 服务器A:172.16.21.34 服务器B:172.16.21.35方式一:使用ip形式完成。服务器A:172.16.21.34server: port: 7777spring: application: name: register #指定eureka客户端的登录账户 security: user: ...
2021-12-09 16:56:27
4814
原创 oracle实践
一、空值判断,空值转换 使用is null、is not null,判断是否是空值。使用nvl(exp1,exp2)将空值转换为其他值。 exp1表示可能为空的字段,exp2表示转换成什么值。二、列转行 pivot 语法:select * from table pivot (聚合函数 for column in (‘常量值1’,’常量值2’)); 相当于对column字段进行分组处理,聚合函数为需要统计的字段值。sel...
2021-09-13 16:30:16
635
原创 设计模式总述
设计模式是面对特定业务场景时的一种开发套路。它源于生活,通常我们能找到相应的例证,但高于生活(抽象),它能解决一类问题。使用设计模式的根本目标是开发时尽可能遵循面向对象的设计原则,不可为了生搬硬套,一切随缘(重构/优化)。 常用的设计模式有23中,分为三大类,有创建型,结构型,行为型。类别 名称 描述 速记词 创建型 工厂方法模式 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 创...
2021-08-26 10:59:51
262
原创 使用栈来实现队列
栈的特性是先进后出,队列的特性是先进先处。使用的两个栈,两次先进后出=先进先出。public class StackQueue { //数据的入口 private Stack<Integer> stackA = new Stack<>(); //数据的出口,在stackB为空的前提下,将stackA数据导入 private Stack<Integer> stackB = new Stack<>(); ...
2021-08-11 10:47:36
198
原创 LRU-最近最少使用算法
LRU:Least Recently Used也就是最近最少使用的意思,是一种内存管理算法,该算法最早应用于Linux操作系统。这个算法基于一种假设:长期不被使用的数据,在未来被用到的几率也不大。因此,当数据所占内存达到一定阈值时,我们要移除掉最近最少被使用的数据。 redis中的内存管理算法中也用到了LRU,LinkedHashMap中也对LRU进行的具体的实现。现在这里也进行简单的实现。...
2021-08-10 18:48:41
1022
原创 抢红包算法
红包算法有很多,一般来说,需要满足的规则有以下几点: 1. 所有人抢到的金额之和要等于红包金额,不能多也不能少。 2. 每个人至少抢到1分钱。 3. 要保证红包拆分的金额尽可能分布均衡,不要出现两极分化太严重的情况。public class RedPackage { public static void main(String[] args) { RedPackage redPackage = new RedPa...
2021-08-05 17:14:42
1192
原创 位图bitmap
位图算法:bitmap是内存中连续的二进制位(bit)所组成的数据结构,位图算法主要用于对大量整数做去重和查询操作(交集、并集、差集)。因为使用的是位运算,因此性能也是很高的。 jdk中的BitSet就是位图算法的具体实现。public class BitSet implements Cloneable, java.io.Serializable { //一个long元素有64bit,需要移动6位 private final static int A...
2021-07-22 17:51:10
956
原创 寻找缺失的整数
位运算:如果一个问题能用到位运算,那么它的的运算性能可大大提升。场景一:在一个无序数组里有99个不重复的正整数,范围是1~100,唯独缺少1个1~100中的整数。如何找出这个缺失的整数? 问题分析:方法一,可双重遍历得到缺失值,时间复杂度为O(n^2)。方法二,可预先将全部的正整数放入到创建的map中,遍历数组时再删除map中对应的值,最后留下来的值即为确实的值。方法三,先将100内的正整数累加,再减去数组中的全部正整数。public class ...
2021-07-21 11:43:41
434
原创 如何实现大整数相加
给出两个很大的整数,要求实现程序求出两个整数之和。 将整数拆分成数组计算,这种思想在BigInteger中也有使用,数组中的一位可以存一个数字也可以存一个int值。BigInteger采用的是存一个int值,且使用位运算,效率能提到提升。public class BigNumberSum { public static void main(String[] args) { //给出两个很大的整数,要求实现程序求出两个整数之和,整数可能很大,超过lo...
2021-07-19 15:15:39
348
原创 删去k个数字后的最小值
依次求得局部最优解,最终得到全局最优解的思想,叫做贪心算法。public class RemoveKDigits { public static void main(String[] args) { //删去k个数字后的最小值 //等价于删除1个数字后的最小值,循环k次。 RemoveKDigits removeKDigits = new RemoveKDigits(); String num = "10023...
2021-07-19 13:41:41
215
原创 寻找全排列的下一个数
public class NearestNumber { public static void main(String[] args) { //寻找全排列的下一个数 如: //12345->12354 //12354->12435 //12435->12453 //对于一个整数来说,倒序排列时最大,顺序排列时最小 NearestNumber nearestNumber = new Ne.
2021-07-16 16:43:01
281
原创 jvm简单梳理
Java虚拟机一、Java内存区域1.内存区域分配及其作用:线程共享堆(Heap):内存中最大的一块,存放对象实例和数组,堆内存在物理上可以不连续,通过-Xms、-Xmx可以设置堆内存大小。-Xms:堆内存初始值,默认物理内存1/64-Xmx:堆内存最大值,默认物理内存1/4-Xmn:堆内存新生代大小方法区(Method Area/Non-Heap):存放类信息、常量、静态变量(static)等,通过-XX:MetaspaceSize -XX:MaxMetaspaceSize
2021-07-13 17:29:00
233
原创 jdk1.8简单梳理
匿名对象->Lambda表达式(必须是函数式接口)->方法引用1.方法引用:可以看作是Lambda表达式的简化形式。主要有三类:1)指向静态方法的方法引用2)指向任意类型实例方法的方法引用3)指向现有对象的实例方法的方法引用4)构造函数引用 (类名::new)2.流-Strem以声明式的方式处理数据集合流的定义:从支持数据处理操作的源(集合、数组或输入/输出资源)生成的元素序列流的特征:元素序列:流是元素序列,且只能被消费一次源:集合、数组或输入/输出资源,Arr
2021-07-13 17:21:04
213
原创 无序数组排序后的最大相邻差
public class MaxSortedDistance { public static void main(String[] args) { //无序数组排序后的最大相邻差 MaxSortedDistance maxSortedDistance = new MaxSortedDistance(); int[] array = {10, 11}; System.out.println(maxSortedDistance.getMa.
2021-07-09 17:55:09
317
1
原创 计数排序
计数排序适用于一定范围内的整数排序。在取值范围不是很大的情况下,它的性能甚至快过那些时间复杂度为O(nlogn)的排序。计数排序,理想情况下时间复杂度可为O(n),即每一个索引位只有一个元素。当数列最大和最小值差距过大时,并不适合用计数排序。当数列元素不是整数时,也不适合用计数排序。public class CountSort { public static void main(String[] args) { CountSort countSo...
2021-07-09 15:17:32
145
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅