㈠ 《程序員面試邏輯題解析》epub下載在線閱讀,求百度網盤雲資源
《程序員面試邏輯題解析》(薩沙)電子書網盤下載免費在線閱讀
鏈接:
書名:程序員面試邏輯題解析
作者:薩沙
譯者:朱學武
豆瓣評分:7.5
出版社:人民郵電出版社
出版年份:2013-1
頁數:208
內容簡介:
《程序員面試邏輯題解析》共分為3個部分。第一部分從有趣且鍛煉頭腦的謎題入手,繼而給出解題思路和詳細答案,更有「熱身問題」給大家提供充分的思考空間。第二部分綜合了不同類型的謎題,如數獨、調度問題及概率題等。神秘的第三部分帶領大家不斷歷險,開動腦筋,解決大量密碼及銀行賬戶等方面的問題。幾十道簡潔的小謎題不僅充分鍛煉了我們的思維方式,更為提高面試成功率奠定了基礎。《程序員面試邏輯題解析》不僅適合程序員閱讀,更是謎題愛好者的饕餮盛宴。
作者簡介:
Dennis E. Shasha
紐約大學柯朗數學研究所計算機科學教授,先後獲得耶魯大學理學學士、雪城大學理學碩士和哈佛大學哲學博士學位。《科學美國人》網站和Dr. Dobb』s Journal的謎題專欄作家。除本書外,還著有《奇思妙想:15位計算機天才及其重大發現》、Database Tuning: A Principled Approach、The Puzzling Adventures of Dr. Ecco、Natural Computing: DNA, Quantum Bits, and the Future of Smart Machines 和Codes, Puzzles, and Conspiracy等書。
㈡ 程序員需要掌握哪些面試技巧
一、寫好簡歷是拿高薪offer的敲門磚
一個優秀程序員的思維是縝密細致的,而是否具備這個特質,首先由你的簡歷去傳遞。
一份好的簡歷,一定是簡潔明了,邏輯結構清晰,排版順暢的,最好用PDF格式,兼容性強且不易亂序。
而簡歷里最重要的內容是你的工作經歷和項目經歷,這幾點需要包括:
效力過哪些公司
做過的行業領域與目前面試行業是否匹配
擅長的技術語言,應用了哪些技術棧
經歷的項目復雜度,及在項目中承擔什麼樣的角色(人的變化/技術的變化/環境的變化/不同工作經歷相同角色的不同點)
時間節點
關於簡歷,最好能夠針對你要投的公司而重新編輯,突出於這家公司相關性比較大的那部分工作經驗,而不是每次都用一份通用簡歷,這樣會大大提高你的面試機會。
二、不打無准備的仗,為你的心儀崗位做好面試准備
1、進行自我定位
參加面試前,先給自己的角色和職位做一個定位。看看我們要應聘的崗位職責還有技能是什麼,我在這個領域沉澱了什麼。詳對自己進行分析總結後,便更容易在面試中自信地表現自己。
2、制定成長目標
基於你之前的工作經歷和行業趨勢,給自己制定一個至少3年的規劃,希望達到的業務能力和崗位是什麼?其中包括業務、技術上的提升計劃,還有綜合能力的提升規劃,比如協調能力、溝通能力、執行能力等。
這些問題,除了能給我們選擇公司和崗位帶來更清晰的指引,還能在面試遇到此類問題時,能夠輕松應答。
3、梳理自己的項目經驗及處理細節
面試中,最重要的部分肯定是對你過往經驗和業務能力的了解,因此,我們需要梳理此前做過的比較有代表性的項目,其中需要包括以下這些信息:項目背景、項目怎麼設計的、技術選型和對比、實現的細節、項目最終的效果。
4、了解應聘公司和其核心業務
全面深入地了解對方的公司,包括公司所處領域、核心產品或核心業務有哪些,業務的發展歷史,產品目前的形態等等。
面試官向你提的問題很多是基於公司目前實際情況的,毫無准備會的話,你的回答智能涉及到比較淺的層次,而在有所了解的前提下,面試溝通的質量會更高,回答問題才更有針對性。
三、面試過程:從經驗細節入手,展現實力
一般公司都有3-4輪面試。
一面是:筆試或HR面,一般都是考察技術基本功,而HR會比較關注你的離職原因、求職動機,這些要提前想清楚,避免回答的時候邏輯混亂。
二面是:技術面試或者項目面試,通過不同項目考核你的技術廣度和實踐能力。
三面是:綜合面,會考察技術以外的其他能力,比如軟性技能:邏輯思維、執行、溝通、協調等。
㈢ 75道程序員面試邏輯測試題(附答案)(1)
【1】 假設有一個池塘,裡面有無窮多的水。現有2個空水壺,容積分別為5升和6升。問題是如何只用這2個水壺從池塘里取得3升的水。
由滿6向空5倒,剩1升,把這1升倒5里,然後6剩滿,倒5裡面,由於5裡面有1升水,因此6隻能向5倒4升水,然後將6剩餘的2升,倒入空的5裡面,再灌滿6向5里倒3升,剩餘3升。
【2】 周雯的媽媽是豫林水泥廠的化驗員。一天,周雯來到化驗室做作業。做完後想出去玩。"等等,媽媽還要考你一個題目,"她接著說,"你看這6隻做化驗用的玻璃杯,前面3隻盛滿了水,後面3隻是空的。你能只移動1隻玻璃杯,就便盛滿水的杯子和空杯子間隔起來嗎?"愛動腦筋的周雯,是學校里有名的"小機靈",她只想了一會兒就做到了。請你想想看,"小機靈"是怎樣做的?
設杯子編號為ABCDEF,ABC為滿,DEF為空,把B中的水倒進E中即可。
【3】 三個小夥子同時愛上了一個姑娘,為了決定他們誰能娶這個姑娘,他們決定用手槍進行一次決斗。小李的命中率是30%,小黃比他好些,命中率是50%,最出色的槍手是小林,他從不失誤,命中率是100%。由於這個顯而易見的事實,為公平起見,他們決定按這樣的順序:小李先開槍,小黃第二,小林最後。然後這樣循環,直到他們只剩下一個人。
那麼這三個人中誰活下來的機會最大呢?他們都應該採取什麼樣的策略?
小林在輪到自己且小黃沒死的條件下必殺黃,再跟菜鳥李單挑。
所以黃在林沒死的情況下必打林,否則自己必死。
小李經過計算比較(過程略),會決定自己先打小林。
於是經計算,小李有873/2600≈33.6%的生機;
小黃有109/260≈41.9%的生機;
小林有24.5%的生機。
哦,這樣,那小李的第一槍會朝天開,以後當然是打敵人,誰活著打誰;
小黃一如既往先打林,小林還是先幹掉黃,冤家路窄啊!
最後李,黃,林存活率約38:27:35;
菜鳥活下來抱得美人歸的幾率大。
李先放一空槍(如果合夥干中林,自己最吃虧)黃會選林打一槍(如不打林,自己肯定先玩完了)林會選黃打一槍(畢竟它命中率高)李黃對決0.3:0.280.4可能性李林對決0.3:0.60.6可能性成功率0.73
李和黃打林李黃對決0.3:0.40.7 0.4可能性李林對決0.3:0.7 0.6 0.70.7 0.6可能性成功率0.64
【4】 一間囚房裡關押著兩個犯人。每天監獄都會為這間囚房提供一罐湯,讓這兩個犯人自己來分。起初,這兩個人經常會發生爭執,因為他們總是有人認為對方的湯比自己的多。後來他們找到了一個兩全其美的辦法:一個人分湯,讓另一個人先選。於是爭端就這么解決了。可是,現在這間囚房裡又加進來一個新犯人,現在是三個人來分湯。必須尋找一個新的方法來維持他們之間的和平。該怎麼辦呢?按:心理問題,不是邏輯問題
是讓甲分湯,分好後由乙和丙按任意順序給自己挑湯,剩餘一碗留給甲。這樣乙和丙兩人的總和肯定是他們兩人可拿到的最大。然後將他們兩人的湯混合之後再按兩人的方法再次分湯。
【5】 在一張長方形的桌面上放了n個一樣大小的圓形硬幣。這些硬幣中可能有一些不完全在桌面內,也可能有一些彼此重疊;當再多放一個硬幣而它的圓心在桌面內時,新放的硬幣便必定與原先某些硬幣重疊。請證明整個桌面可以用4n個硬幣完全覆蓋。
要想讓新放的硬幣不與原先的硬幣重疊,兩個硬幣的圓心距必須大於直徑。也就是說,對於桌面上任意一點,到最近的圓心的距離都小於2,所以,整個桌面可以用n個半徑為2的硬幣覆蓋。
把桌面和硬幣的尺度都縮小一倍,那麼,長、寬各是原桌面一半的小桌面,就可以用n個半徑為1的硬幣覆蓋。那麼,把原來的桌子分割成相等的4塊小桌子,那麼每塊小桌子都可以用n個半徑為1的硬幣覆蓋,因此,整個桌面就可以用4n個半徑為1的硬幣覆蓋。
【6】 一個球、一把長度大約是球的直徑2/3長度的直尺.你怎樣測出球的半徑?方法很多,看看誰的比較巧妙
把球放在平面上,把直尺的一邊卡在平面上,一邊卡在球上,球與尺子的接觸點到平面的距離就是球的半徑.因為直尺長度約為直徑的2/3>半徑,所以能測量.
【7】 五個大小相同的一元人民幣硬幣。要求兩兩相接觸,應該怎麼擺?
底下放一個1,然後2 3放在1上面,另外的4 5豎起來放在1的上面。
【8】 猜牌問題S先生、P先生、Q先生他們知道桌子的抽屜里有16張撲克牌:紅桃A、Q、4黑桃J、8、4、2、7、3草花K、Q、5、4、6方塊A、5。約翰教授從這16張牌中挑出一張牌來,並把這張牌的點數告訴P先生,把這張牌的花色告訴Q先生。這時,約翰教授問P先生和Q先生:你們能從已知的點數或花色中推知這張牌是什麼牌嗎?於是,S先生聽到如下的對話:P先生:我不知道這張牌。Q先生:我知道你不知道這張牌。P先生:現在我知道這張牌了。Q先生:我也知道了。聽罷以上的對話,S先生想了一想之後,就正確地推出這張牌是什麼牌。請問:這張牌是什麼牌? 方塊5
【9】 一個教授邏輯學的教授,有三個學生,而且三個學生均非常聰明!一天教授給他們出了一個題,教授在每個人腦門上貼了一張紙條並告訴他們,每個人的紙條上都寫了一個正整數,且某兩個數的和等於第三個!(每個人可以看見另兩個數,但看不見自己的)教授問第一個學生:你能猜出自己的數嗎?回答:不能,問第二個,不能,第三個,不能,再問第一個,不能,第二個,不能,第三個:我猜出來了,是144!教授很滿意的笑了。請問您能猜出另外兩個人的數嗎?
經過第一輪,說明任何兩個數都是不同的。第二輪,前兩個人沒有猜出,說明任何一個數都不是其它數的兩倍。現在有了以下幾個條件:1.每個數大於02.兩兩不等3.任意一個數不是其他數的兩倍。每個數字可能是另兩個之和或之差,第三個人能猜出144,必然根據前面三個條件排除了其中的一種可能。假設:是兩個數之差,即x-y=144。這時1(x,y>0)和2(x!=y)都滿足,所以要否定x+y必然要使3不滿足,即x+y=2y,解得x=y,不成立(不然第一輪就可猜出),所以不是兩數之差。因此是兩數之和,即x+y=144。同理,這時1,2都滿足,必然要使3不滿足,即x-y=2y,兩方程聯立,可得x=108,y=36。
這兩輪猜的順序其實分別為這樣:第一輪(一號,二號),第二輪(三號,一號,二號)。這樣分大家在每輪結束時獲得的信息是相同的(即前面的三個條件)。
那麼就假設我們是C,來看看C是怎麼做出來的:C看到的是A的36和B的108,因為條件,兩個數的和是第三個,那麼自己要麼是72要麼是144(猜到這個是因為72的話,108就是36和72的和,144的話就是108和36的和。這樣子這句話看不懂的舉手):
假設自己(C)是72的話,那麼B在第二回合的時候就可以看出來,下面是如果C是72,B的思路:這種情況下,B看到的就是A的36和C的72,那麼他就可以猜自己,是36或者是108(猜到這個是因為36的話,36加36等於72,108的話就是36和108的和):
如果假設自己(B)頭上是36,那麼,C在第一回合的時候就可以看出來,下面是如果B是36,C的思路:這種情況下,C看到的就是A的36和B的36,那麼他就可以猜自己,是72或者是0(這個不再解釋了):
如果假設自己(C)頭上是0,那麼,A在第一回合的時候就可以看出來,下面是如果C是0,A的思路:這種情況下,A看到的就是B的36和C的0,那麼他就可以猜自己,是36或者是36(這個不再解釋了),那他可以一口報出自己頭上的36。(然後是逆推逆推逆推),現在A在第一回合沒報出自己的36,C(在B的想像中)就可以知道自己頭上不是0,如果其他和B的想法一樣(指B頭上是36),那麼C在第一回合就可以報出自己的72。現在C在第一回合沒報出自己的36,B(在C的想像中)就可以知道自己頭上不是36,如果其他和C的想法一樣(指C頭上是72),那麼B在第二回合就可以報出自己的108。現在B在第二回合沒報出自己的108,C就可以知道自己頭上不是72,那麼C頭上的唯一可能就是144了。
史上最雷人的應聘者
【10】 某城市發生了一起汽車撞人逃跑事件,該城市只有兩種顏色的車,藍15%綠85%,事發時有一個人在現場看見了,他指證是藍車,但是根據專家在現場分析,當時那種條件能看正確的可能性是80%那麼,肇事的車是藍車的概率到底是多少?
15% 80%/(85%×20%+15% 80%)
【11】 有一人有240公斤水,他想運往乾旱地區賺錢。他每次最多攜帶60公斤,並且每前進一公里須耗水1公斤(均勻耗水)。假設水的價格在出發地為0,以後,與運輸路程成正比,(即在10公里處為10元/公斤,在20公里處為20元/公斤......),又假設他必須安全返回,請問,他最多可賺多少錢?
f(x)=(60-2x)*x,當x=15時,有最大值450。
450×4
【12】 現在共有100匹馬跟100塊石頭,馬分3種,大型馬;中型馬跟小型馬。其中一匹大馬一次可以馱3塊石頭,中型馬可以馱2塊,而小型馬2頭可以馱一塊石頭。問需要多少匹大馬,中型馬跟小型馬?(問題的關鍵是剛好必須是用完100匹馬) 6種結果
【13】 1=5,2=15,3=215,4=2145那麼5=?
因為1=5,所以5=1.
【14】 有2n個人排隊進電影院,票價是50美分。在這2n個人當中,其中n個人只有50美分,另外n個人有1美元(紙票子)。愚蠢的電影院開始賣票時1分錢也沒有。問:有多少種排隊方法使得每當一個擁有1美元買票時,電影院都有50美分找錢
註:1美元=100美分擁有1美元的人,擁有的是紙幣,沒法破成2個50美分
本題可用遞歸演算法,但時間復雜度為2的n次方,也可以用動態規劃法,時間復雜度為n的平方,實現起來相對要簡單得多,但最方便的就是直接運用公式:排隊的種數=(2n)!/[n!(n+1)!]。
如果不考慮電影院能否找錢,那麼一共有(2n)!/[n!n!]種排隊方法(即從2n個人中取出n個人的組合數),對於每一種排隊方法,如果他會導致電影院無法找錢,則稱為不合格的,這種的排隊方法有(2n)!/ (n-1)!(n+1)! 種,所以合格的排隊種數就是(2n)!/[n!n!]- (2n)!/[(n-1)!(n+1)!] =(2n)!/[n!(n+1)!]。至於為什麼不合格數是(2n)!/[(n-1)!(n+1)!],說起來太復雜,這里就不講了。
【15】 一個人花8塊錢買了一隻雞,9塊錢賣掉了,然後他覺得不劃算,花10塊錢又買回來了,11塊賣給另外一個人。問他賺了多少?
2元
【16】 有一種體育競賽共含M個項目,有運動員A,B,C參加,在每一項目中,第一,第二,第三名分別的X,Y,Z分,其中X,Y,Z為正整數且X>Y>Z。最後A得22分,B與C均得9分,B在百米賽中取得第一。求M的值,並問在跳高中誰得第二名。
因為ABC三人得分共40分,三名得分都為正整數且不等,所以前三名得分最少為6分,40=5 8=4 10=2 20=1 20,不難得出項目數只能是5.即M=5.
A得分為22分,共5項,所以每項第一名得分只能是5,故A應得4個一名一個二名.22=5*4+2,第二名得1分,又B百米得第一,所以A只能得這個第二.
B的5項共9分,其中百米第一5分,其它4項全是1分,9=5+1=1+1+1.即B除百米第一外全是第三,跳高第二必定是C所得.
【17】 前提:
1 有五棟五種顏色的房子
2 每一位房子的主人國籍都不同
3 這五個人每人只喝一種飲料,只抽一種牌子的香煙,只養一種寵物
4 沒有人有相同的寵物,抽相同牌子的香煙,喝相同的飲料
提示:1 英國人住在紅房子里
2 瑞典人養了一條狗
3 丹麥人喝茶
4 綠房子在白房子左邊
5 綠房子主人喝咖啡
6 抽PALLMALL煙的人養了一隻鳥
7 黃房子主人抽DUNHILL煙
8 住在中間那間房子的人喝牛奶
9 挪威人住第一間房子
10抽混合煙的人住在養貓人的旁邊
11養馬人住在抽DUNHILL煙的人旁邊
12抽BLUEMASTER煙的人喝啤酒
13德國人抽PRINCE煙
14挪威人住在藍房子旁邊
15抽混合煙的人的鄰居喝礦泉水
問題是:誰養魚???
第一間是黃房子,挪威人住,喝礦泉水,抽DUNHILL香煙,養貓;! f/ [% a: 6 L! J. Q9 x第二間是藍房子,丹麥人住,喝茶,抽混合煙,養馬;+ o8 _0 S) L8 i' E' u第三間是紅房子,英國人住,喝牛奶,抽PALL MALL煙,養鳥;/ N9 o/ n2 M# U" c第四間是綠房子,德國人住,喝咖啡,抽PRINCE煙,養貓、馬、鳥、狗以外的寵物;7 P5 l) G, G, |; C, {7 V第五間是白房子,瑞典人住,喝啤酒,抽BLUE MASTER煙,養狗。
【18】 5個人來自不同地方,住不同房子,養不同動物,吸不同牌子香煙,喝不同飲料,喜歡不同食物。根據以下線索確定誰是養貓的人。
10.養魚的人住在最右邊的房子里。
11.吸萬寶路香煙的人住在吸希爾頓香煙的人和吸「555」香煙的人的中間(緊鄰)
12.紅房子的人愛喝茶。
13.愛喝葡萄酒的人住在愛吃豆腐的人的右邊隔壁。
14.吸紅塔山香煙的人既不住在吸健牌香煙的人的隔壁,也不與來自上海的人相鄰。
15.來自上海的人住在左數第二間房子里。
16.愛喝礦泉水的人住在最中間的房子里。
17.愛吃面條的人也愛喝葡萄酒。
18.吸「555」香煙的人比吸希爾頓香煙的人住的靠右
第一間是蘭房子,住北京人,養馬,抽健牌香煙,喝茅台,吃豆腐;2 G7 x% z0 v; C第二間是綠房子,住上海人,養狗,抽希爾頓,喝葡萄酒,吃面條;% C2 k4 o8 t" p6 L* x第三間是黃房子,住香港人,養蛇,抽萬寶路,喝礦泉水,吃牛肉;& N" S% x# o3 a; g第四間是紅房子,住天津人,抽555,喝茶,吃比薩;7 5 s. J# d, Q/ N% N' O# ]第五間是白房子,住成都人,養魚,抽紅塔山,喝啤酒,吃雞。
【19】 鬥地主附殘局
地主手中牌2、K、Q、J、10、9、8、8、6、6、5、5、3、3、3、3、7、7、7、7
長工甲手中牌大王、小王、2、A、K、Q、J、10、Q、J、10、9、8、5、5、4、4
長工乙手中牌2、2、A、A、A、K、K、Q、J、10、9、9、8、6、6、4、4
三家都是明手,互知底牌。要求是:在三家都不打錯牌的情況下,地主必須要麼輸要麼贏。問:哪方會贏?
無解地主怎麼出都會輸
【20】 一樓到十樓的每層電梯門口都放著一顆鑽石,鑽石大小不一。你乘坐電梯從一樓到十樓,每層樓電梯門都會打開一次,只能拿一次鑽石,問怎樣才能拿到最大的一顆?
先拿下第一樓的鑽石,然後在每一樓把手中的鑽石與那一樓的鑽石相比較,如果那一樓的鑽石比手中的鑽石大的話那就把手中的鑽石換成那一層的鑽石。
㈣ java面試 談業務邏輯
首先你要考慮的一點是,對方掌握什麼樣的信息、他應該想從你這里得到什麼樣的信息。
lz的大體思路是正確的。
首先,對方想要知道的是你做了什麼。這個時候需要從整體介紹你製作的項目,例如,你的作品是針對什麼樣的人群,提供什麼樣的服務,然後是自己的特點。
然後介紹具體使用了什麼樣的框架和相關技術。
到此為止還不需要說細節,只要概括就可以。
等到對方問到你的時候,再確認對方想要了解什麼,然後再逐一描述。
-------------------------------------------------
每個主考官的思路不同,確切地說沒有正確答案,如果是我的話,會按照以下思路回答。
1.自己的思路和理解貫穿一線很重要,但是,自己的能力可以做到那一步,不能做到那一步,在哪方面需要改善,都要明確,被問到的時候誠實的講出來。
2.基本正確,但是注意著眼點盡可能從整個服務去說,而不是單純的PG角度。
3.這應該主要是看你的管理能力,同樣沒有正確答案,只有思路。不要局限於PG,把眼光放到整個團隊,思考處於整個團隊中的自己,需要做什麼、做了什麼,哪方面做得比較好、哪方面做得不夠,自然而然就知道自己的價值了。
㈤ 3道有意思的邏輯思維面試題
從小到大做了無數道智力題,工作之後接觸到程序員邏輯思維面試題,也曾經饒有興致的研究過。這些智力題,表面上是考智力水平,實際上是考察邏輯思維能力,而從更一般的意義而言,是在考察解決問題的能力。
一個人學習、研究、工作,其實無時無刻不是在訓練或使用解決問題的能力。解決問題的能力,在我看來,有很多方面,其中很重要的一方面就是邏輯思維能力。很多人對於邏輯思維的理解是存在誤區的,總以為邏輯思維只是理科生和工程師用的東西,與文科生甚至普通人沒有什麼關系。而實際上, 邏輯思維所涉及的范圍遠遠不止以數學為基礎的理工科,而是一種涵蓋各種學科、各種工作的通識能力 。
比如說,大學學文科專業的羅振宇,幾年前開了一個節目叫「羅輯思維」,強調用邏輯思維來理解世界,節目的內容涉及社會、歷史、經濟、人文、理工等各方面,俘獲了幾百萬乃至上千萬的粉絲。後來羅打造得到APP成為最知名的知識付費應用,就是以羅輯思維這個品牌欄目為底子做的。
最近看了一些大的科技公司(比如谷歌、微軟等)等招聘員工的面試題,很有意思,在這里與大家分享,並共同探討。
這是微軟非常知名的一道面試題,曾經難倒無數學霸才子:不是說好的考程序題或者智力題嗎,怎麼來了一個社會基礎建設問題?
為什麼是圓的?方的不行嗎?圓的究竟優勢在哪裡?
這就是在考察面試者的邏輯思維了。其實認真思考之後,不難得出「標准答案」:
如果面試者能夠這樣回答,說明他的邏輯思維不錯,或者至少生活經驗比較豐富。
那麼這是唯一的正確答案嗎?沒有這么簡單。我從一些優秀者的回答中,還發現了其它也很有道理的答案:
如果面試者能夠在所謂「標准答案」的基礎上,多給出幾個原因,那麼說明不僅邏輯思維很好,工程思維也非常棒,善於運用生活中的知識。這道題基本上給考官的印象應該是滿分了。
但是,關於這道題的討論並非到此為止。 下水道井蓋一定是圓的嗎?有沒有可能是方的或者其它形狀的?
傳說有一位面試者,在被問到該問題的時候,堅持說也可以用方的井蓋,並給出了合理的理由,最終成功說服了考官。下面是傳說的面試過程:
這位面試者不僅邏輯思維和工程經驗豐富,說服人的能力也非常強,讓考官覺得他是不可多得的人才,被推薦到更需要綜合技能的銷售部門工作。
其實,像這樣的邏輯思維面試題並沒有所謂的標准答案,考官的真實目的是 考察面試者的邏輯思維能力 ,更一般的講,是 解決問題的能力 。下水道蓋也可以是方的,只要你能給出合理的理由,自圓其說。
這是Google的一道面試題:
有一棟100層高的大樓,給你兩個完全相同的玻璃球。假設從某一層開始,丟下玻璃球會摔碎。那麼怎麼利用手中的兩個球,用什麼最優策略知道這個臨界的層是第幾層?
最笨的辦法誰都能想到:
可是這個辦法,最壞的情況下要試99次,平均意義上要試49次。而且只用了一個球,另一個球沒利用上。顯然不是最優的策略。
計算機專業的學生很容易想到更高級的辦法——二分法。具體是:
用這種方法,需要log100,也就是大約7次,能夠找到答案。
面試者如果能這樣回答,說明對計算機專業基本演算法是有了解的。但是,仔細想想,這個方法對嗎?
這個方法顯然是有毛病的。比如說我舉一個反例,第10層是臨界層的情況。按照二分法來執行,第一次試驗第50層將摔碎,第二次試驗第25層又將摔碎,此時兩個玻璃球都摔碎了,將沒有辦法繼續進行試驗!
注意最多有兩個球,也就是最多可以摔碎兩次。盡管上述二分法不可行,我們是否可以借鑒其思路,先大致確定一個小的范圍,然後逐個試驗呢?根據這樣的思路,可以提出下面的方法:
這種方法最壞的情況出現在臨界層為100時,將需要試驗10+10=20次;最好的情況出現在臨界層為2時,只需要試驗2次。而平均意義上大約需要試驗10次。怎麼樣,是不是有效的利用了兩個球呢?
按照吳軍老師的說法,這種解題方法其實體現了 一種典型的工程思維:粗調和精調 。其中第一個球用於粗調,確定一個大致的范圍;第二個球用於精調,在大致的范圍內確定精確的值。
其實,粗調和精調的工程思維在生活和工程中都很常見:
從這幾個例子,我們可以對粗調和精調的優點及注意事項進行簡單的總結:
了解了粗調和精調的概念之後,我們回過頭來,再次考察這道玻璃球題目。如果有3個玻璃球呢,是否有更好的方法?
當然是有的,標準的答案是採取三步試驗:
細心的讀者會發現,這三步試驗分別把答案的可能范圍縮小了4、4、5倍,最終確定了答案。
為什麼是這幾個數呢?而且,回過頭來想想,為什麼兩個小球的情況下,兩步試驗縮小的范圍分別是10、10呢?
這幾個數的選擇,當然絕非巧合。實際上,2個和3個玻璃球的情況下,縮小倍數分別是按照根號下100(也就是10)、3次根號下100(大約是5)來選擇的。 推廣到n個玻璃球的情況下,每步試驗的范圍縮小倍數應該是n次根號下100。 具體證明,我們在這里不做討論。
這絕不僅僅是一個小小的邏輯題, 考官想考察的是面試者的邏輯思維,包括工程思想、分析能力以及舉一反三的歸納概括能力 。知道標准答案不算什麼,吃透這道題並弄清背後的深刻原理,才是本事。
這道題相對前兩道來說要簡單一些。據說Google過去面試產品經理的時候會問到這個問題。什麼數據都不給,直接就這么問。
有些中國面試者可能不樂意了:你又不告訴我高爾夫球多大,也不告訴我這個房間的尺寸,什麼數據都沒有,我怎麼算啊?
但是這個題沒錯,考官考察的就是不給數據你怎麼計算!要不然小學生都能算出來了。
有些人一看沒給數據,可能就會胡猜:一間普通辦公室,又不是很大,高爾夫球直徑大概幾厘米,直觀感覺應該能裝幾千個或者幾萬個吧?
然而答案恰恰違反我們的直覺:至少能裝幾十萬個,甚至能裝上百萬個。
我們來算算:
一個房間竟然能裝這么多高爾夫球?是不是大的出乎我們的意料呢?
有人可能會懷疑,這道題如此簡單,小學生都能做,侮辱人智商嗎?然而這道題實際考察的,是我們解決問題的方式。Google對產品經理的要求是:
有的面試者在沒給數據的情況下可能會根據直覺亂猜,這是做事的大忌,因為很多東西其實是反直覺的,亂猜可能導致完全錯誤的結論,這是很危險的。最准確的做法是拿工具量一下會議室的長寬高以及高爾夫球的直徑,然後進行計算。不過,在沒有準確數據的情況下,合理的估算也是可行的,甚至也是必要的,估算能夠幫助我們大致知道答案的范圍,這在很多情況下已經足夠支持決策!
㈥ 程序員的成功面試技巧
程序員的成功面試技巧
程序員的成功面試技巧,程序員在近幾年來是很熱門的一個職位,因為在很多人眼裡程序員的收入是很高的,程序員想要工資高在面試的時候也是很講究技巧的,下面分享程序員的成功面試技巧?
1、給自己寫一份非常專業的簡歷
我的建議是,如果你想增加自己的入選機會,那最好還是花點錢製作一份專業的簡歷。相較於你將來可能得到的巨大收獲,這真的只是一個小小的投資。
2、研究面試官
當我聯系程序員來面試的時候,我總是會事先發電子郵件給他,並附上我的名字和博客地址。但是讓我驚訝的是,當我給他面試的時候,他竟然對我還是一無所知。
再舉個正面的例子,我在面試時也碰到過這類開發人員,甚至能對我以前寫的一篇博客或者做的教學視頻上面的內容侃侃而談。
你說我會推薦哪個?
面試官也是人,也會有人性的弱點和特點。Dale Carnegie曾說過,要讓別人對你感興趣,最簡單的方法就是你先表達出對對方的興趣。
不管這種方法是否有欠公正,但是如果你想面試成功,那麼我建議你事先最好先好好研究一下你應聘的這家公司和面試官(如果知道的話)。
當今社會的信息是如此的發達,我們完全可以在Facebook、Twitter、微博、博客上找到任何人的資料。即使你只是大致瀏覽一番,也會讓你受益良多。
3、獲得內部推薦
知道找工作最簡單的方法是什麼嗎?那就是獲得內部推薦。
這不但可以增加面試機會,還能提升40%的錄用幾率。
前陣子,我找到了一家心儀的公司。然後直接投簡歷?NONO,猜猜我是怎麼做的吧?
首先我找到一名和我有共同想法和意見的開發人員,然後開始關注他的博客。
接著我在他的博客中留言、發表建議,並且表現出對他的工作和公司非常感興趣的想法。最後我成功拿到了這個寶貴的內部推薦資格。
很多程序員會說,「可是,某某某公司裡面的人我一個也不認識啊」。如果你想就此放棄,那當我什麼也沒說,如果你願意試試,我敢打賭,你總能想出一種方法達到你的目的。
不過這有個秘訣,那就是首先你得在網上創建自己的「名片」——讓別人有了解你的機會,所以do it now吧。
4、 學會解決演算法問題
這是每一個開發人員都應該具備的重要技能,而且真要掌握起來也並非那麼難。
在很多面試中,都會有這樣的問題,要求你在白板或者電腦上解決編程問題,但是許多程序員,即使是那些非常優秀的程序員,都會一下子大腦一片空白,完全理不出思路來。
如果你能花時間學會如何解決這種類型的面試問題,那麼下次再碰到這種場景,就不會這么緊張了。
我們會緊張其實和怯場無關,主要是因為我們不熟悉這些問題,也沒有自信能解決這種問題。
在這方面建立起自信之後,你就再也不會緊張了。
5、活力洋溢地回答問題
只用一個字或者一句話,照本宣科平平無奇地回答問題,或許在技術上是正確的,但是你忘了應該藉此機會好好展示自己的激情——這才是一個開發人員能帶給團隊的最大正能量。
舉個例子說,如果我問你什麼是多態性,我不是要你按照課本中的定義重復給我聽,我希望你能就這個主題闡述一下,然後我們可以更深入地聊一聊。
6、小心「陷阱」問題
你為什麼換工作?
說說你最大的優點和缺點。
最近一次你是如何解決和同事之間發生的技術分歧的?
在回答問題之前,你最好明白面試官問這些問題的目的,掌握如何回答這類問題的技巧。
就先說說第一個問題吧「你為什麼換工作?」
在大多數情況下,面試官想知道的是你是否是一個愛說三道四、慣於誹謗抨擊僱主的人。所以千萬不要上當。
7、永遠不要撒謊
最糟糕的事就是在面試的時候撒謊。
知之為知之,不知為不知,如果你確實不知道,千萬不要自作聰明來編造問題的答案。
相反,你應該誠實地說,你不知道或者你並不是100%肯定,但是你願意嘗試一下,然後再講講自己的想法。講完之後也可以問面試官正確答案是什麼,以顯示你對此非常感興趣。
實話告訴你,大多數面試官問的問題都是他們知道的問題,不然如果你濫竽充數給你通過的話就會顯得他們像個傻瓜。所以千萬不要抱著僥幸心理,一旦發現你在撒謊,面試官馬上就會質疑你的人品。
8、不要太誠實
很多程序員會過多地透露自己的信息,不要以為誠實和完全透明就是最好的政策,殊不知過猶不及。
第7條所說的不可撒謊誠然不錯,但是我們也沒必要將自己所有生活的細節和所有缺點都告訴給面試官。
有個性是好的,但是如果暴露了性格缺陷就壞事了。
試想一下,要是你說自己喜歡賭博或者沉迷於魔獸世界,我敢打賭,面試官肯定會重新審視你。所以在說自己信息的時候一定要慎重,因為這不但會暴露你的缺陷,還會顯得你缺乏應有的.判斷力。
9、掌握計算機科學的基礎知識
是的,很多程序員在面試的時候,甚至理直氣壯地說,他們不知道鏈表和堆棧,因為他們沒有受到正規教育或者早就還給老師了。
我也承認我們在工作的時候是用不到那些深層次的計算機科學概念的,但是作為一個專業的軟體開發人員,你至少應該知道一些基本知識。
舉個例子說吧,你請電工來重新給你家的房子布線,但是這電工一點也不知道任何電氣工程的基本知識,你還請他干不?同理,我們也是如此。
10、關於經驗
這是最後一點,但並非最不重要的,很多開發人員,特別是剛進入這一行的新手,往往缺乏相關的經驗,也不知道如何增加所謂的工作經驗。
這有點像是雞和蛋哪個先出現的問題。
那麼又該如何增加經驗呢?
關鍵是要用創造性的方式。有很多方法都可以獲得工作經驗,但是卻不必真正去一家公司上班。
給你點提示:
參加開源項目
啟動開源項目
做一個移動app,放到App Store里
寫一個小型的Web應用程序
參與代碼交流和用戶組
這些方式都可以作為工作經驗寫到簡歷中去,只要自己有想法,不愁沒經驗。
希望這些技巧能對各位有所裨益。如有不同想法,也請不吝賜教。
程序員的中年危機是什麼
中年程序員危機
近日,中興網信員工歐某打開26樓辦公室窗戶縱身躍下,結束了42歲的生命。
目前有多種說法,有說因股份轉讓價過低和人事部產生分歧,有說疑因內部宮斗被離職,甚至還有消息說歐有精神方面的問題。
盡管具體原因仍待進一步的核實,但卻由此引發網上一波關於中年職場危機,特別是中年程序員危機的討論。
一般來說,一個行業的收縮導致人員數量與結構的調整,大致可以用一個簡單的模型來描述:行業規模縮減,行業人員減少,公司數量減少或規模縮減,進而導致管理層崗位變少,原本的管理層,被迫降至轉入下一級崗位。
這種降崗機制層層傳遞,高層降為中層,中層降為基礎管理崗,基礎管理崗降為一線員工。與此同時,由於行業規模的縮減,一線員工數量也在減少。
於是,一線員工失業,同時,停止招收該行業的新畢業生。在這個模型中,一般來說,即便行業收縮,中層也不用愁就業,仍可留在本行業中,最壞也不過是降崗。
中年人學習能力下降明顯
不過,在程序員行業中,有一些特別的因素,導致了其不同於一般行業的現象。
35-45歲的中年人,學習能力下降明顯。與此同時,這是一個新技術不斷涌現的時代。
一個人進入職場初期的技能、概念,過了20年後,已經完全不一樣了。程序員這個行業,更是把這個特點發揮到極致。
此外,精力明顯下降,不能熬夜,加之家務瑣事纏身,高強度工作即便有意願也很難付諸行動。
如果說其他行業的中層人員降級後仍可游刃有餘的話,這個行業的中層降崗後,會不如自己新崗位上的同事。
所以,程序員密集的IT、通訊行業,很多中層員工就處於一個很尷尬的地位。即便勉為其難地接受,也會面臨收入大幅度下降的心理適應問題。
如果考慮到資產配置中較高的按揭比例,當資金鏈斷掉,這就成為不可承受之重。
㈦ 如何面試一名程序員
如何面試程序員
一、提問之前的准備
首先,最重要的是,你自己一開始就應該想清楚:
1. 需要新員工完成什麼樣的任務?
2. 怎樣的人能完成這樣的任務?
3. 哪些途徑和方法可以發現這樣的人?
只有明確這些根本性的問題,才能正確高效地完成面試。
二、提問的原則
假定你對上一節的三個問題,已經有了清晰的想法,那麼接下來就可以設計如何提問了。
有一些提問的原則,是你應該遵循的:
每一個面試問題都有明確的目的。你不僅自己了解,還能向其他面試官解釋清楚。
多提一些開放性(Open-ended)的問題,而不是那種用Yes/No就可以回答的問題。這樣做使你有機會與面試者展開討論,並且提出後續的問題,盡可能多地了解對方。
不要問宗教、家庭、健康、個人隱私等方面的問題。
不要問太復雜的問題。因為面試者沒有太多思考時間,所以無法周全地回答,你也就無從判斷他的能力了。
三、考察專業能力
為了確認面試者是勝任的,你可以問一些與職位相關的專業方面的問題。(不過通常來說,一次面試不足以看出一個人的專業能力。)
比如,你的招聘職位是系統管理員,你可以問"如何快速地在50台機器上部署Linux?"(提示:正確答案不是刻錄50張安裝光碟。)
另外,你還應該向面試者了解他的過去,因為過去是未來的最好預測依據。不過,提問的重點不要僅僅是他過去的成果,更要關注在當時的環境中,他是如何決策和實施的。
四、考察綜合素質
因為人是會發展的,所以某種程度上,面試者的綜合素質要比他的專業能力更重要。
所以,具體的技術問題(如何調用API、什麼是設計模式、編程語言的語法等等)可以少問一些,更應該關注面試者的事業心、對工作的熱情、進取心、自律能力、毅力等方面。
下面是一些典型問題:
Why did you get into development?
你為什麼開發軟體?
How many technical books did you read in the past year?
去年你讀了幾本技術書籍?
What was your favorite technical book in the past year? What did you learn from it?
去年你最喜歡的技術書籍是哪本?你從中學到了什麼?
What websites do you read regularly, related to development?
平時你經常訪問哪些編程類網站?
Do you maintain any open-source projects?
你有自己的開源項目嗎?
Do you code in your spare-time?
業余時間你編程嗎?
Do you love programming, or do you do it for the money?
對於你來說,編程是一種愛好,還是一種謀生手段?
Have you accomplished anything important in your career yet? Do you want to?
你的職業生涯之中有什麼重要的成就?它是你主導的嗎?
What would make you feel that you have done something important?
什麼事情會讓你很有成就感?
五、考察理性思維
某些情況下,你可能需要了解面試者的分析判斷能力,看他能否全面地思考問題、客觀地評價自己。
那麼,你可以依次提出這樣三個問題:
What's your favorite programming language? Why?
你最喜歡的編程語言是哪種?為什麼?
If you could add one feature to your favorite language, what would it be? Why?
如果允許你為這種語言加一種功能,你會加什麼功能?為什麼?
If you could remove one feature from it, what would it be? Why?
如果允許你取消一種功能,會是什麼功能?為什麼?
這里的重點是,讓面試者從正反兩方面評價一件自己熟悉的東西,看看他的思維是否片面。答案無所謂對錯,只要面試者有一個明確的立場,能夠從正反兩方面說出令人信服的理由,就可以了。比如,某個軟體的口碑不好,但是面試者說他很喜歡,而且說得出一大堆理由,清楚地解釋了這種軟體的優點和缺點在哪裡,這樣就很好。
你還可以把這些問題,套用在其他東西上面,比如操作系統、文字編輯器等等。
㈧ 程序員應該怎樣去面試
程序員面試注意事項如下。
1、呈現出自己完整的知識結構。
對於程序員來說,最重要的一件事情就是在短短的面試過程中呈現出自己完整的知識結構。要想做到這一點,一定要在自我介紹的過程中下足功夫,既簡練又豐富,引起面試官的重視。
2、重視項目經驗的介紹。
無論是應聘初級程序員還是主力程序員,項目經驗都是面試官最為關注的內容之一,也是面試者能力的衡量標毀攜准之一。在項目介紹的時候要選擇比較有代表性的項目,簡單的說就是規模越大越好,參與程度越深越好。能夠清晰的描述自己在項目中的工作職責和最終的完成情況。
3、重視解決問題的能力。
通過一個具體的難點問題如何解決來呈現自己解決問題的能力,這種做法更有說服力,而且盡量突出重點內容,比如演算法設計、實現過程、驗證過程等內容,解決問題的能力是主力程序員的核心競爭力之一。
4、突出自己的學習能力。
程序員在整個職業生涯中需要不斷的學習,因為整個IT領域的技術更新速度是比較快的,面試官往往對程序員的學習能力比較關注,可以通過不同的項目採用不同的技術方案來體現自己較強的學習能力。
5、體現出自己的交流能力。
交流能力對於程序員來說也是非常重要的,項目開發過程中需要頻繁的交流,所以交流能力也是面試纖念伏官比較關注的方面之一。體現交流能力的關鍵是把握住交流的主線,所有的思路要緊緊圍繞核心問高螞題,盡量不要做過多的擴展,這樣容易顧此失彼。
6、描述自己的職業規劃。
一個好的職業規劃會給面試官留下一個好印象,也會為自己爭取到更好的職位奠定一個基礎。