• 【读书笔记】程序员面试笔记


    第二部分 面试笔试技术篇

    第10章 C++程序设计基础 (2018年11月6日阅读)

    10.1 程序的编译和执行

    小结:无 图10.1

    【面试题1】简述 #include<> 和 #include"" 的区别

    #include<> 直接从编译器指定的路径出搜索;
    #include "" 首先在程序当前目录中进行搜索,然后再从编译器指定的路径处搜索;

    【面试题2】简述 # 和 ## 在 define 中的作用

    宏定义中的#运算符将其后面的参数转换成字符串;
    宏定义中的##运算符将前后的参数进行字符串连接;

    【面试题3】简述 assert 断言的概念

    assert 用于在程序的DEBUG版本中检测条件表达式,如果结果为假,则输出诊断信息并且终止程序运行。
    assert其实是一个带参数的宏,并非一个函数,可以在 assert.h 里面找到定义.
    一个好的编程习惯是在调试结束之后,在 #include 语句之前插入 #define NODEBUG 禁用 assert 宏。
    最好在每个 assert 里面只检测一个条件。
    不要在 assert 里面更改变量值,因为assert 只在DEBUG版本里起作用,使用了 RELEASE版本,所有的 assert 都会被忽略。
    对外接口的参数检查不要用assert,要用 if 。因为 assert 是为了捕获哪些可控的不该发生的情况,接口使用者的入参对接口开发人员不可控。

    10.2 变量

    小结: C++在变量命名的时候要求变量中只能包含字母,数字和下划线,并且第一个字符只能是字母或者下划线。

    (0)全局变量:在函数内部定义的变量称为局部变量,只在函数内部可见;在函数外部定义的变量叫做全局变量。

    (1)extern 变量:如果把全局变量声明在头文件中,并且用 extern 关键字修饰,作用是将变量导出,表示在任何通过 #include 包含该头文件的文件中都可以使用这个变量。

    (2)static 变量:分成「静态局部变量」和「静态全局变量」。静态局部变量作用域是函数内部,但是生存期是整个程序的生命周期。静态全局变量 = 静态变量 + 全局变量

    (3)const 变量:直接在头文件中声明和定义,多个源文件引用该头文件不会造成重复定义的问题

    【面试题1】简述 i++ 和 ++i 的区别。

    i++和++i 的区别:i++ 是先赋值后加一,++i 是先加一再赋值。

    不同编译器会有不同的处理。比如 VS 和 GCC。比如说, 写出下面代码执行后 i,j,m,n 的值:

    int i = 10, j = 10;
    int m = (i++) + (i++) + (i++);
    int n = (++j) + (++j) + (++j);

    解答:在VS 2005的编译器中,首先 j 会自增 3次,j 先变成 13, 然后计算 13 + 13 + 13 = 39; 在GCC 编译器中,只要有两个完整的操作数,就会立即执行加法操作,也就是说, ++j 在执行两次之后,已经准备好了两个操作数,此时 j = 12,这个时候会做第一次加法运算,结果是 24,然后和第三次 ++j 的结果 13 又做了一次加法,所以答案是 12 + 12 + 13 = 37;

    vs2005: i = 13, j = 13, m =30, n = 39
    GCC: i = 13, j = 13, m = 30, n = 37

    【面试题2】 简述C++的类型转换操作符

    一共有四种:static_cast, dynamic_cast, const_cast, reinterpret_cast

    (1) static_cast:

    (2) dynamic_cast:

    (3) const_cast:

    (4) reinterpret_cast:

    【面试题3】简述静态全局变量的概念

    10.3 条件语句和循环语句

    小结:无知识点,都会了

    【面试题1】不使用 break 的 switch 语句

    【面试题2】for 循环的三要素

    【面试题3】巧妙打印乘法口诀表

    10.4 宏定义和内联

    小结:

    【面试题1】简述内联函数与宏定义的区别

    【面试题2】宏定义的宏展开错误

    【面试题3】内联函数的常识性问题

    10.5 sizeof 的使用

    小结:

    【面试题1】不能用 sizeof 计算的表达式

    【面试题2】sizeof 计算结构体时的内存对齐问题

    【面试题3】结构体嵌套时的 sizeof 运算

    10.6 内存分配

    小结:

    【面试题1】malloc 和 free 的常识性问题

    【面试题2】返回一个 64 整数倍的内存地址

    【面试题3】简述 malloc/free 和 new/delete 的区别

    【面试题4】简述 delete 和 delete[] 的区别

    10.7 位运算

    小结:

    【面试题1】不使用临时变量交换两个数

    【面试题2】计算二进制中 1 的个数

    【面试题3】将二进制数倒数第 M 位的前 N 位取反

    【面试题4】找出人群中唯一的单身狗 (剑指offer 原题)

    【面试题5】找出人群中三个单身狗中的任意一个 (剑指offer 原题的类似题)

    10.8 main函数

    小结:

    【面试题1】简述 main 函数执行前后都发生了什么

    第11章 指针和引用

    11.1 指针及其应用

    11.2 指针常量和常量指针

    11.3 指针数组和数组指针

    11.4 指向指针的指针

    11.5 函数指针

    11.6 this指针

    11.7 空指针与野指针

    11.8 引用

    第12章 内存管理

    12.1 堆内存与栈内存

    12.2 内存泄露

    12.3 内存越界

    第13章 字符串

    第14章 面向对象

    第15章 模板与泛型编程

    第22章 操作系统·数据库·计算机网络

  • 相关阅读:
    宿舍局域网的应用
    宿舍无线局域网的组建
    宿舍局域网与Internet连接
    宿舍有线局域网的组建
    设置Windows 远程协助与远程桌面
    家庭局域网接入Internet
    组建Windows家庭组
    OpenGL3D迷宫场景设计
    [Cacti] cacti监控mongodb性能实战
    (视频)《高速创建站点》 4.2 完结篇 – 应用运营vs.发射卫星,遥測(Telemetry) 技术
  • 原文地址:https://www.cnblogs.com/zhangwanying/p/9915258.html
Copyright © 2020-2023  润新知