程序员面试宝典及攻略(精选7篇)

程序员面试宝典及攻略

       英文名:BEST PRACTICE FOR PROGRAMMER INTERVIEW

       (小沈阳:我的中文名字是 小沈阳,英文名字是 Xiao Shen Yang)

       烂的原因

       这本书的目的是赚钱,完全不是为了提高大家的面试笔试水平,所以出现下面的情况,也是理所当然的了:首先,这本书名字起的好,营销也做的好,否则不会这么流行;可惜内容不好,属于有能力没道德类型的坏人,能力越大,破坏越大。其次,这本书基本上是以一种应对考试的方式来应对找工作的笔试和面试,刚刚从学校出来的同学们正是考试的好手,如果还以这种心态来应对笔试面试后果是很不妙的。最后,这本书当中讲解的东西大部分基础简单的内容都是对的,比较高级的内容偏偏是错的,属于隐蔽的很深的坏人,倒霉了还不知道是谁干的,最坏。

       这本书我随便翻了翻,几乎气死,哪里有这样介绍东西的?自己都是一知半解,就来编制宝典,真个是以己之昏昏明人之昭昭啊。还忽悠那么多刚刚或者即将步出校门的同学从微薄的生活费里挤出三十九块钱买来上当。编书的赚到钱了,同学们找不到工作他们可不管本来我也不用管,可是我的女朋友也在找工作,也买了这本烂书(可以吃多少个排骨啊!),我就不能不管了!

       下面,我会把这本书当中的错误、混乱、语无伦次、蒙混过关之处,只选择我随便翻翻出来的一小部分罗列出来,让大家看看这本书的真面目是如何的烂。这并不是说这本书就只有我列出来的这些问题,还有更多我看到了没有写(没功夫,也不想把他们教聪明了),更多更多的是我没发现的。另外,我个人只对C/C /STL有深入的认识,所以,我也只对这方面揭批一下,请对其他方面精通的好同志在其他地方揭批其他方面,也请精通C/C /STL的好同志对我的错误不吝赐教。

       烂的方面

       对短文的心思多?)

       6.4 内联函数和宏定义,在这一个小节当中的问题如下:

       首先,这个小节的写作态度不认真水平很马虎:这个小节大概是在网上搜了搜关于inline和宏就写完了,所以只是语无伦次的介绍了基本概念,但是没有涉及任何高级特性他们绝对不是为了避免读者无法理解而不涉及高级特性的,而是他们自己不懂,否则的话,我不相信这帮人会不抓紧卖弄一下自己的“学识”。如果你想知道这个小节有多垃圾,就去看看msdn上关于inline的介绍,或者TPCL当中对inline的介绍就可以了。

       其次,罗嗦得语无伦次且不着重点:内联函数和宏定义的区别,大概只要几句话就可以说清楚,这本书用了几段话反而说糊涂了,而且最重要的一句话,没说(参见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-

       原 价:39.80元

       当当网最低价格:29.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;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

       何为“事务处理”,谈谈你对它的理解。事务处理是指一个单元的工作,这些工作要么全做,要么全部不做。作为一个逻辑单元,必须具备四个属性:自动性、一致性、独立性和持久性。自动性是指事务必须是一个自动的单元工作,要么执行全部数据的修改,要么全部数据的修改都不执行。一致性是指当事务完成时,必须使所有数据都具有一致的状态。在关系型数据库中,所有的规则必须应用到事务的修改上,以便维护所有数据的完整性。所有的内部数据结构,在事务结束之后,必须保证正确。独立性是指并行事务的修改必须与其他并行事务的修改相互独立。一个事务看到的数据要么是另外一个事务修改这些事务之前的状态,要么是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 程序员面试宝典]

篇6:程序员面试宝典java

       map,set,list,等JAVA中集合解析(了解)

       在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父子关系:

       java.util

        Collection 这个接口extends自 --java.lang.Iterable接口

        List 接口

       -ArrayList 类

       -LinkedList 类

       -Vector 类 此类是实现同步的

        Queue 接口

        不常用,在此不表.

        Set 接口

        SortedSet 接口

       -TreeSet 类

       -HashSet

        Map 接口

       -HashMap 类 (除了不同步和允许使用 null 键/值之外,与 Hashtable 大致相同.)

       -Hashtable 类 此类是实现同步的,不允许使用 null 键值

        SortedMap 接口

       -TreeMap 类

       以下对众多接口和类的简单说明:首先不能不先说一下数组(Array)

       一、Array , Arrays

       Java所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。

       1、

       效率高,但容量固定且无法动态改变。

       array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量。

       2、Java中有一个Arrays类,专门用来操作array。

       arrays中拥有一组static函数,

       equals:比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。

       fill():将值填入array中。

       sort():用来对array进行排序。

       binarySearch():在排好序的array中寻找元素。

       System.arraycopy():array的复制。

       二、Collection , Map

       若撰写程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。

       1、Collection 和 Map 的区别

       容器内每个为之所存储的元素个数不同。

       Collection类型者,每个位置只有一个元素。

       Map类型者,持有 key-value pair,像个小型数据库。

       2、Java2容器类类库的用途是“保存对象”,它分为两类,各自旗下的子类关系

       Collection

       --List:将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。

       --ArrayList / LinkedList / Vector

       --Set : 不能含有重复的元素

       --HashSet /TreeSet

       Map

       --HashMap

       --HashTable

       --TreeMap

       Map----一组成对的“键值对”对象,即其元素是成对的对象,最典型的应用就是数据字典,并且还有其它广泛的应用。另外,Map可以返回其所有键组成的Set和其所有值组成的Collection,或其键值对组成的Set,并且还可以像数组一样扩展多维Map,只要让Map中键值对的每个“值”是一个Map即可。

       Collection下 1.迭代器

       迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

       Java中的Iterator功能比较简单,并且只能单向移动:

       (1) 使用方法iterator()要求容器返回一个Iterator。7:java程序员面试宝典

       有一种说法是面试时交流的过程其实就是一个和人打交道的过程。那么,想成为一个java程序员,在面试之前,想一下你所面对的人即HR,和他做一次心灵上的交流,对自己也会有心态上和能力上的提升。

       java程序员面试宝典--把自己当作英语天才

       面试题目全部为英文,而且涉及到的知识面极广,一般来说,只有重点大学中品学兼优的在校学生才能搞定,不过鄙人以为大多数这样的人都去读研了。这样的题目通常出现在注册资产在一亿以上的公司,他们要是成长性好的员工,这是无可厚非的事情。不过他们认为工作了一年以上的程序员也能轻松搞定,至少有部分人能搞。所以当你踌躇满志的去应聘之前,请看看你的实力如何(过六级或者四级680分以上,专业课平均分80以上者可以一试)。

       java程序员面试宝典--把自己视为java语言的高手

       现在网上流行的大公司面试题可能有些人已经看过了,我用java将近两年了,自认为资质不弱常人,但那样的题目拿到手之后的感觉就是憋气。很多地方只是有个模糊的概念,回答不完全,查阅资料之后方能答上。或许我的基础还有些薄弱,不过当我试着以试题上的题目与面试我的人“讨论”时发现,他知道的也就是这一题的答案而已。

       java程序员面试宝典--把自己当作编译器

       考试题目大都是一些读程序写结果,或者找错误之类的,不过很多都是编译特例,如果给你个IDE,你肯定是轻松搞定,但你没有那样的机会,回答不出来说明你实际操作经验不足(别人就那么认为的)。虽然这也的确是程序员应该掌握的东西,但是这样似乎有些以偏概全了。平时忙着做项目,有空的时候学习新技术,谁会有那种闲夫去研究java原来可以这样运行的。

       java程序员面试宝典--一些经验的东西对面试很重要

       一份十页的卷子,他只需要看一两分钟就ok了,然后过来和你谈。询问的主要是过去做过什么项目,当然你说的越多越好(不能太夸张)。这样的面试一般是经理或者老板出马,因为你回答的东西他们看不懂,所以就懒得看了。如果你做过项目,那么适当的,含蓄的夸张点你所做过的东西,态度要好,同时要求的工资不能太高,市场价就可以了。对于那些没有工作经验或者经验较少的人,我只能报以深切的同情。不过如果你基础好,糊弄这样的老板应该没有什么问题。

       总结:建议读者面试时不能自吹自擂,也不能心虚胆怯,要实实在在,一是一,二是二,把自己的优势和劣势都陈述出来,让考官定夺。当然,要多说优势少说劣势,但绝不能只说优势不说劣势,有人就是因为每次面试都主动述说一两条自己的劣势赢得考官的好感而面试成功的。