我人生的第一次电话面试

  今天早上9点接到了阿里巴巴的电话面试,本来以为完全没有希望的事情,突然来了个小惊喜,所以一不小心就激动了,人家问我是不是方便接电话的时候,我毅然决然的回答了方便,结果由于毫无准备,回答的一塌糊涂。虽然觉得自己是菜鸟,但是也不应该回答得这么差劲,终于了解到自己的知识有多么的不扎实了,以前学东西都是浮在表面的,以后一定要认认真真、踏踏实实的去学习任何一门知识。

  这是我有生以来的第一次电话面试,也是有生以来的第一次的比较正式的工作面试(虽然前段时间参加过腾讯的面试,但是由于某些原因有面得很水),这次面试对我来说应该是有着非凡的意义吧!

  首先,我很感谢今天的这位考官,他说话非常的温和,一直在鼓励我,在我不会的时候也是循循善诱。以至虽然我整体下来答得很不好,但是对这次面试却留下了非常好的印象,也对阿里巴巴留下了很好的印象。弄得我现在特别想去阿里巴巴工作,我想这里一定有非常好的企业文化吧!

 

  说了这么多的废话了,接下来,说说今天的面试都面了些什么吧。(有很多都记不清了)

1、  刚开始他问我熟悉什么语言,熟不熟悉C++?

      我回答的是:不熟悉;他说那也应该了解些吧,然后接着就问我new和malloc的区别?

(下面是从网上找的解释)

  a) malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。 

  b) 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。 

  c) 因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。

  d) C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存

  • new 是个操作符,和什么"+","-","="...有一样的地位,malloc是个分配内存的函数,供你调用的。
  • new是保留字,不需要头文件支持,malloc需要头文件库函数支持。
  • new 建立的是一个对象,malloc分配的是一块内存。
  • new建立的对象你可以把它当成一个普通的对象,用成员函数访问,不要直接访问它的地址空间,malloc分配的是一块内存区域,就用指针访问好了,而且还可以在里面移动指针。

简而言之:

new是一个操作符,可以重载 ,malloc是一个函数,可以覆盖;

new初始化对象,调用对象的构造函数,对应的delete调用相应的析构函数,malloc仅仅分配内存,free仅仅回收内存;

进一步详解见《new/delete 和malloc/free 的区别(综合转帖)》。

2、  接着问了我系统中堆和栈的区别(不是数据结构中的)

关键点:

栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

详细介绍见“堆与栈的区别【收藏】”。

 

3、  可执行程序在系统中是怎么执行的?就是.exe文件的执行过程

     我们都知道 ExE文件是一个可执行文件,而且这也是Windows下最为常见的可执行文件,比如安装包。

     EXE File 可执行程序 一种可在操作系统存储空间中浮动定位的可执行程序。MS-DOS和MS-WINDOWS下,此类文件扩展名为.exe   WINDOWS操作系统中的二进制可执行文件,可执行文件分两种一种是后辍名为.COM另一种就是.EXE 了。.COM一般用于DOS,在WINDOWS系统中的执行文件一般都是.EXE文件 。

     Exe文件的执行过程如下:

1)    shell调用CreateProcess函数来激活.exe文件。

2)    系统禅城一个“进程核心对象”,并且其计数值为1,该值是系统删除进程核心对象的依据。

3)    系统为此进程建立一个4GB的地址空间

4)    加载器将必要的文件加载到上述的地址空间中,包括.exe的程序、数据、以及所需要的动态链接库

5)    系统创建一个线程,我们称之为主线程。

6)    系统调用startup   code

7)    startup code 调用.exe 程序的入口函数WinMain

8)    exe文件开始执行

9)    用户关闭程序窗口,使winmain 中的消息循环结束,使得winmain函数结束。

10)  回到Startup code

11)  回到系统调用exitProcess 结束进程。

 

4、  线程的同步:临界区、互斥区、事件、信号量四种方式

5、  进程间通信:进程,信号,管道,消息队列,信号量,共享内存

  让给出一个进程通信的数据结构:进程控制块(当时居然没有想起来,脑袋秀逗了吧!!!)

6、  函数的调用过程:

  • 每一个进程在用户态对应一个调用栈结构(call stack)
  • 程序中每一个未完成运行的函数对应一个栈帧(stack frame),栈帧中保存函数局部变量、传递给被调函数的参数等信息
  • 栈底对应高地址,栈顶对应低地址,栈由内存高地址向低地址生长
  • 更详细的解释还有待查找整理

7、  系统函数的调用:系统函数主要是在核心态,用中断即可,传递的是函数的系统调用编号,内核为每个系统调用分配了一个唯一编号。

8、  平衡二叉树用在哪些方面:(想不起来他当时说的是什么了)二分查找么?红黑树?

9、  有向图和无向图的区别:有方向,无方向;有向图用于哪些方面:优先级队列,偏序集

10、OSI七层模型(物理层,数据链路层,网络层,传输层,会话层,表示层,应用层);socket在哪层?(应用层)

  后面还问了下我对Android,手机编程等什么的了解不,还有java,我都说不了解,然后就是问了下我干了些什么,是在学校是偏重于理论研究还是工程项目,以及项目规模和参与人数等等。

 

  还有什么我就真的记不住了,最后还是非常感谢这位面试官认真细致的态度,我看出了他是想尽量的多了解我,希望能找到可以让我通过的点,但是,我让他失望了,没有一个回答得比较好的,真的是万分抱歉~~~但是我会再接再厉的,接下来的日子里一定努力学习专业知识,提高专业素养!

  加油!Never give up!

PS:我笔试的时候报的职位是“系统工程师”

Dpfl

2013年6月4日星期二 21:12

转载于:https://www.cnblogs.com/dpflnevergiveup/archive/2013/06/04/3117946.html

猜你喜欢

转载自blog.csdn.net/weixin_34013044/article/details/93268158