<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[MassiveStars的博客]]></title><description><![CDATA[Never too high, never too low.]]></description><link>https://blog.csdn.net/MassiveStars</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; MassiveStars]]></copyright><item><title><![CDATA[从JVM的退出机制分析Java程序的优雅关闭退出]]></title><link>https://blog.csdn.net/MassiveStars/article/details/136792158</link><guid>https://blog.csdn.net/MassiveStars/article/details/136792158</guid><author>MassiveStars</author><pubDate>Mon, 18 Mar 2024 00:03:27 +0800</pubDate><description><![CDATA[JVM的退出可以分正常退出、异常退出和强制退出，每种退出方法的不同会产生不过的情况，汇总如下：Linux操作系统关闭不完全支持优雅退出，原因是Linux关闭时先会向进程发送SIGTERM信号，等待一段时间进程还没退出时就会强制关闭进程，所以Linux只会给一定时间让进程关闭退出。JVM可通过以下几种方式正常退出最后一个非守护线程结束。JVM被中断（通过ctrl + c或发送SIGINT信号）。JVM被终止（通过发送SIGTERM信号，即或kill PID某个线程调用或。当。]]></description><category></category></item><item><title><![CDATA[Spring事务注解@Transactional的流程和源码分析]]></title><link>https://blog.csdn.net/MassiveStars/article/details/136546846</link><guid>https://blog.csdn.net/MassiveStars/article/details/136546846</guid><author>MassiveStars</author><pubDate>Thu, 07 Mar 2024 22:01:58 +0800</pubDate><description><![CDATA[在事务处理中事务的定义类TransactionDefinition有很多衍生类和接口，它们的属性从事务注解@Transactional解析而来，在原码里名称为txAttr，关系如下：其中DelegatingTransactionAttribute的类图：图上那一系列类和接口，虽然比较绕，但都是和事务的定义有关。]]></description><category></category></item><item><title><![CDATA[Java计划线程池ScheduledThreadPoolExecutor运行流程和源码分析]]></title><link>https://blog.csdn.net/MassiveStars/article/details/136306120</link><guid>https://blog.csdn.net/MassiveStars/article/details/136306120</guid><author>MassiveStars</author><pubDate>Mon, 26 Feb 2024 22:42:21 +0800</pubDate><description><![CDATA[继承自线程池，并在其基础上增加了按时间调度执行任务的功能，如果对Java线程池ThreadPoolExecutor运行机制和源码解析。首先来翻译一下这个类的前面的单词scheduled： 预先安排的，按时刻表的；定期的。那么ScheduledThreadPoolExecutor可翻译为计划线程池、定时线程池。大多数时候，线程池已经使用了池化技术很好的满足了线程的重复使用需要，为什么还要另外搞一个ScheduledThreadPoolExecutor呢？无法设置任务在指定时间点执行。]]></description><category></category></item><item><title><![CDATA[Java线程池ThreadPoolExecutor运行机制和源码解析]]></title><link>https://blog.csdn.net/MassiveStars/article/details/136186458</link><guid>https://blog.csdn.net/MassiveStars/article/details/136186458</guid><author>MassiveStars</author><pubDate>Tue, 20 Feb 2024 19:52:38 +0800</pubDate><description><![CDATA[线程的每次创建和销毁都会产生的一定的系统资源和时间的开销。正如几乎所有重资源都使用池化技术（数据库连接池、redis连接池等）进行管理，线程作为操作系统宝贵的资源，对它的使用需要进行控制管理，线程池就是使用了池化的技术对线程进行复用和管理。快速响应用户请求线程的启动需要一定时间开销，而使用了池化的线程时，当任务到达，节省了这部分的时间。Tomcat就使用自行扩展的ThreadPoolExecutor处理http请求，减小响应时间。减少资源开销。]]></description><category></category></item><item><title><![CDATA[Spring Cloud Netflix Eureka组件服务注册及发现源码浅析]]></title><link>https://blog.csdn.net/MassiveStars/article/details/79735159</link><guid>https://blog.csdn.net/MassiveStars/article/details/79735159</guid><author>MassiveStars</author><pubDate>Wed, 28 Mar 2018 23:00:18 +0800</pubDate><description><![CDATA[Spring Cloud简介

微服务这个概念已经深入人心，是最近几年的最热门技术话题之一，Spring Cloud是最流行的开源微服务框架。

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发， 
如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等，都可以用Spring Boot的开发风格做到一键启动和部署...]]></description><category></category></item><item><title><![CDATA[ThreadLocal的源码分析和理解]]></title><link>https://blog.csdn.net/MassiveStars/article/details/79601981</link><guid>https://blog.csdn.net/MassiveStars/article/details/79601981</guid><author>MassiveStars</author><pubDate>Sun, 18 Mar 2018 16:51:12 +0800</pubDate><description><![CDATA[ThreadLocal的字面意思就是线程的本地变量，也就是说线程的局部变量。ThreadLocal在每个线程中都有自己的副本，亦即一个线程一份数据，相互之间不影响。 
ThreadLocal提供get和set访问方法，使用get时总是返回set方法的最新值。ThreadLocal一个典型的应用就是减少一个线程内的参数传递，如数据库连接JDBCConnection或用户的Session，避免每个方法...]]></description><category></category></item><item><title><![CDATA[余弦cos计算相似度]]></title><link>https://blog.csdn.net/MassiveStars/article/details/79601666</link><guid>https://blog.csdn.net/MassiveStars/article/details/79601666</guid><author>MassiveStars</author><pubDate>Sun, 18 Mar 2018 16:24:18 +0800</pubDate><description><![CDATA[余弦计算相似度度量相似度度量（Similarity），即计算个体间的相似程度，相似度度量的值越小，说明个体间相似度越小，相似度的值越大说明个体差异越大。对于多个不同的文本或者短文本对话消息要来计算他们之间的相似度如何，一个好的做法就是将这些文本中词语，映射到向量空间，形成文本中文字和向量数据的映射关系，通过计算几个或者多个不同的向量的差异的大小，来计算文本的相似度。下面介绍一个详细成熟的向量空间余...]]></description><category></category></item><item><title><![CDATA[Docker实践 - docker + svn + maven + tomcat 部署Java Web项目]]></title><link>https://blog.csdn.net/MassiveStars/article/details/54381761</link><guid>https://blog.csdn.net/MassiveStars/article/details/54381761</guid><author>MassiveStars</author><pubDate>Thu, 12 Jan 2017 21:05:54 +0800</pubDate><description><![CDATA[要准备的环境
  
  docker
  maven
  jdk
  svn
  docker官方的tomcat镜像
  
有关环境的安装和配置可参考
  linux下安装JDK
  
  linux系统安装maven
  
  安装Docker并在容器里运行tomcat
  
  centos下安装svn可以用yum快捷安装yum install svn
要实现一键部署其实就是要写一个脚本帮助我们]]></description><category></category></item><item><title><![CDATA[Docker实践 - 使用maven插件自动部署web应用至Docker容器的tomcat]]></title><link>https://blog.csdn.net/MassiveStars/article/details/54357293</link><guid>https://blog.csdn.net/MassiveStars/article/details/54357293</guid><author>MassiveStars</author><pubDate>Thu, 12 Jan 2017 00:22:10 +0800</pubDate><description><![CDATA[此前在一篇文章有讲到将maven项目部署至tomcat
  使用maven的tomcat插件实现webapp的自动部署
本文就是将maven-tomcat-plugins和Docker结合起来，将web应用部署至运行tomcat的容器配置maven在pom.xml加入    <plugins>
        <plugin>
            <groupId>org.apache.tomc]]></description><category></category></item><item><title><![CDATA[Docker实践  -  安装Docker并在容器里运行tomcat]]></title><link>https://blog.csdn.net/MassiveStars/article/details/54352484</link><guid>https://blog.csdn.net/MassiveStars/article/details/54352484</guid><author>MassiveStars</author><pubDate>Wed, 11 Jan 2017 22:58:39 +0800</pubDate><description><![CDATA[随着微服务的流行，Docker越来越流行，正如它的理念”Build, Ship, and Run Any App, Anywhere”一样，Docker提供的容器隔离技术使得开发人员不用再去理清server里的各种环境配置，轻松把应用运行起来。我们只需把运行环境的配置和应用封装在Docker的镜像(image)，然后使用Docker运行这个镜像即可。Docker可以说是给所有开发人员的一个福利包，学]]></description><category></category></item><item><title><![CDATA[使用maven的tomcat插件实现webapp的自动部署]]></title><link>https://blog.csdn.net/MassiveStars/article/details/54318149</link><guid>https://blog.csdn.net/MassiveStars/article/details/54318149</guid><author>MassiveStars</author><pubDate>Tue, 10 Jan 2017 22:01:38 +0800</pubDate><description><![CDATA[前言maven已经成为Java项目事实上的构建标准，如果能自动将项目部署至tomcat还是能节省很多人力的。下面我们使用maven的tomcat插件将web项目打包好的war包部署至tomcat里。在项目的pom.xml加入tomcat7-maven-plugin插件    <plugins>
          <plugin>
              <groupId>org.apache.]]></description><category></category></item><item><title><![CDATA[配置nginx + keepalived双主模式（双机互为主备）]]></title><link>https://blog.csdn.net/MassiveStars/article/details/54290055</link><guid>https://blog.csdn.net/MassiveStars/article/details/54290055</guid><author>MassiveStars</author><pubDate>Mon, 09 Jan 2017 20:03:20 +0800</pubDate><description><![CDATA[前言


  此前已经写过一篇使用keepalived实现nginx的高可用 
  这种方式有一台机器一直作backup使用，比较浪费资源



使用keepalived来实现nginx的高可用


下面来配置nginx+keepalived的双主机双机热备，这种配置下有两个Virtual IP，两个机器互为主备，最后我们把域名DNS服务器解析至两个Virtual IP即可。



环境介绍

两]]></description><category></category></item><item><title><![CDATA[设置Linux下vi和vim语法高亮、显示行数]]></title><link>https://blog.csdn.net/MassiveStars/article/details/54144345</link><guid>https://blog.csdn.net/MassiveStars/article/details/54144345</guid><author>MassiveStars</author><pubDate>Sat, 07 Jan 2017 00:02:56 +0800</pubDate><description><![CDATA[vim默认情况下已经有语法高亮了，现在我们要设置打开的时候默认显示行数。而对于vi我们只需在使用的时候默认使用vim即可。
1、vim加入语法高亮和显示行数功能若要对全部用户起作用vi /etc/vimrc在最后加入syntax on
set nu
syntax on  开启语法高亮
set nu        显示行数  若找不到vimrc文件可以全局查找 find / -name “vimrc”]]></description><category></category></item><item><title><![CDATA[使用Spring和Atomikos集成JTA分布式事务]]></title><link>https://blog.csdn.net/MassiveStars/article/details/54025236</link><guid>https://blog.csdn.net/MassiveStars/article/details/54025236</guid><author>MassiveStars</author><pubDate>Wed, 04 Jan 2017 22:38:42 +0800</pubDate><description><![CDATA[分布式事务
分布式事务是指事务位于不同的分布式系统的不同节点之上。目的是保证分布式系统事务的原子性和一致性。XA规范是由X/Open DTP提出的分布式事务规范。XA规范包含四大角色：应用程序( AP )事务管理器( TM )资源管理器( RM )通信资源管理器( CRM )常见的事务 管理器( TM )是交易中间件,常见的资源管理器( RM )是数据库,常见的通信资源管理器( CRM )是消息]]></description><category></category></item><item><title><![CDATA[JVM系列:JVM参数设置、分析]]></title><link>https://blog.csdn.net/MassiveStars/article/details/53998477</link><guid>https://blog.csdn.net/MassiveStars/article/details/53998477</guid><author>MassiveStars</author><pubDate>Tue, 03 Jan 2017 21:54:25 +0800</pubDate><description><![CDATA[不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数，可以极大的减少由于GC工作，而导致的程序运行中断方面的问题，进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程，由于各个程序具备不同的特点，如：web和GUI程序就有很大区别（Web可以适当的停顿，但GUI停顿是客户无法接受的），而且由于跑在各个机器上的配置不同]]></description><category></category></item><item><title><![CDATA[关于防止微信投票刷票行为的一些思考]]></title><link>https://blog.csdn.net/MassiveStars/article/details/53926994</link><guid>https://blog.csdn.net/MassiveStars/article/details/53926994</guid><author>MassiveStars</author><pubDate>Thu, 29 Dec 2016 13:58:57 +0800</pubDate><description><![CDATA[背景介绍微信投票在这几年一直很热门，只要是个活动往往都做一个投票的功能。刷票已形成了一个庞大的产业链但如何防止刷票行为就很让人头疼了。首先要清楚微信的刷票行为，微信投票是根据openid来判断一个用户是否已投过票。
  openid是加密后的微信号，每个用户对每个公众号的openid是唯一的。
这个判断依据有较大的漏洞，就是只能判断openid是否重复，但无法校验openid是不是真实的。而且就算o]]></description><category></category></item><item><title><![CDATA[将List转成树的两种方式(递归、循环)]]></title><link>https://blog.csdn.net/MassiveStars/article/details/53911620</link><guid>https://blog.csdn.net/MassiveStars/article/details/53911620</guid><author>MassiveStars</author><pubDate>Wed, 28 Dec 2016 18:37:37 +0800</pubDate><description><![CDATA[在做目录树的时候通常是将一个目录存在数据库的List全部返回来，再根据节点id和parentId组装成一颗树，这里切忌使用递归查询的方式实现。List转成Tree有两种方式，一种是常用的递归，一种是双层循环。


TreeNode.java
package org.massive.tree;

import java.util.List;

/**
 * Created by Massiv]]></description><category></category></item><item><title><![CDATA[使用Zookeeper实现Leader(Master)选举]]></title><link>https://blog.csdn.net/MassiveStars/article/details/53894551</link><guid>https://blog.csdn.net/MassiveStars/article/details/53894551</guid><author>MassiveStars</author><pubDate>Wed, 28 Dec 2016 00:28:12 +0800</pubDate><description><![CDATA[分布式系统最典型的架构就是一主多从。在很多时候，虽然处理大规模的数据、图像和文件等，这种工作极其耗资源而且数据、文件等都是共享的，若全部机器都计算处理一次会浪费保贵的计算资源；我们可以把这些工作交给一台机器处理，其它机器则通过数据库、分布式文件系统等方式共享计算成果Leader(Master)。另外，对于数据库、缓存等组件读写分离是惯用的提高性能的方式；读写分离是把写全部给leader(master)，查询则使用follower的机器。使用Zookeeper提供的API可轻松实现leader选举。]]></description><category></category></item><item><title><![CDATA[使用ZooKeeper实现队列]]></title><link>https://blog.csdn.net/MassiveStars/article/details/53870399</link><guid>https://blog.csdn.net/MassiveStars/article/details/53870399</guid><author>MassiveStars</author><pubDate>Mon, 26 Dec 2016 09:27:37 +0800</pubDate><description><![CDATA[实现原理
先进先出队列是最常用的队列，使用Zookeeper实现先进先出队列就是在特定的目录下创建PERSISTENT_SEQUENTIAL节点，创建成功时通知等待的队列，队列消费序列号最小的节点。
此场景下Zookeeper的znode用于消息存储，znode存储的数据就是消息队列中的消息内容，SEQUENTIAL序列号就是消息的编号，按序取出即可。

由于创建的节点是持久化的，所以不必]]></description><category></category></item><item><title><![CDATA[使用Zookeeper实现分布式锁]]></title><link>https://blog.csdn.net/MassiveStars/article/details/53771532</link><guid>https://blog.csdn.net/MassiveStars/article/details/53771532</guid><author>MassiveStars</author><pubDate>Wed, 21 Dec 2016 00:16:18 +0800</pubDate><description><![CDATA[实现原理

Zookeeper的一个典型应用场景就是分布式锁，锁的实现是利用Zookeeper创建的临时时序节点(创建的时候CreateMode为EPHEMERAL_SEQUENTIAL)和节点变动的监听器实现的。时序节点保证了节点的创建在分布式系统情况下还是有先后顺序的,
监听器使得客户端能感受到节点的变动情况。






具体步骤

1、创建一个永久性节点，作锁的根目]]></description><category></category></item></channel></rss>