首页 > 其他分享 >腾讯技术岗位笔试&面试题(四)

腾讯技术岗位笔试&面试题(四)

时间:2024-12-14 19:20:27浏览次数:8  
标签:面试题 函数 笔试 地址 内存 腾讯 构造函数 变量 指针

说在前面

本篇文章是腾讯技术面试题目汇总第四篇
后续将持续推出互联网大厂,如阿里,腾讯,百度,美团,头条等技术面试题目,以及答案和分析。
欢迎大家点赞关注转发。

原文链接:https://mp.weixin.qq.com/s/9EpKvEJECIh6rrd_Kqdfkw

1.__stdcall和__cdecl的区别?

  1. __stdcall
    __stdcall是函数恢复堆栈,只有在函数代码的结尾出现一次恢复堆栈的代码;在编译时就规定了参数个数,无法实现不定个数的参数调用;
  2. __cdecl
    __cdecl是调用者恢复堆栈,假设有100个函数调用函数a,那么内存中就有100端恢复堆栈的代码;可以不定参数个数;每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用__stacall函数大。

2.使用智能指针管理内存资源,RAII

  1. RAII全称是“Resource Acquisition is Initialization”,直译过来是“资源获取即初始化”,也就是说在构造函数中申请分配资源,在析构函数中释放资源。因为C++的语言机制保证了,当一个对象创建的时候,自动调用构造函数,当对象超出作用域的时候会自动调用析构函数。所以,在RAII的指导下,我们应该使用类来管理资源,将资源和对象的生命周期绑定。
  2. 智能指针(std::shared_ptr和std::unique_ptr)即RAII最具代表的实现,使用智能指针,可以实现自动的内存管理,再也不需要担心忘记delete造成的内存泄漏。毫不夸张的来讲,有了智能指针,代码中几乎不需要再出现delete了。

3.手写实现智能指针类

  1. 智能指针是一个数据类型,一般用模板实现,模拟指针行为的同时还提供自动垃圾回收机制。它会自动记录SmartPointer<T*>对象的引用计数,一旦T类型对象的引用计数为0,就释放该对象。除了指针对象外,我们还需要一个引用计数的指针设定对象的值,并将引用计数计为1,需要一个构造函数。新增对象还需要一个构造函数,析构函数负责引用计数减少和释放内存。通过覆写赋值运算符,才能将一个旧的智能指针赋值给另一个指针,同时旧的引用计数减1,新的引用计数加1
  2. 一个构造函数、拷贝构造函数、复制构造函数、析构函数、移走函数;

4.内存对齐?位域?

  1. 分配内存的顺序是按照声明的顺序。
  2. 每个变量相对于起始位置的偏移量必须是该变量类型大小的整数倍,不是整数倍空出内存,直到偏移量是整数倍为止。
  3. 最后整个结构体的大小必须是里面变量类型最大值的整数倍。

添加了#pragma pack(n)后规则就变成了下面这样:

  1. 偏移量要是n和当前变量大小中较小值的整数倍
  2. 整体大小要是n和最大变量大小中较小值的整数倍
  3. n值必须为1,2,4,8…,为其他值时就按照默认的分配规则

5.结构体变量比较是否相等

  1. 重载了 “==” 操作符
struct foo {
    int a;
    int b;
    bool operator==(const foo& rhs) // 操作运算符重载
    {
        return( a == rhs.a) && (b == rhs.b);
    }
};
  1. 元素的话,一个个比;
  2. 指针直接比较,如果保存的是同一个实例地址,则(p1==p2)为真;

6.位运算

若一个数m满足 m = 2^n;那么k%m=k&(m-1)

7.为什么内存对齐

  1. 平台原因(移植原因)
    • 不是所有的硬件平台都能访问任意地址上的任意数据的;
    • 某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异
  2. 性能原因:
    • 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。
    • 原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。

8.函数调用过程栈的变化,返回值和参数变量哪个先入栈?

  1. 调用者函数把被调函数所需要的参数按照与被调函数的形参顺序相反的顺序压入栈中,即:从右向左依次把被调函数所需要的参数压入栈;
  2. 调用者函数使用call指令调用被调函数,并把call指令的下一条指令的地址当成返回地址压入栈中(这个压栈操作隐含在call指令中);
  3. 在被调函数中,被调函数会先保存调用者函数的栈底地址(push ebp),然后再保存调用者函数的栈顶地址,即:当前被调函数的栈底地址(mov ebp,esp);
  4. 在被调函数中,从ebp的位置处开始存放被调函数中的局部变量和临时变量,并且这些变量的地址按照定义时的顺序依次减小,即:这些变量的地址是按照栈的延伸方向排列的,先定义的变量先入栈,后定义的变量后入栈;

9.怎样判断两个浮点数是否相等?

对两个浮点数判断大小和是否相等不能直接用==来判断,会出错!明明相等的两个数比较反而是不相等!对于两个浮点数比较只能通过相减并与预先设定的精度比较,记得要取绝对值!浮点数与0的比较也应该注意。与浮点数的表示方式有关。

10.宏定义一个取两个数中较大值的功能

define MAX(x,y)((x>y?)x:y)

标签:面试题,函数,笔试,地址,内存,腾讯,构造函数,变量,指针
From: https://www.cnblogs.com/autodriver/p/18607081

相关文章

  • C++面试题总结---操作系统(1)
    Linux中查看进程运行状态的指令、查看内存使用情况的指令、tar解压文件的参数。1.查看进程运行状态的指令:ps命令。“ps-aux|grepPID”,用来查看某PID进程状态2.查看内存使用情况的指令:free命令。“free-m”,命令查看内存使用情况。3.tar解压文件的参数:五个命令中必......
  • 腾讯优图最新开源Freeze-Omini:冻结LLM引入语音处理能力
    作者:yearn原文:https://zhuanlan.zhihu.com/p/8242564370 近年来大语言模型(LLM)的快速发展为智能应用带来了巨大机会,而语音作为自然的人机交互形式,其与LLM的结合可以显著提升用户体验。然而,传统的语音交互方式通过ASR+LLM+TTS的级联方式实现,存在高工程复杂性和较大交......
  • C#经典算法面试题
    1.递归算法1.1C#递归算法计算阶乘的方法一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。原理:亦即n!=1×2×3×...×(n-1)×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。 ///<summary......
  • 在21世纪的我用C语言探寻世界本质——动态内存管理及相关笔试题
    人无完人,持之以恒,方能见真我!!!共同进步!!文章目录一、为什么有动态内存分配二、malloc和free1.malloc函数的使用2.free函数的使用三、calloc和realloc1.calloc函数的使用2.realloc函数的使用四、常见动态内存分配的错误五、动态内存经典笔试题六、总结C/C++中程序内存区......
  • 中高级运维工程师运维面试题(一)之JVM
    这里写目录标题问题1:什么是堆?它在JVM中的作用是什么?问题2:堆中有哪些内容?问题3:什么是Eden区、Survivor区,年轻代和老年代的作用分别是什么?问题4:什么是GC?有哪些常见的垃圾回收器?问题5:栈是什么?与堆有什么区别?问题6:如何优化堆和栈?问题7:简述FullGC的触发条件以及如何优......
  • Java实习常见面试题(一)
    1.==与equals的区别==在比较基本数据类型时比较的是值,在比较引用类型时比较的是内存地址equals在重写之后比较的是值,在不重写时比较的是地址equals不能比较基本数据类型2.StringStringbufferStringBuilder区别String是final修饰的常量对象内容不可变StringBufffer对方......
  • 全网最强Java面试题(全网最全、最细、附答案)
    1、悲观锁、乐观锁和分布式锁的实现和细节悲观锁:认为线程安全问题一定会发生,所以在操作数据之前先获取锁,保证线程串行执行,例如synchronized,lock细节:悲观锁适合插入数据锁的粒度要尽量小,只锁住需要串行执行的代码配合事务使用时,要先提交事务再释放锁乐观锁:认为线程安......
  • 火爆Github的1000道Java面试题
    开篇小叙现在Java面试可以说是老生常谈的一个问题了,确实也是这么回事。面试题、面试宝典、面试手册......各种Java面试题一搜一大把,根本看不完,也看不过来,而且每份面试资料也都觉得Nice,然后就开启了收藏之路。Java开发者应该是不会很容易满足的,现在拿着20K的工作,下一步就想着......
  • 【秋招笔试-支持在线评测】11.13花子_海外版秋招(已改编)-三语言题解
    ......
  • Java 面试题大揭秘(0-25):50 道常见面试题及答案解析
    亲爱的小伙伴们......