Keep on going, never give up.

C/C++软件类面试题

本文整理跟C/C++软件面试相关的概念或试题,也是C/C++编程中最常遇到的,部分内容为天缘自己写的,部分整理自网络收集(可能部分内容有误,欢迎指出)。为方便阅读,全文精简描述,只述概要。

一、C/C++概念类

1、虚函数的用法和作用,什么函数不能声明为虚函数?

答:constructor函数不能声明为虚函数。

2、写出float x 与“零值”比较的if语句。

答:if(x>0.000001&&x<-0.000001)

3、c++的类和c里面的struct有什么区别?

4、static有什么用途?

  • 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
  • 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
  • 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用

5、引用与指针有什么区别?

  • 引用必须被初始化,指针不必。
  • 引用初始化以后不能被改变,指针可以改变所指的对象。
  • 不存在指向空值的引用,但是存在指向空值的指针。

6、用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。

答:循环链表,用取余操作做

7.不能做switch()的参数类型是:

答:switch的参数整型、枚举类型、字符型,其它都不可以。当然这个限定是有条件。

8、mfc中 cstring是类型安全类么?

答:不是,其它数据类型转换到cstring可以使用cstring的成员函数format来转换

9、函数模板与类模板有什么区别?

答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。

10、C++中为什么用模板类。

  • 可用来创建动态增长和减小的数据结构
  • 它是类型无关的,因此具有很高的可复用性。
  • 它在编译时而不是运行时检查数据类型,保证了类型安全
  • 它是平台无关的,可移植性
  • 可用于基本数据类型

11、csinglelock是干什么的。

答:同步多个线程对一个数据类的同时访问

12、newtextmetric 是什么。

答:物理字体结构,用来设置字体的高宽大小

13、边界对齐问题

14、大端小端问题

答:大端模式——是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端模式——是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中;

示例:0x1234,大端模式存储就是0x34 0x12,小端模式存储就是0x12 0x34,靠前为低地址。

我们常见的x86结构就是小端模式,而KEIL C51则为大端模式,很多ARM、DSP一般都是小端模式,还有的ARM处理器支持大端模式、小端模式可选(硬件设定)。

15、画出OSI的七层网络结构图和 tcp/ip的五层结构图。

16、TCP和UDP区别是什么

17、交换机和路由器各自的实现原理是什么?分别在哪个层次上面实现的?

18、描述实时系统的基本特性

答:在特定时间内完成特定的任务,实时性与可靠性。

19、全局变量和局部变量在内存中是否有区别?

答:全局变量储存在静态数据库,局部变量在堆栈。

20、堆栈溢出一般是由什么原因导致的?

答:没有回收垃圾资源。

21、冒泡排序算法的时间复杂度是什么?

答:时间复杂度是O(n^2)。

22、internet采用哪种网络协议?该协议的主要层次结构?

  • Tcp/Ip协议
  • 主要层次结构为: 应用层/传输层/网络层/数据链路层/物理层。

23、Internet物理地址和IP地址转换采用什么协议?

答:ARP (Address Resolution Protocol)(地址解析協議)

24、IP地址的编码分为哪两个部分?

答:IP地址由两部分组成,网络号和主机号。使用时要和子网掩码按位与后才能区分哪些是网络位哪些是主机位。

25、程序什么时候应该使用线程,什么时候单线程效率高。

  • 耗时的操作使用线程,提高应用程序响应
  • 并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。
  • 多CPU系统中,使用线程提高CPU利用率

26、windows是内核级线程么,linux有内核级线程么。

答:线程通常被定义为一个进程中代码的不同执行路线。从实现方式上划分,线程有两种类型:“用户级线程”和“内核级线程”。 用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。这种线程甚至在象 dos 这样的操作系统中也可实现,但线程的调度需要用户程序完成,这有些类似 windows 3.x 的协作式多任务。另外一种则需要内核的参与,由内核完成线程的调度。其依赖于操作系统核心,由内核的内部需求进行创建和撤销,这两种模型各有其好处和缺点。用户线程不需要额外的内核开支,并且用户态线程的实现方式可以被定制或修改以适应特殊应用的要求,但是当一个线程因 i/o 而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会;而内核线程则没有各个限制,有利于发挥多处理器的并发优势,但却占用了更多的系统开支。
windows nt和os/2支持内核线程。linux 支持内核级的多线程

27、c++中什么数据分配在栈或堆中,new分配数据是在近堆还是远堆中?

答:栈: 存放局部变量,函数调用参数,函数返回值,函数返回地址。由系统管理堆: 程序运行时动态申请,new 和 malloc申请的内存就在堆上

28、使用线程是如何防止出现大的波峰。

答:意思是如何防止同时产生大量的线程,方法是使用线程池,线程池具有可以同时提高调度效率和限制资源使用的好处,线程池中的线程达到最大数时,其他线程就会排队
等候。

29、一般数据库若出现日志满了,会出现什么情况,是否还能使用?
答:只能执行查询等读操作,不能执行更改,备份等写操作,原因是任何写操作都要记录日志。也就是说基本上处于不能使用的状态。

30、sql server是否支持行级锁,有什么好处?
答:支持,设立封锁机制主要是为了对并发操作进行控制,对干扰进行封锁,保证数据的一致性和准确性,行级封锁确保在用户取得被更新的行到该行进行更新这段时间内不被其它用户所修改。因而行级锁即可保证数据的一致性又能提高数据操作的迸发性。

31、sql server是否支持行级锁,有什么好处?

32、如果数据库满了会出现什么情况,是否还能使用?

33、什么是平衡二叉树?

左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1。

二、C/C++试题类

1、int i=10, j=10, k=3; k*=i+j; k最后的值是___

2、进程间通信的方式有__ __ __ __等。

4、运算

struct a {
    char t:4;
    char k:4;
    unsigned short i:8;
    unsigned long m;
}
sizeof(a)=___(不考虑边界对其) 

5、结构体的size

#include <iostream.h>
#pragma pack(8)
struct st1 {
   short a;
   long b;
};
struct st2 {
    char c;
    st1 struct1;
    short e;
};
#pragma pack()

int main(int argc, char* argv[]) {
    st2 exst;
    cout << sizeof(st1) << endl;
    cout << sizeof(st2) << endl;
    cout << (unsigned int)(&exst.struct1) - (unsigned int)(&exst) << endl;
    return 0;
}

输出什么?

备注:

记得还有几种关于指向指针的指针类、虚函数题目,以后再补充。

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.