通信与计算机类求职面试题--指针篇
程序调试
1. 指针问题#include <iostream>
#include <malloc.h>
using namespace std;
void GetMemory(char *p,int num)
{
p=(char*)malloc(sizeof(char)*num);
}
void test(void)
{
char* str=NULL;
GetMemory(str,100); //str仍然为NULL
strcpy(str,"hello"); //运行错误
}
void GetMemory2(char **p,int num)
{
*p=(char*)malloc(sizeof(char)*num);
}
void test2(void)
{
char *str=NULL;
GetMemory2(&str,100);
strcpy(str,"hello");
cout<<str<<endl;
free(str);
}
char *GetMemory3(int num)
{
char* p=(char*)malloc(sizeof(char)*num);
return p;
}
void test3(void)
{
char* str=NULL;
str=GetMemory3(100);
strcpy(str,"hello");
cout<<str<<endl;
free(str);
}
char* GetString(void)
{
char p[]="hello world"; //位于堆栈内存
return p;
}
void test4(void)
{
char* str=NULL;
str=GetString(); //str的内容是垃圾
cout<<str<<endl;
}
void main(void)
{
// test();
// test2();
// test3();
test4();
}
2.
TC2.0 环境下的如下程序, 执行结果为
please input: scanf : floating point formats not linked
Abnormal program termination
#include "stdio.h"
#include "stdlib.h"
main()
{
float *a;
a = (float *)malloc(10*sizeof(float));
printf(" Please input: ");
scanf("%f", &a[0]); /* &a[0] 也不行 */
printf(" What you have input is %f ", *a);
getch();
free(a);
}
3.
F(n)=1 n>8 n<12
F(n)=2 n<2
F(n)=3 n=6
F(n)=4 n=other
使用+ - * /和sign(n)函数组合出F(n)函数
sign(n)=0 n=0
sign(n)=-1 n<0
sign(n)=1 n>0
4. 找错
Void test1()
{
char string[10];
char* str1=”0123456789”;
strcpy(string, str1);
}
Void test2()
{
char string[10], str1[10];
for(I=0; I<10;I++)
{
str1[i] =’a’;
}
strcpy(string, str1);
}
Void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}
5. 找错
#define MAX_SRM 256
DSN get_SRM_no()
{
static int SRM_no;
int I;
for(I=0;I<MAX_SRM;I++,SRM_no++)
{
SRM_no %= MAX_SRM;
if(MY_SRM.state==IDLE)
{
break;
}
}
if(I>=MAX_SRM)
return (NULL_SRM);
else
return SRM_no;
}
6. 写出程序运行结果
int sum(int a)
{
auto int c=0;
static int b=3;
c+=1;
b+=2;
return(a+b+C);
}
void main()
{
int I;
int a=2;
for(I=0;I<5;I++)
{
printf(“%d,”, sum(a));
}
}
7.
int func(int a)
{
int b;
switch(a)
{
case 1: 30;
case 2: 20;
case 3: 16;
default: 0
}
return b;
}
则func(1)=?
5:
int a[3];
a[0]=0; a[1]=1; a[2]=2;
int *p, *q;
p=a;
q=&a[2];
则a[q-p]=?
6.
定义 int **a[3][4], 则变量占有的内存空间为
7.
编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。
上海微创笔试
1.上海的苏州河由于遭受多年的工业污染,一直是条臭水沟。上海市政府下了很大决心清理苏州河,你觉得需要几年能让河水变清?你的依据是什么?
2.找出字符串A中包含的字符可以进行的所有不同组合。例如:abccd中,ab,ac,bc,cc,abd等都是可能的组合。(请用C/C++编程,不允许上机操作)
3.请估算月球的体积。
4.经常去的技术网站,请举例。
5.对软件开发过程的理解。
6.上海有多少外籍和港澳台人士?你的依据是什么?(不得引用政府和调研机构数据)
7.字符串A是由n个小写英文字母(a ~ z)构成的,定义为char A[n]。你能用更少的空间表示这个字符串吗?请写出从char A[n]到你的新的储存格式的转换函数。(请用C/C++编程,不允许上机操作)
8.哈希表和数组的定义,区别,优缺点。
9.用递归实现菲波列数列。
10.用dhtml写页面。
一些software必定会被问到的问题,供大家参考(这些问题很多都非常基础,出现在华为、中兴、intel、上海群硕、深圳正阳、腾讯、惠普、微软等公司,如果栽在这上面谁都不会甘心):
C++部分:
1、排序。这种题目几乎是必问的,一般是问你排序有几种,各种排序的比较啊等等。还有哪些排序是稳定的等,这些还是要记住的。末了,必定会问你快排的算法~呵呵,狠一些的就让你写出来。(至于堆排序桶排序啊什么的,倒是从来没有听说有人被问过——我们觉得这么麻烦的算法面试官自己估计也不会记得……呵呵)
2、查找。哈希、二叉树、折半等对比。哈希映射和哈希表的区别。
3、链表和数组的区别。在什么情况下用链表什么情况下用数组。
4、栈和队列的区别。
5、多态。overload 和 override的区别。
6、字符串有关的函数。比如让你写一个拷贝字符串的函数啊,或者字符串反转啊什么的。strcpy和memcpy。
7、继承、多继承。
8、面向对象有什么好处
9、说说static的与众不同之处。如果一个变量被声明为static,它会被分配在哪里。在什么时候分配空间等。
10、软件开发的几个过程。如果说到测试,一定会问测试分哪几种,有什么区别等。
11、什么是虚函数、纯虚函数、虚的析构函数,用途。
12、还没想起来,欢迎大家补充
网络部分:
1、OSI模型7层结构。TCP/IP模型结构
2、TCP/UDP区别
3、建立连接的步骤
JAVA部分
1、Java的特性,垃圾回收,让你想一个大概的实现垃圾回收的架够。
2、Java和C/C++的区别
3、虚函数,纯虚函数、重栽函数,他们之间的区别,什么时候用,重载什么时候用虚函数。虚函数的实现机理。
4、现场编写程序的考点:指针越界、基本类型数据的字长、字符串、数组
面试常见问题解答
1:CObject类中的析构函数为什么是虚函数ZZ
面试SE时,很多公司喜欢问到虚函数相关。宝宝有一次被问到,CObject类中的析构函数为什么是虚函数,不懂。后来上网查到了答案,特贴上来与大家分享
MFC类库中,CObject类的重要性不言自明的。在CObject的定义中,我们 看到一个有趣的现象,即CObject的析构函数是虚拟的。
在AFX.H中,CObject的定义:
class CObject
{
public:
// Object model (types, destruction, allocation)
virtual CRuntimeClass* GetRuntimeClass() const;
virtual ~CObject(); //virtual destructors are necessary
...
...
};
为什么MFC的编写者认为virtual destructors are necessary (虚拟的析构函数是必要的)?
在著名的VC教程 "精通Visual C++ for Windows 95/NT"(电子工业版, 1997年5月版,胡俭,丘宗明等著)第99页中有这样一段话:
“如果CObject的析构函数不是虚拟的,派生类就不会自动地得到虚拟的 析构函数,当对象撤消时就会带来问题——只有当前类的析构函数得到
调用而基类的析构函数就得不到调用。...”
我认为这段解释是这本很不错的书中一个不应出现的严重错误。其意思是说:
若:
class CBase
{
public:
~CBase() { ... };
...
};
class CChild : public CBase
{
public:
~CChild() { ... };
...
};
main()
{
Child c;
...
return 0;
}
上段代码在运行时,当栈框中的自动对象 c 被撤消时,只调用~CChild(), 而不调用~CBase()。
我想但凡对C++继承性理论有所了解的人都会立刻指出这是错误的。
由于在生成CChild对象c时,实际上在调用CChild类的构造函数之前必须首先 调用其基类CBase的构造函数,所以当撤消c时,也会在调用CChild类析构函数
之后,调用CBase类的析构函数(析构函数调用顺序与构造函数相反)。也就是说,无论析构函数是不是虚函数,派生类对象被撤消时,肯定会依次上调其基类的
析构函数。
那么为什么CObject类要搞一个虚的析构函数呢?
仍以上面代码为例,如果main()中有如下代码:
...
CBase * pBase;
CChild c;
pBase = &c;
...
那么在、当pBase指针被撤消时,调用的是CBase的析构函数还是CChild的呢? 显然是CBase的(静态联编)。但如果把CBase类的析构函数改成virtual型,当 pBase指针被撤消时,就会先调用CChild类构造函数,再调用CBase类构造函数。
在这个例子里,所有对象都存在于栈框中,当离开其所处的作用域时,该对象 会被自动撤消,似乎看不出什么大问题。但是试想,如果CChild类的的构造函数
在堆中分配了内存,而其析构函数又不是virtual型的,那么撤消pBase时,将不会 调用CChild::~CChild(), 从而不会释放CChild::CChild()占据的内存,造成内存泄露。
而将CObject的析构函数设为virtual型,则所有CObject类的派生类的析构函数都将 自动变为virtual型,这保证了在任何情况下,不会出现由于析构函数未被调用而
导致 的内存泄露。这才是MFC将CObject::~CObject()设为virtual型的真正原因。
注意:析构函数可以为virtual型,构造函数则不能。
面试常见问题解答2:几种查找方式的比较ZZ
宝宝提供的答案仅供参考,如有不对欢迎指正screen.width-500)this.style.width=screen.width-500;">
hash表的查找性能是与装填因子(=填充数/表长)成正比的;
2叉树查找则需要遍历节点,性能为O(n);
折半查找性能应该为log(n);
面试常见问题解答3:说说static的与众不同之处
static是静态分配,生命域>=作用域,在静态数据区,当函数返回时,其静态地址并不
释放,并保留以前的值。但其只能在作用域内
被访问。故在递归调用等程序中,它的作用很突出。
栈
|
V
^
|
堆
数据段
代码段
面试常见问题解答4:overload和override的区别
重写Overriding是父类与子类之间多态性的一种表现,
重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,
我们说该方法被重写 (Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,
父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,
它们或有不同的参数个数或有不同的参数类型,
则称为方法的重载(Overloading)。
Overloaded的方法是可以改变返回值的类型。
数据结构面试题目
一
对n个顶点的无向图和有向图用邻接矩阵和邻接表表示时,如何判断下列问题
1)图中有多少边?
2)任意两个顶点的i和j是否有变相连?
3)任意一个顶点的度是多少?
二
有向图G用邻接矩阵存储,其第i行的所有元素之和等于顶点i的_____
作者:Gavin(整理) 更新日期:2006-08-26
来源:upsdn.net
浏览次数:
相关文章
- 轻松面试找到理想员工-非官方的面试技术指南
- 通信与计算机类求职面试题--微软篇
- 通信与计算机类求职面试题--Intel篇
- 通信与计算机类求职面试题--CNC篇
- 通信与计算机类求职面试题--IBM篇
- 通信与计算机类求职面试题--Google篇
- 通信与计算机类求职面试题--嵌入式系统篇
- 通信与计算机类求职面试题--Putian篇
- 通信与计算机类求职面试题--Lucent篇
- 通信与计算机类求职面试题--English篇
相关评论 发表评论
- No Comments