作者w0005151 (藍廳)
看板Soft_Job
標題Re: [心得] 學界轉業界...google面試洗臉心得
時間Thu Apr 20 17:23:47 2017
※ 引述《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://webptt.com/m.aspx?n=bbs/Soft_Job/M.1492680229.A.D9D.html
※ 編輯: w0005151 (1.171.87.248), 04/20/2017 17:26:39
1F:→ w0005151: 沒看清楚題目xd check裡要多一行else cout<<checker 04/20 17:59
2F:→ w0005151: 痾 也不大對 我回家在試好了 現在沒電腦 04/20 18:01
※ 編輯: w0005151 (1.171.87.248), 04/20/2017 19:39:44
※ 編輯: w0005151 (1.171.87.248), 04/20/2017 19:47:37
3F:推 steve1012: 看了一下基本上跟原本的2概念一樣?面試挑單純的寫可 04/20 22:17
4F:→ steve1012: 能更好 04/20 22:17
5F:→ w0005151: 小弟是覺得這樣寫比較好維護與擴充 04/20 23:37
6F:→ w0005151: 面試的時候這個答案會被認為畫蛇添足嗎? 04/20 23:37
7F:推 steve1012: 好奇要是多加一個7的話這個跟2的擴充 04/21 00:51
8F:→ steve1012: 多加七的話你target handle 都各加一個吧 04/21 00:52
9F:推 steve1012: 或是有什麼特別比2更好擴充的地方嗎 效能上沒優勢 我 04/21 00:54
10F:→ steve1012: 自己是覺得接手的人會需要讀一下好知道這可以幹嘛 04/21 00:54
11F:推 Sex5F: 為何我覺的脫褲子放屁%不好用嗎? 04/21 06:09
12F:推 sorryla: 面試官精明一點的話 就會請你解釋為何這樣比較好維護和擴 04/21 09:11
13F:→ sorryla: 充 04/21 09:11
14F:→ sorryla: 不是你覺得比較好就是比較好 要有理由才能說服人 04/21 09:11
15F:→ w0005151: 我的想法是要檢查的數字若從兩個變很多個時 04/21 09:55
16F:→ w0005151: 就不用用很長的if else if或switch case 04/21 09:56
17F:→ w0005151: 或是要從檢查是不是倍數變成其他條件 如倍數+1之類的 04/21 09:57
18F:→ w0005151: 就只要改check就好 04/21 09:58
19F:推 sorryla: 要跟第二篇的版本二比較 你的語法較複雜 有獲得甚麼優勢? 04/21 11:25
20F:→ sorryla: 如果除了炫技以外沒任何好處的話 這樣寫只會增加理解困難 04/21 11:26
21F:→ w0005151: 比較就是我說的條件增加時不用落落長的條件判斷 04/21 11:33
22F:→ w0005151: 不過我沒軟體業面試經驗 大大是覺得單純的寫法較吃香? 04/21 11:35
23F:推 steve1012: 你不用if 但要很多handle 吧 04/21 11:44
24F:推 steve1012: 為了省if 而已 用container + lambda 反而更複雜 可能 04/21 11:49
25F:→ steve1012: 要想要怎麼說服人這樣比較好 04/21 11:49
26F:推 steve1012: 然後Scott Meyers 有建議用lambda 就夠 不要用bind(c+ 04/21 11:51
27F:→ steve1012: +14) 04/21 11:51
28F:推 sorryla: 第二篇的版本二 條件增加也只要多一個if 你的也要加新的 04/21 12:07
29F:→ sorryla: handle 所以並沒有比較有優勢 面試的白板題盡量以簡潔、 04/21 12:10
30F:→ sorryla: 邏輯清晰為主 寫太複雜去表達同樣邏輯的東西會自找麻煩 04/21 12:10
31F:→ sorryla: 而且白板是題沒辦法查資料的 寫越多東西越可能語法錯誤 04/21 12:11
32F:→ sorryla: 文法錯誤雖然不是大問題 但在面試官眼中還是會多少扣分 04/21 12:12
33F:→ w0005151: 是的 謝謝各位的意見 小弟是個很想進軟體業的自學者 04/21 12:47
34F:→ w0005151: 很需要各位專業人士的意見 04/21 12:47
35F:→ w0005151: 另外steve大說的是在Modern Effective C++嗎 04/21 12:48
36F:推 steve1012: 嗯嗯 04/21 13:10
37F:推 gmoz: 如果我是你同事我會覺得簡單幾行有需要搞得這麼嚴重嗎XD 08/06 17:39