樓樓早上上午大概11點接到的電話,一個聲音炒雞好聽的GG,說他是來自morgan stanley的,想和我約一下店面時間。我一聽,真是戳不及防,掐指一算,online的IKE測試已通過去20幾天了吧,有點小驚喜。我說下午亮點,GG說好噠。掛完電話以後,我就看電視劇去了,徹底沒放在心上。吃完飯後來同窗才提醒,是英文的面試,我,這,一,下,就,慌,了。趕快寫了個自我介紹,而後把幾個關鍵詞查了查就電話就來了。下面把問題都記錄一下,攢RP。html
GG:Hello, XXX. This is XXX…..balabala…主旨就是說下面面試會分爲三部分。第一部分,我會快速地問你一些問題,而後你給出簡要的回答,不要給例子,除非我問你。第二部分,我會問你一些你項目中的問題。第三部分,你看你有沒有問題想問我,我會盡力回答,若是超出職責範圍內,我後面會叫個人manager或者HR來回答你。總之就是很客氣啦!node
ME:好的。ios
GG1: 編譯型語言和解釋型語言有什麼區別?Java是編譯型語言嗎?(翻譯過來的啊,GG用的是比較流暢的英文,下面相同)面試
編譯型語言:程序在執行以前須要一個專門的編譯過程,把程序編譯成 爲機器語言的文件,運行時不須要從新翻譯,直接使用編譯的結果就好了。程序執行效率高,依賴編譯器,跨平臺性差些。數據庫
解釋性語言:解釋性語言在程序運行的時候才翻譯,每執行一次就要翻譯一次。所以,程序執行效率低,可是跨平臺型好。數組
編譯型語言適用於對執行效率要求高的系統,如操做系統、大型應用程序、數據庫系統等時都採用它,像C/C++、Pascal/Object Pascal(Delphi)等都是編譯語言,而一些網頁腳本、服務器腳本及輔助開發接口這樣的對速度要求不高、對不一樣系統平臺間的兼容性有必定要求的程序則一般使用解釋性語言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。服務器
注意Java是解釋性語言,此處樓樓已跪,答錯了,GG也沒有提出來。數據結構
GG2: 二叉查找樹(Binary Sort Tree)是什麼?能簡要介紹一下嗎?函數
二叉查找樹是指一棵空樹或者具備下列性質的二叉樹:測試
GG3: stack和queue區別是啥?
stack 是FILO,queue是FIFO
GG4: 指針是啥?
內存地址
GG5: 面向對象(Object Oriented)語言是啥?
我說的是,面向對象是一種思考問題的方法。是相對面向過程而言的,它有三大特性封裝、繼承、多態。可以使代碼更好的重用,添加新的行爲以及減小代碼的耦合度。巴拉巴拉。。。
GG5: 剛剛你也提到多態,你能舉一個例子說明一下多態嗎?
我,舉了一個不恰當的例子。人是動物,魚也是動物,馬也是動物,這三種動物都須要吃食物,可是吃的食物卻都是不同的。當咱們把這些子類對象複製給父類對象的時候,匪類對象調用吃這個方法,系統就能動態的決定調用那個吃方法了。
GG6: 對象和類有什麼區別?
對象是類的實例啊,只是忽然忘記實例的英文,instance,嗯,就這個啦!
GG7: inline內聯函數是什麼?
當一個函數比較經常使用,比較短,可是又常常會被使用到,那咱們就能夠把這個函數定義成inline。函數代碼被放入符號表中,在使用時直接進行替換,沒有了調用開銷,所以效率比較高。
GG7: 我臨時想到一個問題,請問宏和內聯函數的區別是什麼?
參數檢測:宏定義在編譯的時候進行替換,可是僅僅是簡單的替換,不會進行參數有效性的檢測,它的返回值也不能被強制轉換爲可轉換的合適的類型,使用時要很是當心。而內聯函數是一個真正的函數,編譯器在調用一個內聯函數時,會首先檢查它的參數類型,保證調用正確性。
面向對象:當一個表達式涉及到類的保護成員或者私有成員,宏定義沒法知足要求。inline能夠用在面向對象裏面。
GG8: 內聯函數是否是always inline的呢?
不是。內聯函數只適用於代碼比較短的函數,inline說明對編譯器來講只是一種建議,編譯器能夠選擇忽略這個建議。好比講一個長達1000行的函數指定爲Inline,編譯器就會忽略這個inline,這個函數還原成普通函數。
GG9: 假設你上面說的是對的,那爲何編譯器不這麼作呢?
若是這個定義爲inline的函數長達1000行,又有不少處被調用,那麼代碼膨脹帶來的惡果極可能會大於效率提升帶來的益處,因此編譯器可能會選擇忽略這個inline。
GG10: 如何訪問一個類的私有成員?
我說getter,GG說,固然是沒有getter的條件下啦,哈哈,被鄙視了。還有能夠用友元啊,我盡然沒說到這個,雖然可能面試官也不在於面友元,但多說一點總歸會更好啊。這個問題,我查了一下,整理以下
訪問一個類的私有成員:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#include<iostream.h>
class A
{
int t;
public:
A()
{
t=2002;//在構造函數中初始化成員變量t
}
friend class B;//聲明友元類classB
};
class B
{
public:
A a;
int sum()
{
return a.t+1500;//友員class B訪問class A中的私有成員變量t
}
};
void main()
{
B b;
cout<<b.sum()<<endl;
}
|
咱們知道,C++編譯器將數據和程序段分開,全部的類變量會按照聲明順序依次存入數據段,因此,若是知道了第一個變量的地址,那麼後面的地址也就依次累加便可逐一求出了。有了變量地址,那麼也就能夠對它的值進行修改了。仍是以上面的例子來講明,一下程序編寫了如何更改類成員b的值:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#include <iostream>
#include <string>
using namespace std;
class center
{
public:
void setX(float _x){x=_x;}
void setY(float _y){y=_y;}
void setMeanValue(float avg){meanValue=avg;}
float getX(){return x;}
float getY(){return y;}
float getMeanValue(){return meanValue;}
center():x(0.0),y(0.0),meanValue(0.0){}
private:
float x;
float y;
float meanValue;
};
int main()
{
center A;
//普通青年的賦值方法;
A.setX(1.0);
A.setY(4.0);
A.setMeanValue(13.0);
cout<<A.getX()<<" "<<A.getY()<<" "<<A.getMeanValue()<<endl;
//文藝青年的賦值方法;
//*((float*)&A):將center對象A的內存空間強制類型轉化爲用int*指向的內存空間,訪問該內存
float tmp = *((float*)&A);
cout<<tmp<<endl;//輸出A.x的值
tmp = *((float*)&A + 1);
cout<<tmp<<endl;//輸出A.y的值
*((float*)&A + 2)=2;//修改A.meanValue的值
cout<<A.getMeanValue()<<endl;
}
|
參考連接:
http://blog.csdn.net/yangtrees/article/details/8773508
我說能夠用虛函數表,我搞混了,我看過能夠用虛函數表的是這樣一個問題,訪問基類的私有虛函數。
額,很差意思,扯遠了,咱們看下一個問題哦。
GG11: 下面會問一些Unix或者Linux的基礎問題。請問如何讓一個進程在後臺運行?
我說&。具體我查了一下,整理以下:
方法1在終端輸入命令:
1
|
# ./pso > pso.file 2>&1 &
|
解釋:將pso直接放在後臺運行,並把終端輸出存放在當前目錄下的pso.file文件中。
當客戶端關機後從新登錄服務器後,直接查看pso.file文件就可看執行結果(命
令:#cat pso.file )。
方法2在終端輸入命令:
1
|
# nohup ./pso > pso.file 2>&1 &
|
解釋:nohup就是不掛起的意思,將pso直接放在後臺運行,並把終端輸出存放在當前
目錄下的pso.file文件中。當客戶端關機後從新登錄服務器後,直接查看pso.file
文件就可看執行結果(命令:#cat pso.file )。
GG12: 如何將一個在後臺運行的進程移到前臺來運行?
fg,將一個在前臺運行的進程移到後臺則能夠用bg命令。如:
對於已經在前臺執行的命令,也能夠從新放到後臺執行,首先按ctrl+z暫停已經運行的進程,而後使用bg命令將中止的做業放到後臺運行:
1
2
3
4
5
6
7
8
|
$ ./test.sh
[1]+ Stopped ./test.sh
$ bg %1
[1]+ ./test.sh &
$ jobs -l
[1]+ 22794 Running ./test.sh &
|
GG11及GG12參考連接:http://www.cnblogs.com/xianghang123/archive/2011/08/02/2125511.html
GG13: 若是一個進程已經在後臺運行了,如何查看它的進程號?
ps -aux
GG14: 用過ps -es命令嗎?
我說很差意思,沒用過,差了一下,好像沒這個命令啊,是我聽錯了嗎?想要了解ps命令的同窗能夠本身查一查哈!
GG15: 如何列出全部使用某一文件的進程?
lsof filename
GG16: 不一樣主機之間如何拷貝文件?
scp
GG17: 什麼是殭屍進程?
殭屍進程:一個進程使用fork建立子進程,若是子進程退出,而父進程並無調用wait或waitpid獲取子進程的狀態信息,那麼子進程的進程描述符仍然保存在系統中。這種進程稱之爲僵死進程。
GG18: 什麼是孤兒(orphan)進程?
孤兒進程:一個父進程退出,而它的一個或多個子進程還在運行,那麼那些子進程將成爲孤兒進程。孤兒進程將被init進程(進程號爲1)所收養,並由init進程對它們完成狀態收集工做。
GG17和GG18參考連接:http://www.cnblogs.com/anker/p/3271773.html
GG19: 孤兒(orphan)進程有沒有PPID?
有,孤兒進程將被init進程(進程號爲1)所收養,PPID就是1了。
GG20:孤兒(orphan)PPID是什麼?
我說,parent’s processing ID,我估計他預想的答案是1,不過面試GG沒有打斷我,而後我以爲我簡直是要被笑死了。
GG21:關於去摩根斯坦利實習,你的expectations是什麼?
GG22:後面就是項目中的問題了,因人而異,就很少說了。
後面面試GG說雖然有點overtime了,可是仍是問我有沒有什麼想問的。我沒有問什麼後面的流程什麼的,我問他實話說,在摩根斯坦利上班,他開不開心,想沒想過跳槽之類的。面試GG都很耐心地給出了回答,整個過程仍是比較愉快的,面的問題都很基礎,有點像快速搶答的感受,整個過程持續38分鐘。但願對你們有用,加油↖(^ω^)↗
另外博主的各位博客主頁www.anycodex.com,天天都會更新,歡迎加入收藏,留言討論!
http://www.anycodex.com/?p=102