自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Go —— GMP面试题

Go —— 协程0)G:协程,M:系统线程,P:协程调度器1)通过go func() 生成一个 G2)G会优先放到P的本地队列,如果P的队列已满,则会放入全局队列中3)G需要在M中执行,G通过P进行调度,M与P的关系是1:1对应的,如果P的本地队列为空,则会优先从全局队列中获取G,其次从其他MP组合中窃取G4)M执行G的过程是一个循环的过程5)如果M发生系统调度,则会释放P,P会找一个空闲的M进行执行,如果没有空闲的M,则会唤醒或者新建一个M。

2024-04-09 21:14:30 465

原创 Go —— channel (二)

出现这种情况可能与GMP调度模型有关系,当我们继续增大数据量后(比如增加到10000),会发现每个协程读取chan的次数其实差不多。关闭的管道仍然可以读取数据,向关闭的管道写数据会触发panic。在我多次测试后发现前四个数会被每个协程消费一次,随后会出现大片数据被同一协程消费的情况。ps:如果有哪位老哥知道为什么会出现一个协程连续输出的情况,欢迎在评论区讨论。执行程序,会发现按照某种固定的顺序输出,这时完全符合上图的读的过程的。按照上面协程读取消息的过程会发生什么呢?向一个管道中写数据的简单过程如下。

2024-04-09 21:06:58 613 1

原创 Go —— defer

defer 语句用于延迟函数的调用,常用于关闭文件描述符、释放锁等资源释放场景。但 defer 关键字只能作用于函数或函数调用。

2024-03-28 15:05:39 868 2

原创 IM系统设计之websocket消息转发

上周面试被面试官问到:“在分布式IM系统中,如何实现多个websocket集群之间的通信”。我在思考了良久后回答:“不会”。随着我的回答,我和面试官的故事也到此完结了…

2024-03-23 21:20:45 1158

原创 IM系统设计之消息存储

消息持久库和离线消息存储库我分别使用的是:MySQL、Redis。众所周知,Redis是基于内存的,那么当Redis宕机后,离线消息就会丢失。这里有两种解决思路,两种思路都需要记录消息持久库里面记录消息的已读状态。如果有更好的方法,欢迎大家在评论区讨论。当Redis宕机后,管理员手动拉取。当用户A向用户B发送一条消息时。消息存储结构如下图所示。

2024-03-23 21:19:42 291

原创 Go —— 逃逸分析

逃逸分析是指由编译器决定内存分配的位置,不需要程序员指定。有了逃逸分析,返回函数局部变量变得可能。除此之外,逃逸分析还跟闭包息息相关,了解哪些场景下对象会逃逸至关重要。

2024-03-16 21:54:12 792 1

原创 Go1.22 for range新特性

Go1.22 在for range 方面做了一些调整,主要分为两方面。

2024-03-16 21:53:51 468

原创 goctl生成protoc报错:Import “google/protobuf/timestamp.proto“ was not found or had errors.

这是我的user.proto 文件,位于在目录下执行。

2024-03-10 17:19:41 519

原创 计算机网络 —— 运输层

运输层的主要任务是,如何为运行在不同主机上的应用进程提供直接的通信服务。运输层协议又称为端到端协议。根据应用需求的不同,因特网的运输层为应用层提供了两种不同的运输协议,即面向连接的TCP和无连接的UDP。

2024-03-10 17:19:21 898

原创 GoLand/Idea 项目目录缺失

问题是这么个问题。进入项目后只剩下了go.mod、go.sum 文件。之前用idea的时候也出现过这个问题。不愧是一家公司(看来这是遗传病)

2024-02-02 15:35:30 438

原创 syntax error: expected ‘:‘ | ‘IDENT‘ | ‘INT‘, got ‘(‘

使用 go-zero时,执行api命令报错。报错信息提醒文件55行有错,但是源文件55行没有问题。

2024-02-02 15:33:54 554

原创 linux安装docker-compose

今天安装docker-compose的时候,找了很多教程,但是本地一直报错,记录一下解决过程。其实菜鸟教程上的这篇已经很好了,其中很贴心的给出了两种下载方法。但是我用下载,服务器说,我用下载,又给我提醒文件错误。正常的情况下执行后应该返回的是当时我觉得是我哪里操作的问题,又是又试了几遍,最后我得出结论。查找资料后了解到这可能是docker-compose文件被下载但内容不正确造成的。既然知道了原因,那么只需要在本机下载然后传到服务器就可以正常安装了。

2024-01-28 17:13:12 392

原创 MySQL的执行流程

MySQL架构分为Server层、存储引擎,其中Server层又分为连接器、查询缓存、分析器、优化器执行器五个部分。当客户端发送请求后依次需要经过 处理请求、查询缓存、语法解析、查询优化、存储引擎部分。

2024-01-21 22:04:09 442

原创 计算机网络 —— 数据链路层

数据链路层把网络层交下来的数据构成帧发送到链路上,以及把收到的帧数据取出并上交给网络层。链路层属于计算机网络的底层。点对点通信。广播通信。

2024-01-13 18:10:22 1010

原创 计算机网络 —— 物理层

调制的目的是将数字信号转换为适合在信道中传播的连续波形。物理层为数据链路层屏蔽了各种传输媒体的差异,使数据链路层只需要考虑如何完成本层的协议和服务,而不必考虑网络具体的传输媒体是什么。编码是将数字信息转换为特定格式的过程,以便在通信系统中进行传输或存储。因为频率和相位是相关的,即频率是相位随时间的变化率。奈氏准则:在假定的理想条件下,为了避免码间串扰,码元传输速率是有上限的。异步传输:数据块以字节为独立单位,字节之间的时间间隔不是固定的。同步传输:数据块以稳定的比特流的形式传输,字节之间没有间隙。

2024-01-08 15:35:32 1366

原创 计算机网络—— 概述

网络由若干结点和连接这些结点的链路组成多个网络还可以通过路由器互联起来,这样就构成了一个覆盖范围更大的网络,即互联网(或互连网)。因特网(Internet)是世界上最大的互联网络internet和Internet的区别internet(互联网或互连网)是一个通用名词,它泛指由多个计算机网络互连而成的网络。在这些网络之间的通信协议可以是任意的。

2024-01-08 15:31:29 1352 2

原创 go sort.Search()

因为二分查找相比普通依次遍历而言,速度能有巨幅提升。就好比你查字典的时候,你是会从头往后一页一页的翻,还是会直接翻开中间某页,再翻开中间的中间的某页。二分查找相比于依次遍历查找而言,通过二分法查找,找到已经排序好的数组[0,n)中第一个使f为true的索引,如果没有找到返回n。位运算,将i、j的和转化为二进制右移(删除)一位,等价于(i+j)/ 2。有效索引范围为[0,n),当 i >= j 时结束。比如十进制5经过 >> 1 结果为 2。为什么要用二分查找?源码位于sort包下。

2023-12-09 22:39:20 146

原创 Go——协程

​ 一般来说,处理器P中的协程G额外再创建的协程会加入本地的runqueues中,但如果本地的队列已满,或者阻塞的协程被唤醒,则协程会被放入全局的runqueues中,处理器P除了调度本地的runqueues中的协程,还会周期性地从全局runqueues中摘取协程来调度。​ 当线程在执行系统调用时,可能会阻塞,对应到调度器模型,如果一个协程发起系统调用,那么对应的工作线程会被阻塞,这样一来,处理器P的runqueues队列中的协程将得不到调用,相对于队列中的所有协程都被阻塞。

2023-12-07 23:32:46 348 3

原创 git的安装及ssh配置(Linux)

默认软件仓库版本较旧: yum 使用的软件仓库可能默认配置为提供较为稳定但不是最新的软件版本。软件维护策略: 有些软件项目可能选择保持相对较低的默认版本以确保稳定性,而将更高版本的软件提供给那些希望使用最新功能的用户。系统版本较旧: 如果您使用的是较旧版本的操作系统,软件仓库中提供的软件版本可能也相对较旧。配置问题: 您的yum配置可能未正确指向包含所需软件最新版本的软件仓库。yum是一个客户端软件,就好比手机上的应用商店,帮助我们对软件的下载、安装和卸载。这里不是今天的重点,下面我们换一种方式下载。

2023-12-04 13:10:54 495

原创 MySQL--主从复制

主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。

2023-11-29 22:54:30 349

原创 MySQL--日志

错误日志是MySQL中最重要的日志之一,它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。该日志是默认开启的,默认存放目录/var/log/,默认的日志文件名为mysqld.log。

2023-11-28 22:44:06 190

原创 MySQL--InnoDB引擎

表空间→段→区→页→行。

2023-11-27 18:16:09 224

原创 MySQL--锁

锁是mysql在并发访问时,解决数据访问一致性、有效性的一种机制mysq中的锁,按照锁的粒度分,分为以下三类:全局锁:锁定数据库中的所有表表级锁:每次操作锁住整张表行级锁:每次操作锁住对应的行数据。

2023-11-26 17:58:27 245

原创 钉钉统计部门个人请假次数go

请求参数UseridList string `json:"userid_list"` // 待查询用户的ID列表,每次最多100个。StartTime int `json:"start_time"` // 开始时间 ,Unix时间戳,支持最多180天的查询。EndTime int `json:"end_time"` // 结束时间,Unix时间戳,支持最多180天的查询。

2023-11-11 23:16:53 655

原创 Go常见数据结构的实现原理——map

当负载因子过大时,就新建一个bucket数组,新的bucket数组的长度为原来的2倍,然后旧bucket数组中的数据逐步搬迁到新的bucket数组中。当Hash表的负载因子过大时,需要申请更多的bucket,并对所有的键值对重新组织,使其均匀地分布到这些bucket中,这个过程称为rehash。3、渐进迁移: 在元素逐步迁移的过程中,新添加的元素会直接被放入新的桶数组中,而不会立即迁移。4、逐步替换: 最终,当所有元素都成功迁移到新的桶数组后,旧的桶数组会被废弃,新桶数组取而代之,完成了增量扩容的过程。

2023-11-11 22:41:04 362

原创 Go常见数据结构的实现原理——slice

切片是对数组的一个引用,它包含指向数组的指针、长度和容量等信息。在 Go 语言中,切片(Slice)、映射(Map)、通道(Channel)和接口(Interface)都属于引用类型。这些类型的变量存储的是对底层数据的引用,而不是数据本身。下面是引用类型的一些特点。

2023-10-19 17:26:43 111 1

原创 Go常见数据结构的实现原理——channel

管道是Go在语言层面提供的协程间的通信方式。

2023-10-17 20:19:55 71

原创 MySQL查询语句WHERE后面IF判断及应用

最近发现where后面还能跟if,前面mysql算是白学了。WHEREMySQL的IF()函数,接受三个表达式,如果第一个表达式为true,而不是零且不为NULL,它将返回第二个表达式。否则,它返回第三个表达式。根据使用它的上下文,它返回数字或字符串值。没错,跟java的三元表达式如出一辙。

2023-10-08 09:12:52 3526 1

原创 Go基于阿里云短信服务获取短信验证码

阿里云短信服务: “如果您的应用或网站未上线,您可以通过控制台的发送测试功能,体验短信发送服务。详情请参见发送测试短信。现在很多软件或者网站在注册或者登录的时候可以选择手机号+验证码登录或者注册,我就在想?我可不可以也实现这个功能。但是因为我的应用没有上线,所以目前只能实现测试功能。

2023-09-17 16:05:23 388 1

原创 Docker配置Mysql并设置远程连接

Linux、Docker、云服务服务器。

2023-09-16 09:00:28 2103 3

原创 Go云服务器部署项目

阿里云服务器、Xsheel、Xftp7。

2023-09-14 11:41:36 154 2

原创 error: config file etc/hello-api.yaml, open etc/hello-api.yaml: The system cannot find the path spec

刚接触go-zero,敲了一个HelloWorld案例,直接报错。

2023-09-09 22:28:02 520 1

原创 go根据出生日期获取星座

前几天在写一个项目的时候需要根据数据库中的出生日期判断星座。最简单也是最笨的方法就是用if语句挨个判断日期。由于比较麻烦,就想看看有没有可以判断星座的库。然后就找到了go-carbon。

2023-09-05 10:01:21 53

原创 哈希表是什么

下面是百度百科上对哈希表的介绍:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

2023-09-05 09:21:29 95

原创 Go Gin框架

Gin的中间件必须是一个gin.HandlerFucn类型。

2023-08-20 20:40:27 134 3

原创 golang在 windows操作系统下使用 air

具体安装教程。

2023-07-23 12:04:06 353

原创 html+css实现京东、英雄联盟静态页面

真高仿,像真的一样,京东页面的效果几乎都做出来了。

2023-05-21 16:00:19 3496 4

原创 spring构建tomcat10注意事项,tomcat控制台乱码

刚开始不管怎么设置都乱码,后面不管怎么样设置都正常…之前在学javaweb的时候,tomcat在控制台乱码的问题已经解决了,这次又出现了这个问题。查阅了很多的资料,都没有解决这个问题,甚至原先正常的get方式获取的数据也变成了乱码。

2023-05-21 11:25:00 677 1

原创 力扣 704 二分查找

如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。输入: nums = [-1,0,3,5,9,12], target = 9。输入: nums = [-1,0,3,5,9,12], target = 2。解释: 2 不存在 nums 中因此返回 -1。

2023-04-21 21:00:52 77

原创 MySql笔记

MySql笔记

2023-04-10 20:24:53 55

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