- 博客(257)
- 资源 (7)
- 收藏
- 关注

原创 [每周一更]-(第57期):用Docker、Docker-compose部署一个完整的前后端go+vue分离项目
其中,使用默认的 IPAM 驱动程序,并为网络分配了 177.7.0.0/16 的子网。通过 -v 挂载证书,通过-p 映射端口也是可以的,存在docker中有多个nginx的情况,就代理转发一下, 参考地址:Docker多nginx方案:https://juejin.cn/post/6847902222760558599#heading-11。另外,命令 docker system prune 可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。
2023-08-04 17:25:20
1106

原创 [每周一更]-(第15期):网络抓包神器-tcpdump
有时,我们的HTTP应用并不是开放在80端口上,而是使用了自定义端口方法:Wireshark主界面,Edit->Preferences…->Protocols,选中HTTP, TCP ports中添加新的自定义端口号。
2022-10-07 22:02:15
2624
3

原创 Nginx 网站使用 acme配置 DNS方式 https证书访问 泛域名
2020年写过一篇通过acme的http方式生成证书,热度很高,但是Nginx 网站使用 acme配置 https证书访问步骤主要是单域名证书申请,今天追加另一种DNS方式配置证书申请泛域名方式。安装 acme.sh这里不再赘述安装,直接参考:https://github.com/acmesh-official/acme.sh/wiki/How-to-install申请阿里云子账户(需要该域名的所有者开通子账户用户解析dns能力)第3步:生成泛域名证书:(会自动在域名所属服务器添加解析记录:_acme-c
2022-06-30 22:46:08
10131

原创 Nginx 网站使用 acme配置 https证书访问步骤
https://blog.ekanshu.com.cn 使用 acme配置 https访问错误信息由于之前配置过,从新使用名称更新配置文件的时候发现报错,信息如下做个记录,我们不深究先从新生成证书acme.sh --renew -d blog.ekanshu.com.cn[Tue Sep 1 17:15:35 CST 2020] Renew: 'blog.ekanshu.com.cn'[Tue Sep 1 17:15:36 CST 2020] Single domain='blog.ek
2020-09-03 17:45:05
74309
6

原创 Nginx配置移动端和电脑端自动双向跳转(301重定向的实际场景,附带apache配置)
Nginx配置移动端和电脑端自动双向跳转场景(其实也是301重定向的场景)pc端、www.ekanshu.com.cn 、 用于pc端访问移动端、m.ekanshu.com.cn、用于移动端访问需求在移动端访问www.ekanshu.com.cn和m.ekanshu.com.cn都跳转到m.ekanshu.com.cn实现方案判断客户端的设备类型要想让网站适配PC和手机设备,首先要能做出准确的判断。HTTP请求的Header中的User-Agent可以区分客户端的浏览器类型,
2020-09-03 11:35:38
10791
原创 [每周一更]-(第152期):Go中的CAS(Compare-And-Swap)锁原理详解
本文介绍了CAS锁(Compare-And-Swap Lock)的核心概念及其在Go语言中的实现与应用。CAS是一种基于原子比较交换操作的轻量级同步机制,属于自旋锁的一种实现方式,具有非阻塞同步、硬件支持和乐观锁策略等特点。文章详细阐述了CAS的工作原理、与互斥锁的区别、关键特性、典型应用场景(如计数器原子递增、无锁数据结构等)以及优缺点。通过Go语言代码示例展示了如何实现线程安全的计数器和简单的自旋锁。最后指出CAS是现代并发编程的基石,建议在简单操作中使用CAS,在复杂操作中使用Mutex,并注意竞争程
2025-07-27 16:24:09
687
1
原创 [每周一更]-(第151期):Go语言中的Map、Slice、Array和Hash原理详解
本文深入解析Go语言中三种基础数据结构的底层原理与性能特点。数组是固定长度的连续内存块,访问高效但灵活性差;切片基于动态数组实现,支持扩容但存在拷贝开销;map采用哈希表实现,提供快速查找但有内存开销。文章对比了三者的特性,并给出使用建议:数组适合固定数据,切片适合动态序列,map适合键值查找。最后指出高级优化技巧,如预分配容量、避免内存泄漏等。理解这些底层机制有助于编写更高效的Go代码。
2025-07-27 16:22:38
675
原创 [每周一更]-(第149期):给物种 “排座次”:你不知道的 “界门纲目科属种” 学问
摘要:文章介绍了生物分类学的七级体系"界门纲目科属种",这一沿用200多年的科学分类方法。从宏观的"界"到具体的"种",每个层级都体现了生物间的亲缘关系和特征差异。分类体系不仅帮助科学家系统认识生命,在医学、微生物研究等领域也有重要应用价值。随着基因技术的发展,分类学也在不断进化调整,成为理解生命世界的重要工具。
2025-07-27 16:18:13
748
原创 [每周一更]-(第148期):使用 Go 进行网页抓取:Colly 与 Goquery 的对比与思路
Go网页抓取工具对比:Colly、goquery与chromedp 本文对比了Go语言中三种主流网页抓取工具的特点和适用场景: Colly - 功能全面的爬虫框架 内置HTTP客户端和并发支持 适合大规模网站抓取 自动处理链接和分页 示例场景:电商网站商品信息爬取 goquery - 轻量级HTML解析库 提供jQuery式DOM操作 需配合net/http使用 适合静态页面解析 示例场景:单页数据提取 chromedp - 浏览器自动化工具 支持JavaScript渲染 可模拟用户交互 适合动态网页抓取
2025-07-27 16:15:28
972
原创 [每周一更]-(第147期):使用 Go 语言实现 JSON Web Token (JWT)
摘要:Go语言中的JWT身份验证实现指南 本文介绍了在Go语言中使用JSON Web Token(JWT)实现安全认证的完整流程。JWT由Header、Payload和Signature三部分组成,采用Base64编码,具有无状态、跨域支持等特点。文章详细解析了JWT的生成与验证机制,包括密钥管理、声明设置(如用户ID、角色和有效期)以及签名算法(如HMAC-SHA256)。通过具体代码示例展示了如何用github.com/golang-jwt/jwt库创建JWT令牌,并实现验证逻辑。最后还演示了如何将JW
2025-06-14 22:24:38
1116
原创 [每周一更]-(第146期):BigCache使用指南:打造高并发无GC压力的本地缓存
BigCache 高性能本地缓存解决方案 摘要: BigCache 是专为 Go 语言设计的高性能本地内存缓存库,特别适合大数据量、高并发场景。通过分片设计和避免 GC 开销的优化,它比标准 map 更高效,比 Redis 延迟更低。本文介绍了其核心特点: 性能优势:无 GC 压力、百万级 RPS 支持 适用场景:本地服务缓存热点数据(用户会话、商品详情等) 使用示例:包含基础操作和 JSON 自动序列化封装 对比分析:与标准 map 和 Redis 的特性差异 最佳实践:提供完整的 CacheManage
2025-06-14 22:22:13
937
原创 [每周一更]-(第145期):分表数据扩容处理:原理与实战
分表扩容策略与实现 随着数据量增长,单表性能瓶颈日益凸显,分表成为水平扩展的常见方案。本文探讨了分表扩容的核心要点: 分表时机 单表数据达千万级 查询/写入性能明显下降 特定表成为访问瓶颈 分表策略 范围分表:按时间/ID段划分,易维护但可能数据不均 哈希分表:数据分布均匀,但扩容复杂 业务维度分表:适合多租户系统 扩容实现 通过路由层(如示例中的ShardRouter)动态计算目标表 数据迁移采用分批处理(如示例迁移脚本) 支持新旧表并行,确保平滑过渡 关键设计 抽象路由逻辑,降低业务耦合 监控分表热点,
2025-06-14 22:19:41
1338
2
原创 [每周一更]-(第144期):Go 定时任务的使用:从基础到进阶
Go定时任务开发指南 本文介绍了Go语言中实现定时任务的多种方案: 原生time包方案 time.Ticker:适合固定间隔循环任务 time.After:实现单次延迟执行 推荐cron表达式方案 使用robfig/cron第三方库 支持标准cron语法(秒可选) 提供任务管理功能(添加/移除) 生产环境实践 推荐使用os.Signal实现优雅退出 避免单纯select{}阻塞导致问题 可结合context实现超时控制 进阶应用 多任务调度管理 业务逻辑封装 配置文件支持 项目示例展示了完整的企业级定时任务
2025-06-14 22:15:00
885
原创 [每周一更]-(第143期): Go工程师面试宝典:13类典型问题+11个高分答题案例
本文总结了Go工程师在开发过程中常见的几类问题及其解决方案,涵盖了语言特性、并发编程、网络/IO、工程实践、部署运维等方面。
2025-05-19 13:05:12
901
原创 [每周一更]-(第142期):MySQL执行链路深度解析:从SQL语句到结果返回的完整旅程
MySQL作为全球最流行的开源关系型数据库,其高效执行背后隐藏着复杂的内部机制。本文深入剖析了MySQL的执行链路,从客户端连接、SQL解析、查询优化到执行计划的执行和结果返回,揭示了MySQL的内部工作原理。MySQL采用客户端/服务器架构,通过线程池优化并发性能。SQL语句经过词法、语法和语义分析后,由优化器生成执行计划,执行引擎根据计划调用存储引擎API完成数据操作。InnoDB作为常用存储引擎,通过缓冲池和MVCC机制提升性能。最终,结果集通过协议包返回客户端,完成整个查询过程。理解MySQL的执行
2025-05-09 21:50:07
652
原创 [每周一更]-(第141期):MCP科普:解锁AI与外部世界的桥梁
近年来,人工智能领域的工具层出不穷,从ChatGPT的插件系统到LangChain的链式调用,再到各式各样的API和框架,AI的边界被不断拓宽。如今,一个全新的开源协议——**模型上下文协议(MCP)**横空出世,再次点燃了我们对AI潜力的想象。MCP不仅为AI模型与外部世界的交互提供了一个标准化的“接口”,还以其开源和灵活的特性,为开发者、企业和普通用户打开了无限可能的大门。在AI的浪潮中,我们持续摸索,每一次新工具的出现都是一次探索的机会,MCP正是这样一盏明灯,指引我们走向更智能、更互联的未来。
2025-04-29 11:12:32
792
原创 [每周一更]-(第140期):sync.Pool 使用详解:性能优化的利器
sync.Poolsync.Pool是一个非常有用的工具,特别适用于高并发场景中对象的复用,减少内存分配和垃圾回收的开销。它通过对象池化机制,使得临时对象能够被高效地复用,进而提高程序的性能。在使用时,应避免将那些不适合复用或者资源密集型的对象放入池中。临时对象复用优先用sync.Pool,长生命周期或资源敏感场景慎用。
2025-04-19 22:54:48
1385
原创 [每周一更]-(第139期):从FRP认识内网穿透及反向代理
该文章一直挂在TODO目录很久了,因为日常用远程桌面内网穿透场景比较多,但是毕竟不仅仅只有这个功能,今天就展开讲一讲,有需要的朋友可以参考,我所写的文章基本都是实战派,或者就是自己有使用场景,还是有参考价值,也欢迎大家来相互沟通。使用FRP,需要有一台有公网IP的云服务器,其上运行frps服务,客户端也就是受控的电脑,需要启动frpc服务,才能进行后续操作。通过FRP将内网Windows的3389端口或Linux的VNC服务映射到公网,实现外网远程控制。单端口代理多服务(如HTTP+HTTPS)。
2025-04-11 11:23:56
928
原创 [每周一更]-(第138期):MySQL 子查询详解:原理、应用及优化方案
是指嵌套在另一个 SQL 语句中的查询,它的执行结果可以作为主查询的输入。子查询可以用于。
2025-04-04 15:57:59
711
原创 [每周一更]-(第137期):Go + Gin 实战:Docker Compose + Apache 反向代理全流程
后来我确定应该是DNS解析问题,全貌应该是:泛域名解析到了B服务器中,A服务器又有a.xxx.com和b.xxx.com项目都正常运行,C服务器的api.xxx.com也运行很久了,并且ABC三台服务器都是同一个域名下,子域名的解析会覆盖泛域名的解析,也就是子域名优先级更高,这就解释通了。总结:由于再进行DNS解析,还需要找老板配置,并且还有单独配置项目,毕竟没有项目,这个逻辑就是想配置转发到ip+端口接口,这个就较为繁琐,不是最优方案,接着继续有最优方案。7.1、先排查域名所在的ip是哪个。
2025-03-21 18:41:13
984
原创 [每周一更]-(第136期):微信公众号模板消息全攻略,手把手教你高效触达用户!
提前设置好微信开放平台,绑定小程序和公众号;微信公众号中增加类目,并开通模版消息,添加到自己的模版消息中;通过小程序登录将小程序用户的openid和unionid存储下来;通过接口获取微信公众号中所有用户的openid,通过数据表存储openid及unionid的信息,如数据表:ar_wechat_auth;然后通过业务逻辑中查询到由用户的报告已出,就对应找到小程序中对应的unionid,再对比ar_wechat_auth表中unionid,找到openid;
2025-03-16 19:25:09
1276
3
原创 [工具分享]-短视频制作与 2C 推广:工具、内容与平台运营全解析
近期负责公司2C业务的运营推广,目前单从文本推送同步微博、小红书、知乎、微信公众号,阅读量明显不足,感觉传播形式太单一,想探索下短视频方式,列举一些可能用到的工具,学习共勉。
2025-02-28 18:00:15
690
原创 [每周一更]-(第135期):AI融合本地知识库(RAG),谁才是最强王者!
(检索增强生成)的缩写,是一种结合了信息检索和文本生成技术的AI方法。它在自然语言处理(NLP)领域中广泛应用,特别是在需要从大量数据中提取知识并生成准确、自然回答的场景下。本地部署与知识库的对于企业的意义最大,对于个人而言,也是一个能力放大器,也可以将个人能力无限放大。,它支持 DeepSeek + FAISS 直接在 UI 里管理知识库。能将用户提问结合一个个性化的知识库,整合起来生成答案给到用户。,避免幻觉(hallucination)。如果你想要更简便的方式,可以使用。,如果你希望更灵活,
2025-02-21 17:54:29
1025
原创 [每周一更]-(第134期):手把手教你在个人电脑部署 DeepSeek-R1 蒸馏模型!
关键词:Ollama、DeepSeek、LM Studio、AnythinkLLM、ChatBox、CherryStudio、Dify
2025-02-14 14:28:24
997
原创 [每周一更]-(第133期):Go中MapReduce架构思想的使用场景
在 Go 中,虽然没有内置的 MapReduce 框架,但我们可以利用 Go 的并发特性(如 goroutines 和 channels)来实现 MapReduce。在需要并发处理的场景中,例如查询数据库,MapReduce 可以将任务拆分成并发请求,从而减少处理时间并提高性能。大型数据集被分成较小的部分,由不同的机器或线程处理,然后合并。它的核心思想是将问题分解成多个较小的子问题并行处理,然后将结果合并。通过 Go 的并发模型,可以利用多个 CPU 核心实现 MapReduce 的并行计算。
2025-02-08 15:54:11
1293
原创 [每周一更]-(第132期):AI工具集对比
AI是指机器模拟人类认知功能的能力,比如学习(Learning)、推理(Reasoning)、感知(Perception)和行动(Action)等。WindsurfEditor是一款由Codeium开发的AI驱动代码编辑器,旨在提高开发者的生产力和编程体验。它结合了强大的AI代理和直观的协同工作功能,提供了智能代码补全、错误检测、代码重构等多种功能。GitHubCopilot是一个由GitHub和OpenAI联合开发的AI驱动代码助手,旨在帮助开发者更高效地编写代码。
2025-01-18 22:19:53
1385
原创 [每周一更]-(第131期):Go并发协程总结篇
Go语言的并发是通过协程(goroutine)实现的。Go协程是轻量级的线程,允许多个任务同时执行,且Go运行时会高效地管理它们。在Go中使用并发协程的方式非常简便,也很强大。
2025-01-12 21:23:28
613
原创 [每周一更]-(第130期):微服务-Go语言服务注册中心的中间件对比
服务提供者(RPC Server):在启动时,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态。服务消费者(RPC Client):在启动时,向 Registry 订阅服务,把 Registry 返回的服务节点列表缓存在本地内存中,并与 RPC Sever 建立连接。服务注册中心(Registry)
2025-01-03 19:11:44
1124
原创 [每周一更]-(第129期):Go微服务常用脚手架
微服务的技能,已经全面铺开了,感觉现在你是后端开发出门说没用过微服务,就跟没见过世面一样,虽然微服务也是看体量的,不合时宜的微服务搭建,也会耗费更多的成本,但:谁让领导爱看,同事爱探索呢!
2024-12-28 00:03:33
1211
原创 [每周一更]-(第128期):CentOS源码安装PostgreSQL
源码安装 PostgreSQL(pgSQL)是一种灵活的安装方式,适用于需要自定义配置或无法使用包管理器的情况。如果使用云服务器,还需要在云服务商控制台开放 5432 端口。我用的云服务器,需要添加端口;为了方便使用,可以将 PostgreSQL 的二进制路径添加到。选择需要的版本,下载源码包。脚本配置安装路径及其他选项。PostgreSQL 默认使用端口。配置文件(位于数据目录。,确保防火墙未拦截该端口。
2024-12-20 13:57:11
1336
原创 [数据库]-MySQL聚合函数从having开始
聚合函数(Aggregate Functions)是关系型数据库(如 MySQL、PostgreSQL、Oracle)中用于对一组值执行计算并返回单一结果的函数。:聚合查询会遍历大量数据,为了提高性能,可以基于索引优化,尤其是范围查询或分组计算时。窗口函数将聚合和行级别数据结合,使得每行都可以保留原始值,同时计算某些聚合结果。针对大规模数据量,可以使用分片聚合或分步聚合的方式,提高性能。将数据按总数划分为百分比分组,可以帮助分析数据的分布情况。:计算某列的平均值,例如平均薪资、平均评分。
2024-12-20 13:56:17
974
原创 [每周一更]-(第127期):Go新项目-Gin中使用超时中间件实战(11)
在项目不断迭代过程中,发现基础架构中,没有进行超时控制,有些接口由于网络延迟以及远程调用等情况存在请求时间过长的问题,消耗了资源,也降低了用户体验,这一讲我们聊下超时控制中间件,来完善我们的基础架构,这里我们采用Context来实现。在 Gin 框架中,如果某些接口需要明确的超时时间(例如避免长时间阻塞的请求),可以使用一个针对接口超时时间的中间件。这种中间件可以为每个请求设置一个上下文(context.Context),并通过 context.WithTimeout 来管理请求的生命周期。
2024-12-14 18:22:04
1303
原创 [每周一更]-(第126期):MQ解耦场景
消息队列(MQ)解耦是一种软件架构设计模式,主要通过中间件将系统中的生产者和消费者模块分离,减少模块之间的直接依赖,使系统具有更高的扩展性和灵活性。这种模式尤其适用于需要处理复杂业务逻辑、频繁请求或异步处理的场景。
2024-12-06 14:39:30
880
原创 [每周一更]-(第125期):模拟面试|NoSQL面试思路解析
候选主节点(Candidate Master):在选举过程中,任何节点都可以成为候选主节点。投票节点(Voting Node):参与主节点选举的节点。投票节点是具备选举资格的节点,但未必是当前主节点。投票节点可以被选为主节点。引入投票节点的原因是为了提高选举的可靠性和容错能力,确保在网络分区或节点故障的情况下,能够通过多数投票机制选举出有效的主节点。是指在写入操作完成后,数据最终被持久化到硬盘的时间点。保证数据一致性:确保所有写入操作在特定时间点被可靠地持久化。优化性能。
2024-11-29 11:30:14
1185
原创 [Go]-控制 Goroutine 数量的代码实现过程
Go在处理多任务的过程,很容易有通道并发操作,这里讲解一个常见的并发控制流程,通过控制Goroutine的数量,来防止过多的 Goroutine 会导致调度开销过高,甚至耗尽内存或文件描述符。的方式,实现了高效的并发任务调度,是 Go 并发编程中的经典模式之一。代码实现了一个固定 Goroutine 池来并发处理任务的模型。: 限制 Goroutine 的最大并发数量。
2024-11-26 10:05:01
1104
原创 [面试]-golang基础面试题总结
谷歌开发的一种系统编程语言。它具有内置的垃圾收集机制并支持并发。代码可以编译成单个可执行二进制文件,不需要添加库或运行时环境即可在服务器上执行。
2024-11-22 14:54:49
1131
原创 [每周一更]-(第124期):模拟面试|缓存面试思路解析
最少使用策略。缓存会优先淘汰访问频率最低的数据,即被访问次数最少的元素。:最近最少使用策略。优先淘汰一段时间内没有被访问的数据,即最近最少使用的元素。示例代码展示一个简单的 LRU 缓存,可以使用 Python 的python复制代码from collections import OrderedDictreturn -1self.cache.move_to_end(key) # 将访问的 key 移到末尾self.cache.popitem(last=False) # 删除最旧的# 使用示例。
2024-11-22 14:33:09
1453
原创 [Go]-sync.map使用详解
并不适合所有并发场景。对于读写比例相对均衡,且需要进行大量写操作的情况,使用传统的。时,可能会导致程序出现未定义的行为,比如数据竞争、程序崩溃等。当多个 goroutine 同时读写一个普通。遍历过程中会对每个键值对调用传入的函数。是 Go 语言中在并发环境下使用的安全映射类型。则专门设计用于在并发环境下安全地进行读写操作。:读取一个键对应的值。已经存在,则会更新对应的值。在 Go 语言中,普通的。存在,则返回对应的值和。中获取对应的值,如果。中删除对应的键值对。
2024-11-15 12:36:41
939
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人