阿里内推电话面试一面小结



1.请介绍一下自己


2.你做过哪些项目?为啥要做这个项目?能详细介绍一下吗?  

       问你做这个多长时间

       你为啥要做这个

      还有问了一个问题,就是注释转换中,如果有

                              #if   0

                              //liusenlin1

/*liusenlin2*/

                             #endif

像这种你的开发工具能进行转换吗,本来是注释,你也要转换吗?

我就说:注释中的嵌套,像这种都是可以转化成统一的C或C++注释,

他说:这最好不要转化,保持原样,我说并不影响代码编译,

我一想,我是应聘的,不应该提出质疑,就说,我会在状态机下,增加一个状态,进行再优化下 ,谢老师指点

总共问了两个项目。


第二个项目问了网络知识,也相对基础知识                                                          

3.你这个项目核心是什么?用到什么算法



4.因为在介绍项目的时候,我提到了多线程,就直接问了进程与线程   的区别? 


       因为当时睡午觉,大概3点多,就打电话了,真的有点蒙,所以当时就回答了3 点,现总结如下:  

    1.进程是系统进行资源(io、内存空间、磁盘等)分配基本单位. 线程是进程的一个实体,

        是CPU调度和分派的基本单位      

    2. 进程有独立的虚拟地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,

        线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉

     ,所以多进程的程序要比多线程的程序健壮    

   3.    但在进程切换时,耗费资源较大,效率要差一些,线程执行开销小,但不利于资源的管理和保护  

  补充:

   4.   一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程  

   5. 线程的划分尺度小于进程,使得多线程程序的并发性高,系统的吞吐量    更大。  

   6.逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配  


5.因为当时回答提到虚拟内存空间和调度算法,他就问虚拟内存是什么?swap算法是什么?堆内存是如何分配的?

虚拟内存其实是现代操作系统而言的,解决了以前直接直接使用物理内存不足的问题,当一个进程创建完成后,他就会在内存中分配一段虚拟内存空间,从高地址到低地址依次是:栈,堆、静态区、文本常量区、代码区

栈:局部变量

堆:动态内存分配,C语言用malloc()  C++ 中用new      

静态区里有:全局的变量  ,包括初始化和未初始化的,还有static的全局,局部变量

               .data段 (初始化数据段,在磁盘上)  .bss段(未初始化数据段,由exec函数加载程序是清零,它未在磁

                盘上)

文本常量区:只读状态,不许更改   ,如字符串常量  ,const 定义的常量

代码段:就是预处理、编译、汇编、链接完成后的可执行二进制代码


swap算法:

         其实当时没想到。关键他说swap没听懂,后来在知道是,页面替换算法,就是物理内存和虚拟内存是映射关

         系,当虚拟内存使用不够,或一个程序不属于常驻内存,就应暂时将他置换出去,


         1. 最佳置换算法OPT:它将不再使用的页面换出

         2.FIFO置换算法:按照页面装进内存的时间进行置换,越老的页面最先被换出,不管该页面是否经常使用,这样就有可能导致缺页率增加,导致

             页面置换次数增加。

         3.最少使用页面置换算法:按照上次使用时间进行排序,将离上次使用时间最长的页面换出,可以采用栈的数据结构,每次页面被访问将该页面

             号放在栈顶

         4.最近未使用页面置换算法:设置引用位R,每次调用将R=1,系统每个一段时间将R=0,当进行置换式检查哪个页面为零说明近期不会再使

            用,可以将其换出。

         5.时钟页面置换算法:采用应用为R,当R=1说明被引用过,这种方法是FIFO的改进,根据装入内存时间和是否被引用过作为标准,首先从时间

             最长项检查,若R=0则置换出,若为1则检查下一项并将R=0。若全部R=1,则按照FIFO方法进行置换


堆内存的分配:堆是向高地址增长的,由程序员进行申请释放,C 中是malloc()函数申请free()释放,C++是new申请,delete释放。

6.由于上次回答问题提到.bss .data  段  ,所以他问全局变量定义初始化和不初始化有什么不同,为什么将他们分开设计,而不直接都在.data段中?

          解答:

            1.未初始化的全局变量在.bss段,初始化的全局变量在.data段。由于.bss段是在程序加载到内存,编译器进行清0,所以在编译、汇编阶段是不存在数据的,即就是不在

             磁盘上,不占空间,这样可执行的二进制代码体积就小好多,   .data是占磁盘空间的。       

             2.可执行代码的体积小,加载内存所需时间更短。

当我说完,他问还有吗?

     我当时是在想不到了,整的尴尬,电话一直等我,知道现在我还找不到其他原因


下面这几个问题我回答最菜


7.你最擅长的领域是啥?你认为自己的优势在哪?



8.你平时学习转态是咋样的?


9.你申请的是阿里妈妈,为什么要选它?你的期望是啥?


10.你还有什么问题没有?


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值