面试题总结之C/C++/MISC

时间:2022-03-17 00:26:03

C

C pointer,指向数据结构与指向char的指针有区别吗

  它们正做+1运算时产生的位移不同

分配在堆的内存与分配在堆栈的内存有什么不同

  分配在堆的内存要手动去释放

C structure,数据结构里有inter,char,float时,数据的内存布局会是怎样

  数据会以4位或是8位,16位等等方式对齐

为什么会有这种对齐

  这是因为机器寻址就是按照这种方式进行的,这样可以一次而不是多次读取一定数据

strcpy,使用strcpy需注意什么,为什么,有什么更安全的函数

  注意源字符串是是以‘\0'结束的,strcpy就是拷到源字符串中‘\0'才结束,可能使用strncpy来替换。

函数指针,什么是函数指针,有什么用处

  函数指针是指向函数的指针,最大的用处是做回调函数,可以做接口函数,就像系统中断中的中断处理函数

设计一个函数,函数中有一段功能是对相关数据的结理,但具体的处理方式是不定的。

  将不定的处理方式设定成一个外部传来函数指针。(可以设计成这样 func(int a,int b,某种函数指针) )

关键字static的作用是什么?

  在C语言中,关键字static有三个明显的作用:
  1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
  2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
  3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
  大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。

解释堆和栈的区别。

线程与进程的区别

#include “filename.h”和#include <filename.h>的区别

  #include “filename.h”是指编译器将从当前工作目录上开始查找此文件

  #include <filename.h>是指编译器将从标准库目录中开始查找此文件

size_t_百度百科

  http://baike.baidu.com/link?url=sh8RRfasW1QG-PhcWPZhfcZ75Uw-KYLKh443jzpNg36hVk1Fu7WeTh4lEPLCuBx_iT0wglX5MRQUqXJMWV-oUK

C++

异常,异常的功能

  保证异常的健壮性,结构化处理出错信息

C++模板

  简化对类似函数的设计,比如要设计两个函数 abs(int a), abs(float a),就可以用模板去设计一个函数就可以了

C++虚拟机制

  用来实现多态

要在C++ 防止对象被复制,有什么方法

  将复制构造函数变成私有函数

抽象类能被实例化吗

  不能,只能继承抽象类,实现抽象类的函数

函数对象功能

  可以用作类似C里的回调函数,也可以用作函数功能的组合

Virtual:虚函数:派生类可以覆盖掉的函数,纯虚函数:只是个空函数,没有函数实现体。

编写类String的构造函数、析构函数、拷贝构造函数和赋值函数。

动态/静态链接库区别

  • 动态链接库:在运行时加载
  • 静态链接库:在编译时直接联到可执行文件中
  • 动态链接库和静态链接库的区别
    • http://blog.csdn.net/gamecreating/article/details/5504152
    • http://blog.sina.com.cn/s/blog_61ba4898010153zu.html

STL MAP内部实现的数据结构

  • vector封装数组,list封装了链表,map和 set封装了二叉树
  • C++ STL中的:map,multimap,multiset都应用了红黑树

指针和引用的初始化区别

RAII

  • RAII_百度百科
    • http://baike.baidu.com/link?url=cZ_EqWVrbxk9AIOFJ-9IrYDMRVaeEtubQlI-JKvquwrTkm9clZshXDLN9WM1Kth0W98ADgTckgMMEAwmQ3gZDq
  • 对象所有资源 (RAII)
    • https://msdn.microsoft.com/zh-cn/library/hh438480.aspx

RTII

  • RTTI事指运行时类型识别(Run-time type identification)在只有一个指向基类的指针或引用时确定一个对象的准确类型。

什么是拷贝构造函数?

  • 它是单个参数的构造函数,其参数是与它同属一类的对象的(常)引用;类定义中,如果未提供自己的拷贝构造函数,C++提供一个默认拷贝构造函数,该默认拷贝构造函数完成一个成员到一个成员的拷贝

什么是深浅拷贝?

  • 浅拷贝是创建了一个对象用一个现成的对象初始化它的时候只是复制了成员(简单赋值)而没有拷贝分配给成员的资源(如给其指针变量成员分配了动态内存); 深拷贝是当一个对象创建时,如果分配了资源,就需要定义自己的拷贝构造函数,使之不但拷贝成员也拷贝分配给它的资源

智能指针

  • 智能指针_百度百科
    • http://baike.baidu.com/link?url=-4Fxt6pJdzfT54y9W-fRgMxlSYiedMOkLOxNlQf67rz_wHTOhIvtESgw6s8sEdgGMy2PxyNj0VUNe_IpaSBnbK
  • 智能指针(现代 C++)
    • https://msdn.microsoft.com/zh-cn/library/hh279674.aspx
  • Smart pointer - Wikipedia, the free encyclopedia
    • https://en.wikipedia.org/wiki/Smart_pointer
  • 智能指针:从std::auto_ptr到std::unique_ptr - hanhuili的专栏 - 博客频道 - CSDN.NET
    • http://blog.csdn.net/hanhuili/article/details/8299912

delete数组指针,只delete第一个后果

  野指针

volatile

  • volatile_百度百科
    •   http://baike.baidu.com/link?url=gPm-SmXKapujjcPjO3COGYDPSvH4VPOMabuV61XG7kM1kMhwX1AnNxF5_VZDiq7fizEaEfpYKLRBVgRt99BxOK
  • volatile (C++)
    •   https://msdn.microsoft.com/zh-cn/library/12a04hfd.aspx

MISC(trouble-shooting, 调试, 设计模式,算法和数据结构,数学 ...)

用C语言,将一个数字乘以7倍的效率最快的方法是什么?

链表, 如何最快地找出一个单向链表的中间结点?

怎样用最快的方法判断链表是否有环?

mutex

semophore

TCP/IP

C++如何实现JAVA接口

  java接口_百度百科

    http://baike.baidu.com/link?url=hoPdmBnxPUNPpyCRPD80NQVbOPS0qT5IoI1jezWUDT4Dz0MdgaVrPEurjtacqy6rJRZxO0CrQCNqDn5czUriNK

程序crash如何定位检测

内存泄露定位/监测

GDB

  gdb_百度百科

    http://baike.baidu.com/link?url=qzDVNAB5igtON9p7hw4Ybwu5hELcvElenqb9X-hINKukyB-6lG0Al-VJ2Vxjm7PwFBJmiZVwZCYJ2V-alB_WLa

设计模式

  设计模式(即使代码编制真正工程化)_百度百科

    http://baike.baidu.com/link?url=QoxZgqaX0LcWjUC9bYsOC8jLwWf3HpljeCuDoqxL4MYIWnWqzdtWlIhyVhe6npPk8zL-pcoQP5oq4HImZKspt9Da3R7d3cEkrsVgwqVmAKu

单体如何避免多个instance?

  构造时指向一块内存保证惟一性。static

估算2^24

  2^10 = 1024 ~ 10^3

  2^24 ~ 2^4 * 10^3 * 10^3 ~ 16 * 10^6