- 博客(268)
- 收藏
- 关注
原创 golang slice源码阅读
Go语言中切片(slice)的核心实现机制:编译器将语法操作转换为runtime函数调用,切片结构包含数组指针、长度和容量。创建切片时,makeslice函数会进行内存分配和边界检查;扩容时,growslice函数通过nextslicecap计算新容量,并处理内存对齐等细节。当append操作触发扩容时,runtime会分配新内存并复制数据,同时确保容量增长遵循特定算法(通常双倍增长)。这些底层机制保证了切片操作的高效性和安全性。
2025-08-05 10:09:48
154
原创 计算机网络五层模型
计算机网络五层协议模型是介于OSI七层和TCP/IP四层之间的简化模型,用于描述网络通信中各层的功能。该模型包括:应用层(HTTP、FTP等)、传输层(TCP、UDP)、网络层(IP、ICMP等)、数据链路层(Ethernet、Wi-Fi等)和物理层(USB、光纤等)。物理层直接处理电信号或光信号的传输,涉及以太网、Wi-Fi等硬件标准。这一分层模型明确了各层的职责,便于网络通信的实现与维护。
2025-07-29 17:21:49
209
原创 Golang开发 进阶
本文介绍了Golang中的协程管理和常用开发工具。在协程部分,重点讲解了通过WaitGroup、Channel和Mutex实现并发控制,并提供了协程池的实现方案。Golang协程创建成本低,适合高并发场景。在开发框架方面,详细介绍了Gin Web框架的特点和使用方法,包括路由、中间件等功能,并分析了其高性能原因在于基于httprouter的路由实现。还介绍了Zipkin分布式链路追踪系统的作用原理,以及如何解决微服务架构中的调用链追踪问题。
2025-07-25 15:33:00
834
原创 线程 与 内核态
线程创建和切换需要内核态支持的原因包括:线程需在内核调度器中注册,内核才能直接管理CPU资源;线程栈空间设置涉及特权指令操作MMU,必须在内核态完成;线程切换需要保存和恢复完整的硬件上下文,这些操作都需内核权限。此外,内核还需管理系统资源,防止线程耗尽CPU时间和内存空间。这些核心功能决定了线程管理必须依赖操作系统内核的特权能力。
2025-07-25 15:22:14
178
原创 Grafana
Grafana是一款强大的开源数据可视化与监控平台,能够将来自数据库、应用程序等多种数据源的复杂数据转化为直观的图表和仪表盘。它作为"监控中枢",可整合Prometheus、InfluxDB、Elasticsearch等多种系统的数据,提供统一的可视化界面,有效打破数据孤岛,为运维、开发和业务分析提供有力支持。
2025-07-25 14:11:51
410
2
原创 redis 源码阅读
Redis源码阅读笔记 本文主要分析了Redis源码的核心结构和关键初始化流程: 核心目录结构 src/:核心源代码目录 deps/:第三方依赖库 tests/:测试代码 redis.conf:默认配置文件 Makefile:编译入口 关键初始化流程 随机数生成:使用微秒级时间戳确保容器环境下的随机性 umask处理:早期存储权限掩码避免竞态条件 系统初始化: 哈希种子设置 哨兵模式检测 配置初始化 ACL权限系统初始化 重启机制:保存执行路径和参数用于服务重启 哨兵模式:特殊初始化流程 技术亮点 采用Me
2025-07-24 18:48:31
1070
原创 TDSQL
腾讯云TDSQL是一款金融级分布式数据库,提供强一致性、高可用和海量数据处理能力。其产品线包括基于MySQL的TDSQL-C(核心业务)、PostgreSQL的TDSQL-P(数据分析)和Serverless版,支持HTAP混合负载。相比Oracle,TDSQL采用x86服务器和云服务模式,成本显著降低。具备水平扩展能力,兼容MySQL/PostgreSQL生态,适合金融、政企等场景。但需注意其不完全兼容Oracle特有功能,迁移成本需评估。
2025-07-22 10:54:28
795
原创 Doris
Apache Doris是一款基于MPP架构的实时分析型数据库,支持亚秒级查询响应,适用于多种数据分析场景(如实时直播间报表、交互式分析等)。其核心特点包括: MPP并行处理:数据分区分桶后分布式并行计算,提升查询效率; 高效存储:通过聚合键、分区裁剪和布隆过滤器优化查询性能; 易用性:兼容MySQL协议,支持标准SQL。 示例展示了直播用户行为表的建表语句,体现了分区策略、分布式存储和性能优化设计(如副本分配、内存索引)。适用于分钟/秒级报表场景,与Redis/Kafka互补构建实时数据处理体系。
2025-07-14 23:26:17
275
原创 云原生 Cloud Native
云原生是一套构建弹性云应用的理念与技术集合,包含容器化(Docker)、服务编排(K8s)、微服务架构和DevOps实践四大支柱。它能实现快速部署、弹性伸缩、自动容灾等云环境核心能力,已成为后端开发的新基础设施标准。相关技术生态还涵盖服务网格、监控日志、配置中心等辅助组件。虽然不要求立即精通,但开发者需要逐步掌握这套云时代的技术体系。
2025-06-26 15:58:50
425
原创 K8s: Kubernetes
Kubernetes (K8s) 是一个开源容器编排平台,用于自动化管理容器化应用的部署、扩缩、负载均衡和健康检查。它解决了容器重启、请求分发、自动扩容和无中断更新等核心问题。K8s 核心能力包括部署管理、服务发现、滚动更新、自我修复和水平扩缩容,通过 Pod、Service、Deployment 等组件实现自动化管理。典型操作流程是通过 YAML 定义应用配置,使用 kubectl 命令部署。示例展示了如何定义 Deployment(控制容器副本)和 Service(暴露服务端口),支持 ClusterI
2025-06-26 14:53:11
810
原创 MySQL 分页查询列表;Explain ;深度分页 ;管理系统,筛选系统
摘要:文章分析了千万级数据查询中的性能问题,重点探讨了InnoDB引擎计数耗时、深度分页问题及索引优化。通过EXPLAIN命令解析查询计划,说明索引选择对性能的影响,并介绍ANALYZE TABLE统计信息的作用。结合实际场景(如B端管理系统),指出低并发高数据量的业务特性,提出分表分库、冷热数据拆分等解决方案。文中还提供了索引类型对比和EXPLAIN结果解读,帮助优化大表查询性能。
2025-06-20 12:18:57
821
原创 cpper 转 Golang
Go语言是一种现代编程语言,由Google于2009年发布,特别适合云原生、微服务和高并发场景。与C++相比,Go拥有更简单的语法,内置协程调度器、GC和跨平台编译能力。其核心特性包括轻量级协程(Goroutine)、高效的M:N调度器(GPM模型)和通道(Channel)通信机制。Go的runtime系统自动处理系统调用和任务调度,使开发者无需关注底层细节。此外,Go支持结构体、继承、接口多态等面向对象特性,并通过空接口实现万能类型。这些特点使Go成为构建高性能分布式系统的理想选择。
2025-06-02 15:40:57
1062
5
原创 【黑马点评】redis实战
本文介绍了Redis在Java客户端的应用与实战场景。Redis作为高性能数据库,在短信登录、达人探店、好友关注、用户签到、UV统计、附近商户和优惠券秒杀等场景中发挥着关键作用。 短信登录:利用SET命令设置带过期时间的验证码,通过INCR+EXPIRE实现限流防刷。 达人探店:使用List存储最新点赞记录,SortedSet实现排行榜功能。 好友关注:通过Set集合运算高效处理关注关系,计算共同关注和推荐关注。 用户签到:BitMap以极小空间存储每日签到状态,BITCOUNT统计签到次数。 UV统计:H
2025-05-25 19:51:07
1105
原创 Cookie 与 Session;OAuth2
本文对比了常见的客户端和服务端存储技术。Cookie是浏览器保存的小数据(约4KB),每次请求自动发送给服务端,可设置过期时间;Session是服务端存储的会话状态,通常配合Cookie使用。常用机制还包括:LocalStorage(浏览器本地永久存储)、SessionStorage(页面关闭消失)、Redis中的Session(支持分布式持久化)以及数据库登录状态(如JWT的无状态认证)。这些技术在持久性、存储位置和生命周期上各有特点,适用于不同场景。
2025-05-24 20:50:50
446
原创 MongoDB
MongoDB 使用 B+ 树存储索引,有MySQL基础可以来速通。MongoDB 是一个基于文档的 NoSQL 数据库,使用类似 JSON 的文档模型存储数据,具有灵活性和高性能的特点。它最初由 10gen 公司于 2007 年开发,2009 年开源,旨在应对大数据量和高性能需求。MongoDB 支持多种操作,包括数据库的创建与删除、集合的创建、文档的插入与查询等。查询时可以使用比较操作符、逻辑操作符、正则表达式等,并支持排序、分页和投影功能。
2025-05-22 00:02:38
1122
原创 Docker
Docker 是一个开源的容器化平台,能够将应用程序及其依赖项打包在轻量级、可移植的容器中运行,实现跨环境一致性部署。其核心原理基于 Linux 内核的命名空间(Namespace)、控制组(Cgroups)和联合文件系统(UnionFS),提供进程隔离、资源控制和镜像构建功能。Docker 的主要组件包括 Docker Client、Docker Daemon、Docker Image 和 Docker Container。典型应用场景包括微服务部署、持续集成/持续部署(CI/CD)、测试环境搭建和多版本
2025-05-21 20:22:03
555
原创 什么是着色器 Shader
本文介绍了OpenGL中的顶点着色器(vshader)和片元着色器(fshader)的作用及其代码示例。顶点着色器负责将物体从模型空间转换到屏幕空间,处理顶点的位置、颜色、法线等信息,并输出给片元着色器。片元着色器则结合光照和纹理,计算屏幕上每个像素的最终颜色。文章通过代码示例详细展示了如何实现这些功能,并解释了Phong光照模型和纹理融合的基本原理。通过调试和修改这些着色器代码,可以更好地理解图形渲染的过程。
2025-05-18 23:54:54
933
原创 从零启动 Elasticsearch
elastic 有弹力的ElaticSearch (ES)是一个基于 Lucene 的分布式全文检索引擎。可以做到近乎实时地存储、检索数据,并且本身具有良好的扩展性,可以扩展到上百台服务器,处理PB级别(1 Petabyte = 1024TB)的数据。ES 常用于日志分析、全文搜索、安全智能、业务分析和运维智能等场景。
2025-05-18 17:15:45
465
原创 SZU 编译原理
本文总结了文法分类和语法分析方法。乔姆斯基将文法分为4类;语法分析分为自顶向下(递归下降、LL(1))和自底向上(LR系列)两类方法。递归下降分析通过递归函数匹配输入,LL(1)利用预测分析表提高效率。自底向上方法如SLR(1)、LALR(1)通过状态归约处理更复杂文法。不同方法在分析方向、前瞻符号数和适用场景上各有特点,为编译器前端设计提供了理论基础。
2025-05-16 23:28:09
843
1
原创 java @注解;反射可读取注解然后执行其他方法
Java中的注解是一种标记,用于为代码添加额外信息,其字节码保存在.class文件中,并可通过反射机制读取。通过定义和使用自定义注解,可以在类和方法上添加特定信息,并在运行时通过反射扫描和处理这些注解。Class类是Java反射机制的核心,每个被JVM加载的类都有唯一的Class对象,用于在运行时获取类的结构、方法和字段等信息,并进行实例化和方法调用。Spring框架通过IOC容器管理对象实例,避免频繁创建复杂对象,开发者只需通过注解(如@Autowired)声明依赖,Spring会自动注入已创建的对象,提
2025-05-16 12:25:55
312
原创 Linux proc文件系统 内存影射
本文介绍了常见的内存分配函数和用户进程的内存空间分配算法。C标准库中的malloc、calloc、realloc和free用于动态内存管理,而Linux系统调用mmap和munmap则用于更灵活的内存分配和释放,特别是大内存块。通过/proc/pid/目录下的文件(如maps、status、smaps)可以查看进程的内存映射和状态信息。用户进程的内存分配通常采用离散分配算法,如分页存储管理,以解决内存碎片问题。实验通过分配和释放大内存块,观察/proc/pid/maps的变化,验证了内存分配的离散性和碎片化
2025-05-14 21:49:24
776
原创 java HashMap,高效 &哈希
当进行扩容时,容量 n 变为原来的 2 倍,新的索引计算方式变为 (2n - 1) & hash。扩容后只多一个 1 位。
2025-05-01 20:12:47
328
原创 redis
Redis 是内存数据库,但是它为数据的持久化提供了两个技术—— 「 AOF 日志和 RDB 快照 」同时讲解【黑马程序员-点评】项目的实战场景。
2025-04-28 19:52:51
1143
原创 看一看 中间件Middleware
中间件(Middleware)是介于操作系统与应用程序之间的一层软件它为分布式应用程序提供了统一的通信、数据交换、服务调用、消息传递等能力。它的作用就像“胶水”,连接各个系统组件。
2025-04-24 13:52:58
1161
原创 HTTP HTTPS RSA
用摘要算法(哈希函数)来计算出内容的哈希值对方也对内容计算,比较两个哈希值。通过「私钥加密,公钥解密」的方式,保证消息不会被冒充(但是公钥仍可能是中间人冒充的 —— 中间人攻击!
2025-04-15 13:04:43
977
原创 中文编码,GB系列,UTF
UTF-8:全球使用最广泛的编码方式,支持所有语言字符,兼容ASCII。中文在UTF-8中通常用3个字节表示一个汉字。UTF-16:每个字符使用2个字节(或者4个字节)表示,空间效率高但不兼容ASCII。UTF-32:每个字符固定使用4个字节,使用简单但空间占用大。一个字节,但其实只用了一半: 128个字符。和ASCII是兼容的。
2025-04-13 19:39:52
293
原创 【c++比较器】 priority_queue初始化设置比较器 ; unordered_map 自定义哈希函数
往往算法可能需要自定义比较逻辑(如 dijkstra需要比较对应路径的长度)重写方法:注意都是子节点跟父节点比(堆一般是二叉树)template<class T,这里的 Compare 是一个类型(class),而模板本来也是类型STL是这样使用他的// 默认构造一个比较器对象if (comp(a, b)) { ... } // 用这个对象来比较像 std::pair<int, int> 这样的类型标准库没有默认的 std::hash 特化,因此需要自己提供一个哈希函数。
2025-04-10 00:00:08
554
原创 c++11新特性
类内成员初始值“委托构造函数”:允许一个构造函数在其初始化列表中调用同类中的另一个构造函数int x = 0;// 成员初始化MyClass() : MyClass(42) {} // 委托构造函数。
2025-04-08 20:28:58
1086
空空如也
样例从记事本复制到cmd没换行咋办
2022-12-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人