面试笔试中的一些知识点

1、new/delete、 malloc/free

内存泄漏是指堆内存(heap memory)的泄漏(memory leak)。堆内存指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显式释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配内存,使用完后,程序必须负责相应的调用free或delete释放该内存,否则,这块内存就不能被再次使用,即这块内存泄漏了。 malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。 


2、哈希表(散列表)
http://blog.csdn.net/chenhuajie123/article/details/9210529

3、内存分配
a、栈区(stack)

向下生长,由编译器自动分配释放 ,存放函数的参数值,局部变量的值等,内存的分配是连续的,类似于平时我们所说的栈,如果还不清楚,那么就把它想成数组,它的内存分配是连续分配的,即,所分配的内存是在一块连续的内存区域内.当我们声明变量时,那么编译器会自动接着当前栈区的结尾来分配内存.

b、堆区(heap)
向上生长(从低地址开始存放),一般由程序员分配释放, 若程序员不释放,程序结束时可能由操作系统回收.类似于链表,在内存中的分布不是连续的,它们是不同区域的内存块通过指针链接起来的.一旦某一节点从链中断开,我们要人为的把所断开的节点从内存中释放.

c、全局/静态存储区(static)
全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后由系统释放

d、只读区

存放程序和常量,比如const int a = 2;    char *p = "abc"; 这里的a和“abc”都存放在可读写区。





4、指针以及相关问题

指针是存放地址的变量。指针所占的存储空间和操作系统有关,32位操作系统占4个字节,64位操作系统占8个字节。

例题:64位系统上定义的变量int* a[2][3]占据 2*3*8 个字节

&运算符

在C语言中有两种含义:1、位操作符,表示‘位与’;2、取地址运算符,比如int a = 10,*p = &a;

在C++中除了上述两种含义外还有一种含义:引用,比如int a, &b = a;//a和b等价,共享一个存储空间,a,b的值同时变化。

常量指针和指针常量

常量指针:指针所指向的对象只能被读取,而指针本生的值可以修改,比如:int a,b;   

const int *p = &a;   p = &b;

指针常量:不能修改指针本生的值,但可以修改指针所指向的对象的值,比如int a = 10;

Int * const p = &a; *p = 20;

常量

常量是不能修改的,存放在内存的只读区,入如const int a = 10; char *p = "abc";这里的a和字符串abc都是常量,只能读,不能修改。

函数指针和指针函数

函数指针也是一个指针变量,它指向函数的入口地址。
int (*f)(int a, int b); // 声明函数指针, 函数指针定义为一个指向一个返回值为整型,有两个参数并且两个参数的类型都是整型的函数。

指针函数是一个函数,这个函数的返回值是一个指针。

int *f(int a, int b);  //指针函数声明,该函数有两个整形参数,返回值是一个指针



5、HTTP 状态码

找不到该页面:404

禁止访问:403

内部服务器访问:500

服务器繁忙:503


6、构造函数与虚构函数

a、当派生类中不含对象成员(类的某个成员是对象)时 
在创建派生类对象时,构造函数的执行 顺序是:基类的构造函数→派生类的构造函数;

在撤消派生类对象时,析构函数的执行 顺序是:派生类的构造函数→基类构造函数。

b、当派生类中含有对象成员时 
在定义派生类对象时,构造函数的执行顺序:基类的构造函数→对象成员的构造函数→派生类的构造函数;

在撤消派生类对象时,析构函数的执行顺序:派生类的构造函数→对象成员的构造函数→基类的构造函数。


7、进程的状态以及转化

进程的三种基本状态

进程在运行中不断地改变其运行状态。通常,一个运行进程必须具有以下三种基本状态。

a 、就绪(Ready)状态

    当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。

b 、执行(Running)状态
当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。

c、 阻塞(Blocked)状态(即等待状态)

正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。

进程三种状态间的转换

一个进程在运行期间,不断地从一种状态转换到另一种状态,它可以多次处于就绪状态和执行状态,也可以多次处于阻塞状态。 

(1) 就绪→执行

处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。

(2) 执行→就绪 
    处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完而不得不让出处理机,于是进程从执行状态转变成就绪状    态。

(3) 执行→阻塞

正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。

(4) 阻塞→就绪
  处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。

例题:进程进入等待状态有哪几种方式?(D)

A CPU调度给优先级更高的线程    //运行到等待
  B 阻塞的线程获得资源或者信号//等待到就绪
  C 在时间片轮转的情况下,如果时间片到了//运行到就绪
  D 获得spinlock未果 //运行到等待


5、类的基本知识点

1、封装性

类包含成员数据和成员函数,一般将成员数据定义成私有,外部代码通过公有的成员函数对其访问,成员函数相当于提供了访问成员数据的一个接口,从而实现了对成员数据的封装。

注意:私有成员函数只可以被该类的成员函数访问

      保护成员只可以被基类或者是派生类的成员函数访问

  公有成员可以通过申请对象进行访问

2、继承性

3、多态性——一个接口,多中方法

基类指针能够指向它派生出来的派生类是实现C++多态性的关键。

运行时的多态性通过虚函数和继承一起来实现。

虚函数:在基类中定义为virtual函数,在派生类中可以重新定义。

多态类:有虚函数的基类,或者是继承有虚函数的基类的派生类。

纯虚函数:在基类中没定义,在派生类中一定要定义的函数。

抽象类:含有纯虚函数的类(不能声明对象,但可以声明指针)








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值