会计点错小数点,将4.75亿错写成47.5亿# Joke - 肚皮舞运动
z*d
1 楼
职位和 embedded 开发相关。本人背景,CS PHD 行将毕业。
因为面了六轮,题目又纷繁复杂,从底层OS 到 高层OOP都有,所以无法记全,望大伙
儿包涵 :)
某些题目下附上我现场的回答,未经验证,欢迎指正。
针对我的研究课题问题我就不复述了。
本来几天前就要发这篇面筋的,但是新注册的用户不给发文权限。。。
C/C++:
1. C++ 的优点是什么?
按:好大一个题目。。。 我直接回答"to make life easier"… 提到
encapsulation 和 polymorphism
2. C++既然如此好,那是不是这些优点C 里面没有?
按:C++的编译器都是用C写的,不可能有事情是C++里能做到而C里办不到的。
3. C如何实现encapsulation and polymorphism
按:encapsulation 没答好,望大牛指教。 polymorphism 可以用函数指针。
4. static 关键字
5. volatile 关键字
6. 如下代码运行时会出错么?有什么问题
int* foobar(){
int a = 5;
return &a;
}
void main(){
int* i = foobar();
if( *i == 5)
do something;
}
按:运行没问题,编译有警告,问题很严重。
7. Virtual function 是什么
8. 如果基类中有virtual method, 他的两个不同子类都继承并各自实现了这个
method。 那么这当两个子类的对象cast 回 基类后,这个方法各自怎么调的?函数指
针会有重复么?
9. static 变量和普通变量分别allocate 在内存的什么区域
按:heap / stack
coding (我用C答的,都挺简单):
1. 数一个unsigned int 中 set bit 的个数,举例:5 == 101, 所以有2个set bit
按: 起码有三种方法: a)mod 2; b) 0x1 mask; c) n&(n-1) 的次数
2. 用singly linked list 实现一个Queue。
按: insert 和remove 都是 O(1)
3. 两个sorted int array, 找出所有的公共元素。
按: O(n)
4. 还是两个int array, 第一个长度是M+N, 但是只在位置[0, M-1] 有M个
sorted int 元素,后面[M, M+N-1] 是空的。 另一个长为N,有N个sorted 元素。问如
果N>M, 如何在O(N) 时间复杂度内将两个数组 in place merge 到第一个数组内。不可
以新开辅助数组,所以空间复杂度为O(1)。
按:从数组尾往前搜。
5. 接4题,如果这两个数组是unsorted, 时间复杂度最低是多少?
按:O(nlogn) 合起来再sort 一下。
6. 什么是endian, 实现一个函数转换一个int32的endianness
按:cast 成char[4]然后swap 两下。另:如果机器本身是little, 直接用htonl(
)
OS:
1. 什么是MMU?
2. 如果物理内存无限,我们还需要虚拟内存么?
3. 假设内存是flat 结构并且无限大,所有thread 的数据和指令都同时存在内存内
。由于系统没有内存管理机制,需要自己在application level 实现。要求做到如下:
一旦有thread 越界写内存(也就是corrupt了别的thread 的space), 在有限的时间内
,application 要给出warning。
按:这题我答得不好。面试官给的答案是:弄个process 专门监视每个thread 内
存空间的signature。每当有context switch 时,做如下两个步骤:a) 用散列算法给
当前 active 的thread 的整个内存区域生成一个signature, 存入一个table 中,一
个thread 对应一个signature; b)即将换入的thread 也生成一个新的signature,
与之前在table 中存的比对,如果不一致,那么说明在该 thead inactive 的时候,它
的内存区域有了错误的改动。
4. 什么是RTOS
因为面了六轮,题目又纷繁复杂,从底层OS 到 高层OOP都有,所以无法记全,望大伙
儿包涵 :)
某些题目下附上我现场的回答,未经验证,欢迎指正。
针对我的研究课题问题我就不复述了。
本来几天前就要发这篇面筋的,但是新注册的用户不给发文权限。。。
C/C++:
1. C++ 的优点是什么?
按:好大一个题目。。。 我直接回答"to make life easier"… 提到
encapsulation 和 polymorphism
2. C++既然如此好,那是不是这些优点C 里面没有?
按:C++的编译器都是用C写的,不可能有事情是C++里能做到而C里办不到的。
3. C如何实现encapsulation and polymorphism
按:encapsulation 没答好,望大牛指教。 polymorphism 可以用函数指针。
4. static 关键字
5. volatile 关键字
6. 如下代码运行时会出错么?有什么问题
int* foobar(){
int a = 5;
return &a;
}
void main(){
int* i = foobar();
if( *i == 5)
do something;
}
按:运行没问题,编译有警告,问题很严重。
7. Virtual function 是什么
8. 如果基类中有virtual method, 他的两个不同子类都继承并各自实现了这个
method。 那么这当两个子类的对象cast 回 基类后,这个方法各自怎么调的?函数指
针会有重复么?
9. static 变量和普通变量分别allocate 在内存的什么区域
按:heap / stack
coding (我用C答的,都挺简单):
1. 数一个unsigned int 中 set bit 的个数,举例:5 == 101, 所以有2个set bit
按: 起码有三种方法: a)mod 2; b) 0x1 mask; c) n&(n-1) 的次数
2. 用singly linked list 实现一个Queue。
按: insert 和remove 都是 O(1)
3. 两个sorted int array, 找出所有的公共元素。
按: O(n)
4. 还是两个int array, 第一个长度是M+N, 但是只在位置[0, M-1] 有M个
sorted int 元素,后面[M, M+N-1] 是空的。 另一个长为N,有N个sorted 元素。问如
果N>M, 如何在O(N) 时间复杂度内将两个数组 in place merge 到第一个数组内。不可
以新开辅助数组,所以空间复杂度为O(1)。
按:从数组尾往前搜。
5. 接4题,如果这两个数组是unsorted, 时间复杂度最低是多少?
按:O(nlogn) 合起来再sort 一下。
6. 什么是endian, 实现一个函数转换一个int32的endianness
按:cast 成char[4]然后swap 两下。另:如果机器本身是little, 直接用htonl(
)
OS:
1. 什么是MMU?
2. 如果物理内存无限,我们还需要虚拟内存么?
3. 假设内存是flat 结构并且无限大,所有thread 的数据和指令都同时存在内存内
。由于系统没有内存管理机制,需要自己在application level 实现。要求做到如下:
一旦有thread 越界写内存(也就是corrupt了别的thread 的space), 在有限的时间内
,application 要给出warning。
按:这题我答得不好。面试官给的答案是:弄个process 专门监视每个thread 内
存空间的signature。每当有context switch 时,做如下两个步骤:a) 用散列算法给
当前 active 的thread 的整个内存区域生成一个signature, 存入一个table 中,一
个thread 对应一个signature; b)即将换入的thread 也生成一个新的signature,
与之前在table 中存的比对,如果不一致,那么说明在该 thead inactive 的时候,它
的内存区域有了错误的改动。
4. 什么是RTOS