博客园  :: 首页  :: 新随笔  :: 管理

摘要: Linux c/c++ 零声后端架构 1 C/C++ 基础 1.1.1 红黑树 1.1.2 磁盘存储链式的B树与B+树 1.1.3 海量数据去重的hash与BloomFilter 1.2.1 c++ 智能指针与右值引用 1.2.2 c++ 实现线程池 1.3.1 设计模式基础 1.3.2 结构型设计 阅读全文

posted @ 2022-09-22 23:33 wsg_blog 阅读(429) 评论(0) 推荐(0)

摘要: 笔试刷题 本次刷题主要以牛客网的面试必刷TOP101为主,题型难度循序渐进,分类比较合理;从之前的《剑指Offer》到现在的面试必刷top101、配套讲解,以及carl的代码随想录; 我的刷题记录:我的牛客、我的力扣 使用什么数据结构比较合适?数组还是vector还是list还是deque,stac 阅读全文

posted @ 2021-03-29 20:50 wsg_blog 阅读(398) 评论(0) 推荐(1)

摘要: 简介: 目前工作为nlp相关的分类及数据治理,之前也使用tensorflow写过一些简单分类的代码,感受到深度学习确实用处较大,想更加系统和全面的学习下tensorflow的相关知识,于是我默默的打开了b站;发现了一门比较好的视频课程: 深度学习框架Tensorflow学习与应用 ,看样子像是炼数成 阅读全文

posted @ 2020-02-11 12:12 wsg_blog 阅读(5331) 评论(2) 推荐(1)

2025年11月9日

摘要: cuda并行计算 阅读全文

posted @ 2025-11-09 00:45 wsg_blog 阅读(0) 评论(0) 推荐(0)

2025年11月6日

摘要: Attention及Transformer工作原理概述 这篇论文是目前所有大语言模型的基石,ChatGPT、DeepSeek等等,在图像领域也有不错的应用,可以说是继NN、CNN、RNN之后新一轮AI革命的引领者。 最核心的创新点就是提出了最核心的Transformer架构和Self-Attenti 阅读全文

posted @ 2025-11-06 19:09 wsg_blog 阅读(4) 评论(0) 推荐(0)

2025年6月20日

摘要: Linux c/c++ 高性能后端 ZMQ无锁消息队列 锁是解决并发问题的万能钥匙,可是并发问题只有锁能解决吗? CAS的含义 yqueue_t/ypipe_t无锁队列的设计原理 每次加入元素都动态分配节点对性能的影响(测试ypipe_t<int, 1000>, ypipe_t<int, 10>, 阅读全文

posted @ 2025-06-20 10:18 wsg_blog 阅读(55) 评论(0) 推荐(0)

2025年6月18日

摘要: Linux c/c++ 高性能后端 结构型设计模式 常用的有 单例、工厂,结构型设计模式代码 单例模式 保证一个类仅有一个实例,并提供一个该实例的全局访问点。——《设计模式》GoF 单例模式的对象通常和应用程序的生命周期是一模一样的,对于用户而言,我们不希望用户去new它或者delete它,因此我们 阅读全文

posted @ 2025-06-18 19:32 wsg_blog 阅读(11) 评论(0) 推荐(0)

2025年5月19日

摘要: Linux c/c++ 高性能后端 redis/memcached/nginx网络组件 网络编程关注的问题 连接的建立、连接的断开、消息的到达、消息发送完毕 连接的建立 分为两种:服务端处理接收客户端的连接;服务端作为客户端连接第三方服务; int clientfd = accept(listenf 阅读全文

posted @ 2025-05-19 23:19 wsg_blog 阅读(32) 评论(0) 推荐(0)

2025年5月11日

摘要: Linux c/c++ 高性能后端 RocksDB RocksDB 是 Facebook 的一个实验项目,目的是希望能开发一套能在服务器压力下,真正发挥高速存储硬件性能的高效数据库系统。这是一个 C++ 库,允许存储任意长度二进制 KV 数据。支持原子读写操作。 RocksDB 依靠大量灵活的配置, 阅读全文

posted @ 2025-05-11 22:48 wsg_blog 阅读(94) 评论(0) 推荐(0)

2025年5月9日

摘要: Linux C/C++服务器 TiDB TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (HybridTransactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩 阅读全文

posted @ 2025-05-09 22:40 wsg_blog 阅读(29) 评论(0) 推荐(0)

2024年3月26日

摘要: Linux C/C++服务器 tcp/ip定时器与滑动窗口 Posix API接口原理与网络状态 中介绍了网络的连接和断开过程,以及在不同情况下网络出现的各种状态;这次我们了解下网络在传输过程中如何保证数据的准确性(顺序性及完整性); 首先抛出三个问题: 1.tcp的数据如何发送和接收? 2.如何保 阅读全文

posted @ 2024-03-26 15:42 wsg_blog 阅读(22) 评论(0) 推荐(0)

2023年6月4日

摘要: Linux C/C++服务器 用户态网络协议栈(Netmap)设计实现 通常情况下网络协议栈中的数据链路层、网络层、传输层是由内核程序完成, 而用户态网络协议栈则由我们自己来完成,后边有Udp协议栈的设计实现过程 现实工作中几乎不用我们自己去实现协议栈,一般都会用开源的已验证过的协议栈, 自己实现需 阅读全文

posted @ 2023-06-04 22:38 wsg_blog 阅读(247) 评论(0) 推荐(0)

2023年5月14日

摘要: Linux c/c++ 高性能后端 锁与分布式数据库 分布式锁本质上是解决了分布式事务中隔离性问题 在分布式系统中,一个应用部署在多台机器当中,某些场景下,为了保证数据据一致性,要求同一时刻,同一任务只在一个节点上运行,即保证某个行为在同一时刻只能被一个线程执行;在单机单进程多线程环境,通过锁很容易 阅读全文

posted @ 2023-05-14 23:43 wsg_blog 阅读(78) 评论(0) 推荐(0)

2023年4月26日

摘要: Linux c/c++高性能 gRPC远程调用 RPC 即远程过程调用协议(Remote Procedure Call Protocol),可以让我们像调用本地对象一样发起远程函数调用,RPC凭借其强大的治理功能,成为解决分布式系统通信问题的一大利器。 gRPC可以实现跨语言的高效远程数据调用,基于 阅读全文

posted @ 2023-04-26 20:13 wsg_blog 阅读(93) 评论(0) 推荐(0)

2023年4月19日

摘要: Linux C/C++服务器 Redis缓存数据库 MySQL通常会作为我们项目中的主要数据库,因为每次增删改都会通过redolog进行落盘,因此它比Redis这种内存数据库的数据安全性要高一些,而且存储的数据量也更大; 但是由于MySQL读数据几乎都要去磁盘中查找,虽然有B+树,也有BufferP 阅读全文

posted @ 2023-04-19 13:12 wsg_blog 阅读(117) 评论(0) 推荐(0)

2023年4月15日

摘要: Linux C/C++ 高性能后端 C++11 新特性 C++11 中的thread、mutex、condition、function、bind等新特性,并使用这些新特性实现一个线程池 1. C++11 多线程 linux的线程函数在pthread.h中,c++对linux线程函数进行了类封装,使用 阅读全文

posted @ 2023-04-15 14:34 wsg_blog 阅读(210) 评论(0) 推荐(0)

2023年4月7日

摘要: Linux C/C++服务器 websocket协议与服务器实现 服务器需要主动推送(长连接)给客户端数据,通常使用websocket协议,比如股票信息实时数据等;websocket服务器为websocket协议+reactor实现 websocket协议与http协议对比,http协议是针对网页设 阅读全文

posted @ 2023-04-07 01:44 wsg_blog 阅读(128) 评论(0) 推荐(0)

2023年4月4日

摘要: Linux C/C++服务器 火焰图的生成原理与构建方式 1 火焰图简介 火焰图能做什么: 可以分析函数执行的频繁程度 可以分析哪些函数经常阻塞 可以分析哪些函数频繁分配内存 Flame Graph 原图路径:https://queue.acm.org/downloads/2016/Gregg4.s 阅读全文

posted @ 2023-04-04 21:22 wsg_blog 阅读(2297) 评论(0) 推荐(1)

2023年4月2日

摘要: Linux C/C++服务器 Redis协议与异步交互 redis网络层 io多路复用(单reactor)+非阻塞io 哪个管道先构成一个完整的数据包(读事件),谁就先得到处理; 1.一个数据包可能由多个读事件才能组装完成 2.管道就是连接 3.人推车相当于网络线程 redis pipeline r 阅读全文

posted @ 2023-04-02 02:07 wsg_blog 阅读(127) 评论(0) 推荐(0)

2023年4月1日

摘要: Linux C/C++服务器 结构型设计模式 结构型设计模式 单例模式 保证一个类仅有一个实例,并提供一个该实例的全局访问点。——《设计模式》GoF 单例模式的对象通常和应用程序的生命周期是一模一样的,对于用户而言,我们不希望用户去new它或者delete它,因此我们需要对用户隐藏它的构造和析构函数 阅读全文

posted @ 2023-04-01 23:07 wsg_blog 阅读(21) 评论(0) 推荐(0)

2023年3月31日

摘要: Linux C/C++服务器 Redis相关命令详解及原理 Redis 是 Remote Dictionary Service 的简称;也是远程字典服务; Redis 是内存数据库,KV 数据库,数据结构数据库; Redis 应用非常广泛,如 Twitter、暴雪娱乐、Github、Stack Ov 阅读全文

posted @ 2023-03-31 18:42 wsg_blog 阅读(62) 评论(0) 推荐(0)

2023年3月29日

摘要: Linux C/C++服务器 MySQL语句,索引,视图,存储过程 MySQL存储模型:所有数据都在磁盘中,只有少部分高频数据会在内存中,查询存储数据结构主要使用B+树 MySQL网络模型:IO多路复用select+阻塞的io ,命令处理为多线程并发处理的模式,默认并发线程最大数151个,使用短连接 阅读全文

posted @ 2023-03-29 23:17 wsg_blog 阅读(47) 评论(0) 推荐(0)

2023年3月27日

摘要: Linux C/C++服务器 C++智能指针与右值引用 智能指针、右值引用、STL 编译 版本比较低的编译器要指明c++11或c++14 g++ -o main main.cpp -std=c++11 g++ -o main main.cpp -std=c++14 1. 智能指针 智能指针主要解决以 阅读全文

posted @ 2023-03-27 20:58 wsg_blog 阅读(190) 评论(0) 推荐(0)

2023年3月22日

摘要: Linux C/C++服务器 MySQL事务原理分析 事务 事务的本质是并发控制的单元,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。类似于原子操作CAS 事务将数据库从一种一致性状态转换为另一种一致性状态;保证系统始终处于一个完整且正确的状态; 事务可由一条非常 阅读全文

posted @ 2023-03-22 18:36 wsg_blog 阅读(41) 评论(0) 推荐(0)

2023年3月21日

摘要: Linux C/C++服务器 MySQL索引原理及SQL优化 innodb 索引组成 一种有序的存储结构,按照单个或这多个列的值进行排序,目的是为了提升搜索效率 索引分类:主键索引、唯一索引、普通索引、组合索引、以及全文索引(elasticsearch) 主键选择 innodb 中表是索引组织表,每 阅读全文

posted @ 2023-03-21 18:39 wsg_blog 阅读(57) 评论(0) 推荐(0)

2023年3月18日

摘要: Linux C/C++服务器 连接池 创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加安全可靠。 这里讲的数据库,不单只是指Mysql,也同样适用于Redis 连接池的意 阅读全文

posted @ 2023-03-18 16:04 wsg_blog 阅读(80) 评论(0) 推荐(0)

2023年3月16日

摘要: Linux C/C++服务器 线程池 为什么需要线程池? 某类任务非常耗时(磁盘io、网络io或cpu密集任务),严重影响该线程处理其他任务 解决办法就是把这些耗时任务放到其他线程异步去执行,线程资源的开销与cpu核心之间做平衡选择 线程池的作用:复用线程资源,减少线程创建和销毁的开销;充分利用系统 阅读全文

posted @ 2023-03-16 18:02 wsg_blog 阅读(56) 评论(0) 推荐(0)

2023年3月15日

摘要: Linux C/C++服务器 内存池 内存池只能降低内存碎片的产生,并不会减少内存泄漏的风险 通常,我们都采用new或者malloc动态申请内存。一般来说,少量的操作不会造成什么影响,但是,如果我们频繁去申请内存块,会造成效率上的损失,更有甚者,会造成内存碎片的存在,从而影响系统的效率(所有程序都可 阅读全文

posted @ 2023-03-15 07:06 wsg_blog 阅读(37) 评论(0) 推荐(0)

摘要: Linux C/C++服务器 异步请求与协程 1.1 什么是异步? 什么是异步?什么是同步? 同步:为一发一收,发完之后阻塞等待回传数据,处理完成然后再发下一条 异步:一直发,commit提交请求接口会一直连续提交请求,有一个专门的等待回传数据的线程,这里我们用epoll来管理接收数据的fd 1.2 阅读全文

posted @ 2023-03-15 06:16 wsg_blog 阅读(62) 评论(0) 推荐(0)

2023年3月14日

摘要: Linux c/c++ 高性能后端 定时器的几种实现方案 定时器的应用 网络心跳检测 游戏技能冷却 倒计时 其他需要延时处理的功能 定时器的触发方式 网络事件和定时事件在一个线程处理 通常使用在定时任务比较少的场景,redis、nginx、memcached都是这样处理定时任务的,通常最多组织102 阅读全文

posted @ 2023-03-14 00:11 wsg_blog 阅读(89) 评论(0) 推荐(0)

2023年3月12日

摘要: Linux C/C++服务器 内存泄漏检测组件 调用malloc或者new,没有调用free或delete 内存泄漏检测组件 如何判断是否有内存泄漏 到底在哪行代码泄漏 本文介绍三种内存泄漏检测的方法 mtrace 宏定义 hook malloc mtrace mtrace是系统自带的内存检测接口, 阅读全文

posted @ 2023-03-12 04:12 wsg_blog 阅读(52) 评论(0) 推荐(0)

2023年3月11日

摘要: Linux C/C++服务器 死锁检测组件 死锁存在的条件 死锁,是指多个线程或者进程在运行过程中因争夺资源而造成的一种僵局,当进程或者线程处于这种僵持状态,若无外力作用,它们将无法再向前推进。如下图所示,线程 A 想获取线程 B 的锁,线程 B 想获取线程 C 的锁,线程 C 想获取线程 D 的锁 阅读全文

posted @ 2023-03-11 21:51 wsg_blog 阅读(97) 评论(0) 推荐(0)

2023年3月9日

摘要: Linux C/C++服务器 原子操作CAS与锁 1.互斥锁 2.自旋锁 3.读写锁 4.原子操作 5.shmem 多线程同时操作同一个变量问题 多线程执行 idx++,实际运行是转换成三行汇编代码去运行,绝大多数情况下没啥问题,如下图所示 但有一小部分会出现问题,如下 如何解决? 首先想到的就是加 阅读全文

posted @ 2023-03-09 23:15 wsg_blog 阅读(142) 评论(0) 推荐(0)