自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 C++网络编程I/O 多路复用之epoll(二)

最后再谈一谈吧,epoll不是单独使用,学习到了epoll在是开始,后面还有线程池,反应堆模型,协议解析,数据库等等一大堆的内容,尽管这样做出来的东西在企业看来仍然是小儿科,就问你难受不难受。冲冲冲!!!...

2022-07-14 23:09:04 520 1

原创 多线程程序出现段错误,找了一个礼拜,原来问题出在strlen和strrchr

想使用strrchr函数找到字符串最后的点,来获取到文件类型。比如"my.html",获取到最后的点得到".html",然后再用过strcmp判断就可以根据不同的文件类型做出不同的动作了。但出现段错误!一般来说,出现段错误,就是找内存越界,这是最常见的最容易犯错的问题,但我找了半天测试了好多模块,都没有越界,更诡异的是,判断文件类型函数加上就有问题,有函数strlen和strrchr。程序编译没问题,运行将会报错。因为NULL并不是一个字符串,所以如果strlen©会发生异常。至于为什么strlen

2022-07-11 17:04:23 1108

原创 文本向量化研究现状总结,从独热编码到预训练模型

把看过的模型总结一下吧,方便以后看。在对新闻文本数据进行处理和分析的过程中,文本向量化是最基本的步骤。独热编码,是基于词袋模型的文本特征提取方法,例如该方法生成向量是根据单词是否在词典中出现或出现次数来处理的,如果在词典中出现则该维就是1,该维数字还可能是该单词在词典中出现的次数,不管怎么样,其余各维均是0,这种传统的文本向量化方法产生的向量简单且包含词频信息,但是向量维度爆炸,矩阵稀疏,浪费内存资源,同时还无法融入有效的语义信息,区分不了不同单词之间的文本相似度。研究人员将目光聚焦在词向量表示方法上,基于

2022-06-28 18:04:44 711

原创 C++网络编程I/O 多路复用之epoll(一)

似乎我总是这样,宁愿持续学习,也不愿意总结。就好像高中,总是跟着老师听课,但不乐于自己把老师讲的知识串起来,进行总结。这种想法其实是在自己骗自己,听了等于学会那是不可能的,不愿意总结就是因为那块知识学的还不熟练,回忆起来觉得麻烦。同时的我也知道最舒服的时候是老师讲课后题的时候,我都会,别的同学在费劲的听讲,而我可以做别的时候,也正因为这样的自大,在有些时候丢失了一些细节的关注,这是我对我中学时期学习的反思。这也是为什么说,人最爽的时刻是知识输出,把自己在脑子里建构的房子,拿出来,展示给大家,那简直就像刚刚练

2022-06-25 23:05:01 1314

原创 epoll才刚刚是服务器开发的开始,绝不是问题的最终解决

终于到了epoll,我以为,从多进程服务器、多线程服务器、select服务器、poll服务器、最后到epoll就是结束了。但不是这样的,提出我这阶段开发服务器的问题,希望和大家交流交流。当我做完一个epoll+http解析协议的项目时,我发现,如果回发的数据过大,比如一个4m的图片,浏览器收到的图片会是乱的,这个怎么解决啊。我找到的两种方法:服务器使用epoll,监听到好几个cfd读事件,进入for循环一个个处理cfd,如果第一个cfd1在回传一个很大的数据,是不是后面的cfd都会卡着等待,反映在浏览器端

2022-06-23 20:52:55 174

原创 C++网络编程I/O 多路复用之poll

学到这,感觉没什么可说的,poll 是对select 的改进,但是它是个半成品,相对 select 提升不大。更多的是把poll当成一个过渡,大家并没有给poll过多的关注,而是直接epoll了。所以着重解释了从select到poll改变了什么,思路的变化,到如何使用上其实就是调函数,也没有太多细节要注意。上节通过解释和代码,我们可以总结select的缺点主要有:解决了select的两件事情:poll也是操作系统提供的系统调用函数,机制与select类似,管理多个描述符也是进行轮询,即每次调用都要扫描整个注

2022-06-22 17:31:16 2501

原创 c++服务器回传给网页的中文是乱码

在做c++服务器的时候,回发给网页的中文是乱码,明明在响应消息报头指定了text/plain; charset=utf-8。服务器回传给网页的html代码里的中文是正常的,总的来说就是服务器的编码方式和浏览器的编码方式不一致,在浏览器改变编码方式也可以解决问题,但我的谷歌浏览器没找到设置编码。主要还是想寻求一种通用的方法。百思不得其解,搜索引擎上也都是关于java的,有现成的函数很方便的解决,关于c++的极少。不仅仅在响应消息报头指定编码方式,还要在html页面指定内容的编码方式。可以在响应消息报头指定

2022-06-19 10:52:44 850 1

原创 一个括号引发的bug——服务端只显示read1个

在做本地套接字连接的时候,客户端发送给服务端若干字符,但服务端显示读到的却一直是1个。查了半天,原来是括号的误用。服务端打印read返回值,不换行,还一直是1。看看代码,能看出问题吗?逻辑很清晰,就是能从客户端读到东西就一直读,然后返回处理后的数据。这是客户端的显示情况,这是客户端的代码,原因分析:先运算read(cfd,buf,sizeof(buf)),假如返回3,并没有及时赋值给ret,而是先与0进行比较,3>0为真,得到1,赋值给ret。先计算(ret=read(cfd,buf,s

2022-06-14 11:28:27 110

原创 libevent configure: error: openssl is a must but can not be found.error while loading shared librari

安装libevent库执行./configure 时出现以下错误执行make出现以下错误缺少opensslsudo apt install libssl-dev运行用到libevent库的程序编译hello-world.c,运行hello时,出现如下错误。在运行时,程序无法找到libevent-2.1.so.7这个动态库,因为该动态库在默认安装时,存放的路径在/usr/local/lib下,不在系统的默认查找路径内。将/usr/local/lib路径添加到/etc/ld.so.conf配置文件中添加路径.

2022-06-10 17:19:22 1571

原创 C++网络编程I/O 多路复用之select

  I/O多路复用就是通过一种机制,一个进程可以监听多个文件描述符,这对提高程序的性能至关重要,一旦某个文件描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。  与多进程或多线程的方式相比,使用 IO 多路复用技术无需创建多个进程或线程,也不必维护这些进程/线程,从而大大减小了系统的开销。select,poll,epoll都是IO多路复用的机制。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步

2022-06-03 15:24:24 698

原创 C++网络编程踩坑记之多线程服务器,详解代码细节,多问为什么

前置知识:多线程知识Socket编程多线程并发服务器思路lfd=socket(),创建监听套接字 lfd。setsockopt(lfd,SOL_SOCKET,SO_REUSEADDR,&opt, sizeof(opt)),设置端口复用。bind(),绑定监听套接字lfd与Strcut scokaddr_in srv_addr(服务器IP和端口)。listen(),把lfd转换成一个被动套接字,进入被动监听状态,用来被动接受来自其他主动套接字的连接请求,并设置监听上限。主线程w

2022-05-31 12:19:11 480 2

转载 Linux下调用socket的accept时,客户端强制断开 accept报错accept: Interrupted system call

项目场景:Ubunto16.04版下 使用fork创建多进程socket服务问题描述在客户端断开连接后 不论是自动断开 开始ctrl+c强制断开 都会出现accept:Interrupted system cal 从而导致服务器程序异常结束原因分析:一开始是我怀疑是fork的原因 反复调整父子线程退出的逻辑还是不行 搜索报错信息发现大多数的答案都是要像下面这样写accept函数if((connfd=accept(listenfd,NULL, NULL)) < 0) { if

2022-05-25 19:33:16 1220 1

原创 C++网络编程踩坑记之多进程服务器,详解代码细节,多问为什么

  首先介绍多进程并发服务器是什么,然后按步骤描述怎么用,在最后给出完整server.c的代码,wrap.c错误处理代码,和client.c的代码。希望大佬多交流,敬请斧正。是什么:提示:这节是多进程并发服务器,其实现原理是,服务端通过lfd负责监听客户端的连接。当接受到一个客户端的连接时,建立一个子进程通过cfd与客户端进行数据通信,那么这个服务端就可以响应多个客户端。涉及到的是信号,多进程的相关知识。服务器按处理方式可以分为迭代服务器和并发服务器两类。迭代服务器:服务器每次只能处理一个客户的请

2022-05-25 13:46:21 511

原创 C++多线程服务器,在子线程ctrl+c后,主线程也退出了,return和exit

项目场景:  多线程服务器是对多进程服务器的改进,由于多进程服务器在创建进程时要消耗较大的系统资源,所以用线程来取代进程,这样服务处理程序可以较快的创建。问题描述盲目模仿多进程服务器的写法,归根结底还是自己没有掌握多进程和多线程的区别模仿多进程服务器,写了多线程服务器。通过测试,多线程完成了多个socket连接并传输数据的任务int main(int argc,char *argv[]){ int lfd,cfd; int i=0; int ret; char b

2022-05-23 23:05:53 919

原创 Sizes of tensors must match except in dimension 1. Expected size 44 but got size 45 for tensor numbe

项目场景:跑U-net网络的时候,有一步是torch.cat()操作,出现下面是代码class UNet(nn.Module): def __init__(self, in_channels, out_channels): super(UNet, self).__init__() self.conv1 = DoubleConv(in_channels, 32) self.pool1 = nn.MaxPool2d(2) self.

2022-05-22 15:18:03 14010 8

原创 动态规划-5最长回文子串

!!!动态规划只能这样的消耗了吗,一起讨论,内存用了好多1.方法说明为什么i从大到小,j从i到大?因为i和j所指之间是回文子串的前提是,dp[i+1][j-1],即i的后一位,j的前一位之间的是回文子串,再加上i和j所指是相同的,则可判定为回文子串。 这落在二维数组中,就是从下往上,从左往右了。2.函数说明substr(size_type _Off = 0,size_type _Count = npos)函数一种构造string的方法形式 : s.substr(pos, len)返回值:

2022-05-21 16:17:10 124

原创 双指针-11盛最多水的容器

1.为什么是双指针因为双指针代表的是可以作为容器边界的所有位置的范围。2.面积求法说明j-i代表底长,min(weight[i],weight[j])代表高maxarea=max(maxarea,min(weight[i],weight[j])*(j-i)面积是由短板和两个板之间的距离决定的。3.为什么先移动短板情况1 移动长板,min(weight[i],weight[j])的值可能不变或者变小。不变:长板还是长板,变小:长板移动后变成比原先短板更短的短板。但是,j-i,即底长肯定会变小,所

2022-05-21 16:16:12 66

原创 动态规划-322零钱兑换

  翻了半天没找到c++的记忆化搜索,我在纠结记忆数据的数组是作为共享变量,还是作为参数一直在函数中传递。  首先我想在函数外定义个vector,然后在函数内resize大小并赋值,可以免除help在递归函数中传递,但是失败了。后来我尝试了int *help;在函数内new空间,但是也失败了。怎么办呢?没有完成我想的那样,但是下面的也可以通过题解。,,,,直接递归超时了。1递归 int coinChange(vector<int>& coins, int amount) {

2022-05-21 16:14:18 182

原创 梦开始的地方

开始  自大一起,沉溺于博客多年,在网络上四处学习,如负笈游学,遇良文甚多,爱嗜,不能释手,求知若渴,拼命汲取。至今日,已研一末,当是学以致用之时,故勤,有思。

2022-05-21 14:52:35 57

空空如也

空空如也

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

TA关注的人

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