自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

原创 K8s(1.20.15版本)部署(3master+2node)

注意每个节点的IP和网卡(interface参数)主要在三台master加入下面的yaml。五台机器配置hosts。配置不一样,注意区分。

2023-04-30 12:39:46 1827

原创 Elasticsearch+filefeat+Kibana(EFK)架构学习

9.验证集群状态。

2023-04-11 18:01:39 553

原创 配置不同主机免密登录

将要通讯的主机ip加入host。在101主机生成秘钥对。

2023-04-07 09:52:14 236

原创 LVS+nginx+keepalived实现集群负载均衡

keepalived 是监控集群系统中的服务节点的工具,如果服务出现异常则剔除,若节点恢复则重新加入,还有VRRP协议的功能,实现虚拟录用协议,解决动态虚拟路由,可以和nginx配合使用,来实现nginx的HA.LVS是虚拟服务器,有三种模式,NAT模式,TUN模式和DR模式DR模式:通过直接路由实现虚拟服务器。DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。

2023-04-06 14:47:57 663

原创 Linux计划任务

*

2023-03-27 10:07:22 893

原创 Linux权限

假如有这样一种场景,有一个这样一个文件,权限是 “rwx-r----”,所属者是 user1,所属组组 gruop1。现在需要对另一个用户 user2 单独设置该文件的写(w) 权限,能够想到的方法是 把其他用户(other) 的权限赋予写权限,但是这样除了 user2 之外的其他用户都能对该文件进行写操作了,显然不合适;如果把 user2 加入到用户组 group1,并设置 group1 对该文件有写权限,同样也不合适,因为这样 group1 内的用户对该文件都有了写权限;

2023-03-24 11:27:00 333 1

原创 Linux的用户管理

早期的密码(加密过的)存放在 “/etc/passwd” 文件的第二列,但由于 “/etc/passwd” 文件权限是 “-rw-r–r–” 容易被窃取,后来把密码放到了 “/etc/shadow” 文件,且文件权限为 “----------”。密码到期前的警告天数(与第5列相比)。当用户的密码有效期限快要到的时候,系统会依据这个字段的设定,发出警告信息给这个用户,提醒他 “再过 n 天你的密码就要过期了,请尽快重新设定你的密码”,如上面的例子,则是密码到期之前的 7 天之内,系统会警告该用户。

2023-03-24 10:53:45 371

原创 动态规划经典例题详解

最长回文子序列给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。解题思路运用的是动态规划的思想,由于是求最长回文字符串。dp数组定义为:在子串s[i…j]中,最长回文子序列的长度为dp[i][j];子问题: 所以其子问题可以看作是求短一点长度,例如求dp[i][j],可 以由求其子问题dp[i+1][j-1]的结果算出。所以其子问题即是长度 减去左右两端的字符串的长度。递推公式: dp

2021-12-28 17:54:59 4217

原创 动态规划之背包和斐波那契

动态规划动态规划问题的一般形式就是求最值问题。求解动态规划的核心问题是穷举动态规划的穷举有点特别,因为这类问题存在“重叠子问题”,所以可以减少穷举的过程,可以使用备忘录或者dpTable的方法。通常解决动态规划问题要写出状态方程。public class Fib { public static void main(String[] args) { System.out.println(fib(5)); System.out.println(fibMemo

2021-12-04 11:18:47 250 1

原创 递归算法之全排列和汉诺塔和二分搜索

递归算法递归算法是自己调用自己函数的一种形式。递归算法通常包括两个方面:递归出口,一般是可以直接解决问题的地方递归递推式,方便后面自己调用自己。全排列从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。例如:1 、2 、3三个元素的全排列为:{1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}。思想方法:首先可以将数组的每一个数跟数组首位进行交换,然后

2021-12-03 19:04:28 513

原创 SpringSecurity的Oauth2的授权码模式配置

Oauth2流程用户进入网站的登录页面,点击微信的图标以微信账号登录系统,用户是自己在微信里信息的资源拥有者资源拥有者同意给客户端授权资源拥有者扫描二维码表示资源拥有者同意给客户端授权,微信会对资源拥有者的身份进行验证,验证通过后,微信会询问用户是否给授权网站访问自己的微信数据,用户点击“确认登录”表示同意授权,微信认证服务器会颁发一个授权码,并重定向到网站。. 客户端获取到授权码,请求认证服务器申请令牌此过程用户看不到,客户端应用程序请求认证服务器,请求携带授权码。认证服务器向客户端响应

2021-11-07 15:11:31 627

原创 Springboot+Jwt+vue的水果销售系统

功能例图E-R图界面代码分析1.项目是springboot+vue的项目,后端运用springboot框架,数据库框架用的是mybatis框架,管理工具用的maven。并运用jwt实现安全可靠的单点登录功能。前端运用vue2框架,用axios进行前后端网络交互请求数据。2.目录结构,分为controller层,config配置文件包,sevice层,enetiy实体类层,mapper层,utils工具类包。前端分为router路由配置模块,view主页面模块,components组件.

2021-11-05 00:13:36 1306 7

原创 SpringSecurity配置form表单登录

SpringSecurity依赖包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>几个重要的接口一. passwordEncoderencode 方法用来对明文密码进

2021-11-04 23:57:32 328

原创 java红黑树手写

特点节点颜色有红色和黑色根节点必为黑色所有叶子节点都是黑色不会有连续的红色节点代码package tree.rbt;/** * @ClassName RBTree * @Description 红黑树 * @Author guobenqi * @Date 2021/8/26 17:04 */public class RBTree <K extends Comparable<K>,V>{ private static final boolean

2021-08-26 19:52:11 130

原创 树的遍历和深度优先和广度优先的非递归算法(java)

1. 先序遍历思路:栈,根节点进栈,然后放右节点,再放左节点,完毕后,依次出栈代码 class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val

2021-08-25 16:34:27 194

原创 归并排序(数组和链表java)

归并排序利用分治和递归的思想,先分,后并java代码public class Tset { public static void main(String[] args) { int[] arr = new int[]{4,6,7,1,2,8,5}; mergeSort(arr); for (int i = 0; i < arr.length; i++) { System.out.println(arr[

2021-08-24 00:37:16 106

原创 链表和数组的快速排序

思路确定pivot指向最左边位置,确定两个指针,p,q都指向最左边的下一个位置q指针右移一位,如果判断arr[q]是否比pivot大,如果大,++,如果小,则交换p和q位置这样,一直到头,p和q之间就是比pivot大的元素,p左边就比pivot小,将pivot和p-1位置交换继续递归数组快排public class Tset { public static void main(String[] args) { int[] arr = new int[]{4,6,7,1

2021-08-23 21:38:31 107

原创 stream流+函数式接口+lambda表达式+Optional

函数式接口函数式接口只能有一个抽象方法,函数式接口可以有默认的方法default方法和static方法,但抽象方法只能有一个函数式接口可以用**@FunctionalInterface**注解进行标注可以重写Object内置的方法,比如equals,hashcode等等lambda表达式跟js的箭头函数很像。在函数式接口的简化过程中**(参数)->{…方法体}**匿名内部类的简写方式方法引入静态方法引入: 类名::方法名对象方法引入: 类名 :: 实例方法实例方法引入: n

2021-08-22 11:19:00 169

原创 设计模式之接口隔离

接口隔离接口隔离原则,英文缩写ISP,全称Interface Segregation Principle。原始定义:Clients should not be forced to depend upon interfaces that they don’t use,还有一种定义是The dependency of one class to another one should depend on the smallest possible interface。官方翻译:其一是不应该强行要求客户端依赖于

2021-08-20 18:29:45 85

原创 堆排序算法

堆排序package heapSort;import java.util.Arrays;/** * @ClassName HeapSort * @Description TODO * @Author guobenqi * @Date 2021/8/19 21:04 */public class HeapSort { public static void main(String[] args) { int[] a = {24, 10, 5, 1, 2, 24, 5

2021-08-19 23:53:10 65

原创 golang学习笔记(反射)

反射Go语言中的反射是由 reflect 包提供支持的,它定义了两个重要的类型 Type 和 Value 任意接口值在反射中都可以理解为由 reflect.Type 和 reflect.Value 两部分组成,并且 reflect 包提供了 reflect.TypeOf 和 reflect.ValueOf 两个函数来获取任意对象的 Value 和 Type。获取类型和namem := Monster{ Name:"玉兔精", Age:20, Sal: 888.9, Sex: "fema

2021-08-16 22:58:46 137

原创 golang学习笔记(error + 单元测试)

异常Go语言引入了一个关于错误处理的标准模式,即error接口,它是Go语言内建的接口类型示例一package mainimport ( "errors" "fmt")func Test(a,b int) (res int,err error) { err = nil if b == 0 { err = errors.New("b不能为零") //可以在这加一些处理方式 }else { res = a/b } return}func main() { //

2021-08-15 22:20:11 357

原创 golang基于控制台的增删改查系统

客户结构体package modelimport "fmt"//客户结构体type Customer struct { Id int Name string Gender string Age int Phone string Email string}//工厂模式创建func NewCustomer(id int,name string,gender string,age int,phone string,email string) Customer { return C

2021-08-15 18:17:20 103

原创 golang学习笔记(指针)

newnew(T) 为一个 T 类型新值分配空间并将此空间初始化为 T 的零值,返回的是新值的地址,也就是 T 类型的指针 *T,该指针指向 T 的新分配的零值.new要点内置函数 new 分配空间.传递给new 函数的是一个类型,不是一个值.返回值是 指向这个新分配的零值的指针.makemake(T, args) 返回的是初始化之后的 T 类型的值,这个新值并不是 T 类型的零值,也不是指针 *T,是经过初始化之后的 T 的引用.make 只能用于 slice,map,channel 三.

2021-08-15 00:12:03 155

原创 golang学习笔记(列表+ring+约瑟夫环)

列表listpackage mainimport ( "container/list" "fmt")func showList(list1 list.List) { for it := list1.Front();it != nil;it = it.Next(){ fmt.Print(it.Value,"\t") } fmt.Println()}func main() { myList := list.New()//列表可以装载不同类型 for i := 0;

2021-08-14 20:33:39 127

原创 golang学习笔记(结构体+json)

结构体结构体等价关系,只有==和!=关系,没有> < 关系,只有字段和属性完全相同,才等价,并且属于同一类型结构体,不同结构体不能比较,每一个不同的指针结构体的地址均不同type UserInfo struct { Name string Age int Height float32 EduSchool string Hobby []string MoreInfo map[string]interface{}}//工厂模式:生成对象func NewUserInfo(name

2021-08-14 11:13:11 545

原创 golang学习笔记(数组练习+排序算法)

数组逆置func main() { //数组逆置 names := [...]string{"我","是","好人"} for i := 0; i < len(names)/2; i++ { names[i], names[len(names)-i-1] = names[len(names)-i-1],name[i] } for i := 0; i < len(names); i++ { fmt.Println(names[i]) }}数组冒泡排序

2021-08-13 22:13:58 121

原创 go语言学习笔记(⑤,时间函数,字符串api,正则)

时间函数时间和日期相关函数,需要导入 time 包获取日期时间func main() { now := time.Now()//获取当前时间 fmt.Println(now)//2021-08-13 10:51:26.5364407 +0800 CST m=+0.003191501 fmt.Println(now.Year())//2021 fmt.Println(now.Month())//August fmt.Println(now.Date())//2021 August 13

2021-08-13 17:37:01 141

原创 go语言学习笔记(数组,切片,函数,闭包,递归,装饰器)

数组数组是具有相同类型的一组长度固定的数据项序列。数组是长度固定的数据类型数据元素的类型相同定义方式//数组的定义方式1var arrayVariables [10]intarrayVariables[0] = 100arrayVariables[3] = 200//arrayVariables[10] = 100fmt.Println(arrayVariables)//数组的定义方式2var arrayVariables2 [5]int = [5]int{1,2,3,4,5}

2021-08-12 23:09:15 203

原创 go语言学习笔记(三)

值类型boolint(32 or 64), int8, int16, int32, int64uint(32 or 64), uint8(byte), uint16, uint32,uint64float32, float64stringcomplex64, complex128array – 固定长度的数组引用类型slice(切片)mapchan字符串len()获取字符串长度声明var str stringstr = “hello world”str := “你好

2021-08-12 22:37:07 159

原创 golang学习笔记(二 变量)

变量声明变量的一般形式是使用 var 关键字:var name type其中,var 是声明变量的关键字,name 是变量名,type 是变量的类型var 的变量声明还有一种更为精简的写法,例如:hp := 100这是Go语言的推导声明写法,编译器会自动根据右值类型推断出左值的对应类型基本类型boolstringint,int8,int16,int32,int64float32,float64complex64,complex128当一个变量被声明之后,系统自动赋予它该类型的零值

2021-08-12 22:13:07 107 2

原创 go语言学习笔记(1)

GO是编译型语言优点语法简单并发内存分配垃圾回收静态链接标准库golang环境配置下载地址:https://golang.google.cn/dl/widows直接一路下一步编辑器goland(建议)vscodeliteIDE项目工程结构src :放置项目和库的源文件pkg :防止编译后的包和库文件bin : 编译后 的可执行文件命令源文件:如果一个 Go 源文件被声明属于 main 包,并且该文件中包含 main 函数,则它就是命令源码文件。命令源文件属于

2021-08-12 21:51:02 105

原创 useReducer用法

简介useReducer是React提供的一个高级Hook,它不像useEffect、useState、useRef等必须hook一样,没有它我们也可以正常完成需求的开发。简单来说 reducer是一个函数(state, action) => newState:接收当前应用的state和触发的动作action,计算并返回最新的state例子常规import {useCallback, useState} from "react";export const useUndo = <T&

2021-08-08 15:06:25 348

原创 计数二进制子串(力扣696题)

思路将所有的字符串连续的数字统计放入集合中集合中相邻的两个最小的即是所需要的子串个数,然后统计总数。class Solution { public int countBinarySubstrings(String s) { List<Integer> counts = new ArrayList<>(); int p = 0; int length = s.length(); while(p <

2021-07-29 17:01:31 67

原创 顺序合并两个链表

思路1:创建新链表,同时遍历两个链表,对两个遍历的节点进行对比,谁的值小,就把值小的节点加入到新链表中。然后让此链表结点后移。如果出现null则退出循环,直接将未遍历完的链表直接加入到新链表中。并返回新的头节点。代码 class ListNode { int val; ListNode next; ListNode(int x) { val = x; }} public class Solution { public ListNode mergeTw

2021-07-28 11:23:34 207

原创 Json_server的使用

mock在实际开发中前后端分离,需要前端自己使用模拟数据,json-server是一个良好的选择。json-server 是一个 Node 模块,运行 Express 服务器,你可以指定一个 json 文件作为 api 的数据源,简单来讲就是可以用来模拟接口数据。安装json-server执行npm install json-server -D 安装。使用方法在项目根目录下创建一个包,并在包内创建.json格式的文件,用来保存模拟数据启动服务控制台输入json-server json文件路

2021-07-18 15:20:56 122

原创 tcp由本地传图片到服务端

客户端编写public class TCPFileUploadClient { public static void main(String[] args) throws IOException { Socket socket = new Socket(InetAddress.getLocalHost(), 8888); //读取磁盘文件 OutputStream outputStream = socket.getOutputStream();

2021-05-03 10:36:56 115

原创 egg.js解决跨域问题

跨域出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port);报错信息:即是说不能发送跨域请求。由8000端口到7001端口。解

2021-04-09 17:40:56 541

原创 java双向链表的实现

双向链表的方法package LinkedList;import java.util.Iterator;public class DoubleLinkedListDemo {}class DoubleLinkedList<T>{ private class Node<T>{ public T item; public Node pre; public Node next; public No

2021-04-04 10:11:33 92

原创 java队列和链表基础功能实现

数据结构线性结构:数据元素一对一线性关系。常用的数组,队列,链表,栈。非线性结构:二维数组,多维数组,广义表,树,图。存储结构:1:链式存醋,2: 顺序存储。队列**特点:**先进先出。可以用数组和链表实现。...

2021-04-03 20:56:29 60

空空如也

空空如也

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

TA关注的人

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