自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Netty核心原理

Netty核心原理Netty介绍原生NIO存在的问题NIO的类库和API繁杂,使用麻烦:需要掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。需要具备其他的额外技能:要熟悉java多线程编程,因为NIO编程涉及到Reactor模式,你必须对多线程和网络编程欸长熟悉,才能编写出高质量的NIO程序。开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等等JDK NIO的Bug:臭名昭著

2022-05-25 13:38:25 214

原创 RestTemplate远程接口调度

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-08-18 10:49:22 259

原创 Socket回顾与I/0模型(一)

Socket回顾与I/0模型Socket网络编程回顾Socket概述:Socket,套接字就是两台主机之间逻辑连接的端点。TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。Socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议、本地主机的IP地址、本地进程的协议端口、远程主机的IP地址、远程进程的协议端口。Socket整体流程: Socket编程主

2021-07-06 16:44:13 269

原创 Tomcat 连接器组件 Coyote

Tomcat 连接器组件 CoyoteCoyote 简介Coyote 是Tomcat 中连接器的组件名称 , 是对外的接⼝。客户端通过Coyote与服务器建⽴连接、发送请求并接受响应 。(1)Coyote 封装了底层的⽹络通信(Socket 请求及响应处理)(2)Coyote 使Catalina 容器(容器组件)与具体的请求协议及IO操作⽅式完全解耦(3)Coyote 将Socket 输⼊转换封装为 Request 对象,进⼀步封装后交由Catalina 容器进⾏处理,处理请求完成后, Catal

2021-07-01 16:56:07 431

原创 Tomcat 服务器核⼼配置详解

Tomcat 服务器核⼼配置详解问题⼀:去哪⼉配置? 核⼼配置在tomcat⽬录下conf/server.xml⽂件问题⼆:怎么配置?注意:Tomcat 作为服务器的配置,主要是 server.xml ⽂件的配置;server.xml中包含了 Servlet容器的相关配置,即 Catalina 的配置;Xml ⽂件的讲解主要是标签的使⽤主要标签结构如下:<!-- Server 根元素,创建⼀个Server实例,⼦标签有 Listener、GlobalNamingResources

2021-07-01 16:55:23 135

原创 Session共享问题

Session共享问题Session共享及Session保持或者叫做Session⼀致性Session问题原因分析出现这个问题的原因,从根本上来说是因为Http协议是⽆状态的协议。客户端和服务端在某次会话中产⽣的数据不会被保留下来,所以第⼆次请求服务端⽆法认识到你曾经来过, Http为什么要设计为⽆状态协议?早期都是静态⻚⾯⽆所谓有⽆状态,后来有动态的内容更丰富,就需要有状态,出现了两种⽤于保持Http状态的技术,那就是Cookie和Session。⽽出现上述不停让登录的问题,分析如下图:场景:n

2021-06-29 20:04:30 238

原创 分布式调度任务分片及弹性扩容

分布式调度任务分片⼀个⼤的⾮常耗时的作业Job,⽐如:⼀次要处理⼀亿的数据,那这⼀亿的数据存储在数据库中,如果⽤⼀个作业节点处理⼀亿数据要很久,在互联⽹领域是不太能接受的,互联⽹领域更希望机器的增加去横向扩展处理能⼒。所以,ElasticJob可以把作业分为多个的task(每⼀个task就是⼀个任务分⽚),每⼀个task交给具体的⼀个机器实例去处理(⼀个机器实例是可以处理多个task的),但是具体每个task执⾏什么逻辑由我们⾃⼰来指定。Strategy策略定义这些分⽚项怎么去分配到各个机器上去,默

2021-06-29 19:54:21 1172 1

原创 分布式调度框架Elastic-Job

分布式调度框架Elastic-JobElastic-Job介绍Elastic-Job是当当⽹开源的⼀个分布式调度解决⽅案,基于Quartz⼆次开发的,由两个相互独⽴的⼦项⽬Elastic-Job-Lite和Elastic-Job-Cloud组成。我们要学习的是 Elastic-Job-Lite,它定位为轻量级⽆中⼼化解决⽅案,使⽤Jar包的形式提供分布式任务的协调服务,⽽Elastic-Job-Cloud⼦项⽬需要结合Mesos以及Docker在云环境下使⽤。Elastic-Job的github地址:

2021-06-29 19:50:16 293 1

原创 分布式调度问题

分布式调度问题调度—>定时任务,分布式调度—>在分布式集群环境下定时任务这件事Elastic-job(当当⽹开源的分布式调度框架)定时任务的场景定时任务形式:每隔⼀定时间/特定某⼀时刻执⾏例如订单审核、出库订单超时⾃动取消、⽀付退款礼券同步、⽣成、发放作业物流信息推送、抓取作业、退换货处理作业数据积压监控、⽇志监控、服务可⽤性探测作业定时备份数据⾦融系统每天的定时结算数据归档、清理作业报表、离线数据分析作业什么是分布式调度什么是分布式任务调度?有两层含义1)运

2021-06-29 19:49:43 218 1

原创 集群时钟同步问题

集群时钟同步问题时钟此处指服务器时间,如果集群中各个服务器时钟不⼀致势必导致⼀系列问题,试想 “集群是各个服务器⼀起团队化作战,⼤家⼯作都不在⼀个点上,岂不乱了套!”举⼀个例⼦,电商⽹站业务中,新增⼀条订单,那么势必会在订单表中增加了⼀条记录,该条记录中应该会有“下单时间”这样的字段,往往我们会在程序中获取当前系统时间插⼊到数据库或者直接从数据库服务器获取时间。那我们的订单⼦系统是集群化部署,或者我们的数据库也是分库分表的集群化部署,然⽽他们的系统时钟缺不⼀致,⽐如有⼀台服务器的时间是昨天,那么这个时候下

2021-06-29 19:27:26 98

原创 Nginx 配置⼀致性Hash负载均衡策略

Nginx 配置⼀致性Hash负载均衡策略ngx_http_upstream_consistent_hash 模块是⼀个负载均衡器,使⽤⼀个内部⼀致性hash算法来选择合适的后端节点。该模块可以根据配置参数采取不同的⽅式将请求均匀映射到后端机器,consistent_hash $remote_addr:可以根据客户端ip映射consistent_hash $request_uri:根据客户端请求的uri映射consistent_hash $args:根据客户端携带的参数进⾏映ngx_http_up

2021-06-29 19:08:32 225

原创 手写实现一致性Hash算法

手写实现一致性Hash算法普通Hash算法实现/*** 普通Hash算法实现*/public class GeneralHash { public static void main(String[] args) { // 定义客户端IP String[] clients = new String[]{"10.78.12.3","113.25.63.1","126.12.3.8"}; // 定义服务器数量 int serverCount = 5;// (编号对应0,1,2) // ha

2021-06-29 19:06:22 203

原创 ⼀致性Hash算法

⼀致性Hash算法Hash算法,⽐如说在安全加密领域MD5、SHA等加密算法,在数据存储和查找⽅⾯有Hash表等, 以上都应⽤到了Hash算法。为什么需要使⽤Hash?Hash算法较多的应⽤在数据存储和查找领域,最经典的就是Hash表,它的查询效率⾮常之⾼,其中哈希算法如果设计的⽐较ok的话,那么Hash表的数据查询时间复杂度可以接近于O(1)Hash算法应用场景Hash算法在分布式集群架构中的应用场景Hash算法在很多分布式集群产品中都有应用,比如分布式集群架构Redis、Hadoop、Ela

2021-06-29 19:04:07 298 1

原创 分布式和集群

分布式和集群分布式和集群是不⼀样的,分布式⼀定是集群,但是集群不⼀定是分布式(因为集群就是多个实例一起⼯作,分布式将⼀个系统拆分之后那就是多个实例;集群并不⼀定是分布式,因为复制型的集群不是拆分⽽是复制)...

2021-06-29 18:57:00 93

原创 Tomcat--系统总体架构

Tomcat系统总体架构Tomcat请求处理的大致过程tomcat是一个Http服务器(能够接收并且处理Http请求,所以tomcat是一个Http服务器),我们使用浏览器向某个网站发起请求,发出的是Http请求,那么在远程Http服务器接收到这个请求之后,会调用具体的程序进行处理,往往不同的请求由不同的java类完成处理Http服务器接收到请求之后把请求交给Servlet容器来处理,Servlet容器通过Servlet接口调用业务类 ,Servlet接口和Servlet容器这一整套内容叫做Ser

2021-06-23 14:46:56 244

原创 Tomcat-浏览器访问服务器的流程

浏览器访问服务器的流程http请求处理的过程浏览器访问服务器使用的是Http协议,Http是应用层协议,用于定义数据通信的格式,具体的数据传输使用的是TCP/IP协议

2021-06-23 14:26:04 382

原创 SpringBoot热部署IDEA配置及热部署原理

SpringBoot热部署IDEA配置及原理热部署在开发项目过程中,当修改了某些代码后需要本地验证时,需要重启本地的服务进行验证,启动这个项目,如果项目庞大的话还是需要较长时间,spring开发团队为我们提供了一个插件:spring-boot-devtools,很好的解决了本地验证缓慢的问题。热部署实现演示添加spring-boot-devtools热部署依赖启动器在Spring Boot 项目进行热部署测试之前,需要先在项目的pom.xml文件中添加spring-boot-devtools热部署

2021-06-13 12:19:02 445 3

原创 SpringBoot应用回顾

SpringBoot应用回顾约定优于配置概念 : 约定优于配置(Convention over Configutation),又称按约定编程,是一种软件设计规范,本质上是对系统、类库或者框架中的一些东西假定一个大众化合理的默认值(缺省值)例如在模块中存在一个名为User的类,那么对应到数据库会存在一个名为user的表,此时无需做额外的配置,只有在隔离这个约定时才需要做相关的配置,例如你想要将表明命名为t_user等非user时才需要写 关于这个名字的配置。如果所用工具的约定与你的期待相符,变更个省区

2021-06-13 11:56:12 184

原创 Spring Data JPA-- 执行过程源码分析

Spring Data JPA-- 执行过程源码分析Spring Data Jpa 源码很少有人去分析,原因如下:1)Spring Data Jpa 地位没有之前学习的框架⾼,⼤家习惯把它当成⼀个⼯具来⽤了,不愿意对它进进源码层次的解读2)开发Dao接口(ResumeDao),接口的实现对象肯定是通过动态代理来完成的(增强),代理对象的产生过程追源码很难追,特别特别讲究技巧源码剖析的主要的过程,就是代理对象产生的过程,我们发现resumeDao是⼀个代理对象,这个代理对象的类型是SimpleJapR

2021-05-30 15:18:26 666 2

原创 Spring Data JPA--概述及应用

Spring Data JPA–概述及应用什么是 Spring Data JPA?Spring Data JPA 是 Spring 基于JPA 规范的基础上封装的⼀套 JPA 应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作。它提供了包括增删改查等在内的常⽤功能!学习并使用Spring Data JPA 可以极⼤提高开发效率。说明:Spring Data JPA 极⼤简化了数据访问层代码。如何简化呢?使用了Spring Data JPA,我们Dao层中只需要写接口,不需要写实现类,就⾃

2021-05-30 15:04:01 223

原创 SpringMVC--SpringMVC源码剖析

SpringMVC–SpringMVC源码剖析前端控制器DispatcherServlet继承结构重要时机点分析Handler方法的执行时机doDispathch方法中的1064行代码完成handler方法的调用。SpringMVC处理请求的流程即为org.springframework.web.servlet.DispatcherServlet#doDispatch方法的执行过程。调用getHandler()获取能够处理当前请求的执行链HandlerExecutionChain(Han

2021-05-30 14:43:39 154

原创 SpringMVC--手写实现MVC框架

SpringMVC–手写实现MVC框架手写实现MVC框架之前我们先来回顾一下SpringMVC框架的原理。后续我们再模仿SpringMVC实现自定义的MVC框架。具体流程如下:首先我们构建一个maven工程,引入相关的坐标,自定义一个Servlet为前端控制器,并且再web.xml中对前端控制器的Servlet进行配置并且创建配置文件mvc.properties,并加入到web.xml中进行配置,详细代码如下pom.xml<?xml version="1.0" encoding="UTF-

2021-05-27 10:47:02 207 3

原创 SpringMVC--异常处理以及跨重定向请求数据传递

SpringMVC–异常处理以及基于Flash跨重定向请求数据传递在控制器中处理异常SpringMVC中可以让我们优雅的捕获所有Controller对象handler方法抛出的异常这里我们使用Controller增强器@ControllerAdvice注解,给Controller控制器添加统一的操作或处理。这里我们的@ControllerAdvice用法是结合@ExceptionHandler用于全局异常的处理,但其作用不止于此。1.@ExceptionHandler,用于捕获Controller

2021-05-27 09:54:02 143

原创 Spring MVC--Multipart数据处理分析

Spring MVC 高级技术–Multipart数据处理分析Multipart数据处理其实就是SpringMVC的文件上传。是SpringMVC对原生Servlet的封装,使用起来更加方便。下面我们一起来看一下实现文件上传的整个代码实现流程:首先我们需要再pom.xml中引入一个jar包 <!--文件上传所需要jar--> <dependency> <groupId>commons-fileupload</groupId>

2021-05-26 10:26:13 300

原创 Spring MVC--拦截器(Inteceptor)使用

Spring MVC 高级技术–拦截器(Inteceptor)使用监听器、过滤器和拦截器对比Servlet:处理Request请求和Response响应过滤器(Filter):对Request请求起到过滤作用,作用再Servlet之前,如果配置为/*可以对所有的资源访问(servlet、js/css静态资源等)进行过滤处理监听器(Listener):实现了java.servlet.ServletContextListener接口的服务器端组件,它随Web应用的启动而启动,只初始化一次,然后会一致运

2021-05-26 09:35:50 488 1

原创 Spring MVC应用--Ajax Json交互

Spring MVC应用–Ajax Json交互AjaxJson交互分为两个方向1)前端到后台:前端ajax发送json格式字符串,后台直接接收为pojo参数,使用注解@RequstBody2)后台到前端:后台直接返回pojo对象,前端直接接收为json对象或者字符串,使用注解@ResponseBody什么是 JsonJson是⼀种与语⾔⽆关的数据交互格式,就是⼀种字符串,只是⽤特殊符号{}内表示对象、[]内表示数组、""内是属性或值、:表示后者是前者的值{“name”: “Michael”}

2021-05-26 09:15:49 119

原创 Spring MVC应用--深刻理解Rest风格请求

Spring MVC应用–深刻理解Rest风格请求Restful 是⼀种 web 软件架构⻛格,它不是标准也不是协议,它倡导的是⼀个资源定位及资源操作的风格。对Restful风格请求支持rest风格请求是什么样的?springmvc对rest风格请求到底提高了怎样的支持?什么是Restful?REST(英⽂:Representational State Transfer,简称 REST)描述了一个架构样式的⽹络系统, 比如web 应用程序。它首次出现在 2000 年 Roy Fielding 的

2021-05-25 18:12:28 290 4

原创 Spring MVC应用--请求参数绑定

Spring MVC应用–请求参数绑定请求参数绑定说白了SpringMVC如何接收请求参数接收参数案例原生Servlet接收整型参数String ageStr = request.getParameter(“age”);Integer age = Integer.parseInt(ageStr);SpringMVC接收整型参数首先SpringMVC框架是对Servlet的封装,简化了Servlet的很多参数SpringMVC在接收整型参数的时候,直接在Handler方法中声明形参即可,如

2021-05-25 15:01:03 154 2

原创 Spring MVC应用--MVC体系结构

Spring MVC应用–MVC体系结构SpringMVC是Spring为我们提供的一个用于简化Web开发的框架。Spring MVC简介MVC体系结构三层架构我们开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务器;另一种是B/S架构,也就是浏览器服务器,在JavaEE开发中,几乎全都是基于B/S架构的开发,那么在B/S架构中,系统标准的三层架构包括:表现层、业务层、持久层。三层架构在我们实际的开发中使用的非常多,所以我们课程中的案例也都是基于三层架构设计的。三层架构中,每一层

2021-05-25 14:04:23 750 1

原创 Spring学习笔记--声明式事务源码

Spring学习笔记–声明式事务源码声明式事务很⽅便,尤其纯注解模式,仅仅几个注解就能控制事务了思考:这些注解都做了什么?好神奇!@EnableTransactionManagement @Transactional@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(TransactionManagementConfigurationSelector.class)public @inte

2021-05-20 19:03:51 238 3

原创 Spring学习笔记--源码解析aop代理对象创建流程

Spring学习笔记–源码解析aop代理对象创建流程代理对象创建AOP基础用例准备Bean定义@Componentpublic class LagouBean { public void tech(){ System.out.println("java learning......"); }}Aspect定义package com.lagou;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.

2021-05-20 18:50:00 216 1

原创 Spring学习笔记--事务回顾(事务特性、并发问题、隔离级别、传播行为)

Spring学习笔记–事务回顾(事务特性、并发问题、隔离级别、传播行为)Spring 声明式事务的支持编程式事务:在业务代码中添加事务控制代码,这样的事务控制机制就叫做编程式事务声明式事务:通过xml或者注解配置的⽅式达到事务控制的⽬的,叫做声明式事务事务的概念事务指逻辑上的⼀组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功。从而确保了数据的准确与安全。例如:A——B转帐,对应于如下两条sql语句/*转出账户减钱*/ update account set money=money

2021-05-20 17:48:44 215 1

原创 Spring学习笔记--SpringAOP应用

Spring学习笔记–SpringAOP应用AOP本质:在不改变原有业务逻辑的情况下增强横切逻辑,横切逻辑代码往往是权限校验代码、日志代码、事务控制代码、性能监控代码。AOP相关术语上图描述的就是未采⽤AOP思想设计的程序,当我们红⾊框中圈定的⽅法时,会带来⼤量的重复劳动。程序中充斥着⼤量的重复代码,使我们程序的独⽴性很差。⽽下图中是采⽤了AOP思想设计的程序,它把红框部分的代码抽取出来的同时,运⽤动态代理技术,在运⾏期对需要使⽤的业务逻辑⽅法进⾏增强。AOP术语Joinpoint连接点:它

2021-05-20 16:25:14 277 1

原创 Spring学习笔记--SpringIOC源码(二)

Spring学习笔记–SpringIOC源码(二)lazy-init延迟加载机制原理分析普通 Bean 的初始化是在容器启动初始化阶段执⾏的,⽽被lazy-init=true修饰的 bean 则是在从容器⾥第⼀次进行context.getBean() 时进⾏触发。Spring 启动的时候会把所有bean信息(包括XML和注解)解析转化成Spring能够识别的BeanDefinition并存到Hashmap里供下⾯的初始化时⽤,然后对每个BeanDefinition 进⾏处理,如果是懒加载的则在容器初始

2021-05-20 13:33:43 142 1

原创 Spring学习笔记--SpringIOC源码(一)

Spring学习笔记–SpringIOC源码再查看源码的过程中我们应该遵守定焦原则和宏观原则,抓主线,关注源码结构和业务流程,通过断点、反调、和经验来阅读源码以此来提高培养代码架构思维并深入的理解框架。SpringIOC容器初始化主体流程Spring IoC的容器体系IoC容器是Spring的核⼼模块,是抽象了对象管理、依赖关系管理的框架解决⽅案。Spring 提供了很多的容器,其中 BeanFactory 是顶层容器(根容器),不能被实例化,它定义了所有 IoC 容器 必须遵从的⼀套原则,具体的容

2021-05-20 12:37:23 282 3

原创 Spring学习笔记--高级特性之后置处理器(SpringBean的生命周期)

Spring学习笔记–高级特性之后置处理器Spring提供了两种后处理bean的扩展接⼝,分别为 BeanPostProcessor 和BeanFactoryPostProcessor,两者在使⽤上是有所区别的。工厂初始化(BeanFactory)—> Bean对象在BeanFactory初始化之后可以使⽤BeanFactoryPostProcessor进⾏后置处理做⼀些事情在Bean对象实例化(并不是Bean的整个⽣命周期完成)之后可以使⽤BeanPostProcessor进⾏后置处理做⼀些

2021-05-19 21:33:07 270

原创 Spring学习笔记--高级特性之FactoryBean

Spring学习笔记–高级特性之FactoryBeanFactoryBean和BeanFactoryBeanFactory接⼝是容器的顶级接⼝,定义了容器的⼀些基础⾏为,负责⽣产和管理Bean的⼀个⼯⼚,具体使⽤它下⾯的⼦接⼝类型,⽐如ApplicationContext;此处我们重点分析FactoryBeanFactoryBean Spring中Bean有两种,⼀种是普通Bean,⼀种是⼯⼚Bean(FactoryBean),FactoryBean可以⽣成某⼀个类型的Bean实例(返回给我们),也就

2021-05-19 15:20:41 312

原创 Spring学习笔记--高级特性之Lazy-init延迟加载

Spring学习笔记–高级特性之Lazy-init延迟加载Lazy-init延迟加载,Bean的延迟加载(延迟创建)ApplicationContext 容器的默认⾏为是在启动服务器时将所有 singleton bean 提前进⾏实例化。提前实例化意味着作为初始化过程的⼀部分,ApplicationContext 实例会创建并配置所有的singletonbean。xml方式启动IOC容器配置延迟加载的方式<bean id="testBean" class="cn.lagou.LazyBean"

2021-05-19 14:53:42 428 1

原创 Spring学习笔记--Spring IOC基础

Spring学习笔记–Spring IOC基础结合之前的手写ioc案例,Spring学习笔记–手写实现 IoC 和 AOPSpring框架IOC实现:bean的定义纯XML(bean信息定义全部配置在XML中)xml+注解 部分bean使用xml定义,部分bean使用注解定义纯注解方式 多有的bean都是用注解来定义不同的bean的定义方式导致了IOC容器BeanFactory中不同的启动方式BeanFactory :通过反射技术来实例化对象并维护对象之间的依赖关系。**xml **

2021-05-19 14:30:26 235 1

原创 从简单案例了解设计模式--代理模式

从简单案例了解设计模式–代理模式我们这里使用租房案例来描述代理模式,将代理描述成中介找房的情况从而加深对代理模式的理解,代理模式可以在业务代码执行之前之后对原有的代码实现增强,代理模式分为静态代理和动态代理。我们从这两种代理方式出发看一下租房案例的代理模式实现,详情如下:静态代理对租房这个业务会存在一个实际的java类,专门去实现租房类的代理,每个类对应一个代理类。首先定义租房接口及实现类/** * 接口:租房 */public interface IRentingHouse { v

2021-05-18 13:06:09 113 1

空空如也

空空如也

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

TA关注的人

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