- 博客(84)
- 资源 (2)
- 收藏
- 关注
原创 常用shell命令
#!/usr/bin/env bash(推荐)#!/bin/bash# shell 注释# author: testecho "Hello,World!"echo "hello, \"fay\""name=testecho "hello,\"${name}\""echo "YES\nNO" echo -e "YES\nNO"# \c 不换行echo -e "YES\c"echo "NO"#重定向echo "test" > test.txt#输出执行结果echo
2020-08-20 09:37:08
272
原创 SpringBoot 单元测试
添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> &l
2020-08-18 17:27:33
251
原创 git 删除本地分支和远程分支
查看所有分支:git branch -a在删除分支前确保代码已经合到主分支上了删除远程分支:git push origin --delete {branchName}删除本地分支:git branch -d {branchName}
2020-08-12 14:36:32
662
原创 kafka 常用命令
创建topic:./kafka-topics.sh --create --zookeeper localhost:9092/kafka --replication-factor 3 --partitions 1 --topic test查看topic列表:./kafka-topics.sh --zookeeper localhost:9092/kafka --list查看topic详情:./kafka-topics.sh --describe --zookeeper localhost:90
2020-07-30 09:19:57
292
原创 java实现归并排序和快速排序-分治法
以下两个排序都是采用分而治之的方法。快速排序/** * 快速排序 */public class Test2 { public static void main(String[] args) { int a[] = {51, 46, 20, 18, 65, 97, 82, 30, 77, 50, 2}; sort(a); System.out.println("排序结果:"+Arrays.toString(a)); } private static void sort(int[
2020-06-17 17:41:35
578
原创 linux实用命令记录
ls -lh.开头为隐藏文件tree [目录名] -d 只显示目录cp -i 覆盖时给出提示cat -n 所有行编号-b 非空行编号grep -v 取反 (grep -nv “test” test.txt)-n 行号-i 忽略大小写关机重启:默认表示一分钟后关机shutdown now/20:21/+10shutdown -c(取消)shutdown -r 重新启动ssh -p port user@ipexit 退出scp -P port source targetft
2020-05-28 21:00:26
258
原创 HashMap源码分析-jdk1.8
首先来看hashmap的几个构造方法:loadFactor :负载因子,默认是0.75;简单来说就是达到当前最大容量 * 负载因子,就该扩容了。1. Map<String, Integer> map1 = new HashMap<>();public HashMap() { // static final float DEFAULT_LOAD_FACTOR = 0.75f; this.loadFactor = DEFAULT_LOAD_FACTOR; //
2020-05-27 17:44:19
213
原创 阿里巴巴开发手册-阅读记录
以下是对阿里巴巴java开发手册看了后的一些总结,便于自己以后复习。功能类命名AbstractXXXXX,XXXXXExceptionXXXXXTestboolean变量 不要用is前缀 序列化会出问题将设计模式体现在名称中 便于阅读者快速理解接口类中的方法和属性不要加任何修饰符号(public 也不要加)暴露出去的服务一定是接口 实现类以Impl为后缀来区分枚举类带上 Enum后缀service/Dao层的命名规范:获取单个对象 用get做前缀获取多个对象 用list做前缀,负数结果,
2020-05-22 16:17:23
834
原创 linux常用功能命令
1.查找文件 find查询文件名为test.java的文件:find / -name "test.java"/ 表示从根目录开始递归找-name 后面跟要查找的文件名忽略大小写用 -iname2.根据文件内容查找 grep查找所有log中有“test”字符串的文件grep "test" *.log# 查找tomcat进程并过滤掉grep进程ps -ef|grep tomcat | grep -v "grep"3.统计(适合规范格式的数据)awk默认按空格拆分awk '{p
2020-05-17 15:15:37
300
原创 scp和rsync两个命令的使用和区别
在linux下,我们经常需要两台机器之间拷贝文件,或者由于业务需要备份文件,那就不得不用到scp和rsync两个命令。1.scpcp 在本机复制文件,这个命令我们经常使用,但是跨机器复制cp就不行了,scp可以跨机器复制文件,示例:scp -Crvp -l 1 test/ test@10.16.88.88:/usr/local## test/ 源文件 test@10.16.88.88...
2020-04-30 14:37:35
866
原创 线程池ThreadPoolExecutor使用踩坑
这个坑不是我挖的,我是无意间看到已离职同事的代码,这个代码是两年前写的了,声明的线程池方式如下:private static final ThreadPoolExecutor threadPool = new ThreadPoolExecutor(0, 100, 60L, TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>())...
2020-04-11 16:50:43
1594
原创 常用设计模式(下)
结合原理与实例介绍以下设计模式:适配器,装饰,组合,模板方法,策略,责任链,观察者,迭代器等设计模式。1.适配器模式定义:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。实际运用:SpringMVC的handlerAdapter实例:电源转接头public interface PowerTarget { public int outp...
2020-04-08 17:36:11
135
原创 常用设计模式(上)
结合原理与实例介绍以下设计模式:单例,原型,工厂方法,抽象工厂,建造者,代理,桥接,适配器等八种设计模式。1.单例模式定义:一个类只有一个实例,且该类能自行创建这个实例的一种模式。实际运用:Spring容器中所有bean默认是单例的,java.lang.Runtime类是单例的。适用场景:Web配置对象,各种连接池等。注意事项:阻止对象clone, 注意线程安全问题,多重类加载器也会破...
2020-04-08 11:22:52
157
原创 为什么要学习设计模式?
以下内容主要是对我学习时看了这个网站的总结。1.什么是软件设计模式软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可...
2020-04-07 14:14:34
1278
原创 基于jackson的序列化工具类
1.引入maven依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.9</version> </de...
2020-04-07 13:26:16
566
1
原创 httpclient工具类--连接池
1.maven依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.5</version> </dependency&...
2020-04-07 11:23:03
805
原创 ActiveMQ高级原理
1.应答模式通过连接创建session时设置// a是boolean类型,设置是否开启事务。如果为true则第二个参数设置无效,应答模式自动为Session.SESSION_TRANSACTED// b是应答模式connection.createSession(a,b)应答模式有:Session.AUTO_ACKNOWLEDGE 自动ack(确认)Session.CLIENT_ACK...
2020-04-04 14:13:39
325
原创 docker常用命令
以下主要是记录一些常用的docker命令1. 搜索镜像docker search tomcat #从Docker hub搜索镜像2. 拉取镜像docker pull tomcat:8.53. 基于dockerfile构建镜像docker build -t 厂库地址/镜像名称:tag . #注意后面有个点,表示dockerfile在当前目录4. 将镜像推到私库docker p...
2020-04-03 14:04:27
136
原创 tomcat启动报错:org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant
项目之前启动都没这个问题,突然启动时就有这个错误了:看报错信息有提示从jackson-annotations报出来的。细想,自己最近也没有动这个包的依赖呀然后在网上看了资料,原因时:依赖包依赖有jdk1.9的语法信息,tomcat8.x解析不了。知道问题,就好找解决方案,有两个解决方式:1.提高tomcat的版本到tomcat9.x2.找到包含jdk1.9语法的jar包,降低它的版本...
2020-04-02 17:11:22
38636
1
原创 Solr集群搭建与简单使用
以下基于solr6.0.0官方文档地址:http://archive.apache.org/dist/lucene/solr/ref-guide/apache-solr-ref-guide-6.0.pdfsolr下载地址:https://archive.apache.org/dist/lucene/solr/1.solr单机版我是在windows下启动的解压包,到solr-6.0.0/b...
2020-04-02 11:24:15
217
原创 Zookeeper伪分布式集群搭建
记录一下zookeeper伪分布式集群搭建过程,很简单。基于zk-3.5.7,搭建的是三节点的伪分布集群。zk下载地址:https://downloads.apache.org/zookeeper/下载后上传到服务器,解压tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz重命名:mv apache-zookeeper-3.5.7 zookeeper...
2020-03-31 15:47:04
836
原创 zookeeper Leader选举过程简析
假如当前有三个节点(01,02,03),它们的机器id依次为1,2, 3。下面是选举过程:首先必须要超过半数的机器是活着的,我这里三节点的集群,也就是说只有第二台启动后,才能选出leader,这两台机器都投票的那个机器就是leader那么当第二台机器启动后是怎么选出Leader的呢?由于是新启动的,所以事务id都为0,**机器id(也就是myid中的值)**分别为1,2,3投票的格式为&...
2020-03-31 15:34:49
237
原创 记录一次生产环境的多线程并发问题
1.当时的场景开一个线程,定时check hbase,避免hbase异常时,阻塞大量请求。2.程序伪代码伪代码如下:定时用的是jdk自带的工具类 Timer具体逻辑:private ExecutorService executorService = Executors.newSingleThreadExecutor();public void run(){ Future<Bo...
2020-03-31 11:10:56
361
原创 SpringCloud记录
1.Eureka的自我保护机制默认情况下,服务需要每隔30s向EurekaServer发送心跳,Eureka连续三次都没收到心跳时,则认为服务不可用,会将服务从列表中移除。如果Eureka短时间内收到的心跳数量小于应该收到的85%(默认),那么其会自动进入自我保护模式,服务列表只可以读取,增加,不能删除。当EurekaServer收到的心跳数量恢复到阀值以上时,会自动退出自我保护模式。修改Eu...
2020-03-26 21:31:02
114
原创 kafka工作原理整理
1.kafka为什么高吞吐率?主要采用了以下几种方案:顺序读写:日志文件是预分配空间,顺序写入。零拷贝:简单来说就是将数据从磁盘读到内核,然后直接到socker缓冲区批量发送:消息的批量发送消息压缩:消息发送时压缩,消费时解压2.kafka的消息路由消息写入到那个partition的路由策略:1.如果指定了partition,则写入到指定的partition2.如果未指定part...
2020-03-15 15:06:13
194
原创 tomcat开机启动脚本
以下是一个简单的开机启动脚本:需将TOMCAT_DIR修改为自己的tomcat路径。centos7必须要有**#!/bin/bash**,建议都加上#chkconfig:2345 80 05也必须要有,参数可调整:2345:表示系统运行级别(不用改)80:启动优先级,越大优先级越低,(建议不要设置太高,如果应用启动依赖于网卡,优先级设置太高会导致引用启动失败)05:停止优先级,越大优先...
2020-03-14 14:08:36
722
原创 Centos7设置开机启动
设置服务开机启动systemctl enable 服务名比如docker: systemctl enable docker设置脚本开机启动比如说我们把服务部署到tomcat中,我们需要设置tomcat开机启动。①首先需要准备脚本,比如脚本名称为tomcat_8080,编写tomcat启动脚本可参考。② 将脚本移动到 /etc/init.d目录下面mv tomcat_8080 /et...
2020-03-14 13:57:05
162
原创 定义springboot starter的两种方式
springboot starter 命令规则首先了解一下starter的命名规范如果是springboot官方的starter,命令格式为spring-boot-starter-xxxxx如果是我们开发starter,命令格式为xxxxx-spring-boot-starter1.自动注入式,引入依赖后就可直接注入第一步:创建pom项目,引入springboot依赖<prope...
2020-03-11 17:30:21
343
原创 springboot自动注入源码解析
基于springboot 2.1.3版本首先看看springboot启动类代码:@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }...
2020-03-02 16:11:29
707
原创 Nginx 知识总结
1.Nginx特点高并发,低消耗,热部署,高可用,高扩展2.Nginx常用命令nginx -h 查看命令选项nginx -v 查看版本信息nginx -tq 验证配置文件是否有错误 默认是验证conf/nginx.conf文件nginx -s stop : 强制停止nginxnginx -s quit : 优雅停止nginxnginx -s reload 不重启nginx的前提下重...
2020-03-01 13:19:41
200
原创 Zookeeper相关知识总结
1. ZAB协议ZAB协议是Fast Paxos算法的一种工业实现算法。ZAB(Zookeeper Atomic Broadcast),zk原子广播协议,是专为Zookeeper设计的一种支持崩溃恢复的原子广播协议。zookeeper依赖ZAB协议实现分布式数据一致性。三类角色Leader:只有Leader才能处理写请求,并负责提案的发起和决议。Follower:接受客户端的请求,处理读...
2020-02-23 15:07:21
165
原创 详解Paxos算法
Paxos算法是什么?Paxos算法是莱斯利.兰伯特1990年提出的一种基于消息传递的、具有高容错性的一致性算法。算法描述算法角色描述Paxos算法中有三种角色,分别具有三种不同的行为,一个进程可能同时充当多个角色。Proposer: 提案的提议者。Acceptor: 提案的表决者。超过半数的Acceptor同意了提案,则表示提案通过。Learners:提案的学习者,当提案通过时,需...
2020-02-23 14:09:43
326
原创 查看activemq启动错误信息
activemq的一个节点挂了,我去启动起来,这还不简单吗?找到bin目录,执行命令./activemq start执行过后,没有对应的进程id(命令:ps -ef|grep activemq)说明没有启动成功然后去data目录,也没有activemq.log文件由于启动命令默认是后台启动,所有看不到错误信息看启动信息可以用命令:./activemq console用这个命令...
2020-02-14 16:14:32
632
原创 linux环境下查看修改最大文件句柄数
1.查看文件句柄数ulimit -a列出结果的 open files 就是当前支持的最大句柄数2.修改默认设置执行命令vim /etc/security/limits.conf在文件末尾加上* soft nofile 30000 #超过会报警* hard nofile 65536 #超过系统会报错后面的值可以根据需求设置添加完后立即生效的,只是在当前session中看不到...
2020-02-12 16:45:29
811
原创 java编写一个实用的压力测试程序
一个简单的压力测试程序,可设置请求地址,并发请求的线程数和总请求数代码结构如下:下面直接贴代码1.pom依赖<dependencies> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</art...
2020-01-23 11:06:25
2939
原创 maven将源码一起打入私服中
在pom文件中添加如下配置就可以了<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>3.2.0</version> <execution...
2020-01-21 15:57:20
223
原创 Integer源码深度分析
首先,先抛出一个判断题,如下:public static void main(String[] args) { Integer i1 = 124; Integer i2 = Integer.valueOf(124); Integer i3 = new Integer(124); System.out.println(i1 == i2); System.out.println(...
2020-01-21 10:49:04
190
原创 ScheduledExecutorService导致程序不能退出的解决方案
一.怎么解决的?1.使用如下构造方法:ScheduledExecutorService executor = new ScheduledThreadPoolExecutor(1, new DaemonThreadFactory());2.实现自己的DaemonThreadFactorypublic class DaemonThreadFactory implements ThreadFa...
2020-01-17 16:52:49
2610
原创 Redis常见缓存问题
1. 什么是缓存穿透?缓存一般都是key,value的形式,通过key先去缓存中查,没有再去数据库查。如果故意访问一些本来就不存在就key,就会导致一直去查数据库,如果并发量很大的话,会对数据库造成很大压力。简单来说就是通过不存在的key穿过缓存,请求到数据库。解决方案:1.通过key从数据库没查询到数据也进行缓存,将缓存失效时间设置短一点。2.对key进行过滤,过滤掉不符合的key(比如...
2020-01-16 20:25:29
205
原创 Redis的持久化
Redis持久化有两个方式,分别是AOF和RDB。为什么需要提供两种方式呢?两种方式有啥区别?各自的优缺点是什么?什么场景下用什么方式?带着这些问题,我们来看一下1.RDB方式Redis是一个内存数据库,为了防止数据丢失肯定是需要将数据持久化到磁盘上的,RDB就是Redis提供的一种数据持久化方式,RDB文件保存的是二进制数据。Redis默认就采用了RDB方式,RDB是通过快照的方式持久...
2020-01-15 21:42:38
110
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人