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修饰,实现线程同步(懒汉单例)           14.用户态和系统态的区别:     进程指向用户的代码时处于用户态(此时级别最低),当调用内核时处于内核态(此时权限最高)           15.申请大片内存的方式:     vmalloc、kmalloc、get_free_pages(直接申请页)           16.C++内强制转换:     static_cast:用于自然的低风险的转换,不能用于指针之类的转换  reinterpret_cast:用于不同类型之间的指针或者引用的转换  const_cast:去掉const属性的转换  dynamic_cast:功能与reinterpret_cast类似,但是有转换后检查的功能(检查安全性)           17.do{}while(0)的作用:     a.用于封装宏(步骤)函数  b.完成空宏的定义           18.Bootloader的作用:     引导操作系统启动、初始化硬件设备、建立内存空间映射表           19.条件编译语句的作用:     避免重复定义数据(造成重名、造成内存浪费、typedef多次定义)  增强代码的可移植性,在跨平台编译过程中可以根据条件语句来执行  避免逻辑错误(死循环定义)           20.上拉、下拉、浮空、模拟:     上拉:IO内部上拉电阻输入  下拉:IO内部下拉电阻输入  浮空:读取的IO不确定,等待key内容  模拟:应用ADC模拟输入   
点赞 6
评论 1
全部评论

相关推荐

xiaolihuam...:当然还有一种情况是你多次一面挂,并且挂的原因都比较类似,例如每次都是算法题写不出来。面试官给你的评价大概率是算法能力有待加强,算法能力有待提高,基础知识掌握的不错,项目过关,但是coding要加强。短期内高强度面试并且每次都是因为同样的原因挂(这个你自己肯定很清楚),会形成刻板印象,因为你偶尔一次算法写不出来,面试官自己也能理解,因为他清楚的知道自己出去面试也不一定每一次面试算法都能写出来。但是连续几次他发现你的面屏里面都是算法有问题,他就认为这不是运气问题,而是能力问题,这种就是很客观的评价形成了刻白印象,所以你要保证自己。至少不能连续几次面试犯同样的错。算法这个东西比较难保证,但是有些东西是可以的,例如某一轮你挂的时候是因为数据库的索引,这个知识点答的不好,那你就要把数据库整体系统性的复习,下一轮面试你可以,项目打的不好,可以消息队列答的不好,但是绝对不可以数据库再答的不好了。当然事实上对于任何面试都应该这样查漏补缺,只是对于字节来说这个格外重要,有些面试官真的会问之前面试官问过的问题
点赞 评论 收藏
分享
09-21 23:16
门头沟学院 Java
传奇逃兵王:招不起就别招,叽里咕噜说啥呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务