- 博客(97)
- 资源 (2)
- 收藏
- 关注
原创 MySQL 常用SQL整理
导入sql文件$ source d:/myprogram/database/db.sql;查询查询右表为空的数据select rr.recharge_id, rr.cost_record_id, rr.agent_id, rr.user_id, rr.user_type, rr.amount, rr.cooperation_mode, cr.amount as costAmount, cr.create_time as costCreateTime from t_re
2021-09-11 11:31:51 196
原创 Java - 多线程并发包下常用类 Future CountDownLatch CyclicBarrier Semaphore
文章目录Future、FutureTask和CompletableFutureFutureFutureTaskCompletableFutureCountDownLatchCyclicBarrierSemaphoreFuture、FutureTask和CompletableFutureFuture平时在使用多线程的时候, 是拿不到线程返回值的, 当需要拿到返回值时,需要实现Callable来获取Callable接口定义public interface Callable<V> {
2021-06-04 17:00:13 348
原创 Spring Boot版本与Spring Cloud版本之间对应关系
官方网址:https://start.spring.io/actuator/info"spring-cloud": { "Edgware.SR6": "Spring Boot >=1.5.0.RELEASE and <=1.5.21.RELEASE", "Edgware.BUILD-SNAPSHOT": "Spring Boot >=1.5.999.BUILD-SNAPSHOT and <2.0.0.M1", "Finchley.M2": "Spring.
2021-05-31 14:12:55 2156
原创 压缩备份文件,并清理备份文件
可以利用 linux 的 cron 功能, 达到定时清理磁盘文件的效果#!/bin/bash#clear six months ago files to tarif [ $# != 4 ];then echo -e "./backup_log.sh [源文件路径] [备份文件路径] [备份几天前的文件] [备份保留天数] " exit 1fi# 源文件路径srcPath=${1}# 备份文件路径backupPath=${2}# 备份几天前的文件backupDay.
2021-05-28 11:39:04 225
原创 Java - 通过JSONObject 实现字段权限过滤
Java - 通过JSONObject 实现字段权限过滤public static void main(String[] args) { Map<String, Object> map = new HashMap<>(); map.put("name", "hy"); map.put("password", "123456"); Map<String, String> map2 = new HashMap<>();
2021-05-28 11:33:30 569
原创 05 - Docker Centos8 运行 SpringBoot 项目
Docker Centos8 运行 SpringBoot 项目项目根路径下创建一个 DockerfileFROM openjdk:8-jdk-alpineVOLUME /tmp# 添加生成的jar包到容器中, 容器构建镜像时会指定jar包的路径,所以这里只需要文件名即可ADD [生成的jar包的名字].jar app.jarENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar", "-
2021-05-28 11:29:52 153
原创 04 - Docker Centos8 安装 Jenkins
Centos 8 安装 Jenkins拉取最新版本镜像$ docker pull jenkins查看镜像是否拉取成功$ docker images创建一个本地挂载路径$ mkdir -p /opt/jenkins$ chown 1000:1000 -R /opt/jenkins创建并运行容器$ docker run -itd -p 8080:8080 -p 8081:50000 --name jenkins --privileged=true -v /opt/jenkins:/var
2021-05-28 11:28:02 94
原创 03 - Docker Centos8 安装 Redis
安装 redis在网上找一个redis.conf 配置放到服务器的 /opt/redis/ 下$ mkdir -p /opt/redis/data$ chown 100:101 -R /opt/redis/data$ docker run --restart=on-failure:10 -d \--network=host \--name redis \--log-driver=json-file \--log-opt max-size=100m \--log-opt max-fil
2021-05-28 10:48:03 171
原创 02 - Docker Centos 8 安装 MySQL 5.7
docker 安装配置镜像加速器针对Docker客户端版本大于 1.10.0 的用户您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://zmzshawx.mirror.aliyuncs.com"]}EOFsudo systemctl daem
2021-05-28 10:45:35 241
原创 01 - Docker Centos8 安装
文章目录卸载旧版本安装命令安装 Docker Engine-Community设置仓库设置国内源安装 Docker Engine-Community启动Docker卸载旧版本$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest
2021-05-28 10:44:12 59
原创 00 - Docker 常用命令整理
文章目录基础使用命令镜像管理查看已安装的镜像获取一个新的镜像安装指定版本安装最新版本查找镜像基础使用命令$ docker ps描述: 查看运行中的服务-a: 查看所有服务-l: 查询最后一次创建的容器$ docker start [容器id]描述: 启动服务$ docker stop [容器id]描述: 停止服务$ docker restart [容器id]描述: 重启服务$ docker run -itd --name [实例名称,自己定义] [服务名] /bin/bas
2021-05-28 10:43:24 104
原创 Git 提交规范
Git 提交规范feat: 新功能(feature)fix: 修补bugdocs: 文档(documentation)style: 格式(不影响代码运行的变动)refactor: 重构(即不是新增功能,也不是修改bug的代码变动)chore: 构建过程或辅助工具的变动revert: 撤销,版本回退perf: 性能优化test:测试improvement: 改进build: 打包ci: 持续集成...
2021-05-28 10:28:22 139
原创 Git 常用命令
Git 和 SVN 的比较Git 和 SVN 是目前国内市场最常用的两个版本控制工具,两者的设计理念差异较大.集中式版本控制系统SVN 为集中式的版本控制系统,所有人的代码都集中保存在一个服务器上,所有客户端可以拉取代码,编辑后提交更新到服务器,它的好处是很好的实现了权限控制,也可以清晰的看到其他人提交的记录.缺点也是很致命的:集中式管理如果服务器宕机,则无法提交代码如果代码服务器硬盘损坏,会导致数据丢失,需要做好数据备份当文件过多时,系统庞大,下载库可能需要几个小时切换分支的成本过高查
2021-05-28 10:26:11 314
原创 Swagger Enum 枚举支持注释
Swagger Enum 枚举支持注释正常swagger 提供的参数说明无法识别到枚举的字段值, 只能显示name,通过实现 ModelPropertyBuilderPlugin 自定义description可以实现自己想要的效果首先创建一个注解@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface SwaggerDisplayEnum { String code() default
2021-04-21 11:52:10 9448
原创 算法 - 01二叉树三种遍历算法
二叉数遍历的三种方法前序遍历,对树中的任意结点来说,先打印这个结点,然后前序遍历它的左子树,最后前序遍历它的右子树。中序遍历,对树中的任意结点来说,先中序遍历它的左子树,然后打印这个结点,最后中序遍历它的右子树。后序遍历,对树中的任意结点来说,先后序遍历它的左子树,然后后序遍历它的右子树,最后打印它本身。package algorithm.tree;import lombok.Data;/** * @author Demon-HY * @description 树节点 * @dat
2021-02-24 11:10:19 151
原创 13-Spring自动装配-@Profile
@Profile@Profile 可以根据当前环境动态的选择是否启用当前配置文件,常用场景用来区分测试和线上环境.我们编写一个获取数据库实例的例子,看一下具体使用,先引入 Maven 依赖:<dependencies> <dependency> <groupId>org.springframework</groupId>...
2020-01-10 15:53:15 329
原创 12-Spring自动装配-方法、构造器装配,Aware注入Spring底层组件
构造器位置的自动装配@Autowired 注解支持添加到: 构造器、参数、方法、属性上.默认注入到 IOC 容器中的组件,容器启动会调用无参构造创建对象,再进行赋值操作,当我们注入对象时,可以写一个有参构造器,加上@Autowired,实现对象的自动注入./** * @author Demon-HY * @date 2019-12-12 */@Servicepublic class...
2020-01-08 18:39:57 209
原创 11-Spring自动装配-@Autowired&@Qualifier&@Primary&@Resource&@Inject
自动装配Spring 利用依赖注入(DI), 完成对 IOC 容器中组件的依赖关系赋值.当我们一个 bean 需要 引用另外一个 bean的时候,可以通过 @Autowired 来引用,引用的 bean 必须得是Spring容器中有的,否则启动会报错;引用方法如下:/** * @author Demon-HY * @date 2019-12-24 */public class Us...
2020-01-08 18:36:11 168
原创 10-Spring属性赋值-@Value
@Value 可以方便的获取配置文件中的属性@Value 的三种用法基本数值: @Value(“值”)SpEl 表达式: @Value("#{}")读取配置文件: @Value("${属性名:默认值[默认值可以省略]}")我们在项目的resources目录下新建一个application.properties文件,里面写入数据库的配置:mysql.url=jdbc:mysql://...
2020-01-08 18:32:56 241
原创 09-Spring生命周期-BeanPostProcessor后置处理器
BeanPostProcessor 后置处理器在 bean 初始化前后做处理,对 bean 初始化方法做了拦截,使用也很简单,新建一个组件实现 BeanPostProcessor 并加入到容器中.BeanPostProcessor 提供了两个方法,实现这两个方法即可:postProcessBeforeInitialization: 在初始化之前调用postProcessAfterInit...
2019-12-16 15:48:06 160
原创 08-Spring生命周期-@Bean指定初始化和销毁方法
bean 的生命周期创建 -> 初始化 -> 使用 -> 销毁我们可以自定义初始化和销毁方法,容器在bean进行到当前生命周期的时候会调用我们自定义的初始化和销毁方法;多实例 bean 容器不会管理初始化和销毁方法,需要自己调用自定义的初始化和销毁方法必须是无参方法通过调用 bean 定义的方法实现初始化和销毁package com.demon.bean;...
2019-12-16 15:46:43 148
原创 07-Spring组件注册-使用FactoryBean注册组件
使用FactoryBean注册组件需要实现FactoryBean接口,然后在Config配置类中通过@Bean注入直接看代码package com.demon.factory;import com.demon.bean.Color;import org.springframework.beans.factory.FactoryBean;/** * @author Demon-HY...
2019-12-10 23:57:33 194
原创 06-Spring组件注册-@Import 导入bean
@Import 可以快速的导入 bean 到 Spring 容器中这种方式注册的 bean 只支持无参构造,并且注册的bean的id默认是全类名,比如导入User.class,打印结果是: com.demon.bean.Userpackage com.demon.config;import com.demon.bean.User;import org.springframework.co...
2019-12-10 23:56:57 465
原创 05-Spring组件注册-@Conditional按照条件注册 bean
@Conditional 可以满足当某个条件为true时注册 bean@Conditional 源码@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Conditional { /** * All {@li...
2019-12-10 23:56:14 134
原创 04-Spring组件注册-@Lazy懒加载
通过 @Lazy 实现 bean 的延迟加载只支持单实例默认单实例是在项目启动时创建对象,通过@Lazy可以在bean第一次使用的时候创建对象编写配置类package com.demon.config;import com.demon.bean.User;import org.springframework.context.annotation.*;import org.spr...
2019-12-10 23:55:31 122
原创 03-Spring组件注册-@Scope设置组件作用域
@Scope设置组件作用域Spring 默认注册的 bean 都是单例模式的,如果需要设置其他模式,则使用@Scope注解,@Scopde一共有4种模式:singleton: 单例,整个容器中只会有一个实例prototype: 多实例,每次获取都会生成一个新的实例request: 一个http请求生成一个实例session: 一个会话生成一个实例单例模式Config2.java...
2019-12-10 23:55:01 156
原创 02-Spring组件注册-@ComponentScan
包扫描的方式如果没有设置包扫描路径,Spring 不会主动去注册 beanXML方式配置包扫描<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/...
2019-12-10 23:52:58 128
原创 01-Spring组件注册-@Configuration&@Bean
通过 @Configuration 注解将 bean 注册到 Spring 容器中XMl 方式注册 bean<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org...
2019-12-10 23:52:01 112
原创 算法-有序的二维数组中查找某个整数是否存在
package com.demon.leetcode;/** * 题目: * 二维数组中每一行都按照从左往右递增的顺序排序,每一列的第一个值都大于上一列的最后一个值,请完成一个函数, * 输入一个二维数组和一个整数, 判断数组中是否包含该整数 * * 思路: * 1. 因为数组中的数是一个递增的,所有首先判断输入的整数是否在数组中的最大值和最小值的区间里面,如果没有则直接返回 ...
2019-11-07 16:04:20 764
原创 算法-字符串倒序打印
package com.demon.leetcode;import java.util.Arrays;/** * 算法-字符串倒序打印 * <p> * 输入:["h","e","l","l","o"] * 输出:["o","l","l","e","h"] * * @author Demon-HY * @date 2019-11-7 */public clas...
2019-11-07 15:27:07 266
转载 细思极恐 - 你真的会写 Java 吗?
作者:Lrwin来源:http://lrwinx.github.io一:导语自2013年毕业后,今年已经是我工作的第4个年头了,总在做java相关的工作,终于有时间坐下来,写一篇关于java写法的一篇文章,来探讨一下如果你真的是一个java程序员,那你真的会写java吗?笔者是一个务实的程序员,望读者看后,能有所收获。二:文章核心其实,本不想把标题写的那么恐怖,只是发现很多...
2019-09-11 13:42:55 227
原创 基于 Redisson 实现分布式锁
之前业务里面实现分布式锁,是通过redis的计数器来实现的,那种方式当服务宕机时,key会永久保存在redis里面,所以切到 redisson上,redisson获取锁时解决了死锁问题,底层通过调用lua脚本来实现写入key和设置过期时间的原子性.更多redisson 的信息可以参考官方文档:https://yq.aliyun.com/articles/554765?spm=a2c4e...
2019-08-19 10:51:44 956
原创 Java - 基于 redis 的分布式锁实现
package com.km.config.configuration;import com.km.exception.RedisLockException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowire...
2019-08-12 12:20:31 183
原创 Java - 拷贝亿赛通项目
拷贝亿赛通加密的 Java 项目公司电脑使用亿赛通加密,导致所有的java文件都被加密了,一些自己写的项目没办法在家里打开,所以想到通过拷贝时修改文件后缀的方式避免加密.package com.file;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;/**...
2019-07-31 13:51:14 3168 11
原创 Java - SnowflakeIdWorker 分布式全局唯一Id生成方案
使用Twitter的snowflake算法方案snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。具体实现的代码可以参看:https...
2019-07-30 17:12:06 8669
原创 Java - 反射工具类
反射工具类package com.demon.common.utils.reflect;import com.demon.common.core.text.Convert;import com.demon.common.utils.DateUtils;import org.apache.commons.lang3.StringUtils;import org.apache.comm...
2019-07-25 10:23:26 352
原创 Java 字符串常用工具类
字符串常用工具类package com.demon.common.utils;import com.demon.common.core.text.StrFormatter;import java.lang.reflect.Array;import java.nio.charset.StandardCharsets;import java.util.Collection;impo...
2019-07-24 18:11:55 616
原创 Java - 字符串格式化
字符串格式化package com.demon.common.core.text;import com.demon.common.utils.StringUtils;/** * 字符串格式化 * * @author Demon-HY */public class StrFormatter { private static final String EMPTY_JS...
2019-07-24 18:09:49 344
原创 算法-选择排序
package com.demon.algorithm;import java.util.Arrays;/** * 选择排序步骤(升序): * 1. 找到未排序数组中的最小元素,存放到数组开头(从起始下标开始作为已排序序列) * 2. 继续查找未排序数组,将最小元素放到已排序序列的末尾 * 3. 重复 2 步骤,直到所有元素排序完毕 * <p> * 注意: * ...
2019-05-06 16:57:26 114
原创 算法-冒泡排序
package com.demon.algorithm;import java.util.Arrays;/** * 冒泡排序步骤(升序): * 1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个 * 2. 重复 1 步骤,直到遍历完,此时数组的最大下标的值为最大值 * 3. 重复 2 步骤,遍历时不遍历已经排好序的最后的数组,就是每次遍历时,最大下标减1 * <p...
2019-05-06 15:49:36 90
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人