『壹』 109、微軟公司一份年薪百萬的工作,面試題99﹪人答錯了,你能答對嗎 一個人,花8元買只雞。9元賣出去。1
這是IBM面試時的題目,有四種演算法:
1、9-8=1,11-10=1,1+1=2,所以最後賺2元。
2、最初只有8塊錢,最後你有11塊了,
所以是賺3塊;
3、第一次買賣,主人公損失8塊,獲得一隻雞,第二次買賣;主人公獲得9塊,
損失一隻雞;第三次買賣,主人公損失10塊,獲得一隻雞;第四買賣,主人公
獲得11塊,損失一隻雞
所以 整個產生的GDP(國內生產總值)是8+9+10+11=38元+4隻雞
4、整個事件有3次交易,我門來看看具體是哪3次?
第一次交易:8元買進,9元賣出,利潤1元;
第二次交易:9元賣出,10元買進,利潤-1元;
第三次交易:10元買進,11元賣出利潤1元;
整個過程:1-1+1=1元
所以分析得知:這個人是個傻子,因為後兩次交易等於白幹了。
經測試,企業認為:
回答利潤是2元的肯定是面試失敗者;
回答3元的更為愚蠢,因為自己什麼是追加成本都不知道,肯定也是失敗;
回答1元者,恭喜你,不屬於傻子范圍;
結果是:本來可以直接賺3元的,經過他3次交易後總利潤變成1元了。
所以正確答案是:-2元!
回答-2元者,恭喜!面試成功!!!
美國應聘者認為賺了2美元,日本應聘者認為虧了2美元,而中國人認為虧了4美元。
美國應聘者的解題思路——同樣的雞,第一次8買9賣,9-8=1,賺1美元。第二次10買11賣,11-10=1,賺1美元。兩次交易相加,1+1=2,所以答案是賺2美元。
日本應聘者的解題思路——同樣的雞,如果在8美元的價位上一次買兩只然後分別在9美元和11美元的價位上先後賣出,那麼第一次交易8買9賣,9-8=1,賺1美元。第二次交易8買11賣,11-8=3,賺3美元。兩次交易相加,本來應賺4美元,1+3=4。但販雞者實際只賺了2美元,(9-8)+(11-10)=2,所以答案是虧2美元,2-4=-2。
中國應聘者的解題思路——同樣的雞,如果在8美元的價位上一次買兩只然後在11美元的價位上一次性出手,那麼就應該賺6美元,8買11賣,(11-8)×2=6。但販雞者實際只賺了2美元,(9-8)+(11-10)=2,所以答案是虧了4美元,2-6=-4。
面試官大為佩服中國應聘者的解題思路和答案,於是美國應聘者和日本應聘者落聘,中國應聘者成功通過面試,進入花旗集團工作。
這位成功應聘花旗集團的中國人名叫沈南鵬,擔任過攜程網執行董事、首席財務官。離開攜程後,沈南鵬加入紅杉基金,出任創始合夥人。2009年12月15日,被《福布斯》中文版雜志評選為 「2009福布斯中國最佳創業投資人」,位列第五。
從常規思路來看,似乎美國應聘者比較呆板,既不能以前瞻性的目光和跳躍性的思維去看待和把握市場物價的變化規律,也缺乏投資必須追求最大效益的意識,所以就認同了「兩次買兩次賣」的笨劣做法,機械地據題解題,進而得出賺了2美元的答案。
日本應聘者則比較靈光,他以前瞻性的目光和跳躍性的思維去看待和把握市場物價的變化規律,所以就沒有認同販雞者「兩次買兩次賣」的笨劣做法,在解題過程中提出了「一次買兩次賣」的投資方案,比美國應聘者的投資方案可以多賺2美元,進而得出虧了2美元的答案。
中國應聘者沈南鵬卻既能以前瞻性的目光和跳躍性的思維去看待和把握市場物價的變化規律,又具有投資必須追求最大效益意識,於是提出了「一次買一次賣」的「最優方案」,所以就得出虧了4美元的答案。
『貳』 國內外著名的面試題有哪些
微軟面試題面試官詢問的刁鑽問題(1)
你可能已經讀過求職方面的書,並在心裡反復溫習了面試標准問題的答案。但是如果面試官提的是其他問題,一些你沒有想到的問題,這時該怎麼辦?這樣的問題可能是最難的,因為它們會表明你的思維的敏捷程度。它們可能非常有誘惑力,讓你戒備心全無,從而中了面試官的圈套,展現出自己的方方面面,包括你原本不打算暴露出來的某些個性。
1.「你最近讀了什麼書?」在應聘法院書記員的職位時,有三位聯邦法官問到我這個問題。我告訴他們我正在讀的小說的名字。有一名法官說從來沒有聽說過這本書,另一個說自己只讀蒙大拿州作家的書,第三個說知道這本書的作者,並在新聞方面與我有著同樣的興趣。——安妮·瑪麗,1999年4月23日我們的建議:最好是從這個問題與這份工作之間有什麼關系的角度來考慮。談一些熱門的與法律有關的期刊或書籍要好於談自己正在讀的小說。雖然你也許會發現面試官與你有著同樣的文學方面的興趣,但是面試官問這個問題的目的其實是想知道你是否了解專業領域的最新發展狀況。
2.當我聽到「XX年後你希望自己是什麼狀況」這個問題時,我試圖用幽默的方式回答這個問題(比如,希望在彩票中獎後去熱帶地區生活),不過我想知道專業人士為什麼會提出這個問題。——蘇珊,1999年4月29日我們的建議:你的直覺是正確的!他們到底想知道什麼?「五年以後,我希望自己仍在努力工作,而且能夠把工作做到最好。」這樣的答案會讓面試官覺得你工作努力,而且給自己設立了高標准。你也可以表示想繼續學習,為自己所從事的這個領域創造更大的價值。
3.我一直想知道的是,當那些老闆問「你的缺點是什麼」時,他們到底想聽到什麼。告訴他們你有愛吃巧克力這個缺點嗎?還是告訴他們你的缺點就是不肯告訴別人自己的缺點?你知道如何回答這樣的問題嗎?——芭芭拉,1999年4月30日我們的建議:這是一個非常常見的問題。如果你說自己沒有缺點,那會顯得驕傲自大。如果你用幽默的方式回答這個問題,會顯得太輕浮。這是一個不好回答的問題,面試官想看你如何處理這樣的問題。談一個從其他角度來看是長處的缺點。千萬不要落入面試官的圈套,把對方視為母親、父親或是聽懺悔的神父,說一些關繫到能否得到這個工作的重要內容!一種好的回答方式是:「我很難和不盡職盡責的人一起工作。我對自己的工作有很高的標准,我希望別人也給自己設立高標准。我正學著在為不公平的境遇氣惱之前,明確要求別人更投入地對待自己的工作。」還要指出自己怎樣克服這個缺點。
4.幾年來,我遇到了三個刁鑽的問題。可惜的是,我因沒有心理准備而未能給出令人滿意的答復。(1)你的約會很多嗎?(問這個問題的是美國一家防務公司的一名女面試官。)(2)你今天為什麼來這里?(一家投資銀行的面試官走進他的辦公室,看到我坐在那裡等他時所問的問題。)(3)如果此時外面有一艘宇宙飛船著陸,你會走進去嗎?如果它可以去任何一個地方,你會要求它把你帶到哪裡?(一家投資銀行的面試官所問的問題。)——凱利,1999年5月3日我們的建議:這幾個問題都具有挑戰性。雖然第一個問題看上去有點不同尋常,是一名女性向另一名女性提出的問題,但你仍需要認真作答,讓對方感到滿意。比較好的回答方式是:「如果你擔心我對私人生活的關注程度大於對工作的關注程度,那麼我想向你保證,我對工作非常投入。同樣,我努力保持平衡的生活,以各種各樣的方式充實我的業餘生活。」這既回答了面試官提出的問題,也沒有侵犯自己的隱私。「你今天為什麼來這里」這樣的問題給你提供了一個闡述自己對這份工作的熱情的機會。如果你不是從這句話的表面意思去看,那麼這就是一個刁鑽的問題。在接受面試時,很重要的一點是,讓自己輕松一點,不要分析每個問題到底是什麼意思。想方設法讓你的回答能夠拉近你與面試官之間的關系,並表明你作為這個職位的應聘者,有著自己的優勢。「我來這里是要和你討論一下我應聘某某工作的問題。你願意聽我介紹一下自己的情況嗎?」(如果面試官那天面試的不止是應聘這個崗位的人,那麼他可能也會提這樣的問題。)宇宙飛船這個問題問的是你有多大的冒險精神。要回答這個問題,需要根據你對自己所應聘的工作的了解好好組織自己的語言。假如這項工作要求你具有創新精神,那麼你可以說:「是的,我會上去,去見見曾經在這個星球上走過的那些最具有創新精神的人,問問他們最喜歡用什麼方式來讓自己盡可能保持創造力。」
5.你是願意做一個大池塘里的一條小魚,還是願意做一個小池塘里的一條大魚?一個小池塘里的一條大魚——那麼池塘就屬於我了,但是沒有什麼可讓我征服的。一個大池塘的一條小魚——這樣的話我就有很多成功的機會!!!——斯科特,1999年5月6日我們的建議:聽起來你回答得不錯,但是你要隨機應變。如果你想在一個大型的財富500強企業覓得一個職位,那麼這個回答很合適。可是如果你是在一家規模不大的企業接受面試,那麼這樣的回答會讓人感覺你做這份工作有些屈才。這個問題沒有最佳答案——只有對於所應聘的工作及當時的情形來說最合適的答案。
微軟面試題面試官詢問的刁鑽問題(2)
如果你的事業能從頭再來,你會有怎樣的變化?沒有什麼……我現在很開心,所以我不想有任何的改變。你目前可以選擇的職業是什麼?「我感興趣的領域有三個……」談談具體的職位和所屬的行業。你認為成功的本質是什麼?根據你對成功的定義,你到目前為止取得了多大的成功?仔細考慮如何作答,並聯系自己在事業上取得的成就。你對我們公司有多少了解?一定要有備而來!花點時間在網上或圖書館里查閱有關這家公司的情況。盡可能多地了解一些信息,包括它的產品、規模、收入、聲譽、形象、管理人才、員工、技能、歷史以及所信奉的哲學等。表現出對公司的興趣;讓面試官向你講述關於這家公司的情況。你為什麼想為我們工作?不要談你想要什麼。首先談他們需要什麼:你希望投身於公司的某項具體計劃;你希望能解決公司存在的某個問題;你能為公司某個具體的目標做出貢獻。你能為我們做些什麼?你能為我們做別人所不能做的什麼事情?以過去的經歷為例,談談你曾經成功地為前僱主解決過可能與這家公司所面臨的問題類似的問題。你認為這份工作最吸引你的是哪些地方?不吸引你的是哪些地方?列舉三個以上吸引你的因素,只列舉一個不吸引你的因素。我們為什麼要僱用你?因為你的知識、經驗、能力和技能。你對這份工作有什麼期望?希望能提供一個利用自己的技能、展示自我並得到別人認可的機會。請告訴我你給你要應聘的這個職位所下的定義是什麼?要簡明扼要——給出一個以行動和成果為主導的定義。你要在多長時間以後才能為我們公司做出重要貢獻?不需要多長時間——你預計在經過短暫的適應期後,你就會為公司做出貢獻。你會在我們這里干多長時間?只要我們彼此都感到我在為公司做貢獻、在取得成績、在進步,我就會幹下去。如果我和你過去的老闆談,你認為他會說你的強項和弱點分別是什麼?強調技能——不要過於否定自己的弱點;無論何時,說自己在某方面的技能仍需改善總比說自己的缺點更安全。你能在有壓力和最後期限的情況下工作嗎?能,商界向來如此。你如何改變自己的工作?當然是讓它越來越完善。你更喜歡管理工作還是生產工作?這取決於是什麼工作,以及它所構成的挑戰。現在看來,你認為自己過去所忽視的問題是什麼?回答要簡練,不要誇誇其談。你認為自己在一個規模、類型不同的公司會有更好的表現嗎?這取決於是什麼工作——談得稍微詳細一些。你如何化解一個攻關小組內部的沖突?首先在私下裡談這個問題。你做過的最困難的一個決定是什麼?設法將自己的答案與應聘這份工作聯系在一起。在此之前,你為什麼沒有找到一個新職位?找個工作很簡單;找到合適的工作就難了。(言外之意是你一直很「挑剔」。)你過去想過要辭去目前的這份工作嗎?如果想過,你認為是什麼讓你沒有立刻辭職?是這份工作所帶來的挑戰,可是現在這種挑戰沒有了。你對自己的老闆有什麼看法?盡可能發表積極的看法。你能形容一下在什麼情況下自己的工作受到批評嗎?盡可能發表積極的看法。你在考慮的還有其他什麼類型的工作及公司?答案要與這家公司所從事的行業有關聯。你為什麼要辭去目前的工作?要在讓自己感到舒服,而且做到誠實的情況下簡練地回答這個問題。如果可能的話,給出一個客觀的理由,比如我們的部門被合並了或取消了。你對失去所有那些好處有什麼感受?有點擔心,但並不驚慌。描繪一下你理想的工作環境。一個公平對待每個員工的工作環境。你如何評價目前就職的這家公司?一家給我帶來許多寶貴經驗的好公司。
微軟面試題微軟公司的面試問題(1)
以下是微軟公司的員工在面試時所遇到的問題。微軟的顧問有時會得到一些特殊待遇,因此在面試時詢問他們的問題並不真的算數,所以沒有列在下面。這些問題往往遵循以下一些基本主題:難題、運算、應用、頭腦。難題★為什麼下水道的井蓋是圓的?
★美國有多少輛車?(一個常見的類似問題是:美國有多少家加油站?)
★美國有多少個下水道井蓋?
★你讓某些人為你工作了七天,你要用一根金條作為報酬。這根金條要被分成七塊。你必須在每天的活幹完後交給他們一塊。如果你只能將這根金條切割兩次,你怎樣給這些工人分?
★一列火車以每小時15英里的速度離開洛杉磯,朝紐約進發。另外一列火車以每小時20英里的速度離開紐約,朝洛杉磯進發。如果一隻每小時飛行25英里的鳥同時離開洛杉磯,在兩列火車之間往返飛行,請問當兩列火車相遇時,鳥飛了多遠?
★假設一張圓盤像唱機上的唱盤那樣轉動。這張盤一半是黑色,一半是白色。假設你有數量不限的一些顏色感測器。要想確定圓盤轉動的方向,你需要在它周圍擺多少個顏色感測器?它們應該被擺放在什麼位置?
★假設時鍾到了12點。注意時針和分針重疊在一起。在一天之中,時針和分針共重疊多少次?你知道它們重疊時的具體時間嗎?
★你有兩個罐子,分別裝著50個紅色的玻璃球和50個藍色的玻璃球。隨意拿起一個罐子,然後從裡面拿出一個玻璃球。怎樣最大程度地增加讓自己拿到紅球的機會?利用這種方法,拿到紅球的幾率有多大?
★中間只隔一個數字的兩個奇數被稱為奇數對,比如17和19。證明奇數對之間的數字總能被6整除(假設這兩個奇數都大於6)。現在證明沒有由三個奇數組成的奇數對。
★一個屋子有一個門(門是關閉的)和3盞電燈。屋外有3個開關,分別與這3盞燈相連。你可以隨意操縱這些開關,可一旦你將門打開,就不能變換開關了。確定每個開關具體管哪盞燈。
★假設你有8個球,其中一個略微重一些,但是找出這個球的惟一方法是將兩個球放在天平上對比。最少要稱多少次才能找出這個較重的球?
★假設你站在鏡子前,抬起左手,抬起右手,看看鏡中的自己。當你抬起左手時,鏡中的自己抬起的似乎是右手。可是當你仰頭時,鏡中的自己也在仰頭,而不是低頭。為什麼鏡子中的影像似乎顛倒了左右,卻沒有顛倒上下?
★你有4瓶葯。每粒葯丸的重量是固定的,不過其中有一瓶葯受到了污染,葯丸的重量發生了變化,每個葯丸增加了一點重量。你怎樣一下子測出哪瓶葯是遭到污染的呢?
★下面玩一個拆字游戲,所有字母的順序都被打亂。你要判斷這個字是什麼。假設這個被拆開的字由5個字母組成:1.共有多少種可能的組合方式?2.如果我們知道是哪5個字母,那會怎麼樣?3.找出一種解決這個問題的方法。
★有4個女人要過一座橋。她們都站在橋的某一邊,要讓她們在17分鍾內全部通過這座橋。這時是晚上。她們只有一個手電筒。最多隻能讓兩個人同時過橋。不管是誰過橋,不管是一個人還是兩個人,必須要帶著手電筒。手電筒必須要傳來傳去,不能扔過去。每個女人過橋的速度不同,兩個人的速度必須以較慢的那個人的速度過橋。第一個女人:過橋需要1分鍾;第二個女人:過橋需要2分鍾;第三個女人:過橋需要5分鍾;第四個女人:過橋需要10分鍾。比如,如果第一個女人與第4個女人首先過橋,等她們過去時,已經過去了10分鍾。如果讓第4個女人將手電筒送回去,那麼等她到達橋的另一端時,總共用去了20分鍾,行動也就失敗了。怎樣讓這4個女人在17分鍾內過橋?還有別的什麼方法?
★如果你有一個5誇脫的水桶和一個3誇脫的水桶,如何准確量出4誇脫的水?
★你有一袋糖,有紅色的,藍色的,綠色的。閉上眼睛,拿出兩塊顏色一樣的糖,你需要拿多少次才能確保有兩塊顏色相同的?
★如果你有兩個桶,一個裝的是紅色的顏料,另一個裝的是藍色的顏料。你從藍色顏料桶里舀一杯,倒入紅色顏料桶,再從紅色顏料桶里舀一杯倒入藍顏料桶。兩個桶中紅藍顏料的比例哪個更高?通過算術的方式來證明這一點。
微軟面試題微軟公司的面試問題(2)
運算
★鏈接表和數組之間的區別是什麼?
★做一個鏈接表,你為什麼要選擇這樣的方法?
★選擇一種演算法來整理出一個鏈接表。你為什麼要選擇這種方法?現在用O(n)時間來做。
★說說各種股票分類演算法的優點和缺點。
★用一種演算法來顛倒一個鏈接表的順序。現在在不用遞歸式的情況下做一遍。
★用一種演算法在一個循環的鏈接表裡插入一個節點,但不得穿越鏈接表
用一種演算法整理一個數組。你為什麼選擇這種方法?
★用一種演算法使通用字元串相匹配。
★顛倒一個字元串。優化速度。優化空間。
★顛倒一個句子中的詞的順序,比如將「我叫克麗絲」轉換為「克麗絲叫我」,實現速度最快,移動最少。
★找到一個子字元串。優化速度。優化空間。
★比較兩個字元串,用O(n)時間和恆量空間。
★假設你有一個用1001個整數組成的數組,這些整數是任意排列的,但是你知道所有的整數都在1到1000(包括1000)之間。此外,除一個數字出現兩次外,其他所有數字只出現一次。假設你只能對這個數組做一次處理,用一種演算法找出重復的那個數字。如果你在運算中使用了輔助的存儲方式,那麼你能找到不用這種方式的演算法嗎?★不用乘法或加法增加8倍。現在用同樣的方法增加7倍。
微軟面試題微軟公司的面試問題(3)
應用
★如何將計算機技術應用於一幢100層高的辦公大樓的電梯系統上?你怎樣優化這種應用?工作日時的交通、樓層或時間等因素會對此產生怎樣的影響?
★你如何對一種可以隨時存在文件中或從網際網路上拷貝下來的操作系統實施保護措施,防止被非法復制?
★你如何重新設計自動取款機?
★假設我們想通過電腦來操作一台微波爐,你會開發什麼樣的軟體來完成這個任務?
★你如何為一輛汽車設計一台咖啡機?
★如果你想給微軟的Word系統增加點內容,你會增加什麼樣的內容?
★你會給只有一隻手的用戶設計什麼樣的鍵盤?
★你會給失聰的人設計什麼樣的鬧鍾?
微軟面試題微軟公司的面試問題(4)
頭腦
★如果你有一個許多部件可以拆卸的時鍾,你將它一塊塊拆開,但是沒有記住是怎樣拆的。然後你將各個零件重新組裝起來,最後發現有三個重要零件沒有放進去。這時你如何重新組裝這個時鍾?
★如果你需要學習一門新的計算機語言,你會怎樣做?
★假設由你負責設計比爾·蓋茨的衛生間。當然,錢不成問題,但是你不可以和比爾談。你會怎樣做?
★到目前為止,你遇到的最難回答的問題是什麼?
★如果微軟公司說,我們願意投資500萬美元用來開發你提出的方案。那麼你會做什麼?為什麼?
★如果你將世界上所有的計算機製造商召集起來,告訴他們必須要做一件事,你會讓他們做什麼事?
★如果你在五年內會得到一筆獎金,你認為會是因為什麼?關注你的成績的人會是誰?
★你如何教自己的奶奶使用微軟Excel表格系統?
★為什麼當我們在任何一家賓館打開熱水龍頭時,熱水會馬上流出來?
★你為什麼想在微軟工作?
★假設你回到家,進入自己的房間,打開電燈開關,可是一點反應都沒有——燈沒有亮。這時,你在判斷問題出在哪裡時,會依次採取怎樣的做法?
由於有很多問題,而網路篇幅太小,如果你要的話,留個郵箱我發給你。。。。
『叄』 進入IT企業必讀的200個 .NET面試題的目 錄
第1章 應聘開發職位的技巧和禁忌 1
程序員在准備面試的過程中,有時會過分注重技術上的准備工作,事實上,一些非技術的准備工作也相當重要。掌握好應聘技術職位過程中的軟技巧、准備一份出色的簡歷、提高警惕避免在應聘中觸犯一些禁忌,可以大大地提高面試的成功率。在開始面試時,還要把握一些強勢的招聘網站,給自己一個展現自我的平台。本章從了解、准備、開始,層層漸進,讓讀者對整個程序員面試的過程有個全局性的掌握。
1.1 技術職位需要怎樣的人才——了解大環境 1
1.1.1 對技術的執著和熱情 1
1.1.2 對編程始終抱有認真的態度 1
1.1.3 實事求是的態度和謙遜的品質 1
1.1.4 適合應聘公司的文化 1
1.2 一份出色的個人簡歷——面試准備 2
1.2.1 一份簡歷不宜超過一頁 2
1.2.2 永遠准備中文簡歷 2
1.2.3 不要在個人簡歷上註明希望薪水 2
1.2.4 簡歷模板 2
1.3 展現自我——開始發簡歷 3
1.3.1 應聘渠道 3
1.3.2 應聘流程 7
1.4 真正的面試——開始面試 8
1.4.1 筆試 8
1.4.2 面試 10
1.4.3 電話面試 10
1.4.4 網路考試 10
1.5 面試中的一些禁忌 11
1.6 小結 12
第2章 .NET框架基礎 13
本章覆蓋了.NET面試筆試中常見的.NET框架技術題。此類題目側重於考查應聘者對於.NET機制的深入了解,徹底理解.NET的運行機制,並且熟悉一個.NET系統常用的管理部署方法。
2.1 .NET基礎概念 13
2.1.1 什麼是CTS、CLS和CLR 13
2.1.2 開發和運行.NET程序需要的
最基本環境是什麼 15
2.1.3 .NET是否支持多編程語言開發 15
2.1.4 CLR技術和COM技術的比較 17
2.1.5 什麼是程序集和應用程序域 18
2.2 .NET運行機制 20
2.2.1 .NET程序被編譯成什麼形式的代碼 20
2.2.2 JIT是如何工作的 22
2.2.3 簡述程序集的載入機制 23
2.2.4 如何配置程序集的版本策略 25
2.3 生成、部署和管理 27
2.3.1 如何生成強簽名的程序集 27
2.3.2 如何把程序集放入GAC中 29
2.3.3 延遲簽名及其作用 30
2.3.4 程序集的版本分哪幾部分 32
2.4 名企面試真題 32
2.5 小結 33
第3章 .NET類型語法基礎 34
本章覆蓋了.NET面試筆試中最基礎的語法和類型題。縱觀.NET的面試題,此類題目涉及了最基礎的知識點,其難度也相對最小。但是應聘者如果對此類的面試題回答得不正確或者不完整,將會給面試官留下技術水平較差的印象,建議讀者對本章的題目做到深刻理解和掌握。
3.1 基礎類型和語法 34
3.1.1 .NET中所有內建類型的基類是什麼 34
3.1.2 System.Object中包含哪些方法,哪些是虛方法 35
3.1.3 值類型和引用類型的區別 37
3.1.4 簡述裝箱和拆箱原理 40
3.1.5 C#中是否有全局變數 43
3.1.6 struct和class的區別,
struct適用哪些場合 43
3.1.7 類型的初始化器何時被調用 44
3.1.8 C#中方法的參數可以有哪幾種傳遞方式 47
3.1.9 C#中string和String有什麼區別 50
3.1.10 .NET支持哪幾種可訪問性級別,C#實現了其中的哪幾種 50
3.1.11 簡述屬性的特點及屬性和方法的異同 51
3.1.12 簡述C#中的淺復制和深復制 54
3.1.13 簡述C#中的循環語法和各自的特點 57
3.1.14 C#中的using語句有什麼作用 60
3.2 內存管理和垃圾回收 62
3.2.1 簡述.NET中堆棧和堆的特點和差異 62
3.2.2 執行string abc=aaa+bbb+ccc共分配了多少內存 64
3.2.3 .NET中GC的運行機制 66
3.2.4 Dispose方法和Finalize方法在何時被調用 67
3.2.5 GC中代(Generation)是什麼,一共分幾代 70
3.2.6 GC機制中如何判斷一個對象是否仍在被使用 71
3.2.7 .NET的託管堆中是否可能出現內存泄漏現象 72
3.3 面向對象的實現 75
3.3.1 C#中類可以有多個父類、可以實現多個介面嗎 75
3.3.2 簡述C#中重寫、重載和隱藏的概念 76
3.3.3 為什麼在構造方法中調用虛方法會導致問題 78
3.3.4 在C#中如何聲明一個類不能被繼承 82
3.4 異常的處理 82
3.4.1 如何針對不同的異常進行捕捉 82
3.4.2 如何使用Conditional特性 84
3.4.3 如何避免類型轉換時的異常 86
3.5 名企面試真題 88
3.6 小結 89
第4章 字元串、集合和流的使用 90
字元串、集合和流在程序中處理數據時經常被用到,這些代碼的編寫將直接影響到系統的正確性和效率。本章將包含關於字元串、集合和流的常見面試題,並且通過分析這些題目和知識點,幫助讀者梳理這些方面的知識。
4.1 字元串處理 90
4.1.1 System.String是值類型還是引用類型 90
4.1.2 StringBuilder類型有何作用 91
4.1.3 如何在String和Byte[]對象之間進行轉換 92
4.1.4 簡述BASE64編碼的作用以及C#中對其的支持 94
4.1.5 SecureString的實例如何被分配和釋放 96
4.1.6 什麼是字元串池機制 98
4.2 常用集合和泛型 99
4.2.1 Int[]是引用類型還是值類型 99
4.2.2 數組之間如何進行轉換 100
4.2.3 解釋泛型的基本原理 102
4.2.4 什麼是泛型的主要約束和次要約束 104
4.2.5 .NET中是否可用標准模板庫(STL) 105
4.3 流和序列化 106
4.3.1 什麼是流,.NET中有哪些常見的流 106
4.3.2 如何使用壓縮流 109
4.3.3 Serializable特性有何作用 111
4.3.4 .NET提供了哪幾種可進行序列化操作的類型 113
4.3.5 如何自定義序列化和反序
列化的過程 116
4.4 名企面試真題 119
4.5 小結 119
第5章 常用類和介面 120
.NET除了提供運行引擎之外,還提供了豐富的內建類型。理解這些類型的作用和機制,能夠幫助程序員減少代碼工作,編寫高效簡潔的代碼。而有時候誤用類型,則會導致性能的降低,更嚴重時則會為系統帶了潛伏的bug。本章將介紹一些經常出現在.NET面試中的類型和介面。
5.1 類型的基類System.Object 120
5.1.1 是否存在不繼承自System.Object類型的類 120
5.1.2 在System.Object中定義的三個比較方法有何異同 122
5.1.3 如何重寫GetHashCode方法 125
5.2 時間的操作System.DateTime 127
5.2.1 DateTime如何存儲時間 127
5.2.2 如何在DateTime對象和
字元串對象之間進行轉換 127
5.2.3 什麼是UTC時間,如何轉換到UTC時間 130
5.3 IFormattable和IformatProvider的使用 131
5.3.1 如何使用IFormattable介面實現格式化輸出 131
5.3.2 如何告訴類型格式化輸出的方式 133
5.4 管理文件和文件夾的類型 135
5.4.1 如何操作文件和文件夾 135
5.4.2 如何實現文件和文件夾的監控功能 139
5.5 .NET中的定時器 141
5.5.1 .NET提供了哪幾個定時器類型 141
5.5.2 .NET的內建定時器類型
是否會發生回調方法重入 146
5.6 名企面試真題 151
5.7 小結 151
第6章 .NET中的高級特性 152
本章的內容覆蓋了諸如委託、事件、反射和特性等.NET框架中的高級特性。對這些特性的掌握和成熟運用,往往成為.NET程序員從入門級進階到中級的判斷標准。也正因為如此,此類題目在.NET技術筆試、面試中被大量採用。讀者在閱讀本章時,應力求做到知其然更知其所以然,充分理解各種特性在.NET框架下是如何實現的,這樣的設計如何提高了程序的靈活性和可擴展性。
6.1 委託 152
6.1.1 請解釋委託的基本原理 152
6.1.2 委託回調靜態方法和實例方法有何區別 154
6.1.3 什麼是鏈式委託 154
6.1.4 鏈式委託的執行順序是怎麼樣的 156
6.1.5 可否定義擁有返回值的方法的委託鏈 157
6.1.6 委託通常可以應用在哪些場合 159
6.2 事件 165
6.2.1 請解釋事件的基本使用方法 165
6.2.2 事件和委託有何聯系 167
6.2.3 如何設計一個帶有很多事件的類型 169
6.2.4 用代碼表示如下情景:貓叫、老鼠逃跑、主人驚醒 173
6.3 反射 175
6.3.1 請解釋反射的基本原理和其實現的基石 176
6.3.2 .NET提供了哪些類型來實現反射 179
6.3.3 如何實現動態地發射程序集 184
6.3.4 如何利用反射來實現工廠模式 188
6.3.5 如何以較小的內存代價保存
Type、Field和Method信息 194
6.4 特性 196
6.4.1 什麼是特性,如何自定義一個特性 196
6.4.2 .NET中特性可以在哪些元素上使用 198
6.4.3 有哪幾種方法可以獲知一個元素是否申明某個特性 200
6.4.4 一個元素是否可以重復申明同一個特性 202
6.5 名企面試真題 204
6.6 小結 204
第7章 .NET多線程編程 205
多線程編程是每個技術框架下都需要面對的問題,在多CPU、多核的硬體架構逐漸普及的今天,多線程編程也漸漸變得更加重要。本章將集中覆蓋關於.NET中多線程編程的面試題。
7.1 多線程編程的基本概念 205
7.1.1 請解釋操作系統層面上的線程和進程 205
7.1.2 多線程程序在操作系統里是並行執行的嗎 206
7.1.3 什麼是纖程 207
7.2 .NET中的多線程編程 208
7.2.1 如何在.NET程序中手動控制多個線程 208
7.2.2 如何使用.NET的線程池 212
7.2.3 如何查看和設置線程池的上下限 215
7.2.4 如何定義線程獨享的全局數據 217
7.2.5 如何使用非同步模式讀取一個文件 221
7.2.6 如何阻止線程執行上下文的傳遞 223
7.3 多線程程序的線程同步 227
7.3.1 什麼是同步塊和同步塊索引 227
7.3.2 C#中的lock關鍵字有何作用 229
7.3.3 可否使用值類型對象來
實現線程同步 232
7.3.4 可否對引用類型對象自身進行同步 233
7.3.5 什麼是互斥體,Mutex類型和Monitor類型的功能有何區別 235
7.4 名企面試真題 238
7.5 小結 238
第8章 ASP NET應用開發 239
ASP NET是微軟公司提供的編寫動態網站的技術框架,其特點是基於.NET框架基礎,所有ASP NET程序都可以使用針對.NET的語言編寫。在微軟公司的Visual Studio開發平台中,實現了拖放控制項等便捷的功能,使得ASP NET應用程序的開發效率得到了較大的提高,近些年來ASP NET技術逐漸成為網站開發的主流技術之一,本章將覆蓋一些常見的關於ASP NET開發的面試題。
8.1 ASP NET應用開發基礎 239
8.1.1 請解釋ASP NET以什麼形式運行 239
8.1.2 常見的HTTP Code有哪些 242
8.1.3 GET請求和POST請求有何區別 245
8.1.4 介紹ASP NET的頁面生存周期 247
8.2 控制項和頁面 249
8.2.1 什麼是靜態頁面,什麼是動態頁面 250
8.2.2 請簡述ViewState的功能和實現機制 251
8.2.3 Session有哪幾種存儲方式,之間有何區別,如何進行設置 255
8.2.4 如何嵌套使用GridView控制項 259
8.2.5 列舉幾種實現頁面跳轉的方法,並說明其實現機制 263
8.2.6 請解釋<%# Eval(source)%>的功能和實現機制 270
8.2.7 ObjectDataSource控制項有何作用 273
8.3 驗證和安全 277
8.3.1 如何使用正則表達式來驗證一個
上海市電話號碼 277
8.3.2 介紹ASP NET驗證控制項的功能和
使用方法 280
8.3.3 如何防止SQL注入式攻擊 287
8.4 名企面試真題 289
8.5 小結 289
第9章 .NET中的資料庫開發 290
大部分系統都會包含資料庫應用。資料庫應用設計往往成為系統設計中最重要的組成之一,這其中不止包括資料庫的架構、庫結構的設計,也包括了程序訪問資料庫策略的設計。在.NET的程序開發中,ADO NET已經成為訪問資料庫最主要的組件框架。本章將覆蓋和資料庫訪問及ADO NET有關的常見面試題,具體會覆蓋ADO NET基本概念、資料庫的鏈接、資料庫讀寫等主題。
9.1 ADO NET和資料庫程序基礎 290
9.1.1 什麼是關系型資料庫 290
9.1.2 如何通過SQL語句來實現行列轉換 291
9.1.3 ADO NET支持哪幾種數據源 293
9.2 ADO NET和資料庫的連接 295
9.2.1 請簡要敘述資料庫連接池的機制 295
9.2.2 如何提高連接池內連接的重用率 298
9.2.3 一個連接字元串可以包含哪些屬性 300
9.2.4 CommandBehavior.CloseConnection有何作用 302
9.3 使用ADO NET讀寫資料庫 305
9.3.1 ADO NET支持哪兩種方式來訪問關系資料庫 305
9.3.2 什麼是強類型的DataSet 309
9.3.3 請解釋SqlDataAdapter的
基本工作機制 312
9.3.4 如何自動生成SqlDataAdapter的
更新命令 316
9.3.5 如何實現批量更新的功能 319
9.4 名企面試真題 321
9.5 小結 321
第10章 XML的應用和處理 322
XML可算是近10年來最炙手可熱的技術之一,由於其跨平台的特性,很多技術應用都選擇基於XML來進行發展。在.NET中,對XML的支持和應用隨處可見。例如配置文件的格式、數據結構的表示、Web Service應用等,都是以XML語法為基礎的。本章將詳細覆蓋常見的關於XML本身及其在.NET中應用的面試題。
10.1 XML的基本特性 322
10.1.1 什麼是XML 322
10.1.2 簡述XML的常用領域及其優勢 323
10.1.3 XML中<![CDATA[ ]]>標簽的作用 324
10.1.4 XML規范是否允許空的屬性值 325
10.1.5 XML中如何處理諸如「<」的字元 326
10.1.6 XML中的命名空間如何使用 328
10.2 使用.NET組件讀寫XML 330
10.2.1 .NET中操作XML的基本類型有哪些 330
10.2.2 如何使用XmlDocument類型操作XML文檔的節點和屬性 334
10.2.3 如何使用XPath來指向帶有屬性的節點 337
10.2.4 .NET中如何驗證一個XML文檔的格式 338
10.2.5 .NET中XML文檔和關系模式如何轉換 340
10.3 利用XSLT處理XML文檔 344
10.3.1 什麼是XSLT,XSLT有何作用 344
10.3.2 如何使用XSLT中的模板 346
10.3.3 如何在XSLT文檔中調用
其他XSLT文檔 349
10.3.4 如何在代碼中使用XSLT文檔 351
10.4 名企面試真題 353
10.5 小結 353
第11章 Web Service的開發與應用 354
Web Service是一種網路服務,形式非常類似於當前智能手機上的應用。通過通用的規范,Web Service技術允許使用者訪問網路上每一個Web Service所提供的服務。在網路快速發展的今天,這種基於網路的分布式服務已經被廣泛地應用。本章將討論關於.NET中如何應用Web Service的面試題。
11.1 SOAP和Web Service的基礎概念 354
11.1.1 請簡述SOAP協議 354
11.1.2 什麼是WSDL,它有何作用 356
11.1.3 Web Service中如何處理附件 357
11.2 使用.NET開發Web Service 360
11.2.1 如何在.NET中創建Web Service 360
11.2.2 WebMethod特性包含哪些屬性,各有何用處 363
11.2.3 如何生成Web Service代理類型 367
11.2.4 請簡述.NET中Web Service的異常機制 368
11.3 Web Service的安全機制 371
11.3.1 請簡要介紹WS-Security的簽名機制 371
11.3.2 WS-Security規范申明了哪幾種身份驗證的方法 373
11.4 名企面試真題 375
11.5 小結 375
第12章 .NET Remoting分布式應用開發 376
在企業級應用開發中,分布式開發占據了越來越重要的地位。.NET Remoting是一種可擴展性很高的分布式開發技術,相對於DCOM、CORBA、RMI等分布式開發技術而言,.NET Remoting擁有著眾多獨特的優勢。.NET Remoting是一個龐大的技術話題,如果詳細展開的話可能要佔據一本書的篇幅。本章主要針對那些經常出現在.NET面試中的、與Remoting基礎相關的面試題。
12.1 .NET Remoting框架基礎 376
12.1.1 請簡要介紹.NET Remoting的運行機制 376
12.1.2 請列舉.NET Remoting機制中有哪些組件可以擴展替換 379
12.1.3 請簡述.NET Remoting生存周期機制 384
12.2 使用.NET Remoting進行分布式應用開發 387
12.2.1 請介紹服務端激活模式和客戶端激活模式的區別 387
12.2.2 請簡述Remoting中有哪幾種遠程調用方式 390
12.2.3 Remoting機制中如何處理以ObjRef為參數的方法調用 393
12.2.4 請簡述Remoting中配置文件的使用 397
12.2.5 如何在客戶端和伺服器端共享遠程對象類型 400
12.3 名企面試真題 404
12.4 小結 404
第13章 代碼和演算法 405
無論是面試還是筆試,演算法和代碼的問題都是必不可少的,其區別僅在於筆試中更側重於應聘者書寫代碼的能力,而面試中則更注重於應聘者的設計能力和演算法思路。本章著重覆蓋了一些在.NET面試中經常出現的和代碼、演算法有關的面試題,並且給出了解答思路和實現示例。
13.1 基礎演算法題 405
13.1.1 請實現一個快速排序演算法 405
13.1.2 請實現一個二分查找演算法 406
13.1.3 請實現一棵二叉樹的中序、後序遍歷 408
13.1.4 請寫出一個奇偶分割演算法 413
13.1.5 請實現一個簡單的最短路徑演算法 414
13.2 程序設計題 423
13.2.1 請編程實現斐波拉契數列問題 423
13.2.2 請設計窗口程序演示八皇後問題 425
13.3 名企面試真題 432
13.4 小結 432
第14章 .NET中的單元測試 433
單元測試是軟體開發中必不可少的一個環節,單元測試的優劣直接影響到集成測試、系統測試的效果,甚至會影響到最終產品的質量。大多數開發團隊對單元測試非常重視,並且要求程序員掌握相應的知識。本章將覆蓋在.NET面試中經常出現的關於單元測試的面試題。
14.1 單元測試基礎概念 433
14.1.1 請簡述單元測試的作用和其優點 433
14.1.2 請舉例說明TDD開發方式的流程 434
14.1.3 請編寫實現階乘功能模塊的測試用例 437
14.2 使用NUNIT進行單元測試 439
14.2.1 如何使用NUNIT來進行單元測試 439
14.2.2 如何對NUNIT的測試用例進行分類 442
14.2.3 請解釋SetUp、TearDown、TestFixtureSetUp和
TestFixtureTearDown 446
14.3 名企面試真題 448
14.4 小結 448
『肆』 微軟的面試會提問哪些問題
如果是校園招聘,一般是數據結構、演算法,不過要英語厲害,有印度工程師直接出演算法題面試;如果電話面試,一般問一下專業和編程語言中的一些概念;
『伍』 微軟面試題:1——100000(十萬)之間的數字有多少個9(註:99是兩個9)Int整數,不包含帶小數點的。
輸出結果
1-100000之間,9出現的個數為50000
演算法思路:
(1)先將1-n 的整數全部轉化為 n 個字元串。
(2)統計每個字元串中,字元串"9"出現的個數;累計即可。
『陸』 面試時很緊張,腦子里一片空白,都不知要說什麼好了
看一下他們怎麼用人,你要根據他們的方法調整一下你自己就可以了
.1 最重要的僱傭標准
Fog Creek公司最重要的僱傭標準是:有頭腦, 並且完成工作。
就是這些了。記住這條標准。我們公司的目標之一就是僱傭擁有這樣潛質的人,而不是僱傭懂某些技術的人。任何人所擁有的某些具體技術都會在幾年內過時,所以,僱傭有能力學習新技術的人,要比僱傭那些只在這一分鍾知道SQL編程是怎麼回事的人對公司更劃算。
雜志首頁 — 業界動態
|
焦點
|
人物
|
熱點技術
|
開發實戰
|
項目管理
|
工程應用
|
GIS人才
輕松面試 搞定技術奇才
如何做一名出色的面試經理
有頭腦確實是一個很難定義的品質。但通過面試時提問的一些問題,就可以找出擁有這種品質的人。完成工作非常關鍵。看起來有頭腦但是不能完成工作的人經常擁有博士學位,在大公司工作過,比起准時交貨,他們寧願對於一些學院派的東西沉思。這些人由以下特性可以識別出來。他們總是愛指出兩個根本不同的概念間的相似性。例如,他們會說「Spreadsheets是一種特殊的編程語言」,然後花一個禮拜寫一篇動人的、智慧的白皮書。這篇白皮書論述了作為一種編程語言,spreadsheet關於計算語言特性的方方面面。他們聰明,但是沒用。
下面,我們來看完成工作但是沒有頭腦的人。他們愛做蠢事。通過製造新的工作,他們成為了公司的負債而不是資產。因為他們不僅沒有為公司貢獻價值,還浪費了好多人的時間。這些人通常到處粘貼大堆的代碼,而不願意寫子程序。他們是完成了工作,但不是以最聰明的方式完成工作。
面試時最重要的法則
面試時最重要的法則是: 做決定。
面試結束時,對於被面試者,你不得不做一個直截了當的決定。這個決定只有兩個:僱傭或者不僱傭。
沒有其他的答案。永遠不要說,「僱傭你,但不是在我的團隊中」。這是非常粗魯的,所以就盡可簡單的把這句話變成「不僱傭」。如果某個人在特定領域很能幹,但在別的隊伍中表現不好,答案也是不僱傭。某些情況下你發現了一個擁有某些特殊能力的白痴專家,他對於SQL非常、非常的精通,但除此之外什麼也不會,答案還是:不僱傭。在Fog Creek公司,他們沒有將來。
永遠不要說,「也許,我吃不準」。如果你不能做出決定,那也意味著不僱傭。最重要的是記住這點:寧可錯失一千,不可放過一個。一個不合格的求職者如果進了公司,將消耗公司大量的金錢和精力。還要浪費其他優秀員工的時間來修復這個人的錯誤。總之,無論尋找合適的應聘者有多麼困難,也永遠不要降低你的標准。
如何作出僱傭或者不僱傭這樣艱難的決定?答案只有一個:這個人有頭腦嗎?這個人能完成工作嗎?要想做到正確的判斷,面試時你必須問對問題。
開個玩笑,下面我要問個有史以來最差的面試問題:「Oracle 8i中的數據類型varchar和varchar2有什麼區別」?這是一個可怕的問題。掌握這種瑣碎的技術細節和Fog Creek公司想僱傭你之間沒有任何聯系。誰會去記這種東西?如果有在線幫助,你可以在15秒內找到答案。實際上,還有更差的問題,等會我們會談到。
面試時應提哪些問題
現在我們要談到有趣的部分了:面試時提哪些問題。我的面試問題清單來自於我去微軟公司找第一份工作的經歷。這里實際上有幾百個微軟面試問題。每個人都有偏愛的問題。你也可以發展一套自己的面試問題以及面試的個人風格,這樣就可以比較容易地做出僱傭/不僱傭的決定。以下是我成功使用過的一些面試技巧。
面試前,讀一遍應試者的簡歷,然後在一張紙片上寫下面試計劃。這個計劃實際上就是問題清單。以下是一個例子(用來面試程序員的):
1. 介紹 2. 應試者參加過的項目
3. 不可能的問題 4. C語言函數
5. 你滿意嗎? 6. 設計問題
7. 挑戰 8. 你還有什麼問題?
面試前,我會非常當心,避免自己先入為主。面試就像一個非常精巧的天平。一小時的面試結束後就要對一個人下結論是不容易的(但是你又必須在面試結束後得到結論)。一些不起眼的細節可能會影響最後的結論。所以,如果你在面試前就對應試者作一點了解,就好比天平的某一端加重了砝碼。這樣面試本身就會失去原有的價值。
記得有一次面試前,一位獵頭公司的人跑進房間說,「你會喜歡這個傢伙的」。當這個傢伙開始說蠢話時,我對自己說,「他應該是個例外,也許是大智若愚。」於是,我帶著玫瑰色眼鏡看他,並最終以「僱傭」結束了面試,雖然他是一個糟糕的員工。這次面試對我的教訓是,不要聽別人的話,不要在面試前四處打探這個應試者的情況。最重要的是不要和別的主考官談論應試者,除非你們都已經做出了獨立的判斷。這是科學。
1.3.1 介紹
作為面試的第一步,介紹的目的是讓應試者放鬆。我通常花30秒鍾,講一下我是誰,接下來面試會如何進行。我總是使應試者確信,我們關心的是他如何解決問題的,而不是他的最終答案是對還是錯。順便說一下,面試時,你不要和應試者隔桌而坐,否則你們間就有了一個障礙,並且暗示著一種比較正式嚴肅的氣氛,這樣應試者就很難放鬆了。較好的辦法是把桌子靠牆,或者和應試者坐在桌子的同一邊,這樣有助於應試者放鬆。只有應試者不因為緊張而表現失常,你才能更有效的進行面試。
1.3.2 應試者參加過的項目
第二步就是了解應試者最近做了什麼項目。對於那些剛離開校門的學生娃,就問他與學位論文相關的項目,或者問一下他們最喜歡的課程。例如,有時候我會問,「你最喜歡上學期哪門課程?不一定要和計算機相關。」這時你發現這名應屆生檔案中選修與音樂相關的課程遠遠大於計算機課程,但他卻回答最喜歡的是《面向對象資料庫》。實際上,如果他承認喜歡音樂勝過計算機,我會更高興。當面試有工作經驗的人員時,可以讓他們談談前一份工作。
問這個問題的目的是尋找一種品質:熱情。在應試者談到他最近做過的項目時,如果能觀察到以下跡象,那都是很不錯的:
談到他們做過的項目時變得熱情洋溢;語速更快,語言更生動活潑。這說明他們對某些東西有興趣,有熱情。即使他們激動地表達對做過項目的負面感情,這也是一個好的信號。「我曾經為前一個老闆安裝Foo Bar Mark II,但他是個傻瓜!」表現出熱情的人就是我們要僱傭的人。差的應試者對工作不關心,所以根本不會激動。一個非常好的信號是當應試者很激動地談論上一份工作,以至於暫時忘記了他們正在被面試。有時候應試者剛開始面試時表現得很緊張,通常我會忽略不計,但是當他們談到Computational Monochromatic Art時,激動的以至於忘記拘謹。不錯,我喜歡這樣的應試者,因為他們關心自己所做的事。
他們非常小心地解釋事物。我曾經拒絕了一些應試者,因為在談到他們做過的項目時,滿口都是普通人不能理解的術語。如果應試者開始滿口行話了,告訴他,「能幫個忙嗎?你能把剛才所說的用我祖母也能理解的語言再講一遍嗎?」這時會有許多應試者還是使用術語,沒有人能夠理解他們在說什麼。天哪!
如果所做項目是一個團隊項目,看看他們是否有承擔領導責任的跡象?一個應試者可能會說:「我們用X方法,但老闆說Y方法,而客戶要求用Z。」我會問,「那你是怎麼做的?」一個好的答案可能是「我設法和團隊中其他人開會,然後一起商量出辦法……」壞的回答是,「嗯,我沒辦法,這樣的問題我解決不了」。記住,聰明並且能完成工作。要搞清楚某人是否能完成工作的一個辦法就是看他過去是否傾向於完成任務。事實上,你可以主動要求他們給你例子,證明他們能擔任領導角色,完成任務——例如克服公司的陳規陋習等。
1.3.3 面試時無法回答的問題
現在談談清單上的第三款,無法回答的問題。這很有趣。這個主意的關鍵在於問一些不可能有答案的問題,就是想看一下應試者怎麼辦,如「西雅圖有多少眼科醫生?」「華盛頓紀念碑有多重?」「洛杉機有多少加油站?」「紐約有多少鋼琴調音師」等等。
聰明的應試者猜到你不是在測驗他們的專業知識,他們會積極地給出一個估計。「嗯,洛杉機的人口是七百萬;每個人平均擁有2.5輛轎車…….」如果他們的估計完全錯了也沒有關系。重要的是他們能積極地試著回答問題。他們可能會試著搞清楚每個加油站的儲量。「嗯,需要4分鍾給一個儲油罐加滿油,一個加油站有10個油泵每天運行18個小時……」他們也可能試著從佔地面積來估計。有時候他們的創造力會使你吃驚,因為他們問你要洛杉機的的黃頁。這都是好跡象。
不聰明的應試者則被難住了。他們目瞪口呆地望著你,好像你來自火星。你不得不提示:「如果想建一個象洛杉機那麼大的城市,你需要多少個加油站?」你還可以提示他們:「加滿一個儲油罐要多長時間?」但是不聰明的應試者還是傻傻地坐在哪裡,等著你繼續提示下去,直到你自己解答了問題。這些人不是問題的解決者,我們不想和他們一起工作。
1.3.4 編程問題
關於編程問題,我通常要求應試者用C語言寫一些小函數。以下是我通常會出的題目:
1將一個字元串逆序
2將一個鏈表(linked list)逆序
3計算一個位元組(byte)里有多少bit被置1
4搜索給定的位元組(byte)
5在一個字元串中找到可能的最長的子字元串,該字元串是由同一字元組成的
6字元串轉換成整數
7整數轉換成字元串(這個問題很不錯,因為應試者要用到堆棧或者strrev函數)
注意,通常你不會希望他們寫的代碼多於5行,因為你沒有時間理解太長的代碼。
現在我們來看一下這些問題的詳細內容:
第一個問題:逆序一個字元串。至今為止,每一個應試者第一次解答這道題目時都答錯了。所有的應試者都試圖動態生成緩沖區,然後將逆序的字元串輸出到該緩沖區中。問題的關鍵在於,誰負責生成這個緩沖區?誰又負責釋放那個緩沖區?通過這個問題,我發現了一個有趣的事實,就是大多數認為自己懂C的人實際上不理解指針和內存的概念。這真叫人吃驚,他們不懂這個基本概念卻可以做程序員?這個問題可以從多個角度判斷應試者:
他們的函數運行快嗎?看一下他們多少次調用了strlen函數。我曾經看到應試者寫的strrev的演算法竟然只有O(n^2) 的效率,而標準的演算法效率應該是O(n),效率如此低下的原因是因為他們在循環中一次又一次地調用strlen函數。
他們使用指針運算嗎(譯者按:原文為pointer arithmetic,指的是加減指針變數的值)?這是一個好現象。許多所謂的「C程序員」竟然不知道如何使用指針運算。當然,我在前文說過我不會因為應試者不掌握一種特定的技巧而拒絕他。但是,理解C語言中的指針不是一種技巧,而是一種品質。每年一所大學要招進200多個計算機系的新生,所有這些孩子很小時就開始用BASIC語言在Atari 800s寫冒險游戲了。在大學里他們還學Pascal語言,學得也很棒。直到有一天他們的教授開始教C語言,突然,他們開始搞不懂了。他們就是不能再理解C語言中的任何東西了。於是90%的計算機系學生轉系去學政治。為了挽回面子,他們告訴朋友,之所以轉系是因為他們計算機系英俊貌美的異性太少。許多人註定腦子里就沒有理解指針的那根弦。所以說理解指針是一種與生俱來的品質,而不是一種單純的技巧。理解指針需要腦子轉好幾個彎,某些人天生不擅長轉這幾個彎。
通過第三個問題,你可以觀察到他們對於bit操作運算符掌握得怎麼樣?但是這是一種技巧,不是一種品質,所以你可以幫助他們。有趣的是你觀察他們建立了一個子函數用來計算byte中為1的位的數目,然後你要求他們優化這個子函數,大大加快這個函數的運行速度。真正聰明的應試者會使用查表演算法(畢竟這個表只有256個元素,用不了多少內存),整個表只需要建立一次。你還可以和這個聰明的應試者討論一下如何權衡演算法的效率和演算法佔用的內存。更深入一點:告訴他們你不想在程序啟動時初始化查詢表。厲害的程序員會建議第一次計數時使用普通演算法,同時將查詢結果緩沖到查詢表中。某些天才程序員在計算那個查詢表時,甚至試圖使用已經使用過的模式。
當你觀察應試者寫C代碼時,以下技巧會有所幫助:
事先向應試者說明。這完全理解,沒有一個好的編輯器只在紙上寫代碼是困難的,所以你不在乎他們手寫的代碼是否看上去整潔。你也完全明白沒有好的編譯器和調試器,很難第一次就寫出完全沒有bug的程序,所以請他們不必為此擔心。
優秀程序員的標志:優秀程序員寫完「{」符號後,通常立刻跟上「}」符號,然後再在當中填上代碼。他們也傾向於使用命名規則,雖然這個規則可能很原始。如果一個變數用作循環語句的索引,優秀的程序員通常使用盡可能少的字元為它命名。如果他們循環語句的索引變數的名字是,顯而易見他們寫代碼的經驗還不夠多。偶爾,你會看到一個C程序員寫下象if (0==strlen(x))一樣的代碼,常量被放在==的左邊。這是一個好的標志。說明程序員理解了在C中=和==易於混淆。
優秀程序員在寫代碼前會訂一個計劃,特別是當他們的代碼用到了指針時。例如,如果你要求逆序一個鏈表,優秀程序員通常會在紙的一邊畫上鏈表的草圖,並表明演算法中的索引指針當前移動到的位置。他們不得不這樣做。正常人是不可能不藉助草圖就開始寫一個逆序鏈表的程序的。而低水平的程序員則立刻開始寫代碼。
1.3.5 你對代碼滿意嗎?
不可避免的,你會在他們的程序中發現bug,下面我們來看第五個問題:你對代碼滿意嗎?你可能想問,「好吧,bug在哪裡?」這是很糟糕但又一針見血的問題,要回答這個問題可要大費口舌。所有的程序員都會犯錯誤,這是真理。程序員必須找出這些錯誤。對於字元串操作的函數,他們通常會忘記在輸出緩沖區加上字元串結束符。所有的函數,他們都會犯off-by-one錯誤(譯者按:指的是某個變數的最大值和最小值可能會和正常值差1)。他們會忘掉正常的C語句結尾的分號。如果輸入是零長度字元串,他們的函數會運行錯誤。如果malloc調用失敗而他們沒有為此寫好錯誤處理代碼,程序會崩潰。很少見的,一個程序員第一次寫完的代碼就完全沒有錯誤。這時你可以問一個更有趣的問題,你說,「代碼里有一個bug」。他們會再仔細地復查一遍代碼,然後你就可以饒有興趣地觀察他們是否禮貌但是堅定地堅持自己的代碼是否是完美的……總之,在程序員寫完代碼後,問一下他們是否對代碼滿意,就像美國ABC電視網游戲節目主持人Regis常問的那樣「這是你最後的答案嗎?」
1.3.6 設計問題
第六部分:關於設計的問題。讓應試者設計某種東西。Excel的原始設計者Jabe Blumenthal喜歡讓應試者設計房子。Jabe說,曾經有一個應試者跑到白板前,畫了一個方塊,這就是他的全部設計。立刻拒絕這樣的傢伙。再想一想你喜歡問什麼樣的設計問題呢?
好的程序員會問更多的信息。房子為誰建造?我們公司的政策是,我們不會僱傭那些在設計前不問為誰設計的人。通常,我會很煩惱地打斷他們的設計描述,提醒他們「事實上,你忘記問這個房子是為誰設計的了。這個房子是給一群長頸鹿造的。」
愚笨的應試者認為設計就像畫畫,你想畫什麼就畫什麼。聰明的應試者明白設計的過程是一系列艱難的權衡。一個很棒的設計問題是:設計一個放在街角的垃圾箱。想一想你得做多少權衡!垃圾箱必須易於清空,但是很難被偷走;易於放進垃圾,但是碰到狂風大作,裡面的垃圾不會被吹出來;垃圾箱必須堅固而便宜。在某些城市,垃圾箱必須特別設計,以防恐怖分子在裡面隱藏定時炸彈。
有創造力的應試者會給出有趣而獨特的設計。我最喜歡的問題之一是為盲人設計一個放調味品的架子。通常許多應試者的建議是把布萊葉文(一種盲人使用的文字)刻在放調料的罐子上,但這樣文字會捲起來而變形。我碰到一個應試者,他的設計是把調料放在抽屜里,因為他覺得水平地感知布萊葉文比垂直地更方便。這個答案有創意,使我震驚!我面試了近乎一打的程序員,但從來沒有人想到過類似的答案。這樣有創意的答案確實躍過了普通人考慮問題的條條框框。僅僅因為這個答案太有創意了,而且應試者別的方面還過得去,我僱傭了這個應試者,他現在已經成為微軟Excel團隊中一個優秀的項目經理了。
總是爭取一個確定的結果。這也是完成工作的特質的一部分。有時候應試者的思路飄忽不定,不能作出一個決定。有時候他們迴避困難的問題,想矇混過關。這很不好。好的應試者有一種推動事情自然前進的傾向,即使你有意把他們拖回來。如果關於某個話題的討論開始原地打轉變得沒有意義了,好的應試者會說,「嗯,我們可以整天談論這個,但是我們得做點什麼。為什麼我們不開始……」
1.3.7 挑戰
問題轉到第七部分,挑戰。在整個面試過程中,你期望理想的應試者總是能夠正確地評論某件事。這時你會說「等一會」,然後玩一種叫魔鬼代言人的游戲。你明知他們是對的,但你偏說不對。
軟弱的應試者會屈服。那我就和他說拜拜了。
堅定的應試者會找到辦法說服你。甚至他們會以肯尼迪總統的口才來說服你,「也許我誤會了你的意思,」他們這樣開頭,但是正文仍是堅定地站穩立場。這樣的人值得僱傭。
不得不承認,面試雙方的地位並不完全平等。有時應試者由於害怕你的權力而不敢與你爭辯。但是,好的應試者有足夠的熱情和勇氣堅持正確的觀點,他們由於熱切希望說服你而會暫時忘記正在被面試。這樣的人正是我們要找的人。
1.3.8 你還有什麼問題
最後,可以詢問應試者有什麼想了解的。一些人喜歡看看應試者這時是否會問一些聰明的問題。這是市面上流行的面試書籍的標准技巧。我個人不在乎應試者問什麼,因為這時我已經做好了決定。這一步的困難之處在於,應試者也許已經見過了5、6個人,進行了好幾輪面試,他們可能很疲倦,以至於不能為每輪面試都准備一個聰明而獨特的問題。所以如果他們沒有什麼可問的,這也沒關系。
我總是留下面試的最後5分鍾來推銷我們公司。這很重要。即使我不打算僱傭眼前這位應試者,我也會如此。原因在於如果你幸運的找到一位很滿意的應試者,你當然願意做任何事情說服他(她)來你的公司。如果他們不是很好的應試者,你也要盡力讓他們為Fog Creek公司心動,這樣面試結束時他們會對Fog Creek公司留下很好的印象。記住,應試者並不僅僅是可能的雇員,他們也是顧客,也是我們公司的推銷員。如果他們覺得我們的公司很棒,他們也許會推薦朋友來面試。
1.2 幾個糟糕的面試問題的範例
啊哈,下面我要舉出幾個糟糕的面試問題的範例。
首先,避免不合法的問題。有關種族、宗教、性別、出生國、年齡、服役記錄、是否老兵、性取向、生理障礙的問題都是不合法的。即使他們的簡歷說他們1990年在軍中服役,也不要問有關問題。即便他們會愉快地談論在海灣戰爭中的經歷,但你的問題還是不合法的。
其次,不要在問題中給應試者以暗示,我們公司喜歡或者不喜歡什麼樣的員工。我能想到的一個例子是問應試者是否有小孩或者是否結婚了。這個問題也許會讓應試者認為我們不喜歡有家庭拖累的員工。
最後,不要問那些腦筋急轉彎的題目,例如6根火柴怎麼拼出4個三角形。像這樣靈機一動的問題是不能看出應試者是否具備「有頭腦/完成工作」的品質的。
面試與其說是科學,不如說是藝術。但是只要你記住有頭腦/完成工作這個原則,你就可以應對自如。有機會問問你的同事,看他們喜歡什麼樣的面試問題和答案。這本來就是我們公司員工午飯時熱衷的話題之一啊。
『柒』 大公司筆試面試有哪些經典演算法題目
1、二維數組中的查找
具體例題:如果一個數字序列逆置之後跟原序列是一樣的就稱這樣的數字序列為迴文序列。例如:{1, 2, 1}, {15, 78, 78, 15} , {112} 是迴文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是迴文序列。現在給出一個數字序列,允許使用一種轉換操作:選擇任意兩個相鄰的數,然後從序列移除這兩個數,並用這兩個數字的和插入到這兩個數之前的位置(只插入一個和)。現在對於所給序列要求出最少需要多少次操作可以將其變成迴文序列?
『捌』 計算機面試主考官一般都會問到什麼問題
《編程之美——微軟技術面試心得》裡面有60多道面試題目,很多IT公司的演算法或者程序設計題目都跟它類似,而且裡面每個題目都給出了好幾種解法,還有擴展問題。
不知道符不符合你的要求。