Re: [心得] 學界轉業界...google面試洗臉心得

看板Soft_Job作者 (藍廳)時間8年前 (2017/04/20 17:23), 8年前編輯推噓12(12025)
留言37則, 5人參與, 最新討論串5/8 (看更多)
※ 引述《ku72 (ku72)》之銘言: : const char* str[]={Fizz Buzz 相關定義到15個}: : for (int i=0;i<上限;++i){ : printf (str[i&0xF]); : } : 要求效率的話 我會這樣打 : 首先15=0xF 上限在可以用位元表示的 : 用%沒有位元處理 : 當然也有機車一點的 : const char* str ="Fizz\n ..... 把1~15都定義好"; : for (.......每次加15){ : printf (str); : } : 這種題目都是想看看 : 被測試者的腦袋靈活度 : 所以 用點不太正常方式其實是被接受的 : 捷運上隨便打的 : 具體思路應該是對的 : 語法不保證xd 快下班時看到這題,可能是leetcode刷得不夠多,還沒看過,覺得還滿有趣的XD 不知道可不可以用c++和STL,可以的話我會這樣做 #include <iostream> #include <algorithm> #include <unordered_map> #include <functional> using namespace std; typedef function<void(void)> Handler; typedef unordered_map<int, Handler> Handlers; int main() { vector<int> target = { 3,5 }; int max = 50; Handlers handlers; Handler handle3 = []() {cout << "Fizz"; }; Handler handle5 = []() {cout << "Buzz"; }; handlers[3] = handle3; handlers[5] = handle5; auto check = [](int checker, int checked, Handlers handlers)->int { if (checked%checker == 0 && checked != 0) { handlers[checker](); return 1; } else return 0; }; auto _check = bind(check, placeholders::_1,placeholders::_2, handlers); int flag = 0; for (int I = 0; I < max; I++) { for (auto J : target) { flag|=_check(J, I); } if (flag == 0) { cout << I << endl; } else cout << endl; flag = 0; } } 原本的bug修好了 Java應該也可以用類似的作法,但小弟Java不是很熟 借問一下各位前輩Java的話是不是就要先定義一個Interface 然用不同的Implemented Class才能像C++的func obj這樣的用法? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.171.87.248 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1492680229.A.D9D.html ※ 編輯: w0005151 (1.171.87.248), 04/20/2017 17:26:39

04/20 17:59, , 1F
沒看清楚題目xd check裡要多一行else cout<<checker
04/20 17:59, 1F

04/20 18:01, , 2F
痾 也不大對 我回家在試好了 現在沒電腦
04/20 18:01, 2F
※ 編輯: w0005151 (1.171.87.248), 04/20/2017 19:39:44 ※ 編輯: w0005151 (1.171.87.248), 04/20/2017 19:47:37

04/20 22:17, , 3F
看了一下基本上跟原本的2概念一樣?面試挑單純的寫可
04/20 22:17, 3F

04/20 22:17, , 4F
能更好
04/20 22:17, 4F

04/20 23:37, , 5F
小弟是覺得這樣寫比較好維護與擴充
04/20 23:37, 5F

04/20 23:37, , 6F
面試的時候這個答案會被認為畫蛇添足嗎?
04/20 23:37, 6F

04/21 00:51, , 7F
好奇要是多加一個7的話這個跟2的擴充
04/21 00:51, 7F

04/21 00:52, , 8F
多加七的話你target handle 都各加一個吧
04/21 00:52, 8F

04/21 00:54, , 9F
或是有什麼特別比2更好擴充的地方嗎 效能上沒優勢 我
04/21 00:54, 9F

04/21 00:54, , 10F
自己是覺得接手的人會需要讀一下好知道這可以幹嘛
04/21 00:54, 10F

04/21 06:09, , 11F
為何我覺的脫褲子放屁%不好用嗎?
04/21 06:09, 11F

04/21 09:11, , 12F
面試官精明一點的話 就會請你解釋為何這樣比較好維護和擴
04/21 09:11, 12F

04/21 09:11, , 13F
04/21 09:11, 13F

04/21 09:11, , 14F
不是你覺得比較好就是比較好 要有理由才能說服人
04/21 09:11, 14F

04/21 09:55, , 15F
我的想法是要檢查的數字若從兩個變很多個時
04/21 09:55, 15F

04/21 09:56, , 16F
就不用用很長的if else if或switch case
04/21 09:56, 16F

04/21 09:57, , 17F
或是要從檢查是不是倍數變成其他條件 如倍數+1之類的
04/21 09:57, 17F

04/21 09:58, , 18F
就只要改check就好
04/21 09:58, 18F

04/21 11:25, , 19F
要跟第二篇的版本二比較 你的語法較複雜 有獲得甚麼優勢?
04/21 11:25, 19F

04/21 11:26, , 20F
如果除了炫技以外沒任何好處的話 這樣寫只會增加理解困難
04/21 11:26, 20F

04/21 11:33, , 21F
比較就是我說的條件增加時不用落落長的條件判斷
04/21 11:33, 21F

04/21 11:35, , 22F
不過我沒軟體業面試經驗 大大是覺得單純的寫法較吃香?
04/21 11:35, 22F

04/21 11:44, , 23F
你不用if 但要很多handle 吧
04/21 11:44, 23F

04/21 11:49, , 24F
為了省if 而已 用container + lambda 反而更複雜 可能
04/21 11:49, 24F

04/21 11:49, , 25F
要想要怎麼說服人這樣比較好
04/21 11:49, 25F

04/21 11:51, , 26F
然後Scott Meyers 有建議用lambda 就夠 不要用bind(c+
04/21 11:51, 26F

04/21 11:51, , 27F
+14)
04/21 11:51, 27F

04/21 12:07, , 28F
第二篇的版本二 條件增加也只要多一個if 你的也要加新的
04/21 12:07, 28F

04/21 12:10, , 29F
handle 所以並沒有比較有優勢 面試的白板題盡量以簡潔、
04/21 12:10, 29F

04/21 12:10, , 30F
邏輯清晰為主 寫太複雜去表達同樣邏輯的東西會自找麻煩
04/21 12:10, 30F

04/21 12:11, , 31F
而且白板是題沒辦法查資料的 寫越多東西越可能語法錯誤
04/21 12:11, 31F

04/21 12:12, , 32F
文法錯誤雖然不是大問題 但在面試官眼中還是會多少扣分
04/21 12:12, 32F

04/21 12:47, , 33F
是的 謝謝各位的意見 小弟是個很想進軟體業的自學者
04/21 12:47, 33F

04/21 12:47, , 34F
很需要各位專業人士的意見
04/21 12:47, 34F

04/21 12:48, , 35F
另外steve大說的是在Modern Effective C++嗎
04/21 12:48, 35F

04/21 13:10, , 36F
嗯嗯
04/21 13:10, 36F

08/06 17:39, , 37F
如果我是你同事我會覺得簡單幾行有需要搞得這麼嚴重嗎XD
08/06 17:39, 37F
文章代碼(AID): #1O-7ubsT (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1O-7ubsT (Soft_Job)