面试总结(2)

1、bootloader:

STM32 BootLoader升级固件

2、程序下载到单片机的哪个位置:

————————————————
版权声明:本文为CSDN博主「努力挣扎的小菜菜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://blog.csdn.net/weixin_44513216/article/details/104412367

半导体存储器包括(1)ROM(只读存储器),ROM分为固定ROM(掩模ROM)、PROM(只能编程一次,所以称为只能编程一次的ROM)、EPROM(需要利用紫外线擦除后才能再次编程,所以称为紫外线擦除ROM)、EEPROM(电擦除可编程ROM)、Flash ROM(也称为快闪ROM),另外Flash ROM又可分为NOR Flash ROM和NAND Flash ROM。(2)RAM(随机存储器),RAM分为DRAM(动态存储器)和SRAM(静态存储器),DRAM又可分成SDRAM和DDR SDRAM。
stm32f103zet6
在这里插入图片描述
IS62WV51216:16bit宽512K,16*512K=1M字节,SRAM。
W25Q128 :将 16M 的容量分为 256 个块(Block),每个块大小为 64K 字节,每个块又分为 16个扇区(Sector),每个扇区 4K 个字节。
平常编程时那些变量是存储在哪里
RAM
全局变量:自动随机分配到静态存储器(SRAM)里
局部变量:如果不特殊定义,一般是存储在动态存储器(DRAM)里的
平常下载程序下载到芯片的哪里

下载到flash(ROM)里的:

①代码;②程序定义的常量;③已初始化的非0全局变量,当程序初始化时会拷贝到RAM中去

下载到RAM里的:

静态存储器:
①已初始化的全局变量;②特殊定义的局部变量(static)
动态存储器:
①已初始化的局部变量

2、堆、栈的区别

堆:直到运行时才知道一个对象需要多少内存空间;不知道对象的生存期到底有多长。动态内存分配:malloc或new

内存的分配方式有几种?

(1)静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量。(静态局部变量)
(2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
(3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定;
(4)程序代码区
(5)文字常量区

malloc free与new delete区别:

1.new/delete是C++里才有的,而new/delete与malloc/free一个显著的区别在于,new是建造一个对象,并调用对象的构造函数来初始化对象,其实在所有的new操作过程中,总是分为两步的:第一步是申请内存,第二步则是调用构造函数初始化对象。同样,在调用delete的时候,需要先调用析构函数,然后在销毁堆内存。
单独使用malloc free无法完成自动执行构造函数和析构函数的要求
2. new/delete通常来说是操作符,就是"+","-"一样,而malloc/free是库函数。
3. new/delete是可以重载的,而重载之后,就成为了函数。
4. malloc在申请内存的时候,必须要提供申请的长度,而返回的指针是void*型,必须要强转才能成为需要的类型。
5. 当new/delete在类中被重载的时候,可以自定义申请过程,比如记录所申请内存的总长度,以及跟踪每个对象的指针。
6. C++默认的new/delete操作符内部,其实也调用了malloc/free这两个函数。

3、虚函数,多态实现机制,虚函数表存储在哪个位置

(1)虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组。而对象的隐藏成员–虚拟函数表指针是在运行期–也就是构造函数被调用时进行初始化的,这是实现多态的关键。
(2)多态的实现主要分为静态多态和动态多态,静态多态主要是重载,在编译的时候就已经确定;动态多态是用虚函数机制实现的,在运行期间动态绑定。举个例子:一个父类类型的指针指向一个子类对象时候,使用父类的指针去调用子类中重写了的父类中的虚函数的时候,会调用子类重写过后的函数,在父类中声明为加了virtual关键字的函数,在子类中重写时候不需要加virtual也是虚函数。
(3)虚函数实现多态原理
(4)虚函数表是属于类,类的所有对象共享这个类的虚函数表,并且,子类对象与指向子类的基类指针指向的对象,使用同一个虚函数表。
(5)虚函数表存储在进程的只读数据段。C++ 虚函数表 存在哪

4、设计模式

常用设计模式总结

5、如果在一个局域网里两个电脑传递数据会经过哪些过程

应用层: (典型设备:应用程序,如DHCP,FTP,SMTP ,HTTP)
传输层: (典型设备:进程和端口),数据单元:数据段 (Segment) ,TCP , UDP,DCCP ,SCTP
网络层: (典型设备:路由器,防火墙、多层交换机) ,数据单元:数据包(Packet ) IP,ARP,ICMP
数据链路层:(典型设备:网卡,网桥,交换机),数据单元:帧 (Frame)CSMA/CD,PPP,HDLC
物理层:(典型设备:中继器,集线器、网线、HUB) ,数据单元:比特 (Bit),光纤、 同轴电缆、双绞线

6、程序从编译到生成可执行文件的过程,链接是干什么的,生成的可执行文件

C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件
一个C/C++程序从编译到最终生成可执行文件的全过程分析

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淮杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值