自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (1)
  • 收藏
  • 关注

原创 RoaringBitmap数据结构以及精确去重UDAF实现

一、位图(Bitmap)1、什么是比特(bit) 1)它是英文 binary digit 的缩写 2)它是计算机内部存储的最小单位,用二进制的0或者1来表示 3)1 Byte = 8 bit;1024 Byte = 1 Kb;1024 Kb = 1 Mb;1024 Mb = 1 Gb;1024 Gb = 1 Tb2、引子给出40亿个连续不重复且无序的无符号int型整数,目前条件是只有一个2G内存的PC,需要判断出某个数字是否在给出的这40亿个数字里面...

2022-05-06 17:09:50 1692

原创 数据结构与算法之快速排序

1. 什么是快速排序:最突出的特点就是通过数字之间的比较找到基准数的位置,然后根据该位置进行递归分治2. 画图分析,示例数组为{4, 7, 6, 5, 3, 2, 8, 1}1)数组{4, 7, 6, 5, 3, 2, 8, 1}以4为基准,分治数组2) 紧接着递归进入数组中小于 4 的这部分以 3 为基准发现都在3的左边,右边再次递归时,startIndex= 2 + 1 endIndex = 2,2是3这个数字在该数组中的索引位置,startIndex > endInd..

2020-08-19 17:42:17 261 1

原创 Nginx(小例子:反向代理、负载均衡、文件浏览和下载)

一、在验证功能之前需要的前提工作1. 下载nginx以及依赖:yum -y install gcc zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre-devel2. 安装nginx:进入nginx安装目录执行 ./configure 执行完后,在该目录下接着执行 make && make install3. 上面操作执行完之后,在 /usr/local/目录下会生成nginx目录4. nginx的配置文件是

2020-07-28 19:11:46 1033

原创 Java基础之序列化(类属性由驼峰转换成下划线)

用Google的gson可以实现1. 引入依赖 <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.4</version> </dependency>2. 利用

2020-07-28 17:12:28 1380

原创 Mybatis之动态sql(批量插入)

1. 需要用到的依赖 <!-- 操作mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> <

2020-07-25 09:39:26 1350

原创 数据结构与算法之希尔排序

1. 我是看了漫画算法以后才看懂的,在这里附上漫画算法的地址:https://mp.weixin.qq.com/s/b9-dkpAhWJYshuSs5cwnOw2. 希尔排序从两个方面来优化插入排序的:1) O(n^2) 中n的规模(n的规模越小,排序的时间花的就越少)2) 整个数组序列的有序性(越是趋向于有序,比较交换的次数少了,排序的时间花的就越少)3. 时间复杂度,注:我不会证明。。O(nlogn)...

2020-07-18 09:47:19 87

原创 Linux Shell之cut和awk(字符串的切割)

1. 我想获取下面配置文件(abc.txt)中的第一行的值canal.instance.master.address = 172.16.116.134:3306canal.instance.master.journal.name = mysql-bin.000001canal.instance.master.position = 120canal.instance.master.timestamp =2. 命令如下grep canal.instance.master.address a

2020-07-17 13:21:53 2868

原创 SpringBoot配置文件之三种加载方式

最近在做一个项目中,需要通过java连接ssh获取linux服务器中指定录下的文件中的一些内容,需要用到一些服务器和路径的配置,所以在这里总结一下加载配置文件的方式:1. 第一种 application.propertiescanal.monitor.exe.command=echo `grep 'canal.instance.master.address' instance.properties | cut -d = -f 2`;echo `grep 'canal.instance.defaul

2020-07-17 12:54:22 1148

原创 Linux Shell之awk(解析Json文本通过key获取value)

1. 这周有一个从json中获取timestamp的的需求,文件名称叫 meta.dat,内容如下{"clientDatas":[{"clientIdentity":{"clientId":1001,"destination":"instance_ent_advertise_statistics","filter":""},"cursor":{"identity":{"slaveId":-1,"sourceAddress":{"address":"eagle134","port":3306}},"po

2020-07-10 19:47:08 7164 1

原创 数据结构与算法之插入排序

1. 什么是插入排序我的理解:我感觉插入排序结合了冒泡排序和选择排序的一些思想但又不太一样。冒泡排序是两两比较从右向左依次推出最值,选择排序是从左向右从乱序序列中选出最值之后插入相应位置,插入排序是将未排序值和有序序列两两比较将比较值交换到相应的位置。冒泡排序重在两两比较后交换;选择排序重在在没排序的序列中选择最值;插入排序重在没排序的值和已排好序的序列进行比较,再两两交换直到交换到相应位置2. 图解,由小到大排序,数组为:3,4,1,5,23. show me the code/

2020-07-06 11:51:53 103

原创 数据结构与算法之选择排序

1. 什么是选择排序我的理解:从左向右一次推举中数组中的最值,推举的方式是:第一次选择所有元素的最值放到数组左边第一位,第二次再从剩下的元素中选择最值放到第二位,依此类推,直到排出数组的顺序为止2. 图解,由小到大排序,数组为:3,4,1,5,22. show me the code/** * 选择排序 */public class SelectSort { public static void main(String[] args) { int[]

2020-06-29 17:27:40 160

原创 数据结构与算法之冒泡排序

1. 什么是冒泡排序:我自己的理解:相邻的数字之间两两比较不断的从右向左推选出最大(小)值的过程。特点就是一次只能在最右边推举出一个最大(小)值,所以需要多次推举2. 对上面的理解画图解释一下,以数组 3, 4,1,5,2由小到大为例:3. show me the code:public class BubbleSort { public static void main(String[] args) { int[] num = {3, 4, 1, 5, 2

2020-06-28 19:49:46 147

原创 数据结构与算法之(渐进)时间复杂度

1. 搜了好多文章也没太理解,看了下面这个大佬的文章之后有些理解了,附上大佬的博客地址:https://blog.csdn.net/qq_35661171/article/details/843136012. 重点概念总结一下:T(n)函数表示基本操作执行次数 渐进时间复杂度:若存在函数f(n), 使得当n趋近于无穷大时, T(n) / f(n) 的极限值为不等于零的常数, 则称 f(n)是T(n)的同数量级函数。记作T(n) =O( f(n) ), 称O( f(n) )为算法的渐进时间复杂.

2020-06-28 15:31:40 2069 1

原创 数据结构与算法之递归(8皇后问题)

1. 规则:有一个 8 x 8 的棋盘,放置皇后棋子,要求:所放的皇后不能在同一排,不能在同一列,不能在同一斜线2.http://www.4399.com/baidugame/42643.htm 这个是4399里8皇后小游戏的地址3. 为了理清思路,我以 4 x 4的棋盘为例,code/** * 8皇后问题 */public class Queue8 { // 一维数组代表所放皇后的列, 我们默认不把皇后放在同一行 private final int max = 4..

2020-06-22 14:21:16 216 2

原创 java基础之接口回调

1. 什么是接口回调:我的理解是,在一个类的方法参数中引用另一个实现了某个接口的对象的引用,且该引用为接口引用(上转型)2. 为什么要用接口回调:我的理解是,解决业务、类与类或者模块与模块之间的协作问题3. 怎么用接口调用,codeimport java.util.HashMap;import java.util.Map;interface CallBack { void invoke(Map<String, Object> mapData);}class Se

2020-06-18 17:53:32 154

原创 java基础-设计模式之代理模式(JDK代理)

1. 什么是代理:由接口、实现类、以及代理类组成的一种设计模式(我自己的理解,可以看下面的快速入门案例)2. 为什么要用代理:在不侵入目标方法的前提下增强目标方法的功能,这也符合Java的开闭原则3. 怎样使用代理:代理分为静态代理和动态代理,我们一个一个的看4. 首先准备好接口和被代理类以及要用到的公共方法,codeinterface SingPlay { void singPlay();}class Singer implements SingPlay { @O

2020-06-17 17:48:12 142

原创 数据结构与算法之递归(迷宫回溯问题)

什么是递归:顾名思义,递归就是自己调用自己。我自己理解递归的本质是不断的开辟方法栈的过程/** * 迷宫回溯 */public class MazeBacktrack { public static void main(String[] args) { // 构造一个7行6列的地图矩阵 int[][] map = new int[7][6]; // 第一行和最后一行都是"墙", 用数字1来表示 for (int i = 0

2020-06-17 12:15:21 240

原创 数据结构与算法之计算器实现(中缀转后缀,用后缀表达式实现)

/** * 后缀表达式实现计算器 */public class SuffixExpressionCalculator { /** * 计算方法 * * @param infixExpr 中缀表达式 * @return 结果 */ public int calculate(String infixExpr) { Stack<Integer> stack = new Stack<>(); .

2020-06-12 19:31:53 338

原创 数据结构与算法之前缀、中缀、后缀表达式(中缀转前缀、中缀转后缀)

中缀表达式:我们熟悉的算术表达式,如:(3+4)*5-6+8前缀表达式(波兰表达式):机器熟悉的算术表达式,如:+ - * + 3 4 5 6 8后缀表达式(逆波兰表达式):机器熟悉的算术表达式,如:3 4 + 5 * 6 - 8 +1. 中缀转前缀语言描述:从右向左遍历中缀表达式,如果是数字就压入数字栈,如果是符号就压入符号栈,如果当前符号比符号栈栈顶符号优先级小则弹出栈顶符号并压入数字栈,如果当前符号比符号栈的栈顶符号优先级大或者相等则压入符号栈,如果有括号,在遍历完括号执行完上述操作.

2020-06-11 19:00:10 2392 1

原创 数据结构与算法之栈(简单计算器的实现)

//需要用到的栈类public class StackDemo { private int top; private final int size; private final int[] stack; public StackDemo(int size) { this.size = size; stack = new int[size]; top = -1; } /** * 判断栈是否已满 .

2020-06-09 22:45:59 899

原创 数据结构与算法之栈(简单Demo,用单向链表来模拟栈)

/** * 用链表实现栈 */public class StackLinkedList { private final Node head = new Node(-1); // 链表节点的最大值 private final int maxSize; // 当前链表节点的个数 private int count; public StackLinkedList(int maxSize) { this.maxSize = maxSiz.

2020-06-09 15:37:02 141

原创 数据结构与算法之栈(简单demo,主要是理解栈的特点)

什么是栈:先入后出的有序列表, 类似于弹夹压子弹, 最后一颗在栈顶, 第一个元素在栈底为什么要用栈:栈可以解决的问题有 1. 子程序调用; 2.递归; 3.表达式的转换; 4.二叉树的遍历快速入门: public class StackDemo { private int top; private int size; private final int[] stack; public StackDemo(int size) { this.size .

2020-06-08 13:46:03 183 1

原创 数据结构与算法之单向环形链表(约瑟夫环、约瑟夫问题)

1. 什么是单向环形链表:单向链表的尾节点的next指针指向链表头节点2. 为什么要有这个数据结构:我目前理解的是可以解决约瑟夫问题3. 怎么解决约瑟夫问题:约瑟夫问题(变种,本质不变):设编号为1到n的人围坐一圈, 编号为k(1<=k<=n)的人从1开始报数, 数到第m的人出列, 他/她的下一位又从1开始报数, 数到第m的人又出列. 以此类推, 直到所有人出列为止, 由此产生一个出队列的编号,请打印这个出队列的编号show me the code:public cla

2020-06-05 19:25:59 234

原创 数据结构与算法之双向链表(增删改查、有序增、正向遍历、反向遍历)

双向链表1.什么是双向链表: 每个节点都有前一个节点的位置和后一个节点的位置2.为什么要用双向链表: 和单向链表比, 双向链表可以正反向的遍历, 而且可以自我删除节点. 单链表只能单向遍历, 并且在删除节点时需要找到待删除节点的前一个节点.3.怎么用双向链表:public class DoublyLinkedList { // 头节点 private final Node headNode = new Node(0, "", ""); /** * 添加节点.

2020-06-03 15:45:49 590

原创 数据结构与算法之单链表(增{包含增序增加}、删、改、查、链表反转、有序链表合并{包含递归和非递归两种方式})

直接上代码吧,后面再总结一下:public class SinglyLinkedList { // 头节点 private final Node headNode = new Node(0, "", ""); /** * 添加节点 * * @param newNode 新节点 */ public void add(Node newNode) { Node temp = headNode; whi

2020-05-29 13:24:23 225

原创 java基础之泛型

看过effective-java以后,想总结一下它里面的东西,但是感觉无从下手,还是自己太菜了。下面这个大佬总结的泛型感觉很全面,希望大家共同学习努力吧。大佬的博客地址:https://blog.csdn.net/s10461/article/details/53941091...

2020-05-27 19:13:10 78

原创 数据结构与算法之环形队列(以int数组为例,不包含扩容)

废话补不多说了, 环形队列最难理解的部分就是取模部分, 可以先看一下这个链接的大佬的讲解:https://juejin.im/post/5c95d2515188252dab3ebfc5如果上面这个链接的内容看懂了, 那本章的内容就不用看了, 就只当我做一个学习记录就好了:// 代码部分import java.util.Arrays;public class CircleArrayQueue2 { private int front; private int tail; .

2020-05-26 17:57:07 163

原创 数据结构与算法之稀疏数组(棋盘的保存和续局)

稀疏数组: Int sparseArray = new Int[原始数组有效值+1][3]// 行 列 值// 总行数 总列数 有几个有意义的值// 第几行(从0开始) 第几列(从0开始) 值是什么为什么会用到稀疏数组: 如果原始的二维数组很多数据没有意义, 可以用到稀疏数组来达到数据压缩、节省空间的目的稀疏数组的应用:public..

2020-05-22 18:37:04 153

原创 lambda之Function函数接口

什么是函数接口:1. 用@FunctionalInterface声明 2. 有且仅有一个抽象方法Function函数接口:@FunctionalInterfacepublic interface Function<T, R> { /** * Applies this function to the given argument. * * @param t the function argument * @return the f.

2020-05-22 12:57:53 141

原创 java基础之嵌套类

java嵌套类: 静态成员类、内部类内部类: 非静态成员类、匿名类、局部类1. 静态内部类1.1 访问外围类所有的静态成员(属性和方法)1.2 是外围类的一个普通的静态成员:比如用private修饰, 则只能在外围类内部使用1.3 功能:作为内部类的辅助类来使用,例如构建器,举个例子public class Person { private final String name; private final int age; private final double

2020-05-20 19:10:37 119

原创 lambda之reduce函数

由于公司的api做了升级,所以最近要迁移自己写的druid查询部分的代码到新项目,然后在迁移的时候有一段用到lambda表达式来求和的例子,时间有些长了一开始看还有些懵,又重新温习了一下,下面写一下整体思路吧(以下是自己编的例子,和业务思想一样):需求:需要通过druid api根据matchType作为透视维度,查看每个matchType的点击量和薪水,构造的对象如下:@Data // lombok注解@Builder // lombok注解static class Person {

2020-05-19 16:59:59 3292

原创 druid json查询:相同sql对应的json请求体

最近完成了一个新项目用druid的json查询的方式,项目做完了在这里总结一下:一、【简单SQL】:SELECT SUM(initiate_count) AS chatCount, SUM(online_initiate_count) AS onlineChatCount, SUM(initiate_chat_count) AS startChatCount, SUM(eff...

2018-08-14 16:13:19 2171

原创 NullPointerException

起因:在需求提测的过程中,测试在做破坏性测试时发现,错误消息没有提示,只有一个错误号:{    "flag": 0   // 0代码异常标识}正常情况应该是这样的:{    "flag": 0    "error":xxx}然后在找寻代码之后发现是空指针异常,在代码里我已经try-catch了为什么到接口测试的时候不提示错误消息呢?后来发现try-catch确实捕获了,但...

2018-07-21 12:24:43 165

原创 yyyyMMddHHmmss字符串时间格式转换成yyyy-MM-ddTHH:mm:ss(20180716000000 -> 2018-07-16T00:00:00)

起因:在用代码构造druid的查询json请求体对象的时候,由于druid的时间范围查询格式比较特殊,所以在这里总结一下。druid要求的格式如下:"intervals": [ "2018-07-16T00:00:00/2018-07-16T23:59:59 ]我们这边前台传过来的参数统一为20180716000000这种格式的,所以需要转换一下,我总结了两种:String from...

2018-07-16 20:15:57 6018

原创 Enum与String类型的比较

起因:在做最近一个druid查询项目的时候,由于queryType有多种所以想做成枚举类来实现,但是代码逻辑中有用到该枚举类和string比较的情况,实现方式如下:枚举类:public enum QueryTypeEnum { /** * 不支持分组 */ TIMESERIES, /** * 支持单一维度分组 */ TOPN,...

2018-07-13 12:56:48 11549

原创 本地分支merge到master分支(随笔)

起因:今天第一次用idea从自己本地的开发分支merge到master分支,坑是不少,最后由同事的帮助下完成,在这里整理一下成功的思路,总结并且备忘一下。1.开发分支的代码commit并push到远程仓库2.在IDEA上更新一下本地仓库的mater,保证本地仓库的master与远程仓库的master代码一致3.check out开发分支,完成后把本地的master分支Merge到开发分支上。因为要...

2018-07-05 14:22:21 4434

原创 lambda表达式替换list中某个实体类的某个元素值

起因:昨天在写一个需求的时候,我想遍历一个集合,找到该集合下实体类里面的某个字段和我想要的相等的,并把它替换掉。这个时候按说找到之后替换掉就应该跳出循环了,但是在用lambda的foreach方法时并没有找到该方法,最后是用普通for循环来解决的。最后由同事提示可以用filter来处理,我试了一下,可以达到想要的效果,直接贴代码:import com.google.common.collect.L...

2018-07-04 13:18:43 31102 6

原创 通过IDEA本地新建项目并提交该项目到GitLab远程仓库

1.VCS -&gt; Import into Version Control -&gt; Create Git Repository 2. 选择本地要提交的项目3.右击项目选择Git -&gt; Add4.右击项目选择Git -&gt; Commit Directory将该项目提交到本地仓库4.远程仓库新建git项目5. 将该项目push到上一步新建的远程仓库里面6.点击 Define remo...

2018-06-30 11:15:17 4767

原创 GitLab将远程仓库分支导入IDEA

1.新建文件夹,并从远程仓库导入master打开新建文件夹,右击空白处选择Git Bash Here,然后输入如下命令注:http://XXX.git为项目的git地址2.右击导入的项目,选择Git Bash Here,输入如下命令查看本地分支情况,此时咱们本地只有一个master分支3.此时打开IDEA导入master分支,会在IDEA的右下角这里找到咱们远程仓库的分支【Git Branches...

2018-06-29 16:02:15 2082

原创 stream对实体类的数值型字段求和

1.首先创建一个实体类:import lombok.AllArgsConstructor;import lombok.Data;@Data@AllArgsConstructorpublic class Bean { private long num1; private double num2;}2.然后将实体类装到list里面,并做如下处理:import com.goo...

2018-06-27 20:52:26 16916

IDEA阿里规约插件

由于代码格式不规范导致提交的代码出现了好多警告的黄线,于是就用了阿里的规约插件,挺好用的.

2018-07-13

空空如也

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

TA关注的人

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