- 博客(100)
- 收藏
- 关注
原创 C++类的构造函数可以私有吗?
通常我们都将构造函数的声明置于public区段,假如我们将其放入private区段中会发生什么样的后果?没错,我也知道这将会使构造函数成为私有的,这意味着什么?我们知道,当我们在程序中声明一个对象时,编译器为调用构造函数(如果有的话),而这个调用将通常是外部的,也就是说它不属于class对象本身的调用,假如构造函数是私有的,由于在class外部不允许访问私有成员,所以这将导致编译出错。你于...
2019-11-19 11:18:14
4631
1
原创 在Ubuntu 16.04下安装MySQL
1,首先执行下面三条命令:执行第一条命令:sudo apt-get install mysql-server如下图:输入 y ,下载安装时会出现要求设置密码的界面:输入自己想设置的密码,之后再次输入确认密码。完成之后如下图:执行第二条命令:sudo apt-get install mysql-client如下图:接着执行第三条命令:sud...
2019-05-29 16:07:51
195
原创 libevent源码深度剖析
第一章1,前言Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关文章也不少。写这一系列文章的用意在于,一则分享心得;二则对libevent代码和设计思想做系统的、更深层次的分析,写出来,也可供后来者参考。附带一句:Lib...
2019-05-16 17:01:57
383
原创 select poll epoll简单比较
selectselect最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使得进程可以获得这些文件描述符从而进行后续的读写操作。select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实上从现在看来,这也是它所剩不多的优点之一。select的一个缺点在...
2019-05-16 16:41:09
158
原创 Linux最大文件句柄(文件描述符)限制和修改
转自:http://jameswxx.iteye.com/blog/2096461写这个文章是为了以正视听,网上的文章人云亦云到简直令人发指。到底最大文件数被什么限制了?too many open files错误到底可以通过什么参数控制?网上的很多文章说的大致步骤是没有错的,大致如下:shell级限制通过ulimit -n修改,如执行命令ulimit -n 1000,则表示将当前s...
2019-05-13 09:57:34
677
原创 事件驱动模型和异步IO多路复用
事件驱动模型协程:遇到IO操作就切换。但什么时候切回去呢?怎么确定IO操作完了?很多程序员可能会考虑使用“线程池”或“连接池”。“线程池”旨在减少创建和销毁线程的频率,其维持一定合理数量的线程,并让空闲的线程重新承担新的执行任务。“连接池”维持连接的缓存池,尽量重用已有的连接、减少创建和关闭连接的频率。这两种技术都可以很好的降低系统开销,都被广泛应用很多大型系统,如...
2019-05-06 13:43:10
369
原创 Linux五大网络IO模型图解
对于一个应用程序即一个操作系统进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有),它们都是处于虚拟地址空间中。用户进程是无法访问内核空间的,它只能访问用户空间,通过用户空间去内核空间复制数据,然后进行处理。阻塞io(同步io): 发起请求就一直等待,直到数据返回。好比你去商场试衣间,里面有人,那你就一直在门外等着。(全程阻塞) 非阻塞io(同步io): ...
2019-04-30 17:41:02
343
原创 守护进程
什么是守护进程?守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任何终端...
2019-03-28 10:30:38
151
原创 ar nm ldd 静态库 动态库
一、ar的基本用法 ar命令可以用来创建、修改库,也可以从库中提出单个模块。库是一单独的文件,里面包含了按照特定的结构组织起来的其它的一些文件(称做此库文件的member)。原始文件的内容、模式、时间戳、属主、组等属性都保留在库文件中。 下面是ar命令的格式: ar [-]{dmpqrtx}[abcfilNoPsSuvV] [membername] [count] archive...
2019-03-04 16:02:08
615
原创 cin.get与cin.peek
输入原理:程序的输入都建有一个缓冲区,即输入侧缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而CIN函数直接从输入缓冲区中取数据。正因为CIN函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,CIN函数会直接取得这些残留数据而不会请求键盘输入一:cin.peek#include <iostream>using namespa...
2018-12-19 14:10:06
326
原创 C++中的类所占内存空间总结
最近在复习c++的一些基础,感觉这篇文章很不错,转载来,大家看看!类所占内存的大小是由成员变量(静态变量除外)决定的,成员函数(这是笼统的说,后面会细说)是不计算在内的。摘抄部分:成员函数还是以一般的函数一样的存在。a.fun()是通过fun(a.this)来调用的。所谓成员函数只是在名义上是类里的。其实成员函数的大小不在类的对象里面,同一个类的多个对象共享函数代码。而我们访问类的成员...
2018-10-09 01:14:51
187
原创 虚函数表
C ++的虚函数(虚函数)是通过一张虚函数表(虚拟表)来实现的。简称为V-Table。在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承,覆盖(覆盖)的问题,保证其能真实的反应实际的函数。这样,在有虚函数的类的实例中这张表被分配在了这个实例的内存中,所以当我们用父类的指针操作一个子类的时候,这张虚函数表就显得尤为重要了,他就像一个地图一样,指明了实际所应该调用的函数。说明:虚函数...
2018-06-11 14:08:08
556
转载 数据结构__树
树是最优美的形状(世间万物皆有其树结构)①树的基本概念树(Tree)是n(n>=0)个结点的有限集。在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,...,Tn,其中每个集合本身又是一棵树,并称为根的子树(SubTree)层次 树 1 ...
2018-06-08 15:05:04
284
原创 C++ const
看到const关键字,C ++程序员首先想到的可能是const常量。这可不是良好的条件反射。如果只知道用const定义常量,那么相当于把火药仅用于制作鞭炮.const更大的魅力是它可以修饰函数的参数,返回值,甚至函数的定义体。const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C ++程序设计书籍建议:“Us...
2018-05-10 17:09:29
233
原创 linux应用程序中,内存布局
1.linux应用程序内存布局从低地址到高地址分别为:代码段,数据段,BSS段,堆,栈对向高内存地址生长,栈想低内存地址生长Linux的中所有的应用程序都是这个布局,每个应用程序都是从0x80480000这个地址开始的,这样冲突吗?不冲突,因为这个地址是一个虚拟地址,LINUX中每个应用程序都有自己的虚拟地址空间。2.2。查看的Linux中应用程序内存布局方法:通过查看应用程序进程中的进程地址映射...
2018-05-02 00:42:21
877
1
原创 字符型char和整型int之间的关系
在C语言中并没有char类型的常量(但是在C++中却有,字符常量都是char类型),其实是用int表示char,字符型与整型相比只是更加节省内存。(在所有数据类型中,char类型占用的内存空间最少) 有符号的字符表示-128~127,无符号字符表示0~255。char相当于signed char还是unsigned char取决于编译器。 字符型数据在内存中是以二进制形式存放的,并不是真正的把...
2018-05-02 00:04:01
882
原创 内存地址分布
看下面一段代码[CPP]查看普通复印#包括<比特/ STDC ++小时。>使用命名空间std; int main(){int a,b; //栈的printf(“%X \ n%X \ n”,&一个,和b); int * c = new(int); //堆的printf(“%X \ n”个,C); }运行结果:我也有这样的疑问,记得学习的计算机组成原理上都说栈在高地址往低处增长,堆在低地址...
2018-04-19 18:02:39
466
转载 sed命令详解
sed命令详解1 命令功能 sed是一个相当强大的文件处理编辑工具,sed用来替换,删除,更新文件中的内容。sed以文本行为单位进行处理,一次处理一行内容。首先sed吧当前处理的行存储在临时的缓冲区中(称为模式空间pattern space),接着处理缓冲区中的行,处理完成后,吧缓冲区的内容输出到屏幕。sed处理完一行就将其从临时缓冲区删除,然后将下一个行读入,进行处理和显示,这样不断重复直...
2018-03-27 11:18:52
769
转载 Ubuntu 16.04 下 Vim安装及配置
Ubuntu 16.04 下安装Vim默认已经安装了VIM-tinylinuxidc@linuxidc:~$ locate vi | grep 'vi$' |xargs ls -allrwxrwxrwx 1 root root 17 12月 9 21:12 /etc/alternatives/vi -> /usr/bin/vim.tinylrwxrwxrwx 1 root root...
2018-03-26 18:01:46
6006
转载 在linux环境下编译C++ 程序
单个源文件生成可执行程序下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: 单个源文件生成可执行程序/* helloworld.cpp */#include <iostream>int main(int argc,char *argv[]){ std::cout << "hello, world" << std:...
2018-03-21 16:40:22
307
转载 ubuntu下的文本查看相关命令
文本查看1.cat命令(查看文本内容)使用时三种常用模式(1)cat 文本名直接查看文本内容(2)cat 文本名 -n直接查看文本内容,但为文本中所有行编号(3)cat 文本名 -b直接查看文本内容,但为文本中所有非空白行编号2. head命令(查看文本的前几行)默认为10行,但可以使用-n指定具体行数(1)head 文本名(默认)查看文本前10行(2)head -n M 文本名(默认)查看文本...
2018-03-13 16:46:56
1748
转载 Linux下的tar压缩解压缩命令详解
tar-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。-z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解开到标准输出下面的参数-f是必须的-f: 使用档案名字,切记...
2018-03-13 15:31:44
307
原创 C++基本数据类型
基本数据类型C++11语言有一组基本类型,对应于计算机的基本存储单元和使用这些单元去保存数据的一些常用方式 ,--------------------------------------------------------------------------------------------布尔型 bool ...
2018-03-09 18:02:08
318
转载 C++面试题(二)
我自己总结过一些常见的C++面试题,那个是基于一个同学的腾讯面经所问问题,再加上知识点扩展进行了总结,这个是网上之前就有的版本,比较基础,有些题目总结一下,不能忘了基础:1.求下面函数的返回值( 微软)int func(x) { int countx =0; while(x) { countx ++; x = x&...
2018-03-07 17:15:41
662
转载 TCP和UDP的区别
TCP和UDP区别TCP和UDP编程区别TCP编程的服务器端一般步骤是: 1、创建一个socket,用函数socket(); 2、设置socket属性,用函数setsockopt(); * 可选 3、绑定IP地址、端口等信息到socket上,用函数bind(); 4、开启监听,用函数listen(); 5、接收客户端上来的连接,用函数accept(); 6、收发数据,用函数...
2018-03-07 17:14:10
263
转载 进程间通信的方式
多进程:首先,先来讲一下fork之后,发生了什么事情。由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新进程(子进程)的进程 id。将子进程id返回给父进程的理由是:因为一个进程的子进程可以多于一个,没有一个函数使一个进程可以获得其所有子进程的进程id。对子进程来说,之所以fork返回0给它,是...
2018-03-07 17:12:23
328
转载 C++常见面试题
【转载请注明出处】:http://www.cnblogs.com/LUO77/p/5771237.html 1. 结构体和共同体的区别。定义:结构体struct:把不同类型的数据组合成一个整体,自定义类型。共同体union:使几个不同类型的变量共同占用一段内存。地址:struct和union都有内存对齐,结构体的内存布局依赖于CPU、操作系统、编译器及编译时的对齐选项。关于内存对齐,先让我们看四个...
2018-03-07 17:08:40
259
原创 c++异常处理机制示例及讲解
[cpp] 查看纯文本 #include“stdafx.h” 的#include <stdlib.h>中 的#include <crtdbg.h> #include <iostream> //内存泄露检测机制 #define _CRTDBG_MAP_ALLOC #ifdef _DEBUG #define new ne...
2018-02-28 10:08:49
317
原创 #ifdef _DEBUG用法小结
1#ifdef _DEBUG virtual void AssertValid() const; //assert(断言)valid(有效的,正确的)virtual void Dump(CDumpContext& dc) const; //存储上下文#endif这两个函数是调试用的,第一个函数检查可用性,即是否有效 第二个函数如果未更改的话,最终调用的是Cwnd::Dump
2017-12-28 15:01:38
10110
1
原创 C++覆盖、重载、多态区别 ; 重载、重写(覆盖)、重定义(隐藏)三者区别
覆盖:在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中的那个。//coverage.cpp #include using namespace std; class A{public: void ShowMessage(
2017-12-15 11:40:01
434
原创 深入理解C++中public、protected及private用法
初学C++的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问范围,很容易搞糊涂。今天本文就来十分分析一下C++中public、protected及private用法。相信对于大家深入掌握C++程序设计会有很大的帮助。这里我们首先要明白下面几点。1.类的一个特征就是封装,public和private作用就是实现这一目的。所以:用
2017-12-15 11:17:07
268
原创 TCP三次握手,四次挥手
TCP头部: 其中 ACK SYN 序号 这三个部分在以下会用到,它们的介绍也在下面。暂时需要的信息有:ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接
2017-12-07 14:45:46
208
原创 网络编程中,同步传输和异步传输有什么区别
在网络通信过程中,通信双方要交换数据,需要高度的协同工作。为了正确的解释信号,接收方必须确切地知道信号应当何时接收和处理,因此定时是至关重要的。在计算机网络中,定时的因素称为位同步。同步是要接收方按照发送方发送的每个位的起止时刻和速率来接收数据,否则会产生误差。通常可以采用同步或异步的传输方式对位进行同步处理。1. 异步传输(Asynchronous Transmission):异步传输模
2017-11-22 00:06:00
5568
原创 C++面试题_02
1. C 和 C++ 区别 2. const 有什么用途 主要有三点: 1:定义只读变量,即常量 2:修饰函数的参数和函数的返回值 3: 修饰函数的定义体,这里的函数为类的成员函数,被const修饰的成员函数代表不修改成员变量的值 3. 指针和引用的区别 1:引用是变
2017-10-15 23:24:27
714
原创 C++面试题_01
转自:http://blog.csdn.net/shihui512/article/details/9092439;1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和
2017-10-15 22:59:33
287
原创 C++源代码如何生成可执行文件
先看一段最简单的代码:#include int main (int argc,char* arg[]){printf("hello world");return 0;}如何把上面的代码转换成可执行的代码呢,通常我们可以用gcc hello.c 在同样的路径下得到一个a.out的可执行文件。其实gcc 编译链接一个可执行文件分为4个步骤: 1 预处理
2017-09-01 16:08:49
11637
1
原创 C++堆、栈、自由存储区、全局/静态存储区和常量存储区
一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量
2017-08-28 15:49:55
301
原创 Linux终端如何翻页
屏幕翻页快捷键 shift+PgUp 向前翻看,一般翻13页左右。shift+PgDown 向后翻看,一般翻13页左右。 我们翻阅目录和打开文件后,经常会由于输出内容太多,使一屏无法显示,所以我们要经常用到这些命令,下面我们尝试下这些命令: ls -l /etc |moreless -N /etc/profile 显示行号less的动作命令:j
2017-08-23 19:37:29
20487
原创 linux tty1-7理解
tty1-6是文本型控制台,7是x-window(图形)控制台.在本地机器上可以通过alt+f1(f1-f7键)切换到对应的登录控制台.比如可以在tty1用root登录,再在tty2登录root,tty1查询的结果跟tty2查询的结果进行对比.因为它不像在xp下面使用shell登录.你可以开多个窗口.反正我想到只是这个作用.至于为什么只会出现6个呢.就不懂了.但是在/etc/tty.con
2017-08-23 16:04:08
1676
原创 ubuntu初始root密码和sudo、su命令
ubuntu初始root密码安装完Ubuntu后忽然意识到没有设置root密码,不知道密码自然就无法进入根用户下。到网上搜了一下,原来是这么回事:Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码。解决方法:我们可以在终端输入命令“sudo passwd”,然后输入当前用户的密码后"Enter"。终端会提示我们输入新的密码并确认,此时的密
2017-08-22 16:32:12
1608
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人