自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 java项目的大小衡量标准

IDEA统计项目代码量

2022-11-18 11:43:32 1358 1

原创 文件预览服务器kkfileview安装部署(linux 版)

文件预览服务器kkfileview安装部署(linux 版)

2022-11-18 11:30:03 4696

原创 JedisCluster分布式锁

private volatile String unlockSha1 = “”;private static final Long UNLOCK_SUCCESS_CODE = 1L;private static final String LOCK_SUCCESS_CODE = "ok";private static final String UNLOCK_LUA;private static final String BIZ = "redislock:biz:";private ThreadLo

2021-10-26 15:01:17 1144

原创 prometheus+grafana+全方位立体监控redis

Prometheus 概述Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。Prometheus基本原理是通过HTTP协

2021-02-07 16:12:40 2875 1

原创 redis 单台服务集群搭建

Redis6.0.6安装参考https://blog.csdn.net/codeSmart/article/details/113365680创建目录文件mkdir cluster_redismkdir 12000mkdir 13000mkdir 14000mkdir 15000mkdir 16000mkdir 17000每个12000、13000等目录下再创建mkdir datamkdir logsmkdir pid创建 cluster_confmkdir cluster_

2021-01-29 19:25:20 311 2

原创 redis 主从 复制搭建哨兵模式

主从复制搭建https://blog.csdn.net/codeSmart/article/details/113365680复制sentinel.conf配置cp sentinel.con sentinel1000.conf编辑sentinel.conf配置Master主节点(10.2.2.148)和Slave从节点(10.2.2.171,10.2.2.172)的 sentinel.conf 配置相同,内容如下:#不同主机可以绑定 或者绑定多个ipbind 10.2.2.148 127.

2021-01-29 17:24:58 113

原创 redis 主从 复制搭建 gcc scl安装升级

机器/redis准备10.2.2.148 master10.2.2.171 salve分别在data创建redis目录复制redis-6.0.6.tar.gz 至 reids目录tar -vxvf redis-6.0.6.tar.gz查看 gcc scl如果要redis-6.x以上版本,需要查看系统gcc版本是否大于4.8.5,否则会出现如下gcc版本问题,编译 redis-6.x,要求 C11 编译器,否则会遇到大量如下所示的错误:主要原因是从 redis-6.x 开始的多线程代码依

2021-01-29 10:07:33 173

原创 Redis的四种模式 单机 主从 哨兵 集群

概述Redis 是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的 Web 应用程序。它有三个主要特点,使其优越于其它键值数据存储系统:● Redis 将其数据库完全保存在内存中,仅使用磁盘进行持久化。● 与其它键值数据存储相比,Redis 有一组相对丰富的数据类型。● Redis 可以将数据复制到任意数量的从机中。...

2021-01-28 17:23:33 446

原创 JVM常用调优配置参数

开发过程中,通常会将-Xms 与-Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源-Xms:表示java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/64大小即可,但仍需按照实际情况进行分配-Xmx:表示java虚拟机堆区内存可被分配的最大上限,通常为操作系统可用内存的1/4大小。-XX:newSize:表示新生代初始内存的大小,应该小于-Xms的值;-XX:MaxnewSize:表示新生代可被分配的内存的最大上

2020-12-30 18:12:18 402 1

原创 SpringBoot配置属性ssl/cookie/session/tomact

Server基本配置server.address指定server绑定的地址server.compression.enabled是否开启压缩,默认为false.server.compression.excluded-user-agents指定不压缩的user-agent,多个以逗号分隔,默认值为:text/html,text/xml,text/plain,text/cssserver.compression.mime-types指定要压缩的MIME type,多个以逗号分隔.server.c

2020-12-30 13:58:49 438

转载 java jdk 8 新功能 stream实现各种list操作

首先定义1个Apple对象:public class Apple { private Integer id; private String name; private BigDecimal money; private Integer num; public Apple(Integer id, String name, BigDecimal money, Integer num) {

2020-12-24 11:54:24 334

原创 mysql出现group by xxx错误

Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘×××’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by需执行以下sqlSET sql_mode=

2020-12-15 18:07:22 172

原创 项目不断阶段发现错误成本计算

大型项目中,如果在架构阶段检测到需求错误,那么修复它成本通常是“在需求阶段检测并修复该错误”的3倍,如果在编码阶段检测到需求错误,修复成本在5至10倍,在系统测试阶段,成本是10倍,在发布之后,成本陟增为10至100倍(以在需求分析阶段检验并修复错误的成本为基数),对于小型项目管理成本较低,那么发布之后的修复成本在5-10倍...

2020-12-11 10:53:25 1025

原创 java数据格式校验,邮箱,手机号,身份证,邮政编码,url

/** * 邮箱验证 */ public static final String REGEX_EMAIL = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$"; /** * 座机验证 */ public static final String REGEX_TEL = "^\\d{3,4}-?\\d{7,9}$"; .

2020-12-10 17:54:58 714

原创 java多线程工具类,多线程实现

public static BlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(100); // 固定为100的线程队列 public static ThreadPoolExecutor executor = new ThreadPoolExecutor(4, 30, 4, TimeUnit.HOURS, queue); /* * * 实现 Runnable 接口类 */.

2020-12-10 17:46:06 122

原创 java 实现深度拷深度转换Bean<->Bean

<!--dozer--> <dependency> <groupId>com.github.dozermapper</groupId> <artifactId>dozer-core</artifactId> <version>6.2.0</version> </dependency> /**

2020-12-10 17:44:33 179

原创 java读取文件、配置文件

private static final String PATH_PREFIX = System.getProperty("user.dir") + File.separator + "config/json/"; private JsonLoadUtils() { } /** * 根据config/json中的文件名称加载文件 * * @param fileName 文件名称 * @return */ publ...

2020-12-10 17:39:38 173

原创 软件构建过程

软件构建是一个复杂过程定义问题需求分析规划构建架构设计详情设计编码与调试单元测试集成测试系统测试保障维护

2020-12-10 12:01:05 321

转载 http模拟webservice请求并获取参数示例

org.apache.httpcomponents httpclient 4.5.6 org.apache.cxf cxf-spring-boot-starter-jaxws 3.2.4import net.sf.json.JSONObject;import org.apache.cxf.endpoint.Endpoint;import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClien...

2020-12-10 10:52:13 755

原创 SpringBoot修改启动端口server.port方式

以应用参数的方式java -jar XXXXX.jar --server.port=10000或以 JDK 参数的方式java -Dserver.port=10000 -jar XXXXX.jarjava -Dspring.application.json=’{“server.port”:10000}’ -jar XXXXX.jarjava -jar XXXXX.jar --spring.application.json=’{“server.port”:10000}’...

2020-08-12 17:33:45 2401

原创 map 排序按KEY VALUE

/** * java 8 version 按value排序 * * @param map 待排序的map * @param isDesc 是否降序,true:降序,false:升序 * @return 已排序map */ public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> ma

2020-08-12 15:32:36 133

原创 JAVA 计算百分比

/** * 计算百分比 默认保留两位 * @param diliverNum 被除数 * @param queryMailNum 除数 * @return */ public static String percentageStr(double diliverNum,double queryMailNum){ return percentageStr(diliverNum,queryMailNum,2); } /**

2020-08-12 14:30:46 966

原创 正则提取括号中的内容{} () []

提取{}内容public static Pattern pattern = Pattern.compile("(?<=\{)[^\}]+");public static void main(String[] args) {String content = “${name} ${value} “;Matcher m = pattern.matcher(content);while (m.find()) {System.out.println(” find: " + m.group() );

2020-08-07 17:20:43 1827

原创 Spring Boot启动会扫描以下位置的application文件

Spring Boot启动会扫描以下位置的application.properties或者application.yml文件作为spring boot的默认配置文件-file:/config/-file:./-classpath:/config/-classpath:/-以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级的配置内容会覆盖低优先级配置内容。-我们也可以通过配置spring.config.location来改变默认配置。...

2020-08-04 15:54:44 539

原创 客观的衡量想法

战略咨询师巴德·卡德尔把工作分为三类:善于做的、喜欢做的和能赚钱的。同时他用了一张极其简单的图,高度概括了我们应该如何选择职业:善于做的 ∩ 希望做的 ∩ 能赚钱的

2020-07-29 09:36:01 185

原创 Web项目开发中常见安全问题防范

背景随着计算机网络技术的快速发展,Web应用技术在各个领域都得到了广泛的应用,但是由于不法分子针对Web应用程序相关安全漏洞的挖掘利用及恶意攻击手段的层出不穷,而与此同时国内Web应用开发人员水平参差不齐,很多开发人员安全意识淡薄,导致Web应用存在各种各样的安全漏洞,使得Web应用程序在给用户提供简便、快捷服务的同时,用户不得不为其自身可能存在的Web安全问题而担忧。主要针对Web项目中常见的安全问题进行深入的研究与分析,并对提出的各种安全问题给出了一些有效的解决方案。安全常见问题及防范1.输入检查

2020-07-23 14:43:06 748

原创 SSO流程图

2020-07-23 14:39:06 436

原创 MQTT采集

2020-07-23 14:37:00 341

原创 springboot jar 转换成war

Spring Boot是支持发布jar包和war的,但它推荐的是使用jar形式发布。使用jar包比较方便,但如果是频繁修改更新的项目,需要打补丁包,那这么大的jar包上传都是问题。所以,jar包不一定合适适用所有的场景,如war包更合适,你可以尝试转为传统的war包,这样打补丁包可能更方便。1.修改Spring Boot启动类启动类继承 SpringBootServletInitializer类,并覆盖 configure方法。public class XXXApplicationWar extend

2020-07-23 13:44:29 257

转载 spring事务的传播机制及原因分析

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

2020-07-14 17:08:39 166

原创 微信公众号域名验证路径正则表达式

@Controller@RequestMapping("/")@PropertySource(value = “classpath:application_mp_verify.properties”)@ConfigurationProperties(prefix = “mp”)public class WxMpVerifyConfigController {private Map<String, String> verify = new HashMap<>();priva

2020-07-13 16:48:59 503

转载 微服务与单体服务的拆分原则

单体架构的优势:1、便于开发2、易于测试3、易于部署单体架构的不足:1、复杂性高2、交付效率低:构建和部署耗时长3、伸缩性差:只能按整体横向扩展,无法分模块垂直扩展,IO密集型模块和CPU密集型模块无法独立升级和扩容4、可靠性差:一个BUG可能引起整个项目的运行5、阻碍技术创新微服务架构的优势:1、易于开发和维护2、独立部署3、伸缩性强4、与组织结构相匹配5、技术异构性微服务面临的挑战:1、服务拆分:(1)、微服务拆分原则:领域模型、组织结构、康威定律、单一职责(2).

2020-07-10 07:23:16 1716

原创 java线程池大小设置

一般说来,大家认为线程池的大小经验值应该这样设置:(其中N为CPU的个数)如果是CPU密集型应用,则线程池大小设置为N+1如果是IO密集型应用,则线程池大小设置为2N+1这个说法到底是不是正确的呢?其实这是极不正确的。那为什么呢?首先我们从反面来看,假设这个说法是成立的,那我们在一台服务器上部署多少个服务都无所谓了。因为线程池的大小只能服务器的核数有关,所以这个说法是不正确的。那具体应该怎么设置大小呢?假设这个应用是两者混合型的,其中任务即有 CPU 密集,也有 IO 密集型的,那么我们改怎么

2020-07-10 06:39:17 469

原创 索引结构B+树

m阶B树具有如下特征:1.根结点至少有两个子女。2.每个中间节点都至少包含ceil(m / 2)个孩子,最多有m个孩子。3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m。4.所有的叶子结点都位于同一层。5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。B+树与B树的区别有k个子结点的结点必然有k个关键码(有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点

2020-07-07 20:49:05 902

原创 java中对象、成员变量、静态变量、方法的内存分配

java中内存主要包含4块,heap(堆内存)stack(栈内存)data segment(静态变量或是常量存放区)codesegment(方法区).堆内存中存放的是new出的对象,new出的对象只包含成员变量。栈内存中:存放的是局部成员变量。对于基本的数据类型存放的是基本变量的值,而对于对象变量,存放的是堆内存的地址。静态、常量区:存放的是静态变量(类变量)或是常量。方法区:存放的是对象的方法。因此即使new出多个对象也是只是存在一个方法。...

2020-07-07 15:17:38 315

原创 JVM类装载分为以下 5 个步骤

加载:根据查找路径找到相应的 class 文件然后导入检查:检查加载的 class 文件的正确性准备:给类中的静态变量分配内存空间解析:虚拟机将常量池中的符号引用替换成直接引用的过程。符号引用就理解为一个标示,而在直接引用直接指向内存中的地址初始化:对静态变量和静态代码块执行初始化工作...

2020-07-07 13:58:27 159

原创 Maven的Scope

scope定义了类包在项目的使用阶段。项目阶段包括: 编译,运行,测试和发布。compile默认scope为compile,表示为当前依赖参与项目的编译、测试和运行阶段,属于强依赖。打包之时,会达到包里去test该依赖仅仅参与测试相关的内容,包括测试用例的编译和执行,比如定性的Junitruntime依赖仅参与运行周期中的使用。一般这种类库都是接口与实现相分离的类库,比如JDBC类库,在编译之时仅依赖相关的接口,在具体的运行之时,才需要具体的mysql、oracle等等数据的驱动程序。此类的驱

2020-07-06 21:49:00 87

原创 GC Roots

虚拟机栈(栈桢中的本地变量表)中的引用的对象方法区中的类静态属性引用的对象方法区中的常量引用的对象本地方法栈中JNI的引用的对象

2020-07-06 20:20:06 122

原创 JAVA线程池的执行过程

线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任务,线程池也不会马上执行它们。当调用 execute() 方法添加一个任务时,线程池会做如下判断:如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务;如果正在运行的线程数量大于或等于 corePoolSize,那么将这个任务放入队列;如果这时候队列满了,而且正在运行的线程数量小于 maximumPoolSize,那么还是要创建非核心线程立刻运行这个任务;如果队列满了,而且正在.

2020-07-04 21:23:32 560

原创 Mysql分表标准

什么样的表需要拆分:根据表的体积、表的行数、访问特点来衡量表是否需要拆分一.拆分标准是:1.表的体积大于2G或行数大于1000w,以单表主键等简单形式访问数据,这个时候需要分表2.表的体积大于2G或行数大于500W,以两表jion,小范围查询(结果集小100行)等形式访问数据,这个时候需要分表3.表的体积大于2G或行数大于200w,以多表join,范围查询,order by,group by,高频率等复杂形式访问数据,尤其DML,这个时候需要分表4.表的字段中含有text等大字段的、varchar

2020-07-04 12:21:45 314

空空如也

空空如也

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

TA关注的人

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