Ⅰ 請問達到怎樣的水平才能進微軟這類公司從事搞編譯器這類工作
我讀研究生的時候才對編譯開始有興趣,當我畢業時我不知道我對什麼感興趣。結果,當時的成績很好,他們也跟上了形勢,然後給了我一些時間思考。

後來我也在想,我其實更大的興趣是什麼呢?其實是C++和挑戰,做編譯器也許是方便我更好的研究它,也有很大的挑戰性,也許有一天我會因為發現更大的挑戰而不做編譯器了。
有什麼書和方法,有很好的答案,我不會說。寫下這些內容有點荒唐。
Ⅱ IQ,IP是什麼意思
俺解釋下
首先: BUG
所謂「(Bug)」,是指電腦系統的硬體、系統軟體(如操作系統)或應用軟體(如文字處理軟體)出錯。硬體的出錯有兩個原因,一是設計錯誤,一是硬體部件老化失效等。軟體的錯誤全是廠家設計錯誤。那種說用戶執行了非法操作的提示,是軟體廠商不負責的胡說八道。用戶可能會執行不正確的操作,比如本來是做加法但按了減法鍵。這樣用戶會得到一個不正確的結果,但不會引起bug發作。軟體廠商在設計產品時的一個基本要求,就是不允許用戶做非法的操作。只要允許用戶做的,都是合法的。用戶根本就沒有辦法知道廠家心裡是怎麼想的,哪些操作序列是非法的。
從電腦誕生之日起,就有了電腦BUG。第一個有記載的bug是美國海軍的編程員,編譯器的發明者格蕾斯·哈珀(Grace Hopper)發現的。哈珀後來成了美國海軍的一個將軍,領導了著名計算機語言Cobol的開發。
1945年9月9日,下午三點。哈珀中尉正領著她的小組構造一個稱為「馬克二型」的計算機。這還不是一個完全的電子計算機,它使用了大量的繼電器,一種電子機械裝置。第二次世界大戰還沒有結束。哈珀的小組日以繼夜地工作。機房是一間第一次世界大戰時建造的老建築。那是一個炎熱的夏天,房間沒有空調,所有窗戶都敞開散熱。
突然,馬克二型死機了。技術人員試了很多辦法,最後定位到第70號繼電器出錯。哈珀觀察這個出錯的繼電器,發現一隻飛蛾躺在中間,已經被繼電器打死。她小心地用攝子將蛾子夾出來,用透明膠布帖到「事件記錄本」中,並註明「第一個發現蟲子的實例。」[1]
從此以後,人們將計算機錯誤戲稱為蟲子(bug),而把找尋錯誤的工作稱為(debug)
第二:OEM
而OEM與現代工業社會有著密切的關系。一些著名的品牌商品製造商,常常因為自己的廠房不能達到大批量生產的要求,又或者需要某些特定的零件,因此向其他廠商求助。
這些伸出援手的廠商就被稱為OEM(Original Equipment Manufacturer,原始設備生產商)。如將之引申到IT領域的話,則表示那些進行代工的生產商。例如CPU風扇,Intel或AMD公司本身並不生產,它們通常會找像日本三洋公司這樣的專業電機製造企業作風扇OEM生產。
ODM又是怎麼一回事呢?原來,某製造商設計出一種產品後,在某些情況下可能會被另外一些品牌的製造商看中,要求配上後者的品牌名稱來進行生產,又或者稍微修改一些設計(如按鍵位置)來生產。這樣做的最大好處是其他廠商減少了自己研製的時間。有些人也習慣性稱這些產品是OEM.
Ⅲ 沒考上高中該怎麼辦
一、優先初三復讀。
首先,學生可以了解當地的中考復讀政策,如果當地允許初三學生復讀的話,學生可以再復讀一年,然後爭取考進高中,以後參加高考,實現大學夢。
當然,如果當地政策不允許初三復讀,那麼,學生可以考慮自學復讀(可請家教)。根據當前各省市的相關中考復讀政策來看,有些省市不允許公辦初中、私立初中以及民辦初中,甚至是培訓班招收初三復讀生,不過這些省市都沒有禁止考生通過自學報名復讀。
因此,學生如果有強烈上大學夢想,那優先考慮到學校復讀,實在不行就自學復讀。自學復讀要成功的前提是足夠自律,有自學能力。

五、學技能,然後自考提升學歷。
出於各種各樣原因,比如家庭實在貧寒,需要學生先謀生的話,那麼學生可以考慮去技校學一項技能。一般來說,技校學習技能通常1年-2年就可以畢業獲得相關證書。學生可以一邊工作改善家庭經濟情況,一邊繼續報名參加高校的繼續教育學院進行學習,提升學歷至專科或本科。
這樣一來,學生在獲得自考專科或者自考本科學歷後,就業選擇范圍就會更大,甚至可以報名參加公務員考試或事業單位考試。
Ⅳ 我買了本c語言的書想自學計算機語言,翻了翻書覺得還是算了,因為智商不在服務區。
學習任何一門語言都是不容易的,但是只要堅持有恆心,最後一定會有所成功。 設計語言中也是有[1]「單詞」,「語法」,「語義」三部分組成,其中跟人類語言一樣,「單詞」「語法」是基礎,而為達到交流的目的「語義」是整個程序設計語言的重點。當然相對人類語言(以英語為例)而言程序設計語言(以C語言為例)顯然要有簡單得多的組成,所以這里我們要首先確立自己對學好程序設計語言的信心。1、基礎, C語言的單詞是由26個英文字母、數字(0,1,2……9)、運算符以及其他特殊符號組成,所以相比而言學習C語言是多麼的幸福。「語法」,在英語中是如常見構詞法、時態、常用句型、特殊用法、固定用法等等(呵呵,不是語言專家如有興趣可以參考英語語法書籍),僅拿構詞法來說動詞後面加er就變成名詞(work-worker),名詞後面加y就變成形容詞(wind-windy)等十多種變換還要記憶些特殊變換,復雜且繁瑣,假如算上時態、句型等那就更復雜了。在C語言中也同樣也存在有語法,比如標識符、常量、表達式、數據定義、函數定義、變數初始化、語句構成、預處理命令等大致8種語法,如標識符[2]可由字母、數字以及下劃線組成,且必須以字母或下劃線開頭,區分大小寫,另外在不同的編譯器中字元數目有不同的規定,一般為7個字元。不過這里有些可能會被忽略的就是書寫格式,在C語言中書寫格式也是需要被注意的,因為格式也可以當作C語言的語法項目,如語句是以分號『;』作為結束的標志的而不是以換行作為結束標志.綜上所述要學好一門程序設計語言首先就要象學習英語一樣先熟記至少要熟悉這門語言的「單詞」和「語法」然後才能談得上使用,俗話說「萬丈高樓平地起」,學好C語言的必要前提就是先打下堅實的C語言基礎.2、重點「語義」即語句的意思、含義。同人類語言一樣,程序設計語言最重要的目的還是「交流」,所以寫一段沒有任何作用的代碼就如同說一句沒有任何意思的話是沒有意義的,在這一點上兩者是共同的,至於在其他某些方面兩者也有驚人的相似之處,不過與人類語言相比,程序設計語言畢竟是與計算機交流,交流對象計算機與人類的不同也決定了程序設計語言與人類語言還是有所區別,甚至可以說是存在巨大的「鴻溝」,這也就是學習程序設計語言的重點。首先明確,即要在與計算機交流時「語義」必須明確,否則計算機將無所適從,因此作為交流工具的程序設計語言的「語義」也必須是能夠明確無二義的。其次正確,包括正確的輸入以及正確的邏輯。由於計算機輸入測試用例也能夠完全正確,看看源程序,其中增加了一個標志位便把所有的情況給考慮進去了,相比前一個程序,程序2就是直白的描述了解題的思路,而程序3看起來好象不好理解但似乎更能滿足「天才程序員」的慾望,這也就是編程時使用的一些小技巧。總體比較三個程序,可以說類似程序1的錯誤——邏輯錯誤是我們程序員比較容易犯的,也是在編程調試過程中最費時間的,至於語法錯誤編譯器可以很快的給我們找出錯誤的地方程序2邏輯正確但相比程序1思路要更難想到,程序3思路不但正確而且還在編程的過程中使用了一些編程技巧,所有這些開闊的邏輯思路(解決問題),快速的調試方法及過程(發現錯誤).3、兩者之間的關系綜合上面的敘述,我們把編程看成程序設計語言的「單詞」「語法」「明確的語義」「正確的語義」四個部分,可以看出前面三個部分是幾乎所有的程序設計語言自身所具有的,「單詞」「語法」不同的程序設計語言有所不同,但如果你仔細觀察所有的程序設計語言,可以分成幾類,而且有很多地方也有相通的地方,有點象一通百通的味道,這也就是為什麼很多有經驗的程序員可以在很短的時間就能熟悉其他語言的原因。最後「正確的語義」包括開闊的,正確的邏輯思路以及發現並糾正錯誤的能力則是屬於我們自己的,這也是我們區別於其他人的地方,這些都需要在經常性的編程實踐中去積累去開闊,所以是所應該關注的重中之重。書本是綱領,我們首先要熟悉一門語言的粗枝大葉,在編程的過程中不至於老是去翻書查找一門語言的基本語法,比如說函數的傳遞方式,函數調用的一些特點,這樣不僅非常浪費時間而且一直困擾於語法中使得自己有種身緣「廬山」中的那種非常迷茫的感覺。因此編程實踐同樣不可少,編程實踐不僅可以「讓語義正確」即開闊編程思路,發現錯誤(調試),累計編程技巧,而且可以在編程過程中熟悉這門語言,熟悉這門語言的細節部分,但也請記住這些細節雖然重要,但也僅僅是細節。當然光看書,光有理論那也是不行的,有「綱領」而沒有「章程」,有「綱領」而沒有實施那同樣也是沒用的,畢竟實踐是檢驗真理的唯一標准,實踐過程中給理論修枝剪葉。總得來說熟悉一門程序設計語言的語法是編程實踐的先行,而編程實踐是可以更好促進對程序設計語言基本語法知識的理解和熟悉。
Ⅳ 我智商一般,學習C++需要多久
一個月的時間啊……估計很難……
我也是學計算機的~~當初有學C語言~~其實它並不難啊,關鍵要看你的自學能力如何?
我當時學C++時,在老師上課前自己提前自學幾個章節,這樣上課的時候一遇到不懂的地方就能即使發現,趁下課的機會趕緊問老師~~而且因為有提前自學,聽講的時候也能很容易聽懂。
如果你的自學能力和理科的理解能力比較強的話,學C++沒問題的~~~至於時間~~~個人覺得至少還是學2個月以上吧,知識才可能真正被掌握。
一個月的時間還是很倉促~~~不過要是你肯玩命地學,說不定也能成功~~
總之我的建議是自學+認真聽講+多做練習題!(C++編程的題目變化多樣~~必須把最常見的各類體型多做幾遍)
Ⅵ 同樣需要編譯器為什麼匯編語言比較快
絕大多數情況下,並不是。
事實上除了對CPU工作模式極端熟悉的人,一般人是很難用匯編寫出更高效的代碼的。
編譯器雖然智商比不了人,但是它更精通優化。生成高效的代碼需要透徹地掌握硬體的工作模式,每個細節都要考慮清楚。而且這很大程度上是軟體更擅長但人並不擅長的繁重無腦又要求極高精確性的機械化工作。
當然專業搞優化的人還是能打敗編譯器的,因為編譯器能做到的人終究還是可以做到。而人要比編譯器聰明得多。編譯器只能遵循一些規定好的模式進行優化,人可以創造編譯器根本不知道的優化方法。某些邏輯靠編譯器是沒辦法生成出來的,只能由人直接用匯編寫。匯編語言雖然也要編譯,但是一般會和機器指令直接對應,相當於要求CPU在細節上嚴格按人的思路工作,而高級語言並不能控制太多細節。
Ⅶ IQvivi,手機怎麼樣,已經對小米九徹底的失望。
現在國內知名的手機還是有挺多的,比如華為,OPPO,vivo就挺不錯的記得內存買大一點的,這樣用起來舒服,和電量大一點,這樣使用時間長,免得老充電也麻煩!
Ⅷ C語言是用哪個語言開發出來的
參考 Dennis M. Ritchie 寫的 The Development of the C Language:Chistory,C 語言誕生的基本過程就是 Ken Thomson 不滿意 BCPL,於是設計了 B 語言,並且用 BCPL 為 B 語言寫了一個編譯器,然後從這個編譯器開始自舉寫新的 B 語言編譯器。貝爾實驗室的眾人在 PDP-7 上用 B 語言寫了各種各樣的東西後又不滿意 B 語言了,於是 1971 年 DMR 開始在新買的 PDP-11 上用 B 給 B 寫擴展,稱之為 NB (new B,此處省略吐槽若干),擴展著擴展著離 B 的畫風越來越遠了,就取了一個新名字變成了一門新語言—— C 語言。 1973 年夏天他們用手頭的編譯器和語言給 PDP-11 重寫了一個 Unix Kernel。C 語言大約就是這個時期成型的。
所以,可以說第一個 C 語言的編譯器是用 B 語言,或者說是擴展過的 B 語言(NB)寫的。因為是一邊改進語言一邊用改進了的編譯器這樣滾雪球寫出來的,也可以看成是 C 語言寫的?畢竟 DMR 也說了,很難確定什麼時候 C 自己變成了一門新語言……
Ⅸ 開發一個 C++ 編譯器的難度有多大,難點又在哪裡
C++的前端是出了名的復雜度和可靠性要求並駕齊驅的軟體。
(這兩點都比它高一個數量級的大概就只有OS了)
對於這種系統,唯一的辦法就是燒錢。
燒錢的作用主要包括:
1.留人;
2.填坑;
3.買買買。
先說留人:復雜度一般是「細節」的代名詞。現實中的編譯器大多數以遞歸下降為主,自底向上的歸納推導為輔。這兩樣在教科書上也就是幾頁紙的事情。但是現實總是很殘酷的,人們總想讓語言更加「易用」,這就意味著各種上下文相關的情況都會出現。
對於C++來說,你要判斷一個符號是類型或者變數(比如這個符號被用在模板參數中),要看前面的聲明/定義。這就是一個上下文相關的推導。然後你就會寫大量的if else switch case之類的代碼來解決各種各樣的可能分支。寫它的人當然知道它是做什麼的,但是如果這個人離職了,新來一個人,就呆掉了,這寫的都是什麼煞筆玩意兒。因為它不知道現實中怎樣的需求會導致奇形怪狀的邏輯。所以人員的穩定,對於這種長周期迭代、邏輯復雜的項目是很重要的。但是人的水平要求高嗎?不算高也不算低。總結來說就是:有邏輯,知好歹。技術什麼都可以培養,但是態度和基本智商是比較難培養起來的。
至於怎麼保證人員穩定?很簡單:加薪。
再說填坑:編譯器是對正確性要求很高的基礎軟體。這里的正確性既包括產生的代碼的正確性,也包括編譯器自身對於各種問題的容忍度和足夠豐富的錯誤提示。容錯和錯誤提示本身也是代碼,也有很大的出錯幾率。所以這些軟體,bug少不了。但是作為基礎軟體,你又不能隨便就2+3搞成了2*3,這樣還怎麼讓別人相信愛情。所以要燒很多錢來養一幫debugger。
再說買買買:古人日:我們不用很麻煩很辛苦也可以成佛。既然這么費神我們自己做干什麼,不如買別人的吧。於是MS就乾脆不自己做了,直接去EDG整了個前端,這樣就可以少了不少人年。這就是傳統土豪和水果這種新暴發戶想的不一樣的地方。
傳統土豪想的是:我們有這么多錢為什麼還要自己解決問題呢?買買買!
水果新貴則是:啊呀,不小心有了這么多錢,我們要不要給自己製造點問題好把這些錢花出去?
Ⅹ Intellij IDEA編譯器,怎麼自動提示強轉類型和自動實現監聽
Intellij IDEA本身就支持此功能。把滑鼠放到紅色代碼上,按下alt+enter
會給出智能修正提示,一般第一項就是case to 強制轉換。直接回車就可以了。
可以參考此回答http://..com/question/1239187330921318619.html