- 博客(113)
- 资源 (1)
- 收藏
- 关注
原创 魔兽世界服务端TrinityCore连接池源码剖析
魔兽世界服务器中数据库使用mysql来存储,并且数据库模块是直接嵌入在serve中,并没有单独的DB server
2024-08-24 13:41:11 1717 6
原创 CMake + graphviz生成目标依赖图
本文介绍如何利用CMake的--graphviz选项生成.dot文件,再通过graphviz的dot工具将其转换为PNG图片,以直观展示CMake项目的构建依赖关系
2024-08-21 21:23:54 355
原创 C++ STL unique_ptr智能指针源码剖析
unique_ptr的删除器默认使用delete直接释放内存unique_ptr与shared_ptr不同,unique_ptr有删除器,shared_ptr没有unique_ptr底层使用tuple存储相关信息,由于是独占式,所以没有引用计数uple`存储相关信息,由于是独占式,所以没有引用计数使用new创建一个对象,而不是STL空间配置器,原因是unique_ptr的默认删除器使用delete。
2024-07-01 10:17:11 1341
原创 通过源码抽丝剥茧理解enable_shared_form_this/shared_ptr/weak_ptr智能指针实现原理
通过源码抽丝剥茧理解enable_shared_form_this/shared_ptr/weak_ptr智能指针实现原理
2024-07-01 10:15:39 1993
原创 个人搭建cppreference网站
近日,由于购买的腾讯云服务器要过期了,之前在服务器键的cppreference也要重新搭建,故写下此文章cppreference官网需要科学上网,中国版的访问速度也慢,故自己WSL子系统简单搭一下是个不错的选择。
2024-06-29 16:34:25 1423
原创 Linux Doxygen快速生成文档
此前写过一篇编写Doxygen格式的注释以用于生成文档,点击以查阅,,但是当时用的windows桌面版的doxygen,最近使用ubuntu编写代码想直接使用doxygen生成,故写下此博客。
2024-06-29 16:32:12 1874
原创 十分钟掌握redis精髓指令
Redis是一个开源的高性能键值对存储数据库,常用于缓存、消息队列等场景。通过您的博客,读者可以快速了解Redis的基本使用方法以及一些常见的应用场景和注意事项。
2024-03-23 20:40:15 2042
原创 使用Valgrind的Memcheck检测c++内存泄露
Valgrind是一个开源工具集,用于调试和优化程序。其中最知名的工具之一是Memcheck,它可以检测内存泄漏、使用未初始化的内存、越界访问以及其他内存相关错误。内存泄露是编程中常见的问题,特别是在使用C或C++等需要手动管理内存的语言中。内存泄露指的是程序未能释放不再使用的内存,导致随着时间的推移,应用程序消耗的内存量不断增加。长时间运行的应用程序尤其容易受到内存泄露的影响,可能会导致系统资源耗尽,甚至应用程序崩溃。因此,及时检测并解决内存泄露问题至关重要。
2024-03-23 20:32:05 1485 3
原创 Git进阶指南
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。本教程介绍了 Git 的基本概念、安装配置、常用命令和与 SVN 的区别,以及 Git 的优势和特点。
2024-03-21 10:14:56 2025
原创 GDB界面调试CGDB快速上手
CGDB 是一个基于 GNU Debugger(GDB)的 Curses(字符用户界面)前端。它提供了一个类似于文本编辑器的界面,可以帮助用户更轻松地执行调试操作,而无需离开终端。
2024-03-21 10:11:23 1745
原创 Docker 极简入门指南
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
2024-03-20 12:04:13 1831
原创 Nginx高级数据结构之共享内存ngx_shm_t
共享内存是Linux下提供的最基本的进程间通信方法,它通过mmap或者shmget系统调用在内存中创建了一块连续的线性地址空间,而通过munmap或者shmdt系统调用可以释放这块内存。使用共享内存的好处是当多个进程使用同一块共享内存时,在任何一个进程修改了共享内存中的内容后,其他进程通过访问这段共享内存都能够得到修改后的内容。
2024-03-20 11:59:31 1564
原创 Nginx线程池源码剖析
对NGINX而言,线程池执行的就是配货服务的功能。 它由一个任务队列和一组处理这个队列的线程组成。 当工作进程需要执行一个潜在的长操作时,工作进程不再自己执行这个操作,而是将任务放到线程池队列中,任何空闲的线程都可以从队列中获取并执行这个任务。
2024-03-19 08:13:58 1721
原创 Nginx高级数据结构动态数组源码剖析
> 本博客于学习nginx时刚好看了几眼nginx动态数组的实现源码,故记录一下> 其实动态数组的实现原理核心都大差不差,推荐看看C++ STL(SGI)的vector更好
2024-03-19 08:11:46 1665
原创 Nginx底层基础数据结构
1.ngx_int_t 2.ngx_str_t 3.ngx_list_t 4.ngx_table_elt_t 5.ngx_buf_t 6.ngx_chain_t
2024-03-18 10:27:18 2194 2
原创 Nginx指令配置大全
全局块是默认配置文件从开始到events块之间的一部分内容,主要设置一些影响Nginx服务器整体运行的配置指令,因此,这些指令的作用域是Nginx服务器全局。通常包括配置运行Nginx服务器的用户(组)、允许生成的worker process数、Nginx进程PID存放路径、日志的存放路径和类型以及配置文件引入等。
2024-03-18 10:24:53 2338 2
原创 轻松玩转消息通信:SimpleAmqpClient 和 RabbitMQ 在C++中的终极指南
SimpleAmqpClient是一个C++库,旨在简化处理AMQP消息的过程。AMQP是一种用于消息传递的开放式标准协议,它允许不同应用程序之间的可靠通信。SimpleAmqpClient使得在C++应用程序中轻松实现AMQP消息处理变得简单。
2024-03-16 13:00:33 2921 2
原创 SRPC快速入门 - Sogou基于Workflow的自研RPC框架
RPC(Remote Procedure Call),远程过程调用,它把网络交互类比为client调用server上的函数。RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC 框架需提供一种透明调用机制,让使用者不必显式的区分本地调用和远程调用。
2024-03-16 12:57:37 1973
原创 Linux网络瑞士军刀 nc(netcat)
nc(netcat)是一个短小精悍、功能实用、简单可靠的网络工具,主要有如下作用:(1)端口侦听,nc 可以作为 server 以 TCP 或 UDP 方式侦听指定端口;(2)端口扫描,nc 可以作为 client 发起 TCP 或 UDP 请求;(3)机器之间传输文件;(4)机器之间网络测速。nc 通过在两台机器之间建立连接来完成很多网络功能,数据传输、网络连接、端口扫描等,也有助于我们进行网络调试,排查网络故障。
2024-03-15 10:13:55 2159
原创 c++使用ppconsul库实现Consul服务注册与发现集成
Consul是一个用于服务发现、健康检查和动态配置的工具,使得分布式系统中的服务能够轻松地相互发现和通信。ppconsul是一个用于C++的库,为开发者提供了与Consul进行交互的简单而强大的接口。
2024-03-15 10:11:38 2408 1
原创 CSS万字学习总结
1.样式表 2.选择器 3.颜色 4.文本 5.字体 6.背景 7.边框 8.元素展示格式 9.内边距与外边距 10.盒子模型 11.位置 12.浮动 13.flex布局
2024-03-13 15:07:56 2489
原创 Linux tcpdump抓包转Wireshark 分析
tcpdump 是Linux系统下的一个强大的命令,可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,本文将展示如何使用 tcpdump 抓包,以及如何用 tcpdump 和 wireshark 分析网络流量命令行参数解析
2024-03-12 13:42:01 3316
原创 通过拦截器和metadata机制实现grpc的auth认证
grpc metadata拦截器metadata拦截器身份验证metadata拦截器。
2024-03-12 13:37:08 1433
原创 grpc的metadata机制
gRPC让我们可以像本地调用一样实现远程调用,对于每一次的RPC调用中,都可能会有一些有用的数据,而这些数据就可以通过metadata来传递。metadata是以key-value的形式存储数据的,其中key是 string类型,而value是[]string,即一个字符串数组类型。http中header的生命周周期是一次http请求,那么metadata的生命周期就是一次RPC调用。通过添加元数据,向服务器传递特定的信息,例如授权令牌、用户标识、链路追踪ID等。随后可以通过for range取出数据。
2024-03-11 17:23:26 1762 2
原创 grpc的验证器
在使用grpc库时候 ,很多时候我们需要对反序列化的参数进行校验,代码中有很多参数校验的代码,如果手动实现,会非常繁琐,对于grpc来说,在定义proto的时候使用直接定义参数的限制规则是一种更合理、更优雅的方式,插件就是来帮助我们实现这一功能的,使用 proto-gen-validate 生成后的代码进行参数校验,我们可以通过在 proto 中编写参数校验规则,然后生成代码,通过中间件自动的进行校验。}];// 参数必须大于 0// 参数必须在 0 到 120 之间。
2024-03-11 17:19:56 1965
原创 grpc四种数据流
### 1.简单模式这种模式最为传统,即客户端发起一次请求,服务端响应一个数据,这和大家平时熟悉的rpc没什么区别,所以不在详细介绍### 2.服务端数据流模式这种模式是客户端发起一次请求,服务端返回一段连续的数据流。典型的例子是客户端向服务端发送一个股票代码,服务端就把该股票的实时数据源源不断的返回给客户端。### 3.客户端数据流模式与服务端数据流模式相反,这次是客户端源源不断的向服务端发送数据流,而在发送结束后,由服务端返回一个响应。典型的例子是物联网向服务器报送数据。
2024-03-10 13:03:54 1764
原创 gorm快速上手
ORM全称是:Object Relational Mapping(对象关系映射),其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来。举例来说就是,我定义一个对象,那就对应着一张表,这个对象的实例,就对应着表中的一条记录。 对于数据来说,最重要最常用的是表:表中有列, orm就是将一张表映射成一个类,表中的列映射成类中的一个类。java 、python,但是针对go语言而言,struct,就是列如何映射,是因为列可以映射成struct中的类型,int->int,但是有另一个问题?
2024-03-08 10:25:08 1976
原创 GO基础记录
小驼峰相当于private,大驼峰相当于public(针对于不同的包之间)添加需要用到但go.mod中查不到的模块,删除未使用的模块(推荐)),那么需要启动一个goroutine去读取。分为有缓冲和无缓冲,如果需要使用无缓冲(在import文件前面可以声明包的别名。go实现继承需要以匿名的形式嵌入结构体。是一个原子包,里面提供了很多原子方法。go在同一级目录下包名要一致,指令可以安装库,自动安装依赖。不能在放值,但是可以取值,
2024-03-07 10:46:05 1809
原创 探索 Linux 下的内存映射(mmap):原理、应用与实践
本文将深入探讨 Linux 操作系统下的内存映射技术(mmap),从基本原理到实际应用,全方位介绍 mmap 在系统编程中的重要性和灵活性。我们将解释 mmap 的工作原理,探讨它在提高 I/O 性能、共享内存、进程间通信等方面的应用,以及如何在实际项目中正确、高效地使用 mmap。无论您是系统编程新手还是有经验的开发者,本文都将为您提供深入理解 mmap 的视角和实用技巧。
2024-03-07 10:44:08 4210
原创 Linux永久配置vcpkg头文件和库文件目录路径的方法
在进行编程开发时,经常需要使用各种头文件和库文件。然而,有时候我们需要将自定义的头文件和库文件路径添加到系统中,以便编译器和链接器能够找到它们。本文将介绍如何永久地将自定义的头文件和库文件目录路径添加到系统中,使得它们在每次编译和链接时都能被正确地找到,从而提高开发效率和便捷性。通过本文,您将学会在Linux和Unix系统中设置环境变量以及编辑相关配置文件的方法,从而实现头文件和库文件路径的永久生效,为您的编程工作带来便利。
2024-03-06 20:10:11 1778
原创 c++ pimpl惯用法
Pimpl(Pointer toimplementation) 是一种减少代码依赖和编译时间的C++编程技巧,其基本思想是将一个外部可见类(visible class)的实现细节(一般是所有私有的非虚成员)放在一个单独的实现类(implementation class)中,而在可见类中通过一个私有指针来间接访问该实现类。(如将接口和实现分离,实现信息隐藏减少头文件中的依赖实现库的平滑升级(实现文件有变动,只需要替换动态库即可)编译防火墙(只要头文件不变,第三方产品不需要重新进行编译的)
2024-03-06 20:07:45 1564
原创 workflow系列教程(9)wfrest之mysql任务
MySQL接口目前支持多种模式基础模式是暴露json接口,可以选择自己剪枝来发送或处理。还有cursor接口,更加高效灵活操作MySQL返回的结果。
2024-03-05 15:12:36 2200
原创 workflow系列教程(7)mysql任务
用户可以使用WFTaskFactory创建MySQL任务,创建接口与回调函数的用法都与workflow其他任务类似:用户创建完WFMySQLTask之后,可以对req调用 set_query() 写入SQL语句。如果没调用过 set_query() ,task就被start起来的话,则用户会在callback里得到WFT_ERR_MYSQL_QUERY_NOT_SET。其他包括callback、series、user_data等与workflow其他task用法类似。
2024-03-04 14:53:40 2196
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人