自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 快速搭建Spring Boot项目及常用技术整合

Spring Boot简介Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。Spring Boot特点创建独立的Spring应用程序嵌入的Tomcat,无需部署WAR文件简化Maven配置自动配置Spring提供生产就绪...

2019-12-18 17:35:02 125

原创 windows下安装redis并设置自启动

一、下载windows版本的Redis下载地址:https://github.com/tporadowski/redis/releases。Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 E 盘,解压后,将文件夹重新命名为 redis。解压后打开文件夹,内容如下:二、启动命令启动在路径处输入cmdredis-server.exe redis.windows.conf如果想方便的话,可以把 red

2020-09-30 08:30:11 23

原创 MySQL 常见存储引擎的区别

MySQL 常见的存储引擎,可以使用SHOW ENGINES命令,来列出所有的存储引擎EngineSupportCommentTransactionsXASavepointsFEDERATEDNOFederated MySQL storage engineMRG_MYISAMYESCollection of identical MyISAM tablesNONONOMyISAMYESMyISAM storage engineNONO

2020-09-30 08:28:55 17

原创 解决Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid“ failed(2:No such file or directory)

问题[root@localhost sbin]# ./nginx -s reloadnginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)解决./nginx -c /usr/local/nginx/conf/nginx.conf[root@localhost local]# cd nginx[root@localhost nginx]# ll总用量 4dr

2020-09-14 16:45:24 62

原创 幸存者偏差

​幸存者偏差(英语:survivorship bias),另译为“生存者偏差”,是一种认知偏差。其逻辑谬误表现为过分关注于目前人或物“幸存了某些经历”然而往往忽略了不在视界内或无法幸存这些事件的人或物。在第二次世界大战期间,英国几乎每天派遣轰炸机飞越英吉利海峡,许多飞行员在这个冒险行动中不幸牺牲。为了提高飞行员的生存机会,统计学沃德教授应军方要求,利用其在统计方面的专业知识来提供关于《飞机应该如何加强防护,才能降低被炮火击落的几率》的相关建议。沃德教授提出的建议非常奇怪:装甲位置不该是弹孔最密集的机翼,而

2020-09-14 16:42:00 68

原创 分布式事务TCC

之前网上看到很多写分布式事务的文章,不过大多都是将分布式事务各种技术方案简单介绍一下。很多朋友看了还是不知道分布式事务到底怎么回事,在项目里到底如何使用。所以这篇文章,就用大白话+手工绘图,并结合一个电商系统的案例实践,来给大家讲清楚到底什么是 TCC 分布式事务。###一、业务场景介绍咱们先来看看业务场景,假设你现在有一个电商系统,里面有一个支付订单的场景。那对一个订单支付之后,我们需要做下面的步骤:更改订单的状态为“已支付”扣减商品库存给会员增加积分创建销售出库单通知仓库发货这是一

2020-09-14 16:40:45 40

原创 微信小程序版本自动更新

公司的小程序项目上线, 后期还会有小型的版本迭代. 为了让用户能在我们进行版本迭代后及时使用最新版本的功能. 做了以下优化…小程序的销毁当用户点击左上角关闭,或者按了设备Home 键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台,只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。“冷启动” 和 “热启动”.热启动是指: 小程序打开后,在一段时间内(目前:5分钟)再次被打开,此时会将后台的小程序切换到前台。冷启动是指: 小.

2020-09-14 16:39:55 29

原创 Error:java: JDK isn‘t specified for module ‘xxx‘

错误:idea报错Error:java:JDK isn’t specified for module “XXXX”原因:项目中的.idea文件夹被删掉,导致项目目录出错解决:idea中关掉该项目,删除文件目录下的 .idea文件,重新打开项目即可。

2020-09-14 16:38:41 33

原创 /bin/bash^M: 坏的解释器: 没有那个文件或目录

问题描述在安装完成gitblit之后,运行gitblit.sh文件时报错[root@localhost gitblit-1.9.0]# ./gitblit.sh -bash: ./gitblit.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录错误原因这个文件在Windows 下编辑过,在Windows下每一行结尾是\n\r,而Linux下则是\n,所以才会有 多出来的\r。修改错误使用指令sed -i 's/\r$//' xxxxxxx.sh,上面的指令会把 xxxxxx

2020-09-14 16:38:08 16

原创 ORA-00937: not a single-group group function

select sum(INSPECTION_PEOPLE) as inspectionPeople, FILLING_TIME as fillingTime from ZFTJ_HALF where REPORT = 1 and AREA_ID_PID ='131100000000' and FILLING_TIME like '2019%' [Err] ORA-00937: not a single-group group function...

2020-09-14 16:37:30 57

原创 使用 Travis CI 自动更新 GitHub Pages

前言Github Pages 不能运行动态程序,只能输出一些静态内容。因此 Github Pages 非常适合用于前端项目的展示。可用于存放项目介绍、项目文档或者个人博客。本文介绍了怎么用 Travis CI 自动化部署 Github Pages。CI持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现.

2020-09-14 16:36:31 19

原创 免费CDN:jsDelivr + Github

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。放在Github的资源在国内加载速度比较慢,因此需要使用CDN加速来优化网站打开速度,jsDelivr + Github便是免费且好用的CDN,非常适合博客网站使用。1、新建Github仓库2、克隆

2020-09-14 16:35:36 21

转载 MySQL中update修改数据与原数据相同会再次执行吗

背景本文主要测试MySQL执行update语句时,针对与原数据(即未修改)相同的update语句会在MySQL内部重新执行吗?环境MySQL5.7.25Centos 7.4binlog_format为ROW参数root@localhost : (none) 04:53:15> show variables like 'binlog_row_image';+------------------+-------+| Variable_name | Value |+----

2020-08-22 08:25:44 69

原创 为什么阿里规定需要在事务注解@Transactional中指定rollbackFor?

阿里巴巴Java规范:方法【edit】需要在Transactional注解指定rollbackFor或者在方法中显示的rollback。异常的分类Throwable:有两个重要的子类:Exception(异常)和Error(错误),二者都是Java异常处理的重要子类,各自都包含大量子类。Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM (Java虚拟机)出现的问题。例如。Java虚拟机运行错误(Virtual.

2020-08-22 08:23:39 146

原创 SpringIOC容器设计

IOC简介在Spring IoC容器的设计中,作者设计了两个接口来表示容器BeanFactoryBeanFactory简单粗暴,可以理解为HashMap,key是BeanName,value是Bean实例,通常只提供put和get。这系列容器只实现了容器的最基本功能,可看做为简单容器。ApplicationContextApplicationContext应用上下文,它作为容器的高级形态而存在。应用上下文在简单容器的基础上,增加了许多面向框架的特性,同时对应用环境做了许多适配。Spr

2020-08-22 08:22:22 114

原创 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-08-22 08:21:22 118

原创 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 192

原创 JVM&GC(四)-通用术语

G1(Garbage First).G1是一个并行回收器,他把内存分割为很多不相关的区间(Region),每个区间可以属于老年代或者年轻代,并且每个年代区间可以是物理上不连续的。垃圾回收时都是需要停下应用程序,不然没有办法防止应用程序的干扰,然后G1 GC可以集中精力在垃圾最多的区间上,并且只费一点点时间就可以清空这些区间里的垃圾,腾出完全空闲的区间。由于这种方式的侧重点在于处理垃圾最多的区间,所以我们给G1取一个名字:垃圾优先(Garbage First).G1内部主要有四个操作阶段:年轻代回收(

2020-07-23 14:47:35 32

原创 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 182 2

原创 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 122

原创 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 51

原创 垃圾回收算法(7)-分代回收算法

前言Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。在 Java 中,堆被划分成两个不同的区域:年轻代 ( Young )、老年代 ( Tenured)。年轻代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。 这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。堆大小 = 年轻代 + 老年代年轻代 = eden space (新生代) + from survivor +

2020-07-12 10:14:43 105

原创 垃圾回收算法(6)-增量算法

前言在垃圾回收过程中,应用软件处于一种Stop the World的状态。在Stop the World的状态下,应用程序的所有线程都会挂起,暂停一切工作,等待垃圾回收的完成。如果垃圾回收时间过长,应用程序会被挂起很久,将严重影响用户体验或者系统的稳定性。为了解决这个问题,即对实时垃圾手机算法的研究直接导致了增量收集算法的诞生。多进程运行思路最初,为了进行实时垃圾收集,可以设计一个多进程的运行环境,比如用一个进程执行垃圾收集工作,另一个进程执行程序代码。这样一来,垃圾收集工作看上去仿佛是在后台悄悄的干

2020-07-11 09:15:56 61

原创 垃圾回收算法(5)-标记整理算法

前言标记清除算法的确可以应用在老年代中,但是该算法不仅执行效率低下,而且在执行完内存回收后会产生内存碎片。所以JVM的设计者在此基础上做了改进,标记压缩法(也称标记整理法)由此诞生。算法原理当成功标记出内存中的垃圾对象之后,标记压缩法会将所有的存活对象都移动到一个规整且连续的内存空间中,然后执行Full GC(老年代的垃圾回收,或者被称为Major GC)回收无用对象所占用的内存空间。当成功压缩后,已用和未用的内存都各自一遍,彼此之间维系着一个记录下一次分配起始点的标记指针,当为新对象分配内存时,则可

2020-07-10 10:40:13 57

原创 垃圾回收算法(4)-复制算法

算法原理复制算法首先将或者的内存空间分为2块,每次只使用其中一块,在垃圾会搜时将正在使用的内存中的存活对象复制到未被使用的内存块中,之后清楚正在使用的内存块中的所有对象,交换2个内存的角色,最后完成垃圾回收。年轻代中的GCHotSpot JVM把年轻代分为了三部分:1个Eden区和2个Survivor区(分别叫from和to)。默认比例为8:1,为啥默认会是这个比例,接下来我们会聊到。一般情况下,新创建的对象都会被分配到Eden区(一些大对象特殊处理),这些对象经过第一次Minor GC后,如果仍

2020-07-10 10:39:20 107

原创 垃圾回收算法(3)-标记清除算法

前言标记清除算法(Mark-Sweep)是一种非常基础和常见的垃圾收集算法,该算法被J.McCarthy等人在1960年提出并成功的发明并应用于Lisp语言。涉及概念先来了解一下mutator和collector。这2个名词经常在垃圾收集算法中出现。collector指的就是垃圾收集器。mutator是指除了垃圾收集器之外的部分,比如说我们的应用程序本身。mutator的职责一般是NEW(分配内存)、READ(从内存中读取内容)、WRITE(将内容写入内存),而collector则就是回收不在使

2020-07-10 10:38:07 80

原创 垃圾回收算法(2)-根搜索算法

前言相对于引用计数算法而言,根搜索算法不仅同样具备实现简单和执行高效等特点,更重要的是该算法可以有效的解决在引用记数法中一些已经死亡的对象因为相互引用而导致的无法正确被标记的问题,防止内存泄漏的发生。算法原理根搜索算法是以根对象集合为起始点,按照从上至下的方式搜索被根对象集合所连接的目标对象是否可达(使用根算法后,内存中的存活对象都会被根对象集合直接或间接连接着)如果目标对象不可达,就意味着该对象已经死亡,便可将其标记为垃圾对象。在根搜索算法中不可达的对象,也并非是“非死不可”,这时候他们暂时处

2020-07-10 10:35:35 70

原创 垃圾回收算法(1)-引用计数法

算法原理引用记数法在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活的对象,哪些是已经死亡的对象,只有被标记为已经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间。比如说,当我们编写以下代码时String p = new String("abc")abc这个字符串对象的引用计数值为1.而当我们去除abc字符串对象的引用时,则abc字符串对象的引用计数减1p = null由此可见,当对象的引用计数为0时,垃圾回收就发生了。引用计数算法很简单,它实际上是通过在对象头中分

2020-07-10 10:34:26 79

原创 面向对象的7种设计原则(7)-开闭原则

开闭原则开闭原则是面向对象世界里最基础的设计原则,它指导我们如何建立一个稳定,灵活,可扩展的系统。开闭原则定义如下:Software entities like classes,modules and functions should be open for extension but closed for modifications.一个软件实体(如类,模块和函数)应该对扩展开放,对修改关闭。问题由来在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代

2020-07-07 11:14:48 186

原创 面向对象的7种设计原则(6)-迪米特原则

迪米特原则迪米特原则(Law of Demeter)又叫最少知道原则(Least Knowledge Principle),可以简单说成:talk only to your immediate friends,只与你直接的朋友们通信,不要跟“陌生人”说话。模式与意义迪米特法则,如果两个类不必彼此直接通向,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个累哦的某一个方法的话,可以通过第三者转发这个调用。迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当降低成员的访问权

2020-07-07 11:14:08 43

原创 面向对象的7种设计原则(5)-里氏代换原则

定义里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。原则第一点子

2020-07-07 11:13:22 44

原创 面向对象的7种设计原则(4)-合成/聚合复用原则

合成复用原则在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用这些对象的目的。如果两个类是“Has-a”关系应使用合成、聚合,如果是“Is-a”关系可使用继承。“Is-A"是严格的分类学意义上定义,意思是一个类是另一个类的"一种”。而"Has-A"则不同,它表示某一个角色具有某一项责任。什么是合成?什么是聚合?合成(Composition)和聚合(Aggregation)都是关联(Association)的特殊种类。聚合聚合用来表示“拥有”关系或者

2020-07-04 09:37:38 149

原创 面向对象的7种设计原则(3)-依赖倒置原则

依赖倒置原则High level modules should not depend upon low level modules.Both should depend upon abstractions.高层模块不应该依赖低层模块,两者都应该依赖其抽象(模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的)Abstractions should not depend upon details.抽象不应该依赖细节(接口或抽象类不依赖于实现类)Details

2020-07-04 09:36:47 80

原创 面向对象的7种设计原则(2)-接口隔离原则

定义Interface Segregation Principle客户端不应依赖它不需要的接口类间的依赖关系应该建立在最小的接口上其实通俗来理解就是,不要在一个接口里面放很多的方法,这样会显得这个类很臃肿。接口应该尽量细化,一个接口对应一个功能模块,同时接口里面的方法应该尽可能的少,使接口更加灵活轻便。或许有的人认为接口隔离原则和单一职责原则很像,但两个原则还是存在着明显的区别。单一职责原则是在业务逻辑上的划分,注重的是职责。接口隔离原则是基于接口设计考虑。例如一个接口的职责包含10个方

2020-07-04 09:36:04 98

原创 面向对象的7种设计原则(1)-单一职责原则

永远不要让一个类存在多个改变的理由。单一原则表明,如果你有多个原因去改变一个类,那么应该把这些引起变化的原因分离开,把这个类分成多个类,每个类只负责处理一种改变。当你做出某种改变时,只需要修改负责处理该改变的类。当我们去改变一个具有多个职责的类时可能会影响该类的其他功能单一职责原则代表了设计应用程序时一种很好的识别类的方式,并且它提醒你思考一个类的所有演化方式。只有对应用程序的工作方式有了很好的理解,才能很好的分离职责。单一职责原则原则的核心含意是:只能让一个类/接口/方法有且仅有一个职责。案例.

2020-07-04 09:35:17 71

原创 Spring事务隔离级别

事务隔离级别ISOLATION_DEFAULT这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。ISOLATION_READ_UNCOMMITTED这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。ISOLATION_READ_COMMITTED保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。ISOLATION_REPEATABL

2020-06-23 14:20:15 465 1

原创 Spring事务传播机制

传播性行为分为以下几种PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就

2020-06-23 11:57:10 90

原创 持续集成Jenkins安装[linux版]

安装JDKyum install -y java安装jenkins首先安装yum-fastestmirror插件它会自动选择最快的yum源,节约漫长的下载时间[root@localhost /]# yum install yum-fastestmirror -y已加载插件:fastestmirror, langpacksLoading mirror speeds from cached hostfile * base: mirrors.bfsu.edu.cn * extras: mirr

2020-06-04 09:31:57 114

原创 快速搭建 Git 服务器[Windows版]

服务器搭建下载下载 JDK:https://www.oracle.com/technetwork/java/javase/downloads/下载 Gitblit:http://gitblit.com/解压解压缩下载的压缩包即可,无需安装。创建本地存储文件夹配置打开data文件夹下的gitblit.properties在第17行可以看到include = defaults.properties同文件夹下找到defaults.properties将上边配置的本地存储文件夹的

2020-06-03 09:22:02 234

原创 快速搭建 Git 服务器[Linux版]

下载如果未安装wget,则先安装wgetyum install wget安装完成[root@localhost local]# yum install wget已加载插件:fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.aliyun.com * epel: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.a

2020-06-02 11:05:49 108

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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