(1)
有能存放1001个元素的C数组,里面存放了1-1000范围内的数字,其中只有一个数字是重复的。查找重复的那个数字,并对该数组排序,要求把重复的数字放到最后一个位置。
解法1,时间复杂度为n
先说明,排序的是白痴。
把这些数字加到一起,然后可以求出重复的是哪一个。剩下的就好说了。
另外,我还有比这个解法更快的算法。
在50mi深蓝的群的聊天记录里。
(2)
1+2+…+10
用两种方式,保证其在编译期计算完毕。
最容易想到的是Metaprogramming,但是还是有点难度的。
最不好想到的是const int s = 1+2+3+4+5+6+7+8+9+10,而且这里的const也未必是需要的。
这个就是思维惯式。
(3)
JDBC
Statement.executeQuery(SQL); 返回的ResultSet是否需要判断其为null?
不用,看Effective Java。
(4)
CreateFile的返回值
如果失败了,返回什么?其失败的返回值和其他的Win32内核对象的不一样。
(5)
通常现代的编译器下
char* p = new char[N];
delete p;和delete[] p;
有什么区别。
class T;
T* pT = new T[N];
delete[] pt;加不加[]的区别。
(6)
讲述MFC的众多消息映射函数,MFC为什么不用虚函数?可不可以用虚函数?
这个问题在深入浅出MFC里有,通常看完Inside C++ Object Model就能理解的更好,如果你看过lifeNet对它在面向对象层次的理解,就更加清楚了。
(7)
#define for if(0) (void)0; else for
讲述一下它的用法和含义
(8)
正则表达式.
a,b中的一个是如何表示的?[a|b]对嘛?
貌似是对的,其实这个是表示a,|,b中的一个,正确的写法是[ab]或a|b.
(9)
MFC的DEBUG_NEW是如何进行检测内存泄漏的
这个最好看看源码了,#define来,define去的很简单。并且我以为它使用平衡二叉树管理内存,除此之外,也就是HashTable了。但是处理内存地址值,我以为不会。
本题难倒了一位28岁MFC程序员。
(10)
来自于50mi的试题:
double* (*a)[2][3];
问
sizeof(a);
sizeof(*a);
sizeof(**a);
sizeof(***a);
呵呵,
还有sizeof(****a);
解答:a是指向类型double*[2][3]的指针,是指针就不废话了。
所以*a就是上述的类型,于是结果是sizeof(double*)*2*3=24;
**a就是double*[3]类型的,***a就是double*型的,****a就是double类型的。
(11)
还有一道来自于50mi的题目,
int i = 2;
cout<<i++<<i;
问输出,在VC上,我看过其汇编,还是让我感到匪夷所思的,至少被理解为函数调用是不完全正确的。VC6和VC7的输出结果都是不一样的,我希望答题的人能知道这里存在着编译器的差别问题。
(12)
如何利用std::string建立一个字符串类,使其判断字符串对象相等时忽略大小写。
关键在于basic_string模板类的第二个模板参数的重新定义。详细看《Effective C++》。
(13)
叙述__stdcall和__cdecl的区别。要讲到汇编层次,那顺便再说一下__fastcall和__thiscall;
(14)
如何在const函数内修改非mutable修饰的成员的值?
提示const_cast;
(15)
关于 return i++;的问题,i的值会不会得到增加。
也许要了解到汇编层次才算好。
(16)
如何在编译阶段就可以确定一个字符串常量的长度?
不是用模板技术了,没有那么复杂。
(17)
STL里
std::map<int, int> map_;
map_[1] = 2;
int a = map_[2];
?? map_.size();??
(18)
class Test
{
};
Test* pTest = new Test();
会不会调用所谓的构造函数。
(19)
char* p = “Hello”;
char a[] = “Hello”;
区别是什么?估计这个有点简单了。
(20)
如何得到寄存器EIP的值?
呵呵,据我所知,可以有两种方法可以使用。
(21)
template<class T>
typedef T* (*pfunc)(T&);
在现阶段,编译器是否支持。
(22)
void(void)
这个是什么?
(23)
什么是Win32窗口的子类化?
(24)
阐述VC6和VC7中std::string的变化。
主要说明关于引用计数,COW等技术上的问题。
(25)
const int i = 5;
int* c = const_cast<int*>(&i);
*c = 6;
cout<<i;
输出多少? 为什么?
(26)
说一下volatile能不能保证线程安全,说明原因,最好用代码说明问题。
(看来学C++的不懂汇编还是挺郁闷的)
(27)
写伪码,用C++模拟C#或Java中线程安全关键字的实现。
其实完全可以猜测C#在实现级别上的代码。实现C#的lock。
(不会C#和Java就算了)
(28)
看懂我的签名C代码,用1个小时的时间应该差不多了。
“Healer”
(29)
class Test
{
};
Test b, c;
Test a = b + c;//我们认为Test重载了加号。
这样,会不会调用拷贝构造函数呢?