码迷,mamicode.com
首页 > 编程语言 > 详细

阿里云c++研发实习生面试二面

时间:2020-03-17 20:59:01      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:efi   front   系统调用   机制   执行   打开   ring   中断   访问   

今天再面阿里,只面了一个多小时,莫非是凉了。。。

 

刚开始是问简历中的问题

集中在linux内核上

Q:linux内核你都看过那些模块?

A:启动程序和进程调度模块

 

Q:那进程都包含什么资源?

A:用户栈,寄存器跟内存(页)

 

Q:进程中都有哪些段?

A:我用的intel8086一般会分配数据段,堆栈段跟代码段

 

Q:那你知道线程会分配什么资源吗?

A:用户栈,寄存器,不再分配内存,跟父进程共用

 

Q:好,那你知道如果A,B两个线程,同时对父进程的变量a执行自增,会怎么样

A:a++在汇编中是”mov ax, $a“,"inc ax","mov $a, ax",但是他们不是原子操作,执行不一定独立,所以a可能会是2

 

Q:所以我们该怎么做?

A:对a的访问与更改要加锁

 

Q:那锁都有哪几种那?

A:我记得有五种,但是说的上来的只有自旋锁,条件锁和互斥锁

 

Q:自旋锁说一下吧

A:比如A握住了mutex,B就会轮询等待资源,直到A放弃这个资源

 

Q:ok,那条件锁那?

A:emmmmmmm,忘记了。。。

 

Q:没关系,再问你一个问题,比如用户进程要使用系统调用,是什么一个过程

A:用户进程会产生一个软中断,然后内核进程会唤醒并执行相应的调用,返回结果等

 

然后就问完了,让打开一个神奇的代码编辑网站

之后是让写算法题

第一道是写按行且按列递增的二维数组确定某个数是否存在

第二道是写一个最大长度为一个亿的URL缓存机制

// 1
#include<bits/stdc++.h> #define LL long long #define maxn 5010 using namespace std; int a[maxn][maxn]; int main(){ int n, m, t; scanf("%d %d %d", &n, &m, &t); for(int i = 0; i < n; ++i){ for(int j = 0; j < m; ++j){ scanf("%d", &a[i][j]); } } int l, r, T; l = 0, r = n, T = 50; while(l < r && T--){ int mid = (l + r) >> 1; if(a[mid][0] > t){ r = mid; } else{ l = mid; } } int rl = r; l = 0, r = n, T = 50; while(l < r && T--){ int mid = (l + r) >> 1; if(a[mid][m - 1] < t){ r = mid; } else{ l = mid; } } int ll = r; for(int i = ll; i <= rl; ++i){ int mb = lower_bound(a[i], a[i] + m, t) - a[i]; if(mb < m && a[i][mb] == t){ printf("YES\n"); return 0; } } printf("NO\n"); return 0; }
// 2
unordered_map<u32d, string> mp; LL count = 0, MAX_SIZE = 100000000; list<u32d> ls; void _delete(){ while(count > MAX_SIZE){ count = count - mp[ls.front()].size(); mp.erase(mp.find(ls.front())); ls.pop_front(); } } void _push(u32d _key, string _value){ if(mp.find(_key) != mp.end()){ mp[_key] = _value; } else{ mp[_key] = _value; count = count + _value.size(); ls.push_back(_key); if(count > MAX_SIZE){ _delete(); } } } string _get(u32d _key){ return mp[_key]; }

 

就是这样了,据传薪资还是很好的,想投的我给个连接把

阿里云块存储团队,承接阿里云及阿里巴巴集团内部块存储服务,无论营收,用户数,数据量,机器规模均在国内遥遥领先,欢迎各位同学加入,一起创造未来。

岗位:C++研发
工作地点: 北京、杭州
面向范围:2020年11月到2021年10月毕业的学生
联系邮箱: lilong.hll@alibaba-inc.com

阿里云c++研发实习生面试二面

标签:efi   front   系统调用   机制   执行   打开   ring   中断   访问   

原文地址:https://www.cnblogs.com/Hebut-Amadeus/p/12513259.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!