C C++最新C++基础知识面试必备、复习细节 (3)_高级c++程序面试必备知识,Service有几种启动方式

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

c++类型安全
  • c++远比C更有类型安全性
  • c++的一些新的机制保障类型安全:
    • new返回的指针类型严格与对象匹配,而不是malloc返回的void*空类型指针
    • c++提供了dynamic_cast关键字,使得转换过程更加安全
    • 引入const关键字代替#define constants,有类型和作用域,而#define constants是简单的文本替换;
C++中四种类型转换方式
转换类型操作符作用
static_cast静态类型转换,类似于c的强制类型转换。包括:基本的数据类型转换,int到float等;
const_cast去掉类型的const或volatile属性
dynamic_cast有条件转换,动态类型转换,运行时检查类型安全(转换失败返回NULL) 通常用于基类和子类之间的转换
reinterpret_cast仅重新解释类型,但没有进行二进制的转换,可以进行不同类型的指针转换 该转换较危险,很少使用,慎用
c++11的新特性
  • auto : auto可以根据上下文推测变量类型 auto声明的变量必须要初始化.

auto实际上实在编译时对变量进行了类型推导,所以不会对程序的运行效率造成不良影响

  • nullptr:替换NULL,避免NULL可能导致的问题 NULL在C++中代表着0,而nullptr在任何时候都代表空指针。
  • 基于范围的for循环:
vector<int> v{1,2,3,4,5};
for(const auto& e : v)
	cout<<e<<endl;

  • 虚函数的override和final指示符

    • override,表示函数应当重写基类中的虚函数
    • final,表示派生类不应当重写这个虚函数
  • 智能指针:为防止内存泄露等问题,用一个对象来管理野指针,使得在该对象构造时获得该指针管理权,析构时自动释放。包含在头文件中

智能指针名称细节
auto_ptr基于所有权转移。 ( 已经被c++11抛弃)缺点:一个空间不能由两个auto_ptr管理,不然会析构两次;auto_ptr的拷贝构造会将原指针的管理权交给目标指针,会使得原指针悬空。故auto_ptr会导致一些内存泄漏和野指针问题
unique_ptr“唯一”拥有其所指对象,保证同一时间内只有一个智能指针可以指向该对象。有效避免资源泄露(例如“以new创建对象后因为发生异常而忘记调用delete”) 不共享它的指针,无法复制到其他unique_ptr(无拷贝构造函数),无法通过值传递到函数(无拷贝构造)
shared_ptr允许多个指针可以同时指向一个对象,当最后一个shared_ptr离开作用域时,内存才会自动释放。shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存。每使用他一次,内部的引用计数加1,每析构一次,内部的引用计数减1,减为0时,自动删除所指向的堆内存。注意避免循环引用,shared_ptr的一个最大的陷阱是循环引用(当两个对象相互使用一个shared_ptr成员变量指向对方,会造成循环引用,使引用计数失效,从而导致内存泄漏)
weak_ptr不增加计数,为了解决shared_ptr存在相互引用的问题,确保能够正确析构。是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象。最大作用在于协助shared_ptr工作,像旁观者那样观测资源的使用情况。weak_ptr可以从一个shared_ptr或者另一个weak_ptr对象构造,获得资源的观测权。但weak_ptr没有共享资源,它的构造不会引起指针引用计数的增加。
  • STL
容器名称细节
unordered_map采用HASH MAP实现(map内部实现了一个红黑树,故查找时间复杂度为O(logn), unordered_map通过哈希映射实现查找复杂度为O(1));如果没有顺序遍历需求采用unordered_map通常更优
unordered_set采用HASH MAP实现(set采用红黑树实现)
array具有固定大小的数组。支持快速随机访问。不能添加或删除元素。array除了有传统数组支持随机访问、效率高、存储大小固定等特点外,还支持迭代器访问、获取容量、获得原始指针等高级功能
forward_list单向链表。forward_list和list的区别在于前者是单向链表,它的迭代器是前向有效的;后者是双向链表,在内部存在两个链接,它的迭代器是双向有效的。
malloc/free 和new/delete
  • 相同点:都可用于申请动态内存和释放内存
  • 区别:malloc只分配指定大小的堆内存空间,而new可以根据对象类型分配合适的堆内存空间。free释放对应的堆内存空间,delete,先执行对象的析构函数,在释放对象所占空间。malloc分配时的大小是人为计算的,返回类型是void*,使用时需要类型转换,new在分配时,编译器能够根据对象类型自动计算出大小,返回类型是指向对象类型的指针。new调用构造函数构造对象,而malloc不能;delete将调用析构函数析构对象,而free不能
程序的内存分配
  • 栈区:由编译器自动分配与释放,存放为运行时函数分配的局部变量、函数参数、返回数据、返回地址等
  • 堆区:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收
  • 全局区(静态区static):存放全局变量、静态数据、常量。程序结束后由系统释放
  • 常量区(文字常量区):存放常量字符串,程序结束后有系统释放
  • 代码区:存放函数体(类成员函数和全局区)的二进制代码
内存分配方式
  • 从静态存储区分配:内存在程序编译的时候已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
  • 在栈上创建:在执行函数时,函数内局部变量的存储单元可以在栈上创建,函数执行结束时,这些内存单元会自动被释放。栈内存分配运算内置于处理器的指令集,效率高,但是分配的内存容量有限

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

如果你需要这些资料,可以戳这里获取

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值