Effective c++ 整理一

让自己习惯c++

试c++为一个语言联邦

c++是c的拓展,最大的区别就是c++在c的基础上有了封装,继承和多态,但是c++里面不仅仅包含了
这个,还有模板,STL,都是非常重要的。

尽量以const,enum,inline 替换 #define

#define的解析在预处理阶段,而const,enum,inline的则是在编译阶段。#define并不真正属于语言
的一部分。
以这个宏为例:
#define ASPECT_PATIO 1.653
1.在预处理阶段,ASPECT_PATIO就被替换掉了,所以在编译阶段,并不能看到关于ASPECT_PATIO的信息
2.ASPECT_PATIO在程序中被使用的多次,都被替换成1.653可能会出现多份1.653而使用const常量只会有一个。

用宏来声明函数会导致一些不法预见的后果。以为宏只会简单替换不会去计算参数的值然后传入。
在c++中,最好使用inline函数来替换掉这个的宏函数。

尽可能使用const

1
2
3
4
5
char greeting[] = "hello";
char *p = greeting; //non-const pointer, non-const data
const char* p = greeting; //non-const pointer, const data
char* const p = greeting; //const pointer, non-const data
const char* const p = greeting; //const pointer, const data

如果const出现在星号左边,表示被指物是常量,如果const在星号右边,表示指针本身是常量。

令函数返回一个常量值,往往可以降低因客户端错误而造成的意外,而又不至于放弃安全性和高效性。
如果成员函数如果只有常量性不同,可以被重载。
当const和non-const成员函数有着实质等价的实现时,直接令non-const版本调用const版本来避免代码重复

确定对象被使用前已先被初始化

为内置型对象进行手工初始化,因为c++不保证初始化他们
尽量使用初始化列表来对成员变量进行初始化,而不要在构造函数里面,使用初始化列表只需要调用
一次拷贝构造,而在构造函数里面,成员对象需要先初始化,然后进行赋值运算。
成员初始化的顺序只与生命顺序有关和初始化列表顺序无关。
为了免除”跨编译器单元之初始化次序”,以local static对象替换non-local-static

DNS解析过程

DNS怎么说呢,特别特别重要,没有它,不知道会怎样。
DNS简单来说就是进行域名和IP的转换,那该如何转换呢?既然要转换,肯定有转换表,那表应该存
哪个服务器上,怎样去请求域名服务器来进行转换,所以,这个转换的过程都是什么。而面试的时
经常会有这道题:当在浏览器输入网址按下回车之后,到浏览器回显网页,详细描述一下中间发生了神马?

unix-c-用户态和内核态的区别

用户态和内核态程序运行在用户空间还是内核空间。
以32位操作系统为例,在每个进程中,都有自己独立的地址空间,总共的虚拟地址空间也就是4G
操作系统将高地址的1G,0xC0000000到0xFFFFFFFF供给内核使用,低位3G分配给用户来使用。
低位3G是私有的,这个空间其他进程是不可见的,因为谁也不知道该进程的地址真正被映射到哪了
而高位1G则是大家共有的,这1G存放的是系统比较重要的资源,所以需要由内核来统一管理,因而
所需要的运行级别特高0,而普通进程执行的级别为3.
当程序执行系统调用,中断,异常的时候,这些需要进行有用户态到内核态的转换,来去访问一些
无法访问的资源。

python爬虫-爬取一波美女图

最近简单地看了下python爬虫的视频。便自己尝试写了下爬虫操作,计划的是把某一个网站上的美女图全给爬下来,不过经过计算,查不多有好几百G的样子,还是算了。就首先下载一点点先看看。
本次爬虫使用的是python2.7的版本,并且本次的目标网站并没有采用js来加载图片,所以没有涉及对js脚本的解析,都是通过来分析html文件通过正则来一步步提取图片网址,然后存起来。
首先这个网站有很多分类,到美女图这个子网页,可以发现有很多页,同时每页有多个相册,每个相册点进去就会有多个页,每页有多张照片
流程大概是这样

unix_c-IO复用

简介

IO复用技术,简单来说就是同时监听多个描述符。在没有用到IO复用以前,只能是一个线程或一个
线程去监听,服务端同时有多个连接的时候,需要创建多个线程或者进程。而且,并不是所有的连
接是一直在传输这数据,可能只是连接后啥都没干,如果这样,进程就啥都没干。

ncurses库的使用

为了实现一个简单的聊天程序,如果使用普通的输入输出函数,会很凌乱。so,便想着能不能用下
ncurses这个字符图形库

总结一下,就是这样。

http协议

http协议属于应用层的协议,在传输层TCP基础之上,加上指定的报头,封装成了http协议

http协议中文名:超文本传输协议
Hyper Text Transfer Protocol(超文本传输协议)

tcp--11种状态

tcp连接和断开过程中的状态变化

全部的11种状态
(1) SYN_SEND (2)FIN_WAIT1 (3) FIN_WAIT2 (4) CLOSING (5) TIME_WAIT
(1) LISTEN (2) SYN_RCVD (3) CLOSE_WAIT (4) LAST_ACK
(1)CLOSED (2) ESTABLISHED

,