- 博客(17)
- 收藏
- 关注

原创 轻量级消息队列中间件 -- NSQ介绍及深度源码分析
NSQ介绍及源码分析1简介NSQ is a realtime distributed messaging platform designed to operate at scale, handling billions of messages per day.It promotes distributed and decentralized topologies without single points of failure, enabling fault tolerance and high
2020-08-17 11:51:18
1572
原创 Tcp握手挥手面试
但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。我:防止S端收到Sync之后直接进入建立连接状态,但C端没收到Sync ack又继续发sync包了,S端收到后没法分辨S是想建立新的连接还是重试包,就会重新建立新的连接。
2025-01-05 19:41:47
393
原创 基于C++20协程与protobuf的轻量级、高性能Rpc框架
根据pb的格式定义req和rsp协议、rpc服务EchoService、Echo和RelayEcho两个rpc方法,定义如下。使用Google的protoc即生成对应的给客户端调用的stub和给服务器调用的service代码。
2023-07-16 11:33:03
478
1
原创 leetcode刷题笔记
81 忘记TrueRi作为右边界15vector<vector> res;res.push_back({curNum, nums[le], nums[ri]});18sort(result.begin(), result.end());result.erase(unique(result.begin(), result.end()), result.end()); 去重....
2020-06-30 21:25:08
173
原创 mq
消息发布1 new TCPServer 监听客户client连接。2 新连接开启go routine处理tcpServer.handle(),>> protocolV2.IOLoop处理新连接。3 IOLoop里面通过go protocolV2.messagePump()开启新routine,负责处理发送数据到client。原routine处理client发来的数据,读取用户发来的数据后通过protocolV2.Exec()函数处理。4 收到发布消息时,调用PUB函数。该函数首先检查订阅
2020-06-12 09:30:26
152
原创 树的非递归遍历及各种常见o(nlogn)排序算法C++代码
树的遍历public static void preOrderTraveralWithStack(TreeNode node){ Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode treeNode = node; while(treeNode!=null || !stack.isEmpty()...
2020-03-31 13:08:30
202
原创 牛客网刷题笔记
member access within misaligned address是使用了未初始化的地址指针for(int i = 0; i <= (int)v.size() - 2; i++){cout << i << endl;v[i]->next = v[i + 1];}v.size()返回的是无符号整形,必须转化为有符号pow()返回的是dou...
2020-03-28 21:41:36
232
原创 岗位要求
网易C++开发岗位要求我们希望你:1、不管学的是什么专业,都有一颗对互联网无比热爱,愿意为之付出的心;2、就是喜欢C、C++这个程序语言,还就爱拿它做项目开发;3、对网络编程有研究,基本的gdb调试能力?内存泄漏,越界读写等常见问题?对你来说都不是问题;4、作为一个优秀的程序员,有良好的服务器端编程能力和编程习惯,相关模块设计、文档编写都是小case;5、十八般武艺样样精通,掌握多线程...
2020-03-11 22:41:45
182
原创 string和int,char互相转化
to_string(); 很多类型》》stringstring to_string (int val);string to_string (long val);string to_string (long long val);string to_string (unsigned val);string to_string (unsigned long val);string to_s...
2020-03-06 12:16:42
157
原创 MySQL和MongoDB的区别
MySQL和MongoDB的区别关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织优点:1、易于维护:都是使用表结构,格式一致;2、使用方便:SQL语言通用,可用于复杂查询;3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。缺点:1、读写性能比较差,尤其是海量数据的高效率读写;2、固定的表结构,灵活度稍欠;3、高并发读写需求,传统关系...
2020-03-06 12:04:58
415
原创 简单C++和java线程安全的单例模式
javaclass Singleton2{ private final static Singleton2 instance; private Singleton2(){ } public Singleton2 getInstance(){ if(instance==null){ synchronized(...
2020-03-04 17:04:51
119
原创 深入理解Redis的持久化
深入理解Redis的持久化RDBRDB是将当前数据生成快照保存到硬盘上。RDB的工作流程:执行bgsave命令,Redis父进程判断当前是否存在正在执行的子进程,如RDB/AOF子进程,如果存在bgsave命令直接返回。父进程执行fork操作创建子进程,fork操作过程中父进程被阻塞。父进程fork完成后,bgsave命令返回“* Background saving sta...
2020-03-04 17:03:13
276
原创 线程进程笔记
一、进程与线程的区别:1、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。3、线程之间的通信更方便,同一...
2020-03-04 16:07:37
151
原创 java和C++ 赋值(=)及参数传递
C++赋值(=)及参数传递对于赋值号“=”默认情况下,C++中对数据类型使用“=”号及函数参数传递时,都是按值传递的。只有使用&号或者指针才能实现按引用传递。例如class A {public: int a;};int main(void){ A aa, bb; aa.a = 100; bb = aa; aa.a = 200; cout <<"a...
2019-12-17 16:40:58
292
原创 C++两种按引用传递和按引用返回return的方式
1 使用&按引用传递标志符void changeNumber(int& x){x = x + 5;}int main(void){int a = 10;cout << "a = " << a << endl;changeNumber(a);cout << "Now a = " << a <<...
2019-12-17 16:38:40
456
原创 c++和java默认权限属性
c++中,如果我们对类的成员(包括成员变量和成员函数)没有定义属性,则默认是private。java中,如果没有定义属性,则默认是default,该权限表示在同一个包中均可直接访问, 不同包不可。...
2019-07-26 16:20:32
1368
原创 numpy tensorflow 输入矩阵量纲归一化
#numpy tensorflow 输入矩阵量纲归一化import numpy as npdef MaxMinNormalization(x,Max,Min): //矩阵归一化 x = (x - Min) / (Max - Min) return xarr = np.array(range(0, 12))arr = arr.reshape((3,4))print ...
2019-03-01 13:47:53
1399
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人