C++面试问题的部分记录

一面

深信服

strcpy函数 字符串拷贝函数,遇到‘0’结束。存在问题: 因为没有指定长度,可能会导致拷贝越界。安全版本:strncpy。
程序在运行时为什么会崩溃?参考答案:1. 读取未初始化的变量;2. 栈溢出( 定义的局部变量过大,递归调用过深);3. 越界访问; 4. 指针(空指针,指针释放)}只回答了一个指针重复释放, 面试官就接到,怎么调试找到代码重复释放的位置?涉及到调试的问题,没准备到。(还没查找,我猜是用GDB,单步调试,找到地址相同的释放变量)
结构体内存布局 其实就是字节对齐,大致就是相邻地址的变量大小需要往较大的去靠(编译器填充空字节,变量值不变),整个结构的大小要能被最大的变量大小整除。
new和malloc的区别参考答案)相应代码从有往左,输入参数(new不需要指定大小,malloc要),名称( new是运算法,可重载,malloc是库函数,不可重载),返回值( new返回指定对象类型,malloc返回void* ,要强制类型转换),调用过程( new 会调用构造、析构,malloc不会),失败(new返回bad_malloc异常, malloc返回NULL)(new[],delete[] 涉及对象数组的申请与释放)
什么是拷贝构造? (参考答案) 特殊的构造函数,名称与类名相同,参数是本类型的引用变量。(编译器默认提供空构造和拷贝构造,当程序员定义了拷贝构造,编译器不在默认提供空构造)
什么时候必须重写拷贝构造?参考答案 )定义了非空的析构函数。(什么时候需要调用拷贝构造?对象作为函数参数,对象作为返回值,用对象进行初始化)
链表和vector的区别 内存空间( 碎片,连续空间),访问效率,增删效率
怎么解决哈希冲突?参考答案)两种:开放地址(再散列法),拉链法(类似邻接表)
听过一致性哈希吗? (参考链接)
算法

  1. 链表反转
  2. 不重复数组选择不重复数字

大华

静态链接和动态链接的区别: 链接是将多个目标文件进行链接。分为静态链接和动态链接。静态链接是将所有的函数、数据组合成可执行文件。(缺点:空间浪费,多个程序拥有多个相同目标文件副本;更新困难,修改库函数时,需要重新编译。优点:运行速度快,具有所有数据)动态连接:将将程序按照模块拆成多个独立部分,运行时才链接成完成程序。(共享库,所有程序依赖同一个库;更新方便,只需要替换目标文件)
如何判断程序死循环还是死锁? 看CPU的使用率,死循环说明CPU还在不断运行,死锁说明CPU被挂起不会运行。
如何返回多个不确定类型的参数?
服务器、客户端的连接方式

网易雷火

什么方式解决内存泄漏?
new的实现过程
怎么管理自己的内存? 面试官说是RAII(资源获取及初始化) 大致是将资源的申请和释放对象的生命周期相关联,对象构造时申请资源,对象析构时释放资源,不用人为操作。(智能指针好像就是类似的思想?)

平安产险

接口和抽象类的区别参考答案

  1. 接口和抽象类的概念不一样。接口是对动作的抽象(一个类可实现多个接口),抽象类是对象的抽象(一个类只继承一个抽象类)。
  2. 抽象类在实现类型方法时,可部分实现。接口均不能给出方法的实现部分。
  3. 抽象类的实现默认为虚,接口的实现默认非虚(可以为虚)。
  4. 抽象类可以不重写抽象类中的方法,接口定义的方法、属性均需重写。
    (相似之处: 不能实例化;包含未实现的方法申明;派生类必须实现为实现的方法:抽象类是抽象方法,接口是所有方法和属性)

网络摘录

  1. 类实例空指针能够调用其成员函数吗?(参考解答)可以,从底层实现上,类指针会被传入成员函数,但是,只要成员函数没有通过指针访问成员变量,那么该成员函数可以运行。(静态成员变量通过作用域访问,因此,可以被空指针访问)
  2. const修饰函数,能实现重载吗?为什么?(参考解答) 能实现。底层原因是this指针会作为参数被传入,会出现常量、变量的区别,常量会调用const函数,变量会调用普通函数。
  3. python怎么调用C? (参考解答)接口:ctypes,SWIG,Python/C API,原因:更快的运行速度。
  4. C++中如何使用C语言?(参考解答) C++的代码文件中加入extern “C” 字段,明白其对于C函数,C头文件的使用方式。

逻辑题

  1. 仅有两个玻璃球,测试100层楼临界可破层数。
    题意: 玻璃球在没超过高度被丢下时,不会碎,可以重复使用;然而超过了一定的高度被丢下时,玻璃球会破碎。只给你两个玻璃球,让你测试出临界的层数。
    题解: 因为,玻璃球是会破碎的,就得怂着来,尽量从底层逐渐往高层走。惯性思维(非最优): 用分段的思想,例如我每10层丢一次,如果碎了,就从这段的头,开始逐层丢。但是,这就存在问题,段数越高,最差情况下所需的次数也越多,例如第一段所需的最差次数是10次,第9端所需的最差次数是19次。最优解法: 希望每个区间的查找次数是均匀的,这样就能保证,每段区间的查找效率是相同的。也就是说,第一个区间是x层,第二个区间为保证均匀就是x-1层(因为已经丢过一次,那么这段区间内的层数就需要减一),第三个是x-2层,不等式: x+ ( x-1) + ( x-2) + ( x-3)+ …+ 2 >= 100 , 求解最优次数x= 14。 也就是说最差也能在14次内找到临界层。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值