
后端
文章平均质量分 65
后端
一觉睡到丶小时候
这个作者很懒,什么都没留下…
展开
-
Java8 Optional用法和最佳实践
Java8 Optional用法和最佳实践原创 2022-12-07 14:32:11 · 520 阅读 · 1 评论 -
docker-compose文件详解
docker-compose文件详解原创 2022-12-07 14:31:17 · 1931 阅读 · 0 评论 -
Pig4Cloud之验证码
Pig4Cloud之验证码原创 2022-12-07 14:28:11 · 1005 阅读 · 0 评论 -
Pig4Cloud之登陆验证(一)客户端认证处理
Pig4Cloud之登陆验证(一)客户端认证处理原创 2022-12-07 14:27:17 · 2170 阅读 · 2 评论 -
Pig4Cloud之登陆验证(二)发放token
Pig4Cloud之登陆验证(二)发放token原创 2022-12-07 14:26:48 · 1916 阅读 · 0 评论 -
Pig4Cloud之检验token
Pig4Cloud之检验token原创 2022-12-07 14:25:49 · 972 阅读 · 0 评论 -
Pig4Cloud之jasypt 配置文件加密
jasypt原创 2022-12-07 14:25:11 · 306 阅读 · 0 评论 -
SpringBoot动态定时任务
其实SchedulingConfigurer实现方法很简单,只需要实现SchedulingConfigurer并重写configureTasks方法,在启动类必须加上@EnableScheduling注解即可。@Configuration@EnableScheduling@Slf4jpublic class RuleTask implements SchedulingConfigurer { private volatile ScheduledTaskRegistrar registr.原创 2021-03-12 14:59:11 · 443 阅读 · 0 评论 -
分布式事务TCC
之前网上看到很多写分布式事务的文章,不过大多都是将分布式事务各种技术方案简单介绍一下。很多朋友看了还是不知道分布式事务到底怎么回事,在项目里到底如何使用。所以这篇文章,就用大白话+手工绘图,并结合一个电商系统的案例实践,来给大家讲清楚到底什么是 TCC 分布式事务。###一、业务场景介绍咱们先来看看业务场景,假设你现在有一个电商系统,里面有一个支付订单的场景。那对一个订单支付之后,我们需要做下面的步骤:更改订单的状态为“已支付”扣减商品库存给会员增加积分创建销售出库单通知仓库发货这是一原创 2020-09-14 16:40:45 · 2987 阅读 · 3 评论 -
微信小程序版本自动更新
公司的小程序项目上线, 后期还会有小型的版本迭代. 为了让用户能在我们进行版本迭代后及时使用最新版本的功能. 做了以下优化…小程序的销毁当用户点击左上角关闭,或者按了设备Home 键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台,只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。“冷启动” 和 “热启动”.热启动是指: 小程序打开后,在一段时间内(目前:5分钟)再次被打开,此时会将后台的小程序切换到前台。冷启动是指: 小.原创 2020-09-14 16:39:55 · 425 阅读 · 0 评论 -
为什么阿里规定需要在事务注解@Transactional中指定rollbackFor?
阿里巴巴Java规范:方法【edit】需要在Transactional注解指定rollbackFor或者在方法中显示的rollback。异常的分类Throwable:有两个重要的子类:Exception(异常)和Error(错误),二者都是Java异常处理的重要子类,各自都包含大量子类。Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM (Java虚拟机)出现的问题。例如。Java虚拟机运行错误(Virtual.原创 2020-08-22 08:23:39 · 358 阅读 · 0 评论 -
SpringIOC容器设计
IOC简介在Spring IoC容器的设计中,作者设计了两个接口来表示容器BeanFactoryBeanFactory简单粗暴,可以理解为HashMap,key是BeanName,value是Bean实例,通常只提供put和get。这系列容器只实现了容器的最基本功能,可看做为简单容器。ApplicationContextApplicationContext应用上下文,它作为容器的高级形态而存在。应用上下文在简单容器的基础上,增加了许多面向框架的特性,同时对应用环境做了许多适配。Spr原创 2020-08-22 08:22:22 · 385 阅读 · 0 评论 -
Index column size too large. The maximum column size is 767 bytes.
创建索引的时候报错 :Index column size too large. The maximum column size is 767 bytes.错误原因由于MySQL的Innodb引擎表索引字段长度的限制为767字节,因此对于多字节字符集的大字段或者多字段组合,创建索引时会出现此错误。以utf8mb4字符集字符串类型字段为例,utf8mb4是4字节字符集,则默认支持的索引字段最大长度是191字符(767字节/4字节每字符≈191字符),因此在varchar(255)或char(.原创 2020-07-30 08:19:18 · 1709 阅读 · 0 评论 -
GSON搞定JSON数据
GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。特点:a、快速、高效 b、代码量少、简洁c、面向对象d、数据传递和解析方便Gon介绍<dependency> <groupId>com.google.code.gson...原创 2019-02-22 13:41:39 · 298 阅读 · 0 评论 -
自定义博客添加Rss订阅
RSS订阅是站点用来和其他站点之间共享内容的一种简易方式,即Really Simple Syndication(简易信息聚合),如果不会使用,可以参见百度百科:https://baike.baidu.com/item/RSS%E8%AE%A2%E9%98%85/663114 ;首先我们安装feed插件,在本地hexo目录下右键git bash here,输入以下命令:$ npm install ...转载 2019-12-18 17:38:55 · 1554 阅读 · 0 评论 -
JWT简介
前言JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。微服务常见的认证方案一、跨域认证的问题互联网服务离不开用户认证。一般流程是下面这样。1、用户向服务器发送用户名和密码。2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。3、服务器向用户返回一个 session_id,写入用户的 Cookie。4...原创 2019-12-21 10:42:27 · 270 阅读 · 0 评论 -
Consul学习
服务注册与服务发现是在分布式服务架构中常常会涉及到的东西,业界常用的服务注册与服务发现工具有 ZooKeeper、etcd、Consul 和 Eureka。Consul 的主要功能有服务发现、健康检查、KV存储、安全服务沟通和多数据中心。Consul 与其他几个工具的区别可以在这里查看 Consul vs. Other Software。#####为什么需要有服务注册与服务发现?假设在分布式系...原创 2019-12-21 14:20:02 · 693 阅读 · 0 评论 -
Spring Boot 两种部署到服务器的方式
###jar包(官方推荐)jar包方式启动,也就是使用spring boot内置的tomcat运行。服务器上面只要你配置了jdk1.8及以上,就ok。不需要外置tomcat1.打成jar包2.将jar包放到任意目录,执行下面的命令$ nohup java -jar test.jar >temp.txt &//这种方法会把日志文件输入到你指定的文件中,没有则会自动创建。进程...原创 2019-12-21 14:30:26 · 354 阅读 · 0 评论 -
Spring Cloud Feign使用
###背景Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Feign整合了Ribbon和Hystrix(关于Hystrix我们...原创 2019-12-21 14:35:24 · 296 阅读 · 0 评论 -
枚举真的比静态常量更占空间吗?
前两天在网上看到一条信息:枚举比静态常量更占用空间。这是真的吗?前言枚举枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。枚举实现原理在使用关键字enum创建枚举类型并编译后,编译器会为我们生成一个相关的类,这个类继承了Java ...原创 2019-12-30 10:13:00 · 1480 阅读 · 0 评论 -
微服务注册中心为什么要使用Consul?
一、Eureka不建议使用在选型微服务注册中心时,一定要长远考虑,SpringCloud提供了Eureka作为服务注册中心,我们可以开箱即用,但是,对于服务注册中心随着业务需求的不断变化,对服务注册中心提出了更高要求,Eureka就不太适合了,看到“Eureka 2.0 开源工作宣告停止,继续使用风险自负”。这意味着如果开发者继续使用作为 2.x 分支上现有工作 repo 一部分发布的代码库...原创 2020-01-01 11:03:18 · 710 阅读 · 0 评论 -
微服务网关 Spring Cloud Gateway
#什么是网关假设你现在要做一个电商应用,前端是移动端的APP,后端是各种微服务。那你可能某个页面需要调用多个服务的数据来展示。如果没有网关,你的系统看起来就是这个样子的:而如果加上了网关,你的系统就会变成这个样子:#Spring Cloud GatewaySpring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spri...原创 2020-01-01 11:08:40 · 376 阅读 · 0 评论 -
软件版本命名规范及各阶段说明
前言很多开发人员都没有经历过产品不断的迭代过程,基本上都是做完一套,至多经历一两个版本的迭代,基本上都会调入到另一个项目组或者离职,之后这样的事情不断地重复,直至离开这个行业。开发人员3个月开发一个版本,定位version1,如果有bug,修复后该怎么升级这个版本号呢?可能是version2,修复这个bug后,如果还有bug呢,可能继续version3.,如果这样下去,还没到产品上线,你这个版...原创 2020-01-01 11:27:27 · 1061 阅读 · 0 评论 -
解决Tomcat8上传文件无可读权限问题
描述使用springmvc做了一个文件上传的功能,上传到nginx目录下的一个文件夹,但是通过目录访问的时候却报403的错误去服务器查看了一下文件的权限,发现没有可读权限,于是定位了问题,上传的文件全都没有可读权限。为什么没有可读权限网上查阅资料发现,linux默认umask为022,对应权限为755,其它用户可读可执行。可以vim /etc/profile,搜索umusk关键字查看i...原创 2020-01-01 11:35:53 · 1716 阅读 · 0 评论 -
zipkin
Waht is zipkin?Zipkin是一种分布式跟踪系统。它有助于收集解决微服务架构中的延迟问题所需的时序数据。它管理这些数据的收集和查找。Zipkin的设计基于Google Dapper论文。应用程序用于向Zipkin报告时序数据。Zipkin UI还提供了一个依赖关系图,显示了每个应用程序通过的跟踪请求数。如果要解决延迟问题或错误,可以根据应用程序,跟踪长度,注释或时间戳对所有跟踪...原创 2020-01-01 11:40:42 · 292 阅读 · 0 评论 -
使用Spring Cloud搭建服务注册中心
创建一个普通的Spring Boot工程.首先我们需要创建一个普通的Spring Boot工程,命名为eureka-server,普通到什么程度呢?就是一个starter都不需要添加,创建成功之后就只引用了一个父starter。添加Eureka依赖工程创建成功之后,向pom.xml文件中添加eureka-server的依赖,目前eureka的稳定版本是Dalston.SR3,添加完依...原创 2020-01-01 11:46:27 · 247 阅读 · 0 评论 -
Java高级特性——反射
一、什么是反射?JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。简单的来说:1.通过new关键字创建对象操作对象,在编译时就已经确定。2.通过反射可以在程序运行过程中动态的操作对象,可以获得编译期无法获得的信息,动态操作最大限度发挥了ja...原创 2020-01-04 15:07:27 · 330 阅读 · 0 评论 -
Double为什么会失真?
一、 什么是浮点数?1、小数一个小数的组成:在我国,小数表示由三部分组成,分别是整数+小数点(分隔符)+小数。2、小数为什么会被称为浮点数浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法。对于浮点数可以这样简单的理解:浮...原创 2020-01-07 13:36:09 · 1530 阅读 · 1 评论 -
Java中的clone
Java中对象的创建使用new操作符创建一个对象使用clone方法复制一个对象这两种方式有什么相同和不同呢?new操作符的本意是分配内存。程序执行到new操作符时, 首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用构造函数,填充对象的各个域,这一步叫做对象的初始化,构造方法返回后,一个对象创建完毕,可以把他的引用(地址)发布到外部,在...原创 2020-01-13 07:55:29 · 187 阅读 · 0 评论 -
使用 Travis CI 自动更新 GitHub Pages
前言Github Pages 不能运行动态程序,只能输出一些静态内容。因此 Github Pages 非常适合用于前端项目的展示。可用于存放项目介绍、项目文档或者个人博客。本文介绍了怎么用 Travis CI 自动化部署 Github Pages。CI持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,...原创 2020-01-15 11:23:53 · 360 阅读 · 0 评论 -
HTTP 413错误解决方法
这是由于上传文件过大引起的。##代码检查如果是springmvc的框架,用mutipartFile上传的文件,先检查配置文件中的最大上传文件胆小。spring-mvc.xml<!-- 上传文件拦截,设置最大上传文件大小 10M=10*1024*1024(B)=10485760 bytes 和编码,如果这里设置过小会导致图片可能无法上传--> <bean id=...原创 2020-01-18 11:41:46 · 1854 阅读 · 0 评论 -
RSA 非对称加密原理
RSA 加密原理步骤说明描述备注1找出质数P 、Q-2计算公共模数N = P * Q-3欧拉函数φ(N) = (P-1)(Q-1)-4计算公钥E1 < E < φ(N)E的取值必须是整数E 和 φ(N) 必须是互质数5计算私钥DE * D % φ(N) = 1-6加密C = M E mod NC...转载 2020-01-18 11:43:21 · 224 阅读 · 0 评论 -
快速搭建Spring Boot项目及常用技术整合
Spring Boot简介Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。Spring Boot特点创建独立的Spring应用程序嵌入的Tomcat,无需部署WAR文件简化Maven配置自动配置Spring提供生产就绪...原创 2019-12-18 17:35:02 · 528 阅读 · 0 评论 -
JVM&GC(四)-通用术语
G1(Garbage First).G1是一个并行回收器,他把内存分割为很多不相关的区间(Region),每个区间可以属于老年代或者年轻代,并且每个年代区间可以是物理上不连续的。垃圾回收时都是需要停下应用程序,不然没有办法防止应用程序的干扰,然后G1 GC可以集中精力在垃圾最多的区间上,并且只费一点点时间就可以清空这些区间里的垃圾,腾出完全空闲的区间。由于这种方式的侧重点在于处理垃圾最多的区间,所以我们给G1取一个名字:垃圾优先(Garbage First).G1内部主要有四个操作阶段:年轻代回收(原创 2020-07-23 14:47:35 · 286 阅读 · 0 评论 -
Linux安装Oracle
官方最低要求配置内存:1G(官方最低要求1G)硬盘:40G(企业版安装所需4.29G和1.7G数据文件)准备工作安装环境介绍系统:CentOS 7 64位Oracle版本:Oracle 11gR2下载Oracle安装文件官网下载地址下载出来是这样两个压缩包:linux.x64_11gR2_database_1of2.ziplinux.x64_11gR2_database_2of2.zip检查系统版本uname -m[root@localhost ~]# uname -m原创 2020-07-23 14:45:48 · 2022 阅读 · 4 评论 -
JVM&GC(三)-System.gc()方法
前言在默认情况下,System.gc()会显示直接触发Full GC,同时对老年代和新生代进行回收。而一般情况下,垃圾回收应该是自动进行的,无需手工触发,否则就太麻烦了。示例public class TestGC { public static void main(String[] args) { new TestGC(); System.gc(); System.runFinalization(); }}如果在idea查看日志输原创 2020-07-19 10:19:37 · 1044 阅读 · 0 评论 -
JVM&GC(二)对象提升规则
前言虚拟机给每个对象定义了一个对象年龄(Age)计数器。如果对象在Eden区出生并经过第一次Minor GC后仍然存活,并且能被Survivor容纳的话,将被移动到Survivor空间中,并将对象年龄设为1.对象在Survivor中每熬过一次Minor GC,年龄就将增加1岁,当他的年龄增加到一定程度(默认为15岁)时,就会被晋升到老年代中。分配原则对象优先分配在Eden区,如果Eden区,如果Eden区没有足够的空间,虚拟机执行一次Minor GC。大对象直接进入老年代,这样做的目的是为了避免在原创 2020-07-19 10:19:06 · 245 阅读 · 0 评论 -
垃圾回收算法(7)-分代回收算法
前言Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。在 Java 中,堆被划分成两个不同的区域:年轻代 ( Young )、老年代 ( Tenured)。年轻代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。 这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。堆大小 = 年轻代 + 老年代年轻代 = eden space (新生代) + from survivor +原创 2020-07-12 10:14:43 · 375 阅读 · 0 评论 -
垃圾回收算法(6)-增量算法
前言在垃圾回收过程中,应用软件处于一种Stop the World的状态。在Stop the World的状态下,应用程序的所有线程都会挂起,暂停一切工作,等待垃圾回收的完成。如果垃圾回收时间过长,应用程序会被挂起很久,将严重影响用户体验或者系统的稳定性。为了解决这个问题,即对实时垃圾手机算法的研究直接导致了增量收集算法的诞生。多进程运行思路最初,为了进行实时垃圾收集,可以设计一个多进程的运行环境,比如用一个进程执行垃圾收集工作,另一个进程执行程序代码。这样一来,垃圾收集工作看上去仿佛是在后台悄悄的干原创 2020-07-11 09:15:56 · 481 阅读 · 0 评论 -
垃圾回收算法(5)-标记整理算法
前言标记清除算法的确可以应用在老年代中,但是该算法不仅执行效率低下,而且在执行完内存回收后会产生内存碎片。所以JVM的设计者在此基础上做了改进,标记压缩法(也称标记整理法)由此诞生。算法原理当成功标记出内存中的垃圾对象之后,标记压缩法会将所有的存活对象都移动到一个规整且连续的内存空间中,然后执行Full GC(老年代的垃圾回收,或者被称为Major GC)回收无用对象所占用的内存空间。当成功压缩后,已用和未用的内存都各自一遍,彼此之间维系着一个记录下一次分配起始点的标记指针,当为新对象分配内存时,则可原创 2020-07-10 10:40:13 · 734 阅读 · 0 评论