面试题的汇总

来源:互联网 发布:网络名誉侵权 编辑:程序博客网 时间:2024/04/30 14:47

今年10月份往后就要开始找工作了,虽然感觉自己的能力还很差,但不能灰心丧气,每天逛逛论坛,看看一些面试题,总结一下面试的知识,可以着急,但万万不可浮躁。

按照日期,红色的是我还不完全懂的东西。有人会的可以留言。

7月2日

有一间屋子的墙上装有100盏灯,分别编号为1到100,现在都灭着。屋外有100人,编号也分别从1到100,按顺序进屋。每个人都必须把自己编号的倍数按一下所对应灯的开关,例如1号人进去会把所有是1的倍数的灯的开关按一下,2号人进去会把所有是2的倍数的开关按一下。以此类推,请问最后有几盏灯还亮着?

首先这道题的本质是求1到100这些数有哪些的约数包括1和它本身)是奇数个。而之前小学的公式有一个数的约数比如12=22*3,约数为(2+1)*(1+1)=6个,所以如果约数个数为奇数,则它的约数都是某个数的偶次幂,所以一定是完全平方数,结果为:1,4,9...81,100。

 

好吧,我承认这道题是行测里的,以后会有编程方面的问题。

 

7月3日

http://topic.csdn.net/u/20090211/16/773219a4-bb84-4702-8669-28fef466af62.html?9958

1.编程领域里经常使用的缩写:OS(open source,operating system);VS(visual studio);MS(microsoft);CS(Client/Server,Control System);RTOS(Real Time Operator System);SDK(Software Development Kits);IDE(Integrated Development Environment)。

 

2.下列几个C语言表达式是否正确?如果正确,写出它们表达的意思: 
(1) a&b 正确,表示a和b按位与
(2) a&(&b) 正确,a和b的地址按位与

(3) a&&b 正确,表示逻辑与
(4) a**b 正确,第一个*表示乘,第二个*表示指针

 

3.在编程风格中,一般都要强调使用匈牙利命名法,下面是匈牙利命名法中一些公认的前缀,并给出变量名的例子,请写出它们所代表的变量类型: 
前缀 变量名 描述前缀的意义 
g_ g_Lock 全局变量
m_ m_Num 类成员
p pTrack 指针
h hModule 句柄
sz szText 字符串
dw dwMsg DWORD类型

 

4、头文件中ifndef / define / endif 是做什么用的? 
避免重复引入

 

5、代码里有时可以看到extern “C”, 这语句是做什么用的? 

    在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢?  

  C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。  

更详细的解释:http://tech.163.com/06/0118/09/27O66HCC0009159Q.html

 

6、软件开发中说的check out, check in是什么意思? 
源代码管理系统的签入,签出 


7、C语言函数前面加static,和C++类的成员函数前面加static,两者的意义有何区别? 
C的static是限制函数的为编译单元内部使用
C++类的static使函数成为类成员,而不是实例成员。

8、简单描述一下WIN32上 .c / .cpp / .rc / .obj / .res / .lib / .dll / .exe这几个后缀所表示的文件类型,以及他们之间的相互生成关系。如果你是LINUX程序员,前面这个问题答不上,那么请描述一下GCC编译的几个步骤和中间生成文件。 
.c: C代码
.cpp: C++代码

.obj:目标代码(由.c或.cpp编译后产生) 对应gcc编译的.o文件

 


.rc:资源文件                                     
.res:编译后的十进制资源(由.rc编译后产生)                              

上面这两个文件在gcc下好像没有,请高人解答


.exe:可执行程序     一般为程序名,gcc对可执行程序的后缀没有要求
.dll:动态链接库    c动态链接库文件“lib*.so*”

对于静态链接库win32里应该是.lib文件,gcc下应该是.a文件。此外.a文件可以使用ar命令将.o文件包含进来作为静态库文件。

 

 

7月4日 

1、下列程序运行结果

int main()
{
    unsigned
char a=0xA5;
    unsigned
char b=~a>>4;
    printf(
"b=%d/n",b);
   
return 0;
}
1: 整值提升后:000000a5;
2: 取反后    :ffffff5a;
3: 右移4位   :若是算术右移fffffff5; 若是逻辑右移:0ffffff5
4: 但是不论是算术右移和逻辑右移,截断后都为:f5即245


2、基础知识

一个字节1B=8bit,计算机以字节进行编址;一种类型的变量往往占多个字节;计算机一次存取、处理和传输的数据长度称为字,现在大多数计算机都是32位或64位的,也就是字长为32或64.而字长是由什么决定的呢?计算机的字长取决于数据总线的宽度.字长是指计算机内部参与运算的数的位数。它决定着计算机内部寄存器、ALU和数据总线的位数,直接影响着机器的硬件规模和造价。字长直接反映了一台计算机的计算精度,为适应不同的要求及协调运算精度和硬件造价间的关系,大多数计算机均支持变字长运算,即机内可实现半字长、全字长(或单字长)和双倍字长运算。

 

8月10日

今天看了一下关于sizeof的内容,因为指针的大小是4个字节,所以当求*p的sizeof(p)的时候,不管p指向什么值都是4。

int *p;double *q;

sizeof(p)==4;sizeof(q)==4;//指针都是四位
sizeof(*p)==sizeof(int)==4;//int类型占4位,当然,大小还和平台相关
sizeof(*q)==sizeof(double)==8;//double类型占8位