智能指针作为C++11里的新特征,有可能在面试里被问到。本文主要介绍C++里的三个智能指针:shared_ptr
、unique_ptr
、weak_ptr
。其实还有一种auto_ptr
指针,但在C++11里已经被弃用了,故此我们不做讨论了。
最近在牛客网刷题,和leetcode不一样,牛客网需要要自己控制从键盘输入变量。另外在实习的时候,碰巧页遇到几个C++读写文件的问题,之前都是直接网上搜索code,这几天抽空研究了这一块,发现无论是从键盘输入字符串还是从读取文件,都可以采用“流”的思想去理解。
分页和分段是在面试过程中常被问到的两种内存管理技术。
计算机结构比较复杂,那么说到“存储”,我们一般就想到内存和外存,比如我们买手机买电脑,都要看看这些终端的内存够不够打游戏,外存够不够装照片这些。内存外存只是比较通俗的叫法,在实际的计算机存储体系当中,我们划分了四块区域:寄存器(CPU registers)、高速缓存(CPU cache)、主存(内存)、外存(磁盘)。
这篇文章主要是将这座金字塔结构自顶向下第三层的主存结构,也就是我们俗称的内存。
内存这东西不是一两篇文章就能看懂吃透的,无奈每次面试或多或少都被面试官问道这些东西,稍微捋一下这些概念性的东西。
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建 查询 更新和删除数据 不同的存储引擎提供不同的存储机制 索引技巧 锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能 现在许多不同的数据库管理系统都支持多种不同的数据引擎 MySql的核心就是插件式存储引擎。
排序算法,面试中最经常被问到的问题,我们需要熟悉并了解各种算法的时间和空间复杂度、时间复杂度平均、最坏、最好的情况和是否为稳定排序。
在前面的文章中我们已经简单的了解了C++中面向对象的三大特征:封装、继承、多态。封装可以使得代码模块化,继承可以扩展已存在的代码,他们的目的都是为了代码重用。而多态的目的则是为了接口重用。也就是说,不论传递过来的究竟是那个类的对象,函数都能够通过同一个接口调用到适应各自对象的实现方法——“一个接口,多种方法”。
C++相对其他面向对象语言来说,之所以灵活、高效。很大程度的占比在于其多态技术和模板技术。
多态有静态多态和动态多态,其中静态多态是通过重载实现,在编译时就确实;而动态多态则是通过虚函数的机制实现的,在运行期间动态绑定。C++虚函数表是支撑C++多态的重要技术,它是C++动态绑定技术的核心。
面向对象的三个基本特征:封装、继承、多态。其中,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!
内存对齐这个东西我一开始也是不知道的,后来又一次面试被问到了,然后张总跟我随口普及了一下,其实还是蛮简单的,有一点点C的基础估计五分钟就能学会内存对齐的规则了。但如果你想刨根问底,为什么我们现有的计算机要内存对齐,里面的学问还是蛮深的,涉及到了处理器、寄存器这些很核心的内存硬件。