小米C++开发 面试 准备阶段和部分真题

真题

C++

  • 函数指针和指针函数的区别  o(╥﹏╥)o
  • 堆和栈的区别
  • 函数重载?为什么返回值不可以区分函数重载?o(╥﹏╥)o
  • 封装、继承和多态的定义,自己描述一下这三者的区别和联系。
  • 多态的构成(应该是想听虚函数,当时没有想到  o(╥﹏╥)o)
    • 必须存在继承关系
    • 继承关系中必须存在同名的虚函数,并且子类和基类虚函数之间是遮蔽(覆盖)的关系
    • 存在基类指针,通过这个指针实现虚函数的调用
  • 进程相较于线程 还多包含一个socket通信o(╥﹏╥)o
  • STL

密码学

  • RSA padding模式是啥  大
  • RSA的位数 1024 2048 4096
  • 密码体制  密码的底层原理
  • 椭圆双曲线
  • 对称算法的模式  ofb  cfb
  • 服务器密码机如何对外提供服务?带宽

区块链

  • 数字钱包的标准
  • 检测账户余额的方法 UTXO

 准备阶段

C++

1,fork的底层实现是什么?

fork()函数的底层实现原理_everthing willl be ok-优快云博客_fork原理

  • fork()系统调用通过复制一个现有进程来创建一个全新的进程。进程被存放在一个叫做任务队列的双向循环链表当中,链表当中的每一项都是类型为task_struct称为进程描述符的结构,也就是我们写过的进程PCB. 
  • Tips:内核通过一个位置的进程标识值或PID来标识每一个进程。//最大值默认为32768,short int短整型的最大值.,他就是系统中允许同时存在的进程最大的数目。
  • 可以到目录 /proc/sys/kernel中查看pid_max:

这里写图片描述

当进程调用fork后,当控制转移到内核中的fork代码后,内核会做4件事情:

  • 1、分配新的内存块和内核数据结构给子进程
  • 2、将父进程部分数据结构内容拷贝至子进程
  • 3、添加子进程到系统进程列表当中
  • 4、fork返回,开始调度器调度

 fork函数在底层到底做了什么呢?

  • Linux平台通过clone()系统调用实现fork()。 fork(),vfork()和clone()库函数都根据各自需要的参数标志去调用clone(),然后由clone()去调用do_fork(), 再然后do_fork()完成了创建中的大部分工作,该函数调用copy_process().做最后的那部分工作。

这里写图片描述

2,智能指针原理、使用和实现

理解智能指针

C++11中智能指针的原理、使用、实现 - wxquare - 博客园

  • 智能指针是利用了一种叫做RAII(资源获取即初始化)的技术对普通的指针进行封装,这使得智能指针实质是一个对象,行为表现的却像一个指针
  • 智能指针的作用是防止忘记调用delete释放内存和程序异常的进入catch块忘记释放内存。另外指针的释放时机也是非常有考究的,多次释放同一个指针会造成程序崩溃,这些都可以通过智能指针来解决

智能指针占据的字节数

  • shared_ptr  16字节
  • unique_ptr  8字节
  • weak_ptr  16字节

3,虚函数

C++虚函数详解_C语言中文网

C++ 虚函数表解析_陈皓专栏 【空谷幽兰,心如皓月】-优快云博客_虚函数表

C++虚函数详解_Whitesad的博客-优快云博客_c++虚函数

  • 只有派生类的虚函数遮蔽基类的虚函数(函数原型相同)才能构成多态(通过基类指针访问派生类函数)
  • 虚函数的声明的前提:首先看成员函数所在的类是否会作为基类。然后看成员函数在类的继承后有无可能被更改功能,如果希望更改其功能的,一般应该将它声明为虚函数。如果成员函数在类被继承后功能不需修改,或派生类用不到该函数,则不要把它声明为虚函数
  • 虚函数是运行时决议,与一般的编译时决议存在很大的不同
  • 虚函数指针:虚函数指针式一个指向函数的指针,指向的是子类内部实现的虚函数,当子类调用虚函数的时候,本质上是通过调用这个虚函数指针找到接口
  • 虚函数指针是确实存在的数据类型,在一个被实例化的对象中,它总是被存放在该对象的地址首位,这种做法的目的是为了保证运行的快速性。与对象的成员不同,虚函数指针对外部是完全不可见的,除非通过直接访问地址的做法或者在DEBUG模式中,否则它是不可见的也不能被外界调用

4,C++转型操作符  强制类型转换

  • const_cast 通常用来将对象的常量性转除(cast away the constness)。它是唯一有此能力的C++-style转型操作符
  • dynamic_cast用来执行继承体系中安全的向下转型或跨系转型动作。也就是说你可以利用它将指向基类对象的指针或者引用转型为指向派生类对象的指针或引用,并得知转型是否成功。如果转型失败,会以一个null指针(当转型对象是指针)或一个exception(当转型对象是引用)表现出来。dynamic_cast是唯一无法由旧式语法执行的转型动作,也是唯一可能消耗重大运行成本的转型动作
  • static_cast 基本上拥有与C旧式转型相同的威力与意义,以及相同的限制。例如将一个非 const 的对象转换为 const 对象,或将int 转换为 double等等。它也可以用来执行上述多种转换的反向转换,例如将void*指针转为typed指针,将pointer-to-base转为pointer-to-derived。但是他无法将const转为non-const,这个只有const-cast才能够办到
  • reinterpret_cast意图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值