程序员
文章平均质量分 75
小白不想上班
慢慢来
展开
-
SpringCloud LoadBalancer灰度策略实现
如何使用 Spring Cloud 2020 中重磅推荐的负载均衡器 Spring Cloud LoadBalancer (下文简称 SCL),如何扩展负载均衡策略?你将从本文中获取到答案快速上手 SCL如果项目中想使用 SCL,则仅需要添加如下 maven 依赖即可<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-lo原创 2021-01-13 16:11:09 · 390 阅读 · 1 评论 -
「Spring Boot 新特性」一键构建Docker镜像
背景在我们开发过程中为了支持 Docker 容器化,一般使用 Maven 编译打包然后生成镜像,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便。docker-maven-plugin 插件就是为了帮助我们在 Maven 工程中,通过简单的配置,自动生成镜像并推送到仓库中。spotify 、fabric8这里主要使用的主要是如下两种插件 spotify 、fabric8 , … -配置通过 xml 定义出 Dockerfile 或者挂载外部 Dockerfile 通过调用 Docker原创 2021-01-12 17:49:30 · 262 阅读 · 2 评论 -
SpringCloud LoadBalancer灰度策略实现
如何使用 Spring Cloud 2020 中重磅推荐的负载均衡器 Spring Cloud LoadBalancer (下文简称 SCL),如何扩展负载均衡策略?你将从本文中获取到答案快速上手 SCL如果项目中想使用 SCL,则仅需要添加如下 maven 依赖即可<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-lo原创 2021-01-12 16:41:02 · 673 阅读 · 0 评论 -
Druid 连接池监控集群解决方案
什么是 Druid MonitorDruid 是一个非常强大的数据库连接池,但是它的强大并不仅仅体现在作为一个高性能连接池加快数据访问上和连接管理上,它内置了一个强大的监控工具:Druid Monitor。不仅可以监控数据源和慢查询,还可以监控 Web 应用、URI 监控、Session 监控、Spring 监控等。ip:port/druid/sql.html什么是 Druid Admin如上文所述, Druid Monitor 提供强大的监控能力,但目前仅是针对对单个服务实例的监控。原创 2021-01-11 17:55:24 · 1305 阅读 · 2 评论 -
Idea 开启机器学习增强代码提示
一、开启机器学习IDEA 2020.3 我们可以启用机器学习来优化代码提示。二、文本添加引号、括号我们可以将任何文本括在引号或方括号中,并且 IDEA 将在选择结束时自动将其关闭。三、计算器?在IDEA 2020.3 中,我们可以在对话框中执行基本计算,您可以通过按两次 Shift 键打开对话框。四、异常断点提示未知异常?IntelliJ IDEA中的“控制台”窗口可为您创建断点,从而帮助我们 debug 找到罪魁祸首!五、后缀自动完成IDEA中的PostfixCompletion原创 2021-01-11 15:19:48 · 801 阅读 · 1 评论 -
Java8新特性——强大的Stream
Stream API了解StreamJava8中有两个比较大的改变Lambda表达式Stream API (java.util.stream.*)Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找,过滤和映射数据等操作。使用Stream API对集合数据进行操作,就类似于使用SQL执行的数据库查询,也可以使用Stream API来并行操作,简而言之,Stream API提供了一种高效且易于使用的处理数据的方式。区别这里的Stream流原创 2021-01-09 17:13:42 · 98 阅读 · 0 评论 -
TCP、UDP、HTTP、HTTPS之前的区别--JAVA成长之路
网络由下往上分为:物理层—数据链路层—网络层 – IP协议传输层 – TCP协议会话层 –表示层和应用层 – HTTP协议1、TCP/IP连接TCP传输控制协议,是一种提供可靠数据传输的通用协议手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端机通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。建立起一个TCP连接需要经过“三次握手”:第一次握手:客户端发送syn包(syn=j)到服务器,并进入S原创 2021-01-08 16:54:00 · 137 阅读 · 1 评论 -
MyBatis 的 4 个妙用,别再踩坑了!
Mybatis是 Java 中一个非常好用的数据库框架,这儿记录一下在使用过程中遇到的坑。官方中文文档地址:http://www.mybatis.org/mybatis-3/zh/getting-started.html1、在Mybatis mapping.xml映射配置文件中使用大于>号小于号<由于Mybatis的映射文件遵循xml文件的格式,所以不能使用像大于号或者小于号这样的xml文件特殊字符,需要使用转义字符代替。<<小于号>>原创 2021-01-07 16:45:24 · 82 阅读 · 0 评论 -
最常用的分布式 ID 解决方案,都在这里了!
「一、分布式ID概念」说起ID,特性就是唯一,在人的世界里,ID就是身份证,是每个人的唯一的身份标识。在复杂的分布式系统中,往往也需要对大量的数据和消息进行唯一标识。举个例子,数据库的ID字段在单体的情况下可以使用自增来作为ID,但是对数据分库分表后一定需要一个唯一的ID来标识一条数据,这个ID就是分布式ID。对于分布式ID而言,也需要具备分布式系统的特点:高并发,高可用,高性能等特点。「二、分布式ID实现方案」下表为一些常用方案对比:|描述优点缺点UUIDUUID是通用唯原创 2021-01-06 16:19:24 · 157 阅读 · 0 评论 -
Spring Boot 解决跨域问题的 3 种方案
前后端分离大势所趋,跨域问题更是老生常谈,随便用标题去google或百度一下,能搜出一大片解决方案,那么为啥又要写一遍呢,不急往下看。问题背景:Same Origin Policy,译为“同源策略”。它是对于客户端脚本(尤其是JavaScript)的重要安全度量标准,其目的在于防止某个文档或者脚本从多个不同“origin”(源)装载。它认为自任何站点装载的信赖内容是不安全的。当被浏览器半信半疑的脚本运行在沙箱时,它们应该只被允许访问来自同一站点的资源,而不是那些来自其它站点可能怀有恶意的资源。注:具原创 2021-01-05 16:10:44 · 94 阅读 · 0 评论 -
jvm系列(一):java类的加载机制
1、什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的 Class对象, Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在原创 2021-01-04 15:44:34 · 89 阅读 · 1 评论 -
Spring Boot 构建微服务实践
前言在本文中将分享关于 Spring Boot 构建微服务程序的 “黄金法则” ,欢迎大家补充。系统运行在白盒之上监控可视化系统的作用效果绝对是出乎你的预料,无论是简单的 Spring Boot Admin 还是复杂的 Grafana ,能够识别出应用运行中的大部分问题,及时反馈给开发团队。监控系统提供了大量的图表和报警监控,使得对于故障有更快的响应速度。在微服务架构下,运行指标监控和收集,则比单体应用更为重要。对于 Spring Boot 应用内置 Spring Boot Actuator 来暴露原创 2021-01-03 20:03:19 · 166 阅读 · 0 评论 -
从零开始教你实现一个完整的计算器[附源码]
使用Java编写一个简单计算器编者思路:(1)需要对窗体和窗体中的组件有一个合理的布局,使用了swing函数;(2)需要为这些数字键和运算符键添加动作监听,使其在点击时,能够在文本框中输入相应的值;(3)获取文本框中的值,再进行相应的运算,并将结果输出的结果显示文本框中。计算器界面如下图所示完整版源代码:package main; import java.awt.BorderLayout;import java.awt.Color;import java.awt.GridLayou原创 2020-12-31 09:22:45 · 1786 阅读 · 1 评论 -
如何在 IDEA 中 Debug Flink 1.12 SQL Client 源码?你学废了吗?
前言此文章主要如何配置使能在idea 中debug模式启动flink sqlClient 客户端,通过执行flink sql debug源码查看flink解析sql提交任务到flink集群执行的原理。了解sqlClient 代码 有以下好处:改造 sqlClient 成为server端使之可以接收远端client服务传输的flink sql语句,并返回执行结果到远端client,从而有望可以实现flink开发平台。主要软件如下:flink 1.12.0 hive 2.3.4 hadoop 2.7.2原创 2020-12-29 15:42:58 · 805 阅读 · 0 评论 -
CodeReview自查要注意的点 还不知道吗?
总述细数过来,已经参加了不少CodeReview, 虽有开发规约的指引,但在Review的过程中,还是会有不少问题暴露出来,本文会总结在CodeReview之前,有哪些可以先自查的点,更好的保证代码的健壮性。代码结构在CodeReview之前,我们先对代码结构做一次剖析,开头,我们先从最本质的面向对象说起,面向对象,有属性,有方法,然后我们对属性做了很多的修饰,比如加static 声明为静态,加 final 声明为常量,加 private 声明为私有。同样,我们也会对方法做很多修饰,然后会在方法中调用原创 2020-12-28 15:04:27 · 96 阅读 · 1 评论 -
分布式系统之CAP理论,我们对它的理解和误解
引言CAP 理论,相信很多人都听过,它是指:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。为什么要理解 CAP 理论?我能说出很多理由来。如果是在职场上,也许最合适的理由是,当领导给出的任务不靠谱时,我们可以依据 CAP 去否决它。比如,有这么一个任务,给你定了三大目标:既要提升系统的可用性又要保证数据的实时可见还有提升系统的容错能力看到“既要、又要、还要”,是不是想原创 2020-12-27 21:12:16 · 635 阅读 · 0 评论 -
看了看人家的接口 再看看自己的 瞬间沉默了......
在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟;以前后端人员瞧不起前端人员,那现在后端人员要重新认识一下前端,前端已经很成体系了)。一般系统的大致整体架构图如下:需要说明的是,有些小伙伴会回复说,这个架构太简单了吧,太low了,什么网关啊,缓存啊,消息中间件啊,都没有。因为老顾这篇主要介绍的是API接口,所以我们聚焦点,其他的模块小伙伴们自行去补充。接口交互前端和原创 2020-12-25 15:45:09 · 118 阅读 · 0 评论 -
大厂都再使用的开源分布式搜索与数据分析引擎——图解 ElasticSearch 原理
Elasticsearch 是一款功能强大的开源分布式搜索与数据分析引擎,目前国内诸多互联网大厂都在使用,包括携程、滴滴、今日头条、饿了么、360 安全、小米、vivo 等。除了搜索之外,结合 Kibana、Logstash、Beats,Elastic Stack 还被广泛运用在大数据近实时分析领域,包括日志分析、指标监控、信息安全等多个领域。它可以帮助你探索海量结构化、非结构化数据,按需创建可视化报表,对监控数据设置报警阈值,甚至通过使用机器学习技术,自动识别异常状况。今天,我们先自上而下,后自底向原创 2020-12-24 21:52:59 · 273 阅读 · 0 评论 -
超详细:6种常用的设计模式总结 你再不会我也没办法了
单例模式简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例。getInstance()的返回值是一个对象的引用,并不是一个新的实例,所以不要错误的理解成多个对象。单例模式实现起来也很容易,直接看demo吧public class Singleton { private static Singleton singleton; private Singleton() { } pu原创 2020-12-23 21:16:25 · 364 阅读 · 2 评论 -
分布式事务有这一篇就够了!不能再多了
1. 基础概念1.1 什么是事务事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。1.2 本地事务在计算机系统中,更多的是通过关系型数据库来控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据库事务,由于应用主要靠关系数据库来控制事务,而数据库通常和应用在同一个服务器,所以基于关系型数据库的事务又被称为本地事务。数据库事务的四大特性:ACID**A(Atomic):**原子性,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失败原创 2020-12-22 20:27:33 · 510 阅读 · 0 评论 -
Java基础知识点总结
前言本文主要是我之前复习Java基础原理过程中写的Java基础知识点总结。Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其底层实现原理。纸上得来终觉浅,绝知此事要躬行。笔者之前对每部分的内容对做了比较深入的学习以及代码实现,基本上比较全面地讲述了每一个Java基础知识点,当然可能有些遗漏和错误,欢迎读者指正。Java基础知识点总结每部分内容会重点写一些常见知识点,方便复习和记忆,但并不是全部内容。面向对象三大特性继承:一原创 2020-12-22 20:26:14 · 155 阅读 · 1 评论 -
资深P7架构师详解淘宝服务端高并发分布式架构演进之路
1. 概述本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。2. 基本概念在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍:分布式系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或两个相同功能的Tomcat分别部署在不同服务器上高可用系统中部分节点失效时,其他原创 2020-12-21 22:19:31 · 205 阅读 · 1 评论 -
推荐 5 款好用的REST API工具
市面上可用的 REST API 工具选项有很多,我们来看看其中一些开发人员最喜欢的工具。1API 定义Swagger Editor 是图形可视化的流行选项。你可以使用 JSON 或 YAML 定义 API。此外,你可以为大多数相关技术(从 ASP.NET Core 和 Kotlin 到 Node.JS 和 Python)生成服务端或客户端存根。Apicurio 是一个开源项目,简单而优雅,支持 JSON 和 YAML。它可以:从源代码控制、文件和 URL 导入 API。与你的 GitHub、G原创 2020-12-19 20:58:52 · 267 阅读 · 1 评论 -
你知道现在的面试有多难吗?快看这三道大厂面试题!???
快来看看这三道大厂面试题,你知道现在的面试有多难吗???01来自于阿里:「请寻求最优解,不要只是粗暴wait()」有一个总任务A,分解为子任务A1 A2 A3 …,任何一个子任务失败后要快速取消所有任务,请写程序模拟。02来自于阿里:「请寻求最优解,不要简单的synchronized」请用两个线程交替输出A1B2C3D4…,A线程输出字母,B线程输出数字,要求A线程首先执行,B线程其次执行!(多种同步机制的运用)03来自于华为「请寻求最优解,不要简单的生产者-消费者模式」有一个生产原创 2020-12-17 21:27:25 · 107 阅读 · 0 评论 -
Java日志体系权威总结 不要错过
概要本文的目的是搞清楚Java中各种日志Log之间是怎么的关系,如何作用、依赖,好让我们平时在工作中如果遇到“日志打不出”或者“日志jar包冲突”等之类的问题知道该如何入手解决,以及在各种场景下如何调整项目中的各个框架的日志输出,使得输出统一。Log日志体系在日常工作中我们可能看到项目中依赖的跟日志相关的jar包有很多,commons-logging.jar、log4j.jar、sl4j-api.jar、logback.jar等等,眼花缭乱。我们要正确的配置,使得jar包相互作用生效之前,就先要理清它原创 2020-12-17 17:56:10 · 135 阅读 · 1 评论 -
吊打面试官系列:final、finally、finalize 有什么区别?
大家好,我是小白~final、finally、finalize 有什么区别?这是一个初级面试题,在中高级面试中也会出现。final关键字初级回答final ,是修饰符关键字。修饰类,表示该类不能在被继承。修饰方法,表示该方法不能被子类重写。修饰变量,表示该变量是常量,不能被修改。中高级回答如果一个类被声明为 final ,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract 的,又被声明为 final 的。将变量或方法声明为 final ,可以原创 2020-12-14 14:06:12 · 79 阅读 · 0 评论 -
QPS、TPS、并发用户数、吞吐量这些都是什么?你还不知道嘛?
1、QPSQPS Queries Per Second 是每秒查询率 ,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准, 即每秒的响应请求数,也即是最大吞吐能力。2、TPSTPS Transactions Per Second 也就是事务数/秒。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,3、QPS和TPS区别个人理解如下:1原创 2020-12-13 21:45:24 · 561 阅读 · 1 评论 -
jstack 与 jmap 线上实战
下面是线上机器的cpu使用率,可以看到从4月8日开始,随着时间cpu使用率在逐步增高,最终使用率达到100%导致线上服务不可用,后面重启了机器后恢复。1、排查思路简单分析下可能出问题的地方,分为5个方向:系统本身代码问题内部下游系统的问题导致的雪崩效应上游系统调用量突增http请求第三方的问题机器本身的问题2、开始排查1.查看日志,没有发现集中的错误日志,初步排除代码逻辑处理错误。2.首先联系了内部下游系统观察了他们的监控,发现一起正常。可以排除下游系统故障对我们的影响。3.查看pro原创 2020-12-12 22:20:47 · 514 阅读 · 0 评论 -
这样设计订单系统,同事直呼 “666“!
本文主要讲述了在传统电商企业中,订单系统应承载的角色,就订单系统所包含的主要功能模块梳理了设计思路,并对订单系统未来的发展做了一些思考。1. 订单系统在企业中的角色在搭建企业订单系统之前,需要先梳理企业整体业务系统之间的关系和订单系统上下游关系,只有划分清业务系统边界,才能确定订单系统的职责与功能,进而保证各系统之间高效简洁的工作。2. 订单系统与各业务系统的关系(1)对外系统:所有给企业外部用户使用的系统都在这一层,包括官网、普通用户使用的C端,还包括给商户使用的商家后台和在各个销售渠道进行原创 2020-12-12 21:31:27 · 179 阅读 · 0 评论 -
mysql┃送命题!!一条查询语句是怎么执行的???
前言我们在工作中经常会用到mysql,moon还记得自己第一个学习的数据库就是mysql,那么用了这么久,你清楚一条sql查询语句是怎样运行的吗?读完这篇文章你将会学到:一条查询语句是怎么执行的???mysql中有哪些功能和模块??正文首先我要告诉大家的是,在我们学习任何一件东西的时候,先要观其整个脉络,要先了解这个东西能做什么,它的整体流程是什么样的,这样能帮助你更好的理解。当你明白了整体的逻辑之后,再去扣他的细节,这样就会异常的轻松了。我们看一行sql:这行代码相信大家一眼就明了了,原创 2020-12-11 22:07:05 · 82 阅读 · 0 评论 -
mysql┃一篇文章让你搞懂mysql 的三种锁
前言 锁的重要性想必不用多说了吧,作为面试造火箭中最重要的一个点之一,可谓是不得不会,说出来都是一把辛酸泪,什么悲观锁,乐观锁,自旋锁,偏向锁等等等等,虽然说在我们平常写代码的时候很少会用到它们,但是实现的思想是很需要我们去研究的。 今天小白就和大家聊聊mysql中的锁,读完这篇文章你将会学到:什么是全局锁?全局锁的使用场景?表级锁有哪些?为什么给一个小表加个字段,导致整个库挂了?InnoDB加锁方法有哪些?…正文全局锁全局锁就是说对整个数据库实例进行加锁。mysql也对于该行为有原创 2020-12-11 19:58:01 · 130 阅读 · 1 评论 -
跳槽大厂必会的知识点,你还不看——java内存区域
前言 在java的使用过程当中,我们会发现java的内存是自己释放的,并不像C、C++代码那样,每一块儿内存都需要程序员自己去维护,但是在如此便捷的同时可能也会出现很多问题,比如内存溢出,内存泄漏更不好排查了,所以今天的文章中,小白会带大家先了解**java的内存区域的到底是怎样的,以及各个组件的作用是什么,**让你一点一点翻越虚拟机内存管理这座大山。正文我们先来看一张图: 这张图就是一个java虚拟机运行时数据图,深色区域代表是线程共享的区域,java程序在运行的过程中会把他管理的内存划分为原创 2020-12-10 21:22:03 · 101 阅读 · 4 评论 -
别都是if/ else,写点别的
为什么我们写的代码都是 if-else?程序员想必都经历过这样的场景:刚开始自己写的代码很简洁,逻辑清晰,函数精简,没有一个 if-else,可随着代码逻辑不断完善和业务的瞬息万变:比如需要对入参进行类型和值进行判断;这里要判断下对象是否为 null;不同类型执行不同的流程。落地到具体实现只能不停地加 if-else 来处理,渐渐地,代码变得越来越庞大,函数越来越长,文件行数也迅速突破上千行,维护难度也越来越大,到后期基本达到一种难以维护的状态。虽然我们都很不情愿写出满屏 if-else 的代码,可逻原创 2020-12-10 17:03:38 · 144 阅读 · 5 评论 -
OAuth 2.0 单元测试解决方案 不要擦肩而过
为什么需要单元测试单元测试拥有保证代码质量、尽早发现软件 Bug、简化调试过程、促进变化并简化集成、使流程更灵活等优势。单元测试是针对代码单元的独立测试,核心是“独立”,优势来源也是这种独立性,而所面临的不足也正是因为其独立性:既然是“独立”,就难以测试与其他代码和依赖环境的相互关系。单元测试与系统测试是互补而非代替关系。单元测试的优势,正是系统测试的不足,单元测试的不足,又恰是系统测试的优势。不能将单元测试当做解决所有问题的万金油,而需理解其优势与不足,扬长避短,与系统测试相辅相成,实现测试的最大效益原创 2020-12-09 21:22:39 · 244 阅读 · 0 评论 -
快!!!Spring Boot Admin 2.3.1 发布,轻量的图形化监控工具
Spring Boot Admin 2.3.1 发布,这是一个错误修正版本。现在可以从 maven 仓库 下载,支持 2.3.0 平滑升级功能更新在线日志查看支持自动换行增加配置支持指定视图隐藏实例增加安全配置,支持 spring cloud kubernetes 服务发现当服务部分实例不可用时,允许动态服务设置日志级别错误修复FilteringNotifier 触发时会被执行两次如请求没有响应,Http 跟踪不起作用存在多个自定义 tab 选项卡时,标题显示不正确扩展视图配置链.原创 2020-12-09 14:02:41 · 150 阅读 · 1 评论 -
如何处理Spring Boot 2.4 全新Cron表达式处理机制
背景在我们开发过程中为了支持 Docker 容器化,一般使用 Maven 编译打包然后生成镜像,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便。docker-maven-plugin 插件就是为了帮助我们在 Maven 工程中,通过简单的配置,自动生成镜像并推送到仓库中。spotify 、fabric8这里主要使用的主要是如下两种插件 spotify 、fabric8 , … -配置通过 xml 定义出 Dockerfile 或者挂载外部 Dockerfile 通过调用 Docker原创 2020-12-08 15:51:22 · 209 阅读 · 0 评论 -
「Spring Boot 新特性」 jar 大小自动瘦身
自动分析瘦身Spring Boot 项目最终构建处理 JAR 包大小一直是个诟病,需要把所有依赖包内置最终输出可运行的 jar。当然可以使用其他的插件扩展 实现依赖 JAR 和 可运行 jar 分离可以参考 slot-maven-plugin[1], 但此种方法治标不治本并不能减少原有依赖的 JAR 的大小。Spring Boot 2.4 提供对构建输出 JAR 分析自动瘦身的功能,自动在构建输出可运行 JAR 时删除 empty starter dependencies效果展示先来分别基于 Spr原创 2020-12-07 20:49:51 · 173 阅读 · 0 评论 -
Spring Boot Xss 攻击过滤插件 学废了吗?
XSS 是什么XSS(Cross Site Scripting)攻击全称跨站脚本攻击,为了不与 CSS(Cascading Style Sheets)名词混淆,故将跨站脚本攻击简称为 XSS,XSS 是一种常见 web 安全漏洞,它允许恶意代码植入到提供给其它用户使用的页面中。xss 攻击流程简单 xss 攻击示例若网站某个表单没做相关的处理,用户提交相关恶意代码,浏览器会执行相关的代码。解决方案XSS 过滤说明对表单绑定的字符串类型进行 xss 处理。对 json 字符串数据进行 xs原创 2020-12-06 22:20:37 · 309 阅读 · 0 评论 -
Java 高并发之设计模式 拿小本本记好了吗?
本文主要讲解几种常见并行模式, 具体目录结构如下图.单例单例是最常见的一种设计模式, 一般用于全局对象管理, 比如xml配置读写之类的.一般分为懒汉式, 饿汉式.懒汉式: 方法上加synchronized1 public static synchronized Singleton getInstance() {2 if (single == null) {3 single = new Singleton();4 }5原创 2020-12-05 22:06:13 · 87 阅读 · 0 评论 -
java集合系列——List集合总结 还不学吗?
在编程过程中,会很频繁的使用集合,集合的相关知识也非常重要,也是每一个开发人员必须掌握的知识。一:集合的概念集合:保存数量不确定的数据,以及保存具有映射关系的数据的容器,简单的理解就是用于存储数量不等的多个对象的容器。集合和数组不一样,数组元素既可以是基本类型的值,也可以是对象(对象的引用变量);而集合里只能保存对象(对象的引用变量)。Java集合类主要由两个集合框架的根接口派生而出:Collection和MapJava中Collection接口的体系机构:今天这篇文章主要对List接口集合下原创 2020-12-05 20:11:35 · 101 阅读 · 0 评论