C++虚函数的实现基本原理

c++作为面向对象的语言,主要有三大特性:继承、封装、多态。关于多态,简而言之就是用父类型的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时绑定,要么试图做到运行时绑定。因此C++的多态分为静态多态(编译时多态)和动态多态(运行时多态)两大类。静态多态通过重载、模板来实现;动态多态就是通过本文的主角虚函数来体现的。

malloc和free的实现原理解析

C语言中使用malloc可以分配一段连续的内存空间。在c/c++开发中,因为malloc属于C标准库函数,经常会使用其分配内存。malloc是在堆中分配一块可用内存给用户。作为一个使用频繁的基础函数,理解清楚其实现原理很有必要,因此本文主要探讨malloc的具体实现原理,以及在linux系统中这该函数的实现方式。

常用寄存器总结

80386寄存器共有34个寄存器,可分为7类,它们是通用寄存器,指令指针和标志寄存器,段寄存器,系统地址寄存器,控制寄存器、调试和测试寄存器。我们经常碰到的是前四类寄存器,也是我这篇文章总结的重点。

二叉树遍历二三事

二叉树是一种非常重要的数据结构,可以视为一种介于图和链表之间的半线性数据结构,或者视为一种特殊的图。因此对于二叉树,有深度优先遍历和广度优先遍历,深度优先遍历有前序、中序以及后序三种遍历方法,而广度优先遍历即是层序遍历,一次遍历二叉树每一层节点。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种深度优先遍历不仅容易理解而且代码很简洁,而递归本身是操作系统内部实现了栈结构来实现,因此我们可以通过自己构造栈结构来将递归实现转化为迭代实现。而对于广度优先的层序遍历则需要借助队列实现。

HTTP协议详解

HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于(事实上)TCP的连接方式。

What is Cookie?

由于HTTP协议是无状态的协议,一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换需要建立新的连接。也就是说服务器无法从连接上跟踪会话,比如用户A购买了一件商品放入购物车,当再次购买时服务器已经无法判断该行为是否仍然属于用户A。引入Cookie机制则是为了弥补HTTP协议这一不足。