燕子去了廓奕,有再來的時候抱婉;楊柳枯了,有再青的時候桌粉;桃花謝了蒸绩,有再開的時 候。但是铃肯,聰明的患亿,你告訴我,我們的日子為什么一去不復(fù)返呢押逼?——是有人偷了他 們罷:那是誰步藕?又藏在何處呢?是他們自己逃走了罷——如今又到了哪里呢挑格?
不知不覺, 我們已經(jīng)面臨畢業(yè)的時候.
此時, 總是尷尬的. 以前總有畢業(yè)遙遙無期的想法, 但是未來的迷茫, 面臨的選擇猛然向自己撲來時, 不禁驚訝時間的流逝.
life is short
life is long
孔子認為life is float
,因為
逝者如斯夫咙冗!不舍晝夜 by ZhiHu
面試公司: IBM中國編譯器團隊
(我用他的電話號碼人肉了一下)
面試人: 張青山 畢業(yè)于福州大學(xué)計算機系。從事嵌入式開發(fā)多年漂彤,曾致力于Linux內(nèi)核和芯片驅(qū)動程序的開發(fā)雾消、及上層應(yīng)用程序的編寫灾搏。2010年加入IBM XL編譯器中國開發(fā)團隊,負責(zé)XL C++編譯器前端的研發(fā)工作仪或。對C99确镊、C++98、C++11等語言標(biāo)準(zhǔn)及編譯理論有深入理解范删,并實際參與C++11前端各種特性的實現(xiàn)蕾域。此外還致力于編譯器兼容性的研究和開發(fā)。
你知道Tr代表的是什么嗎?
我看過, 但是忘了...
C++ Technical Report 1 (TR1)(英文)是ISO/IEC TR 19768, C++ Library Extensions(函式庫擴充)的一般名稱到旦。TR1是一份文件旨巷,內(nèi)容提出了對C++標(biāo)準(zhǔn)函式庫的追加項目。這些追加項目包括了正則表達式添忘、智能指針采呐、哈希表、隨機數(shù)生成器等搁骑。TR1自己並非標(biāo)準(zhǔn)斧吐,他是一份草稿文件。然而他所提出的項目大多數(shù)已成為下次的官方標(biāo)準(zhǔn)(C++11)的一部分仲器。這份文件的目標(biāo)在於「為擴充的C++標(biāo)準(zhǔn)函式庫建立更為廣泛的現(xiàn)成實作品」煤率。
Filesystem Library [9] – Based on the Boost Filesystem Library, for query/manipulation of paths, files and directories.
你在編程時遇到最大的困難是什么?
Linux的動態(tài)加載庫是怎么用的?
我只是用過windows下的動態(tài)加載庫(dll), 便由此推斷出Linux的也是這樣用, 便問你有提供外部接口給我嗎
他問, 你知道怎么樣獲得外部接口嗎.
我當(dāng)然一臉懵逼了
nm -D mylib.so
列出所有導(dǎo)出的函數(shù),包括mylib.so靜態(tài)鏈接的庫中的那些導(dǎo)出函數(shù)乏冀。
查看符號表: objdump -t xxx.so
-T 和 -t 選項在于 -T 只能查看動態(tài)符號蝶糯,如庫導(dǎo)出的函數(shù)和引用其他庫的函數(shù),而 -t 可以查看所有的符號,包括數(shù)據(jù)段的符號
extern int add (int a, int b) { return a+b; }
extern int minus (int a, int b) { return a-b; }
static int small_minus (int a, int b) { return a-b; }
extern int used_minus (int a, int b) { return small_minus(a, b); }
extern int divide (int a, int b) { int c = a/b; return c; }
? nm target.so
0000000000000f00 T _add
0000000000000f80 T _divide
0000000000000f20 T _minus
0000000000000f60 t _small_minus
0000000000000f40 T _used_minus
U dyld_stub_binder
? gobjdump -t target.so
target.so: 文件格式 mach-o-x86-64
SYMBOL TABLE:
0000000000000f60 l 0e SECT 01 0000 [.text] _small_minus
0000000000000f00 g 0f SECT 01 0000 [.text] _add
0000000000000f80 g 0f SECT 01 0000 [.text] _divide
0000000000000f20 g 0f SECT 01 0000 [.text] _minus
0000000000000f40 g 0f SECT 01 0000 [.text] _used_minus
0000000000000000 g 01 UND 00 0100 dyld_stub_binder
也就是說, 你只是用的多, 并沒有真正自己完成一個大項目.
全局變量int a = foo() 到底發(fā)生了什么?
我知道int a = 3是在main函數(shù)執(zhí)行前賦值, 也知道 main不是入口函數(shù), 入口函數(shù)另有其人
整個程序的入口點是crt1.o中提 供的_start,它首先做一些初始化工作(以下稱為啟動例程,Startup Routine),然后調(diào)用C代 碼中提供的main函數(shù)。所以,以前我們說main函數(shù)是程序的入口點其實不準(zhǔn)確,_start才是真正的入口點,而main函數(shù)是被_start調(diào)用的眯亦。?
但是呢, 我剛剛測試了一下, 好像并不能用foo()函數(shù)賦值, 因為foo函數(shù)并不能在編譯時確定
error: initializer element is not a compile-time constant
是我被坑了嗎? 還是聽錯了呢...我普通話不好, 不要打我.
你知道C++現(xiàn)在最新的標(biāo)準(zhǔn)是什么嗎? 列舉幾個特性
最新的標(biāo)準(zhǔn)是C++11, 好像C++13正在討論中. 有auto類型, lambda表達式
(但是事實是, C++11/C++14/C++17都有了...)
你知道auto是auto a = 4, 怎么實現(xiàn)的嗎?
我不知道..就用auto是自動推導(dǎo)類型蒙過去了
你知道變長模板嗎?
不知道:( 大學(xué)我基本都在用C, php, C++大致只停留在高中水平了.
一個模板形參包(template parameter pack)是一個接受零個或多個模板實參的模板形參《什纾【例:
template<class ... Types> struct Tuple { };
Tuple<> t0; // Types不含任何實參
Tuple<int> t1; // Types含有一個實參:int
Tuple<int, float> t2; // Types含有兩個實參:int和float
Tuple<0> error; // 錯誤:0不是一個類型
如何用C實現(xiàn)C++的面向?qū)ο?/p>
這個雖然我沒有做過, 但是在做Wine contribution的時候, 大致看到這樣的做法.
用Struct把數(shù)據(jù)封裝, 成員函數(shù)就多加一個顯式的this參數(shù), 用結(jié)構(gòu)體的地址傳進去.
他說, 這樣只是外部函數(shù), 還不是成員函數(shù), 是不是.
我想了一下, 在wine里都是上面那種來實現(xiàn)的, 還可以怎么樣呢(⊙o⊙)
馬上就想到了, 在結(jié)構(gòu)體里, 多加一個函數(shù)指針成員, 然后再把成員函數(shù)地址賦值給函數(shù)指針成員.
他說是這樣, 你知道這樣做跟C++比較有什么缺點嗎?
我只是想到了需要顯式調(diào)用構(gòu)造與析構(gòu)函數(shù), 以及傳入this指針.
想不到?jīng)]有了C++里的private, public, protect權(quán)限了
總結(jié)就是用的多, 但是對basic knowledge不理解.
我只有最后一個問題是答得好的...那個問題還是最后他說, 你還有什么想問嗎
我說你再問一個C語言的問題吧.........