C++面试之行

前些天去**游戏面试了,可算是往C++这方面发展的第一次出师,之前走Web开发也才出过三次(***数码科技、***邦科技,还有一个在江苏海事学院旁边的工作室忘了叫什么名字了)。

题目差不多都抽网上的经典题,由于题目时上半学期只是稍微思考了一下,既没做笔记,也没敲代码进行彻底的研究。所以靠的基本是基本功了,考完还感觉蛮不错的,可一对比网上给出的答案,功底的距离就跃然纸上了。为了增加功底,吸收教训,特做一次比较:

1.       分别对bool,int ,floor,指针变量与“零值”比较的if语句。(假设变量为var

if( ! var )  if( var!=0 ) if( var ==0 ) if( ! var )

正解if( ! var )  if( var!=0 )  if( (var>= -0.00001) &&(var<=0.0001) ) if( var!=NULL )

注:浮点型变量的计算并不精确,所以不适宜用==!=与数字比较。

2.       Windows NT 环境下32位的C++程序,计算sizeof()的值

Void fun ( char str[10]) { sizeof(str)=? ;} 

Void *p=malloc(100);  sizeof(p)=?

此时的str在函数内作为参数的指针,所以为4,如果在正常语句里(char str[10],sizeof(str)则等于10*1)p为指针,所以也为4(指针占用的内存为4)。

3.#define定义一年的秒数(不考虑闰年),写一个“标准”宏MIN,输入两参数,返回较小的一个。

#define SecondInYear 365*24*60*60    

 (正解:const SecondInYear=365*24*60*60; const常量有数据类型,而宏常量没数据类型,编译器无法对其进行类型安全检查,它只是字符的替代,如果处理不当替代时可能有边际效应,且编译器无法对宏常量进行调试)

#define MIN(a,b) ( (a)>(b)?(b):(a) )    (对变量加括号防止边际效应,句末无逗号)

4.#ifndef

       #define

 #endif   此结构的作用是:防止重复定义。(防止被重复引用

5.headstack的区别;

       只知道stack是栈,就写了栈的特点:先进后出,操作只能在栈顶;head就认为是队列(linear:先进先出,操作位置不固定。

       其实问题的关键是问在内存中的head(堆)和stack(栈)的区别

   (在内存分配上来说  栈是系统提供的内存空间,是有限的,函数的局部变量占用的就是栈空间,函数返回的时候释放栈内存,在程序编译的时候已经分配好;堆是动态分配内存的时候,动态申请的空间,就是在程序运行中可以随时申请.可以用new malloc 来获取,delete  free来释放.

6.链表与数组的区别;

       数组可随已读取,链表只能顺序读取

       (在访问方式上:链表只能顺序读取,而数组可以随机读取;在空间使用上:链表可以随意扩大,而数组则不能)

7.以你玩过的网络游戏为例,分析一下该游戏的“背包系统”;

不了解“背包系统“,就没进行分析;后来上网查找分析了一下;应该属于一个背包形式的数据结构,“背带”着自己游戏过程中的物品,道具等;

8.程序分析(分析程序运行的结果)

       该次考的是关于函数返回类型的区别;无返回值、有返回值,在函数内执行new,而退出时没delete的情况。

9.const的作用(应该也考虑一下static的作用)。

       常量变量:避免某些变量被随意改变。

       函数参数:避免在被调用函数内被改变。

       (a.欲阻止变量被改变,可使用const关键词,在定义时需对其初始化,以后就不能修改它了;

b.在函数声明中,用const修饰形参,表明该参数在函数内部不能被改变;

c.对于类成员函数,若指定其为const,则表明是一常函数,不能修改类的成员函数;

d.对于类的成员函数,有时必须制定气返回类值为const,以确保气返回值不为“左值”)

10.列出变量,说出变量的含义(指针,指针的指针,指针数组,数组指针的考察)

      

11.自定义一strcopy函数,函数形式如下:

char *strcopy(char *strDest,const char *strSrc)

{

While( *strSrc!=’/0’)

       {

strDest+=*strSrc;         //少了对两指针的非0判断assert( (D!=NULL)&&(S!=NULL) )

strSrc++;

}

return strDest;

}

 

后记:过了四五天,才抽时间整理,次序就打乱了。很多题目在《程序员面试宝典》上都有,堪称程序员的《葵花宝典》。题目也很经典,就正如网上的评语“这些题可以考查面试者对程序设计知识的掌握程度是初级、中级还是比较深入,没有一定的知识广度和深度,不可能对这些问题给出全面的解答。

对程序员来说内功,确实很重要,有时间多看看一些经典的题,提高自己的视野,增强实力,不论工作与否!

即使没通过,可让我深切地感受到内功的重要性!

原文发表于:http://dcxj27.blog.163.com/blog/static/2326684020096511643780/

(google收录文章比摆渡快多了)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux C++面试是指针对Linux操作系统下使用C++编程语言进行面试的过程。在面试中,面试官可能会考察面试者对Linux操作系统的了解程度,以及对C++语言的掌握程度和应用能力。面试题目可能涉及Linux系统调用、进程管理、文件系统、网络编程等方面,同时也会考察面试者的算法和数据结构能力。在准备Linux C++面试时,需要对Linux操作系统和C++编程语言有深入的了解,并且需要多做练习和实践,提高自己的编程能力和解决问题的能力。 ### 回答2: Linux C 作为编程语言,已经成为计算机科学领域必备的技能之一。而要在 Linux C 面试中取得成功,需要拥有以下几个方面的能力: 1. 深入理解 C 语言:Linux C 面试中,需要运用 C 语言编写各种类型的代码,如控制结构、循环、数组处理、指针等。自然而然要有深入理解 C 语言的能力,包括它的基本语法、数据类型、函数等。 2. 熟悉 Linux 操作系统:Linux C 是在 Linux 操作系统上运行的,所以在 Linux C 面试中必须对 Linux 操作系统有深入的了解。这个了解可以包括:Linux 文件系统、进程管理、权限管理、网络协议、Shell 编程基础等。这些知识不仅能显示出你的基本理解,也是帮助你在 Linux C 编写过程中调试常见错误和优化代码的关键。 3. 熟悉常见算法、数据结构:对于需要处理大量数据的 Linux C 项目来说,熟悉常见的算法和数据结构是非常重要的。有足够的实践经验能帮助你对这些知识点进行应用和优化。 4. 熟悉编程工具和开发环境:熟练掌握编程工具和开发环境可以大大提高编写代码的速度和效率。常见的 Linux C 编写工具包括:GCC、Make、GDB、Valgrind、Vim 等,熟练使用这些工具及其选项,可以快速定位问题、修改代码并最大限度地提高代码的质量。 总体来说,Linux C 面试需要你对 C 语言和 Linux 操作系统有深入的理解和熟悉,在业务领域涉足简单的算法和数据结构,以及熟练掌握常用的开发工具等等。 ### 回答3: Linux是一种广泛用于服务器和嵌入式设备的开源操作系统。C语言是Linux操作系统中应用程序开发的首选语言之一。因此,在Linux相关岗位的面试中,Linux C的基础知识和应用能力都会成为考察的重点。下面分别从知识储备和实际技能两个方面进行回答。 一、知识储备 1. C语言基础知识:面向对象特性,变量声明、定义、初始化、作用域和存储类别等基础知识。 2. Linux操作系统基础知识:文件系统、进程、文件描述符等常见概念,以及Linux命令行基础使用等。 3. Linux环境编程:理解Linux下的编程模型、系统调用、进程通信、线程和多线程编程、信号处理、文件I/O等。 4. 熟悉Linux下的常用开发工具和调试方法:例如gcc编译器、Makefile的使用、GDB调试器等。 5. 熟悉Linux下常用的网络编程开发:例如socket编程、TCP/IP协议、Http协议等。 二、实际技能 1. 实现基础程序:能够使用编程语言实现一些常见程序,例如hello world等。 2. 编写Linux应用程序:能够掌握Linux环境下的编程模型、系统调用、进程通信、文件I/O等技能,编写Linux环境下的应用程序。 3. 常见命令的使用:能够熟练使用常见命令行工具,例如grep、awk、sed、awk。能够灵活应用shell脚本,快速处理文本文件和操作文件系统。 4. 熟练掌握Linux下的常用开发工具和调试手段:例如gcc编译器、Makefile的使用、GDB调试器等。 5. 熟练掌握Linux下的常用网络编程开发:例如socket编程、TCP/IP协议、Http协议等。掌握HTTP协议和套接字编程等相关技术,能够实现网络应用程序的开发调试和部署等。 总之,在Linux C面试中,除了掌握相关的知识储备外,还需要能够证明自己的实际技能。因此,在准备Linux C面试的过程中,需要注重实践,在不断的实践中加深自己的理解和掌握能力,提高自己的实际能力和水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值