自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于作者的一些信息

douyin LSY_HELLOWORLD,了解非科班的程序员的工作生活把。自学go语言,成功入职美团转java开发。csnd里的内容都是在求职时更新的。本科自动化,硕士 控制科学与工程。如果你想了解或有什么问题。

2023-07-02 16:06:05 91

原创 算法题的常见类型

douyin LSY_HELLOWORLD,已成功入职互联网大厂,请关注我,了解非科班的程序员的工作生活把

2021-07-16 16:08:10 109

原创 关于点云配准专栏的内容简介

专栏内容简介在学习的过程中,发现各个博客的帖子基本上重复的很多,10篇有9篇一毛一样,代码也一毛一样,错的地方,坑的地方都一毛一样,真的要气死个人。且代码质量参差不齐,基本上没有注释可言,很多功能都是多余的,对修改自己所需要的功能的参数造成了很大困扰。因此,将自己的学习经历进行总结,以便学习的人可以快速上手。只需一杯奶茶钱,即可看到所有内容讲解,代码注释,以及所需要的资源文件。不用再去百度,东奔西跑。排名不分先后,不一定按顺序发布1.点云的显示2.点云的精简3.点云的格式转换4.点云的旋转平移

2020-12-11 13:39:02 450 2

原创 C++搭配PCL库完成曲面重建

泊松重建

2022-07-27 23:06:47 615 1

原创 Java的Junit单元测试

定义一个测试类(测试用例)测试类名:被测试类Test包 名:同级目录.test定义测试方法方法名:test测试方法名无返回值,无参数用断言来判断给方法加@Test导入junit依赖环境@Before初始化资源@After关闭资源import cn.itcast.junit.Calculator;import org.junit.After;import org.junit.Assert;import org.junit.Before;import org..

2021-12-07 18:28:18 374

原创 给定一个字符串,找到长度为n的字典序最大的子串

func main() { n, k := 0, 0 str := "" fmt.Scan(&n, &k, &str) ans := "" count := 0 for len(str) > 0 { i, s := find(k-count, str) count++ ans += s str = str[i+1:] if count == k { break } } fmt.Println(ans)}func find(ind

2021-08-25 18:47:24 359

原创 给定一个字符串,找出包含n个不同字符的最短子串

解决思路为:左右指针实现滑动窗口窗口里为包含n个不同字符的子串遍历一次,记录最短的子串package mainimport ( "fmt" "math")func main() { str := "abbbccdd" n := 3 ans := "" l, r := 1, 1 dif := 1 //l到r中间 出现的不同字符的个数 minlen := math.MaxInt32 rlastchar := str[0] //记录上一个字符 判断当前的是不是换了不同的字

2021-08-25 17:02:25 521

原创 golang实现优先队列,解决编译依赖的问题

package mainimport ( "container/heap" "fmt")type IntHeap []intfunc (h IntHeap) Len() int { return len(h) }func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] } // 大顶堆,返回值决定是否交换元素func (h IntHeap) Swap(i, j int) { h[i], h[j

2021-08-18 12:09:19 130

原创 Kubernetes的网络通讯方式

记录于B站尚硅谷教程Kubernetes的网络模型假定了所有的Pod都是在一个可以直接连通的扁平的网络空间中。因此需要先自己实现这个网络模型假设,将不同节点上的Docker容器之间的互相访问先打通,然后再运行Kuberneters。三类同一个Pod内的多个容器之间:loopback不同Pod之间:Overlay NetworkPod与Service之间:各节点的Iptables规则CNI 简介不管是 docker 还是 kubernetes,在网络方面目前都没有一个完美的、终极的、普适

2021-07-18 21:36:46 137 1

原创 Kubernetes的Pod是什么,怎么控制

什么是PodPod是K8S所特有的一个东西,为什么要有Pod首先说一下容器每个容器都是独立存在的,通过namespace进行隔离,每个容器都有自己的IP地址、自己的挂载卷等。如果两个不同的容器相互通信就比较麻烦,通过Pod就会解决这个问题。每个Pod都必须有一个默认启动的pause容器,Pod里的其他容器共用pause的网络栈、挂载卷(可以localhost就可以访问)(个人理解,Pod相当于一个虚拟机,容器相当于里面的进程?)Pod的控制器RepilcationController、Repl

2021-07-17 23:01:47 183

原创 Kubernetes的架构组件说明

APIServer:所有服务访问的统一入口Controller Manager:维持副本期望的数目(副本数据应为大于1的奇数个,投票方便)Scheduler:负责介绍任务,选择合适的节点进行分配任务ETCD:键值对数据库,(高可用,天生支持集群)储存K8S集群所有重要信息(持久化)Kubelet:直接跟CRI,Continer容器引擎(docker等)、Runtime、Interface交互,实现容器的生命周期管理Kube proxy:负责写入规则至 IPTABLES、IPVS实现服务映射访问..

2021-07-17 21:48:25 87

原创 Golang实现并查集,解决分类分门派分省份等按关系分组的问题

解决问题举例1,有不同的金庸笔下的人物,给出不同人物和人物之间的关系如果他们间接都有联系,说明他们属于一本小说里,求这些人属于几本书2,力扣547题,如果不同城市可以间接连同,说明属于一个省份,求一共有几个省份3,忘了哪个公司的真题,吃鸡游戏跳伞的时候可以选择跟随,每个人都跟随一个人,也可以跟随自己,如果一些人都间接跟随,那么他们属于一个团队,求最终落下的会有几个团队。并查集的思想就是,求出来每个人的祖父,将其合并在一起,变成一个祖父;步骤如下:1 将每个人的祖父设为自己2 对于不同的两个人

2021-07-16 15:31:02 223

原创 Golang利用快排思想寻找第K大个数

快排的思想就是寻找一个base,一般令其等于数组第一个元素然后将小于等于base的数放base左边,大于的放右边分别对左边的和右边的数组进行快排递归最后的数组就是完成排序的寻找第K大个数,就是在完成快排的时候,判断当前base所在的位置和所需要的位置的情况,然后每次只快排一半就行啦。代码实现如下:package mainfunc main() { ans := []int{1332802, 1177178, 1514891, 871248, 753214, 123866, 1615

2021-07-16 13:28:24 403

原创 Golang实现层序遍历,并按层将数分组

题目来源牛客练习题层序遍历通过队列来实现,每次将当前节点的子节点添加到队列尾部,再从队列头部取出一个元素即可。此道题目要求按层分成不同的数组,因此多一个步骤,要记录该节点属于的层数。添加一个结构体即可,当队列为空或者当前节点和下一个节点的层数不一样,就将累加的数组添入答案即可。代码如下所示:type data struct { node *TreeNode floor int}func levelOrder(root *TreeNode) [][]int { // write c

2021-07-16 12:51:54 402

原创 golang实现KMP算法,解决长字符串寻找字串是否存在,出现次数等问题

S是子串,T是母串,核心问题就是寻找S在T中出现的情况。如果S长度为m,T长度为n,按照暴力解法,最坏的时间复杂度应该为O(n*m),太高啦。而KMP时间复杂度仅为O(n+m)。KMP算法的核心就是计算出一个next数组,用来存放子串的最长相同前缀后缀。最长前缀视为不包含最后一个字符的所有元素;最长后缀视为不包括第一个字符的所有元素。例如对于abcabcab对于ab 结果为0 没有相同的对于abc 结果为0 没有相同的对于abca 结果为1 前后缀相同为a对于abcab 结果为2 前后缀

2021-07-15 23:01:59 401

原创 golang实现全排列问题,利用回溯算法,以及小坑

针对解决的问题就是全排列例如给个123输出123 132 213 231 312 321利用回溯来解决问题将每一位填一下所有的数,对于下一位未填未填过的所有数。package mainimport "fmt"func main() { //实现全排列 input := []int{5, 4, 6, 2} n := len(input) output := [][]int{} var traceback func(count int, tmp []int, had map[int]

2021-07-14 16:19:59 580

原创 Golang实现字典树,寻找公共前缀的字符串

字典树可以用来解决搜索前缀问题例如给若干个不同长度的字符串找出有公共前缀的字符串有几个面试遇到的或者计算身份证号,同样前缀的身份证号有多少个之前牛客模考遇到的此算法在搜索引擎中非常使用,写了前几个字就会弹出来相关搜索。以及在存储大量有重复前缀的数据时可以节省大量空间。查找的时间复杂度就是O(字符串长度)本质上是个树,因此用链表链接。以下代码用字符串来表示,假设只有26个小写字母。package mainimport "fmt"//结构体根据需要自行设置type tree str

2021-07-13 23:21:01 513

原创 golang的map的里里外外

哈希表首先说说什么是哈希表。哈希表就是通过一个哈希函数,计算出变量的哈希值然后映射到一个桶bucket上。通常有两种方式:取模法:hash&m与运算:hash&(m-1)为了保证与运算的结果不会有空值,m取值应当为2的n次幂。哈希冲突当计算的哈希值映射到同一个桶上,就说发生了哈希冲突,解决办法如下:开放地址法:把第二个值放在冲突的桶下一个桶拉链法:在冲突桶后面链接一个新桶扩容用了/总数=装载因子 0.65超过装载因子,就需要扩容扩容的时候一次性分配足够多的新桶将

2021-07-12 21:05:22 201 2

原创 网际控制报文协议ICMP的左左右右

ICMPInternet Control Message Protocol,用来发送差错报告报文和询问报文。ICMP报文被封装在IP数据报中发送,不使用传输层的TCP/UDP。差错报告报文终点不可达:当路由器或者主机不能交付数据报时,就向源点发送终点不可达报文。距离分为目的网络不可达、目的主机不可达、目的端口不可达、目的协议不可达、目的网络未知等。源点抑制:当路由器或者主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,告诉源点网络拥塞,应该降低发送速率。时间超过:当路由器转发一个数据报时,

2021-07-04 18:44:13 133 2

原创 路由信息协议RIP协议

RIP路由信息协议RIP(Routing Information Protocol)要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录,称为距离向量D-V。RIP使用跳数作为度量来衡量到达目的网络的距离。路由器到直连网络的距离定义为1路由器到非直连网络的距离定义为经过的路由器数目+1允许一条路径最多包含15个路由器,距离等于16相当于不可达因此RIP只适用于小型互联网RIP认为好的路由就是距离短的路有,因此选择通过路由器数量最少的路由。有多条相等数量,就等价负载

2021-07-04 18:11:00 880

原创 Redis的前前后后左左右右

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。优点运行在内存上,读写性能好,10W/S支持数据持久化支持事务支持主从复制数据结构丰富缺点数据库容量受到物理内存的限制不具备自

2021-07-04 17:09:24 141

原创 goroutine的调度模型

goroutinuegoroutinue是Go为了实现高并发提供的用户态线程,是用户自己管理的,运行在内核线程之上。创建的大量的goruntinue会同时运行在一个或者多个内核线程上,因此需要一个调度器来维护管理这些goroutinue,确保所有的goroutinue都有相对公平的机会适用CPU。goroutinue和内核线程的映射关系为M:N,多个gorotinue可以在多个内核线程上运行。GMP模型调度模型由四部分组成,G、M、P、schedt。G代表goroutinue,每个goroutin

2021-07-04 15:16:00 348

原创 Mysql的相关面试内容

Mysql分为Server和Engine。Server里包含连接器、词法语法分析器、优化器、执行器和缓存等。Engine包括MyISAM InnoDB等插件式引擎。MyISAM基于ISAM引擎,支持全文检索、数据压缩、空间函数,不支持事务和行级锁,只有表级锁。数据和索引分开存储,数据和索引不在一个文件上;索引采用B+树;写的性能差,因为锁的粒度大,写入需要锁整张表。InnoDB支持事务,支持行级锁,支持外键,实现了四种隔离级别。InnoDB的主键索引称为聚簇索引,主键索引和数据一起放在叶

2021-07-03 23:30:41 83

原创 docker

Docker的三大核心概念:镜像、容器、仓库镜像:类似虚拟机的镜像、用俗话说就是安装文件。容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例,可以将其启动、开始、停止、删除、而这些容器都是相互隔离、互不可见的。仓库:类似代码仓库,是Docker集中存放镜像文件的场所。...

2021-07-03 20:44:28 66

原创 Linux下安装Redis步骤

linux下安装Redis详细过程记录1 第一步,进入usr/local下,下载压缩包wget http://download.redis.io/releases/redis-3.0.0.tar.gz2.解压tar -zxvf redis-3.0.0.tar.gz 3 进入解压文件cd /usr/local/redis-3.0.04 编译make PREFIX=/usr/local/redis install提示出错,应该是没有make工具,用来编译的把按照提示操作apt

2021-06-23 20:59:06 149 1

原创 详解DHCP协议的工作过程

DHCP是(Dynamic Host Configuration Protocol)动态主机配置协议,是应用层协议,基于UDP传输,负责给主机分配IP等信息。工作过程租用过程续约过程首先明确DHCP服务器采用67端口,客户端采用68端口,网络中有多个DHCP服务器。租用过程客户端C向网络发送DHCP DISCOVER报文,源MAC地址,事务ID,源端口68,目的端口67,源IP为0.0.0.0,目的IP为255.255.255.255进行广播。网络中的除DHCP服务器外,不会有监听端口6

2021-06-18 12:51:51 838

原创 TCP连接过程中的一些知识点

三次握手正常过程中问题,为什么是三次握手?而不是二次也不是四次?阻止重复历史连接同步双方的初始序列号避免资源浪费1.阻止重复历史连接如果只有二次握手,例如在客户端发出syn请求,服务器就返回ack建立连接的情况下,如果:发出了syn请求 seq=1,因为网络阻塞,重发的新的syn请求seq=2,然后旧的syn又先到了服务器,则服务器第二次握手给客户端ack 1+1,认为建立连接但是此时旧连接已经被客户端丢弃了,就会造成连接错误,而如果是三次握手,客户端收到ack 1+1后,发现这不

2021-06-16 16:15:29 231 2

原创 leetcode之炒股票系列大全

买卖股票的最佳时机func maxProfit(prices []int) int { buy, sell := math.MinInt64, 0 for i := range prices { buy = max(buy, -prices[i]) sell = max(sell, buy+prices[i]) } return sell}func max(x, y int) int { if x > y { return x } return y}买卖股.

2021-06-12 23:21:14 76

原创 http系列之http1.0,http1.1,http2,https之间的区别与优缺

Http基本概念在计算机世界里两点之间传输文字、图片、视音频等超文本数据的约定和规范。http状态码200 OK 成功如果是非HEAD请求,服务器返回的响应头会有body数据204 No Content 成功,响应头没有body数据206 Partial Content分块或断点续传,成功了一部分3xx 表示客户端请求的资源发生了变动,需要客户端用新的URL重新发送请求获得资源,也就是重定向301 Moved Permanently 表示永久重定向,该请求资源已经不在了,需要用新的URL3

2021-06-09 13:55:39 650

转载 Redis能否用作MQ消息队列?

从最简单的开始:List 队列首先,我们先从最简单的场景开始讲起。如果你的业务需求足够简单,想把 Redis 当作队列来使用,肯定最先想到的就是使用 List 这个数据类型。因为 List 底层的实现就是一个「链表」,在头部和尾部操作元素,时间复杂度都是 O(1),这意味着它非常符合消息队列的模型。如果把 List 当作队列,你可以这么来用。生产者使用 LPUSH 发布消息:127.0.0.1:6379> LPUSH queue msg1(integer) 1127.0.0.1:63

2021-06-05 16:54:03 719

原创 MQ消息队列的一些东西

什么是消息队列顾名思义,消息队列由消息和队列组成。生产者将消息生产出来存入队列,消费者从队列里取出消息消费掉。演化过程原始模型就是只有一个队列,如果由多个消费者,那他们就是竞争的关系,挨个去队列里取,谁取到了就是谁的,一条消息只能被其中一个消费者消费。如果需要将一份消息分发给多个消费者,并且每个消费者都收到全量的消息,原始模型就无法满足需求。一个可行的方案是:为每个消费者创建一个单独的队列,让生产者发送多份。这种做法比较笨,而且同一份数据会被复制多份,也很浪费空间。为了解决这个问题,就演化出了

2021-06-05 16:27:34 176

原创 Golang之力扣403青蛙过河

来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/frog-jump一只青蛙想要过河。 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有)。 青蛙可以跳上石子,但是不可以跳入水中。给你石子的位置列表 stones(用单元格序号 升序 表示), 请判定青蛙能否成功过河(即能否在最后一步跳至最后一块石子上)。开始时, 青蛙默认已站在第一块石子上,并可以假定它第一步只能跳跃一个单位(即只能从单元格 1 跳至单元格 2

2021-06-03 21:29:18 120

原创 Golang实现快速排序和归并排序以及堆排序算法全注释

快速排序算法快速排序算法步骤如下:首先从一个数组里找一个基准对数组进行遍历把比基准小的放基准左边,把比基准大的放基准右边以基准为分割点,分成两个数组重复1-4步骤直到数组长度为1返回func quickSort(data []int) {//如果数组长度为1,返回 if len(data) <= 1 { return } //设置基准为数组第一个元素 base := data[0] //两个指针分别指向待交换首尾位置 l, r := 0, len(data)-1

2021-06-03 20:33:11 251

原创 Redis和MySQL的双写一致性系列问题

1.什么是一致性顾名思义,就是数据的一致性,如果是在分布式系统中,那就是各节点中的数据保持一致。一致性分为强一致性弱一致性最终一致性强一致性:这种是符合用户直观感觉的,就是系统写入什么,读出来的就是什么。读写是实时的,用户体验行好,但是对系统的性能影响非常大。弱一致性:这种级别约束了系统再写入成功后,不承诺立即可以读到写入的值,也不承诺多久之后数据可以达到一致,但会尽可能的保证在某个时间级别后达到一致状态。最终一致性:这种级别约束了系统在一定时间内,数据可以达到一致性。是业界的大型分布式

2021-06-03 15:59:46 223 1

原创 验证二叉搜索树

给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。解法1func isValidBST(root *TreeNode) bool { pre:=math.MinInt64 var dfs func(nroot *TreeNode)bool dfs=func(nroot *TreeNode)bool{ if nr

2021-06-02 22:24:16 84

原创 力扣523连续得子数组和——前缀和,同余

题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/continuous-subarray-sum给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:子数组大小 至少为 2 ,且子数组元素总和为 k 的倍数。如果存在,返回 true ;否则,返回 false 。如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。示例 1:输入:nums

2021-06-02 13:24:54 111

原创 Golang区别于其他语言的特性

1高并发使用起来很方便,只需要go关键字即可开启一个goroutine,轻量级,效率高2 并发通信传统的并发模型大多是基于共享内存,go靠channel来进行通讯3 特色数据类型slice channel rune uintptrrune 可以存储中文字符 至多4个字节slice 很方便 可以实现栈 和 队列没有class可以用struct和interface和function构成面向对象的一些功能4 多个返回值5 defer6 reflect7 工程管理用目录和包名,自动推

2021-06-01 11:42:07 135

原创 Golang回文数变换代价

题目来源 360春招2021编程题所谓回文数就是一个数字,从左边读和从右边读的结果都是一样的,例如12321。现在有一个只包含1、2、3、4的数字,你可以通过在任意位置增加一位数字或者删除一位数字来将其变换成一个回文数。但是增加或删除不同数字所需要的代价是不一样的。已知增加和删除每个数字的代价如下:增加一个1,代价:100;删除一个1,代价:120。增加一个2,代价:200;删除一个2,代价:350。增加一个3,代价:360;删除一个3,代价:200。增加一个4,代价:220;删除一个4,代价

2021-05-24 14:48:24 761 3

原创 Golang实现宝藏最高价值问题(动态规划)

题目来源 360春招笔试题2021年X星人发现了一个藏宝图,在藏宝图中标注了N个宝库的位置。这N个宝库连成了一条直线,每个宝库都有若干枚金币。X星人决定乘坐热气球去收集金币,热气球每次最多只能飞行M千米(假设热气球在飞行过程中并不会发生故障)此外,由于设计上的缺陷,热气球最多只能启动K次。X星人带着热气球来到了第1个宝库(达到第1个宝库时热气球尚未启动),收集完第1个宝库的金币后将启动热气球前往下一个宝库。如果他决定收集某一个宝库的金币,必须停下热气球,收集完之后再重新启动热气球。当然,X星人每到一

2021-05-23 22:33:32 401

原创 Golang的类型断言详解

第二种第三种第四种

2021-05-20 16:04:40 162

空空如也

空空如也

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

TA关注的人

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