
学习
刘奉钦-以书会友
这个作者很懒,什么都没留下…
展开
-
Elasticsearch(ES) 基本知识
基础的ES基础知识学习笔记,集群相关的暂时没有了解。原创 2022-10-18 18:31:11 · 1540 阅读 · 0 评论 -
ES基本“命令”
ES 索引、文档的简单CURD原创 2022-10-18 11:31:12 · 848 阅读 · 0 评论 -
Linux小树
linux复习一下之前学的,小结一下最近新了解的几个命令构建知识体系ing原创 2021-08-22 23:36:40 · 182 阅读 · 0 评论 -
redis之奥妙
redis之奥妙久闻其名,终于一探究竟redis自带“缓存”,“快” 的标签,从而引发两个热点问题:为什么快?缓存会遇到的问题及解决方式?快的奥妙redis 每秒可读11w次,写8w次;数据库只能扛2k的并发量。。。单线程、基于内存、哈希存储 成就了redis的速度1.单线程避免了多线程之间频繁的上下文切换占用的时间,基于内存单线程就是优于多线程的。2.redis采用了采用了非阻塞I/O多路复用机制,redis的服务端通过多路复用程序将客户端的socket添加到队列中,并进行处理3.r原创 2021-08-16 00:09:25 · 338 阅读 · 0 评论 -
剑指offer JZ31 整数中1出现的次数
整数中1出现的次数输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数例如,1~13中包含1的数字有1、10、11、12、13因此共出现6次思路一遍历public int NumberOf1Between1AndN_Solution(int n) { //遍历,除以10取余,判断计数 int count = 0; for(int i=1;i<=n;i++){ int t = i; wh原创 2021-04-29 09:44:08 · 147 阅读 · 0 评论 -
剑指offer JZ30 连续子数组的最大和
连续子数组的最大和输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).输入[1,-2,3,10,-4,7,2,-5]输出18 (3,10,-4,7,2 )public int FindGreatestSumOfSubArray(int[] array) { if (array.length==0 || array==null) { return 0;原创 2021-04-28 22:09:58 · 134 阅读 · 0 评论 -
gradle版本与插件不匹配
gradle插件不匹配ERROR: Minimum supported Gradle version is 5.1.1. Current version is …原因是第一个文件的插件版本和第二个文件里面的gradle版本匹配其对应关系如下看着修改就好了使用本地gradle原创 2021-04-28 15:44:50 · 537 阅读 · 0 评论 -
解决gradle依赖库导致build慢的问题
解决gradle依赖库导致build慢的问题buildscript { repositories {// google()// jcenter() maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' } maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter原创 2021-04-28 14:54:50 · 188 阅读 · 0 评论 -
剑指offer JZ29 最小的K个数
最小的K个数给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组简单思路先排序、再取最小的k个数public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> list = new ArrayList<Integer原创 2021-04-27 20:33:06 · 128 阅读 · 0 评论 -
剑指offer JZ28 数组中出现次数超过一半的数字
数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。public int MoreThanHalfNum_Solution(int [] array) { if(array == null || array.length == 0)return 0; int preValue = arra原创 2021-04-25 22:37:05 · 126 阅读 · 0 评论 -
剑指offer JZ27字符串的排序
字符串的排序输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。char[] carr ; int k=0; public ArrayList<String> Permutation(String str) { ArrayList<String> list = new ArrayList<String>();原创 2021-04-23 23:17:21 · 122 阅读 · 0 评论 -
剑指offer JZ26 二叉搜索树与双向链表
二叉搜索树与双向链表输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。这个题要奖励一朵小红花,一次提交就通过!public TreeNode Convert(TreeNode pRootOfTree) { if(pRootOfTree == null) return null; TreeNode temp; //递归把左子树转换为双向链表,返回根节点,通过根节点找出最大的节点,让节点的右指针指向当前节点,当前节点的左指针指向该节点原创 2021-04-21 23:00:31 · 167 阅读 · 0 评论 -
剑指offer JZ25 复杂的链表
复杂的链表输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)我的思考:什么是深拷贝?浅拷贝:拷贝对象的地址,修改后会影响原对象的属性;深拷贝则不影响原属性值对于这个题目,意思就是不能通过改变指针来实现,需要创建节点遍历链表,获取节点值创建新节点随机指针怎么处理?代码及思路public RandomListNo原创 2021-04-20 23:57:29 · 141 阅读 · 0 评论 -
剑指offer JZ24 二叉树中和为某一值的路径
二叉树中和为某一值的路径输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。案例输入:{10,5,12,4,7},22输出:[[10,5,7],[10,12]]代码//思路:深度优先遍历,如果累加值大于目标值则切换,如果到了路径末尾仍达不到 则切换路径//怎么添加到队列?ArrayList<ArrayList<Integer>> res = new ArrayLis原创 2021-04-16 22:28:48 · 204 阅读 · 0 评论 -
剑指offer JZ23 二叉搜索树的后序遍历序列
二叉搜索树的后序遍历序列输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜素树)思路突破点序列满足前一部分均小于最后一个值,后一部分均大于最后一个值,可以用两个while循环进行遍历如果遍历结束时到了最后一个位置则说明满足,最后一个位置前移,递归判断public boolean VerifySquenceOfBST(int [] sequence) { /原创 2021-04-14 21:40:31 · 217 阅读 · 0 评论 -
剑指 offer JZ22 从上往下打印二叉树
从上往下打印二叉树从上往下打印出二叉树的每个节点,同层节点从左至右打印。代码public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list = new ArrayList<Integer>(); ArrayList<TreeNode> treelist = new ArrayList<TreeNode>();原创 2021-04-14 20:44:37 · 150 阅读 · 0 评论 -
剑指offer JZ20 包含min函数的栈
包含min函数的栈定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。代码public class Solution { Stack<Integer> stack = new Stack<Integer>();//栈需要泛型,不能是int Stack<Integer> minstack = new Stack<Integer>(); public void push(i原创 2021-04-14 20:15:21 · 112 阅读 · 0 评论 -
剑指offer JZ21 栈的压入弹出序列
栈的压入弹出序列输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路序列A欲加入的元素如果与序列B第一个相等,那么就后移指针,在栈的为空的情况下继续判断是否相等否则入栈public boolean IsPopOrder(int [] pushA,i原创 2021-04-14 14:05:22 · 155 阅读 · 0 评论 -
剑指offer JZ19 顺时针打印数组
顺时针打印数组输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList<Integer> list = new Array原创 2021-04-13 22:47:23 · 133 阅读 · 0 评论 -
剑指offer JZ18二叉树的镜像
二叉树的镜像操作给定的二叉树,将其变换为源二叉树的镜像。源二叉树8/ 6 10/ \ / 5 7 9 11镜像二叉树8/ 10 6/ \ / 11 9 7 5思路一(未通过)public TreeNode Mirror (TreeNode pRoot) { // write code here //思路,递归返回值左右调换 // 考虑处理左右子树为空和其中一个为空的情况 Tr原创 2021-04-11 21:50:57 · 199 阅读 · 0 评论 -
剑指offer JZ17 树的子结构
树的子结构输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)输入{8,8,#,9,#,2,#,5},{8,9,#,2}输出true思路突破点递归判断是否完全相同(根节点值相等、左子树、右子树分别相同),B是否为A的左子树,B是否为A的右子树...原创 2021-04-09 23:24:18 · 256 阅读 · 0 评论 -
剑指offer JZ15 反转链表
反转链表输入一个链表,反转链表后,输出新链表的表头。思路递归public ListNode ReverseList(ListNode head) { //递归返回的是当前节点,最终结果需要头结点,如果处理? //在递归函数外面定义 不好处理 //每次都返回头结点,处理当前节点的链接即可 if(head == null||head.next == null) return head; ListNode no原创 2021-04-06 17:33:09 · 122 阅读 · 0 评论 -
剑指offer JZ16 合并两个排序的链表
合并两个排序的链表输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路递归public ListNode Merge(ListNode list1,ListNode list2) { if(list1 == null) return list2; if(list2 == null) return list1; if(list1.val<=list2.val){ list1.nex原创 2021-04-06 17:11:10 · 110 阅读 · 0 评论 -
剑指offer JZ14 链表中第k个结点
链表中第k个结点输入一个链表,输出该链表中倒数第k个结点。如果该链表长度小于k,请返回空。思路让第一个指针先走到k的位置,再两两个指针一起走,当第一个指针到达最后一个位置的时候,第二个指针就是倒数第k个public ListNode FindKthToTail (ListNode pHead, int k) { if(pHead==null||k==0) return null; // write code here原创 2021-04-05 21:06:43 · 109 阅读 · 0 评论 -
剑指offer JZ13 调整数组顺序使奇数位于偶数前
调整数组顺序使奇数位于偶数前输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路方法一:创建一个新数组,遍历两次,第一次把奇数添加进去,第二次把偶数添加进去public int[] reOrderArray (int[] array) { // write code here int arr[] = new int[array.length];原创 2021-04-04 22:14:03 · 148 阅读 · 0 评论 -
剑指offer JZ12 数值的整数次方
数值的整数次方给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0思路方法一: 正数直接累乘exp次就好了,负数取倒数累乘-exp次public double Power(double base, int exp) { if(exp == 0) return 1.0; if(exp<0){ base = 1/base; exp = -exp;原创 2021-04-02 16:01:11 · 131 阅读 · 0 评论 -
剑指offer JZ47 求1+2+3+...+n
求1+2+3+…+n求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。狗血,太狗血了!思路分析不能用for、while ,我居然没想到递归,确实,用递归写这种简单求和确实没写过。递归大方向是没错的,但是要求不能使用if、else、switch、case、A?B:C。if(n == 1 ) return 1; 这条语句就要想办法替换掉了解题n >1 && (n += Sum_Solu原创 2021-04-02 09:43:51 · 138 阅读 · 0 评论 -
剑指offer JZ11二进制中1的个数
二进制中1的个数输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。思路一通过除2取余,将余数存到数组中,分别对正负数进行处理。比较繁琐,容易出错,遗漏特殊情况思路二把十进制看成二进制,通过位与和移位,判断每一位是否为1怎么取移位的结果?方式一:n&1 这样就能取出最后一位,再循环右移n>>=1 (只能用于正数),这里用n>>>1即可解决方式二:(n-1)&n 这个操作可以将n二进制数最右边的一个1转为0,循环操作知道为0。原创 2021-04-02 09:07:15 · 128 阅读 · 0 评论 -
剑指offer JZ10 矩形覆盖
矩形覆盖我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法?比如n=3时,23的矩形块有3种覆盖方法:思路覆盖第n个矩形,可以拆解为n-1个有多少种方法 + n-2 有多少种方法求n-2个矩形有多少种方法 这个比较难想到,想上图的下面那一步代码public class Solution { public int rectCover(int target) { /* 2*1 1种, 2*2 2种,原创 2021-03-31 23:58:03 · 164 阅读 · 0 评论 -
剑指offer JZ9 变态跳台阶
变态跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。输入3输出4思路求前n级台阶的和,如果n等于4,那就分别求出从3、2、1、0跳上去的方案之和public class Solution { public int jumpFloorII(int target) { if(target == 1) return 1; if(target == 2) return 2;原创 2021-03-29 10:53:22 · 125 阅读 · 0 评论 -
剑指offer JZ8跳台阶
跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题意理解如果n = 2,那有两种方案n = 3,有3种方案n = 4,当然可以去列举所有的方案,但是,第4个台阶可以从第3个或者第2个一步跳上去,我们只需要知道第2、3台阶分别有多少种方案就可以了解题public class Solution { public int JumpFloor(int target) { if(target原创 2021-03-29 09:57:30 · 152 阅读 · 0 评论 -
剑指offer JZ6 旋转数组的最小数字
旋转数组的最小数字public class Solution { public int minNumberInRotateArray(int [] array) { //从旋转数组中找出最小值,跟一般的数组不同,该数组是两段有序的序列 //可以通过中间值与端点值的比较来确定被查找值的范围 //取中间值,与左端点值比较,如果大于,说明最小值在右边;如果小于说明在左边或者就是当前值 //接着再取中间值和左端点值比较,确定原创 2021-03-28 23:40:40 · 151 阅读 · 0 评论 -
剑指offer JZ5 两个栈实现队列
两个栈实现队列简单思路入队压栈就行,出队弹栈并压栈至另一个栈,直到为空,出队一个元素之后再压栈回去public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.add原创 2021-03-27 22:48:28 · 120 阅读 · 0 评论 -
剑指offer JZ4重建二叉树
重建二叉树题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。输入[1,2,3,4,5,6,7],[3,2,4,1,6,5,7]返回值{1,2,5,3,4,6,7}思路根据前序数组第一个值,寻找根节点的位置。根据根节点的位置将前序和中序序列拆分成 左右子树的前、中序列利用递归,通过左子树的前、中序列原创 2021-03-26 00:02:18 · 121 阅读 · 0 评论 -
剑指offer JZ3 从尾到头打印链表
从尾到头打印链表输入一个链表,按链表从尾到头的顺序返回一个ArrayList。思路1、直接递归,如果下一个结点为空就添加当前节点元素,如果不为空就递归,回调之后添加当前元素2、遍历链表,将链表值添加到一个队列中利用集合的reverse()将队列反转(原理是首尾元素交换)从后往前遍历队列并添加到新队列中代码方法一:递归 if(listNode.next == null) //为空表示当前是最后一个元素,见结点值加入队列 list.add(listNode.val); else{ l原创 2021-03-24 23:35:59 · 162 阅读 · 0 评论 -
剑指offer JZ2 替换空格
替换空格请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。方法一:String类replaceAll()方法public String replaceSpace1 (String s) { return s.replaceAll(" ","%20"); //调用方法直接替换所有空格}方法二StringBuilder类append()方法public String replaceS原创 2021-03-22 09:14:49 · 124 阅读 · 0 评论 -
UDP视频聊天室(一)
UDP视频聊天室一、简介通过UDP传输实现文本聊天、视频通讯实现这个功能需要三个类,一个负责绘制界面和图片、显示消息,一个负责将文本、图片转换为数据包并通过UDP发送,一个负责接收数据并还原成文本和图片二、核心问题1、利用Opencv打开摄像头获取图片2、文本、图片转化为字节数组,利用字节数组的第一个位置进行图片和文本的标记3、将字节数组打包成数据包,设置好目标IP及端口,并通过DatagramSocket发送4、启用线程接收数据包,根据标志转换为文本或图片并显示调用摄像头导包:这是Ja原创 2021-01-24 21:44:36 · 978 阅读 · 1 评论 -
js网页注册信息实时校验
js正则校验密码正则基本知识:https://editor.youkuaiyun.com/md/?articleId=112318392<!DOCTYPE html><html><head> <title>测试</title> <link rel="stylesheet" type="text/css" href="css/test.css"></head><body>用户名:<input type=原创 2021-01-09 22:11:32 · 253 阅读 · 0 评论 -
基本正则表达式及实例笔记
基本正则表达式之前简单学过一点点,由于比较久没用,又忘记了,这次记录下来便于以后再复习正则表达式 在线测试网站https://regex101.com/1、单个匹配? ———— 字符出现0或1次(可有可无)* ———— 字符出现0或多次+ ———— 字符出现1或多次(至少一次){6} ———— 字符出现6次{2,6} ————字符出现2-6次{2,} ————字符出现至少两次2、整体匹配(ab)+ ————ab出现至少1次3、其它殊符号| ———— 或这里如原创 2021-01-07 17:01:15 · 246 阅读 · 0 评论 -
Maven环境搭建和配置 及 myeclipse10新建Web Project 添加Maven支持报错解决方法
解决maven工程报错错误背景:用myeclipse10 新建Web Project 勾选add maven support,创建工程后,pom.xml报错如下Could not calculate build plan: Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.7.1 from http://repo1.maven.org/maven2 was cached in the local reposi原创 2021-01-05 09:21:26 · 492 阅读 · 0 评论