首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

嵌入式面试高频考点整理(建议收藏)

定义和声明区别 声明是将一个名称引入程序,定义提供了一个实体在程序中唯一描述。 什么是野指针 访问一个已销毁或者访问受限内存区域指针。...只复制对象基本类型,对象类型,仍属于原来引用。 深拷贝: 申请新内存,并将目标对象复制到新内存。...TCP报文首部20个字节,UDP首部8个字节 TCP有拥塞控制机制,UDP没有 TCP协议下双方发送接受缓冲区都有,UDP并无实际意义上发送缓冲区,但是存在接受缓冲区 TCP三次握手[29] ① 第一次握手...③ 第三次挥手:Server端Client端发送标志位是FIN报文段,请求关闭连接,同时Client端进入LAST_ACK状态。...④ 第四次挥手 :Client端收到Server端发送FIN报文段,Server端发送标志位是ACK报文段,然后Client端进入TIME_WAIT状态。

66520
您找到你想要的搜索结果了吗?
是的
没有找到

GC基本算法及C++GC机制

这篇文章内容为介绍一些常用GC算法,同时简单提一下C++GC机制。 基本概念 有可达图与根集 垃圾收集器将存储器视为一张有可达图。...典型地,块头部中空闲低位中一位用来表示这个块是否已经被标记了。...通过Mark&Sweep算法动态申请内存时,先按需分配内存,当内存不足以分配时,从寄存器或者程序栈上引用出发,遍历上述可达图并作标记(标记阶段),然后再遍历一次内存空间,把所有没有标记对象释放...C++垃圾回收机制 C语言本身没有提供GC机制,而C++ 0x则提供了基于引用计数算法智能指针进行内存管理。也有一些不作为C++标准垃圾回收库,如著名Boehm库。...在《关于C++ 0x 里垃圾收集器讲座》这篇文章里提到,C++标准提案中使用gc_strict、 gc_relax这样关键字来描述一个内存区内有没有指针,但无法精确到每个数据上。

55130

百度不问我项目,全程基础拷打,真扎心!

智能指针 智能指针C++一种特殊指针,它是一个对象,用来管理另一个指针所指向对象生命周期。智能指针可以自动地分配和释放内存,避免手动管理内存麻烦和出错风险。...C++标准库提供了三种智能指针: shared_ptr:多个智能指针可以共享同一个对象,当最后一个指针被销毁时,它会释放对象内存。...但是仔细想想还可以继续回答⬇️ 在实际实现中,sort函数还有一些优化,例如: 当排序元素个数小于一定阈值时,使用插入排序算法。 当出现大量重复元素时,使用三划分快速排序算法。...数据传输阶段:连接建立成功后,客户端和服务器之间可以进行数据传输。客户端服务器发送数据包,服务器接收数据包并进行处理,然后向客户端发送响应包。...客户端收到响应包后,可以再次服务器发送数据包,以此类推。 断开连接阶段:当客户端或服务器不再需要连接时,可以发送FIN包(结束包)来请求断开连接。

21110

C++ 为什么不加入垃圾回收机制

请读者注意,这里介绍方法更多是基于当前标准和库设计角度,而不是要求修改语言定义或者扩展编译器。 什么是垃圾回收? 作为支持指针编程语言,C++将动态管理存储器资源便利性交给了程序员。...下面一步一步地大家介绍我自己土制佳酿垃圾回收系统,可以按照需要自由选用,而不影响其他代码。 构造函数和析构函数 C++中提供构造函数和析构函数很好解决了自动释放资源需求。...,因此在函数退出点生存期结束,此时auto_ptr析构函数调用,自动销毁内部指针维护string对象(先前在构造函数中通过new表达式分配而来),并进而执行string析构函数,释放为实际字符串动态申请内存...auto_ptr只是智能指针一种,它复制行为提供了所有权转移语义,即智能指针复制时将对内部维护实际指针所有权进行了转移,例如 auto_ptr str1( new string...在《More Execptional C++》中设计了一个具有完全复制语义智能指针ValuePtr,解决了指针用于标准容器问题。

80230

《逆袭进大厂》第二弹之C++进阶篇59问59答(超硬核干货)

顶层指针表示指针本身是一个常量 3) int const *p1或者const int *p1两种情况中const修饰*p1,所以理解为*p1值不可以改变,即不可以给*p1赋值改变p1指变量值,...假设指针p指向new[]分配内存。因为要4字节存储数组大小,实际分配内存地址为[p-4],系统记录也是这个地址。delete[]实际释放就是p-4指内存。...(3)多态 同一事物表现出不同事物能力,即不同对象发送同一消息,不同对象在接收时会产生不同行为(重载实现编译时多态,虚函数实现运行时多态)。...拷贝构造函数是直接构造一个新类对象,所以在初始化对象前不需要检查源对象和新建对象是否相同;赋值运算符需要上述操作并提供两套不同复制策略,另外赋值运算符中如果原来对象有内存分配则需要先把内存释放掉。...-96,所以c值就变成了-96/4 = -24 遇到指针计算,需要明确指针每移动一位,它实际跨越内存间隔是指针类型长度,建议都转成10进制计算,计算结果除以类型长度取得结果 104、 怎样判断两个浮点数是否相等

2.3K40

冲进银行测开,扛住了!

浅拷贝是指将一个对象复制到另一个对象,包括对象中数据和指向动态分配内存指针。这意味着原始对象和拷贝对象将共享同一块内存,当其中一个对象修改数据时,另一个对象也会受到影响。...这可能导致潜在问题,尤其是在释放内存时可能会发生错误。 深拷贝是指创建一个新对象,并复制原始对象所有数据和指针指向数据。...这意味着原始对象和拷贝对象将拥有彼此独立内存空间,彼此之间修改不会相互影响。深拷贝通常需要在拷贝过程中分配新内存,并将原始对象数据复制到新内存中。 3. ++i和i++区别?...多态实现原理主要涉及到两个概念:虚函数表(vtable)和虚函数指针(vptr)。每个含有虚函数类,或者从这样类派生类,都有一个虚函数表。这个表中存储了虚函数地址。...类对象中包含一个虚函数指针,指向这个虚函数表。当我们通过基类指针或引用调用虚函数时,实际上是通过这个虚函数指针找到虚函数表,然后在表中查找并调用相应函数。

21920

Go 基础面试题

但如果扩容前 slice 中包含了指向大块内存指针,则这部分内存不会被回收,直到 slice 本身不再被引用。因此,在扩容前剪裁(reslicing)到实际需要大小是一个好习惯。...通过预先设定足够容量以及考虑到底层数组共享和内存管理,可以避免常见性能问题陷阱和内存问题。 23. 扩容前后 slice 是否相同?...Pointers:指针在传递时复制内存地址,因此即使是按值传递,调用方法和被调用方法依然可以访问到同一个变量。...计数器:可能包括当前在 channel 中元素数量,以及还可以 channe 发送多少元素。 当你带缓冲 channel 发送数据时: 检查 channel 是否已满。...如果未满,数据被放到当前写指针指向位置上。 写指针向前移动,并且可能会回到数组开始,保持环形。 当你带缓冲 channel 接收数据时: 检查 channel 是否为空。

20310

冲进银行测开,扛住了!

浅拷贝是指将一个对象复制到另一个对象,包括对象中数据和指向动态分配内存指针。这意味着原始对象和拷贝对象将共享同一块内存,当其中一个对象修改数据时,另一个对象也会受到影响。...这可能导致潜在问题,尤其是在释放内存时可能会发生错误。 深拷贝是指创建一个新对象,并复制原始对象所有数据和指针指向数据。...这意味着原始对象和拷贝对象将拥有彼此独立内存空间,彼此之间修改不会相互影响。深拷贝通常需要在拷贝过程中分配新内存,并将原始对象数据复制到新内存中。 3. ++i和i++区别?...多态实现原理主要涉及到两个概念:虚函数表(vtable)和虚函数指针(vptr)。每个含有虚函数类,或者从这样类派生类,都有一个虚函数表。这个表中存储了虚函数地址。...类对象中包含一个虚函数指针,指向这个虚函数表。当我们通过基类指针或引用调用虚函数时,实际上是通过这个虚函数指针找到虚函数表,然后在表中查找并调用相应函数。

19720

JAVA和C++对比学习

struct实际上连续存放内存块 利用指针运算读写结构比较容易出错或者溢出,挨个赋值虽然笨拙却较易找到问题 JAVA对象内存结构比较复杂,无顺序规则 3.4 指针与句柄 C++拥有* &...3.5 复制 C++拥有复制三法则,可以自己控制复制细节 自己定义复制细节过于繁琐,而且不正确复制容易产生“截断”属性,不如统一用clone()方法更实用 JAVA有默认clone()方法,...也可以自己实现clone(),hashCode(),equals()来实现细节 3.6 数组 C++数组是连续内存空间 数组常用于申请一块内存供任何用途,从而缺乏对指针控制,应该学习JAVA数组,...+使用指针或引用来实现动态绑定 C++需要额外注意需要动态绑定时候,使用是否引用和虚函数。...,需要非常注意各属性初始化写法,以防出现null句柄成员 4.6 反射 C++只能在运行时获取类型名字,无法进行进一步操作 用宏或者存储工厂函数指针方法来实现反射,虽然麻烦但是也只能这样了

2.6K40

面试总结-C++

见为什么不能建立引用数组 将引用作为函数参数时,可以避免对变量或者对象复制,因此不会调用对象拷贝构造函数。当不希望传入引用参数不被改变时,使用const引用。...C++/C 语言没有办法知道指针所指内存容量,除非在申请内存时记住它。注意当数组作为函数参数进行传递时,该数组自动退化为同类型指针。...- 多态性:同一事物表现出不同事物能力,即不同对象发送同一消息,不同对象在接收时会产生不同行为(重载实现编译时多态,虚函数实现运行时多态)。...-static 优缺点: 1.动态库运行时会先检查内存是否已经有该库拷贝,若有则共享拷贝,否则重新加载动态库(C语言标准库就是动态库)。...c++协程实现 ucontext-人人都可以实现简单协程库 设计模式 单例模式 工厂方法 观察者模式 怎么判断两个结构体变量是否相等?

2.1K11

python风格——动态类型

变量在表达式中出现时候,它会被其所引用对象值所取代。 总结来说,python里变量实际上就是一个void *指针(通用类型指针),这个指针指向是对象。只不过我们在使用时候不需要解引用。...垃圾回收 在python中,每当一个变量名被赋予一个新对象,如果原来对象没有被其他变量或者对象引用,那么之前那个对象所占用内存空间就会被回收。这种自动回收对象空间技术叫作垃圾回收。...如果你真的想让list1和list2指对象不同,那么你可以使用复制对象来解决这个问题。...>>> id(list2) 140352438560704 字典和列表也可以使用copy或者构造函数方式来复制原来对象。...复制一个对象方法有很多,这不是重点,重点是python可变对象共享引用是较为特殊,尤其是对习惯了C/C++的人而言。

57030

计算机考研复试C语言常见面试题「建议收藏」

,引入了weak_ptr弱指针,weak_ptr构造函数不会修改引用计数值,从而不会对对象内存进行管理,其类似一个普通指针,但不指向引用计数共享内存,但是其可以检测到所管理对象是否已经被释放,...把类A里面的shared_ptr pb_,改为weak_ptr pb_即可 12、野指针指针就是指向一个已删除对象或者所指向空间是访问受限空间指针。...heap堆区是程序里动态分配内容,堆区内存容量大,使用灵活,使用后要自行回收。容易产生内存碎片。二级缓存,速度比一级缓存慢。从低地址高地址移动。...C++默认析构函数不是虚函数是因为虚函数需要额外虚函数表和虚表指针,占用额外内存。而对于不会被继承类来说,其析构函数如果是虚函数,就会浪费内存。...动态多态:即运行时多态,在程序执行期间判断所引用对象实际类型,根据其实际类型调用相应方法。 22、const修饰普通函数与成员函数目的 成员函数指的是class中函数。

1.5K30

QT(C++)面试总结

每个Widget都是矩形,它们按照Z-order进行排序。 C++指针和引用及区别 1.变量 变量在内存操作其实是需要经过2个步骤: 找出与变量名相对应内存地址。...,不能被改变; ⑦指针可以有多级指针(**p),而引用至于一级; ⑧指针和引用使用++运算符意义不一样; ⑨如果返回动态内存分配对象或者内存,必须使用指针,引用可能引起内存泄露。...> (expression) 常量非常量转换 这个转换好理解,可以将常量转成非常量。...C++内存分配有几种方式 内存三种分配方式: 1. 从静态存储区分配:此时内存在程序编译时候已经分配好,并且在程序整个运行期间都存在。全局变量,static变量等在此存储。 2....常见内存错误及对策 1. 内存分配未成功,却被使用。 对策:使用内存之前检查是否分配成功。用p!=NULL判断。 2. 内存分配成功,未初始化就被使用。 内存缺省值没有统一标准。

1.9K10

C++面试题

I帧是关键帧,帧内编码帧 P帧是前预测编码帧 B帧是双向预测内插编码帧 12、回答下面的问题。 (1)、引用与指针区别是什么?...指针和引用都是地址概念,指针指向一块内存,它内容是所指内存地址;引用是某块内存别名。 程序为指针变量分配内存区域,而不为引用分配内存区域。 指针使用时要在前加 * ,引用可以直接使用。...Boost库头文件与我们平常所用头文件(*.h)或者C++标准库头文件(没有后缀名)不同,它是把C++声明和实现放在了一个叫做.hpp文件中。...6、模板实现可以写在.h文件中吗? 7、C++模板类代码只能写在头文件? 这个问题,实际上我几年前就遇到了。最近写个模板类玩时候,再次遇到。...10、谈谈QtDBus C++面试5 1、STL vector做大量push_back操作时会出现什么问题? 2、boost库 指针原理,怎么做到动态分配内存不delete?

2.2K30

iOS RunTime之三:消息发送

检查target是否为nil。如果为nil,直接cleanup,然后return。(这就是我们可以nil发送消息原因。) 然后在targetClass中根据Selector去找IMP。...消息发送这种工作机制明显区别另一著名面向对象编程语言——C++或者Java。C++或者Java调用对象函数,函数与对象之间关系,在编译期间就必须严格确定。...Objective-C如果Car这个对象发送字符串为flyselector,即使car没有实现fly方法,编译器依然能够通过,但是运行期间则会因为获取不到实际执行方法而抛出异常。...消息发送设计使得编译期间Objective-C非常包容对象所属类。在Objective-C语言中你可以任何包括空指针nil在内对象发你想发消息。...消息发送机制使得在不重新编译情况下,在运行期间,干预或者说hook原来target(方法、变量等)变得更易于实现,更有实际应用价值,这个是需要依赖于消息发送和动态绑定实现机制——Runtime。

50330

每日一题:数据丢包后,tcp是如何处理

问题: 某客户通过一个 TCP 连接服务器发送数据部分过程如题 38 图所示。...若 TCP 支持快速重传,则客户重新发送 seq = 100 段时刻是 ? ?...每日一问: 每日一问:const 如何保证const不变 每日一问:c++成员函数,能作为线程参数吗?...对上次问题补充: 类成员函数指针与普通函数指针不是一码事 普通函数指针实际上保存是函数体开始地址,因此也称"代码指针",以区别于 C/C++ 最常用数据指针。...而类成员函数指针就不仅仅是类成员函数内存起始地址, 还需要能解决因为 C++ 多重继承、虚继承而带来类实例地址调整问题,所以类成员函数指针在调用时候一定要传入类实例对象。

2.1K10

CC++ 技术面试基础知识总结

// 先析构函数,再内存释放 return 0; } 定位 new 定位 new(placement new)允许我们 new 传递额外地址参数,从而在预先指定内存区域创建对象。...CPU 时间,不适宜于信息量大或操作频繁场合 共享内存(Shared Memory):映射一段能被其他进程所访问内存,这段共享内存由一个进程创建,但多个进程都可以访问 优点:无须复制,快捷...POST 指定资源提交数据进行处理请求(例如提交表单或者上传文件)。...成功时返回写字节数。失败时返回 -1,并设置 errno 变量。 在网络程序中,当我们套接字文件描述符写时有俩种可能。 (1)write 返回值大于 0,表示写了部分或者是全部数据。...大致流程如下: 客户端服务器发送一个 SYN J 服务器客户端响应一个 SYN K,并对 SYN J 进行确认 ACK J+1 客户端再想服务器发一个确认 ACK K+1 只有就完了三次握手,但是这个三次握手发生在

1.6K20

你们要C++面试题答案来了--基础篇

向上转换:指的是子类基类转换 向下转换:指的是基类子类转换 它通过判断在执行到该语句时候变量运行时类型和要转换类型是否相同来判断是否能够进行向下转换。...,但是引用只能是一个对象引用,不能 被改变; 7.指针可以有多级指针(**p),而引用止于一级; 8.指针和引用使用++运算符意义不一样; 9.如果返回动态内存分配对象或者内存,必须使用指针,引用可能引起内存泄露...参考回答: 野指针就是指向一个已删除对象或者未申请访问受限内存区域指针 请你介绍一下C++智能指针 参考回答: 智能指针主要用于管理在堆上分配内存,它将普通指针封装为一个栈对象。...虚函数实现:在有虚函数类中,类最开始部分是一个虚函数表指针,这个指针指向一个虚函数表,表中放了虚函数地址,实际虚函数在代码段(.text)中。...然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述符发送更多就绪通知,直到你做了某些操作导致那个文件描述符不再为就绪状态了(比如,你在发送,接收或者接收请求,或者发送接收数据少于一定量时导致了一个

2.8K30

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券