笔记
鹿灏楷silves
不要人夸颜色好,只留清气满乾坤
展开
-
设计模式——建造者设计模式
有时会出现一个类,构造函数需要大量的参数,但是有些参数是不经常用到的,这会很麻烦。我们可以使用建造者模式,像流水线,将所需要的对象组装并且返回。原创 2022-07-16 21:57:10 · 2033 阅读 · 1 评论 -
设计模式——抽象工厂
先用一个需求引入工厂模式这里我们的需求就是,按照不同的种类,生成不同种类的对象,当然,我们可以设计九个类,对应不同种类的对象,但是如果每次添加新的产品,我们可能就要修改核心代码,这样会引出一个解决方法——抽象工厂对于生成这类的对象,他们有共同点还有不同点,不同种类的风格,但是可以生成同一类产品,那么我们可以先声明不同物品要实现的接口,然后每个工厂生产这个对象都要实现这个接口。我们使用go来实现。总结:......原创 2022-07-10 15:35:27 · 2007 阅读 · 0 评论 -
rabbitmq——交换机fanout和direct
交换机:生产者将消息发送到交换机上,根据交换机不同的种类,将消息体按照不同的规则转发给不同的消费者。fanout此模式是将生产者生产的消息,通过交换机绑定的所有队列,发送到所有绑定到此交换机上的队列。product.go...原创 2022-03-04 20:17:35 · 3801 阅读 · 1 评论 -
docker常用命令
docker search#搜索镜像docker search tomcat#搜索官方镜像docker search tomcat --filter "is-official=true"#搜索star大于5的镜像docker search tomcat --filter-stars=5#搜索镜像,返回5条数据docker search tomcat --limit=5docker ps#显示正在运行的容器docker ps#显示创建过的容器docker ps -a#显原创 2022-02-22 17:28:02 · 2350 阅读 · 0 评论 -
MYSQL常见问题
MYSQL主从复制原理主:将修改数据的sql语句放进binlog中。从:开启从模式之后,负责从master节点中拉取binlog。从数据库拿到binlog后,执行sql语句。MYSQL中Myisam和Innodb有什么区别Innodb支持事务,Myisam不支持事务。Innodb支持行级锁,Myisam支持表级锁Innodb支持外键,Myisam不支持外键Innodb引擎四大特性插入缓冲二次写自适应哈希索引预读哪一种驱动count(*)更快Myisam更快,会维护一原创 2022-01-28 17:53:16 · 3707 阅读 · 0 评论 -
Golang之gc
常见的GC算法引用计数法根据对象自身引用计数来判断是否被回收,当自身引用数为0时,对象会被回收优点:简单直接,回收速度快缺点:每个对象都要维护一个自身的引用数,需要额外的开销。...原创 2022-01-22 15:18:26 · 2226 阅读 · 0 评论 -
golang之gmp调度模型
原始调度模型我们把线程分为内核级线程和用户态线程,内核级的线程在切换线程时,开销比较大,需要系统调用,但是,用户态线程不是这样,用户态的线程之间的切换不需要系统调用,从而把切换的开销比较小。golang开始并没有使用gmp调度模型,只有gm。也就是说没有局部队列,每一个m执行完一个g之后,从全局队列中拿到一个g运行,这样的结果就是每一个m从全局队列中拿取g时,都要对全局队列加锁。这也是导致原始调度模型效率低的一个原因。GMP调度模型G:goroutine ,协程,用户态线程M:thread,对应原创 2022-01-19 13:21:53 · 3433 阅读 · 0 评论 -
Mysql常问问题
数据库的三大范式第一范式:每个列都不可以再拆分第二范式:在第一范式基础上,非主键列完全依赖于主键,而不是部分依赖第三范式:在第二范式的基础上,非主键列只依赖于主键。Mysql的binlog有几种格式,有什么区别statement:每一条会修改数据的sql,都会记录在binlog中,不需要记录每一行的变化。row:不记录sql语句的上下文关系,仅保存哪一条数据被修改。mixed:折中方案Mysql存储引擎与InnoDb的区别锁的粒度方面:由于锁的粒度不同,InnoDb比MyIsa.原创 2021-12-10 20:33:49 · 2719 阅读 · 0 评论 -
GO大厂面试题(1)
今天看了一部分大厂面试题关于golang的,有一些没听过的,一些不熟悉的。记录一下。什么是 Goroutine?你如何停止它?一个 Goroutine 是一个函数或方法执行同时旁边其他任何够程采用了特殊的Goroutine 线程。Goroutine 线程比标准线程更轻量级。可以使用channel停止。两个接口之间可以存在什么关系?等价关系和子集关系。Go 语言当中 Channel(通道)有什么特点,需要注意什么?如果给一个 nil 的 channel 发送数据,会造成永远阻塞。如果从一个原创 2021-11-21 17:10:31 · 2434 阅读 · 0 评论 -
GO标准库math/rand包
source接口int63(),生成一个int64的数seed(),初始化一个生成器。rand.NewSource(int64)//传入一个int64的数,作为种子Rand结构体rand.New(Source)//传入实现source接口的结构体r := rand.New()r.Int()r.Int31()r.Int63()//int系列返回对应的类型的数字r.Uint32()//返回uint32类型的随机数r.Intn(n int)r.Int31n(n int32)原创 2021-11-20 16:05:01 · 2479 阅读 · 0 评论 -
贪心算法——跳跃游戏ii
跳跃游戏 II给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。示例 1:输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。题目来源:力扣网址:https://leetcode-cn.com/pro.原创 2021-11-16 19:21:53 · 4107 阅读 · 0 评论 -
动态规划——不同路径ii
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/unique-paths-ii思路这道题有一道题目大意相同,但是比这道题简单一些的题。可以先做会不同路径,再来做不同路径ii。我们会想到动态规原创 2021-11-13 19:25:51 · 1942 阅读 · 0 评论 -
动态规划+递归——礼物的最大价值
在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof得到礼物最大的价值,从左上角到右下角,从题意上来说,从左上角出发,每次可以向下走,可以向右走,目标是右下原创 2021-11-11 16:01:24 · 1992 阅读 · 0 评论 -
Go——cap
先分析这段代码:package mainimport "fmt"func main() { var SliceNumber []int = []int{1, 2, 3, 4, 5, 6, 7, 8} var SliceNumbert []int = make([]int, 0) var SliceNumberf []int = make([]int, 0) SliceNumbert = SliceNumber[:5] SliceNumberf = SliceNumber[2:] fmt原创 2021-11-01 20:23:50 · 587 阅读 · 0 评论 -
基于kubernetes搭建个人服务
使用kubenetes部署写的程序,先使用docker,打包个人镜像,再进行部署。大致步骤程序写dockerfile打包镜像,并上传至远程仓库部署程序这次的程序,使用二进制程序,并不使用源码封装到镜像中再运行,二进制程序好处有,启动速度快,不许要环境,如果不需要环境,则写dockerfile就会少很多内容。我部署的程序是我的私有云上的镜像,读者可以换成你的公开镜像,我部署的二进制程序,有关个人信息,所以放在私有云上,在镜像方面,读者需要换成公开镜像。准备好二进制程序其中p_main原创 2021-10-30 15:19:14 · 446 阅读 · 0 评论 -
版本控制器——git常用控制命令
git的结构图片转自https://blog.csdn.net/u011535541/article/details/83379151我们一般写代码在工作区,提交时,我们将工作区的代码先提交到暂存区,通过commit提交到本地仓库。常用版本控制命令#将目录下代码提交到暂存区git add ./#将暂存区的代码提交到本地仓库git commit -m "说明"#创建其它分支git branch dev#切换分支git checkout dev#回滚git checkout HEAD原创 2021-10-30 10:21:36 · 410 阅读 · 0 评论 -
Kubernetes——pod与集群节点的自动伸缩和高级调度
pod的横向伸缩原创 2021-10-28 17:11:12 · 491 阅读 · 0 评论 -
kubernetes——计算资源管理
在pod中申请资源apiVersion: v1kind: Pod## 标题metadata: name: kubia-ce namespace: test labels: name: kubia-cespec: containers: - name: kubia-ce image: luksa/kubia resources: requests: cpu: 100m memory: 10Mi limi原创 2021-10-27 14:14:20 · 475 阅读 · 0 评论 -
kubernetes——了解kubernetes机理
架构控制平面组件etcd分布式持久化存储API服务器调度器控制管理器工作节点上运行的组件KubletKublet服务代理(kube-proxy)容器组件间如何通信Kubernetes系统组件只能通过API服务器通信,它们之间不会直接通信。单组件运行多实例为了保证高可用性,控制平面的美国和组件可以有多个实例。etcd和API服务器的多个实例可以并行工作,但是调度器和控制管理器在给定时间内只能有一个实例起作用API服务器API服务器先提供了一种一致的方式将对象存储到etcd原创 2021-10-26 20:10:12 · 347 阅读 · 0 评论 -
kubernetes——部署有状态的多副本应用
有状态应用要求管理者配置文件中列出所有其它的集群成员和他们的ip地址。StatefulSet有状态的应用中每一个实例都是不可替代的个体,都拥有稳定的名字和状态如果使用StatefulSet,当有一个pod挂掉后,这个实例需要在别的节点上重建,但是新的实例必须与被替换的实例拥有相同的名称、网络标识和状态。因为有状态的服务会根据先前的访问做一些不同的处理,所以,我们要将所有的有状态的pod做headless service。当调用时,会返回每个pod的ip。创建StatefulSet控制器管理的pod原创 2021-10-26 18:50:43 · 872 阅读 · 0 评论 -
kubernetes——Deployment资源
当创建一个Deployment时,也会ReplicaSet也会创建,pod是由Deployment和ReplicaSet共同管理的。创建DeploymentapiVersion: apps/v1kind: Deploymentmetadata: name: test-deployspec: selector: matchLabels: app: test-deploy template: metadata: labels: app原创 2021-10-25 16:47:49 · 373 阅读 · 0 评论 -
kubernetes——从应用中访问元数据
容器中可以通过环境变量或者挂载的方式,获取pod的一些数据通过环境变量访问元数据apiVersion: v1kind: Podmetadata: name: test labels: name: testspec: containers: - name: test image: luksa/kubia resources: limits: memory: "128Mi" cpu: "500m" ports:原创 2021-10-25 13:36:46 · 399 阅读 · 0 评论 -
kubernetes——ConfigMap配置应用程序
ENTRYPOINT与CMD我们使用entrypoint指定的是可执行文件,cmd指定的是可执行文件所需要的参数通过使用yaml文件指定执行的命令和参数apiVersion: v1kind: Podmetadata: name: kubia-ce labels: name: kubia-cespec: containers: - name: kubia-ce image: luksa/kubia resources: limits:原创 2021-10-23 14:49:25 · 459 阅读 · 0 评论 -
kubernetes——发现pod并与之通信
介绍服务kubernetes中服务是一种为一组相同功能的pod提供一个单一不变的接入点的资源。可以将一组提供相同服务的pod给定一个不变的接入资源。创建服务服务的后端可以不止有一个pod,服务连接所有的后端指定的pod,服务对后端的pod是负载均衡的。服务是如何区分哪些pod属于服务,哪些pod不属于服务?服务根据标签来选择pod。也就是说,控制器根据标签控制pod,服务根据标签判断是否属于本服务。通过yaml文件创建服务apiVersion: v1kind: Servicemetada原创 2021-10-21 18:27:27 · 515 阅读 · 0 评论 -
在kubernetes中运行的容器
Pod首先了解到容器之间彼此是完全隔离的,但是我们期待是隔离的容器组,而不是单个容器,每个容器组内共享一些资源,而不是全部。kubernetes通过配置Docker让一个pod内的所有容器共享相同的linux命名空间。pod内运行的容器位于相同的Network命名空间中,因此它们共享相同的IP地址和端口空间,也就是说,在同一个pod内的两个容器的服务不能占用同一个端口。每个pod可以通过其它pod的IP地址来实现互相访问。创建Pod#版本apiVersion: v1#资源类型kind: Pod原创 2021-10-19 17:11:21 · 512 阅读 · 0 评论 -
minikube入门+踩坑日记
环境搭建minikubekubectldocker下载并配置好环境变量运行minikube从这里就开始踩坑首先这条命令是对的,但是国内的电脑一般访问不到minikube的镜像源,或者访问到也是很慢,所以我们要添加代理或者配置其它镜像源。有两种方法使用镜像源第一种(我没有试过)minikube start#替换成minikube start --registry-mirror=https://registry.docker-cn.com#注意:这里使用的是官方的代理镜像源,可以访原创 2021-10-18 18:59:05 · 2705 阅读 · 0 评论 -
现代操作系统——进程和线程
定义计算机上所有可运行的软件,通常也包括操作系统,被组织成若干顺序进程,简称进程。cpu在进程原创 2021-10-01 17:59:31 · 316 阅读 · 0 评论 -
计算机网络——web页面请求历程
我们假设主机第一次连接到此网络,并且路由器作为DHCP服务器准备:DHCP、UDP、IP和以太网当一台机器连接到一个网络时,主机会将自身的MAC地址等其他自身信息,通过网络进行传播,目的地址使用的是广播ip地址,目的mac地址也是广播地址。路由器接收到DHCP请求之后,DHCP服务器生成包含ip分配的ip地址以及dns服务器的ip地址默认王网关路由器的ip地址和子网块的一个报文,进行回传,注意,回传时,目的mac地址为请求的源mac地址,并不是广播地址。主机接收到DHCP的响应之后,会发送一个广播数原创 2021-09-10 15:54:16 · 625 阅读 · 0 评论 -
计算机网络——地址解析协议ARP
在链路层中,是使用的MAC地址作为转发的依据,也就是说根据MAC地址转发帧,但是上层网络层传递的是ip地址,现在出现一个问题,如何将网络层的ip地址转化为链路层的MAC地址——ARP协议。发送数据到子网内在每台计算机或路由器中有一个ARP表,也就是ip地址和MAC地址的一个映射表(当然还有其他的字段比如ttl)。当网络层ip数据报传递到链路层时,会将目的ip地址按照ARP表,做映射,根据表映射到MAC地址,得到目的的MAC地址,进行转发。如果表中没有找到目的ip地址,没有映射到,该怎么办?如果在A原创 2021-09-06 22:02:01 · 458 阅读 · 0 评论 -
GO消息队列——rabbitmq
Rabbitmq应用场景流量削峰,当大流量访问时,可以将服务进行排队,对大流量削峰异步,可以将用户的操作排入队列,先行返回原创 2021-09-01 09:59:33 · 881 阅读 · 0 评论 -
计算机网络——TCP的拥塞控制
先介绍两个名词:cwnd:拥塞窗口ssthresh:慢启动阈值。(当cwnd到达拥塞窗口时,如果不出现超时或者冗余ACK时,将以线性增长速度增长)TCP拥塞控制分为三个部分:慢启动拥塞避免快速恢复慢启动在慢启动状态cwnd的值,以1个MSS开始并且每当传输的报文首次被确认就增加1一个MSS(翻倍)。结束慢启动的条件超时丢包如果传输的分组在中途丢失,或者回传的ACK丢失,导致超时发生。TCP就会将cwnd重新设置为1,并将ssthresh设置为超时时cwnd的一半,当慢启动之后,原创 2021-08-17 14:20:05 · 770 阅读 · 0 评论 -
计算机网络——可靠数据传输原理
我们分为几种讨论情况经过完全可靠信道的可靠数据传输经过具有比特差错信道的可靠数据传输经过具有比特差错的丢包信道的可靠数据传输经过完全可靠的可靠数据传输rdt1.0协议因为信道是完全可靠的传输信道,所以不需要进行确认。发送端只需要接收上层数据,并产生一个包含该数据的分组,将分组发送到信道中。接收端接收端将接收的分组取出数据,交给上层。经过具有比特差错信道的可靠数据传输rdt2.0在rdt1.0的协议上增加了数据确认的回传,还要进行差错检测,重传等。发送方发送方将上层的数据进行原创 2021-08-13 15:46:41 · 719 阅读 · 0 评论 -
计算机网络——DNS
DNS是什么:一个由分层的DNS服务器实现的分布式数据库一个使得主机能够查询分布式数据库的应用层协议。DNS在UDP之上使用53号端口DNS工作机理用户主机上的DNS接收到后,向网络发送DNS查询报文。所有的DNS报文都通过端口53发送。经过查询,用户主机接收到一个提供希望映射的DNS回答报文,这个映射结果被传送到调用DNS的应用程序。DNS查询递归查询和迭代查询递归查询,如果没有在DNS服务器上查询到该映射,此台服务器就会自己发送请求,请求其他DNS服务器,然后返回给请求此台DN原创 2021-08-12 13:42:27 · 653 阅读 · 0 评论 -
计算机网络——SMTP
因特网电子邮件有三个主要组成部分用户代理(用的什么客户端发送的邮件)邮件服务器(邮件远程传输,在邮件服务器之间传输)简单邮件传输协议(协议)发送邮件的大概流程邮件通过客户端传输到邮件服务器通过跨邮件服务器之间传输使用SMTP协议进行传输。当收件方的客户上线之后,会与服务器相连接,将邮件传输到客户端SMTP报文图片来源:https://blog.csdn.net/qq_35644234/article/details/68961603报文首先,需要先与目的邮件服务器建立连接H原创 2021-08-07 13:29:16 · 4270 阅读 · 0 评论 -
计算机网络——http请求和响应报文
http请求报文请求报文分为请求行、首部行、实体体。请求行请求行有三个字段:请求方法字段、url字段和http版本字段。首部行首部行结构:首部字段名:值。包括Host、Connection、User-agent、Accept-language等host表示请求的主机,Concction表示是否持续为持续连接,User-agent用户代理,向服务器请求的浏览器类型,Accept-language,想得到的语法版本。实体体如果是get方法请求,则实体体为空,如果是post方法时,有实体体。请原创 2021-08-06 18:12:22 · 1137 阅读 · 0 评论 -
深入理解计算机系统——缓存溢出、对抗缓存溢出的攻击、支持变长栈帧
内存越界引用和缓冲区溢出c语言对数组不进行边界检查,可能会导致,数组越界访问,导致存储越界,将数组的数据写入其他缓冲区。导致数据丢失、错误。出现问题的原因:图片来源https://blog.csdn.net/snowq/article/details/1749087栈的存储,按照地址从大到小进行存储,先进后出的规则,也就是说后进入的数据存储的地址,要比先进入的数据存储的地址要小。当给数组分配一个内存时,先将地址做减法,然后每存储一个数据,指针做加法。如果我们声明一个数组,然后进行存储数据,当数原创 2021-07-31 15:44:34 · 947 阅读 · 0 评论 -
深入理解计算机系统——程序编码、访问信息、算数逻辑操作、控制
程序编码1:程序编码大概四个步骤预处理阶段,将c语言所用的包、函数,进行插入到文件编译阶段,将c代码编译为汇编代码汇编阶段,将汇编代码转化为机器语言链接阶段,将目标代码与实现库的函数进行整合2:机器级编程两种重要的抽象指令集体系结构或指令集架构,定义机器级程序的行为和格式,定义处理器的状态,指令格式,以及每条指令对状态的影响。机器使用的地址是虚拟地址,通过映射,将虚拟地址映射到物理地址。3:Intel用术语“字”表示16位数据类型。访问信息1:如果将一个值复制到寄存器中如果原创 2021-07-26 17:58:04 · 643 阅读 · 0 评论 -
电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number开始想到的是暴力,一层一层遍历,但是由于不知道数字字符串的长度,导致for循环遍历的层数不知道。回溯算法:我们使用深度优先搜索,进行字符串的组合。我们首先取原创 2021-07-26 10:56:17 · 519 阅读 · 0 评论 -
深入理解计算机系统——向偶数舍入
首先,我们看十进制向偶数舍入的方法:比如1.4、1.6、1.5、2.5、-1.5,将这些数舍入到整数1.4,在1和2中间,1和2中间的数是1.5,1.4比1.5小,所以直接舍掉。1.6,在1和2中间,中间的数是1.5,1.6比1.5大,所以进位。1.5,在1和2中间,中间的数是1.5,相等,则判断最低有效位是奇数还是偶数,如果奇数则进位,如果为偶数,则不变。以此类推我们再看二进制数,怎样判断的。先判断需要舍入或者舍掉的位数,比如10.010只保留小数点后一位,则要舍掉或舍入两位,判断中间值:(原创 2021-07-23 10:29:36 · 4233 阅读 · 0 评论 -
将一个十进制小数转化为IEEE754编码的小数
首先,我们熟悉IEEE754小数的编码符号位:0为正,1为负阶码位:将二的指数加127(如果是6位编码表示阶码的数)小数位:省略第一位的1。拿一个例子举例:12345,二进制编码为11000000111001,转化为小数乘以一个以2为底的小数,1.1000000111001*2^13首先看符号位:为正所以符号位为0。阶码,13+127=140所以阶码为140。小数位,首先将小数点左侧的1省略,剩下的为小数部分:1000000111001。然后规定是小数部分是23位,位数不够在右侧补0,所以为10原创 2021-07-22 21:22:22 · 2637 阅读 · 0 评论