《程序员面试宝典》精华 编程语言部分

《程序员面试宝典》精华 编程语言部分

  • 正所谓取其精华,去其糟粕。本文谨记录下《程序员面试宝典》一些关键的知识点、易错点,对于一些虽然重要但书中没有解释清楚的地方不做记录。当然这里的糟粕只是指不那么重要,或者比较简单,并不是说书写的不好。希望以后回顾时无需再看此书,只看保留在文中的精华即可。
  • 文中有少许bug,亦摘录在此。
  • 本文专注编程语言部分,包括第五章到第九章的内容

第五章 语言细节

  • 5.1 y =
    z = 5
    ,等号先计算右边,返回值是赋值后的左边的变量值
  • 5.1 printf函数中的表达式从右向左压栈,应该先计算右方的值
  • 5.4 float型1.0f在内存中表示为:0x3f 80 00 00
  • 5.5 出现int常数的表达式中的变量通常都要提升至int型
  • 5.5 赋值运算符默认从右向左结合,也就是先计算右方的值
  • 5.5 (x&y) + ((x^y)>>1)效果是取二者的平均数
  • 5.6 不用判断和switch语句求a、b中的较大的一个:((a + b) + abs(a - b)) / 2
  • 5.7 extern
    "C"
    的用法:函数声明前添加,解决C/C++编译器的名字包装的不同问题

第六章 预处理、const和sizeof

  • 6.1 求结构体中某成员的偏移量:#define
    FIND(struc, e) (size_t)&(((struc *)0)->e)
  • 6.2 C语言中,const
    n = 10; char carray[n]
    是错误的,因为C编译器不能把const看成编译期的常量。但实验得出是正确的,bug
  • 6.3 C++中给类成员变量添加mutable修饰符,就可以使用const函数修改
  • 6.3 结构体对齐原则:结构体长度一定是最长数据元素整数倍,但如果大于处理器位数,则以处理器位数为对齐单位。CPU数据对齐原则是数据的内存地址必须是该数据长度的整数倍,以提高运行速度
  • 6.3 sizeof(string) == 4
  • 6.3 空类以及(多重)继承的空类大小都为1,但虚继承的类含有虚表指针,大小为4

第七章 指针与引用

  • 7.1 指针与引用的区别

    • 引用总是非空的,指针可能为空,使用时要小心测试
    • 引用不可以指向另一个对象,但指针可以更改
  • 7.1 int
    *p; *p = 0;
    是错误的,指针p并未指向某个实际的地址
  • 7.2 char
    a[] = "a"
    数组存放中栈中,函数返回即消失,char *a = "a"数组存放于全局只读数据段
  • 7.2 若类B继承类A,两者皆有成员变量,A中有f方法,则B
    b; b.f()
    调用的是A中的f,f使用的变量也为A中的变量
  • 7.3 指向const的指针应该是const
    int *
    ,bug
  • 7.3 int
    ( *(*f)(int, int) )(int)
    定义了一个函数指针,接收两个int参数,返回值为一个函数指针
  • 7.4 指向整型数组的指针声明为:int
    (*p) []
    ,指向整型的指针数组声明为:int *p[],函数指针的数组的声明:int
    (*p[10])(int)
  • 7.5 悬浮指针指的是delete之后的指针,应该让指针等于0,使得后续程序使用此悬浮指针出错是可控的。比如第二次delete
  • 7.5 new/delete与malloc/free的区别
    • 前者是运算符,后者是函数
    • 前者除了后者申请与释放动态内存的工作之外,对于非内置类型,还完成类初始化与析构操作
  • 7.6 autoptr中拷贝时会尝试只保留一份指针,因此不适合放在容器中

第九章 STL模板与容器

  • 9.1 如果没有重载拷贝构造函数为深拷贝,而又包含指针,那么调用拷贝构造函数时会复制指针,造成同一个指针 delete多次

  

  

转载请注明作者:Focustc,博客地址为http://blog.csdn.net/caozhk,原文链接为点击打开

  

  

《程序员面试宝典》精华 编程语言部分,布布扣,bubuko.com

时间: 2024-12-30 00:49:05

《程序员面试宝典》精华 编程语言部分的相关文章

《Java程序员面试宝典》学习笔记(基本语法部分)

这是我学习欧立奇<Java程序员面试宝典>第三版的笔记.这篇是基本语法部分. ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象. 在Java中,字符只以一种形式存在,那就是Unicode.在JVM内部一切都由Unicode表示,而输出到外部后(JVM和OS的交界处就是各种输入/输出流)转换为其他形式的编码. Java用了中间缓存变量的机制,所以,j=j++可换成如下写法: te

《JAVA 程序员面试宝典(第四版)》读书笔记之前言

工作五年了一直在小的软件公司混,总感觉自己的专业知识没有太大的提升.当然了中间也换了一两家公司,面试的公司就很多家,总感觉正规的软件公司(无论大小)对于基础知识的考核都非常重视,而不管你说你之前服务过什么NB公司,做过什么样NB的项目,上来就先拿一份基础的题目来考核你看一下你的水平.一开始我是排斥的,总感觉考这些东西没有什么用,反正有的东西工作中不一定就用得到,只要自己能够做出东西来就可以了.问题来了怎么样子才算“做出东西”呢?这个问题总感觉很难从理论上来回答,就拿我这几年工作的事情来说吧,在这

C#与.NET程序员面试宝典

题目虽然有点多,但是都是最常见的面试题.如果大家准备参加相关的面试,最好看看.尤其最后的几十个跨国公司面试题.现在国内很多企业都开始学习这套方式,来为难大家.有准备,就容易成功. 即使大家今年不打算找工作,也可以作为一个水平考察,看看自己到底可以应对多少. 面试题1  介绍ASP.NET 答:asp.net是建立在通用语言运行库的程序架构,通过asp.net可以开发出非常强大的Web应用程序. 面试题2  介绍ASP.NET和ASP的区别 答:1.ASP.NET支持预编译. 2.ASP.NET拥

C#与.NET程序员面试宝典 Day2

15年底,似乎陷入了困境,老婆上个月工资没发,小房的房租也没收到,我的工资也没发,全都拖着...而且元旦离职后,新的工作还没着落...上次介绍的工作机会只回复了已转人事,春节后可能有个项目会要人...总不能在家等一个月吧,问他能不能先面试,如果通过了,等一个月是可以:如果没通过,也好找工作.还没后续消息... 今天下班碰到一老一少两个女的在电梯口,说是要买4楼的同户型房,是网上看到的司法拍卖,但明天要出差,能不能到我家看一下户型... 刚开始我很犹豫,因为回小区时顺便看了下家里的灯,家里人出去了

《Java程序员面试宝典》5.2.3——中间缓存变量机制

看到第三版中5.2的例题4,一开始只是简单地接受中间缓存变量的机制,例题如下: public class Test { public static void main(String[] args) { int j = 0; for (int i = 0; i < 100; i++) { j = j++; } System.out.println(j); } } 上述结果为0.解释如下: 1. temp=j; 2. j=j+1; 3. j=temp; 看到例题5里的题:int j = 0; j =

JAVA程序员面试宝典总结-谈谈我的理解吧

2014年9月7日 今天开启阅读了这本书,中断了原计划中算法中级层次的系统性训练,我觉得先看看面试题吧.先给这本书A掉再说. 阅读了一天,大概阅读了一半,有点失望,因为这本书讲解的面试都是基础中的基础,我看着都着急,作者很难深入系统层次的去谈论技术,都是一些表面的文章. 不过我给大家整理了一些比较细节的东西. 第五章开始吧: ----------------------------------------------------- classLoader知识. 整体调用用到的是父类委托.为什么这

《Java程序员面试宝典》学习笔记(数据结构部分)

有一千万行重复的短信,以文本文件的形式保存,一行一条,有重复.如何找出重复次数最多的10条? 可以用哈希表的方法对1千万条分成若干组进行边扫描边建散列表.第一次扫描,取首字节,尾字节,中间随便两字节作为Hash Code,插入到hash table中.并记录其地址和信息长度和重复次数,1千万条信息,记录这几个信息还放得下.同Hash Code且等长就疑似相同,比较一下.相同记录只加1次进hash table,但将重复次数加1.一次扫描以后,已经记录各自的重复次数,进行第二次hash table的

《Java程序员面试宝典》读书笔记1

今天读书发现一个很有趣的问题 请问以下程序会输出什么? public   class   Test2   {  public   static   void   main(String[]   args)   {  int   j   =   0;  for   (int   i   =   0;   i   <   100;   i++)   {  j   =   j++;  }  System.out.println(j);  }  } 输出的结果是:0 刚看到的时候觉得很不可思议,我选的答

C#与.NET程序员面试宝典 Day1

这本书还是比较有针对性的,这几天也找不到什么方向,看一下这本书,并随手记录下一些要点吧 第2章是一些.NET框架的概念,平时没有深入接触,只能半通不通的看一下. 第3章 1.C#预定义的引用类型有两个:Object和String 2.值类型:继承自System.ValueType,不可作为基类,分配栈上,作用域结束后自动释放 3.引用类型:可继承,分配托管堆上,由GC回收 4.C#中指针类型不继承Object,并且指针类型与Object之间不存在转换,装箱和拆箱也不支持指针.指针要使用fixed