Java
文章平均质量分 78
Java硬件工程师
中国科学技术大学毕业,原支付宝Java开发工程师,立志做一名资深全栈工程师
展开
-
Java设计模式-状态模式
【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能进行开门操作,而如果电梯门是停止状态,就可以执行开门操作。原创 2023-08-27 23:09:23 · 2078 阅读 · 0 评论 -
Java设计模式-职责链模式
又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。原创 2023-08-26 15:23:06 · 881 阅读 · 0 评论 -
分布式定时任务
本文引用了谷粒商城的课程。原创 2023-04-06 10:18:01 · 1162 阅读 · 1 评论 -
Redis分布式锁系列
分布式场景下,还需要用到读写锁、信号量等机制,使用上述方案只能实现简单的分布式锁,因此我们需要借助Redissson框架。完成我们所有的分布式功能。Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。原创 2023-04-04 21:49:57 · 1046 阅读 · 0 评论 -
Java设计模式-观察者模式
又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。原创 2023-03-31 16:45:35 · 561 阅读 · 0 评论 -
Java设计模式-责任链模式
又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。原创 2023-03-31 09:37:02 · 351 阅读 · 0 评论 -
Java设计模式-模板方法模式
在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。原创 2023-03-30 20:59:01 · 249 阅读 · 0 评论 -
Drools实战
Drools实战1 个人所得税计算器本小节我们需要通过Drools规则引擎来根据规则计算个人所得税,最终页面效果如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M1HjKK8N-1653749251774)(…/media/pictures/Drools.assets/image-20200214132448956.png)]1.1 名词解释税前月收入:即税前工资,指交纳个人所得税之前的总工资应纳税所得额:指按照税法规定确定纳税人在一定期间所获得的所有应税.原创 2022-05-28 22:49:59 · 646 阅读 · 1 评论 -
Spring整合Drools
1 Spring简单整合Drools在项目中使用Drools时往往会跟Spring整合来使用。具体整合步骤如下:第一步:创建maven工程drools_spring并配置pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"原创 2022-05-28 22:46:27 · 868 阅读 · 0 评论 -
Drools高级语法
前面章节我们已经知道了一套完整的规则文件内容构成如下:关键字描述package包名,只限于逻辑上的管理,同一个包名下的查询或者函数可以直接调用import用于导入类或者静态方法global全局变量function自定义函数query查询rule end规则体本章节我们就来学习其中的几个关键字。1 global全局变量global关键字用于在规则文件中定义全局变量,它可以让应用程序的对象在规则文件中能够被访问。可以用来为规则文件提供数据原创 2022-05-28 22:43:59 · 882 阅读 · 0 评论 -
Drools基础语法
1 规则文件构成在使用Drools时非常重要的一个工作就是编写规则文件,通常规则文件的后缀为.drl。drl是Drools Rule Language的缩写。在规则文件中编写具体的规则内容。一套完整的规则文件内容构成如下:关键字描述package包名,只限于逻辑上的管理,同一个包名下的查询或者函数可以直接调用import用于导入类或者静态方法global全局变量function自定义函数query查询rule end规则体Drool原创 2022-05-28 22:38:51 · 1107 阅读 · 0 评论 -
分布式与微服务-基础概念
分布式基础概念微服务微服务架构风格,就像是把一个单独的应用程序开发成一套小服务,每个小服务运行在自己的进程中,并使用轻量级机制通信,通常是 HTTP API 这些服务围绕业务能力来构建, 并通过完全自动化部署机制来独立部署,这些服务使用不同的编程语言书写,以及不同数据存储技术,并保持最低限度的集中式管理简而言之,拒绝大型单体应用,基于业务边界进行服务微化拆分,每个服务独立部署运行。集群&分布式&节点集群是个物理状态,分布式是个工作方式只要是一堆机器,也可以叫做集群,他们是不是一原创 2022-05-03 21:51:19 · 1145 阅读 · 0 评论 -
JUC之AQS
可重入锁可重入锁理论可重入锁又名递归锁,是指在同一个线程在外层方法获取锁的时候,再进入该线程的的内层方法会自动获取锁(前提是锁对象得是同一个对象),不会因为之前已经获取过还没释放而阻塞。Java中ReentrantLock和synchronized都是可重入锁,可重入锁的一个优点是可一定程度避免死锁。将字分开解释:可:可以重:再次入:进入锁:同步锁进入什么? - 进入同步域(即同步代码块/方法或显示锁锁定的代码)一个线程中的多个流程可以获取同一把锁,持有这把同步锁可以再次进入。自己可以原创 2022-03-30 22:09:12 · 230 阅读 · 0 评论 -
IDEA断点调试
1. Debug 的设置设置 Debug 连接方式,默认是 Socket。Shared memory 是 Windows 特有的一个属性,一般在 Windows 系统下建议使用此设置,内存占用相对较少。原创 2021-07-26 19:36:26 · 677 阅读 · 1 评论 -
dubbo原理
1.RPC原理一次完整的RPC调用流程(同步调用,异步另说)如下:服务消费方(client)调用以本地调用方式调用服务;client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;client stub找到服务地址,并将消息发送到服务端;server stub收到消息后进行解码;server stub根据解码结果调用本地的服务;本地服务执行并将结果返回给server stub;server stub将返回结果打包成消息并发送至消费方;client stub接收到原创 2021-07-26 15:31:19 · 248 阅读 · 1 评论 -
dubbo高可用
zookeeper宕机与dubbo直连现象:zookeeper注册中心宕机,还可以消费dubbo暴露的服务。原因:健壮性监控中心宕掉不影响使用,只是丢失部分采样数据数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务注册中心对等集群,任意一台宕掉后,将自动切换到另一台注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯服务提供者无状态,任意一台宕掉后,不影响使用服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复高可用:通过设计,减原创 2021-07-26 14:56:35 · 115 阅读 · 0 评论 -
dubbo配置
dubbo配置官网参考:http://dubbo.apache.org/zh-cn/docs/user/references/xml/dubbo-service.html1、配置原则将XML配置的标签名,加属性名,用点分割,多个属性拆成多行。比如:dubbo.application.name=foo等价于<dubbo:application name=“foo”/>JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。XML 次之,如果原创 2021-07-26 12:14:22 · 706 阅读 · 0 评论 -
dubbo基础
1、分布式基础理论1.1、什么是分布式系统?《分布式系统原理与范型》定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”分布式系统(distributed system)是建立在网络之上的软件系统。随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。1.2.发展演变单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用原创 2021-07-25 22:09:22 · 481 阅读 · 1 评论 -
Springboot2数据访问
数据库场景的自动配置分析与整合测试导入JDBC场景<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId></dependency>在这个场景里面帮助我们导入了以下内容接着导入数据库驱动包(MySQL为例)为什么导入JDBC场景,官方不给我们原创 2021-07-24 18:42:34 · 430 阅读 · 2 评论 -
Springboot2Web原生组件注入
官方文档 - Servlets, Filters, and listeners使用原生的注解Servlet API@ServletComponentScan(basePackages = “com.atguigu.admin”) :指定原生Servlet组件都放在那里@WebServlet(urlPatterns = “/my”):效果:直接响应,没有经过Spring的拦截器?@WebFilter(urlPatterns ={"/css/","/images/"})@WebListenerMyS原创 2021-07-22 15:28:18 · 194 阅读 · 3 评论 -
Springboot2拦截器与文件上传
拦截器-登录检查与静态资源放行1.编写一个拦截器实现HandlerInterceptor接口2.拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors())3.指定拦截规则(注意,如果是拦截所有,静态资源也会被拦截】还是以上一节Springboot视图解析与模板引擎为例,访问除登录页面外的其它任何请求,都应该是登录之后才能访问的。我们可以使用拦截器对请求进行拦截,从而进行相应的处理。public interface HandlerInterceptor {原创 2021-07-21 19:11:37 · 339 阅读 · 2 评论 -
Springboot视图解析与模板引擎
1.视图解析视图解析:SpringBoot默认不支持 JSP,需要引入第三方模板引擎技术实现页面渲染。视图解析原理流程1.目标方法处理的过程中,所有数据都会被放在 ModelAndViewContainer 里面。包括数据和视图地址2.方法的参数是一个自定义类型对象(从请求参数中确定的),把把重新放在 ModelAndViewContainer3.任何目标方法执行完成以后都会返回 ModelAndView(数据和视图地址)4.processDispatchResult 处理派发结果(页面如何响原创 2021-07-21 09:50:29 · 607 阅读 · 3 评论 -
Java设计模式-模板方法模式
1 概述在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。定义:定义一个操作中的算法骨架,而将算法的一些步骤原创 2021-07-04 19:20:10 · 211 阅读 · 1 评论 -
Java设计模式-策略模式
1 概述先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管原创 2021-07-04 17:49:43 · 237 阅读 · 2 评论 -
Java设计模式-装饰者模式
1 概述我们先来看一个快餐店的例子。快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦。使用继承的方式存在的问题:扩展性不好如果要再加一种配料(火腿肠),我们就会发现需要给FriedRice和FriedNoodles分别定义一个子类。如果要新增一个快餐品类(炒河粉)的话,就需要定义更多的子类。产生过多的子类定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式原创 2021-07-04 17:10:33 · 117 阅读 · 2 评论 -
Java设计模式-观察者模式
1 概述定义:又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。2 结构在观察者模式中有如下角色:Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。ConcreteSubject:具体主题(具体被观察者),该角色将有关状态存原创 2021-07-04 16:34:37 · 133 阅读 · 0 评论 -
Java设计模式-适配器模式
概述如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,第2面供我们充电,这样使得我们的插头在当地能使用。生活中这样的例子很多,手机充电器(将220v转换为5v的电压),读卡器等,其实就是使用到了适配器模式。定义:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类适配器模式和对象适配器模式,前原创 2021-07-03 21:21:24 · 162 阅读 · 1 评论 -
Springboot响应处理
数据响应与内容协商响应页面指的是我们如何原创 2021-07-01 21:03:17 · 953 阅读 · 1 评论 -
springboot请求处理
请求映射使用REST映射请求映射也就是我们编写一个controller,在每一个方法上使用requestMapping来声明我们这个方法能处理xxx请求。把这个过程称之为请求映射。@xxxMapping;@GetMapping@PostMapping@PutMapping@DeleteMappingRest风格支持(使用HTTP请求方式动词来表示对资源的操作)以前: /getUser 获取用户原创 2021-06-25 17:54:12 · 1189 阅读 · 1 评论 -
Springboot的web开发-静态资源
1.web开发简介SpringMVC自动配置概览Spring Boot provides auto-configuration for Spring MVC that works well with most applications.(大多场景我们都无需自定义配置)Springboot给springMVC配置了以下场景:The auto-configuration adds the following features on top of Spring’s defaults:Inclusion原创 2021-06-20 12:27:28 · 326 阅读 · 0 评论 -
Springboot配置文件
前面学的配置文件是properties,其实我们更常用的是yaml配置文件的方式。yaml的用法1.简介YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。非常适合用来做以数据为中心的配置文件。2.基本语法key: value;kv之间有空格大小写敏感使用缩进表示层级关系在xml中,使用标签包含来表示层级关系原创 2021-06-19 20:10:24 · 293 阅读 · 0 评论 -
Springboot自动配置原理入门
1.引导加载自动配置类@SpringBootApplication注解相当于@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan等多个注解的功能。我们挨个分析其中的功能。我们先点进去看其源码@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan( excludeFilters = {@Filter( type = FilterType.原创 2021-06-19 16:24:38 · 325 阅读 · 0 评论 -
Springboot底层注解(容器功能)
1.组件添加1.1.@Configuration我们在这里准备了两个组件,宠物类和用户类,用户类包含用户姓名和年龄,宠物类包含宠物名public class User { public String name; public int age; public User() { } public User(String name, int age) { this.name = name; this.age = age; }原创 2021-06-13 15:52:37 · 210 阅读 · 1 评论 -
Springboot基础入门
1.Spring生态圈:1.1.spring能做什么?比如我们spring做容器的IOC,做切面的AOP和用springMVC开发web应用,这些都是spring框架给我们带来的基本功能。我们可以浏览一下官网,看看能做什么Microservices:即微服务开发:在一些大型应用开发的时候,如果我们将所有模块代码写在一个项目里面,这样显然会不合适,如果我们将所有的模块代码全部写在一个项目里面,这样不合适,我们应该把这些模块拆分成一个一个微小的功能模块,我们称之为微服务,我们的spring就可以帮我们原创 2021-06-13 09:12:56 · 1910 阅读 · 1 评论 -
dubbo简介
前言一、什么是分布式框架分布式系统是若干独立系统的集合,但是用户使用起来像是在使用一套系统二、为什么需要分布式系统?规模的逐步扩大和业务的复杂,单台计算机扛不住双十一那样的流量,俗话说:三个臭皮匠抵一个诸葛亮。三、应用架构的发展演变(1) 单一架构 当网站流量很小的时候,我们将所有的应用(业务)放到一台服务器上,打包运行公司管理系统/超市收银系统优点:开发简单,部署简单缺点:扩展不容易(怎么处理日益增长的流量),谁都改一个,维护不容易,性能提升难(2) 垂直应用架构 将大应用拆分成为小应用原创 2021-06-01 21:51:30 · 165 阅读 · 1 评论 -
Netty 编解码器和 Handler 调用机制
基本说明1.Netty 的组件设计:Netty 的主要组件有 Channel、EventLoop、ChannelFuture、ChannelHandler、ChannelPipe 等2.ChannelHandler 充当了处理入站和出站数据的应用程序逻辑的容器。例如,实现 ChannelInboundHandler 接口(或 ChannelInboundHandlerAdapter),你就可以接收入站事件和数据,这些数据会被业务逻辑处理。当要给客户端发送响应时,也可以从 ChannelInboundHa原创 2021-05-31 23:07:05 · 352 阅读 · 2 评论 -
TCP 粘包和拆包及解决方案
TCP 粘包和拆包基本介绍1.TCP 是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的 socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化方法(Nagle 算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样做虽然提高了效率,但是接收端就难于分辨出完整的数据包了,因为面向流的通信是无消息保护边界的2.由于 TCP 无消息保护边界,需要在接收端处理消息边界问题,也就是我们所说的粘包、拆包问题,看一张图3.TC原创 2021-05-31 23:07:25 · 403 阅读 · 0 评论 -
Google Protobuf
编码和解码的基本介绍1.编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据时就需要解码[示意图]2.codec(编解码器)的组成部分有两个:decoder(解码器)和 encoder(编码器)。encoder 负责把业务数据转换成字节码数据,decoder 负责把字节码数据转换成业务数据Netty 本身的编码解码的机制和问题分析1.Netty 自身提供了一些 codec(编解码器)2.Netty 提供的编码器1.StringEncoder:对字符原创 2021-05-28 18:02:20 · 428 阅读 · 0 评论 -
Netty应用实例
群聊系统实例要求1.编写一个 Netty 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)2.实现多人群聊3.服务器端:可以监测用户上线,离线,并实现消息转发功能4.客户端:通过 channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发得到)5.目的:进一步理解 Netty 非阻塞网络编程机制GroupChatServerimport io.netty.bootstrap.ServerBootstrap;import io.netty.ch原创 2021-05-27 14:28:57 · 971 阅读 · 2 评论 -
Netty核心模块组件
Bootstrap、ServerBootstrap1.Bootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中 Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类。2.常见的方法有public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup),该方法用原创 2021-05-26 16:29:59 · 127 阅读 · 1 评论