STL的vector每次扩充容量时,新的容量都是前一次的两倍
AI时代,有人焦虑失业,有人偷偷变强,不写代码不烧脑~
感受一句话的力量
AI时代,有人焦虑失业,有人偷偷变强,不写代码不烧脑~
STL的vector每次扩充容量时,新的容量都是前一次的两倍
也就是说解耦的好处就是提高了代码的重用性,为功能扩展提供了便利。
面试过程中写代码要特别注意鲁棒性。如果写出的代码存在多处崩溃的风险,那我们很有可能和Offer失之交臂。
因为除法的效率比移位运算要低得多,在实际编程中应尽可能地用移位运算符代替乘除法。
这样只在分配内容成功之后再释放原来的内容,也就是当分配内存失败时我们能确保CMyString的实例不会被修改。我们还有一个更好的办法是先创建一个临时实例,再交换临时实例和原来的实例。
在网络编程中,如果URL参数中含有特殊字符,如空格、'#'等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在'%'后面跟上ASCII码的两位十六进制的表示。比如空格的ASCII码是32,即十六进制的0x20,因此空格被替换成"%20"。再比如'#'的ASCII码为35,即十六进制的0x23,它在URL中被替换为"%23"。
C/C++中每个字符串都以字符' '作为结尾
有些面试官故意一开始不把题目描述清楚,让题目存在一定的二义性。他期待应聘者能够一步步通过提问来弄明白题目的要求。
最不能容忍功能错误,忽略边界情况
最后需要注意的是,如果链表中只有一个结点,而我们又要删除链表的头结点(也是尾结点),此时我们在删除结点之后,还需要把链表的头结点设置为NULL。
表3.1返回值、全局变量和异常三种错误处理方式的优缺点比较
因此建议应聘者在面试过程中遇到不明白的地方多提问,这样面试官就会觉得你态度积极、求知欲望强烈,会给面试结果加分。
题目二:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
通常分治法思路都可以用递归的代码实现。
由于链表中的内存不是一次性分配的,因而我们无法保证链表的内存和数组一样是连续的。因此如果想在链表中找到它的第i个结点,我们只能从头结点开始,沿着指向下一个结点的指针遍历链表,它的时间效率为O(n)。而在数组中,我们可以根据下标在O(1)时间内找到第i个元素。
如果应聘者能够在定义函数之后,立即对该函数进行全面的单元测试,那就相当于向面试官证明了自己有着专业的软件开发经验。如果应聘者是先写单元测试用例,再写解决问题的函数,我相信面试官定会对你刮目相看。
当我们声明一个数组时,其数组的名字也是一个指针,该指针指向数组的第一个元素。
C++中对内存的使用管理
第一个指针从链表的头指针开始遍历向前走k-1,第二个指针保持不动;从第k步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离保持在k-1,当第一个(走在前面的)指针到达链表的尾结点时,第二个指针(走在后面的)指针正好是倒数第k个结点。
在函数ConstructCore中,我们先根据前序遍历序列的第一个数字创建根结点,接下来在中序遍历序列中找到根结点的位置,这样就能确定左、右子树结点的数量