C++ 面试实战经验分享

最近面试了很多家公司,除了算法题,一部分面试官会问到程序语言(C++)相关的知识,也有的会到面向对象设计相关的知识。下面是一些我被问到的知识点,我把想到的答案整理了一下,欢迎大家批评指正。

C++ 语言特性

const

  • const 的几种用法,如:常成员函数,不得修改类中的任何数据成员的值函数 int getValue() const; (有一个面试官一口气给我写了三四个例子让我解释)
  • Q: What if xxx is immutable? A: use const keyword (算法题 follow-up)

inline 内联函数和宏的区别

  • 宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的
  • inline 内联函数有类型检查,具有函数特性;
  • Q:推荐使用哪个?A:内联函数,减少二义性。

虚函数表

为了实现 C++ 的多态,C++ 使用了一种动态绑定的技术。这个技术的核心是虚函数表。(填空题)

指针和引用的区别

  • 指针是存放变量地址的变量,可以被改变(其指向的地址,或者其指向的地址中所存放的数据)
  • 引用必须被初始化,其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)
  • 指针传递参数和引用传递参数
    • 指针:值传递的方式,在栈中开辟了内存空间存放实参的值,从而成为了实参的一个副本,不会影响主调函数的实参变量的值。
    • 引用:被调函数的形式参数作为局部变量在栈中开辟了内存空间,存放实参变量的地址,被调函数对形参的任何操作都被处理成间接寻址,,所以被调函数对形参的操作会影响主调函数中的实参变量。
  • Q:数组和指针的区别?(我被一家公司的两个面试官问了这个问题,应该是题库里的。)
  • A:数组和指针本质上都代表一块内存,数组名即代表这块内存的地址,而指针本身不代表任何有意义的内容,只有赋值后,才表示一块有意义的内存地址。两者定义的时机不同:数组在编译时就已经被确定下来,而指针直到运行时才能被真正的确定到底其指向。
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C算法实战面试题可以是各种类型和难度的问题,从简单的数组操作到复杂的图算法。下面是一个可能的题目: 假设有一个数组num,其中包含了一些整数。请编写一个算法,找到数组中两个元素的和等于给定的目标数的索引,并返回这两个元素的索引。 解题思路如下: 1. 创建一个空的字典,用来存储已经遍历过的元素的值和对应的索引。 2. 遍历整个数组num,对于每个元素num[i],检查目标数与当前元素之差是否已经存在于字典中。 3. 如果存在,说明之前已经遍历过一个元素num[j],使得num[i] + num[j] = 目标数。返回j和i作为结果。 4. 如果不存在,说明之前没有找到与当前元素相加等于目标数的元素,将当前元素的值和索引添加到字典中,继续遍历数组。 5. 如果遍历结束后没有找到满足条件的元素,返回一个空的结果。 这个算法的时间复杂度是O(n),其中n是数组num的长度。因为只需要遍历一次数组,并且利用字典的查找操作是常数时间的。 在实际的面试中,可以进一步要求优化算法,例如考虑数组中可能存在重复元素的情况,或者要求返回所有的满足条件的索引对等。根据具体情况,可以对算法进行细化和改进。 ### 回答2: c 算法实战面试题是指在面试过程中,针对 C 语言编程能力要求的一系列算法题目。这类题目旨在考察面试者对基本算法和数据结构的理解和掌握程度,以及解决实际问题的能力和思维方式。 常见的 C 算法实战面试题包括排序算法(如冒泡排序、插入排序、快速排序等)、查找算法(如二分查找、哈希查找等)、字符串处理问题(如字符串反转、字符串匹配等)、链表相关问题(如链表反转、链表中的环检测等)、递归和迭代等等。 在面试中回答此类问题,需要从具体算法和解题思路两个方面进行回答。 对于具体算法,需要清晰地解释算法原理和实现步骤,算法的时间和空间复杂度等。例如,对于快速排序算法,可以解释其基本思想是通过选择一个基准元素,并将待排序数组分为两部分,一部分小于等于基准元素,一部分大于基准元素,然后递归地对两部分进行排序,最终达到整个数组有序的目的。 对于解题思路,可以从多个角度进行分析和讨论。例如,在链表环检测问题中,除了传统的使用哈希表或快慢指针的方法之外,还可以考虑使用递归和迭代的思路来解决。并且需要考虑解决问题时可能存在的边界情况和异常情况。 总之,回答 C 算法实战面试题需要充分理解算法原理,并能运用一定的思维方式和解题技巧,同时也需要注重代码实现的效率和边界情况的处理,以展现自己扎实的编程能力和解决问题的能力。 ### 回答3: c算法实战面试题是一种在面试中常见的题型,需要候选人用C语言编写代码解决给定的问题。以下是一个简单的示例题目和解答: 题目:给定一个整数数组nums和一个目标值target,请找出数组中两个数的和等于目标值,并返回它们的索引。 示例输入:nums = [2, 7, 11, 15], target = 9 示例输出:[0, 1] 解答: ``` #include <stdio.h> int* twoSum(int* nums, int numsSize, int target, int* returnSize) { int i, j; int* result = (int*)malloc(2 * sizeof(int)); for (i = 0; i < numsSize - 1; i++) { for (j = i + 1; j < numsSize; j++) { if (nums[i] + nums[j] == target) { result[0] = i; result[1] = j; *returnSize = 2; return result; } } } *returnSize = 0; return NULL; } int main() { int nums[] = {2, 7, 11, 15}; int target = 9; int returnSize; int* result = twoSum(nums, sizeof(nums) / sizeof(nums[0]), target, &returnSize); if (returnSize == 2) { printf("[%d, %d]\n", result[0], result[1]); } else { printf("No result found.\n"); } free(result); return 0; } ``` 这个示例题目要求在给定的数组中找到和为目标值的两个数,并返回它们的索引。在解法中,我们使用了简单的双重循环来遍历数组,找到符合条件的两个数后,保存它们的索引并返回。如果遍历完整个数组没有找到符合条件的数对,则返回NULL。 以上是一个简单的C语言面试题示例,实际的题目可能会更复杂,但解题思路一般都是类似的,即使用适当的算法和数据结构来解决问题。在面试中,除了正确的解答,面试官还会关注代码的可读性、性能等方面。因此,在写出代码解答之前,应该先仔细阅读题目要求,并在思考清楚解题思路后再动手编写代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值