自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhuziyu1157817544

小小学渣在成长

  • 博客(37)
  • 资源 (2)
  • 收藏
  • 关注

原创 c++11库 <thread>的基本使用

创建线程:/************************************************************************* > File Name: 1.cpp > Author: 朱紫钰 > Mail: [email protected] > Created Time: 2017年12月19日 星期二 13时3

2017-12-19 14:19:45 1502

原创 webbench1-5源码分析

socket.c文件所有我自己的注释理解都是汉字,绝大部分前面都有zzy,是为了和原来作者的注释区分开/* $Id: socket.c 1.1 1995/01/01 07:11:14 cthuang Exp $ * * This module has been modified by Radim Kolar for OS/2 emx *//***************************

2017-12-17 14:26:54 406

原创 getopt和getopt_long

getopt和getopt_long函数1.介绍getoptint getopt(int argc, char * const argv[], const char *optstring); getopt函数的前两个参数,就是main函数的argc和argv,这两者直接传入即可,要考虑的就只剩下第三个参数。 optstring的格式举例说明比较方便,例如: c

2017-12-16 21:35:56 573

原创 axel:多线程下载工具

定位:基于http,ftp协议的多线程下载工具,支持断点续传。axel github代码:axelubuntu16.04下载: apt-get install axel使用方法:1.man axel 2.axel -h axel -o target url 改目标文件名称 axel -s xx url 指定最大下载速度 axel -n x url 指定最大连

2017-08-15 16:24:14 1036

原创 同步异步阻塞非阻塞

今天在某乎看到的有关同步异步阻塞非阻塞的例子,很形象。老张烧水。名词:老张,会响的水壶,不会响的水壶。同步阻塞:老张用不会响的水壶烧水,得在旁边看者,什么也干不了。水沸腾倒暖壶以后才能走。同步非阻塞:老张时不时去看看水有没有开,没有开的话,回客厅看电视。异步阻塞:老张在水旁边等着,等水壶响了倒热水。异步非阻塞:老张等水壶响了去倒水,其余时间在客厅看电视,不去厨房

2017-08-04 21:28:55 415 1

原创 有关谷歌浏览器的一个问题

先看我的测试结果: 最最low的服务器: 功能:监听新用户    监听注册描述符的EPOLLIN和EPOLLOUT。    触发EPOLLIN的话,打印缓冲区    触发EPOLLOUT,发送固定字符串 代码:/************************************************************************* > File Name

2017-08-04 17:53:30 645

原创 http状态码和我踩进去的坑

http状态码定义:HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码分类:1xx: 作为临时的响应,代表请求已经被受理,服务器用来向客户端指定客户端应该有的后续动作。2xx:请求成功,服务器已经接受并且会处理它3xx:这类状态码代表需要客户端采取进一步的操作才能完成请求。用于重定向。后续的请求地址(重定向目标)在本次响应的 Location 域中

2017-08-04 15:48:01 876

原创 用select处理带外数据

回顾select:下面的事件支持selece可读: 1.socket内核接收缓存区中的字节数大于或等于其低水位标记SO_RCVLOWAT(0x1004)。我们可以无阻塞地读取该socket,并且读操作返回字节数为0。 2.socket通信的对方关闭连接。此时对该socket的读操作将返回0。 3.监听socket上有新的连接请求。 4.socket上有未处理的错误。此时我们可以使用getso

2017-06-03 11:19:04 1204 1

原创 半同步/半异步模式和领导者/追随者模式

半同步半异步模式:出现原因: 异步线程执行效率高,但是编写复杂,同步线程效率低,但是逻辑简单。服务器要求好的实时性和同时处理多用户的请求,英雌采用两者结合的形式。 具体情况: 过程: 异步线程见听到客户请求后,将其封装成请求对象插入请求队列,请求队列将通过通知某个工作在同步模式下的工作线程来读取并处理该请求对象。具体选择哪一个工作线程来服务这个客户请求,取决于请求队列的设计。变体:半同步半反

2017-05-18 18:54:10 2023

原创 Reactor和Proactor的区别

1.先解释同步和异步:同步异步是一种通信机制。同步:调用方需要保持等待直到I/O操作完成。异步:调用方可以不用保持等待,只需要操作系统完成I/O操作通知调用方就可以了。2.再说说阻塞和非阻塞:阻塞非阻塞是一种调用机制。阻塞:调用方等待I/O操作完成后才返回,就是阻塞的。非阻塞:调用方不需要等待IO操作完成就立即返回。非阻塞的情况下,常常需要多次调用去check,才能获得

2017-05-17 14:42:29 1132

原创 高级I/O函数总结

怕忘。pipe函数int pipe(int fd[2]); 返回值: 执行成功返回0,失败返回-1. 理解: pipe创建的这两个文件描述符分别构成函数两端,往fd[1]中写的数据可以从fd[0]中读出,fd[0]只能用于从管道读数据,fd[1]只能用于往管道写数据。管道内部传输的时字节流,管道本身拥有一个容量的限制,fcntl函数可以修改管道容量。dup和dup2函数int dup(in

2017-05-16 18:01:56 410

原创 select和poll回射服务器程序

select版回射服务器1.代码:/************************************************************************* > File Name: server.c > Author: zhuziyu > Mail: [email protected] > Created Time: 2017年04月08日 星期六

2017-04-10 17:42:55 470

原创 基本TCP套接字编程总结

1.分配一个套接口的描述字及其所用的资源int socket(int family,int type, int protocol);//family指定协议族//type指定套接字类型//protocol指定为某个协议常数值12341234family选项AF_INETIPv4协议AF——INET6IPv

2017-04-10 10:49:57 819 1

原创 通用套接字地址结构

1.通用套接字地址结构起因: 当作为一个参数传递进任何套接字函数时候,套接字地址结构总是以引用的形式来传递,并且,这样有一个参数的人核桃皆自函数必须处理例子所有支持的任何协议族的套接字地址结构。因此在头文件中定义了一个通用的套接字地址结构。 2.通用套接字地址结构#include <sys/socket.h>struct sockaddr{ uint8_t sa

2017-03-29 19:55:09 1461

原创 拷贝构造函数

结论如题。 解释如下: 先看代码:#include <iostream>#include <cstdlib>#include <string>using namespace std;class People{private: string m_strName;public: People(){} People(string _name){ cou

2017-03-27 11:15:42 365

原创 C++智能指针 shared_ptr,unique_ptr和weak_ptr

1.智能指针为什么存在?因为C++没有自动回收内存的机制,因此每一次new出来的动态内存必须手动delete回去。因此智能指针可以解决这个问题。2.智能指针的大致描述是什么?智能指针:自动负责释放所指向的对象,实际上它利用了栈的机制,每一个智能指针都是一个模板类,调用智能指针实际上是创建了一个智能指针的对象,对象生命周期到达尽头的时候,会自动调用智能指针的析构函数,在析构函数里,释放掉它管理的内存,

2017-03-22 20:07:48 10937

原创 一个纯小白内心的读白--学习TCP/IP的开始

内心好奇又烦恼,不知道的太多了。先不总结我学习的TCP/IP。因为我都不好意思说我在学习TCP/IP.挡不住内心的悲伤。描述一个网络中的各个协议的常用方法是使用International Organization for Standardization的open systems interconnection模型,简称OSI模型。它与网际网协议族对比如下:看一个简单的时间获取客户程序#include

2017-03-22 13:49:27 551 2

原创 关联容器 map/set/multimap/multiset

关联容器分有序和无序。 有序容器的名称们 简介 map 关联数组,保存键-值对 set 关键字就是它的值,只保存关键字 multimap 关键字可以重复出现的map multiset 关键字可以重复出现的set 无序容器的名称们 简介 unordered_map 哈希函数组织的map unordered_set 哈希函数组织的set un

2017-03-21 20:18:36 422

原创 lambda表达式

lambda是C++11特性之一,可以方便构造匿名函数。当代码有很多小程序并且使用次数只有一次时候,可以把他们重构成lambda表达式。C++11 的 lambda 表达式规范如下: (1)[ capture ] ( params ) mutable exception attribute -> ret { body } (2)[ capture ] ( params ) -> ret { bo

2017-03-20 10:53:36 351

原创 烫烫烫和屯屯屯

int p[16];原来写代码会出现死循环的烫烫烫,因为debug把所有分配出来的栈空间的每一个字节都初始化成0xCC。多个0xCC 的汉字编码就是n个“烫”。如果打印一个指针的值发现是0xCCCCCCCC,那么基本可以确定这个指针没有被初始化。如果未初始化的标记由0xCCCCCCCC变为0xCDCDCDCD,因为有时编译器会使用0xCDCDCDCD作为未初始化的标记,那么打印会出来“屯屯”。

2017-02-12 19:02:41 940 3

原创 《程序员的自我修养》--内存

内存布局一般有如下布局几个区: 栈:维护函数调用上下文,离开栈,函数调用没办法实现。 堆:容纳应用程序动态分配的内存区域。 可执行文件映像:可执行文件在内存里的映像。 保留区:队内存中受到保护,禁止访问的内存区域总称。 一个进程里典型的内存布局如下: 栈栈总是向下增长。栈顶由esp寄存器进行定位,压栈使得栈顶减小,出栈使得栈顶增加。单纯减小esp值等于在栈上开辟空间,单纯增加esp值等于

2017-02-12 18:52:28 323

原创 《程序员自我修养》--动态链接

定义和基本思想动态链接英文是Dynamic Linking需要解决空间浪费和更新困难这两个问题最简单的办法就是把程序的模块相互划分开来,形成独立的文件,而不再将他们静态的链接在一起。简单地讲,就是不对那些组成程序的目标文件进行链接,等到程序要运行时才进行链接。也就是说,把链接这个过程推迟到了运行时再进行,这就是动态链接(Dynamic Linking)的基本思想补充理解普通可执行程序和动态链接库都包

2017-02-09 20:51:59 718

原创 可执行文件装载和进程 笔记

装载的两种方法覆盖装入 : 利用程序的局部性原理,将一个程序中出现频率高的模块在程序运行时始终放入内存中,其他的模块,按照先后顺序,依次被覆盖。 如图例子: mian部分在程序运行时始终占用内存,加入main()函数调用A函数,A函数读入内存,等到A执行结束,main调用b时,B把A所用的所有空间全部覆盖。 A和B是两个竞争模块。 被调用的模块被称作调用它的模块的子模块。 任何一个

2017-01-25 16:36:02 737

原创 《程序员的自我修养》--静态链接

空间分配例子:/*a.c*/extern int shared;int main(){ int a = 100; swap(&a,&shared); return 0;}/*b.c*/int shared = 1;void swap(int *a,int *b){ int temp; temp = (*a); (*a) = (*b);

2017-01-17 14:20:04 758

原创 《程序员的自我修养》--目标文件有什么和ELF文件格式简述

A.目标文件的格式目标文件定义源码经过编译之后但是没有经过链接的中间文件。理解:目标文件和可执行文件的结构相似,所以和可执行文件采用一种格式存储。可执行文件的格式,主要有PE(Portable Executable )和ELF(Executable Linkable Format)。目标文件和可执行文件可以看成一种类型的文件。同理,动态链接库和静态链接库也是按照可执行文件的格式存储的。以后这里主要说

2017-01-15 19:37:02 373

原创 《程序员的自我修养》-编译和链接

一个.c文件最终成为a.out文件需要经历预处理,编译,汇编,链接这4个过程。gcc总过程如下预编译解释 主要处理源代码文件里以#开始的预编译指令。eg.#include,#define 内容 1.展开所有的宏定义,#define 2.处理所有条件编译指令,#if, #,ifdef,#elif,#else,#endif 3.处理#include,通过递归过程

2017-01-08 17:42:27 1023

原创 《机器学习》第二章学习总结

1.评估方法 留出法:分层采样,全部样本的x%用来作为训练样本,1-x%用来作为测试样本交叉验证:K折交叉验证,样本分成k份,每次按顺序取k-1份训练样本,生另一分作为测试样本。自助法:随机取样,每次随机挑出样品一个放入样品级,重复m次,得到训练集合 ,剩下没有被抽中的样品作为测试。2.性能度量 A. 错误率 精度 x/m 1-x/mx :预测错误的样本数量 m:样本的全部数量

2016-11-27 17:26:43 519

转载 rpm 软件包管理工具

rpm 是(RPM软件包管理器)的缩写    rpm 执行安装包的二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。    .src.rpm结尾的文件,这些文件是由软件的源代码包装而成的,用户要安装这类RPM软件包,命令:  rpm --recompile 文件名.src.rpm 这是编译安装 rpm --rebu

2016-10-12 19:20:15 394

原创 进程和线程

我理解的进程是一个动态的概念,区别于程序(静态的概念,只存在于硬盘)进程存在于内存,它占有代码段,数据段(全局,静态),堆栈(动态分配的变量),当我一旦开了一个进程,就必须记得exit()。而且我也要写wait函数确保子进程消亡,(如果我想让他出错就用abort函数)避免它成为僵尸态。既然开了一个进程,我要让他去执行别的任务,因此exec系列函数让它执行别的任务,如果它优先级太低那我就给他nice

2016-07-29 13:29:33 296

原创 最近的学习总结

这周我们主要学习了相关的文件操作,这个加深了我对文件的认识。同时也体会到了,在linux下一切皆文件的概念。  在学习的过程中,有欢乐自己学到了知识,但是在自己实现某个命令时,改bug也比较痛苦吧。不过不管怎样,自己这一周的成长还是蛮大的。  我总结一下自己学习的知识,对于文件的操作,我感觉自己学习了对文件操作的大致整体,包括一开始的文件概述,文件的创建和打开,读写文件,以及对文件的属性操

2016-07-24 21:16:42 465

原创 这几天学习的一点感想

1>代码写的乱的时候一定要勇敢删除.谁都不想杀了自己的孩子,但是该杀还是得杀,,,,比喻不恰当。只有放下原来的,才能写出更清晰的代码-------我最有成效的一天就是扔掉了1000行代码   -Ken thompson2>我看书,印象比较深刻的写代码的方法总结和自己的感觉 :    1.模块化 : 设计接口 2.分离 : 策略 不等于 机制 3.通用 : 接口不要标新立异 ,我

2016-07-22 14:45:57 734

原创 cp命令

功能:  ./my_cp   -r                       //复制1目录下所有东西到2     ./my_cp             //复制文件到filename2    ./my_cp   -or                    //复制1下所有目录到2  #include#include#include#include#include#

2016-07-22 14:39:45 502

原创 chown命令

#include#include#include#include#include#include#includevoid my_error(char *error_string ,int line){ printf("error -> line :%d\n",line); perror(error_string); exit(1);}/* * *函数

2016-07-20 08:19:31 720

原创 Linux文件操作

1.return和exit区别:exit()代表退出该进程,exit(1)是出现错误时关闭该进程,exit(0)代表正常退出,exit代表的是系统调用级别的进程结束.return代表的是这一层函数结束返回上一级函数,如果是main的return,就代表着程序的结束运行,它是调用堆栈的返回(这句话我也没懂什么意思,将来回头再问)2.书上的实现chmod为什么mode最后化成8进制

2016-07-19 11:59:31 399 2

原创 改成utf-8

之前为了给老师交作业(在windows下生成.exe给她一并发过去),然后我给代码转码了,后来手贱,把一个叫examples.desktop的文件给删除了(没有查明这个文件干啥,也不知道乱码和他有关否),反正就是乱码了,然后我就带着极为复杂的心情战战兢兢地转码,要知道,我是电脑盲啊。。。有两种方法:     1我先看了看自己的代码现在的文字码是啥。直接在代码下的命令行输入    :set

2016-07-16 14:49:40 491 2

转载 ubuntu 16.04 下载gtk

我在终端下输入 sudo apt-get install gtk出现无法定位软件包的错误,因此我换了一种方法:1->输入sudo apt-get install build-essential ,获取一些gcc没有的头文件2->输入sudo apt-get install gnome-devel gnome-devel-docs ,配置gtk环境。这句话输入以后+enter等级分钟

2016-06-16 13:30:03 3011

原创 西邮linux小组面试题总结(2016-5-30)

1.const和define的区别:1->const在编译阶段用,define在预处理阶段才替换2->const检查类型,const int i=3.5,这就是错的;define不检查类型,只完成普通的替换3->const常量会在内存中分配,而define则不会。2.指针变量在内存中的字节大小:大小根本取决于cpu当下的寻址能力,在vc6.0下这个和你的cpu,操作系统和编译器

2016-05-30 12:49:13 546 1

WebBench(c++版本)

这是我自己根据原作者WebBench改的,我之前上传过原作者的WebBench。我的版本使用c++作为开发语言,多线程压测网站,使用锁保护数据

2017-12-20

webbench-1.5.tar.gz

webbench-1.5压缩包,包含webbench-1.5源码和我对源码的分析

2017-12-17

空空如也

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

TA关注的人

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