程序员面试宝典 csdn(精选5篇)由网友“黏豆包殿下”投稿提供,下面是小编整理过的程序员面试宝典 csdn,欢迎大家阅读分享借鉴,欢迎大家分享。
篇1:程序员面试宝典 csdn
1. What will be the output of the following C code?
#include
int main(int argc, char* argv[]) { int b=3;
int arr[] = {6, 7, 8, 9, 10}; int *ptr = arr; *(ptr++) += 123;
printf(“%d, %d ”, *ptr, *(++ptr)); return 0;
}
2. 下面程序的结果是多少?
#include
int main(int argc, char* argv[]) { unsigned char a = 0xA5; unsigned char b = ~a>>4; printf(“b = %d ”, b); return 0; }
3. 下面程序的结果是:
#include
int main(int argc, char* argv[]) { unsigned int a = 0xFFFFFFF7; unsigned char i = (unsigned char)a; char * b = (char *)&a; printf(“%08x, %08x ”, i, *b);
return 0;
}
4. 用一个表达式,判断一个数X是否为2的N次方(2,4,8,…),不可用循
环语句。
5. 下面程序的结果是:
#include#includeusing namespace std; int main(int argc, char* argv[]) { int count = 0; int m = 9999; while(m){ count++; m = m & (m - 1);
}
cout << count << endl; return 0;
}
6. 不用判断语句,找出两个数中比较大的。 7. 如何将a、b的值交互,且不用任何中间变量。
8. 在C++程序中调用被C编译器编译后的函数,为什么要加extern “C”? 9. 头文件中的ifndef/define/endif的作用? #pragma once的作用? 10. 结构体内存对齐问题。 11. 以下代码的输出是?
char var[10]; int test(char var[]){
return sizeof(var); }
12. 写出下面程序的运行结果。
int a[3]; a[0] = 0; a[1] = 1; a[2] = 2; int *p, *q; p = a; q = &a[2];
cout << a[q - p] << endl;
13. 解释下面这段代码:
int (*a)[10]; a++;
14. 以下程序的输出是: int a[] = {1, 2, 3, 4, 5}; int *ptr = (int *)(&a + 1); cout << *(a+1) << endl;
cout << *(ptr - 1) << endl;
15. 什么是智能指针?
16. Please write out the program output.
#include#include#define LOOP 1000
int main(int argc, char* argv[]){ int rgnC = 0;
srand((unsigned int)time(NULL)); for (int i=0; i
if (x*x + y*y < RAND_MAX * RAND_MAX)
rgnC++;
}
printf(“%d ”, rgnC);
return 0;
}17. 下面程序的输出结果是:
#include#includeusing namespace std; class Base{ private: int m_i;
int m_j;
public: Base(int i):m_j(i), m_i(m_j){ } Base:m_j(0), m_i(m_j){ } int GetI(){ return m_i; }
int GetJ(){ return m_j; }
};
int main(int argc, char* argv[]){ Base base(98);
cout << base.GetI() << endl << base.GetJ() << endl;
return 0;
}
18. 请讲述Heap与Stack的差别。
19. 写一个字符串拷贝函数strcpy;为什么strcpy的返回值类型为char *。 20. 如何判断一个单向链表是否有环路?
21. 写出判断ABCD四个表达式的是否正确,若正确, 写出经过表达式中 a的
值。 int a = 4;
(A)a += (a++); (B) a += (++a) (C) (a++) += a; (D) (++a) += (a++); 22. 下面程序的输出为:
union{ int i;
char x[2];
}a;
int main(int argc, char* argv[]){ a.x[0] = 10; a.x[1] = 1; printf(“%d ”,a.i); return 0;
}
1. 8,8 提示:C中的printf计算参数时是从右到做压栈的。
2. 245 提示:>>的优先级高于~,计算过程中,先将unsigned char转换为int,
计算完后再转换为unsigned char。问题:为什么加括号不起作用。 3. 000000f7,fffffff7。
4. !(X&(X-1)) 提示:2、4、8、16这样的数转换成二进制是10、100、1000、
10000。如果X减1后与X做与运算,答案若是0,则X是2的N次方。 5. 8 提示:把m转换为二进制,输出为这个二进制中1的个数。 6. int max = ((a + b) + abs(a - b)) / 2 7. a = a ^ b;
b = a ^ b; a = a ^ b; 8. C++支持重载,C不支持重载。函数被C++编译后在库中的名字与C语言不
同。C++提供了C连接交换指定符号extern “C”解决名字匹配问题。 9. 防止头文件被重复引用。 10. 见文章:结构体内存对齐。 11. 4 因为var[]等价于*var,已经退化成一个指针了,所以大小是4。
12. 2。
13. 本题定义了一个指针指向一个含有10个int元素的数组。a++表示指针向后
移动1*sizeof(数组大小),即移动40个字节。 14. 2 5
数组名本身就是指针,再加个&,就变成了双指针,这里的双指针就是二维数组。
15. 智能指针是存储指向动态分配(堆)对象指针的类。除了能够在适当的时间自
动删除指向的对象外,它们的工作机制很像C++的内置指针。智能指针在面
对异常的时候格外有用,因为它们能够确保正确地销毁动态分配的对象。它们可以用于跟踪被多用户共享的动态分配对象。
[程序员面试宝典 csdn]
篇2:程序员面试宝典
程序员面试宝典
对于即将成为程序员的应届生,首先需要考虑的是如何选择一个适合自己职业起步的公司,以及根据自己感兴趣的技术确立自己将来的职业方向,对于已经身为程序员的跳槽人员,则需要考虑继续走技术方向还是转型到管理、销售等方面。在求职面试过程中需要什么流程以及需要注意什么细节?
针对初级C/C++工程师职位
所谓的初级C/C++工程师,也就是刚刚踏入C/C++开发领域的初学者,或者说是有过很短经历的C/C++开发者。针对这个职位,下面将会介绍这个职位所需要掌握的知识体系。
面向对象的知识: C++是一个面向对象的开发语言,因此熟悉面向对象对学习C++很有必要。读者要了解:什么是对象、什么是类、什么是封装、什么是多态、什么是继承、什么是抽象类、什么是接口等。读者不但要了解概念,还需要知道这些概念是如何体现的。例如,类和对象有什么区别?类是如何封装的?
C/C++语法:如果读者已经有了开发经验,那对于学习C/C++语法来讲比较容易,
如果你有C++等面向对象语言的'开发经验,那么只需简单的翻看介绍C/C++的相关书籍。如果你是新手,那么就好好研究一本有关C/C++初级教程之类的书。学习了C/C++语法,加上面向对象的知识,相信读者可以写出来比较好的C/C++代码。如果再抽出时间熟悉一下C/C++编程规范,那么代码的水平就会比较正规了。
数据库知识:作为一名初级C++开发工程师,必须要清楚如何使用数据库进行一些简单的开发工作,这是一些应用软件开发的基础。
开发工具:读者都知道,开发工具可以帮助更好更快地开发,因此熟悉几种开发工具很有必要。目前C/C++的开发工具比较流行的有Turbo C和Visual C++ 6.0等。
掌握了以上的知识,另外再加上少许的开发经验,就可以称得上是一名基本合格的初级C/C++开发工程师。所有招聘公司对于初级程序员的要求并不高,但基础知识一定要扎实,如果你连开发工具都不会使用,那如何能迅速提高学习水平呢?
针对中、高级C/C++开发工程师职位
所谓的中、高级C/C++开发工程师,也就是有了几年的开发经验和实战经验的开发人员。针对这个职位,
篇3:程序员面试宝典
作 者:欧立奇,刘洋,段韬编
出 版 社:电子工业出版社 时 间:-11-1
原 价:39.80元
当当网最低价格:29.90元
卓越网最低价格:元
去当当网免费阅读,购买本书
程序员面试宝典(第二版) 欧立奇,刘洋,段韬编内容简介:
本书是《程序员面试宝典》的第二版,在保留第一版的数据结构、面向对象、程序设计等主干的基础上,使用各大IT公司及相关企业-的最新面试题替换和补充原内容,以反映自第一版以来近2年的时间所发生的变化。
本书取材于各大公司面试真题(笔试、口试、电话面试、英语面试,以及逻辑测试和智商测试),详细分析了应聘程序员(含网络、测试等)职位的常见考点。本书不仅对传统的C系语言考点做了详尽解说,还根据外企出题最新特点,新增加了对友元、Static、图形/音频、树、栈、ERP等问题的深入讲解。最后本书着力讲述了如何进行英语面试和电话面试,并对求职中签约、毁约的注意事项及群体面试进行了解析。本书的面试题除了有详细解析和回答外,对相关知识点还有扩展说明。希望真正做到由点成线,举一反三,对读者从求职就业到提升计算机专业知识都有显著帮助。
本书适合计算机相关专业应届毕业生阅读,也适合作为正在应聘软件行业的相关就业人员和计算机爱好者的参考书。
当当网用户妮妮90:
感觉书的质量不是很好,小的印刷错误也不少不过书的内容还是不错的
当当网用户玛莉梦菲:
不知道是配送问题,还是别的,新书上都有扎的洞了,质量太不行了
当当网用户落英缓缓:
不过这本书定位挺高的,面试题很丰富!
这篇文章希望能解决程序员面试宝典(第二版)写得好不好,读者读后感怎么样,网上哪里有卖,最低价格是多少钱,网上免费阅读地址,值不值得买等问题。
[程序员面试宝典]
篇4:程序员面试宝典bolg
托普集团程序员面试试
一、选择题(每题1分,共20分)1.下列那种语言是面向对象的(C)
A. C B. PASCAL C. C++ D. FORTRAN77
2.在 Windows9x 下,可以进入 MS-D0S 方式。当在 DOS 提示符下键入 ( B ) 命令后,系统将退出 MS-DOS方式,返回到 WIndows 方式。 A. CLOSE B. EXIT C. QUIT D. RETURN
3.下面哪些是面向对象的基本特性:( ABC)A 多态 B 继承 C 封装 D 接口
4.在C++中经常要进行异常处理,下面哪些是异常处理常用到的关键词:(ABC)
A try B catch C throw D break E contiue
5.数据库技术中的“脏数据',是指(C)的数据。A.错误B.回返C.未提交D.未提交的随后又被撤消
6.TCP/IP是一种(A,B)A.标准 B.协议 C.语言 D.算法
7. 下面有关计算机操作系统的叙述中,不正确的是(B ) A 操作系统属于系统软件 B 操作系统只负责管理内存储器,而不管理外存储器 C UNIX 是一种操作系统 D 计算机的处理器、内存等硬件资源也由操作系统管理
8.微机上操作系统的作用是( D) A 解释执行源程序 B 编译源程序
C 进行编码转换 D 控制和管理系统资源
9.下列存储器中存取速度最快的是( A) A 内存 B 硬盘 C 光盘 D 软盘
10.在计算机中,―个字节是由多少个二进制位组成的(B ) A. 4 B. 8 C. 16 D. 24
11. 存储16×16点阵的一个汉字信息,需要的字节数为( A )A 32 B 64 C 128 D 256
12. 以下选项中合法的字符常量是(BC)A.“B” B. '10' C. 68 D. D
13. 假定x和y为double型,则表达式x=2,y=x+3/2的值是(D)A. 3.500000 B. 3 C. 2.000000 D. 3.000000
14. 以下合法的赋值语句是(BCD)//In C++ ,choice D also is correct, but in C language, D is wrong.
A. x=y=100 B. d--; C. x+y; D. c=int(a+b);
15. 设正x、y均为整型变量,且x=10 y=3,则以下语句pprintf(“%d,%d ”,x--,--y); 的输出结果是(D)
A.10,3 B. 9,3 C. 9,2 D.10,2
16. x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是(B)
A .INPUT x、y、z; B. scanf(“%d%d%d”,&x,&y,&z);C. scanf(“%d%d%d”,x,y,z); D. read(“%d%d%d”,&x,&y,&z);
17.以下数组定义中不正确的是(D)A) int a[2][3]; B) int b[][3]={0,1,2,3};C) int c[100][100]={0}; D) int d[3][]={{1,2},{1,2,3},{1,2,3,4}};
18. 以下程序的输出结果是(A)main{ int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};
printf(“%d%d%d%d ”,a[0][3],a[1][2],a[2][1],a[3][0];
}A) 0650 B) 1470 C) 5430 D) 输出值不定
19 以下程序的输出结果是(B)main(){char st[20]= “hello \”;printf(%d %d “,strlen(st),sizeof(st));
}A) 9 9 B) 5 20 C) 13 20 D) 20 20
20. 当调用Windows API函数InvalidateRect,将会产生什么消息(A)A:WM_PAINT B:WM_CREATE C:WM_NCHITTEST D:WM_SETFOCUS
二、填空题(每题3分,共30分)
1.请列举当前一些当前流行的数据库引擎,SQL SERVER,ORACLE,BDE,Microsoft Jet。
2.为了将当前盘当前目录中的所有文本文件(扩展名为.TXT)的内容打印输出,正确的单条DOS命令为COPY *.TXT PRN。
3. 计算机网络分为局域网和广域网,因特网属于广域网。
4. 设y是int型变量,请写出判断y为奇效的关系表达y%2!=0。
5. 设有以下程序:main(){ int n1,n2;scanf(”%d“,&n2);while(n2!=0){ n1=n2%10;n2=n2/10;printf(”%d“,n1);}}
程序运行后,如果从键盘上输入1298;则输出结果为8921。
6.以下程序运行后的输出结果是:9876 876
main(){ char s[ ]=”9876“,*p;for ( p=s ; p
7.以下函数的功能是:求x的y次方,请填空。double fun( double x, int y){ int i;double z;for(i=1, z=x; i
8.以下程序段打开文件后,先利用fseek函数将文件位置指针定位在文件末尾,然后调用ftell函数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。FILE *myf; long f1;myf= fopen (”test.t“,”rb“);
fseek(myf,0,SEEK_END); f1=ftell(myf);fclose(myf);printf(”%d “,f1);
9. 以下程序输出的最后一个值是120。
int ff(int n){ static int f=l;f=f*n;return f;}main(){ int i;for(I=1;I<=5;I++ printf(”%d “,ff(i));)
10. 以下程序运行后的输出结果是52 main(){ int i=10, j=0;do{ j=j+i; i--;while(i>2);printf(”%d ",j);}
三、判断题(每题2分,共20分)
1:动态链结库不能静态调用。 错误
2:UDP是面向无连接的网络连接 正确
3:ASP是一种数据库引擎 错误
4:队列是先进后出。 错误
5:Weblogic是分布式应用服务器。 正确
6:TCP,UDP都是传输层的协议。 正确
7: 两个线程不能共存于同一地址空间 错误
8: JAVA是一种跨平台的开发工具 正确
9.在WINDOWS操作系统中对外设是以文件的方式进行管理 正确
10. 虚拟内存实际是创建在硬盘上的 正确
四、问答题(每题10分,共30分)
1.写出从数据库表Custom中查询No、Name、Num1、Num2并将Name以姓名显示、计算出的和以总和显示的SQL。SELECT No , Name AS ‘姓名’ ,Num1 ,Num2,(Num1+Num2) AS ‘总和’
FROM Custom
何为“事务处理”,谈谈你对它的理解。事务处理是指一个单元的工作,这些工作要么全做,要么全部不做。作为一个逻辑单元,必须具备四个属性:自动性、一致性、独立性和持久性。自动性是指事务必须是一个自动的单元工作,要么执行全部数据的修改,要么全部数据的修改都不执行。一致性是指当事务完成时,必须使所有数据都具有一致的状态。在关系型数据库中,所有的规则必须应用到事务的修改上,以便维护所有数据的完整性。所有的内部数据结构,在事务结束之后,必须保证正确。独立性是指并行事务的修改必须与其他并行事务的修改相互独立。一个事务看到的数据要么是另外一个事务修改这些事务之前的状态,要么是第二个事务已经修改完成的数据,但是这个事务不能看到正在修改的数据。
3. 常用的数据结构有哪些?请枚举一些。(不少于5个)链表、堆栈、二叉树、队列、图、堆,集合。
4. 什么是OOP?什么是类?请对比类和对象实例之间的关系。OOP是Object_oriented Programming(面向对象编程)的缩写。这主要是为了区别于以前的面向过程的程序设计!指的是用对象的观点来组织与构建系统,它综合了功能抽象和数据抽象,这样可以减少数据之间的耦合性和代码的出错几率。使用面向对象编程技术可以使得软件开发者按照现实世界里人们思考问题的模式编写代码,可以让软件开发者更好地利用代码直接表达现实中存在的对象,将问题空间直接映射到解空间!类:即class 在面向对象的程序设计中,专门用“类”来表示用户定义的抽象数据类型(user_defined abstract type)。它将具有相同状态、操作和访问机制的多个对象进行了抽象。类具有继承、数据隐藏和多态三种主要特性。利用类的这三种特性可以更好地表示现实世界中事物。类是同一类对象实例的共性的抽象,对象是类的实例化。对象通常作为计算机模拟思维,表示真实世界的抽象,一个对象就像一个软件模块,可以为用户提供一系列的服务---可以改变对象的状态、测试、传递消息等。类定义了对象的实现细节或数据结构。类是静态的,对象是动态的,对象可以看作是运行中的类。类负责产生对象,可以将类当成生产对象的工厂(Object factory).
篇5:c++程序员面试宝典
试题1:
void test1()
{
char string[10];
char* str1 = “0123456789″;
strcpy( string, str1 );
}
试题2:
void test2()
{
char string[10], str1[10];
int i;
for(i=0; i<10; i++)
{
str1[i] = ’a’;
}
strcpy( string, str1 );
}
试题3:
void test3(char* str1)
{
char string[10];
if( strlen( str1 ) <= 10 )
{
strcpy( string, str1 );
}
}
解答:
试题1字符串str1需要11个字节才能存放下(包括末尾的’’),而string只有10个字节的空间,strcpy会导致数组越界;
对试题2,如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者指出strcpy(string,
str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10
分;
对试题3,if(strlen(str1) <= 10)应改为if(strlen(str1) <
10),因为strlen的结果未统计’’所占用的1个字节。
剖析:
考查对基本功的掌握:
(1)字符串以’’结尾;
(2)对数组越界把握的敏感度;
(3)库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:
2分
void strcpy( char *strDest, char *strSrc )
{
while( (*strDest++ = * strSrc++) != ‘’ );
}
4分
void strcpy( char *strDest, const char *strSrc )
//将源字符串加const,表明其为输入参数,加2分
{
while( (*strDest++ = * strSrc++) != ‘’ );
}
7分
void strcpy(char *strDest, const char *strSrc)
{
//对源地址和目的地址加非0断言,加3分
assert( (strDest != NULL) && (strSrc != NULL) );
while( (*strDest++ = * strSrc++) != ‘’ );
}
10分
//为了实现链式操作,将目的地址返回,加3分!
char * strcpy( char *strDest, const char *strSrc )
{
assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘’ );
return address;
}
从2分到10分的几个答案我们可以清楚的看到,小小的strcpy竟然暗藏着这么多玄机,真不是盖的!需要多么扎实的基本功才能写一个完美的strcpy啊!
(4)对strlen的掌握,它没有包括字符串末尾的’’。
读者看了不同分值的strcpy版本,应该也可以写出一个10分的strlen函数了,完美的版本为:
int strlen( const char *str ) //输入参数const
{
assert( strt != NULL ); //断言字符串地址非0
int len;
while( (*str++) != ’’ )
{
len++;
}
return len;
}
试题4:
void GetMemory( char *p )
{
p = (char *) malloc( 100 );
}
void Test( void )
{
char *str = NULL;
GetMemory( str );
strcpy( str, “hello world” );
printf( str );
}
试题5:
char *GetMemory( void )
{
char p[] = “hello world”;
return p;
}
void Test( void )
{
char *str = NULL;
str = GetMemory();
printf( str );
}
试题6:
void GetMemory( char **p, int num )
{
*p = (char *) malloc( num );
}
void Test( void )
{
char *str = NULL;
GetMemory( &str, 100 );
strcpy( str, “hello” );
printf( str );
}
试题7:
void Test( void )
{
char *str = (char *) malloc( 100 );
strcpy( str, “hello” );
free( str );
… //省略的其它语句
}
解答:
试题4传入中GetMemory( char *p
)函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完
char *str = NULL;
GetMemory( str );
后的str仍然为NULL;
试题5中
char p[] = “hello world”;
return p;
的p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。这是许多程序员常犯的错误,其根源在于不理解变量的生存期。
试题6的GetMemory避免了试题4的问题,传入GetMemory的参数为字符串指针的指针,但是在GetMemory中执行申请内存及赋值语句
*p = (char *) malloc( num );
后未判断内存是否申请成功,应加上:
if ( *p == NULL )
{
…//进行申请内存失败处理
}
试题7存在与试题6同样的问题,在执行
char *str = (char *) malloc(100);
后未进行内存是否申请成功的判断;另外,在free(str)后未置str为空,导致可能变成一个“野”指针,应加上:
str = NULL;
试题6的Test函数中也未对malloc的内存进行释放。
剖析:
试题4~7考查面试者对内存操作的理解程度,基本功扎实的面试者一般都能正确的回答其中50~60的错误。但是要完全解答正确,却也绝非易事。
对内存操作的考查主要集中在:
(1)指针的理解;
(2)变量的生存期及作用范围;
(3)良好的动态内存申请和释放习惯。
再看看下面的一段程序有什么错误:
swap( int* p1,int* p2 )
{
int *p;
*p = *p1;
*p1 = *p2;
*p2 = *p;
}
在swap函数中,p是一个“野”指针,有可能指向系统区,导致程序运行的崩溃。在VC++中DEBUG运行时提示错误“Access
Violation”。该程序应该改为:
swap( int* p1,int* p2 )
{
int p;
p = *p1;
*p1 = *p2;
*p2 = p;
}
[c++程序员面试宝典]
★ 电气工程师面试题
★ 阿里 社招 面试
★ 南京嘉环笔试题
★ 看穿面试这件事儿
【程序员面试宝典 csdn(精选5篇)】相关文章:
被骗了作文400字2023-08-19
星座成“80后”面试“宝典”2022-10-09
面试自我介绍宝典2023-12-15
软件工程实习报告2023-10-21
年轻不应该是这样心情随笔2022-05-07
唉,我被骗了作文2023-12-03
软件工程专业实习报告怎么写2022-06-09
java程序员面试葵花宝典2023-05-31
如何面试技术人员2023-06-28
团队建设感悟(18):如何引进开发方式2023-12-30