ShenHang_
码龄4年
  • 118,133
    被访问
  • 438
    原创
  • 5,036
    排名
  • 47
    粉丝
  • 0
    铁粉
关注
提问 私信

个人简介:一个编程小菜鸡

  • 加入CSDN时间: 2018-10-20
博客简介:

ShenHang_的博客

查看详细资料
  • 4
    领奖
    总分 487 当月 47
个人成就
  • 获得81次点赞
  • 内容获得35次评论
  • 获得349次收藏
创作历程
  • 5篇
    2022年
  • 42篇
    2021年
  • 263篇
    2020年
  • 132篇
    2019年
成就勋章
TA的专栏
  • 工作
    5篇
  • WebRTC
  • 大并发服务器
    33篇
  • java基础
  • DFS
    38篇
  • STL源码
    23篇
  • Linux基础
    42篇
  • BFS
    6篇
  • 回溯
    10篇
  • Effective C++阅读笔记
    25篇
  • C++多线程
    2篇
  • Qt编程
    26篇
  • 计算机网络
    3篇
兴趣领域 设置
  • 编程语言
    c++
  • 服务器
    linux
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

docker内ubuntu升级python到3.8

python
原创
发布博客 2022.06.23 ·
281 阅读 ·
0 点赞 ·
0 评论

NFS测试(server+client)

nfs
原创
发布博客 2022.06.03 ·
45 阅读 ·
0 点赞 ·
0 评论

python中的async await

由于最近临时要接手组里的pytest搭建的TA code,python有些异步操作和c++还是不太一样的,需要快速学一下。代码参考:https://blog.csdn.net/Likianta/article/details/90123678from time import sleep, timedef demo1(): """ 假设我们有三台洗衣机, 现在有三批衣服需要分别放到这三台洗衣机里面洗. """ def washing1(): slee
原创
发布博客 2022.05.10 ·
27 阅读 ·
0 点赞 ·
0 评论

python request模块里面data、json、params传参方式的不同(使用httpbin工具测试)

1、json.dumps()和json.loads()是json格式处理函数json.dumps()函数是将json(即dict)转化为str;json.loads()函数是将str转化为json(即dict)。2、requests模块发送请求有data、json、params三种携带参数的方法。params在get请求中使用,data、json在post请求中使用。params:字典或者字节序列,作为参数增加到url中,只能用于GET方法,不能使用在POST方法里面:kv = {"wd": "
原创
发布博客 2022.02.05 ·
657 阅读 ·
0 点赞 ·
0 评论

C++11 R字符串

原始字面量在 C++11 中添加了定义原始字符串的字面量,定义方式为:R “xxx(原始字符串)xxx” 其中 () 两边的字符串可以省略。原始字面量 R 可以直接表示字符串的实际含义,而不需要额外对字符串做转义或连接等操作。#include <iostream>using namespace std;int main(){ const char* s1 = R"(Hello\\World)"; cout << s1 << endl; const char
原创
发布博客 2022.01.10 ·
560 阅读 ·
0 点赞 ·
0 评论

muduo关键易忘点整理

Channel是 selectable IO channel,负责注册与响应IO事件,它把fd和所关注的事件绑定在一起,即一个Channel对象(通道)就是一个事件。一个EventLoop类中有一个红黑树(EventLoop类与Poller类是组合关系),一个EventLoop类的对象所在的线程就是一个IO线程。Acceptor类(即TcpServer类)所在的IO线程就是main reactor,负责监听连接,每个连接创建一个TcpConnection类的对象,TcpConnection类的对象所在.
原创
发布博客 2021.10.12 ·
52 阅读 ·
0 点赞 ·
0 评论

C++11 emplace_back(最后又回顾了一下移动构造和移动赋值)

我们在对STL容器进行插入操作时,常会使用insert或push_back。C++11提出了更高效的插入方法:emplace。下面介绍C++11新特性中emplace的使用与原理。vectoremplace <--> insertemplace_back​ <--> ​push_backsetemplcace <--> insertmapemplace <--> insert以vector的emplace_back为例:#includ
原创
发布博客 2021.09.13 ·
197 阅读 ·
0 点赞 ·
1 评论

std::bind

其实std::bind和boost::bind几乎完全一样。普通函数使用std::bind#include <iostream>#include <functional>double callableFunc (double x, double y,double z) {return x+y-z;}int main() { std::function<double(double)> NewCallable1 = std::bind (callableF
原创
发布博客 2021.08.16 ·
53 阅读 ·
0 点赞 ·
0 评论

字符串常量初始化指针的小问题

char a[20] = "1234";cout << a << endl;char *p = a;cout << p << endl;那么该如何得到该字符串的地址呢?cout << (int*)a << endl;cout << &a << endl;这两种方法都可以正确打印出“字符串的地址”,但是有细微区别之处在字符数组a中,a表示第一个字符的地址,a+1表示第二个字符的地址;
原创
发布博客 2021.06.09 ·
54 阅读 ·
0 点赞 ·
0 评论

const_cast的小问题

const_cast只可以对指针和引用使用也许大家都有过这样的疑惑:const_cast可以去除一个常量的const属性,去除const属性后应该可以对“常量”进行修改,通过调试器发现内存中的值是被改变的,可是再传递这个“常量”的时候,值却一直保持原状,这是为什么呢?void fun(int &value){ cout << "Fun(val)=" << value << endl;}int main() { const int val = 10
原创
发布博客 2021.06.09 ·
55 阅读 ·
0 点赞 ·
0 评论

muduo_net库源码分析(十一)(EventLoopThread类、EventLoopThreadPool类实现multiple reactors)

一个程序有多个EventLoop,也就是有多个IO线程(one loop per thread)
原创
发布博客 2021.05.14 ·
52 阅读 ·
0 点赞 ·
0 评论

非常量引用的初始值必须为左值

先看一段报错的代码:#include<iostream>using namespace std;int main(){ int i = 2; double &r = i; system("pause"); return 0;}
原创
发布博客 2021.05.08 ·
1449 阅读 ·
4 点赞 ·
0 评论

copy ctor、copy assignment(拷贝构造函数和拷贝赋值函数)

这个很早就搞明白了,只是这里系统整理一下。例1:例2:#include<iostream>#include<functional>#include<numeric>using namespace std;// TEMPLATE STRUCT plustemplate<class _Ty = void>struct my_plus{ // functor for operator+ typedef _Ty first_argument_
原创
发布博客 2021.05.08 ·
291 阅读 ·
0 点赞 ·
2 评论

一元函数对象、二元函数对象、一元谓词函数对象、二元谓词函数对象、lambda表达式、函数适配器binder2nd及其辅助函数bind2nd

一元函数对象:函数参数1个二元函数对象:函数参数2个;一元谓词对象:函数参数1个,函数返回值是bool类型,可以作为一个判断式,谓词可以是一个仿函数,也可以是一个回调函数;二元谓词对象:函数参数2个,函数返回值是bool类型;之所以给返回布尔类型的函数对象专门命名,是因为谓词是用来为算法判断服务的。一元谓词...
原创
发布博客 2021.05.07 ·
82 阅读 ·
0 点赞 ·
0 评论

boost::shared_ptr分析(对TcpConnection类的对象的生存期进行管理)

智能指针很常用,由于muduo::net库中使用boost::shared_ptr对TcpConnection类的对象的生存期进行管理,因此这里先分析下boost::shared_ptr的几个新鲜的用法,进行测试。详细的测试代码如下(测试目标写在注释里了):#include<iostream>#include<boost/enable_shared_from_this.hpp>#include<boost/shared_ptr.hpp>#include<b
原创
发布博客 2021.05.06 ·
110 阅读 ·
0 点赞 ·
1 评论

muduo_net库源码分析(十)

创建EventLoop类的对象–>通过该对象调用EventLoop::loop–>EventLoop::loop中调用Poller::poll(多态)返回活跃的Channel对象–>调用Channel::handleEvent–>在Channel::handleEvent中,如果到来的是连接关闭事件,由于该事件是读事件,所以调用读事件回调函数(这里已经在TcpConnection类的构造函数中通过其Channel对象调用Channel::setReadCallback将TcpCo..
原创
发布博客 2021.05.06 ·
61 阅读 ·
0 点赞 ·
1 评论

muduo_net库源码分析(九)(TcpServer类、TcpConnection类)

Acceptor类的对象是TcpServer类的成员!Acceptor类与TcpServer类是组合关系。Acceptor::handleRead–>在Acceptor::handleRead中,除了调用::accept外,还调用了应用层回调函数 newConnectionCallback_(这里通过Acceptor::setNewConnectionCallback将应用层回调函数newConnectionCallback_设置为TcpServer::newConnection)...
原创
发布博客 2021.05.02 ·
563 阅读 ·
0 点赞 ·
2 评论

muduo_net库源码分析(八)(Acceptor类)

Acceptor类
原创
发布博客 2021.04.28 ·
68 阅读 ·
0 点赞 ·
0 评论

muduo_net库源码分析(七)(Socket类)

一些基础函数的使用说明可查看:linux 网络编程之TCP的C/S模型
原创
发布博客 2021.04.20 ·
55 阅读 ·
0 点赞 ·
0 评论

muduo_net库源码分析(六)(EventLoopThread类创建IO线程)

EventLoopThread类调用顺序:主线程中:EventLoopThread::startLoop–>在EventLoopThread::startLoop调用Thread::start创建子线程,即通过Thread::start中的::pthread_create创建子线程。子线程中:当::pthread_create创建子线程成功后子线程会自动调用线程函数EventLoopThread::threadFunc–>EventLoopThread::threadFunc的任务就是创
原创
发布博客 2021.04.18 ·
49 阅读 ·
0 点赞 ·
0 评论
加载更多