自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (1)
  • 收藏
  • 关注

原创 【设计模式】Java与Golang实现单例模式

单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。本文给出了Java和Golang的代码实现,即使语言不同,思想是相同的,但考虑到不同语言的特性,会存在些许的差别。Java实现单例模式的方式主要有5种,分别是饿汉模式、懒汉模式、双重检测机制实现、静态内部类实现、枚举类实现。代码:在类加载的时候就对实例进行初始化,没有线程安全问题;获取实例的静态方法没有使用同步,调用效率高;但是没有使用懒加载,如果该实例从始至终都没被使用过,则会造成内存浪费。总结:线程安全、

2022-07-06 12:20:17 387 1

原创 分布式ID生成解决方案——雪花生成算法Golang实现

在分布式系统中生成唯一ID的方案有很多,常见的方式有以下几种。雪花算法生成的ID是纯数字且有序的,最早是 Twitter 公司在其内部用于分布式环境下生成唯一 ID,其原始版本是scala版。由首位无效符、时间戳差值,机器编码(由机器id和服务id组成),序号四部分组成。注意,默认的雪花算法是 64 bit,具体的长度可以自行配置。如果希望运行更久,增加时间戳的位数;如果需要支持更多节点部署,增加标识位长度;如果并发很高,增加序列号位数。雪花算法并非一成不变的,可以根据具体场景进行定制。优点:缺点:代码:

2022-07-04 14:13:52 4363 1

原创 Golang单元测试、Mock测试以及基准测试

Golang拥有一套单元测试和性能测试系统,仅需要添加很少的代码就可以快速测试一段需求代码。单元测试主要包括:输入、测试单元、输出、期望以及与期望的校对。测试单元包括函数或者结合了一些函数的模块等。我们通过将输出与期望值进行校对,来验证代码的正确性。通过单元测试,可以一方面保证质量,例如在覆盖率足够的情况下,如果在旧代码中添加了新的代码,通过单元测试可以验证新的代码是否破坏了功能正确性。另一方面,也提升了效率,例如代码中出现了bug,通过编写单元测试,我们能够在较短的时间内定位或修复问题。规则1:所有测试文

2022-06-29 10:41:41 1666

原创 深入理解TCP三次握手与四次挥手过程以及抓包实验

最近,我正好在做socket相关的实验,发现现在对计算机网络知识有一点点模糊,借此机会,熟悉一下TCP连接过程并利用WireShark工具进行测试。三次握手,是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。解释:客户端向服务端发送连接请求报文段,此报文段首部中的同步位被设置为1,表明这是一个tcp连接请求报文段。序号字段被设置了一个初始值作为TCP客户进程所选择的初始序号。服务端收到客

2022-06-03 21:12:40 4263 6

原创 利用开源库基于Java实现NSGA-II算法详细教程

一、前言最近,我发现一个开源库,基于该库能够较为简单地使用Java实现NSGA-II算法。NSGA-II相关内容可以参考我之前的博客。开源库github:https://github.com/onclave/NSGA-II注:对于Java实现NSGA-II,使用较为广泛的库是JMetal,个人感觉相对来说上手更难,感兴趣的人可以看看,此博客不予说明。二、使用2.1、简单上手以下代码是文档中给出的默认实现方式,不进行任何其他操作,仅使用如下代码运行的话,会使用默认配置。public sta

2022-05-13 21:49:35 4104 1

原创 【Golang】go语言实现数据结构——堆

堆一种特殊的树,满足下面两个条件:堆总是一棵完全二叉树。堆中某个节点的值总是大于等于(小于等于)其所有子节点的值。如果是大于等于情况就称为大顶堆,小于等于情况就是小顶堆。在Java语言中,我们可以直接使用容器PriorityQueue实现堆。Golang也存在类似的实现方式,但本文先介绍一下手动实现,再介绍如何使用golang提供的接口实现。一、手撕代码实现1.1、说明由堆的性质可知,堆是一颗完全二叉树,因此,利用数组(切片)结构来存放堆最合适。假设某结点数组下标为i(i>=1),

2022-05-04 21:38:30 1759 5

原创 Golang切片reslice操作导致内存泄露问题以及解决方法

一、遇到的问题某次刷力扣题时,我在算法中使用切片来充当队列,毕竟利用切片的可伸缩性质很容易实现一个队列,简易的切片实现队列代码如下所示://入队slice = append(slice, 1)//出队slice = slice[1:]除此之外,还可以利用Golang提供的container包中的list来实现队列。题目并不难,就是二叉树层序遍历,但提交代码后确出现如下错误:runtime: out of memory: cannot allocate 134217728-byte bl

2022-04-06 17:19:04 2895

原创 非支配排序遗传算法NSGA-II学习笔记

一、多目标优化问题的解在单目标优化问题中,通常最优解只有一个,而且能用比较简单和常用的数学方法求出其最优解。然而在多目标优化问题中,各个目标之间相互制约,可能使得一个目标性能的改善是以其他目标性能为代价,不可能存在一个使所有目标性能都达到最优的解,所以对于多目标优化问题,其解通常是一个非劣解的集合——Pareto解集注:非劣解也称为有效解、非支配解、Pareto最优解或Pareto解。二、Pareto解集学习NSGA-II,首先要明白什么是Pareto解集。举个例子,想象一下我们想要设计一款电动

2022-03-29 22:48:26 6486 1

原创 Cookie、Session和Token的区别与联系

以下是本人的一些笔记,助于理解概念,并不详细,详细内容可以参考文中提供的链接。一、HTTP的无状态性HTTP是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。假设要求登录认证的Web页面本身无法进行状态的管理(不记录已登录的状态),那么每次跳转新页面不是要再次登录,就是要在每次请求报文中附加参数来管理登录状态。不可否认,无状态协议当然有它的优点。由于不必保存状态,自然可减少服务器的CPU及内存资源的消耗。从另一个角度来讲,也正是因为HTTP协议

2022-02-28 20:36:58 3457

原创 【Go】gin框架的ShouldBindQuery与BindQuery的区别

前言Gin文档地址:https://gin-gonic.com/zh-cn/docs/examples/binding-and-validation/使用gin框架进行模型绑定时,似乎使用两种绑定方法都可以,我很好奇ShouldBindQuery与BindQuery的区别,于是查了一下资料,果然是自己没有好好看文档。Gin提供了两类绑定方法:Must bindMethods - Bind, BindJSON, BindXML, BindQuery, BindYAMLBehavior - 这些

2022-02-16 19:24:57 8809

原创 Redis常用命令笔记

一、键的常用命令keys * 查看当前所有keyexists key 判断某个key是否存在type key 查看你的key是什么类型del key 删除指定的key数据unlink key 根据value选择非阻塞删除,仅将keys从keyspace元数据中删除,真正的删除回在后续异步操作。expire key 10 为给定的key设置10秒过期时间ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期select 切换数据库dbsize 查看当前数据库的key的数量fl

2022-02-11 00:50:14 967

原创 二分图完全匹配算法之匈牙利算法

最近在参加了一个小项目,里面用到二分图匹配算法,因为之前并没有接触过相关算法,于是找到一些博客进行了一番学习,但学习之后,发现部分博客或多或少存在一些另我疑惑的地方,于是,我打算写此博客以巩固对算法的理解。一、二分图基本概念二分图(Bipartite graph)又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图

2022-01-30 18:01:29 5948 1

原创 Go字符串拼接的方式与性能对比

Go中字符串的特殊之处Go中的字符串是 UTF-8 字符的一个序列(当字符为 ASCII 码时则占用 1 个字节,其它字符根据需要占用 2-4 个字节)。由于该编码对占用字节长度的不定性,Go 中的字符串里面的字符也可能根据需要占用 1 至 4 个字节,这与其它语言如 C++、Java 或者 Python 不同(Java 始终使用 2 个字节)。Go 这样做的好处是不仅减少了内存和硬盘空间占用,同时也不用其它语言那样需要对使用 UTF-8 字符集的文本进行编码和解码。字符串是一种值类型,且值不可变,即创

2022-01-22 16:22:56 1376 1

原创 【Go】go init函数

前言之前有一次我在写程序的时候,创建了一个init函数func init(),起初我并不知道init()是go本身自带的一个函数,类似于main(),于是我给init()函数设置返回值时,Goland提示错误,当时很纳闷,百度了才知道这回事。由此,写一篇博客,以记录init()函数用法。init函数介绍init()函数是一个特殊的函数,存在以下特性:不能被其他函数调用,而是在main函数执行之前,自动被调用init函数不能作为参数传入不能有传入参数和返回值以下是《the way to g

2022-01-14 22:07:56 4844 1

原创 Kieker初探:获取普通Java程序运行状态

这篇笔记里简单总结一下使用Kieker获取普通Java程序运行状态的步骤,希望对初学的朋友有所帮助。

2022-01-13 21:11:37 615 4

原创 kieker初探:java程序动态分析工具

Kieker提供了动态分析功能,即监控和分析软件系统的运行时行为,从而实现应用程序性能监控和体系结构显示。

2022-01-10 22:08:09 1385 4

原创 面向切面编程AOP相关概念

AOP是Aspect Oriented Programming的缩写,即”面向切面编程“。AOP相关概念重点是切点、通知和切面。抽象概念解释Target代理的目标对象。Proxy一个类被AOP织入增强后,就产生了一个结果代理类。JoinPoint(连接点)所谓连接点是指那些被拦截到的点。在springAOP中,这些点指的是方法,因为spring只支持方法类型的连接点。Pointcut(切点)所谓切入点是指我们要对哪些连接点进行拦截的定义,AOP通过切点定位

2022-01-10 15:06:55 252

原创 调试web项目时Chrome浏览器发送两次请求

调试web项目时Chrome浏览器发送两次请求问题最近使用chrome浏览器调试web项目时,项目有时候会因为接收到空值而而报错,之后我发现是因为Chrome浏览器会连续发送2次请求导致。在使用Edge浏览器则没有出现这个问题,遂搜索了一些解决方案如下:https://blog.csdn.net/weixin_39037208/article/details/119646100https://blog.csdn.net/u011474608/article/details/115178691htt

2022-01-09 12:02:00 1412

原创 使用Xshell连接VMware上的Linux虚拟机

使用Xshell连接VMware上的Linux虚拟机为了使虚拟机启动后能直接使用Xshell进行连接,首先需要固定虚拟机的IP地址。由于只是进行本机的连接,所以选择NAT模式,而没有选择桥接模式。以下操作均是在NAT模式下进行。步骤1、确保连接模式为NAT2、点击虚拟网络编辑器3、取消使用本地DHCP服务选择“VMnet8”,将“使用本地DHCP服务将IP地址分配给虚拟机”取消勾选。4、查看NAT设置点击设置记住以下地址:子网IP子网掩码网关IP如下图所示,子网IP

2021-09-01 11:07:24 3087 2

转载 VMware虚拟机安装CentOS过程

软件及镜像准备软件:产品名称版本号VMware® Workstation 16 Pro16.1.2 build-17966106Linux系统:发行版本版本号下载地址CentOS7.9.2009阿里镜像下载虚拟机中创建系统1、打开Vmware并选择创建新的虚拟机2、选择典型安装或自定义安装典型安装:VMware会将主流的配置应用在虚拟机的操作系统上,对于新手来很友好。自定义安装:自定义安装可以针对性的把一些资源加强,把不需要的资源移

2021-08-29 22:04:19 3475

原创 【Go】将切片作为参数传入函数并使用append方法遇到的问题

切片的内部结构:type SliceHeader struct { Data uintptr Len int Cap int}由切片的结构定义可知,切片的结构由三个信息组成:指针Data,指向底层数组中切片指定的开始位置长度Len,即切片的长度容量Cap,也就是最大长度,即切片开始位置到数组的最后位置的长度问题:将切片作为函数参数传入时,在函数内使用append方法并不能改变切片。如下述代码所示:func main() { //创建一个长度和容量均为3

2021-08-29 16:09:54 2807 11

原创 【Go】使用jquery无法获取Gin设置的cookie问题

问题:在代码中,已经添加cookie,如下:func LoginCheck(c *gin.Context) { //省略 ... c.SetCookie("username",id.(string),1800,"/","localhost",false,true) c.SetCookie("password",id.(string),1800,"/","localhost",false,true) //省略 ...}在JS代码中

2021-07-15 22:32:10 425

原创 mysql不是内部或外部命令解决方法

问题:刚下载完mysql8.0.25,在命令行界面无法使用 mysql -uroot -p登入,C:\Users\Bestzy>mysql -uroot -p'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件。原因:没有配置环境变量。打开系统变量Path可以看到,已经存在Mysql Shell 8.0\bin\的路径,但缺少Mysql Server\bin的路径。解决方法:找到Mysql Server 8.0\bin的路径并添加即可。问题解决:C:\Us

2021-07-07 20:22:26 1825

原创 Go中使用new创建对象和直接字面量创建对象的区别

区别:使用new创建对象返回对象指针,而直接使用字面量创建对象返回对象本身。测试:func main() { // s1 := stu{ name: "xm", age: 11, } // s2 := new(stu) s2.name = "xh" s2.age = 12 // fmt.Printf("%T\n", s1) fmt.Printf("%T\n", s2)}结果:main.stu*main.stu...

2021-07-05 16:16:40 1152

原创 windows环境consul安装教程

目录consul下载地址:安装测试启动关闭官方文档consul下载地址:目前最新版本是1.10.0。https://www.consul.io/downloads安装下载完成后是一个压缩包,里面只有一个consul.exe文件,直接解压即可。测试在解压路径下的地址栏输入“cmd”,打开命令行窗口。并输入“consul”,若出现如图所示则表示成功。启动在cmd中输入consul agent -dev命令启动程序之后在浏览器输入以下网址http://localhost:8500

2021-06-28 19:15:40 547

原创 go在函数中直接对切片赋值遇到的问题

问题:刷题的时候碰到个问题,将切片作为参数传入函数,并在函数中对切片进行重新赋值时,原本的切片不会改变。后来想想这其实是一个很基础的问题,但也记录一下,提醒自己。//主函数func main() { s1 := []int{111, 222, 333} //将s1传递给in参数 test(s1) fmt.Println(s1)}//test函数func test(in []int) { out := []int{1, 2, 3} in = out f

2021-06-28 14:20:40 2517

原创 protoc导出时遇到protoc-gen-go unable to determine Go import path解决方法

使用如下命令将.proto文件转换为go文件时,发生错误。命令:protoc --go_out /. *.proto发生错误:C:\Users\Bestzy\go\src\awesomeProject\pb>protoc --go_out /. myproto.protoprotoc-gen-go: unable to determine Go import path for "myproto.proto"Please specify either: • a "go_

2021-06-27 17:06:51 4683 2

原创 【Java】构造哈夫曼树并计算带权路径长度

思想:先构建一个线性表,将树的结点存入,然后对树的结点进行升序排序,这样就保证了线性表的前两个结点是值最小的两个结点。然后根据构造哈夫曼树的方法,取值最小的两个结点分别为新树的左右子树,而新树的值就是这两个结点值的和。接着再将新树结点加入线性表,并将线性表排序。重复操作,直到链表只剩一个结点,而这个结点就是哈夫曼树的头结点。而寻找带权路径长度可以使用递归的方法。代码:public class Main { public static void main(String[] args) {

2021-05-19 22:34:48 1496

原创 【Golang】Go实现简易的登入页面

题目:结合net/http和database/sql实现一个使用MySQL存储用户信息的注册及登陆的简易web程序。代码:package mainimport ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "net/http")var db *sql.DBfunc initDB() (err error) { dsn := "root:root@tcp(127.0.0.1:3306)/db1" db, er

2021-05-17 17:04:47 2024

转载 【Golang】Go语言自定义类型和类型别名

自定义类型在Go语言中有一些基本的数据类型,如string、整型、浮点型、布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型。自定义类型是定义了一个全新的类型。我们可以基于内置的基本类型定义,也可以通过struct定义。例如://将MyInt定义为int类型type MyInt int通过type关键字的定义,MyInt就是一种新的类型,它具有int的特性。类型别名类型别名是Go1.9版本添加的新功能。类型别名规定:TypeAlias只是Type的别名,本质上TypeAli

2021-05-16 21:47:19 626

原创 【Golang】Go语言类型断言

接口概念一个接口的值(简称接口值)是由一个具体类型和具体类型的值两部分组成的。这两部分分别称为接口的动态类型和动态值。非空接口的底层数据结构是iface,其代码如下(代码位于src/runtime/runtime2.go中):type iface struct{ tab *itab //itab存放类型及方法指针信息 data unsafe.Pointer //数据信息}iface的结构很简单,有两个指针类型字段。itab:用来存放接口自身类型和绑定的实例类型及实例

2021-04-28 21:08:38 602 1

原创 【Golang】Go语言数组定义与初始化方式

Go语言数组定义与初始化数组的定义var 数组变量名 [元素数量]T比如:var a [5]int。注意数组的长度必须是常量,且长度属于数组类型的一部分,定义之后不允许修改长度。因此 [5]int和[10]int是不同的类型。var arr1 [3]intvar arr2 [4]intarr1 = arr2 //错误,此时arr1和arr2是不同的类型数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1。数组的初始化方式数组的初始化方式有很多。方式一func

2021-04-20 16:51:30 13953

原创 【Golang】非侵入式接口与侵入式接口

Go的接口是非侵入式的设计,也就是说,一个具体类型实现接口不需要再语法上显式地声明,只要具体类型的方法集是接口方法集的超集,就代表该类型实现了接口,编译器在编译时会进行方法集的校验。侵入式接口实现类需要明确声明自己实现了某个接口。如Java的继承形式:首先创建好了speak接口public interface speak { void speak();}human类需要实现speak接口的话,需要使用implement关键字声明实现了该接口public class human i.

2021-04-14 21:57:42 478

原创 【Docker】Docker Swarm连接出现connect: no route to host情况处理

问题使用Docker Swarm集群部署在CentOS7上时,当worker主机加入集群的时,发生如下错误:[root@zhengyihost ~]# docker swarm join --token SWMTKN-1-3b4hjen0t7fvxm7w94958pvgayo9pjewbr1r1mbyjkkkwrqoyr-atbt37va65u1emg05rmgfxyi2 192.168.21.131:2377Error response from daemon: rpc error: code =

2021-03-31 18:56:10 1981

原创 【Docker】Docker网络

1、理解docker0测试[root@izbp1191gh7vw5p1u5ru50z ~]# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo #本机回环地址 valid_lft

2021-03-30 14:32:30 139

原创 【Docker】DockerFile

1、DockerFiledockerfile是用来构建docker镜像的文件!就是一个命令参数脚本。构建步骤:编写一个dockerfile文件docker build 构建称为一个镜像docker run 运行镜像docker push 发布镜像(如:dockerhub、阿里云镜像仓库)很多官方镜像都是基础的,很多功能都没有,我们通常会自己搭建自己的镜像。例如:官方的centos就是单纯的centos,而我们需要centos+jdk+tomcat+mysql+redis。2、Docke

2021-03-28 16:16:59 176

原创 动态规划算法概念及例题

目录1、多阶段决策过程与动态规划2、动态规划的基本概念3、动态规划方法的基本思想4、动态规划与静态规划的关系5、动态规划算法的基本步骤6、哪些问题能用动态规划算法解决7、动态规划算法实例问题1问题21、多阶段决策过程与动态规划将决策过程分为若干个相互联系的阶段,每个阶段都需要做出某项决策,决策的选取要依赖当前面临的状态,并影响后面决策的发展,从而使整个过程达到最好的活动效果。把一个问题看作是一个前后关联具有链状结构的多阶段过程称为多阶段决策过程。决策依赖于当前面临的状态,随即引起状态的转移,各阶段决

2021-03-25 14:57:10 1666

原创 【Docker】容器数据卷

文章目录1、什么是容器数据卷?2、使用数据卷3、实战——安装MySQL4、具名和匿名挂载5、知识拓展1、什么是容器数据卷?docker的理念回顾将应用和环境打包成一个镜像!但现在有个问题,我们有很多容器都是用来保存数据的,那么数据就不应该放在容器里,如果数据都在容器里,那么容器一删除,数据就会丢失。需求:数据可持久化例如,把mysql放在容器里,容器删了,数据也被删除了。需求:Mysql数据可以存储在本地!容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!这就是卷技术

2021-03-24 22:09:01 190

原创 【Docker】Docker镜像讲解

文章目录1、镜像是什么?2、Docker镜像加载原理3、分层理解1、镜像是什么?镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时的库、环境变量和配置文件。所有的应用,直接打包docker镜像,就可以直接跑起来!如何得到镜像?从远程仓库下载朋友拷贝给你自己制作一个镜像DockerFile2、Docker镜像加载原理UnionFS(联合文件系统)我们下载的时候看到的一层层的就是这个!UnionFS

2021-03-24 13:58:44 223

原创 数据库设计(结构化设计方法)——学生考试管理系统

数据库设计(结构化设计方法)——学生考试管理系统文章目录数据库设计(结构化设计方法)——学生考试管理系统作业要求一、需求分析1.1、需求说明1.2、数据流图1.2.1、系统的顶层数据流图1.2.2、系统的第0层数据流图1.3、数据字典1.3.1、数据流1.3.2、数据存储1.3.3、处理过程逻辑二、概念设计2.1、实体2.2、系统局部E-R图2.2.1、教师实体、课程实体和考核点实体的联系2.2.2、学生实体与课程实体的联系2.3、系统全局E-R图三、逻辑结构设计3.1、ER图到关系模式的转换3.2、关系

2021-03-20 13:16:11 13096

2005-2017数学建模国赛AB赛题及官方评阅要点

2005-2017全国大学生数学建模竞赛AB赛题及官方评阅要点

2018-08-26

空空如也

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

TA关注的人

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