自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(278)
  • 资源 (2)
  • 收藏
  • 关注

原创 【spring源码解析】循环依赖原理

比如:A依赖于B、B依赖于c、c依赖于A. 通常来说,如果问spring容器内部如何解决循环依赖, 一定是指默认的单例Bean中,属性互相引用的场景。把B添加到三级缓存addSingletonFactory(beanName, () -> getEarlyBeanReference(beanName, mbd, bean))如上代码所示表示的是对象创建完以后,会把对象添加到单例缓存池中.并且相应的移除二级缓存和三级缓存.如上就是整个spring解决循环依赖的过程。如上代码所示是创建对象的代码.

2022-08-21 18:55:09 397 2

原创 ShardingJDBC

定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC;支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, HikariCP 等;支持任意实现 JDBC 规范的

2022-07-17 21:37:35 13450 4

原创 【Mybatis源码解析】动态SQL工作原理解析

一mybatis动态SQL1.1 什么是动态SQLMyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中。动态 SQL 元素和...

2022-01-24 00:22:40 2021

原创 高性能服务中间件Tomcat工作原理解析(三)

九spring整合tomcat核心9.1 核心思想我们也许有疑问,不管是Springmvc框架还是Springboot框架都需求嵌入一个Tomcat服务中间件,当然也有可能是Jetty,由于本文主要讲的是tomcat所以我们应该想问的是tomcat启动的时候做了什么呢?<web-app> <listener> <listener-class>org.springframework.web.context.ContextLoaderListen.

2021-12-31 19:24:24 1209

原创 高性能服务中间件Tomcat工作原理解析(二)

八tomcat设计模式8.1责任链模式意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。主要解决: 职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。何时使用: 在处理消息的时候以过滤很多道。如何解决: 拦截的类都实现统一接口。关键代码: Handler 里面聚合它自己,在 HandlerReque.

2021-12-31 19:10:36 796

原创 高性能服务中间件Tomcat工作原理解析(一)

Tomcat源码分析一tomcat架构图1.1宏观架构Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:Connector和Container。从上图中可以看出 Tomcat 的心脏就是这两个组件,他们的作用如下:Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化; Container用于封装和管理.

2021-12-31 18:55:05 1249

原创 基于PageRank的搜索与相似的思考实践

PageRank算法一 背景介绍Web上超链接结构是个非常丰富和重要的资源,如果能够充分利用的话,可以极大的提高检索结果的质量。Sergey Brin(谢尔盖·布林 )和Lawrence Page(拉里·佩奇)在1998年提出了PageRank算法,PageRank(TM) 是美国 Google 公司的登记注册商标。1.1 Google查询过程Google 查询的全过程通常不超过半秒时间,但在这短短的时间内需要完成多个步骤,然后才能将搜索结果交付给搜索信息的用户。...

2020-12-13 17:55:05 1054

原创 【docker容器&&微服务部署】

Docker技术1 前言(思考)我们之前是如何将项目发布到Linux服务器的?大致步骤如下:安装jdk安装tomcat将项目war包上传到tomcat的webapps下修改配置文件启动tomcat这样看似没问题,其实我们想想,发一台机器还好,这几步就完成了,如果我们要将这个项目发布到N多台机器,那么我们是否需要在每个机器上都进行相同的步骤,并且要进行环境兼...

2019-09-07 19:17:08 3252 2

原创 让世界动起来工作流流引擎

一 Activiti介绍Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘...

2018-05-05 00:47:49 511

原创 手写Mybatis

一 分析mybatis的工作原理:如上图所示是mybatis的工作原理1 首先程序加载全局的配置文件,形成配置文件类2 通过Mapper的接口形成一个mapper的代理3 通过调用mapper的代理执行对应的方法,此时代理中会发现,method.getdeclareClass并不是一个类,而是一个接口4 此时通过执行mapperMethod,也就是接口的方法

2017-12-25 00:01:25 3934

原创 手写SpringMVC框架

/*1编写注解编写Springmvc常用的注解@controller@requestmapper@Serviceim@autoware通过编写如上所示的注解,来完成springmvc的基本功能package xiao.it.annotation;import java.lang.annotation.Documented;import java.lang.an

2017-12-11 14:32:11 365

原创 docker安装 mysql

windows 和 mac 版可以直接到官网下载 docker desktop。拉取官方镜像(我们这里选择5.7,如果不写后面的版本号则会自动拉取最新版)需要进入docker本地客户端设置远程访问账号。进入docker本地连接mysql客户端。一般来说数据库容器不需要建立目录映射。linux 的安装方法可以参考。使用远程连接软件时要注意一个问题。检查容器是否正确运行。

2024-01-07 20:44:13 526

原创 Spring Boot 集成 WebSocket 实现服务端推送消息到客户端

本文简单地介绍了 Spring Boot 集成 WebSocket 实现服务端主动推送消息到客户端,是不是十分简单呢?大家可以自己也写个 demo 试试!

2023-06-24 13:18:40 2219

原创 【微服务】SpringCloudAlibaba

如上图所示引入nacos以后我们可以看到架构的变更,从传统的SOA调用变更了注册中心方式的服务发现与注册的策略。接下来修改调用的地址,并在httpclient上面添加负载均衡的注解. 这样我们就可以通过服务名来调用远程服务了。从传统的soa架构出发,分析系统的弊端得到,我们怎么样才能更好的管理我们的服务呢?,我们在开发一个应用的时候这个应用应该是由一组小型服务组成,每个小型服务都运行在自己的进程内;如上代码所示我们用订单服务去调用远程的库存服务,实现下订单减库存的功能。就可以看到nacos的集群主机了。

2023-06-05 16:54:27 998 3

原创 AQS 工作原理

而且tryRelease()的返回值代表着该线程是否已经完成资源的释放,因此在自定义同步器的tryRelease()时,需要明确这条件,当已经彻底释放资源(state=0),要返回true,否则返回false。unparkSuccessor用unpark()唤醒等待队列中最前驱的那个未放弃线程,此线程并不一定是当前节点的next节点,而是下一个可以用来唤醒的线程,如果这个节点存在,调用unpark()方法唤醒。如果获取到资源,线程直接返回,否则进入等待队列,直到获取到资源为止,且整个过程忽略中断的影响。

2023-03-19 23:10:20 3923 2

原创 LeedCode 思维训练(三)

特殊位置 定义:如果 mat[i][j] == 1 并且第 i 行和第 j 列中的所有其他元素均为 0(行和列的下标均 从 0 开始 ),则位置 (i, j) 被称为特殊位置。1 给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j] 是 0 或 1,请返回 矩阵 mat 中特殊位置的数目。链接:https://leetcode.cn/problems/special-positions-in-a-binary-matrix。商业转载请联系官方授权,非商业转载请注明出处。

2022-11-23 10:02:37 422

原创 DevOps(三) Jenkins 实现Kubernetes CI/CD

服务的发现与负载的均衡;容器的自动装箱,我们也会把它叫做 scheduling,就是“调度”,把一个容器放到一个集群的某一个机器上,Kubernetes 会帮助我们去做存储的编排,让存储的生命周期与容器的生命周期能有一个连接;在一个集群中,经常会出现宿主机的问题或者说是 OS 的问题,导致容器本身的不可用,Kubernetes 会自动地对这些不可用的容器进行恢复;更具体一点地来说:Kubernetes 是一个自动化的容器编排平台,它负责应用的部署、应用的弹性以及应用的管理,这些都是基于容器的。

2022-09-08 23:54:16 1137

原创 DevOps(二) Jenkins实现Pipeline流水线 CI/CD

指定位置选择对应的步奏生成流水线语法就可以了. 但是由于不通的项目需要经常调整pipeline脚本.所以我们推荐使用jenkinsfile的方式来维护脚本文件.这样的话每个项目就各自有一份了。Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。持久:无论是计划内的还是计划外的服务器重启,Pipeline都是可恢复的。选择git的方式拉取jenkinsfile文件进行流水线构建.

2022-09-08 23:50:59 832

原创 DevOps(一) Jenkins实现docker CI/CD

传统方式是手动下载Gitlab的软件包,然后搭建相关运行环境。如果从字面上来理解,DevOps 只是Dev(开发人员)+Ops(运维人员),实际上,它是一组过程、方法与系统的统称,其概念从2009 年首次提出发展到现在,内容非常丰富,有理论也有实践,包括组织文化、自动化、精益、反馈和分享等不同方面。-v /usr/local/gitlab/etc:/etc/gitlab #将容器/etc/gitlab目录挂载到宿主机/usr/local/gitlab/etc目录下,若宿主机内此目录不存在将会自动创建。

2022-09-08 22:43:04 579

原创 JVM线上问题跟踪

ps是jdk提供的一个查看当前java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写。

2022-07-13 17:26:15 122

原创 JAVA中的锁解析

java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8和Netty 3.10.6)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录 乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的实际应用。先说

2022-07-13 16:07:15 371

原创 【java并发编程】ThreadPoolExecutor

一什么是线程池线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处理任务时创建销毁线程开销的代价,另一方面避免了线程数量膨胀导致的过分调度问题,保证了对内核的充分利用。而本文描述线程池是JDK中提供的ThreadPoolExecutor类。当然,使用线程池.

2022-05-17 10:38:05 1063

原创 深度解析ThreadLocal

ThreadLocal的作用主要是做数据隔离,填充的数据只属于当前线程,变量的数据对别的线程而言是相对隔离的,在多线程环境下,如何防止自己的变量被其它线程篡改。 在Spring实现事务隔离级别的源码中,Spring采用Threadlocal的方式,来保证单个线程中的数据库操作使用的是同一个数据库连接,同时,采用这种方式可以使业务层使用事务时不需要感知并管理connection对象,通过传播级别,巧妙地管理多个事务配置之间的切换,挂起和恢复。 Spring框架里面就是用的Th...

2022-05-13 18:02:34 370

转载 TCP三次握手和四次挥

TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程。简述三次握手过程:在开始讲解之前,先来讲几个重要字段的全称,方便记忆:seq:(sequence number)序号ack:(acknowledgement number)确认号标志位:SYN :(SYNchronization)...

2022-05-09 11:14:43 194

转载 mybatis-spring之一级缓存失效问题

一.前言spring结合mybatis后mybaits一级缓存失效分为两种情况:如果没有开启事务,每一次sql都是用的新的SqlSession,这时mybatis的一级缓存是失效的。如果有事务,同一个事务中相同的查询使用的相同的SqlSessioon,此时一级缓存是生效的。判断是否是同一个SqlSession 可以把日志级别降到debug级别查看相应的SqlSessionId是否为多个二.一级缓存介绍Mybatis提供了一级缓存的方案来优化在数据库会话间重复查询的问题。实现的方式是每

2022-02-04 22:30:58 2875

原创 【Mybatis源码解析】 事务工作原理解析

一事务的使用private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) { Transaction tx = null; try { final Environment environment = configuration.getEnvironment(); final Transacti.

2022-01-19 17:23:55 248

转载 java 一次CPU占用过高问题的排查及解决

最近一段时间 某台服务器上的一个应用总是隔一段时间就自己挂掉 用top看了看 从重新部署应用开始没有多长时间CPU占用上升得很快排查步骤1.使用top 定位到占用CPU高的进程PID  top2.通过ps aux | grep PID命令  获取线程信息,并找到占用CPU高的线程  ps -mp pid -o THREAD,tid,time | sort -rn3.将需要的线程ID转换为16进制格式  printf "%x\n" tid4.打印线...

2022-01-09 10:18:43 276

原创 LeedCode 思维训练(二)

给你一个字符串s,它由数字('0' - '9')和'#'组成。我们希望按下述规则将s映射为一些小写英文字符:字符('a' - 'i')分别用('1' -'9')表示。字符('j' - 'z')分别用('10#'-'26#')表示。返回映射之后形成的新字符串。题目数据保证映射始终唯一。示例 1:输入:s = "10#11#12"输出:"jkab"解释:"j" -> "10#" , "k" -> "11#" , "a" -> "1" , "b" -.........

2022-01-04 09:48:10 1017

转载 【Spring源码解析】Spring框架结构

一 spring框架结构Spring框架的功能大约由20个模块组成,这些模块按组可以分为:Core Container(核心容器):Beans:负责Bean工厂中Bean的装配,所谓Bean工厂即是创建对象的工厂,Bean的装配也就是对象的创建工作; Core:这个模块即是负责IOC(控制反转)最基本的实现; Context:Spring的IOC容器,因大量调用Spring Core中的函数,整合了Spring的大部分功能。Bean创建好对象后,由Context负责建立Bean.

2022-01-03 12:33:36 328

原创 maven插件实现代码生成

一 生成原理1 先编写一套模版代码2 在模版代码中加入特殊占位符3 连接数据库读表和字段,对占位符做替换二 具体实现1 编写maven代码2 集成到maven插件 引入pom.xml文件3 双击运行可生成代码三 实现代码解析项目结构如下所示 上面是代码下面是模版插件1 定义模版我这里用的是mybatis-plus所以有那么几个文件是需要自动生成的,这个根据大家自己所需要的自己根据自己公司的需要定制自己的模版就可以了.daopackage pac.

2022-01-03 11:13:57 2191

原创 springmvc工作原理(源码解析)

一spring-web工作原理1.1 tomcat & springmvc配置 SpringMVC在Java后端中,是一个很重要也很常用的框架,本篇来分析一下SpringMVC的源码。web.xml配置,虽然使用SpringMVC不需要我们写Servlet,但SpringMVC是封装了Servlet,提供 DispatcherServlet 来帮我们处理的。所以需要在 web.xml 配置 DispatcherServlet。可以看出 DispatcherServlet,映射的ur...

2022-01-03 00:23:06 1054 2

转载 springmvc学习笔记(一)

1、Spring Web MVC是什么Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。另外还有一种基于组件的、事件驱动的Web框架在此就不

2022-01-01 10:47:09 89

原创 JWT+RSA 无状态SSO原理

1.1.有状态登陆有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务端,多次请求必须访问

2021-10-11 09:17:58 629 1

原创 手写校验框架

一 需求设计思想 目的是做一个审核中台,根据定制的模版,对业务方传过来的数据根据模版进行一个校验,远程传过来的数据结构大致样式如下可以看出是一个json数据每一个大致的样式是每一个大Key对应一个对象,通过代码解析一般可以把它解析成<key,Object> 的形势。{ "PHOTO_ONLINE_TRANSPORT_PERMIT": { "items": { "online_taxi_transport_city": "", "full_n...

2021-09-26 00:16:57 196

原创 LeedCode 思维训练(一)

给你一个整数num,请你找出同时满足下面全部要求的两个整数:两数乘积等于 num + 1或num + 2以绝对差进行度量,两数大小最接近你可以按任意顺序返回这两个整数。示例 1:输入:num = 8输出:[3,3]解释:对于 num + 1 = 9,最接近的两个因数是 3 & 3;对于 num + 2 = 10, 最接近的两个因数是 2 & 5,因此返回 3 & 3 。示例 2:输入:num = 123输出:[5,25]示例 3:输入:num...

2021-08-06 11:24:28 1428

原创 Linux生产常用命令

linux常用指令find*-typef|xargsgrep"sing_player"查找包含指定内容的文件zcat*.log.gz|grep"xxx"-C3 解压压缩文件找内容 -A 后几行 -B 前几行 -C中间扩展几行tail-fdefault.conf 监控某个日志文件的变化,时实监控变化vimdefault.conf/按n查找,挨个查找想要查找的文本字符find/-namenginx.conf查找指定名字的文件netstat-tpn...

2021-08-05 20:39:51 278

转载 mysql 索引

select id,name where name='shenjian'select id,name,sex* where name='shenjian'*多查询了一个属性,为何检索过程完全不同?什么是回表查询?什么是索引覆盖?如何实现索引覆盖?哪些场景,可以利用索引覆盖来优化SQL?这些,这是今天要分享的内容。画外音:本文试验基于MySQL5.6-InnoDB。一、什么是回表查询?这先要从InnoDB的索引实现说起,InnoDB有两大类索引: 聚集索引(clu

2021-03-20 19:22:23 109

转载 MySQL 用 limit 分页为什么会影响性能?

一,前言首先说明一下MySQL的版本:mysql> select version();+-----------+| version() |+-----------+| 5.7.17 |+-----------+1 row in set (0.00 sec)表结构:mysql> desc test;+--------+---------------------+------+-----+---------+----------------+| F..

2021-03-20 19:17:15 228

原创 【spring源码解析】Spring事务

Spring事务实现原理一 申明式事务 TransactionProxyFactoryBean <!-- 定义事务管理器(声明式的事务) --><beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><propertyname="sessionFactory"><ref...

2021-02-23 09:19:07 340

原创 【spring源码解析】SpringAOP 框架原理

SpringAOP框架与实现原理一 什么是AOPAop面向切面编程,使用AOP我们可以对类似于日志,风控等系统需求进行模块化组织。简化系统需求与实现之间的对比关系。进而使得整个系统的实现更具模块化。使用传统的方式我们无法对类似日志,安全检查,事务管理等的横切关注点进行组织和实现。所以AOP引入了Aspect的概念。用来以模块化的方式对系统进行组织和封装。简单的说就是一些所有业务操作的公共操作。二 SpringAOP的公民2.1 joinPoint 连接点系统运行之前AOP...

2021-02-18 11:52:16 395

JVM内存参数

是一片描述java的jvm参数的文章,与解释jvm调优的文章

2017-11-25

GC算法与种类

java,GC,算法,可触及性,stop-the-world是一篇描述GC工作的文章

2017-11-25

空空如也

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

TA关注的人

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