青春年少不知疼的博客

私信 关注
JAVA菜鸟程序员
码龄8年

不要在该奋斗的年纪选择了安逸,只有度过了一段连自己都被感动的日子,才会变成那个最好的自己。

  • 252,115
    被访问量
  • 125
    原创文章
  • 33,367
    作者排名
  • 60
    粉丝数量
  • 于 2012-12-24 加入CSDN
获得成就
  • 获得72次点赞
  • 内容获得42次评论
  • 获得336次收藏
荣誉勋章
兴趣领域
  • #后端
    #Spring Boot#MySQL#Java#Redis#Linux#架构#Elasticsearch#分布式#Python#Spring#Go/GoLang
TA的专栏
  • 微信公众号
    付费
    4篇
  • redis
    2篇
  • jmeter
    1篇
  • SpringCloud
    9篇
  • 数据库
    1篇
  • 工具
    1篇
  • 杂记
  • SpringBoot
    6篇
  • shell
    1篇
  • nginx
  • mongodb
    2篇
  • 算法
    5篇
  • 缓存
    2篇
  • 网络
    2篇
  • Myeclipse插件安装
    1篇
  • 服务器
    5篇
  • linux
    1篇
  • Windows
  • java
    39篇
  • tomcat
    2篇
  • Spring
    5篇
  • Intellij
    1篇
  • DataBase
    12篇
  • VMware
    1篇
  • dubbo
    2篇
  • Git
    3篇
  • spring-mvc
    1篇
  • JVM
    16篇
  • 设计模式
    8篇
  • Proxy
    1篇
  • Mybatis
    2篇
  • 其他
    2篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Can not find java process. Try to pass <pid> in command line. Please select an available pid

一、问题描述在下载完了arthas后,直接通过java -jar arthas-boot.jar执行,就直接报错了。二、原因在arthas启动前,需要有java进程启动。三、解决方法在启动arthas之前先启动一个java程序测试代码如下:public class T15_FullGC_Problem01 { private static class CardInfo { BigDecimal price = new BigDecimal(0.0);
原创
9阅读
0评论
0点赞
发布博客于 3 小时前

jconsole和jvisualVm远程连接服务器,查看JVM信息

一、测试代码public class T15_FullGC_Problem01 { private static class CardInfo { BigDecimal price = new BigDecimal(0.0); String name = "张三"; int age = 5; Date birthdate = new Date(); public void m() { }
原创
8阅读
0评论
0点赞
发布博客于 21 小时前

jstack和线程dump分析

一、测试代码写了一个死锁的代码。public class DeadLockDemo { private static String obj1 = "obj1"; private static String obj2 = "obj2"; public static void main(String[] args) { Thread t1 = new Thread(new Lock1()); Thread t2 = new Thread(ne
原创
8阅读
1评论
0点赞
发布博客于 昨天

jstack命令执行报错:Unable to open socket file: target process not responding or HotSpot VM not loaded

一、背景最近在学jvm调优,在使用jstack命令时,出现报错。网上查了好多,都没有找到合适解决方法。二、解决方法1.测试代码public class T15_FullGC_Problem01 { private static class CardInfo { BigDecimal price = new BigDecimal(0.0); String name = "张三"; int age = 5; Date b
原创
15阅读
0评论
0点赞
发布博客于 昨天

JVM参数之GC日志配置

https://blog.csdn.net/qq_40902067/article/details/106004313
转载
6阅读
0评论
0点赞
发布博客于 昨天

常见的垃圾回收器

一、参考文章https://www.cnblogs.com/datiangou/p/10245874.html二、常用垃圾回收器1. JDK诞生 Serial追随 提高效率,诞生了PS,为了配合CMS,诞生了PN,CMS是1.4版本后期引入,CMS是里程碑式的GC,它开启了并发回收的过程,但是CMS毛病较多,因此目前任何一个JDK版本默认是CMS 并发垃圾回收是因为无法忍受STW2. Serial 年轻代 串行回收3. PS 年轻代 并行回收4. ParNew 年轻代 配合CM
原创
30阅读
0评论
0点赞
发布博客于 4 天前

对象创建过程以及对象在内存中的布局

1).loading:加载,将对象的class文件加载到内存2).linking(verification、preparation、resolution)verification:校验calss文件的格式是否符合虚拟的规范preparation:将静态变量赋默认值resolution:将类、方法、属性等符号引用解析为直接引用3).initializing:将静态变量设为初始值,同时执行静态语句块4).申请对象内存5).成员变量赋默认值6).调用构造方法<...
原创
16阅读
0评论
0点赞
发布博客于 7 天前

volatitle、synchronized实现细节

一、volatitle实现细节1).字节码层面加了一个ACC_VOLATITLE标识2).jvm层面volatitle内存区的读写,都加屏障写操作:StoreStoreBarriervolatile 写操作StoreLoadBarrier读操作LoadLoadBarriervolatile读操作LoadStoreBarrier3).os和硬件层面参考这篇文章:https://blog.csdn.net/qq_26222859/article/de...
原创
25阅读
0评论
0点赞
发布博客于 7 天前

打破双亲委派模型,重写loadClass方法

一、背景之前总结一篇关于自定义类加载器的文章,自定义类加载器主要是重写findClass方法;它的原理就是,当父类加载都找不到要加载的类时,通过重写的findClass方法可以实现自定义类加载器;我们知道类加载的原理是双亲委派机制,那么今天主要是想通弄重新loadClass方法来打破双亲委派机制;这种操作一般会出现在热部署过程中!二、实现1.需要被加载的类package com.example.jvm.demo;import java.io.PrintStream;public c
原创
27阅读
0评论
0点赞
发布博客于 18 天前

Redis安装详细步骤

一、redis软件下载下载地址:1.https://redis.io/(英文网站)2.http://redis.cn/(中文网站)二、安装1.在redis下载网站,复制下载地址,然后再linux中通过wget下载wget http://download.redis.io/releases/redis-6.0.6.tar.gz2.解压tar -xf redis-6.0.10.tar.gz3.安装解压完成后,通过make命令安装,但是我在执行完make命令之后报错了,
原创
29阅读
0评论
0点赞
发布博客于 21 天前

java自定义类加载器

一、被加载的测试类1.将被加载的测试类放到d盘test目录下,然后其他子目录按照测试的包名创建,完整路径值这样的:D:\test\com\example\jvm\demo2.测试类如下:package com.example.jvm.demo;import java.io.PrintStream;public class Hello{ public void show() { System.out.println("hello"); }}二、自定义加载器
原创
24阅读
2评论
0点赞
发布博客于 22 天前

JDK官方文档(包含所有版本)

JDK官方文档地址(所有版本):https://docs.oracle.com/javase/specs/index.html
原创
30阅读
0评论
0点赞
发布博客于 1 月前

jmeter安装配置

一、软件下载下载地址:http://jmeter.apache.org/二、环境变量配置软件下载完成后,直接解压即可,我使用的版本是apache-jmeter-5.4.1;JDK自行安装,JDK我之前已经安装过了,这里就不再重复安装了,我使用的JDK版本是1.8的;下面开始jmeter环境变量配置。1.点击我的电脑----属性----高级----环境变量----在系统变量中----点击新建,2.在变量名中输入:JEMETER_HOME3.变量值中输入:D:\Download\java
原创
25阅读
0评论
0点赞
发布博客于 1 月前

使用DiscoveryClient的getServices()方法获取不到服务名,其他方法也都获取不到

一、背景最近在学习springcloud,在使用customer调用provider时,通过DiscoveryClient获取不到服务名列表,其他方法也获取不到相应的数据,在网上找了好久,终于发现问题所在,在这里总结下!希望对遇到同样问题的小伙伴有帮助!二、代码通过getServices()方法,获取不到已经注册到Eureka中的服务名。 @RequestMapping("/client") public String client(){ List<Strin
原创
139阅读
0评论
0点赞
发布博客于 1 月前

Mysql用localhost可以连接,用ip不能连接

一、背景今天公司dev服务器和uat服务器硬件坏了,之前从dev服务器导了一份数据到本地库;之前一直都是用localhost连接数据,然后把自己的ip提供给其他人连接时,提示如下错误!项目启动时也是直接报错。二、解决方法1.查询root用户的主机,发现root用户对应的主机名默认为localhostselect host,user from mysql.user;2.修改root用户的主机名为所有ipupdate mysql.user set host = '%' where u
原创
26阅读
0评论
0点赞
发布博客于 1 月前

Mybatis配置sql打印日志

logback.xml 文件配置如下,直接放到resources文件夹下就可以使用了<?xml version="1.0" encoding="UTF-8"?><configuration debug="false"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="/test/log" /> <!-- 控制台输出 --&g
原创
46阅读
0评论
0点赞
发布博客于 1 月前

IDEA下搭建Eureka集群

一、新建springboot项目添加依赖如下:<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </depend
原创
27阅读
0评论
0点赞
发布博客于 1 月前

SprintBoot项目获取resources目录下的文件并下载

一、背景 最近做的一个项目,需要下载一个Excel模板,然后导入数据,所以,将Excel文件放到resources目录下。二、方式 2.1 刚开始本地测试的使用的是如下方式:但是在服务器上却无法下载,因为项目打成jar包 try { File sourceFile = ResourceUtils.getFile(Constants.EXCEL_TEMPLATE_PATH); String filePath = sourceFil...
原创
26阅读
0评论
0点赞
发布博客于 1 月前

使用@Slf4j替代传统的日志打印

一、背景我们在日常的项目中,经常会用到日志打印的功能,但是每次我们新创建一个Service或者Controller等类时,都需把下面这段代码拷贝过来,显得比较麻烦。今天介绍一种注解的方式打印日志,个人觉得还是比较方便的。private final static Logger logger = LoggerFactory.getLogger(xxx.class);二、介绍 今天介绍的注解是@Slf4j,只需在需要打印的类上面加这个注解,就可以使用log.info()、log.de...
原创
165阅读
2评论
0点赞
发布博客于 4 月前

mybatis-generator生成工具(最新版,非gui版本)

mybatis现如今已经成为了我们使用比较频繁的持久层了,但是我们在开发的过程中,如果手动的去写持久层的东西比较耗时和麻烦,虽然GitHub已经有gui版本的生成工具了,虽然可以减轻一部分工作量;但是在使用起来还是不太方便!所以自己重构了一套既可以生成前台页面,又可以生成mybatis持久层的工具,分享出来,希望能够帮助到大家!
rar
发布资源于 5 月前

mybatis-generator生成工具(最新版,非gui版本)

一、背景 mybatis现如今已经成为了我们使用比较频繁的持久层了,但是我们在开发的过程中,如果手动的去写持久层的东西比较耗时和麻烦,虽然GitHub已经有gui版本的生成工具了,虽然可以减轻一部分工作量;但是在使用起来还是不太方便!所以自己重构了一套既可以生成前台页面,又可以生成mybatis持久层的工具,分享出来,希望能够帮助到大家!二、Mybatis-GUI版本回顾 前几天去github上下载了一个gui版本的生成工具使用了下,界面比价简洁(如图一),使用起来也很...
原创
175阅读
0评论
0点赞
发布博客于 5 月前

支付宝当面付

一、背景目前公司支付平台集成了支付宝app、微信app、支付宝小程序、微信小程序、支付宝H5(扫码-主扫)、微信H5(扫码-主扫)、云闪付、建设钱包付等多种支付方式,今天给大家分享支付宝当面付的支付流程。二、代码目前我们当面付是把支付宝和微信集成在一个Controller里面的,今天先拆分下,分享支付宝当面付,下面是主要的代码。@RequestMapping("/createOrder") public String creatOrder(@Valid FaceToFaceCrea
原创
267阅读
1评论
0点赞
发布博客于 7 月前

支付宝H5支付

一、背景最近在公司做支付平台相关的工作,涉及到微信、支付宝、建设银行、平安银行、云闪付相关的支付对接,在这里总结下在实际工作中涉及到的与第三方渠道的对接,以及如何融入到自己项目的业务流程中。今天先总结下支付H5的支付流程。由于H5支付我们这边目前集成了微信、支付宝和银联,这个三个渠道支付,今天主要是总结支付宝H5支付,所以微信和银联的处理先省去了。二、技术实现下面这个部分代码是通过扫码付进入的(由于我们的业务是针对社康和医院的扫码支付)。 @RequestM...
原创
239阅读
0评论
0点赞
发布博客于 8 月前

10大排序算法时间复杂度和空间复杂度总结

中文名称 英文名称 平均时间复杂度 最坏时间复杂度 最好时间复杂度 空间复杂度 稳定性 选择排序 Selection n2 n2 n2 1 不稳 冒泡排序 Bubble ...
原创
213阅读
0评论
0点赞
发布博客于 8 月前

git统计代码行数

git log --since=2018-01-01 --until=2020-05-25 --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s
", add, subs, loc }'注:since和until分别表示开始和结束时间,可根据实际情况修改...
原创
127阅读
0评论
0点赞
发布博客于 9 月前

SpringBoot整合Dubbo+zookeeper(吐血整理)

一、背景 以前用spring单独整合过Dubbo+zookeeper,因为用springboot已经好长时间,而且配置也方便,想着重新用springboot整合下Dubbo+zookeeper;各种心酸,因为一个注解的问题导致消费者无法注册到Dubbo中,心累!后面会提到的。二、前期准备1.zookeeper安装下载地址:链接:https://pan.baidu...
原创
3475阅读
5评论
1点赞
发布博客于 10 月前

多线程处理大量数据

一、背景最近在在建设银行代发功能,需要批量处理代发数据,线性处理效率比较低,大概1秒钟一条数据;然后考虑用多线程处理。刚开始使用的是Executors.newFixedThreadPool(10)这种方式创建固定数量线程池;后面考虑到数据量大的时候,可能队列装不下,导致异常,然后换成了ExecutorService executorSer = new ThreadPoolExecutor(10...
原创
667阅读
0评论
0点赞
发布博客于 10 月前

常用正则表达式

public final static String EMAIL = "([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+";public final static String EMAIL_MSG = "请输入正确的邮箱";public final static String PHONE = "^[0-9-]{6,40}$";public...
原创
106阅读
0评论
0点赞
发布博客于 10 月前

java 元分互转

/** * 将金额从元转换为分 * @param amount 金额(单位:元) * @return 金额(单位:分) */ public static String changeY2F(String amount){ String currency = amount.replace("\\$|\\¥\\,", ""); ...
原创
100阅读
0评论
0点赞
发布博客于 10 月前

SpringBoot的三种启动方式

1、背景 这几天在看面试题,看到了有关SpringBoot的相关知识点,其中有一个问题是:“SpringBoot有哪几种启动方式?”。一下子懵逼了,脑子里面只记得在本地启动的时候是在Main方法中直接启动的(因为我们的测试环境是自动安装部署的,生产环境是运维负责安装部署的)。2.启动方式有三种启动方式: 1)Main方法启动:这种方式一般在本地测试的时候用的比较...
原创
161阅读
0评论
0点赞
发布博客于 11 月前

Shell学习

1.shell脚本以#!/bin/bash开头2.小练习 vi test.sh #!/bin/bash echo "hello world" #屏幕上打印出“hello world” mkdir /home/dengchao/temp #创建temp目录 touch /home/dengchao/temp/a.txt #创建a.txt文件3...
原创
62阅读
0评论
0点赞
发布博客于 11 月前

Nginx学习

nginx安装1.yum install gcc-c++2.yum -y install pcre pcre-devel3.yum -y install zlib zlib-devel4.yum -y install openssl openssl-devel5.wget(下载ngixn安装包)6.解压...
原创
51阅读
0评论
0点赞
发布博客于 11 月前

mongoDB学习笔记

1.mongodb启动./mongod --dbpath=/usr/local/mongo/data/db/ --logpath=/usr/local/mongo/data/logs --fork --port 27017解释:--dbpath:数据库路径--logpath:日志路径--fork:后台运行--port:端口(默认端口:27017)2.正常关闭mongodb...
原创
60阅读
0评论
0点赞
发布博客于 1 年前

mongoDB部署安装

一、安装包下载到mongoDB观望下载安装包:https://www.mongodb.com/download-center/community本文使用的mongoDB暗装包版本为:mongodb-linux-x86_64-3.0.6.tgz二·、安装1.将下载到服务器上的安装包解压 tar zxvf mongodb-linux-x86_64-3.0.6.tgz 2.将解...
原创
98阅读
0评论
0点赞
发布博客于 1 年前

reids安装部署

一、安装包下载下载地址:http://download.redis.io/releases/redis-5.0.7.tar.gz直接在linux上在线下载 wget http://download.redis.io/releases/redis-5.0.7.tar.gz二、安装1、将下载好的安装包解压到/usr/local/redis目录下tar -zxvf re...
原创
48阅读
0评论
0点赞
发布博客于 1 年前

Java设计模式-适配器模式

1 初步认识适配器模式的定义  将一个类的接口转成客户期望的另外一个接口。适配器模式使得原本由于接口不匹配而不能一起工作的那些类可以一起工作。大白话  适配器模式就像旅行插座转换器(图1)、Type-c转VGA转接口(图4)一样。 图1. 图片来源网络 ...
转载
58阅读
0评论
0点赞
发布博客于 1 年前

Java设计模式-策略模式

介绍策略模式的思想是提取算法或者行为,对算法或者策略进行封装成类,并装配到一个环境类(context)上,使得环境类可以使用不同的算法或者策略来解决不同的问题。策略模式是一种行为型设计模式。这种设计模式解决的是硬编码场景中的算法扩展问题。针对某一个场景,可能存在多个算法来进行处理。这多个算法,可能是写在一个工具类的不同的方法中,也有可能是写在一个方法中根据不同的条件进行if-else的选择...
转载
54阅读
0评论
0点赞
发布博客于 1 年前

JAVA设计模式-观察者模式

1、初步认识观察者模式的定义:  在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。大白话:  其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。2、这个模式的结构图3、可以看到,该模式包含四个角色抽象被观察者角色:也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,...
转载
45阅读
0评论
0点赞
发布博客于 1 年前

缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题

一、缓存雪崩缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。缓存正常从Redis中获取,示意图如下:缓存失效瞬间示意图如下:缓存失效时的雪崩...
转载
48阅读
0评论
0点赞
发布博客于 1 年前

缓存穿透、缓存击穿、缓存雪崩区别和解决方案

一、缓存处理流程前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。二、缓存穿透描述:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导...
转载
98阅读
0评论
0点赞
发布博客于 1 年前

java算法-快速排序

一、思想该算法在数组中选择一个主元将数组一分为二。使得第一部分中的元素都小于或等于主元,第二部分中的元素都大于主元。然后对第一部分递归应用快速排序算法,对第二部分递归的应用快速排序算法。不过快速排序每次划分都将主元放在了恰当的位置,因为主元的选择直接影响了算法的性能。在理想的情况下,应该选择能平均划分两部分的主元。二、图解三、代码实现 public static void q...
原创
93阅读
0评论
0点赞
发布博客于 1 年前

java算法-插入排序

一、原理插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。动图演示:二、代码 publ...
原创
51阅读
0评论
0点赞
发布博客于 1 年前

java算法-冒泡排序

一、冒泡排序原理比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。动态图:二、代码...
原创
36阅读
0评论
0点赞
发布博客于 1 年前

java算法-二分查找算法

一、二分查找算法思想又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。二、图示说明三、二分查找优缺点优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序...
原创
193阅读
0评论
0点赞
发布博客于 1 年前

数据库:数据库水平切分?垂直切分?整合方案?可能存在的问题?

https://blog.csdn.net/fly_as_tadpole/article/details/87870626
转载
83阅读
0评论
0点赞
发布博客于 1 年前

Java设计模式-单例设计模式

在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过。我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以这篇文章对单例模式做了详解。一、单例模式定义:单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象...
原创
31阅读
0评论
0点赞
发布博客于 2 年前

java设计模式-工厂方法模式

抛出问题在学习设计模式的时候,我们首先要明白该设计模式能解决什么问题,在什么应用场景下是最优的,这样我们才会学以致用,避免出现为了设计而设计的情况。所以我也就啰嗦一下,一步一步的用简单工厂模式去抛出问题,更好的让大家明白为什么要使用工厂方法模式。今天我们举一个文件分割器的例子业务需求:分割图片、文本等格式的文件的工具我们先用简单工厂模式写//定义分割器的接口public in...
原创
85阅读
0评论
0点赞
发布博客于 2 年前

HTTP 状态

消息响应100 Continue(继续)101 Switching Protocol(切换协议)成功响应200 OK(成功)201 Created(已创建)202 Accepted(已创建)203 Non-Authoritative Information(未授权信息)204 No Content(无内容)205 Reset Content(重置内容)206 Partial ...
原创
46阅读
0评论
0点赞
发布博客于 2 年前

网络7层架构

7 层模型主要包括: 1. 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由 1、0 转化为电流强弱来进行传输,到达目的地后在转化为 1、0,也就是我们常说的模数转换与数模转换)。这一层的数据叫做比特。 2. 数据链路层:主要将从物理层接收的数据进行 MAC 地址(网卡的地址)的封装与解封装。常把这一层的数据叫做帧。...
原创
175阅读
0评论
1点赞
发布博客于 2 年前

AOP 主要应用场景

AOP 主要应用场景有: 1. Authentication 权限 2. Caching 缓存 3. Context passing 内容传递 4. Error handling 错误处理 5. Lazy loading 懒加载 6. Debugging 调试 7. logging, tracing, profiling and monitoring 记录跟踪 优化 校...
原创
313阅读
0评论
1点赞
发布博客于 2 年前

SpringBoot分布式项目实现Session共享

在传统的单服务架构中,一般来说,只有一个服务器,那么不存在 Session 共享问题,但是在分布式/集群项目中,Session 共享则是一个必须面对的问题,先看一个简单的架构图:在这样的架构中,会出现一些单服务中不存在的问题,例如客户端发起一个请求,这个请求到达 Nginx 上之后,被 Nginx 转发到 Tomcat A 上,然后在 Tomcat A 上往 session 中保存了一份数...
原创
996阅读
0评论
0点赞
发布博客于 2 年前

java 四大元注解及自定义注解

一、java中元注解有四个:@Retention @Target @Document @Inherited;(1)@Retention:描述注解的生命周期;  参数:枚举RetentionPolicy    1)source:源码级别,编译后失效;    2)class:二进制级别,编译有效,运行失效;    3)runtime:运行时级别,该注解在运行时仍然有效;(2...
原创
92阅读
0评论
0点赞
发布博客于 2 年前

Java:CAS(乐观锁)

本文讲解CAS机制,主要是因为最近准备面试题,发现这个问题在面试中出现的频率非常的高,因此把自己学习过程中的一些理解记录下来,希望能对大家也有帮助。什么是悲观锁、乐观锁?在java语言里,总有一些名词看语义跟本不明白是啥玩意儿,也就总有部分面试官拿着这样的词来忽悠面试者,以此来找优越感,其实理解清楚了,这些词也就唬不住人了。synchronized是悲观锁,这种线程一旦得到锁,其他需要锁的...
原创
44阅读
0评论
0点赞
发布博客于 2 年前

Java不可重入锁和可重入锁理解

最近正在阅读Java ReentrantLock源码,始终对可重入和不可重入概念理解不透彻,进行学习后记录在这里。基础知识Java多线程的wait()方法和notify()方法这两个方法是成对出现和使用的,要执行这两个方法,有一个前提就是,当前线程必须获其对象的monitor(俗称“锁”),否则会抛出IllegalMonitorStateException异常,所以这两个方法必须在同步...
转载
39阅读
0评论
0点赞
发布博客于 2 年前

java同步静态方法与非静态方法(使用synchronized关键字)

1、非静态方法同步一个类中所有的非静态方法同步时采用同一把锁--类实例本身(即该类的对象)。该实例的一个非静态同步方法获取对象锁后,该实例的其他非静态同步方法要想获得锁,必须等获取锁的方法释放锁后才能获取。但是该类的其他实例的非静态同步方法要想获取锁,可不用等待,因为每个实例使用的是不同的锁。2、静态方法同步一个类中所有的静态方法同步时采用同一把锁--类本身。一旦一个静态同步方法获取...
原创
131阅读
0评论
0点赞
发布博客于 2 年前

JAVA多线程中join()方法的详细分析

虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正在运行多个线程时,join()到底是暂停了哪些线程,大部分博客给的例子看起来都像是t.join()方法会使所有线程都暂停并等待t的执行完毕。当然,这也是因为我对多线程中的各种方法和同步的概念都理解的不是很透彻。通过看别人的分析和自己的实践之后终于想明白了,详细解释一下希望能帮助到...
转载
31阅读
0评论
0点赞
发布博客于 2 年前

Java中synchronized同步锁用法及作用范围

synchronized 它可以把任意一个非 NULL 的对象当作锁。他属于独占式的悲观锁,同时属于可重入锁。Synchronized 作用范围 1. 作用于方法时,锁住的是对象的实例(this); 2. 当作用于静态方法时,锁住的是Class实例,又因为Class的相关数据存储在永久带PermGen(jdk1.8 则是 metaspace),永久带是全局共享的,因此静态方法锁...
原创
160阅读
0评论
0点赞
发布博客于 2 年前

java 集合框架

这个写的比较详细,直接借鉴过来....https://www.runoob.com/java/java-collections.html
原创
36阅读
0评论
0点赞
发布博客于 2 年前

JVM 类加载机制

JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这 五个过程。一、加载加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的入口。注意这里不一定非得要从一个 Class 文件获取,这里既可以从 ZIP 包中读取(比如从 jar 包和 war 包中读取),也可以...
原创
74阅读
0评论
0点赞
发布博客于 2 年前

JVM垃圾回收算法

一、标记清除算法(Mark-Sweep)这个是最基础的垃圾回收算法,分为两个阶段,标注和清除。标记阶段标记出所有需要回收的对象,清 除阶段回收被标记的对象所占用的空间。如图:从图中我们就可以发现,该算法最大的问题是内存碎片化严重,后续可能发生大对象不能找到可 利用空间的问题。二、复制算法(copying)为了解决 Mark-Sweep 算法内存碎片...
原创
39阅读
0评论
0点赞
发布博客于 2 年前

JVM如何确定垃圾

一、引用计数法在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关联的引用,即他们的引用计数都不为 0,则说明对象不太可能再被用到,那么这个对象就是可回收 对象。二、可达性分析为了解决引用计数法的循环引用问题,Java 使用了可达性分析的方法。通过一系列的...
原创
286阅读
0评论
0点赞
发布博客于 2 年前

JVM内存模型

一、JVM内存模型组成主要由:方法区,堆,本地方法栈,虚拟机栈,程序计数器五个部分组成二、详细介绍1)、程序计数器(线程私有) 一块较小的内存空间, 是当前线程所执行的字节码的行号指示器,每条线程都要有一个独立的 程序计数器,这类内存也称为“线程私有”的内存。 正在执行 java 方法的话,计数器记录的是虚拟机字节码指令的地址(当前指令的地址)。如 果还是 Nati...
原创
26阅读
0评论
0点赞
发布博客于 2 年前

SpringCloud服务治理机制

刚刚看了SpringCloud的服务治理了处理机制;感觉讲的还是蛮好的;贴出来分享下!!!
原创
40阅读
0评论
0点赞
发布博客于 2 年前

Eureka高可用配置

一、yml修改1.在之前的Eureka测试项目中做下修改,application.yml配置如下spring: application: name: eureka profiles: active: server12.添加application-server1.yml,配置如下:server: port: 8888eureka: instanc...
原创
52阅读
0评论
0点赞
发布博客于 2 年前

java文件操作工具类

java文件操作工具类是java中针对文件操作的一个工具类,可以方便的读取,下载,上传文件等操作,希望可以帮到大家。
java
发布资源于 2 年前

java的Date工具类

这是本人自己整理的java中的Date工具类,包含了常用的时间格式化方法和转换方法;在工作中使用起来还是蛮方便的;希望对大家有帮助!
java
发布资源于 2 年前

SpringBoot线程池使用

一、线程池管理配置类@Configuration@EnableAsyncpublic class ExecutorConfig { private static final Logger logger = LoggerFactory.getLogger(ExecutorConfig.class); @Bean public Executor asyncTaskS...
原创
74阅读
0评论
0点赞
发布博客于 2 年前

SpringCloud学习之Hystrix(依赖隔离)

一、pom依赖(略)参考上一篇文章二、启动类添加注解(略)参考上一篇文章三、创建OderCommand和UserCommand类public class OrderCommand extends HystrixCommand<String> { private String value; public OrderCommand(String v...
原创
369阅读
0评论
0点赞
发布博客于 2 年前

SpringCloud学习之hystrix断路器(请求熔断和服务降级)

一、添加pom文件<!-- 断路器--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</art...
原创
83阅读
0评论
0点赞
发布博客于 2 年前

SpringCloud学习之Feign服务调用

一、添加pom依赖<!-- 服务调用--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifac...
原创
49阅读
0评论
0点赞
发布博客于 2 年前

Springcloud学习之Ribbon负载均衡

一、添加pom依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> ...
原创
29阅读
0评论
0点赞
发布博客于 2 年前

mybatis-generaor

一、添加依赖 <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.3&l...
原创
167阅读
0评论
0点赞
发布博客于 2 年前

SpringCloud学习之Eureka注册中心配置(一)

一,创建父工程parent-demo二,依赖导出<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-par...
原创
37阅读
0评论
0点赞
发布博客于 2 年前

SpringBoot注解之@ConfigurationProperties

SpringBoot项目加载yml配置文件中的数据,可以把配置文件的信息,读取并自动封装成实体类,这样子,我们在代码里面使用就轻松方便多了,这时候,我们就可以使用@ConfigurationProperties,它可以把同类的配置信息自动封装成实体类。列如,需要加载如下配置文件的中参数:定义一个实体类与上面参数一一对应就可以了,如下:@Component@Configurati...
原创
56阅读
0评论
0点赞
发布博客于 2 年前

Mysql 主从复制原理

复制原理mysql的复制原理大致如下。(1)首先,mysql主库在事务提交时会把数据库变更作为事件Events记录在二进制文件binlog中;mysql主库上的sys_binlog控制binlog日志刷新到磁盘。(2)主库推送二进制文件binlog中的事件到从库的中继日志relay log,之后从库根据中继日志重做数据库变更操作。通过逻辑复制,以此来达到数据一致。Mysql通过3个线...
原创
132阅读
0评论
0点赞
发布博客于 2 年前

StringBuilder 为什么线程不安全?

一、引言面试时被面试官问道这个问题:面试官:StringBuilder和StringBuffer的区别在哪?我:StringBuilder不是线程安全的,StringBuffer是线程安全的面试官:那StringBuilder不安全的点在哪儿?我:。。。(哑巴了)二、分析在分析设个问题之前我们要知道StringBuilder和StringBuffer的内部实现跟String类...
原创
475阅读
0评论
0点赞
发布博客于 2 年前

SpringBoot启动测试时报错(javax.websocket.server.ServerContainer not available)

一、测试发送短信接口时,启动springboot报如下错误2019-10-09 15:35:07.595 ERROR org.springframework.boot.SpringApplication:reportFailure[833] Application run failedorg.springframework.beans.factory.BeanCreationExcep...
原创
1440阅读
1评论
1点赞
发布博客于 2 年前

Java实现八大排序算法

文章地址:https://blog.csdn.net/dp_dp/article/details/80543290 /** * 插入排序 * * 1. 从第一个元素开始,该元素可以认为已经被排序 * 2. 取出下一个元素,在已经排序的元素序列中从后向前扫描 * 3. 如果该元素(已排序)大于新元素,将该元素移到下一位置 * 4...
原创
46阅读
0评论
0点赞
发布博客于 2 年前

短信模板信息替换

String template = "您好!您最近受理的一笔日期:@{财务日期}日的@{见证宝商户名称}结算转账银行处理失败!失败原因:@{提现失败原因}。平台提现流水号:@{提现流水号},转账备注:@{提现备注说明}。请及时在结算后台核实和处理。";Map vars = new HashMap();vars.put("财务日期", "20191008");vars.put("见证宝商户名...
原创
235阅读
0评论
0点赞
发布博客于 2 年前

EasyExcel 使用

一、简介 最近,产品那边出一个贼讨厌的需求,要做目前支付平台的数据统计;之前有跟运营讨论过这个问题,按照他们想法真是天马行空,我一听,太复杂了做不了;后来又找到产品提需求;虽然比之前的需求要好点,但是还是觉得复杂;根本不想做;后来实在没办法;只要在网上找好一点的解决办法;老大推荐的阿里巴巴的EasyExcel还蛮符合当前需求的;于是看了文档,参考了下别人的案列就开始开干了;耗时两周的...
原创
773阅读
0评论
0点赞
发布博客于 2 年前

深入理解Java中方法的参数传递机制

形参和实参我们知道,在Java中定义方法时,是可以定义参数的,比如:public static void main(String[] args){ }这里的args就是一个字符串数组类型的参数。在程序设计语言中,参数有形式参数和实际参数之分,先来看下它们的定义:形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数,简称“形参...
原创
72阅读
0评论
0点赞
发布博客于 2 年前

java枚举的使用

定义枚举类public enum EnumTest { MON("1"), TUE("2"), WED("3"), THU("4"), FRI("5"), SAT("6"), SUN("7"); String codeId; EnumTest(String codeId){ this.codeId = c...
原创
62阅读
0评论
0点赞
发布博客于 2 年前

Java 基础 - 反射的用途及实现

原理理解  在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性.这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制.  总结一句话,就是能把java类中的各种成分映射成一个个的Java对象.  思路:想要操作类,就必须先获得该类的字节码对象Class.通过Class提供的方法对类进行进一步的解剖,从而...
原创
105阅读
0评论
0点赞
发布博客于 2 年前

git 安装和使用

本地仓库安装1.1软件安装从git官网{+}https://git-scm.com/downloads+,根据使用的个人电脑操作系统选择安装程序安装完成,操作系统和鼠标邮件的菜单里,会增加【GitBash】和【GitCMD】图标,在使用Git命令操作时,统一使用【GitBash】。1.2账号配置安装完软件,需要配置个人的账号信息,分别是个人的姓名和工作邮箱。通过...
原创
187阅读
0评论
0点赞
发布博客于 2 年前

hash冲突解决和javahash冲突解决

https://www.cnblogs.com/ydymz/p/10078287.html1.开放定址法具体就是把数据的标志等的对长度取模有三种不同的取模线性探测再散列 给数据的标志加增量,取模平方探测再散列 给数据的标志平方,取模随机探测再散列 把数据的标志随机化,取模线性,平方显然很容被人猜出规律,所以最终是随机,那么是不是存在随机会出现取模的值相等的情...
转载
290阅读
0评论
0点赞
发布博客于 2 年前

Spring源码分析(一)

一、DefaultListableBeanFactoryXmlBeanFactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分,是spring注册及加载bean的默认实现,而对于XmlBeanFactory和DefaultListableBeanFactory不同的地方其实是在XmlBeanF...
原创
46阅读
0评论
0点赞
发布博客于 2 年前

Xmind 8 安装及破解方法

Xmind是一款非常专业的思维导图软件,收费好几百元,不过还是很多用户,因为目前用的最多,也简单易用。XMind界面友好、功能优秀、可用性极强,从而数百万人选择了它,XMind不仅可以绘制思维导图,还能绘制鱼骨图、二维图、树形图、逻辑图、组织结构图(Org、Tree、Logic Chart、Fishbone)等。XMind中的思维导图结构包含一个中心根主题,和围绕中心主题辐射的...
原创
369阅读
0评论
0点赞
发布博客于 2 年前

CentOS 7 下安装 Nginx

安装所需环境Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用CentOS7 作为安装环境。# rpm -qa|grep gcc一. gcc 安装安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:yum install gcc-c++二. PCRE p...
原创
78阅读
0评论
0点赞
发布博客于 2 年前

手机号、银行卡号等掩码处理(优化)

public class StartUtils { /** * 掩码转换规则 * @param len * @return */ public static Map<Integer, String> convertToStartRule(int len) { Map<Integer, String>...
原创
1030阅读
0评论
1点赞
发布博客于 2 年前

List三种遍历方式

public class ListForeach { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.ad...
原创
5847阅读
0评论
0点赞
发布博客于 2 年前

Map四种遍历方式

public class MapForeach { public static void main(String[] args) { Map<String,String> map = new HashMap<String, String>(); map.put("a","test1"); map.put("b",...
原创
63阅读
0评论
0点赞
发布博客于 2 年前

电话号码和身份证号掩码处理(java)

String tel = "13838389438"; tel = tel.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); System.out.println(tel); String cidNo = "6666666666666666666"; cidNo =...
原创
1971阅读
0评论
1点赞
发布博客于 2 年前

centos7下搭建Jenkins持续集成环境(安装jenkins)

一、jdk安装 因为之前虚拟机中已经安装了jdk了,这里省略了。二 、安装jenkins1.获取jenkis安装包wget http://pkg.jenkins-ci.org/redhat-stable/jenkins-2.7.3-1.1.noarch.rpm2.获取成功后,开始安装:rpm -ivh jenkins-2.7.3-1.1.noarch.rpm...
原创
1737阅读
0评论
0点赞
发布博客于 2 年前

Mybatis报错 (Caused by: org.xml.sax.SAXParseException: XML 文档结构必须从头至尾包含在同一个实体内。)

"C:\Program Files\Java\jdk1.8.0_161\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:51999,suspend=y,server=n -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -...
原创
1165阅读
0评论
0点赞
发布博客于 2 年前

StringUtils 工具类

public class StringUtils { private static int uidCount = 0; public static List<String> splitStr(String str) { List<String> returnList = new ArrayList<String>(); if (StringUt...
原创
378阅读
0评论
1点赞
发布博客于 2 年前

Date工具类(java)

public class DateUtils { private static final String DEF_TIME_ZONE = "GMT+8";// 时区 public static void main(String[] args) throws ParseException{ /* System.out.println(getTimeDelta(format...
原创
1429阅读
0评论
0点赞
发布博客于 2 年前

通过HttpServletRequest 获取接口返回的json数据

1.获取方式Map<String, String> map = WitMedicalUtils.parseRequestMap(request.getParameterMap());2.解析方法:WitMedicalUtils.parseRequestMap()public static Map<String,String> parseRequestMap(...
原创
2718阅读
0评论
0点赞
发布博客于 2 年前

Git 提交代码步骤

第一步:提交代码第一步:git status 查看当前状态当你忘记修改了哪些文件的时候可以使用 git status 来查看当前状态,红色的字体显示的就是你修改的文件。第二步:提交代码第二步:git add . 或者 git add xxx如图1、如果你git status 查看了当前状态发现都是你修改过的文件,都要提交,那么你可以直接使用 git add . ...
原创
71397阅读
7评论
24点赞
发布博客于 2 年前

设计模式--策略设计模式

策略设计模式其实就是多态的使用,父类引用指向子类对象。策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能。策略模式的缺点其实也很明显,在于策略模式把每一种具体的策略都封装成一个实现类,如果策略有很多的话,很显然是实现类就会导致过多,显得臃肿。案列:/** * @author dengchao * @Description: 策略角色 *...
原创
68阅读
0评论
0点赞
发布博客于 2 年前

Java 初始化及类的加载

public class Insect { private int i = 9; protected int j; public Insect(){ System.out.println("i="+i+",j="+j); j=39; } private static int x1 = printInit("static I...
原创
61阅读
0评论
0点赞
发布博客于 2 年前