阿里巴巴面试题 2013.09.18

本文总结了一系列技术问题,包括操作系统中的堆栈实现、Linux进程间通讯方式、C++多态实现原理、磁盘工作调度原理等,并探讨了程序优化、算法问题解决策略等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

技术类问题总结
1. 堆栈底层操作系统实现
?
SS: 栈段寄存器,32位下是一个selector。 
   EBP:存储栈的底部。 ESP:指向栈的顶部。
   当函数调用时:一般是
#进入函数,现在esp指向栈顶,其值即 [CS 和 EIP ]
push        ebp        #在栈中存储ebp的值, SS[esp] 现在存储了
mov         ebp,esp  #将当前栈顶位置存储到ebp中.
sub         esp,0CCh #在栈中分配局部变量的空间,这里分配了16*c+c = 204 ?
# 现在可以进行各项操作...
# SS[ebp-8] 可以存储一个int 型变量, SS[ebp-12] 可以存储第二个int型变量. 
# 退出函数操作:
mov esp, ebp  # 恢复栈顶.
pop ebp         # 现在栈顶指向的是[CS 和 EIP]
ret                # 恢复CS, EIP


2. linux进程间通讯方式
1)管道(pipe)和有名管道(FIFO)
(2)信号(signal)
(3)消息队列
(4)共享内存
(5)信号量
(6)套接字(socket)
3. c++多态的实现原理
1. 用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。
2. 存在虚函数的类都有一个一维的虚函数表叫做虚表。类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。
3. 多态性是一个接口多种实现,是面向对象的核心。分为类的多态性和函数的多态性。
4. 多态用虚函数来实现,结合动态绑定。
5. 纯虚函数是虚函数再加上= 0。
6. 抽象类是指包括至少一个纯虚函数的类。
4. 磁盘的工作调度原理
先来先服务FCFS:公平,简单,每个进程的请求都能依次得到处理。没有对寻道优化,平均寻道时间长。
最短时间优先调度算法SSTF:要求访问的磁道是当前磁头所在的磁道最近,每次寻道时间最短,但不能保证平均寻道时间最短。可能导致一些请求无限期推延,产生饥饿现象。
电梯调度算法SCAN:不仅考虑当前磁道的距离,优先考虑在磁道前进方向的最短时间,排除磁头在盘面上的往复运动,避免了出现“饥饿”现象。电梯原理。
N-SCAN:是SCAN的改良。磁头改变方向时,以到达请求服务的最短时间。对中间请求服务更有利。
C-SCAN:磁头单项移动。消除N-SCAN对两端请求的不公平。
5. 从性能速度角度分析,程序有哪些优化方式
时间复杂度,空间复杂度?
6. 蚂蚁爬绳最长时间问题
编程之美P288 
思路:碰头可以理解为二者并没有反向,而是擦肩而过.
则最长时间就是蚂蚁朝离两端远的方向走的时间的最大值,
最短时间就是蚂蚁朝离两端近的方向走的时间的最大值.
7. 回旋数组中查找一个元素的问题
8. 设计一种数据结构,使得取中位数的时间复杂度在 O(1), 元素插入时间复杂度为log(n):
1. 可以建造一棵二叉排序树, 保证 node_num( root->left )-node_num( root->right ) == 0 或 -1.
    重点是保证二叉树的平衡 及 深度为log(n)。
    此方法待验证.
2. 可以考虑使用最大堆、最小堆:
   中位数mid单独存放, {大堆}<=mid, {小堆}>=mid, 保证 node_num( {大堆} ) - node_num( {小堆} ) == 0 或 -1。
9. 已知A B两个集合,元素有序,构造新的集合S={x+y | x属于A, y属于B} 求S中最小的k个元素,最优解法 
  和改为积呢?
10.写代码二分查找,字符串KMP算法
11.简历上的项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值