面试内容记录
1.const,static,volatile,inline,extern的含义
const:只读修饰,不允许被修改
static:修饰局部变量时,有默认值为0,是一个值不变的变量,为其开辟内存,函数结束后不被释放,直到程序结束才释放
修饰全局变量时,允许本源文件内所有函数访问,不能被其他源文件访问,即一个本地的变量
static修饰的函数仅允许本文件内其他函数调用。
volatile:表示每次使用volatile修饰的变量时,不是从加载到程序的存储单元读取,而是从实际地址读取,不采取优化方式。
inline:表示inline修饰的函数在使用时是直接在调用函数内展开,而不是新建堆栈内存调用,减少了开销
2.linux下如何定位内存泄漏
内存泄漏的概念:当申请的内存空间没有被及时释放时,之后的程序都将无法使用该内存空间
定位内存泄漏的方式:
a.ps和kill对程序占用的内存进行监测和释放
b.利用valgrind对程序进行调试
3.UART,IIC,SPI区别
UART:异步收发接口(全双工,异步,串行,速度最慢)三线(TX,RX,GND)
IIC:双线串行总线(半双工,同步,串行,速度第二)双线(时钟线,数据线)
SPI:同步外设接口(全双工,同步,串行,速度最快)三线(数据输出,数据输入,时钟线)
4.给指定地址赋值
int *p=(int *)0xff11f1;
*p=250;
5.iso七层模型有哪些,tcp/udp属于哪一层?
应用层,会话层,表示层,网络层,传输层,数据链路层,物理层
tcp/udp属于传输层
优缺点 优点 缺点
TCP: 面向连接,传输稳定 连接的延时问题导致安全性不高
数据不容易丢失 连接耗时多
UDP: 无需连接,直接发送 UDP容易丢包,乱序
安全性高
6.linux下同步模式和异步模式
同步模式:由处理消息者等待消息是否被触发
异步模式:由触发机制来通知消息处理者
7.C++实现多态的方式有哪些?
首先理解多态的概念:“一个接口,多种方法”,程序运行时才决定调用的函数
分为编译时多态(静态多态):重载、泛型编程(不需要考虑数据类型的标准模板库)
运行时多态(动态多态):虚函数
实现多态的方式:
a.重载:不论是否有虚函数,在作用域相同、函数名同名的情况下,参数(个数、类型、数目)不同即为重载
b.覆盖:在不同作用域下,同名同参数的不同函数构成覆盖
c.隐藏:在不同作用域下,同名不同参数的,基类有无虚函数都是隐藏,同名相同参数的,基类无虚函数为隐藏。
8.计算结构体大小的规则
以占内存最大成员变量为宽度,其余的变量所占大小要能被最大的成员变量整除
最后加和大小要是最大成员变量的宽度倍数
9.由两种遍历二叉树的方式推出二叉树
规则,按照遍历方式的规则将二叉树逐步分解
10.堆和栈的区别、联系
在操作系统中:
堆(heap):由使用者申请,可申请的大小由操作系统的虚拟内存决定,申请效率慢
栈(stack):由系统直接分配,有系统栈空间限制,申请效率快
静态存储区域:在程序编译的时候分配,程序运行过程中一直存在,用于存放静态数据,全局数据和常量。
在数据结构中:
堆栈即指代栈这种先入后出的数据结构,由push、pop操作来操控
与堆栈相对的数据结构常指队列,队列内按照先入先出的规则(应用于二叉树层次遍历)
11.如何利用c语言直接跳转到指定的地址
首先理解一个类似于int *的数据类型 void (*)(void), 前者是指向整型数据类型的指针,后者是指向函数的指针(无参数无返回值)
(void (*)(void))0x10000000相当于把0x10000000强制转化为了函数类型指针,则最后只需要((void (*)(void))0x1000000)()执行
12.数据库的四大特性
原子性:数据库操作事务要么全部成功要么全部失败回滚
一致性:指的是数据库内事务从一个一致的形态到另一个一致的形态
隔离性:当多个用户访问数据库时,不能互相干扰,即多个并发事物之间需要隔离
持久性:一旦操作成功提交,对于数据库的改变是永久的,遇到故障也不会丢失操作。
13.单例模式的实现方式
单例模式概念:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
实现方式:
a.一般的单例模式:声明一个静态私有的类变量,实现一个静态方法去判断该变量是否为NULL,若不是则实例化它
b.在多线程的情况下,在静态的类方法加上synchronized修饰,实现线程同步(懒汉单例)
#面试题目#
const:只读修饰,不允许被修改
static:修饰局部变量时,有默认值为0,是一个值不变的变量,为其开辟内存,函数结束后不被释放,直到程序结束才释放
修饰全局变量时,允许本源文件内所有函数访问,不能被其他源文件访问,即一个本地的变量
static修饰的函数仅允许本文件内其他函数调用。
volatile:表示每次使用volatile修饰的变量时,不是从加载到程序的存储单元读取,而是从实际地址读取,不采取优化方式。
inline:表示inline修饰的函数在使用时是直接在调用函数内展开,而不是新建堆栈内存调用,减少了开销
2.linux下如何定位内存泄漏
内存泄漏的概念:当申请的内存空间没有被及时释放时,之后的程序都将无法使用该内存空间
定位内存泄漏的方式:
a.ps和kill对程序占用的内存进行监测和释放
b.利用valgrind对程序进行调试
3.UART,IIC,SPI区别
UART:异步收发接口(全双工,异步,串行,速度最慢)三线(TX,RX,GND)
IIC:双线串行总线(半双工,同步,串行,速度第二)双线(时钟线,数据线)
SPI:同步外设接口(全双工,同步,串行,速度最快)三线(数据输出,数据输入,时钟线)
4.给指定地址赋值
int *p=(int *)0xff11f1;
*p=250;
5.iso七层模型有哪些,tcp/udp属于哪一层?
应用层,会话层,表示层,网络层,传输层,数据链路层,物理层
tcp/udp属于传输层
优缺点 优点 缺点
TCP: 面向连接,传输稳定 连接的延时问题导致安全性不高
数据不容易丢失 连接耗时多
UDP: 无需连接,直接发送 UDP容易丢包,乱序
安全性高
6.linux下同步模式和异步模式
同步模式:由处理消息者等待消息是否被触发
异步模式:由触发机制来通知消息处理者
7.C++实现多态的方式有哪些?
首先理解多态的概念:“一个接口,多种方法”,程序运行时才决定调用的函数
分为编译时多态(静态多态):重载、泛型编程(不需要考虑数据类型的标准模板库)
运行时多态(动态多态):虚函数
实现多态的方式:
a.重载:不论是否有虚函数,在作用域相同、函数名同名的情况下,参数(个数、类型、数目)不同即为重载
b.覆盖:在不同作用域下,同名同参数的不同函数构成覆盖
c.隐藏:在不同作用域下,同名不同参数的,基类有无虚函数都是隐藏,同名相同参数的,基类无虚函数为隐藏。
8.计算结构体大小的规则
以占内存最大成员变量为宽度,其余的变量所占大小要能被最大的成员变量整除
最后加和大小要是最大成员变量的宽度倍数
9.由两种遍历二叉树的方式推出二叉树
规则,按照遍历方式的规则将二叉树逐步分解
10.堆和栈的区别、联系
在操作系统中:
堆(heap):由使用者申请,可申请的大小由操作系统的虚拟内存决定,申请效率慢
栈(stack):由系统直接分配,有系统栈空间限制,申请效率快
静态存储区域:在程序编译的时候分配,程序运行过程中一直存在,用于存放静态数据,全局数据和常量。
在数据结构中:
堆栈即指代栈这种先入后出的数据结构,由push、pop操作来操控
与堆栈相对的数据结构常指队列,队列内按照先入先出的规则(应用于二叉树层次遍历)
11.如何利用c语言直接跳转到指定的地址
首先理解一个类似于int *的数据类型 void (*)(void), 前者是指向整型数据类型的指针,后者是指向函数的指针(无参数无返回值)
(void (*)(void))0x10000000相当于把0x10000000强制转化为了函数类型指针,则最后只需要((void (*)(void))0x1000000)()执行
12.数据库的四大特性
原子性:数据库操作事务要么全部成功要么全部失败回滚
一致性:指的是数据库内事务从一个一致的形态到另一个一致的形态
隔离性:当多个用户访问数据库时,不能互相干扰,即多个并发事物之间需要隔离
持久性:一旦操作成功提交,对于数据库的改变是永久的,遇到故障也不会丢失操作。
13.单例模式的实现方式
单例模式概念:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
实现方式:
a.一般的单例模式:声明一个静态私有的类变量,实现一个静态方法去判断该变量是否为NULL,若不是则实例化它
b.在多线程的情况下,在静态的类方法加上synchronized修饰,实现线程同步(懒汉单例)
#面试题目#