- 博客(39)
- 收藏
- 关注
原创 Nginx代理长连接
示例配置中,upstream 块中的 keepalive 表示启用 keepalive,其参数 32 表示一个 Nginx 工作进程最多可以同时维护 32 个与后端服务的长连接,当有更多连接需要建立时,Nginx 将会启动新的工作进程来继续处理请求。在 server 块中,keepalive_timeout 表示建立一个连接后的最大空闲时间,当连接超过这个时间内没有任何数据的交换,Nginx 将主动关闭连接。# 启用 keepalive 模块。# 启用长连接 网站即可直接选择性的使用长连接。
2024-07-24 07:49:40
503
原创 Spring如何解决循环依赖的
earlySingletonObjects」:缓存提前拿原始对象进行了 AOP 之后得到的代理对象,原始对象还没有进行属性注入和后续的 BeanPostProcesso r等生命周期;「singletonObjects」:缓存某个 beanName 对应的经过了完整生命周期的bean;
2024-07-19 10:20:03
412
原创 Redis排行榜
时间戳 毫秒精度 是 13位,所以只需 14 ~ 19 位存 等级,其他13位存时间。A 玩家,(10 * 等级偏移) + MAX_TIME - 11111111111111( 时间戳),最终分数 10888888888888888。B 玩家,(10 * 等级偏移) + MAX_TIME - 22222222222222( 时间戳),最终分数 10777777777777777。最终排序,A 玩家依然是第一。通过分数可以解析出真实 【等级 = 分数 / 等级偏移,取整】
2024-07-08 16:10:27
487
原创 Nps内网穿透(亲测有用)
1.Nps介绍2.环境准备3.服务端的配置5.新建客户端4.配置客户端(开机自启动)注意⚠️:ssh远程工具🔧连接ubuntu系统需安装ssh服务器(linux装机自带)
2022-12-09 19:51:35
2251
原创 tcp/ip,socket,http 三者关系
它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。复,表明知道客户端“在线”。
2022-11-30 22:41:49
879
原创 接口的IO模型区别
在这个互联网火热的时代,万级的并发都是常态,那么如果一万个用户同时进来登陆系统,为了保证响应性及时,是否开一万个线程呢?肯定不可能,需要的系统资源将是无止境的,这对硬件要求过高了。那如果我们只使用100个线程循环使用呢(线程池)?那么同一时间有一万用户同时登陆,在前0.8s只会有100个用户能及时得到响应,后面来的9900用户都会阻塞0.8s然后继续有100个用户能得到响应,以此类推大部分的用户将很久得不到响应。其实Reactor暗示了,同步非阻塞将避免浪费这部分线程,那么同步非阻塞是如何做到的呢?
2022-09-24 16:36:20
174
原创 真正理解Java中的异步
注:如果本地服务多次请求第三方服务,需要根据流水号判断该请求的状态,业务的状态设计也是极其复杂,要根据流水号和状态追溯整个流程的执行进度,避免错乱。实际开发场景:运维总控系统,更新了某类服务配置,通知消息发送之后,相关业务线上的服务在拉取最新配置,更新到服务中。注:异步适用的业务场景,对数据实时性、强一致性的要求不高,异步处理的数据更多时候追求的是最终一致性。Spring管理的异步线程数量有限,如果是web项目的话,线程数量由tomcat的线程池配置有关系,所以最好自己配置线程配置类。
2022-09-24 14:23:23
1672
原创 Gateway网关的优雅使用
这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计,这就要求必须使用一种语言和平 台无关的服务协议作为各个单元间的通讯方式,此时出现了网关。即具体业务的控制,还有一种我们之前常用的nginx是流量层网关,虽然都具有负载均衡等功能,但是使用的场景不同,nginx用于网页架构,网关用于对具体业务的,通常来讲业务层的网关Gataway调用后与nginx网页层。上面的是使用系统自带的过滤器,但是现在我们有自己的业务需求,所以需要编写自己的过滤器,所以需要全局过滤器。
2022-09-24 13:24:42
322
原创 <? extends T>和<? super T>
extends 可用于返回类型限定,不能用于参数类型限定(换句话说:?extends xxx 只能用于方法返回类型限定,jdk能够确定此类的最小继承边界为xxx,只要是这个类的父类都能接收,但是传入参数无法确定具体类型,只能接受null的传入)。super 可用于参数类型限定,不能用于返回类型限定(换句话说:?supper xxx 只能用于方法传参,因为jdk能够确定传入为xxx的子类,返回只能用Object类接收)。?既不能用于方法参数传入,也不能用于方法返回。
2022-09-21 11:01:04
254
原创 关于jakson反序列化报错
.........序列化不会遇到任何挑战。因为不管变量的真实类型是什么,Jackson 总是会通过所有的 getter 方法来找到所有的属性和值,并序列化到 Json 中。反序列化就不同了,因为程序不知道 Json 应该对应到哪一个子类。
2022-09-20 20:18:07
1133
原创 目前有哪些高并发解决方案?
说实话,大部分开发人员做的系统并发量都比较小,尤其是很多从0到1做起来的新项目。那么,我们平常如何接触高并发技术呢?其实最经典高并发项目是秒杀系统,大量的用户在极短的时间内购买少量的商品。比如:小米手机的秒杀功能,刚开始小米的网站经常挂,后面经过不断优化,不断迭代升级,变成了现在的样子。针对高并发的业务场景,所需要的技术手段更多更复杂。那么,高并发下如何设计秒杀系统?这是一个高频面试题。这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。...
2022-08-30 20:17:37
2562
原创 java动态代理和Cglib动态代理的区别和使用
System.out.println("传入参数为 userName: "+userName+" password: "+password);System.out.println("传入参数为 userName: "+userName);3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换。//需要代理的目标对象。(1)JDK动态代理只能对实现了接口的类生成代理,而不能针对类。1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现。...
2022-08-30 19:58:19
968
原创 spring中 过滤器(Filter)与拦截器(Interceptor )区别
这样在我们业务中比如要记录系统日志,日志肯定是在afterCompletion之后记录的,否则中途失败了,也记录了,那就扯淡了。方法中的某一个,如果实现HandlerInterceptor接口的话,三个方法必须实现,不管你需不需要,此时spring提供了一个HandlerInterceptorAdapter适配器(种适配器设计模式的实现),允许我们只实现需要的回调方法。1、日志记录,可以记录请求信息的日志,以便进行信息监控、信息统计等。需要拦截的路径,这里匹配所有。3、性能监控:典型的是慢日志。...
2022-08-30 19:51:12
331
原创 【面试必备】我跟面试官聊了一个小时线程池!
一般面试官考察你线程池相关知识前,大概率会先问这个问题,如果你说没用过,不了解,ok,那就没以下问题啥事了,估计你的面试结果肯定也凶多吉少了。作为 JUC 包下的门面担当,线程池是名副其实的 JUC 一哥,不了解线程池,那说明你对 JUC 包其他工具也了解的不咋样吧,对 JUC 没深入研究过,那就是没掌握到 Java 的精髓,给面试官这样一个印象,那结果可想而知了。所以说,这一分一定要吃下,那我们应该怎么回答好这问题呢?...
2022-08-30 19:12:11
210
原创 看看别人后端API接口性能优化的11个方法,那叫一个优雅!
接口性能优化对于从事后端开发的同学来说,肯定再熟悉不过了,因为它是一个跟开发语言无关的公共问题。该问题说简单也简单,说复杂也复杂。有时候,只需加个索引就能解决问题。有时候,需要做代码重构。有时候,需要增加缓存。有时候,需要引入一些中间件,比如mq。有时候,需要需要分库分表。有时候,需要拆分服务。等等。。。导致接口性能问题的原因千奇百怪,不同的项目不同的接口,原因可能也不一样。本文我总结了一些行之有效的,优化接口性能的办法,给有需要的朋友一个参考。...
2022-08-30 17:47:39
1065
原创 springboot定义restful统一结果返回
但是,由于我们的项目可能是由很多人开发的,所以我们最好将返回的结果统一起来,这样每个人都可以返回相同的数据格式,这不仅规范了代码,也方便了前端人员调用,否则每个人都会按照自己的风格编写,代码会变得非常混乱。例如,0表示成功,1表示失败,2表示必须传递错误的参数,4表示系统异常,依此类推。然后还有我们的核心数据。这种类型必须是多样的,所以我们需要使用统一的父类,以便对象可以接收所有类型。例如,用户名已经存在,事实上,业务并不成功,但HTTP的结果肯定是200, 因此我们需要一个代码来描述我们的业务状态。...
2022-08-30 17:34:32
588
原创 那些后端大神都有哪些好的开发习惯?
一个大业务里面有多个小业务,不同的业务调用不同的 service 方法即可,后续接手的人即使没有流程图等相关文档也能快速理解这里的业务,而很多初级开发写出来的业务方法就是上一行代码是 A 业务的,下一行代码是 B业务的,在下面一行代码又是 A 业务的,业务调用之间还嵌套这一堆单元逻辑,显得非常混乱,代码还多。为什么说要少写工具类,因为你写的大部分工具类,在你无形中引入的 jar 包里面就有,String 的,Assert 断言的,IO 上传文件,拷贝流的,Bigdecimal 的等等。后续拆微服务也简单。.
2022-08-30 16:58:19
216
原创 面试官: Redis 与 MySQL 双写一致性如何保证?
谈谈一致性一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。强一致性:这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大弱一致性:这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态最终一致性:最终一致性是弱一致性的一个特例,系统会保证在一定时间内,能够达到一个数据一致的状态。这里之所以.
2022-01-17 14:43:04
257
原创 并发编程之线程池
程序的运行,其本质上,是对系统资源(CPU、内存、磁盘、网络等等)的使用。如何高效的使用这些资源是我们编程优化演进的一个方向。今天说的线程池就是一种对CPU利用的优化手段。通过学习线程池原理,明白所有池化技术的基本设计思路。遇到其他相似问题可以解决。池化技术前面提到一个名词——池化技术,那么到底什么是池化技术呢 ?池化技术简单点来说,就是提前保存大量的资源,以备不时之需。在机器资源有限的情况下,使用池化技术可以大大的提高资源的利用率,提升性能等。在编程领域,比较典型的池化技术有:线程池、连接池、内存
2021-11-26 15:36:26
398
1
原创 Java内存模型之内存可见性
Java 内存模型JMM(Java Memory Model):Java 内存模型,是 Java 虚拟机规范中所定义的一种内存模型,Java 内存模型是标准化的,屏蔽掉了底层不同计算机的区别。也就是说,JMM 是 JVM 中定义的一种并发编程的底层模型机制。JMM 定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,本地内存中存储了该线程以读/写共享变量的副本。JMM 的规定:所有的共享变量都存储于主内存。这里所说的变量指的是实例变量和类变量,不包含局
2021-11-26 14:13:18
1733
1
原创 并发编程之本地锁,分布式锁
前言在某些场景中,本地锁在单进程情况下,多个线程访问同一资源,可以本地锁实现。① .synchronized关键字② . lock接口分布式锁在多进程情况下,也就是集群环境下,对同一资源的并发请求,用普通的同步锁会失效,因为不同进程里面,就没有什么内存共享之类的说法,要采用分布式锁实现。...
2021-11-25 14:02:51
2031
原创 密码加密几种处理方式
1、首先介绍一下常规的登录认证(非安全性)数据库表如下所示:用户通过表单提交用户名,密码两个字段查询数据库匹配,实现登录认证功能,但存在的安全隐患问题太多:(1)数据库密码以明文的形式进行存储。(2)数据传输的过程中未对数据进行加密处理。2、针对以上两个问题进行分析和解决安全加密:首先对数据库表的password字段进行摘要md5处理,sql语句如下:MD5加密后的数据l 数据库密码加密后,校验的逻辑就发生了些变化,需要对提交的密码进行加密之后再做对比,但是这样子还是不安全。(1)通
2021-11-24 17:55:10
9431
原创 Nginx
location语法Location语法优先级排列匹配符规则优先级=进行普通字符精确匹配1^~表示普通字符匹配,一般用来匹配目录2~表示执行一个正则匹配,区分大小写3~*表示执行一个正则匹配,不区分大小写4!~区分大小写不匹配的正则5!~*不区分大小写不匹配的正则6/通用匹配,任何请求都会匹配到7server { listen 80; server_name pythonav.cn;
2021-11-18 16:10:43
163
原创 Java8两个list集合合并成一个list集合
为什么要用Lambda表达式和Stream流做集合的处理? 因为效率高、代码简洁、高端大气上档次啊!现在有以下一个场景:需要将集合 A:{"id": "12345","name": "zhangsan"}B:{"id": "12345", "age": 23} 合并成一个新的集合C:{"id": "12345","name": "zhangsan", "age": 23} 1、将listA集合转换为map Map<String, Person> map = listA.stre
2021-10-27 11:24:30
13864
1
原创 POSTMAN 接口数据传递(验证码、登录、TOKEN)
问题描述目标:使用 postman 要模拟一个登录的过程过程:登录需要用户名和密码,为了防止机器人登录,需要一个验证码,即登录前需要请求验证码其他接口(几十个)需要登录成功返回的token作为参数传递解决思路使用postman 先调用获取验证码的接口,将验证码返回的数据作为postman的环境变量根据用户名和密码,再获取环境变量中的验证码拿到token,将token设置到环境变量中其他接口将从环境变量中获取token的值,设置到header中在tests中输入var respObj
2021-10-13 18:53:55
5481
1
原创 mysql事务隔离机制及原理
事务特性指的就是ACID。原子性 Atomicity :一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。一致性 Consistency :在事务开始和完成时,数据必须保持一致。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。
2021-09-26 17:14:00
381
原创 Shareding JDBC分库分表
springboot整合sharding-jdbc实现按年分库按月分表(实现、简析篇)1.前言: 此方案为适用对时间依赖度较高的数据进行水平切分,如果你正好符合,那么你可以看看此篇,不符合也可以看看,毕竟sharding-jdbc对分库分表的方案实现度很高,可根据自身实际情况进行数据切分,如果你对以下概念已经有共了解,可直接跳到代码环节2.分库分表概念 在做实现之前,我们需要了解到何为分库分表,为何要这样做,这样做有何利弊? 由于关系型数据库的先天特性,在单表数据量达到一定体量的时候,就会出
2021-09-26 16:47:07
3764
3
原创 Java反射机制及使用
**反射概述**反射是框架的灵魂!* JAVA反射机制:是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 可以拿到类的字节码对象,通过字节码对象拿到这个类中所有的信息。 (类的信息:类名,包名,属性,构造方法,普通方法,继承来的方法)要使用反射: 步骤: 1. 拿到类的字节码对象 2. 取出类中信息 3. 使用类的信息一、获取类的字节码对象*
2021-09-24 10:19:59
151
原创 JavaMail实现邮件发送
一、邮件服务器与传输协议要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。SMTP服务器地址:一般是 smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。SMTP协议通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。POP3协议通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(
2021-09-23 11:48:03
523
原创 Quartz异步定时任务
一、开发概述1.它是由OpenSymphony提供的、开源的、java编写的强大任务调度框架2.几乎可以集成到任何规模的运用程序中,如简单的控制台程序,复杂的大规模分布式电子商务系统3.可用于创建简单的或复杂的计划任务4.包含很多企业级功能,如支持JTA和集群等本篇文章,主要从Quartz框架核心组件,Quartz基本运行原理,Quartz核心概念和Quartz基本功能实现(代码)等方面来介绍Quartz。二 、Quartz原理(一)Quartz关键组件Quartz比较关键的两个核心组件分
2021-09-23 11:22:12
1758
原创 POI导入导出
/*** @Author: ycw* @Description: 导入导出excel工具类* @DateTime: 2021/9/17 10:43**/public class ExcelUtils { //文件存放位置 private static final String FILE_PATH= "d:/tmp"; public static void main(String[] args) { int columnNumber = 6;
2021-09-23 10:29:06
119
原创 Docker容器技术搭建Mysql主从复制集群
前言随着应用业务数据不断的增大,应用的 响应速度不断下降,在检测过程中我们不难发现大多数的请求都是 查询操作。此时,我们可以将数据库扩展成 主从复制模式,将 读操作 和 写操作 分离开来,多台数据库 分摊请求,从而 减少单库 的 访问压力,进而应用得到优化。正文主从复制的方式MySQL 5.6 开始主从复制有两种方式:基于日志(binlog)和 基于 GTID(全局事务标示符)。本文只涉及基于日志 binlog 的 主从配置。主从复制的流程MySQL 同步操作通过 3 个线程实现,其基本步骤如
2021-08-15 23:22:58
201
原创 SpringBoot中try/catch异常并回滚事务(自动回滚/手动回滚/部分回滚)
业务需求实现一个异步任务,先记录任务状态为执行中,直接返回结果给前端,然后异步执行任务的业务逻辑,如果执行过程中抛出异常,捕获异常并更新任务状态为执行失败;若未抛出异常,更新任务状态为执行成功异常处理1、自动回滚 @Transactional(rollbackFor = Exception.class) public void asyncJob() throws Exception { success(); //假如exception这个操作数据库的方法
2021-08-11 18:03:43
10584
3
原创 面向对象之多态的向上向下转型问题
转型实质:父类的引用指向子类对象。注:子类引用不能指向父类对象。1.向上转型:子类对象转换父类对象的过程,父类引用不能调用子类特有的方法,此时会丢失数据;;2.向下转型:父类对象转换子类对象的过程,是基于向上转型,解决丢失数据;示例:Father是Son的父类①正确Father father = new Son ---------向上转型⬆(父类引用指向子类对象)Son son = (Son) father-------------向下转型⬇相当于:Son son = (Son) ne
2021-08-11 09:39:40
230
原创 Java学习之深拷贝浅拷贝及对象拷贝的两种思路
1. 浅拷贝一般来说,浅拷贝方式需要实现Cloneable接口,下面结合一个实例,来看下浅拷贝中哪些是独立的,哪些是公用的@Datapublic class ShallowClone implements Cloneable { private String name; private int age; private List<String> books; public ShallowClone clone() { Shallow
2021-08-11 09:10:18
268
原创 Linux常用命令
Linux常用命令#以下命令在后台执行 root 目录下的程序,并重定向输入到 abcd.log 文件nohup /root/java -jar 项目jar包 > abcd.log 2>&1 &#查看日志tail -fn 200 abcd.log#查看当前运行的所有端口号及进程IDnetstat -ntpl#查看指定端口及进程IDps -ef|gref java#杀死指定进程kill -9 进程ID#从根目录下查找指定文件位置find / -
2021-07-14 17:46:21
173
原创 Docker
Docker常用命令总结① 镜像命令# 下载镜像dokcer pull 镜像名:tag # 列出本地主机上的镜像 docker images # 搜索对应DockerHub仓库中的镜像docker search # 删除镜像docker rmi -f 镜像id # 删除单个docker rmi -f 镜像名:tag 镜像名:tag # 删除多个docker rmi -f $(docker images -qa) # 删除全部② 容器命令# 运行容器命令docke
2021-06-09 19:10:08
1557
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅