IBM面试后的一点小总结

写下这篇文字,是为了记录自己面试后得到的一些教训,记录一些当时没有回答好的或者不懂的问题


昨天下午去了IBM面试,面的是 Z/VM 组

这个组是在内核的基础上用汇编开发虚拟操作系统的,所以主要感兴趣点在于操作系统、底层、编译原理等知识上面,对于算法、数据结构倒是关注的比较少

我平时最有准备的知识方面在于算法和数据结构,操作系统方面的就看了书上的一些基本知识,还有之前看过的一点linux内核方面的一点知识,开始硬着头皮进行一个多小时

的技术面试

由于我的项目是在.net平台下进行开发的,面试官刚开始就问了我对于.net平台的理解,微软为什么要做.net平台?

(刚开始并没有对这个问题进行较好的回答,现在回想起来,上网找了一些资料,进行稍微正统一点的回答)

.NET是微软的新一代技术平台,为现在的各种商务活动构建互联互通的应用系统,这些系统是有统一标准的和联通的,

一个.NET应用是一个使用.NET Framework类库来编写,并运行于公共语言运行时Common Language Runtime之上的应用程序

特别注意:如果一个应用程序跟.NET Framework无关,它就不能叫做.NET程序,比如,仅仅使用了XML并不就是.NET应用,仅仅使用SOAP SDK调用一个Web Service也不是.NET应用。

.NET是基于Windows操作系统运行的操作平台,应用于互联网的分布式。


这个问题之后,面试官开始问操作系统方面的知识,对于操作系统这门课,你学到了什么,对于进程你有怎样的理解,说了一些关于进程的知识,开始深入到了CPU如何运行的,CPU的组成,这个当时我只简单的回答了调度,现在查找一些资料,整理一下答案

CPU一般由逻辑运算单元、控制单元和存储单元组成。在逻辑运算和控制单元中包括一些寄存器,这些寄存器用于CPU在处理数据过程中数据的暂时保存。


对于  内存分配的一些问题,malloc函数怎样实现分配?如果malloc要求分配的内存为1g,那是分配物理内存还是分配虚拟内存,如果内存不够怎么办?

Malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。所以malloc返回分配的内存地址后,要强制进行类型转换

int* p;p = (int *) malloc (sizeof(int)*128);//分配128个(可根据实际需要替换该数值)整型存储单元,并将这128个连续的整型存储单元的首地址存储到 指针变量p中
double *pd=(double *) malloc (sizeof(double)*12);//分配12个double型存储单元,并将首地址存储到 指针变量 pd中
malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。
malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。如果无法获得符合要求的内存块,malloc函数会返回NULL指针,因此在调用malloc动态申请内存块时,一定要进行返回值的判断。
了解了这样一些基础知识之后,那么可以对上面这个问题进行回答了,malloc返回的内存是虚拟地址,由虚拟地址转换为物理地址,如果分配的内存为1g,超出了内存的大小或者内存不够用了,那么malloc找不到这么大的空闲空间,于是会返回null值,而不是先分一点,等空间有了的时候再分一点,是分一整个,然后给的是头指针(汗,昨天的回答真水)


slab系统和buddy系统的关系,内存分配是先经过slab再经过buddy吗?

关于 这个问题 ,linux分配内存是返回内核空间的虚拟地址,用到的函数有kmalloc等函数

在函数实现中,如果申请的内存空间较大的话,会从buddy系统申请若干内存页面,如果申请的内存空间大小较小的话,会从slab系统中申请内存空间。

所以根据这句话来看,内存分配是先经过一个大小的判断,再来决定由slab还是buddy系统进行空间的分配


之后是英文的自我介绍(由于很久没有说英文了,实在是说的太水了,需要针对性的对英语口语进行提高了)和项目介绍,面试官让我说出对整个项目的理解,并且提出项目某方面的想法,看我们的项目有没有进行这方面的考虑,我都进行了一一的回答


由于对于算法是最在行的,很大一部分时间其实在讨论算法,对于算法导论整本书的理解,还说了一些时间复杂度的概念和对KMP算法的理解,这些知识还是比较在行的,所以一一进行了回答,没有太大的波澜


整体来说,由于之前对于底层的一些知识准备不够充分,现在要做的不仅是温故算法和数据结构,还要把以前的知识:操作系统,数据库,计算机组成原理,计算机网络,编译原理这些课好好的温习,加强


PS。惴惴不安等结果啊,求好运,求人品,低调求实习

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值