自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ICE/TURN/STUN/Coturn服务器搭建

当我们想要实现在公网环境下的语音/视频通话功能时,就需要用到ICE交互式连接建立。ICE不是一种协议,整合了 STUN 和 TURN 两种协议(用于 NAT 穿透)的框架。ICE的主要目标是解决NAT(网络地址转换)穿越问题,使得即使在复杂的网络环境下,如防火墙和NAT路由器后面,两个对等体也能够发现彼此并建立连接。

2024-10-09 21:55:23 2479 3

原创 常见接口限流算法

今天面试时,面试官对我之前实习时实现的限流功能很感兴趣,发起了夺命连问…正好趁此机会好好整理一下,很棒。

2024-09-03 16:07:23 1755

原创 singleflight中入分析

面试被问过两次:有没有看过singleflight源码?在同一个坑里我栽了两次,下一次一定要站起来。

2024-09-03 15:54:51 564

原创 go.uber.org/ratelimit 源码分析

go 提供了一用来接口限流的包。其中包正是基于漏桶算法实现的。指的是每秒平均多少次,在运行程序后,并不会严格按照官方给的样例输出。

2024-08-28 11:14:02 930 1

原创 gin接口限制请求频率

参与的业务模块今天被安全的同学玩坏了。一直疯狂掉用接口,然后服务器就挂了。涉及的接口需要处理大量的数据,并且需要处理很多条件。有限流和缓存两种解决方案。考虑到正常业务下数据的访问量并不高,而且筛选条件较多,所以选用限流的方式解决。(我让你测)

2024-05-17 21:12:53 966

原创 go sync.Once 源码分析

sync.Once是 Go 语言标准库中的一个同步原语,用于确保某个操作或函数在并发环境下只执行一次。

2025-03-12 09:53:57 443

原创 MySQL最左匹配原则是什么

MySQL 索引的最左匹配原则是指在使用联合索引的过程中,查询条件必须从索引的最左侧开始匹配。如果联合索引包含多个列,查询条件必须包含第一个列,然后是第二个列,以此类推。:联合索局部有序。比如建立联合索引 (a,b),b只在a为确定值时有序,在全局则乱序。

2024-12-25 23:38:55 554

原创 MySQL三层B+树能存多少条数据

非叶子节点存放索引键和指向子节点的指针,假设子节点指针的大小为6字节,索引键(一般为bigint)为8字节,那么一个非叶子节点可以指向:16KB * 1024 ÷ (6+8)≈ 1170 个叶子节点。叶子节点上存放的是完整的数据行,假设数据行的大小为1KB(实际根据数据行大小波动),那么一个叶子节点可以存放:16KB ÷ 1KB = 16 条数据。第二层每个非叶子节点可以指向1170个叶子节点。根叶子节点可以指向 1170 个子节点。每个叶子节点可以存放16条数据。

2024-12-25 23:34:33 567

原创 idea格式化代码、回退上次指针位置快捷键失效

多半是快捷冲突删掉qq快捷键关掉qq音乐快捷键。

2024-12-25 15:54:36 176

原创 Java 8 Stream

for-each 让你站起来,stream 让你飞起来。

2024-12-19 16:30:38 446

原创 go-bindata

在项目中引用了静态资源时,项目打包后,需要保证包与静态资源的相对目录不变。bindata可以将静态资源生成.go文件,在打包时会嵌入到包中,非常好用。

2024-11-15 19:26:31 691

原创 go template 模板字符串

如果想要实现如上格式的Markdown格式的stirng,我们需要对body的最小list进行循环的处理。这样可以在一定程度上解决无法直观的看到文本的格式问题,但是当需要循环的处理某段数据时,这种方式写出的代码并不雅观。这里只做一些简单的说明,除此 template包还提供了很多好用的方法,感兴趣的可以自行查阅。template可以直观的看到字符串预期的格式,并且可以更优雅的处理循环传入参数的操作。可行,但是无法直观的看到文本的格式。可以采用反引号 `` 的方式来解决。表示根对象,比如上面的示例传入的是。

2024-11-10 14:37:14 604

原创 力扣周赛 —— 416

只做出了第一道,第二第三道都超时。痛,太痛了。

2024-09-23 22:10:12 1065 2

原创 Go —— 反射

反射是什么?反射特性与 interface 紧密相关。

2024-08-20 15:53:01 942

原创 GORM的特性

GORM是一个为Go语言开发的全功能ORM库,它的设计思想是开发者友好,旨在简化数据库操作并提高开发效率。

2024-08-20 15:45:01 407

原创 MySQL是如何实现数据排序的

MySQL实现数据排序主要依赖于其内部的排序和索引机制。当执行包含ORDER BY子句的SQL查询时,MySQL会采用以下一种或多种策略来对数据进行排序。

2024-08-01 22:04:12 619

原创 Nginx加权轮询算法

之前面试被问过如何实现有权重的Map,当时没有做出来。后面听到朋友说Nginx权重分配算法,当时以为是通过权重Map解决的,学习后发现并不是。不能白学,记录一下。

2024-08-01 11:15:37 880

原创 Go 垃圾回收(GC)

之前自以为对Go语言的GC了如指掌,结果昨天被面试官疯狂拷打。于是有了这篇博客。

2024-07-11 21:19:38 952

原创 gorm存储json

如果您已经为模型定义了指定的方法,它会在创建、更新、查询、删除时自动被调用。每次进行类似的操作都需要进行转换,十分的繁琐。序列化方法将需要存储的对象转化为json字符串,然后再存入mysql中。在一些存储配置文件的场景下,我们需要在mysql中存储json。这是我们在使用时直接操控Config即可完成操作,不需要再将数据进行转换。Hook 是在创建、查询、更新、删除等操作之前、之后调用的函数。以上面的操作为例,我们可以为其添加钩子函数,并修改结构体。gorm提供了钩子函数,可以很好的解决这个问题。

2024-06-21 19:03:44 483

原创 十四届蓝桥杯国赛JavaB组部分题解

备战蓝桥杯期间的题解,如有错误的地方,欢迎指正。

2024-05-30 14:54:22 1093 2

原创 gin导出excel文件与cvs

go可以通过excelize包实现对excel的操作。

2024-05-14 22:01:19 749

原创 Mac使用Homebrew安装并配置Python环境

【代码】Mac使用Homebrew安装并配置Python环境。

2024-05-10 11:27:08 1126 2

原创 docker部署go项目

当服务器上没有go环境,又不想配置的时候,可以通过拉取go相关的镜像,运行项目当然你可以通过本地打包,上传至服务器,直接运行二进制文件。

2024-05-03 15:50:07 598 2

原创 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 884 1

原创 Go —— channel (二)

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

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

原创 Go —— defer

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

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

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

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

2024-03-23 21:20:45 1664

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

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

2024-03-23 21:19:42 743

原创 Go —— 逃逸分析

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

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

原创 Go1.22 for range新特性

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

2024-03-16 21:53:51 1092

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

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

2024-03-10 17:19:41 1493

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

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

2024-03-10 17:19:21 1008

原创 GoLand/Idea 项目目录缺失

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

2024-02-02 15:35:30 710 1

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

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

2024-02-02 15:33:54 959

原创 linux安装docker-compose

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

2024-01-28 17:13:12 544

原创 MySQL的执行流程

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

2024-01-21 22:04:09 527

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

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

2024-01-13 18:10:22 1168

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

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

2024-01-08 15:35:32 1480

原创 计算机网络—— 概述

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

2024-01-08 15:31:29 1423 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 283

JavaFX + MySql 实现学生信息管理系统

详情请看

2023-02-16

JavaWeb+Mysql实现简易商城系统

JavaWeb+Mysql实现简易商城系统,详情请看https://blog.youkuaiyun.com/Wksycxy/article/details/128623934

2023-01-30

Java小游戏-坦克大战

java实现坦克大战-课程设计期末作业,详情请看https://blog.youkuaiyun.com/Wksycxy/article/details/124668273

2023-01-02

html+css实现 英雄联盟(lol)页面

资源描述无法用图片展示(无奈),自行脑补

2023-01-02

html+css实现京东商城

利用html+css高度还原了京东商城页面

2023-01-02

空空如也

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

TA关注的人

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