面试题

1、Win32平台下,sizeof(short)=2,sizeof(int)=4,sizeof(long)=4;
注释:这个是32位平台,基本类型的大小,是由编译器决定的。
2、请给出如下程序的结果:
int a = 3;
int b = a << 3;
a=___;b =;
注释:3的二进制:00000011 << 3 后是:00011000。
所以 a=3,b=24;
3、请给出如下程序结果:
#define MAX_NUM 100+200
int Temp = MAX_NUM10;
则:Temp =___;
注释:宏的功能只是简单的字符替换MAX_NUM
10表示100+200*10 所以用宏要小心 ,则Temp = 2100;
4、内存是进程范围or线程范围__进程
;
注释:进程有独立的内存,是线程的管理者,线程是进程的执行者 。
CPU调度时,针对进程or线程__线程
;
注释:线程才是执行者。
函数调用堆栈,针对进程or线程_进程
;
注释:进程才有独立内存,堆栈属于内存的一部分
5、栈的插入和删除操作在( A )进行。
A、栈顶 B、栈底 C、任意位置 D、指定位置
注释:栈是规定只能在栈顶插入或删除的线性表,也就是先进先出的规则。
6、对于C++中类(class)与结构体(struct)的描述正确的为(A)。
A 类中的成员默认是private的,可以声明为public,private和protected,结构中定义的成员默认的都是public。
B 结构中不允许定义成员函数,但是类中可以定义成员函数。
C 结构实例使用malloc()动态创建,类对象使用new操作符动态分配内存。
D 结构和类对象都必须使用new创建。
E 结构中不可以定义虚函数,但是类中可以定义虚函数
F 结构不可以存在继承关系,但是类可以存在继承关系
注释:
A正确无异议,B可以定义成员函数,C,D当类中有虚函数时用malloc申请内存出错, E,F结构中也可以有虚函数和继承关系
7、下列关于Windows应用程序对键盘响应的说法,正确的是(D)
A 键盘的扫描码不依赖于具体设备
B Windows应用程序不使用消息来处理键盘响应
C 按下键盘上的一个键,不可能同时产生按键消息和字符消息
D winMain函数的消息循环中的TranslateMessage函数用于把按键消息转换为字符消息
8、简述下列代码有何错误:
void func1()
{
int pa = NULL;
func2(pa); /// 函数返回后pa仍然是空指针
delete pa; /// pa仍然是空指针,pb申请的空间并没有被delete掉
}
void func2(int pb)
{
pb = new int(5); /// pb重新申请了堆空间
}
9、对于频繁使用的一个短小函数,在C中用什么实现?在C++中应用什么实现?
注释:
c用宏定义,c++用inline关键字。
宏定义一般不进行参数类型检查,内联函数会进行类型检查,更加安全。
宏是由预处理器对宏进行替代,而内联函数是通过编译器控制的。
引入内联函数的目的是为了解决程序中函数调用的效率问题。
10、多态类中的虚函数表是Complile-Time,还是Run-Time时建立的?
答:Complile-Time
注释:虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组.而对象的隐藏成员–虚拟函数表指针是在运行期–也就是构造函数被调用时进行初始化的,这是实现多态的关键。
11、请写一个函数重载的简单实例:
int add(int a,int b)
{
return (a + b);
}
函数重载。
float add(float a,float b)
{
return (a + b);
}
答:函数重载是指函数名相同,但参数类型或返回值可能不同的函数。
12、sendMessage和PostMessage有什么区别?
SendMessage:发送消息后,等待消息处理完毕后才继续执行自身的程序。
PostMessage:发送消息后不等待消息处理即继续执行自身的程序。
13、m_pThrd 的类型是 CWinThread
时,WaitForSingleObject(m_pThrd->m_hThread, INFINITE); 有何作用?
答:WaitForSingleObject是表示等待线程的一个函数。
参数为INFINITE表示一直等待线程CWinThread执行结束后,再继续处理自身程序。
14、简述动态链接库(
.dll)静态加载和动态加载的不同。
答:
dll的动态加载,又称显式加载,特点有以下几点:
1:灵活,可以在需要的时候用LoadLibrary进行加载,在不需要的时候用FreeLibrary进行卸载,这样可以不必占用内存。
2:可以在没有dll时候发现,而不致程序报错。
3:加载程序中有条件才运行的库。
4:热更新,在不停止程序的前提下进行更新。
5:复杂一些,需要显式获得函数地址。
6:dll没有对应的lib文件,此时只能进行动态加载。
7:dll动态加载只需要dll文件就可以了,不需要导入库和头文件。
dll静态加载,又称隐式加载,需要把库中所有的函数链接到可执行文件中。
1:简单方便;
2:没有dll时,系统报错;
3:加载运行很久的库;
4:dll必需有相应的lib文件;
5:将整个dll库加载到exe中,占用内存较大,但速度较快。
6:dll静态加载需要dll和lib文件以及.h文件。
15、请把下述代码加上异常处理。
int MyWriteFile(CString strFileName, CString strText)
{
int nRet = 0;

   CFile myFile; 
   myFile.Open(strFileName, CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, 

NULL);

   int nLen = strText.GetLength(); 
   myFile.Write((char*)(LPCSTR)strText, nLen); 

myFile.Close();

   return nRet; 

}
答:
int MyWriteFile(CString strFileName, CString strText)
{
int nRet = 0;

   CFile myFile; 
   __try 
  { 
    nRet = myFile.Open(strFileName,\ 
           CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL); 
    if(!nRet) 
    { 
        /// 输出异常信息 
        __leave;/// 结束try块跳到__finaly代码块 
         } 
    int nLen = strText.GetLength(); 
    nRet = myFile.Write((char*)(LPCSTR)strText, nLen); 
    if(!nRet) 
    { 
        /// 输出异常信息 
        __leave;/// 结束try块跳到__finaly代码块 
    } 
  } 
  __finaly 
 { 
     myFile.Close(); 
 } 
 return nRet; 

}
16、请解释“ func ”为何种类型这种类型的作用什么变量 ttt 的值是多少 (6 分 )
typedef int (func)(int, int);
int xxx(int a, int *p)
{
return a + *p;
}
int dowork(func aaa, int bbb, int ccc)
{
return aaa(bbb, ccc);
}
int sss = 4;
int ttt = dowork(&xxx, 3, &sss);
答:func表示一个函数指针,它指向参数为int,int
,返回值为int的函数。ttt的值为7
17、请问下述代码中 : int operator+(… )起什么作用? this 是什么? ccc 的值最终为多

class Fruit
{
public:
Fruit()
{
weight = 2;
}
Fruit(int w)
{
weight = w;
}
int operator+(Fruit f)
{
return this->weight * f.weight;
}
private:
int weight;
};
Fruit aaa;
Fruit bbb(4);
int ccc = aaa + bbb;
答:int operator+(… )表示重载类的“+”号运算符,this表示对象本身的指针,本例中它指
向类的对象aaa;ccc最终的结果为8(8 = 2 * 4)。
18、请解释下面代码采用了何种 C++ 特性,作用是什么? (6 分 )
template
T sum(T a, T b)
{
return (a + b);
}
答:表示函数模板,用于将一类功能相同,参数类型和返回值不同的函数抽象为一个模板,
方便模板函数调用。
19、请解释 aaa.h 中下面代码的功能
#if !defined(AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDE
D_)
#define AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_
… …
#endif
答:这是预处理命令,可以保证多次包含此头文件时,只编译一次代码。
20、CMemoryState 主要功能是什么 ?
注释:用于检测内存泄露。

21、在写程序的过程中常常会出现程序需要占用大量内存,如果系统物理内存中不存在足够多的的内存空间,一般可以考虑使用哪些技术来解决问题?
请大神解答一下。
22、简述几种常用的数字滤波方式。
答:限幅滤波、中值滤波、算术平均滤波、加权平均滤波等
23、一个全局变量tally,两个线程并发执行(代码段都是TfreadProc),问两个线程都结束后,tally取值范围。
int tally = 0;//glable

void ThreadProc()
{
for(int i=1;i<=50;i++)
tally += 1;
}
答:tally(50-100)

注释:最坏的情况: 就是线程一读tally,线程二也读tally,线程一寄存器加一,线程二寄存器加一,线程一放回tally,线程二放回tally,这种情况虽然二个线程都对tally加1,但显然只加了一次。所以到最后只加50次。
最好的情况: 就是线程一的for结束,再到线程二的for,一共执行100次。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值