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

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

时间:2024-12-18 17:58:53浏览次数:5  
标签:面试题 函数 笔试 地址 内存 腾讯 构造函数 变量 指针

说在前面

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

原文链接: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://blog.csdn.net/TechPioneer_lp/article/details/144474835

相关文章

  • 腾讯通RTX升级方案:解决Linux内核国产系统兼容难题
    一、腾讯通RTX现状:企业用户面临的挑战自腾讯通RTX下架官网并停止更新以来,许多企业用户发现该工具已难以满足实际需求,特别是在日常沟通与协作方面出现了显著问题:●不兼容国产系统与移动端:腾讯通RTX仅支持Windows和Mac系统,无法适配银河麒麟、统信UOS等基于Linux内核的国产操作系......
  • 腾讯云安装docter步骤
    准备工作1、先更新yumyum-yupdate[升级所有包同时也升级软件和系统内核]2、卸载旧版本yumremovedockerdocker-commondocker-selinuxdocker-engine安装详细步骤1、需要安装的软件包,yum-util提供yum-config-manager功能,另两个是devicemapper驱动依赖。yuminsta......
  • 2024年Qt面试题汇总
    2024年Qt面试题汇总1.请说说Qt的D指针(d_ptr)与Q指针(q_ptr)1.1D指针(d_ptr)1.2Q指针(q_ptr)2.常用的Qt布局有几种,如何自适应缩放?3.Qt信号和槽的本质是什么4.描述Qt中的文件流(QTextStream)和数据流(QDataStream)的区别5.Qt程序是事件驱动的,事件到处都可以遇到......
  • 腾讯通升级版,兼容Linux国产系统,消息与RTX互联互通
    一、腾讯通RTX继续使用面临的挑战自从腾讯通RTX停止更新并下架官网后,企业用户在实际使用中遇到了种种难题,直接影响了日常的沟通与协作效率:●无法适配国产系统与移动端:腾讯通RTX只能运行于Windows和Mac系统,对基于Linux内核的国产操作系统(如银河麒麟、统信UOS)以及移动端设备不支......
  • 8 SQL 面试题
    SQL基础面试题两个表:TableX有三个字段Code、Name、Age、其中Code为主键:TableY有三字字段Code、Course(课程)、Score(成绩),其中Code+Courese为主键:------------TableX-------------Code Name Age97001 张三 2297002 赵四2197003 张飞 2097004 李五 22-------------TableY------......
  • React 工具和库面试题(一)
    1.如何在React项目中使用Hooks从服务端获取数据?在React中,我们通常使用useEffectHook来进行副作用操作,比如从服务端获取数据,结合useState来管理数据状态。基本步骤:使用useEffect来执行异步操作(如fetch或axios请求)。使用useState来存储数据。使用asyn......
  • React工具和库面试题目(二)
    1.使用Webpack打包React项目时,如何减小生成的JavaScript文件大小?为了减小生成的JavaScript文件大小,可以采取以下几种策略:1.1代码分割(CodeSplitting)Webpack支持通过动态导入和React.lazy等技术进行代码分割,只有在需要时才加载相应的代码。这样可以有效地......
  • 从上千份大厂面经呕心沥血整理:大厂高频手撕面试题(数据结构篇 ,Java实现亲试可跑)
    怎么判断两个链表是否相交?怎么优化?判断两个链表是否相交可以采用多种方法。一种方法是使用双指针。首先分别遍历两个链表,得到两个链表的长度。然后让长链表的指针先走两个链表长度差的步数。之后,同时移动两个链表的指针,每次比较两个指针是否指向相同的节点。如果指向相同......
  • MySQL常见面试题(2025年最新)
    1.char和varchar的区别①char设置多少长度就是多少长度,varchar可以改变长度,所以char的空间利用率不如varchar的空间利用率高。②因为长度固定,所以存取速度要比varchar快。③char适用于固定长度的字符串,比如身份证号、手机号等,varchar适用于不固定的字符串。2.数据库的三大......
  • 7 Oracle 经典面试题解析
    PL/SQL面试题--1、创建序列seq_employee,该序列每次取的时候自动增加,从1开始计数,不设最大值,并且一直累加,不循环;CREATESEQUENCEseq_employeeSTARTWITH1INCREMENTBY1NOMAXVALUE;--也可以直接使用简单默认参数:--CREATESEQUENCEseq_employee;SELECTseq_employee.NEXTV......