- 博客(17)
- 收藏
- 关注
原创 关于Redis出现“java.io.IOException: 远程主机强迫关闭了一个现有的连接”的一次排查
背景最近在使用springboot(Windows下)连接redis(云服务器)开发时发现一些问题:连接成功的情况下,在一段时间未交互数据后,再次通过连接与Redis传输数据回出现异常java.io.IOException: 远程主机强迫关闭了一个现有的连接。于是我上网找了一些博客主要是两种:可能是客户端连接太多了,开启timeout设置或tcp-keepalive将配置的的tcp-keepalive设置为60(可能之前是300)这两个设置是什么意思呢timeout,单位是秒,如果客户端连
2021-09-27 20:20:39 9085
原创 B树的增加、查询、删除和打印的算法及其Java代码实现
B树的定义一颗m阶的B树,或为空树,或为满足以下特性的m叉树:树中每个节点最多含有m棵子树若根节点是非终端节点,则至少右2棵子树。除根节点之外的所有非终端节点至少有⌈m/2⌉棵子树每个非终端节点中包含信息:(n, A0, K1, A1, K2, …,Kn, An)K为关键字,升序排序A是指向子树根节点的指针,K左边的子树的所有值小于K,K右边的子树的所有值大于K关键字个数满足 ⌈m/2⌉ - 1 <= n <= m - 1叶子节点都在同一层B树的图
2020-12-31 21:01:48 805
原创 算法:切披萨的方案数,3ms解决方案
题目描述这是leetcode第1444题。给你一个 rows x cols 大小的矩形披萨和一个整数 k ,矩形包含两种字符: 'A'(表示苹果)和 '.'(表示空白格子)。你需要切披萨 k-1 次,得到 k 块披萨并送给别人。切披萨的每一刀,先要选择是向垂直还是水平方向切,再在矩形的边界上选一个切的位置,将披萨一分为二。如果垂直地切披萨,那么需要把左边的部分送给一个人,如果水平地切,那么需要把上面的部分送给一个人。在切完最后一刀后,需要把剩下来的一块送给最后一个人。请你返回确保每一块披萨包含 至少
2020-11-18 11:07:32 1071
原创 算法:环路检测,求链表回环入口
题目给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。题目分析解这道题,分为两个部分,第一是确定是否是有环链表,第二是如果有环,返回回环的开头节点第一个问题我们可以使用快慢指针的方法,即两个指针遍历链表,一个快一些(一次移动两个节点),一个慢一些(一次移动一个节点),如果无环,那么快指针会率先到达终点,如果有环,则快慢指针一定会相遇。第二个问题我先给出结论,在两个指针相遇后,使一个指针从相遇点出发,另一个从链表头节点出发,最后相遇的节点就是开头节点。证明如上图,我们取头节点
2020-11-13 19:29:32 316
原创 跳跃表 SkipList 原理及Java实现
介绍在二分查找中,我们需要对数组进行随机访问,而在普通的单链表中,我们只能从头到尾遍历,即使单链表是有序的。跳跃表是有序的数据结构,在每个节点维持了多个指向其他节点的指针,达到快速访问节点的目的。跳跃表查找的时间复杂度最坏为O(N),平均O(logN),大部分情况可以和平衡二叉树媲美,而且实现更简单。本文的实现和数据结构的定义参照了这篇论文《Skip Lists: A Probabilistic Alternative to Balanced Trees》如上图:a就是最普通的单链表,在单链表的
2020-11-01 16:49:37 210
原创 分享一个横向打印二叉树图形的方法
最近想起之前大二学数据结构时测试B树时写了一个打印二叉树的C语言函数,现在突然想把它记录一下,改成打印二叉树的Java实现效果上图的二叉树打印效果如下解释一下这个图,将图顺时针旋转90°,看见有两种箭头短箭头表示这是一个值,即该节点的值长箭头指向该节点的子树,长箭头在值的左边,则指向左子树,在值的右边则指向右子树算法分析这个算法按行打印,每一个节点,子树和值在同一个“平台”上(“平台”只他们在的一条线上),先打印右子树(有的话),再打印值,再打印左子树(有的话),打印子树时,又是按照这
2020-10-31 20:40:13 1125 2
原创 redis实现:链表
介绍因为c语言没有内置这种数据结构,所以Redis构建了自己的链表实现用处链表在Redis中的应用十分广泛,比如列表键的底层实现之一就是链表。当一个列表键包含了数量不叫多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会用链表作为列表键的底层实现比如,一下integers列表键包含了从1到1024共一千零二十四给整数redis> LLEN integers(integer) 1024redis> LRANGE integers 0 101)"1"2)"2"3
2020-10-30 17:54:33 140
原创 Redis实现:简单动态字符串 SDS
介绍Redis没有使用C字符串(以空字符结尾),而是自己构建了简单动态字符串(Simple Dynamic String,SDS)的抽象类型,并将SDS用作Redis的默认字符串支持用处数据库中的字符串值(键值对的键、字符串值、其他类型的字符串部分)缓冲区,AOF模块的AOF缓冲区,客户端状态的输入缓冲区定义// sds.hstruct sdsdr{ int len; int free; char buf[];}len:字符串长度free:未使用空间bu
2020-10-12 21:24:18 123
原创 算法:生成窗口最大值数组
题目描述有一个整型数组arr和一个大小为w的窗口从数组的最左边划到最右边,窗口每次向右滑动一个位置如数组为[4,5,8,2],窗口大小为2时[4 5] 8 2 最大值是54 [5 8] 2 最大值是84 5 [8 2] 最大值是8数组长度为n窗口大小为w,则一共产生n-w+1个窗口最大值输入:整型数组arr,窗口大小w输出:一个长度为n-w+1的数组res,res[i]表示每种窗口状态下的最大值,上例应返回[5, 8, 8]。题目分析可以先把初始窗口的最大值记录下来,每次向右移动一个
2020-10-03 14:04:28 353
原创 算法:仅用递归函数和栈操作逆序一个栈
题目一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1,将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构分析可以用两个递归函数int getAndRemoveLastElement(Stack stack)这个函数的作用是:获取并移出这个栈的栈底元素。这个函数实现分情况,当栈只有一个元素时,弹出的栈顶元素即为栈底元素,当多于一个元素时,先弹出栈顶元素,使得栈的size减少,然后对该栈取栈底元素(递归),
2020-09-27 13:56:27 247
原创 算法:设计一个有getMin功能的栈
题目实现一个特殊的栈,在实现栈的基本功能上,再实现返回栈中最小元素的操作。分析可以使用两个栈,一个占当普通的栈stackData进行操作,另一个栈stackMin用于保存最小值(这个栈的元素大小从栈底到栈顶依次减小,当最小的弹出后次小值就成了zui小值)。压入数据时数据压入stackData,然后stackMin判断是否为空或者数据小于等于stackMin栈顶元素,如果为真,则压入stackMin,否则不作任何操作。弹出数据时stackData正常弹出,然后看这个值是否等于stackMin栈顶
2020-09-27 12:57:23 171
原创 sql查询学生大于平均值的成绩
情景有一张表,里面是学生及其对应课程的成绩,要查出大于学生的所有课程平均值的课程。表的结构解决方法我想到两种sql,如下第一种查出每个学生对应的 平均值再与原表连接,然后查询条件就比较该课程成绩分数和平均值select t1.student_id,course_idfrom t_mark t1, ( SELECT student_id,AVG(mark) avg from t_mark group by student_id ) t2where t1.student_id
2020-09-24 19:20:09 24639 2
原创 算法题:连续子数组的最大和,分析过程(动态规划)
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)题目分析记下标0到i的子向量最大和为ans[i],subR
2020-09-13 17:44:49 259
原创 算法题:数组中出现超过一半的数字 题目分析
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。题目分析由于出现某个数字a,占数组超过了一半,若数字a与其他数字相互抵消,至少也能剩下1个数字a,所以可以采用这样的方法:先记住第一个数字,初始化一个count,后面遍历如果是相同的数字就使count增加(相同数字叠加),若不同则count减少(不同数字相互抵消),如果count变为0,
2020-09-13 17:21:17 374
原创 V-Viewer常见用法和隐藏img标签或img标签不直接在<viewer>下
v-viewer安装npm install v-viewer --save使用我是全局使用,在main.js下import 'viewerjs/dist/viewer.css'import Viewer from 'v-viewer';Vue.use(Viewer);常用用法<viewer :images="imgList"> <img v-for="src in imgList" src="src"/></viewer>不直接使用img作为
2020-09-02 14:58:18 2474
原创 ElasticSearch7 JavaAPI Java High Level REST Client 使用脚本script遇到的坑
版本ElasticSearch:7.9elasticsearch-rest-high-level-client:7.6问题最近写了个项目,需要用到搜索,就使用了ES,但是在使用script的时候遇到了几个坑,在这里记录一下,我的script是已经存在ES里面了的,通过id调用。过程1.使用了Script的getParams().put()方法设置参数结果:抛出了java.lang.UnsupportedOperationException异常,因为Script的getParams()方法得到的
2020-09-02 14:39:19 1620
原创 SpringMVC使用@ResponseBody注解转换json出现406的几种情况
今天在用SpringMVC测试返回json数据时出现了406错误,翻了网上的很多篇文章没有解决,先列举一下比较多数的情况:一、Jackson包没有正确导入。我的依赖是已经添加的<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>ja...
2020-03-14 16:10:39 351 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人