自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 问答 (1)
  • 收藏
  • 关注

原创 如何实现本地文件的线上压缩包下载功能

如何提供压缩包下载服务

2022-10-26 10:53:51 275 1

原创 SpringBoot的过滤器使用

springboot过滤器使用

2022-07-19 17:22:19 667

原创 Kakfa客户端SSL访问kafka

kafka安全设置

2022-06-23 11:37:33 1177

原创 logstash,kibana以及filebeat添加keystore

在比较新的版本,logstash,kibana和filebeat都支持使用keystore保存关键信息,比如你的ES密码等操作方法:以logstash为例1 创建keystore,调用脚本文件logstash-keystore./bin/logstash-keystore create默认创建在config目录下,可使用setup来修改安置未知。此外logstash的keystore可以给它创个访问密码。方式是在创建keystore之前,新建变量LOGSTASH_KEYSTORE_PASS

2022-03-11 17:02:11 783

原创 logstash解析json对象

"fields" => { "tenant_id" => -1, "project" => "bss3", "app_name" => "ilog_default_application", "projectName" => "test", "project_id" => 561959, "messagetopic" => "logstash

2022-03-11 16:39:18 2904

原创 ES的searchAfter使用详解

searchAfter简单来说就是将from。。。size中的from用searchAfter的sort字段表示,通过不断更新此sort字段实现向下滚动效果。但是和from不同的是对数据更新不敏感。search after官网介绍使用search_after时要求你的query值和sort值相同。更具体点是要求你的字段相同,你可以修改它的逻辑,比如你可以查时间为a的数据,那么你将逻辑改为比a大或者比a小都可以,但是你的逻辑必须是时间。sort同理,你可以升序也可以降序但你用来排序的字段不要变。sea

2022-03-03 14:40:02 11402 1

原创 URL存在特殊字符^注意事项

URL中存在^这个字符时,会报400,请注意在2.x以上的版本springboot中是不支持 ^这个字符的。

2022-03-02 16:51:57 355

原创 logstash的dissect匹配字符串内置双引号时需要注意的问题

当你使用dissect匹配如下字符串时"{\"0\",\"20\",\"WEB\"}"如果你在mapping下如此编写"{\"%{Id}\",\"%{num}\",\"%{name}\"}"你会发现报错信息显示不匹配,而且你细看会发现我明明写的是\,怎么变成 \\\ 了?类似于这样Dissector mapping, pattern not found {"field"=>"message", "pattern"=>"{%{?pass}\\\"%{operation_time}\

2022-02-28 15:55:49 569

原创 使用java的io流实现http协议,并由此发散到如何实现tomcat容器

本文,笔者将使用java 的io流来实现http协议的接收和发送消息。其中前台使用postman后台使用idea编写程序步骤如下,java后台开放一个端口,接收postman发来的链接,并创建socket和于此对应的inputStream和OutputStream.我们使用封装后的字符缓冲流BufferedReader和BufferedWriter来实现。请看后台代码public static void main(String[] args) { try{

2022-02-17 14:25:14 476

原创 rest high level client 创建测试数据

restHighLevelClient有一个index方法,用来向指定索引下创建数据官方文档链接如下官方es创建指定索引下的数据使用用例public class TestEsCreate { public static void main(String[] args) { List<HttpHost> httpHosts = new ArrayList<>(); String[] clients = StringUtils.split(

2022-02-09 16:08:40 1259

原创 maven打springboot应用的包,同时将三方依赖包打入方法

在你的pom文件下,插入此段即可 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin

2022-01-26 16:37:58 375

原创 mybatis的自动建表方法——ACTable

ACTable的使用ACTable简单说就是对mybatis的一个增强组件,可以在你启动java应用的时候自动得执行建表语句在你成功使用mybatis操作数据库后,额外如官方链接所示接入actable即可实现自动建表https://www.yuque.com/sunchenbin/actable/ag3y1y跳转后的是springboot的操作步骤,目前只支持mysql。按照官方的步骤,配置好actable实现启动时自动建表后请注意一下,即完成如下配置。注意@Component会覆盖@

2022-01-26 16:35:06 4141

原创 logstash匹配正则做判断,正则表达式的写法

笔者在使用logstash做日志解析的时候,需要根据日志源(source字段)来进行判断,以何种格式进行解析。此时source字段来源非常多,比如a,b, c,在此之下有分为很多种日志,如1,2,3.此时我的source就有a1,a2,a3,b1,b2,b3,c1,c2,c3,如果我现在只想解析1这种类型的日志,而且我不知到之后还会引入多少个源。那么采用正则匹配来判断是必然的了。正则表达式写法如下1 首先得在首尾叫上’/’,表示这是个正则 如 [a] =~ /****/2 接下是几个常用的写法x

2021-11-25 10:45:17 1550

原创 messageSource在后台做国际化

操作简单,一般按规范在resource下创建一个i8n文件夹,再在该文件夹下创建多个文件对应多个语言,比如message的项目名,可以就在这下面创建message_zh_CN.properties,message_en.properties的文件,同时一定要再创建一个message.properties的文件,原因未知。之后在application.properties下添加这一行spring.messages.basename=i18n/message然后springboot就可完成对messag

2021-10-21 19:22:54 110

原创 2021-10-19 resultType和resultMap使用需注意的小问题

当你的数据库中的属性名与实体类的字段统一满足某种关系的一一对应时,可直接使用resultType编写,这个一一对应关系写在mybatis-config.xml文件下。写在setting标签下,注意Mybatis配置文件的属性位置顺序是 固定 的,不允许 颠倒顺序,否则 Mybatis 在解析 XML 文件的时候就会抛出异常,这个与 Mybatis 框架启动加载配置信息顺序有关,后续我们源码分析会讲到。方式如下<configuration> <settings>

2021-10-20 09:53:00 207

原创 在使用@RequestParam时要注意的一个小问题

笔者在今天调用接口时遇到一个问题,即我在用postman测试后台的接口时,返回数据是空的。当时找了半天,最后才发现是这个注解使用上的误解。对于用@RequestParam注解的参数,它接收的是x-www-form-urlencoded格式数据,而@RequestBody是application/json类的数据。这两者会有什么问题呢?笔者在对一个String类的参数添加@RequestParam注解时,像当然的在postman中对这个参数输入了一个到双引号的数据,这个数据在被引入到sql语句中时,并没有去

2021-10-14 16:21:31 540

原创 使用PriorityQueue上需要注意的问题

PriorityQueue 作为Queue的一个子类,能够对里面的元素按照元素的比较器进行自动的排序,其排序算法采用的是堆排序。堆排序是一种建立好后,在根节点浮出最小值或者最大值的二叉树(一般用数组就可以实现),然后不断取出根节点值然后完成排序的算法。由于该算法只能保证浮出的那一个是最大或最小值,因此当你使用迭代器来遍历的时候,即对二叉树进行广度遍历后,除了第一个值外,其他的值必然会是无序的,在某些特殊情况下甚至你能感觉到他甚至没有排序。这是因为堆只保证根节点一定比它的字节点大或小,但同一深度,或者不同路

2021-10-09 16:36:05 127

原创 git中rebase操作和pull操作注意事项

git pull我们都知道他是git fetch + git merge 但是为什么他不被推荐呢?问题就出在这个merge,假如你在master分支调用了一次git pull ,那么他会自动用远程的master分支来合并你的本地master分支。造成的结果是什么?就是你在本地master分支上的改动很可能因为这次合并消失了,比如你这边本地在master添加了一些东西,然后git pull,显然远程上是没有你添加的东西的,那么合并的时候将远程合到本地上,它就会理解成是对你本地分支进行删除操作(因为是远程合并

2021-09-29 13:33:16 2381

原创 ES数据库操作入门总结

elasticsearch总的来说应该算是一个搜索引擎,公司使用一般是作为日志结果查询。json文档格式,倒排索引的快速以及分布式的特性,使得es可以在大量数据中快速查询到结果。windows安装和配置可参考官方网址。https://www.elastic.co/guide/en/elasticsearch/reference/current/zip-windows.html倒排查询可参考这个知乎回答https://zhuanlan.zhihu.com/p/62892586可以使用浏览器的U

2021-09-29 11:11:19 3366

原创 C++学习笔记3 泛型算法

c++中的容器只定义了很小的一部分操作也就添加,删除,访问首尾元素,确定容器是否为空以及获得指向首尾元素之后位置的迭代器。方法少到我们几乎可以全部列举出来。但我们显然要对我们的元素要做的不只是这些,比如查找,替换,排序,比较,计算等。c++标准库它并未给每个容器都定义成员函数来实现这些操作,而是定义了一组泛型算法。接下来的都是一些死记硬背的东西,我写成笔记以加深印象。没什么理解的东西大多数算法都定义在头文件algorithm中。标准库还在头文件numeric中定义了一组泛型算法。一般这些算法并不直

2021-01-30 14:37:43 74

原创 跑酷小游戏

跑酷游戏其实算是很简单的一种游戏了,实现原理其实就是当物品都在向左移动时,你控制一个人物上下移动,躲避障碍物,获取道具以及金币等等。通常是以你拿到多少分数,走了多少距离当作胜利条件。那么首先准备你需要的素材,比如金币,道具,障碍物,移动人物等。那么在游戏运行过程中,你需要写触发器,即人物与金币,道具,障碍物接触时的内部函数。如下void OnTriggerEnter(Collider mCollider){ //如果碰到的是金币,则金币消失,金币数目加1; if (mCollider.gameO

2021-01-27 23:53:33 683

原创 C++学习笔记2 字符串、向量和数组

本书的第三章几乎就是在讲明白迭代器,数组下标和指针之间的关系。1,首先迭代器的运算类似于指针运算,迭代器类似于指针,但是迭代器并不使用取地址符,而是通过其类中的begin()函数和end()函数来取到第一个元素的位置和最后一个元素的下一个位置。其解引用的方式和指针一样就是加个*。迭代器支持的运算指针也全都支持,也因此迭代器几乎可以看作指针的一个父类2,数组下标其实就是数组中首个元素的位置加上下标值后的位置所对应的一个指针(这样也能解释为什么java中数组的元素可通过形参改变了。)比如下面这个p //

2021-01-20 23:00:41 85

原创 C++学习笔记1 变量和基本类型

考试周和化工厂设计结束了,总算可以拿起书学习了。。1, 如果在数字前加入前缀0,则以八进制计算。加入前缀0x则以十六进制计算。所以如果你写int i = 08或者int i = 09; 是会报错的。变量,引用和指针首先使用格式如下:int i = 0; i是一个变量int &j = i ; j是一个引用,指向一个对象int *k = &i;k是一个指针。类似于引用,但本身是可以赋值和拷贝的。其中变量和指针在函数体内允许不在定义时就初始化。而引用必须初始化。原因在于变量和指针是对

2021-01-19 16:10:06 50

原创 寻路算法(BFS,DFS, A*寻路)

博主真的有段时间没写博客了,主要这段时间在练内功(算法和数据结构),因此就没有写博客了。这次用两个小时写出了寻路算法,算是对之前博主学习进程的一个交待吧。我们回归正题,BFS和DFS是我们遍历链表树图等等数据结构时候的一种方法,而寻路换句话说就是从起点遍历到终点的过程。(我就不介绍寻路方面的最基础的问题,大家如果需要从头了解的话可以看其他人的博客)我先默认大家已经了解并掌握了BFS和DFS的基本概念;广度遍历和深度遍历。即使用队列和栈遍历的两种方法。1,保存路径寻路算法相比于我们平常使用BFS,DF

2020-12-04 16:58:07 3970

原创 线程间的通信

1,我还记得最开始写通信小程序的时候,那时候的数据传输就是用死循环来检测数据是否发生了变化,但是这种通信会浪费CPU资源,而且如果轮询的时间过大,有可能你还没取到你要的值,这个值可能就发生了更改,导致本来可以跳出的死循环跳不出来。因此引入了一种机制wait/notify。2 wait/notifywait() 方法是Object类的方法,它的作用是使当前执行wait()方法的线程等待,在wait() 所在的代码行处暂停执行,并释放锁,在调用wait()之前,线程必须获得该对象的对象级别的锁,即只能在同步

2020-10-05 11:40:30 142

原创 对象及变量的并发访问

1 synchronized 方法关键字synchronized可用来保证原子性、可见性和有序性。关键字synchronized所取得的锁都是对象锁,而不是把一段代码或方法当作锁。如下代码public class Synchronized_learning { public static void main(String[] args) { // TODO Auto-generated method stub HasSelfPrivateNum numRef1 = new HasSelf

2020-09-30 17:07:19 78

原创 Java多线程

1 进程和线程一个程序启动后就是一个进程,进程相当于一个空盒,它只提供资源装载的空间,具体的调度不是由进程完成的而是线程。看如下这段代码public class Test { public static void main(String[] args) { System.out.print(Thread.currentThread().getName()); }} 它的打印结果如下主函数创建的是一个名称为main的主线程,所有其他运行的线程都是它的子线程。这也证明了进程的确只是一个

2020-09-12 18:03:02 128

原创 TCP/IP 20问

TCP/IP 协议 20 问 姓名:________ _________传输层有哪些协议及对应职能?传输层对应于OSI参考模型的传输层,为应用层实体提供端到端的通信功能。该层定义了两个主要的协议:传输控制协议(TCP) 和 用户数据协议(UDP)TCP 提供的是一种可靠的、面向连接的数据传输服务;而UDP协议提供的是不可靠的、无连接的数据传输服务。传输层如何区分不同应用程序的数据流?传输层赋予每个数据流对应的应用程序抽象的表示——端口号,不同的应用程序对应的端口号不同。

2020-09-12 15:30:27 232

原创 “监控线程”通讯模型以及衍生出的 java.util.ConcurrentModificationException错误

监控线程用于检测每一个线程的状态,以用于每一个线程结束后的统计。如下面这个统计电脑的相关文件数据项目先上完整代码public class CountFile extends Thread{ private String rootDirName; private int realFileCount = 0; private int dirCount = 0; private int lengthCount = 0; private boolean finished = false;

2020-09-09 17:45:03 52

原创 排序方法总结

1 时间复杂度O时间复杂度即描述算法增长率的一种方。算法的增长率即随着自变量n的改变算法本身运算量的变化大小。如O(n)指的是线性变化,即增加了n,运算量相对应的增加n。如下面的程序for (int i = 1; i <= n; i ++){k = k +5;}就是一个时间复杂度为O(n)的算法。相对应还有O(logn)(二分查找法), O(n^2)(选择排序法), O(2^n)(汉诺塔问题),等时间复杂度。其中logn默认以2为底n的对数。2 插入排序重复地将新的元素插

2020-09-08 12:20:00 124

原创 回溯法解决八皇后问题

在一个8x8的棋盘上每个皇后的行上,列上,主次对角线上都不允许出现其他的皇后。很显然安放皇后需要逐行或者逐列的安放并进行判断,回溯法就是在判断不成功时回溯到上一行或者上一列,直到判断成功。在梁勇书上关于8皇后问题的回溯法算法如下private boolean search(){ int k = 0; while(k >= 0 && k < SIZE){ int j = findPosition(k); //找到该行可行的列 if(j < 0) {

2020-08-22 17:51:50 195

原创 huffman文件压缩

前言用霍夫曼编码进行文件压缩,就是用更短的01串(bit)表示一个char型变量。很显然在java里面我们无法从最小单位bit入手改变,那么我们可以通过哈希表的映射来改变,只不过我们会出现一个问题,如这个HashMap<Character,String> 很显然Character型的常量对应的是一个String型的01串,我们无法存储bit的数值类型。这里我们也能想到的最关键的点是如何将String中的01串每次取8个char并让这8个char最终能代表一个byte。因为1个byte等于8

2020-08-14 19:09:41 179

原创 规则集和映射

1 规则集是一个用于存储和处理无重复元素的高效数据结构。映射类似于目录,提供了使用键值快速查询以获取值得功能。2 Set接口扩展了Collection接口,它没有引入新的方法或常量,只是规定Set的实例不能包含重复元素。3 负载系数测量该规则集允许填充多满。当元素个数超过了容量与负载系数的乘积,容量就会自动翻倍。比较高的负载系数会降低空间开销但会增加查找时间。通常情况,默认的负载系数是0.754 HashSet类可以用来存储不重复的元素。考虑到效率的因素,添加到散列集中的对象必须以一种正确分布散列码的

2020-08-11 15:56:37 887

原创 Java学习笔记9

1 集合Collection接口 为线性表、向量、栈、队列、 优先队列、 以及 规则集定义了通用操作。2 Java集合框架支持以下两种类型的容器 一种是为了存储一个元素集合,称为集合(collection)另一种是为了存储键/值对,称为映射 (map)3 集合的分类Set 用于存储一组不重复的元素List 用于存储一个有序元素的集合Stack 用于存储采用后进先出方式处理的对象Queue 用于存储采用先进先出方式处理的对象PriorityQueue 用于存储按照优先级顺序处理的对象这些集合

2020-08-06 17:51:18 104

原创 泛型

1 没有指定具体类型的泛型类和泛型接口被称为原生类型,用于和早期的Java版本向后兼容如下所示GenericStack stack = new GenericStack();//等价于GenericStack<Object> stack = new GenericStack<Object>();2 通配泛型 可以使用非受限通配、受限通配或者下限通配来对一个泛型类型指定范围。在如下代码public class GenericStack<E> { publi

2020-08-05 12:03:08 100

原创 Comparable接口的使用

1 为一个类定义泛型类型,需要将泛型类型放在类名之后,例如GenericStack.为一个方法定义泛型类型,要将泛型类型放在方法返回类型之前,例如 void max(E o1, E o2)。2 Comparable接口假设要设计一个找出两个相同类型对象中较大者的通用方法。这里的对象可以是两个学生、两个日期、两个圆、两个矩形或者两个正方形。为了实现这个方法,这两个对象必须是可比较的。因此,这两个对象都该有的共同行为就是comparable(可比较的)。为此,Java提供了Comparable接口。接口

2020-08-04 11:36:30 290

原创 霍夫曼树的创建

前段时间因为两个实习的原因将写博客耽搁了下来,现在因为实习事情不多,我就开始继续写了。其实,看过其他人的博客,书籍以及自身理解后,我认为霍夫曼树可以简化代码的储存,让频率高的字段以更短的字符储存,而频率低的字段用更长的字符储存。最终在多次重复中实现简化压缩。(这个别人讲的很清楚了) 这里我推荐一个小伙伴的博客,他写的很详细。https://blog.csdn.net/qq_44941745/article/details/107370818创建霍夫曼树,特点就是自下而上的建立,在叶子节点储存字段数据,并

2020-07-31 09:25:40 747

原创 接口与抽象方法

1,抽象类和常规类一样,都有数据和方法,但是不能用new操作符创建抽象类的实例。在类的头部使用abstract修饰符表示该类为抽象类。2,非抽象类不能包含抽象方法去,如果抽象类的子类没有实现所有继承下来的父类抽象方法,就必须将该子类定义为抽象类。3,包含抽象方法的类必须是抽象类,但是抽象类可以不包含抽象的方法。4,接口比抽象类更加灵活,因为一个子类只能继承一个父类,但是却可以实现任意个数的接口。然而,接口不能包含数据域。...

2020-07-08 16:53:58 80

原创 异常

1, 异常分为免检异常和必检异常。免检异常包括RuntimeException、Error以及它们的子类。其他的异常都称为必检异常,编译器会强制程序员检查并通过try-catch块处理他们或者在方法头声明2,必检异常的处理方法第一种void p1() {try{}catch(IOException ex){}}//捕获异常第二种void p1() throws IOException {//声明异常 p2(); throw new IOException(); //抛出异常 }

2020-07-08 01:36:03 1580

原创 继承与多态

1, java不允许多重继承,一个java类只可能继承自一个父类。这种限制称为单一继承。2,super指代父类,可以用于调用父类中的普通方法和构造方法。3,当构造一个子类对象时,子类的构造方法会在完成自己的任务之前,首先调用父类的构造方法。public class Faculty extends Employee { public static void main(String[] args){ new Faculty(); } public Faculty(){ System.

2020-07-07 16:04:40 68

空空如也

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

TA关注的人

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