校招笔试题大杂烩

1、某表达式的前缀形式为"+-*^ABCD/E/F+GH",运算符优先级为^>*/>-+,它的中缀形式为(C)

A   A^B*C-D+E/F/G+H

B  A^B*(C-D)+(E/F)/G+H

C  A^B*C-D+E/(F/(G+H))

D  A^B*(C-D)+E/(F/(G+H))

前缀表达式的计算机求值特点:

从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素     op 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。

2、malloc/free与new/delete的区别

1)申请的内存所在位置

new操作符从自由存储区(free store上为对象动态分配内存空间,而malloc函数从上动态分配内存。

2)是否需要指定内存大小

new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算,而malloc则需要显式地指出所需内存的尺寸。

int *p1 = (int *)malloc(sizeof(int) * length);
int *p2 = new int[length];

C++提供了new[]与delete[]来专门处理数组类型:

A * ptr = new A[10];//分配10个A对象

使用new[]分配的内存必须使用delete[]进行释放:

delete [] ptr;

3)  malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符。

4)  是否可以被重载

opeartor new /operator delete可以被重载

而malloc/free并不允许重载

malloc给你的就好像一块原始的土地,你要种什么需要自己在土地上来播种
而new帮你划好了田地的分块(数组),帮你播了种(构造函数),还提供其他的设施给你使用

3、全局存储区(也称为静态数据存储区)、栈(局部)、堆(动态)、代码存储区区别。

(1)全局存储区(也称为静态数据存储区)存储程序中的全体常数、全局变量、静态变量(全局静态变量和局部静态变量)、各类的静态数据成员。

存放在全局数据存储区中的数据具有生存周期长(自创建之时起直到程序执行结束时为止)、缺省初始值为0、存储区较大等特点。

(2)栈数据存储区(也称为局部数据存储区),它存储程序中各函数调用过程中的局部变量(包括函数形参和返回数据)。存放在栈区中数据具有生存周期短(自创建之时起到所在程序块执行结束为止)、无缺省初始值、存储区较小等特点。

(3)堆区,也称为动态数据存储区。它存储程序中各函数执行过程中用new运算符或malloc()函数动态申请分配的数据。存放在堆区数据具有生存周期不定(动态申请分配和动态释放)、无缺省初始值、存储区较大等特点。

(4)代码存储区。存储程序中全体函数(包括成员函数和非成员函数)的可执行二进制代码。


特征


全局存储区(静态)


栈(局部)


堆(动态)


代码存储区


存储数据类型


全体常数、全局变量、静态变量(全局静态变量和局部静态变量)、各类的静态数据成员


各函数调用过程中的局部变量(包括函数形参和返回数据)


各函数执行过程中用new运算符或malloc()函数动态申请分配的数据


存储程序中全体函数(包括成员函数和非成员函数)的可执行二进制代码。


初始值


缺省初始值为0


无缺省初始值


无缺省初始值


生存周期


长(自创建之时起直到程序执行结束时为止)


短(自创建之时起到所在程序块执行结束为止)


不定(动态申请分配和动态释放)


区大小


较大


较小


较大


较大

4、多态性简单介绍:

指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。 
  a、编译时多态性:通过重载函数实现 
  b
、运行时多态性:通过虚函数实现。 
  虚函数是在基类中被声明为virtual,并在派生类中重新定义的成员函数,可实现成员函数的动态覆盖(Override)

  1. #include<iostream>
  2. using namespace std;
  3. class A
  4. {
  5. public:
  6. void foo()
  7. {
  8. printf("1\n");
  9. 10.     }
  10. 11.     virtual void fun()
  11. 12.     {
  12. 13.         printf("2\n");
  13. 14.     }

15. };

16. class B : public A

17. {

18. public:

  1. 19.     void foo()
  2. 20.     {
  3. 21.         printf("3\n");
  4. 22.     }
  5. 23.     void fun()
  6. 24.     {
  7. 25.         printf("4\n");
  8. 26.     }

27. };

28. int main(void)

29. {

  1. 30.     A a;
  2. 31.     B b;
  3. 32.     A *p = &a;
  4. 33.     p->foo();
  5. 34.     p->fun();
  6. 35.     p = &b;
  7. 36.     p->foo();
  8. 37.     p->fun();
  9. 38.     return 0;

39. }

第一个p->foo()和p->fuu()都很好理解,本身是基类指针,指向的又是基类对象,调用的都是基类本身的函数,因此输出结果就是1、2。
    第二个输出结果就是1、4。p->foo()和p->fuu()则是基类指针指向子类对象,正式体现多态的用法,p->foo()由于指针是个基类指针,指向是一个固定偏移量的函数,因此此时指向的就只能是基类的foo()函数的代码了,因此输出的结果还是1。而p->fun()指针是基类指针,指向的fun是一个虚函数,由于每个虚函数都有一个虚函数列表,此时p调用fun()并不是直接调用函数,而是通过虚函数列表找到相应的函数的地址,因此根据指向的对象不同,函数地址也将不同,这里将找到对应的子类的fun()函数的地址,因此输出的结果也会是子类的结果4。

时间: 2024-08-05 20:27:40

校招笔试题大杂烩的相关文章

网易2018校招笔试题-数组能不能满足重排列后任意相邻的元素积都是4的倍数

今天看了一下网易最新的校招笔试题: 小易有一个长度为N的正整数数列A = {A[1], A[2], A[3]..., A[N]}.牛博士给小易出了一个难题:     对数列A进行重新排列,使数列A满足所有的A[i] * A[i + 1](1 ≤ i ≤ N - 1)都是4的倍数.     小易现在需要判断一个数列是否可以重排之后满足牛博士的要求. 代码如下: 1 import java.util.Scanner; 2 3 /** 4 * Created by jy on 2017/9/9. 5

2015年阿里巴巴校招笔试题

校招找工作的同学,可以看看,非常有帮助! 推荐: http://gointernetgo.com/textinterview/bishi-2015-alibba [产品经理]阿里巴巴2015校园招聘笔试题 [研发工程师]阿里巴巴2015校园招聘笔试题 [研发工程师]阿里巴巴2015校园招聘笔试题2 [国际安全运营专员]阿里巴巴2015校园招聘笔试题1 [产品运营]阿里巴巴2015校园招聘笔试题1 [前端开发工程师]阿里巴巴2015校园招聘笔试题1 [前端开发工程师]阿里巴巴2015校园招聘笔试题

兆易创新2016年9月校招笔试题_IC设计/验证

还有器件岗位的笔试题: 1.CMOS中哪些制造步骤中用到了离子注入,需要注意哪些?2.有哪些薄膜制备方法?各有什么优缺点?3.COMS的制作步骤,简要叙述.4.载流子的输运方式有哪些,简要叙述.5.半导体中缺陷种类,杂质的类型,缺陷杂质的危害,如何避免杂质缺陷.6.为何固体有超导体,导体,半导体,绝缘体?7.缓变PN结和突变PN结区别,如何制作,有何应用?8.CMOS的IV特性曲线,各个阶段的意义,如何让器件有效工作?9.质量测试中的加速失效作用.10.氧化层的击穿过程,如何避免击穿?附加题:N

互联网校招笔试题分享

Java 一些知识点 Object 有哪些方法 public 方法:getClass.equals(和==之间的区别).hashCode.toString.wait.notify protected 方法:clone.finalize private 方法:registerNatives,该方法作用是将不同平台C/C++实现的方法映射到Java中的native方法 public class Object { private static native void registerNatives()

小米2017校招笔试题

只过了20%...我日 树的高度 时间限制:C/C++语言 1000MS:其他语言 3000MS 内存限制:C/C++语言 65536KB:其他语言 589824KB 题目描述: 现在有一棵合法的二叉树,树的节点都是用数字表示, 现在给定这棵树上所有的父子关系,求这棵树的高度 输入 输入的第一行表示节点的个数n(1<=n<=1000,节点的编号为0到n-1)组成, 下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号 输出 输出树的高度,为一个整数 样例输入 5

校招笔试题编程技巧总结

技巧一://统计字符串s1的频率 String s1 = in.nextLine(); //统计字符串s1的频率 for (char c1 : s1.toCharArray()) { if (hashMap1.containsKey(c1)) { hashMap1.put(c1, hashMap1.get(c1) + 1); } else { hashMap1.put(c1, 1); } } 技巧二:输入判断加 hasNext() Scanner scan=new Scanner(System.

网易2017年校招笔试题 最大的奇约数

题目: 定义函数f(x)为x的最大奇数约数,x为正整数,例如f(44) = 11. 现在给出一个N,需要求出f(1) + f(2) + f(3) + ... + f(N) 例如: N = 7 f(1) + f(2) + f(3) + f(4) + f(5) + f(6) + f(7) = 1 + 1 + 3 + 1 + 5 + 7 = 21. 分析: 奇数的最大约数是自身, 偶数的最大约数是是除去所有偶因子之后的那个奇数.所以直观的思路就是挨个遍历一遍加起来. 代码: 1 #include <i

微软2017校招笔试题3 registration day

题目 It's H University's Registration Day for new students. There are M offices in H University, numbered from 1 to M. Students need to visit some of them in a certain order to finish their registration procedures. The offices are in different places.

微软2017校招笔试题2 composition

题目 Alice writes an English composition with a length of N characters. However, her teacher requires that M illegal pairs of characters cannot be adjacent, and if 'ab' cannot be adjacent, 'ba' cannot be adjacent either. In order to meet the requiremen