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

摘要: Linux C/C++ 高级架构师 1 C/C++ 基础 1.1.1 红黑树 1.1.2 磁盘存储链式的B树与B+树 1.1.3 海量数据去重的hash与BoomlFilter 1.2.1 创建型设计模式 1.2.2 结构型设计模式 1.3.1 c++11 智能指针与右值引用 1.3.2 c++11 阅读全文

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

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

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

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

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

2024年3月26日

摘要: Linux C/C++服务器 tcp/ip定时器与滑动窗口 阅读全文

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

2023年6月4日

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

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

2023年5月14日

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

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

2023年4月26日

摘要: Linux C/C++服务器 gRPC远程调用 RPC 即远程过程调用协议(Remote Procedure Call Protocol),可以让我们像调用本地对象一样发起远程调用。RPC 凭借其强大的治理功能,成为解决分布式系统通信问题的一大利器。 gRPC是一个现代的、高性能、开源的和语言无关的 阅读全文

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

2023年4月19日

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

posted @ 2023-04-19 13:12 wsg_blog 阅读(67) 评论(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 阅读(142) 评论(0) 推荐(0) 编辑

2023年4月7日

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

posted @ 2023-04-07 01:44 wsg_blog 阅读(93) 评论(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 阅读(1529) 评论(0) 推荐(0) 编辑

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 阅读(79) 评论(0) 推荐(0) 编辑

2023年4月1日

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

posted @ 2023-04-01 23:07 wsg_blog 阅读(11) 评论(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 阅读(30) 评论(0) 推荐(0) 编辑

2023年3月29日

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

posted @ 2023-03-29 23:17 wsg_blog 阅读(28) 评论(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 阅读(120) 评论(0) 推荐(0) 编辑

2023年3月22日

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

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

2023年3月21日

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

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

2023年3月18日

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

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

2023年3月16日

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

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

2023年3月15日

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

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

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

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

2023年3月14日

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

posted @ 2023-03-14 00:11 wsg_blog 阅读(59) 评论(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 阅读(27) 评论(0) 推荐(0) 编辑

2023年3月11日

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

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

2023年3月9日

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

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

2023年3月8日

摘要: ### [Linux C/C++服务器](https://www.cnblogs.com/go-ahead-wsg/p/16721232.html) # Posix API接口原理与网络状态 > 整理网络相关的各个状态和相关接口的工作原理 - tcp建立连接 - tcp数据传输 - tcp断开连接 阅读全文

posted @ 2023-03-08 04:22 wsg_blog 阅读(143) 评论(0) 推荐(0) 编辑

2023年3月7日

摘要: Linux C/C++服务器 http服务器的实现 http服务器说的是在reactor网络io框架基础上加上http协议,实现可与浏览器交互的后端服务,reactor在之前有介绍,下面我们先来看看http协议都有哪些东西 http协议 http消息分两部分,一个是客户端请求消息,一个是服务器响应消 阅读全文

posted @ 2023-03-07 04:25 wsg_blog 阅读(269) 评论(0) 推荐(0) 编辑

2023年3月4日

摘要: Linux C/C++服务器 reactor的原理与百万并发 五元组 五元组:sip,sport,dip,dport,proto 源IP,源端口,目的IP,目的端口,协议 tcp的端口最大支持65536个,客户端和服务端ip都是固定的,为了测试百万并发,我们使用65536个客户端的端口,使用100个 阅读全文

posted @ 2023-03-04 03:40 wsg_blog 阅读(75) 评论(0) 推荐(0) 编辑

2022年11月26日

摘要: index 数据结构与算法 十大经典排序 阅读全文

posted @ 2022-11-26 20:52 wsg_blog 阅读(9) 评论(0) 推荐(0) 编辑

2022年10月28日

摘要: Linux C/C++服务器 网络io与select、epoll 网络io是什么?是网络连接的input与output,也就是socket,更进一步说就是fd 阻塞与非阻塞 io多路复用,检测io是否有事件(可读、可写) 同步与异步 头文件与listenfd的监听模块 不管select还是epoll 阅读全文

posted @ 2022-10-28 21:32 wsg_blog 阅读(64) 评论(0) 推荐(0) 编辑

2022年10月21日

摘要: Linux C/C++服务器 创建型设计模式 学好设计模式需要对业务的稳定点和变化点有深刻的认识:业务的哪部分为稳定点,哪部分为变化点,从而进行合理的抽象,慎用设计模式,除非有明确的思路设计模式更好的能解决此类问题; 学好设计模式的意义: 1.读公司代码或开源项目比较容易; 2.自己写新的项目或开源 阅读全文

posted @ 2022-10-21 00:54 wsg_blog 阅读(32) 评论(0) 推荐(0) 编辑

2022年10月12日

摘要: Linux C/C++服务器 海量数据去重的Hash与BoomlFilter 散列表 根据 key 计算 key 在表中的位置的数据结构;是 key 和其所在存储地址的映射关系; 注意:散列表的节点中 kv 是存储在一起的; struct node { void *key; void *val; s 阅读全文

posted @ 2022-10-12 21:39 wsg_blog 阅读(63) 评论(0) 推荐(0) 编辑