网络初阶——高效IO & 多路转接 一个进程,但管理着多个文件描述符。利用多个文件描述符读写数据。参数介绍size:该参数已经被废弃了,传一个大于 0 的数进去就行了。返回值:成功时,返回 epoll 模型的 fd;失败返回 -1.
网络初阶——运输层:TCP 协议(Part2) 所以从上图可以看出,文件描述符是可以通过多个箭头来访问 socket 和报文的。而且,其中 struct udp_socket 和 struct tcp_socket 相当于继承了基类 struct socket ,同时 struct proto_ops 和 file_operations 表面上看只是存函数指针的,但其实就是 C 语言版的多态。
网络初阶——应用层:HTTPS 协议 从协议的名字来看,HTTP 比 HTTPS 少了一个 S。而这个 “S”,其实可以理解成 “Safe”,所以不难看出,其实 HTTPS 就是 HTTP 的安全版。就是为了保证客户端 cookie 的传输安全的。
Linux初阶——线程(Part2):互斥同步问题 当多个线程并发执行,并访问同一个变量时,就会很容易发生变量的一致性问题。如图所示,假如我想让变量 a 从 100 减到 0.线程 1 在做完 a-- 操作后就被换出了:线程 1 被换出线程2被换出线程 1 执行而此时 a 这个全局变量又从 10 变成 100 了。所以,这个变量从始至终都只能被一个执行流(线程)访问。同步就是让线程按照一定顺序获取资源,而不是一窝蜂地去抢。举个例子,假如厕所是一个共享资源,一次只能一个人用。当有人进去后,就会有很多人在外面等。
MySQL初阶——隔离级别之Read view 当运行 select 查询语句时,才会触发快照,创建 read view 对象,把此时正在处理(未提交)的事务的 ID 都记下来,以便于后面查询时可以控制该读哪些事务的记录,不该读哪些事务的记录。
Linux初阶——动静态库 由于共享区可能有多个动态库,因此动态库的起始地址是不确定的,因此如果一个动态库的代码载入共享区,那么这些代码一定不会用绝对地址来编址。取而代之的是,动态库的代码会采用相对地址编址,然后再加上载入共享区后获得的绝对起始地址(设起始地址的值为 start),那么进程可以通过 start + 相对地址 的方式访问该动态库的代码。而对于进程地址空间,动态库的代码也会载入进程地址空间的共享区;在程序运行时会把代码(函数的实现)加载进内存中,然后再调整页表的映射关系,使其虚拟地址在进程地址空间的共享区中。
C++进阶——智能指针(C++11) 所以,总的来说,如果我们要用智能指针的话,一般用 shared_ptr 和 weak_ptr 搭配用就可以解决程序因为抛异常而导致执行流乱跳,进而造成内存泄漏等问题了。
C++进阶——C++11(lambda表达式、包装器、绑定) lambda 表达式的语法是这样的:[capture-list] (parameters) mutable -> return-type { statement }。而且,lambda 表达式听起来是一个表达式而已,但其实是一个函数对象,而且其类型超级复杂,因此我们可以用 auto 来初始化 lambda 表达式。
C++进阶——C++11(part 1) 所以像 { 10, 20, 30 } 这种用大括号括起来的列表就是初始化列表。在 C++11 中,支持了用列表初始化来构造容器,因此我们都可以用 “{ }” 来进行初始化容器。
C++进阶——多态 被 virtual 修饰的成员函数就是虚函数。但要注意的是,虚函数的 virtual 跟继承里的 virtual 是任何没关系的。派生类只是把从基类继承下来的函数隐藏了,但派生类里依旧存在从基类继承下来的函数(只是表面上看不见而已),并且派生类里是可以访问到从基类继承下来的函数的(只不过访问时要指定类域而已)。
C++进阶——继承 继承就是一种类与类之间的一种关系。举个例子,如果 A 继承了 B ,那么 B 就拥有了 A 的所有成员(包括成员变量,成员函数)的拷贝,而且还可以在 A 的基础上添加新的东西(比如新的成员变量或函数)。
C++进阶——模板进阶 当类模板的函数声明和类模板的函数定义分开两个文件写时,编译器就会分离编译。private:// .h 文件public:void pop();private:// .cpp 文件// 显示实力化templatetemplate。