自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 论坛 (15)
  • 收藏
  • 关注

原创 C++服务器定时器基于LRU算法思想实现定时器遍历插入调整删除时间复杂度都是O(1)

#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <assert.h>#include <unistd.h>#include <errno.h>#include <string.h>#include <fcntl.h>#include &

2020-10-29 09:14:46 139 2

原创 C++小项目(聊天室)——select模型+mysql+花生壳端口映射打造一个可以用外网连接的小qq

这个小软件是我初学网络编程写的,记录一下,等学完完成端口模型再利用完成端口写别的好玩的软件,看的课程是这个老师,真的强烈推荐,课程28块钱,老师讲的巨棒,很细,我觉得很适合新手看看课程链接该篇博客,只记录一下自己设计的想法,并没有介绍一些基础知识,比如select的用法,如果遇到不明白的函数,可以去msdn搜,各个函数介绍的都很棒msdnselect模型缺点很明显,只能连接小部分用户,一般定义为64,可以无限大,但是最好不要超过1024,除非客户端的人很有耐心。正文:端口映射下载一个花生壳,然后端

2020-08-28 11:16:50 125 2

原创 C++11读写锁的实现

参考的源码读写锁,一直都有听,也大概知道点原理,一直没有探究内部是如何实现的,正好今天完成了几项大作业,研究一下读写锁实现的原理。读写锁的原理就是,可以多次读,但是写只能一次一次的写入,我参考的源码博控制了写优先,并且读的优先级没我写的这么高。我自己在修改了他的源码,实现的是读优先,并且优先级很高,如果存在大量的读操作,可能会出现写操作线程饥饿的现象。如果在具体的场景中写操作也多,可以修改wait条件来判断优先级。我最近的感悟,如果非必要,一个类的对象不必非要跨线程操作。#include<mu

2021-01-08 16:23:04 42

原创 C++11智能shared_ptr和weak_ptr神兵利器

以前很少使用智能指针,在单线程的情况下,对象的存活周期都好确定,而在多线程中,思考对象存活周期是极其复杂的,以前没觉得,写过和阅读过很多多线程代码,发现跨线程的对象的存活周期是最难确定,很少确定到底在什么地方delete,最近再看muduo网络库这本书,对C++11智能指针又有了新的理解。书中提到shared_ptr相当于强铁丝,weak_ptr相当于细铁丝。这个要怎么理解呢?可以用weak_ptr的lock来判断shared_ptr对象是否还存活,利用lock来判断是否可以进行提升 shared

2021-01-08 14:03:42 19

原创 zookeeper的使用及C语言接口函数,以及分布式学习的个人总结

zookeeper我一开始没认出来是动物饲养员的意思,后来看了关于zookeeper取名的文章才知道这个名字的由来下面这段内容摘自《从 Paxos 到 ZooKeeper 》第四章第一节的某段内容,名字由来还挺好玩的哈哈哈Zookeeper 最早起源于雅虎研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题。所以,雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架,以便让开发人员将精力集中在处理业

2021-01-06 00:43:39 44

原创 功能强大的protobuf,初识rpc框架

最近在学习分布式系统,学一点皮毛分布式系统,也了解一下分布式系统。目前我对分布式的理解就是一个类似客户端请求调用某个服务,通过zookper知道调用那个服务,目前的zookper还没有学习,相当于假设程序已经知道调用的服务在那台进程/主机上,代码太多了,本文采取伪代码形式,主要是讲清楚protobuf中的作用,rpc框架的思路详解protobufsyntax = "proto3";package fixbug;option cc_generic_services = true;messag

2021-01-03 11:36:39 43

原创 腾讯一面的感慨

腾讯的面试官真的很nice,真的很棒!很感激面试官能把我的简历捞起来,学校是个双非,自己也就是个小小本科大三的学生,十分幸运能够参加腾讯的面试,也找到了一个好的榜样——面我的这位面试官。像现在的互联网上很多人稍微比平常人懂的多点或者工作久一点就以嘲讽啥啥啥以满足自己很厉害。这位腾讯面试官对我未来的影响意义非凡,做人上要更懂得谦逊、彬彬有礼。学习上要更加的深入的学习,广度有了,但是深度还未有,继续努力学习,向着自己的榜样去学习。面试就是让面试官喜欢你,我的这位面试官应该还算喜欢我,尽力的问我简单的东西想放

2021-01-03 09:41:04 2098 6

原创 protobuf的安装以及简单用C++使用protobuf

protobuf比json更牛逼一点,prtobuf是直接生成二进制格式。占用的带宽比json少,因为序列化完的大小也比json小,不过学起来可能比json复杂些。首先是安装,遇到了挺多问题,记录一下,傻瓜式一路安装的一路安装1、解压压缩包:unzip protobuf-master.zip2、进入解压后的文件夹:cd protobuf-master3、安装所需工具:sudo yum install autoconf automake libtool curl make g++ unzip4、自

2020-12-29 21:24:17 48

原创 rpc分布式的学习

最近找到了一个不错寒假实习,上海思岚科技,尽管不是做服务端的东西,但是也用C++去写代码,可以提高自己C++代码的水平,也是蛮不错的。后端现在很讲究分布式系统,此篇是我第一篇写分布式的博客,简单介绍分布式的概念以及要做什么,C++分布式的课程很少,这是我找到的一门,同时我也在看这门课。以前看过施磊老师写的用C++11重构muduo网络库,课程的声音很小,当时也没有耐下心来,还给重构muduo网络库那个门课了个中评,真的很对不起施磊老师,后面耐下心来去听,真正理解了one loop per thread模型

2020-12-28 15:45:31 39 3

原创 左神算法总结篇

用两个栈,一个记录小的,一个正常记录值,当弹栈的值等于最小值,存最小值的栈也弹走两个队列模拟一个栈,一个队列装入值,另一个队列保存原有的值,保存队列的值装入新增的那个结点当中,保持栈的顺序。或者直接采用一个队列,插入一个结点就让他自己重新入一下。两个栈实现队列,栈倒腾一下,顺序就颠倒了就是队列的顺序了定4个点(分别是左上、右上、左下、右下),代码如下,记录他们之间的关系即可。a点要放c点,b点放a,c点放d,d点放b。class Solution { // 先定4个点,顺序关系就是 A.

2020-12-27 16:03:25 28

原创 指令系统、中断的一些概念总结

计算机组成真的好难,考试要考,看一看视频,做个简单总结,以备不时之需。看的是mooc刘宏伟老师的课课程链接指令:CPU能够识别执行的就是指令指令格式应该既能给出足够的信息,其长度又尽可能的与机器字长匹配,以便节省存储空间,缩短取指时间,提高机器的性能操作码:不仅告诉机器做什么,还告诉机器对哪些数据进行操作,操作码的长度是可以是固定的也可以变化的,固定是为了更好的译码,不固定我猜是为了扩大寻址范围,且听我慢慢道来操作码有几个A就是第N地址如果是固定长度的话,4位操作码,三地址指令,可以保存2^4也

2020-12-20 16:55:29 44 1

原创 MYSQL数据库的学习

日积月累,不积跬步,努力提高自己的能力,利用琐碎的时间来学习一下数据库!记录所学的内容,以便日后查询目录1、视图2、慢查询日志1、视图什么是视图呢?就是把复杂的语句简化成一条简单的SQL语句select student.id,name,courseName,grade from studentleft join course on student.id = course.id;比如这样稍长的语句,如果我们使用视图可以简化这个sql语句,首先我们创建一个视图。create view Sele

2020-11-30 23:49:39 13

原创 旋转矩阵解法

看了左神的算法,感觉自己的算法的能力大增,嘻嘻

2020-11-30 20:42:54 29

原创 CLOSE_WAIT和TIME_WAIT的产生及详解

TIME_WAIT是主动关闭的那一方产生的,CLOSE_WAIT是被动一方产生的今天花了点时间搞了下CLOSE_WAIT的实验,记录于此,close_wait是怎么产生的呢?想一下TCP的四次挥手,客户端主动关闭连接发送一个FIN请求,服务器收到了这个FIN请求要回一个ACK,如果服务器没发送ACK,服务器(被动关闭的一方)这端将进入CLOSE_WAIT状态,而客户端进入(FIN_WAIT_2)这个状态。通过命令netstat -ant来查看(a显示所有信息,t是tcp,n是有效连接和端口),9997是服

2020-11-29 11:37:06 19

原创 windowsC++连接redis

刚学redis不到两个小时,寻思拿C++来玩玩,配了好久,linux的还没有搞,等熟悉了redis再去linux配置,后面也会更新的哇,我还是个孩子啊,搞个C++连接redis我人都傻了,一篇博客让我干这个,一篇博客让我干那个去。咱也没见过正经应该怎么搞,只能慢慢摸索。配了两堂C#的课终于配置好了,分享给大家,希望能帮助到您去github下载下载链接这个链接真的是我亲测下的最快的了,没有之一。下完之后进入msvs下的RedisServer.sln,进来会让你配置一些东西,那个一点别瞎点就按他说的做。然

2020-11-23 16:30:58 94

原创 C++function和bind绑定类成员函数

定义一个普通的类class Test1{public: void fun(int val){ cout<<"hello world "<<val<<endl; }};开始第一个测试int main(){ Test1 t; function<void(int)> pf = std::bind(&Test1::fun,t,2); pf(4); // return 0;}输出的值是2,说明pf传进去的4并没有什么用,在bin

2020-11-22 17:09:29 1879 9

原创 windows通过SSH连接linux Centos电脑

目录配置windows电脑配置linux电脑配置windows电脑首先windows下载putty下载链接根据你电脑的位数来下载,然后一路安装下来就行,输一下linux电脑的IP地址,在点一下open就行了。windows就这样配好了。配置linux电脑https://www.cnblogs.com/kinwing/p/11134179.html...

2020-11-22 11:30:11 43

原创 计算机网络知识/unp的学习总结

1、TIME_WAIT:保证了可靠的全双工和允许老的重复分节在网络中消逝2、如果数据报超过MTU,会产生ICMPV4的错误

2020-11-19 17:08:30 127

原创 在muduo网络库学习中学到muduo网络库的小细节和抛开muduo网络本身学会的c++技能——宏函数后面的\,命名的讲究等等

每天学一点点,只有周末有大把的时间。本篇博客重点讲解我不熟练的,而一些muduo库设计的巧妙的东西,如果想学习深入理念这篇博客完全不太适合。等学完muduo之后,最后仿一个muduo出来,再重新架构一下自己的网络库,一个自己写的小网络库我给他取名为Pine1、宏函数的使用首先是日志的宏函数,平常很少接触宏函数,只是知道有这么个东西,但是并没有写过宏函数。\表示的是后面还有语句的,do while是确保程序一定会执行一次,避免漏掉什么函数宏函数的优缺点#define LOG_FATAL(logmsgFo

2020-11-15 23:38:12 41

原创 cmake简单的使用及个人的所思所感所悟

最近好多事情要忙,终于通过了科三,大三课也多了起来,还想做一个小型网络库,当作自己练手的项目(目前完成50%,差一个日志类和buffer类),今天简单的学了学cmake,分享给大家,cmake真是太好玩了,今日份快乐,哈哈哈哈!部分源自别人的博客,部分源自自己的所思所感所悟,希望能帮助到您#进入root模式 su -下载安装yum install cmake写一个main.cpp文件,在同目录下新建一个CMakeLists.txt文件#include <iostream>using

2020-11-14 21:31:10 28

原创 dup重定向输出到一个网络连接

这篇博客是我介绍linux的一个子集,看完这篇博客还想看看其他linux函数的话可以去我的另一篇博客看一看!博客连接为什么要单独写一篇出来呢?因为我遇到了问题,并且网上也没有相关的博客。标准输出重定向到一个网络连接,我是在《linux高性能服务器编程》这本书看到的。标准输出重定向到一个网络连接原理就是关闭服务器端的输出,这样printf的数据话就自动给客户端(telnet)发送过去了不过书上的例子没有for循环,我加上了for循环,telnet连接的话,并不会显示出hello语句,我感到很奇怪,后来猜测

2020-11-07 11:47:37 32

原创 C++11包扩展

c++11的包扩展,记录一下代码吧,采用万能引用。我个人还是觉得能清晰表达代码尽量不要用这么奇奇怪怪的语句吧?今天在github看一个人线程池的demo,发现他的线程池里充满了这些奇奇怪怪的写法,明明是一个普普通通的生产者消费者的模型,搞出来了好多奇奇怪怪的东西,要搞得这么复杂?又重新翻了下effective modern C++学了一下包扩展void fun4() {//fun4要写一个函数的出口 cout << "fun4 stop!" << endl;}template

2020-11-04 19:40:32 170 2

原创 C++async、future、packaged_task、promise基本多线程类模板的使用

目录asyncfuturepackaged_task用法1async初学多线程的我天真的以为异步和多线程是一样的,直到我看见了std::async这个处理异步的函数(头文件在future里面),我才知道异步和多线程是不一样的。关于多线程与异步区别生动形象的例子为什么有了多线程还需要异步操作?身为初学的我想到了这个问题在网上百度了没百度到,好在今天读书的时候又找到了自己想要的答案了。首先要注意到开启一根多线程是不能保存返回值,那么聪明的你肯定也想到函数增加一个引用类型参数,不就解决了嘛,代码如下。这样

2020-11-03 21:05:29 31

原创 每天一个设计模式——装饰模式(C++实现)

s

2020-11-02 16:30:49 31 1

原创 linux下setsockopt函数(代码摘自UNP)

以下的代码摘自UNP,我在学习UNP这本书的时候,有时候想把书中的代码敲一敲,像这种比较繁琐的代码我还是想着直接拿源码用,而不是自己再去敲一份。我一开始以为setsockopt是跟fcntl一样的,要先取出来原先设置的值,在做一个|(与运算),然后再把新值设置。setsockopt只要你设置了就行,并不需要获取原先的值再设置/* include checkopts1 *//* *INDENT-OFF* */#include <sys/types.h>#include <sys/s

2020-10-25 19:52:53 35 1

原创 libevent学习——buffevent事件及低水位高水位设置

设置buffevent_cb的函数原型void bufferevent_setcb(struct bufferevent *bufev, bufferevent_data_cb readcb, bufferevent_data_cb writecb, bufferevent_event_cb eventcb, void *cbarg);注意event_cb函数指针和readcb是不一样的,event_cb多了一个short参数,和之前学习的event事件的回调函数类似typedef

2020-10-22 23:23:30 108

原创 libevent——echo服务器

一会要去开会了,等下午或者晚上抽空再说明一下这个基于libevent写的echo服务器#include <iostream>#include <event2/listener.h>#include <arpa/inet.h>#include <event2/event.h>#include <sys/types.h>#include <signal.h>#include <string.h>#include

2020-10-19 11:26:06 20

原创 libevent事件上的处理,定时事件、信号事件

目录回调函数参数说明事件状态事件创建函数事件的详解1.信号事件2.定时事件回调函数参数说明libevent的回调函数的格式就是三个参数typedef void (*event_callback_fn)(evutil_socket_t, short, void *);前两个参数不用我们传(目前我学的浅,只传递过第三个参数),第三个参数是一个通用的指针,可以选择传也可以选择不传事件状态EV_READ 可读EV_WRITE 可写EV_SIGNAL 信号事件EV_PERSIST 永久性(很多事件默

2020-10-18 16:46:05 52

原创 libevent学习遇到的问题error while loading shared libraries: libevent-2.2.so.1: cannot open shared object fi

目录error while loading shared libraries: libevent-2.2.so.1: cannot open shared object file: No such file or directory解决办法error while loading shared libraries: libevent-2.2.so.1: cannot open shared object file: No such file or directory解决办法错误如图下面是解决办法ln

2020-10-17 17:21:10 72

原创 poll函数的详细解释及使用

目录参数解释返回值思路讲解代码部分makefile最近一直在看UNP,2020年8月的暑假初学的网络编程,最开始接触的是windows的select函数。尽管select函数(我的博客首页置顶的小QQ就拿select做的,所以不打算写关于select函数的使用说明)和poll函数在实际开发并不会用到,但还是想学一下,也不是很难使用,花两三个小时做一下实验还是值的的!参数解释int poll(struct pollfd *fds, nfds_t nfds, int timeout);第一个参数是一个结

2020-10-16 19:14:37 81

原创 LeetCode 116填充每个节点的下一个右侧结点指针

题目链接给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。示例:解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节

2020-10-15 16:30:18 18

原创 tcpdump的使用,及tcpdump抓不到自己服务器的包(帧)——记录篇

linux系统有很多块网卡,可以用ifcongig -a打出来,你自己写的服务器一定要监听lo这块网卡,不要监听别的网卡,监听有回环地址的网卡真是直观的感受到了TCP三次握手和四次挥手,尽管我还有些东西没有看懂...

2020-10-07 19:34:19 208

原创 Leetcode75颜色分类

我的力扣主页题目链接这道题一看就是一道双指针的问题,可惜我想到了双指针没想到怎么做,看了官方的动图明白了怎么做这道题,动图可以看下官方题解里的动图,CSDN里面放不了官方题解建议看一遍动图,代码就很好写出来了代码如下,和官方实现的略有不同,想法是一样的,毕竟我是看着官方动图写出来,讲解一下我对这道题的思路:有两个变量,一个指向下一个存0的地方(p0),一个指向下一个存1的地方(p1)。当nums[i] == 0的时候就要把该0移到p0的位置上,并且p0要往后挪一位。其次还要注意一点的是,如果p0和p

2020-10-07 15:01:32 21

原创 网络编程——listen、conect、inet_pton等网络编程函数详解

connect

2020-10-05 19:48:53 41

原创 linux下man不出来想要的函数——解决办法

很多时候我们并不记得这个函数的头文件,可以用man来查一下这个函数的头文件,可是有时候查到的却不是想要的函数,而是命令,比如man bind,并不是我想要,这个问题也曾经困扰了我很久,直到有一天我看了一门网络编程的课才知道如果找到的不是函数,可以man 2 函数名,就出来你想要的函数了!!!希望能帮助到您!...

2020-10-05 19:03:49 43

原创 程序如何在计算机运行的——操作系统内存管理

本篇基于大白话来进行说明,可能有些词并不会那么的准备,尽量用我的理解来说明,适合初学者,不适合进阶。看的是哈工大老师讲的,课程链接当写完一个程序都会有一个main函数,作为函数入口,假设函数入口main的起始地址是0,在main函数调用了hello这个函数,函数要偏移40(这个也称相对地址、逻辑地址),如果物理内存中0-40这里可以分配给程序,把这个test程序加载到了内存中,这个test就可以在电脑上运行了。//test#include<iostream>using namespace

2020-10-05 09:11:41 47

原创 线程同步和异步及I/O同步和异步的区别

一开始我以为都叫同步、异步是一个意思,有时候还蒙蒙的,直到今天看了linux高性能服务器这本书才恍然大悟他们的区别I/O同步/异步和线程并发的同步/异步是有区别的,I/O同步相当于告诉应用程序已经到了就绪状态(数据从内核读到用户的缓冲区或者用户的缓冲区读到内核中去),I/O异步相当于告诉应用程序已经到了完成状态(用户和内核交换全由内核来接手).而线程的同步和异步,举个简单的例子,同步是你要等着面包烤熟了再去切菜,线程异步是你可以把面包放着烤箱里考着,然后就去切菜,烤好了再拿出来,两不耽误。...

2020-10-02 20:36:35 41

原创 linux c++开发、linux函数api总结

使用g++编译C++代码直接编译链接一步到位输入下面命令在命令行g++ hello.cpp -o hello 注意这个-o参数,直接把文件编译链接好了,前面的hello.cpp是你的源文件,后面的hello是你想要生成可执行文件的名字,这样就生成一个hello的可执行文件,在输入 ./hello就可以运行了,以下是图片展示g++单独编译、单独链接g++ -c hello.cpp 这是编译,生成一个hello.o的文件g++ hello.o -o hello 这是链接,生成一个hello的可

2020-10-02 10:17:49 84

原创 vim makefile出现好大的红色块解决办法

就像这样的,一开始还以为开了什么显示空格,百度也没搜到,经过测试发现这是提醒年缩进有问题,在makefile下每个:下面的行跟着的都是tab间隔,而不是手的空格,像这样的红色就是因为手打的空格出现的错误...

2020-09-29 16:34:54 98

原创 linux centos配置vim中文,及vim不乱码但是命令行上乱码及文件共享产生乱码的解决办法

尽管在linux下的中文输入法不是那么的得劲,但是有总比没有的强,下面介绍一下如何安装su-输入密码,是看不见你输入的,然后开始安装pinyinyum install ibus-libpinyin

2020-09-29 15:57:47 97

空空如也

服务器怎么向网页传数据库的数据

发表于 2020-12-14 最后回复 2020-12-14

tcpdump分析这个包的长度

发表于 2020-10-07 最后回复 2020-10-07

请教各位巨佬们一个问题:当一个数据报超过MTU的时候需要进行切片,怎么重组的问题

发表于 2020-09-27 最后回复 2020-09-27

在centos下使用samba共享文件,windows找不到

发表于 2020-09-08 最后回复 2020-09-08

初学网络编程,求教端口映射,如何让人从外网访问我的内网上的服务器

发表于 2020-08-27 最后回复 2020-08-27

fstream读取不到最后一个字符串是为啥呀?

发表于 2020-03-19 最后回复 2020-08-27

unordered_map的问题

发表于 2020-04-25 最后回复 2020-04-26

新手,eclipse快捷键修改不了怎么办?

发表于 2020-03-16 最后回复 2020-03-18

allocator的destroy操作失败

发表于 2020-03-09 最后回复 2020-03-11

vector的下标不是size_t的嘛??

发表于 2020-03-08 最后回复 2020-03-10

友元类只能写在一个文件里吗?不可以写在多个文件里吗?

发表于 2020-02-16 最后回复 2020-03-08

类自定义的swap函数为什么不用引用传参?

发表于 2020-02-28 最后回复 2020-03-08

这样释放指针,释放成功了吧?

发表于 2020-02-14 最后回复 2020-02-16

C++set的用法求助。

发表于 2020-02-06 最后回复 2020-02-08

求助!链表的头指针first为什么需要别名

发表于 2020-01-18 最后回复 2020-01-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除