陰雨綿綿,騎上我心愛的小摩托,沒有堵車,順利到達目的。等了一陣,給了一份筆試題,做吧。
遙想前幾日,我臨時決定寫簡歷,周末2天時間我大致整理出了我的一份新簡歷。於是乎,我上傳到了某些平台。前天,我開始溝通,與某個公司簡短的溝通之后,便遞交了我的簡歷。當天下午,收到了他們的面試邀請,然后我做了一個很大的決定:“去試試”。
從到面試的時間往前推,留給我復習的時間只有2天不到,這兩天我還要工作,那差不多久是晚上了。這段時間里,我看了兩套面試題,然后又看了很多協議、進程、nginx、php-fpm的知識,有預習了我自己寫過的項目。最后,我差不多知道,做筆試的話,應該有點老火,畢竟最近業務忙,(雖然可能是基礎差說辭,但是也真有點,筆試和考試一樣,復習的好,效果可能會好很多)。
兩張紙,做題40多分鍾,字也太差了,重抄了一份。整套題的難度適中,但我寫出來的效果還是差太多,這也反應自己的基礎問題,平時也不能光Ctrl+c、Ctrl+v了,考前多預習。
現在我來分析一下題以及我回答的情況:
大致的題目如下:
-
求100以內的素數(1和自身整除)
-
用戶表user 字段id,name,age,city 寫sql:age 20~30,city分組,分組>10
-
字符串"aabckaaas" 求出現最多的字母
-
"/usr/home/www/user.php"的后綴
-
正則匹配 1a2l13c的全部數字
-
求 你好啊hello,中文算一個的長度
-
補全時間,給定的集合中,補全前后差值超過3的元素
[
['time' => 1],
['time' => 4],
['time' => 7],
['time' => 22],
['time' => 31],
['time' => 41],
]
我的情況:
- 素數:我寫的是個啥,只想到了第二層循環去除,➳♥゛
1 $arr = []; 2 for ($i = 1; $i <= 100; $i++) { 3 for ($j = 1; $j <= $i; $j++) { 4 if ($i % $j == 0 && $i % 1 == 0 && $i != $j) { 5 break; 6 } 7 $arr[] = $i; 8 } 9 10 } 11 12 echo '<pre>'; 13 print_r($arr);
正解:看了正確的答案,其實很簡單,大概是我笨了吧 難受
$arr = []; for ($i = 1; $i <= 100; $i++) { $flag = 1;//假設是素數 for ($j = 2; $j < $i; $j++) { if ($i % $j == 0) { $flag = 0;//如果被其他數整除,就不是素數 break; } } if ($flag) $arr[] = $i; } echo '<pre>'; print_r($arr);
- sql語句:我真想抽自己一巴掌了,順序都能記錯。
SELECT count('*') as total,city from test.user_info where age >= 20 and age <= 30 having total > 10 group by city
正解:where 過濾的數據列表,先where 在 group by分組,having是對聚合之后的數據進行過濾
SELECT count('*') as total,city from test.user_info where age >= 20 and age <= 30 group by city having total > 10
-
求出現最多的字母:我這里首先混淆了implode【將一個數組按照指定字符串拼接成字符串】和explode【將一個字符串按照指定字符串分割成數組】,該死。但是使用explode也是錯誤的,手冊說明了:如果
delimiter
為空字符串(""),explode() 將返回FALSE
$str = "aabckaaas"; $arr = implode('', $str);//我把函數用錯了,使用explode $nums = []; foreach ($arr as $value) { if (strpos($str, $value) !== false) { if (isset($nums[$value])) { $nums[$value] += 1; } else { $nums[$value] = 1; } } } $values = array_values($nums); $max = max($values); foreach ($nums as $key => $num) { if ($num == $max) { echo '最多的字母:', $key, PHP_EOL; break; } }
測試之后的正解:可以使用str_split分割函數,按照指定的長度分割成數組,然后基礎不扎實嘛,不是只有索引數組可以使用max函數,關聯數組也行。array_search()就是查詢元素對應的鍵的
$str = "aabckaaas"; $arr = str_split($str, 1);//我把函數用錯了 $nums = []; foreach ($arr as $value) { if (strpos($str, $value) !== false) $nums[$value] = isset($nums[$value]) ? $nums[$value] + 1 : 1; } $max = max($nums); var_dump(array_search($max, $nums));
- 取文件后綴:使用pathinfo時,我擔心把extension寫錯,我又多此一舉寫了一個后面的方法
$str = '/usr/home/www/user.php'; $pathInfo = pathinfo($str); echo '后綴:', $pathInfo['extension'], PHP_EOL; $a = end(explode('.', $str)); echo '后綴:', $a[0], PHP_EOL;
-
正則:我都不貼我寫的了,居然把子表達式符號記成了{},還有函數還少寫了中間的字符串
preg_match_all("/(\d+)/", "1a2l13c", $matches);
- 求含有中文字符的長度,中文算一個:
echo '長度:', mb_strlen("你好啊hello"), PHP_EOL;
- 補全時間:現場寫的時候我在for循環的起始,沒有多+3,導致起點重復了;多此一舉的排序,大腦里想着早點寫完,思路也沒有審核一下。
foreach ($times as $key => $time) { if ($key > 0) { $diff = $time['time'] - $times[$key - 1]['time']; if ($diff > 3) { $st = $times[$key - 1]['time']; for ($i = $st; $i <= $time['time']; $i += 3) {// 我答案上少些了一個+3 $newtTimes[] = ['time' => $i]; } } else { $newtTimes[] = $time; } } else { $newtTimes[] = $time; } } $t = []; foreach ($newtTimes as $newtTime) { $t[] = $newtTime['time']; } array_multisort($t, SORT_ASC, $newtTimes); print_r($newtTimes);
測試之后的正解
foreach ($times as $key => $time) { if ($key > 0) { $diff = $time['time'] - $times[$key - 1]['time']; if ($diff > 3) { $st = $times[$key - 1]['time']; for ($i = $st + 3; $i <= $time['time']; $i += 3) {// 我答案上少些了一個+3 $newtTimes[] = ['time' => $i]; } } else { $newtTimes[] = $time; } } else { $newtTimes[] = $time; } } print_r($newtTimes);
總結我的答題:
以上回答均是個人寫法,基礎弱。
面試
一個感覺年齡差不多的人像我走來,我大概知道他是面試官了。進去之后,先讓我做自我介紹。已經3年沒面試的我,顯得很唐突。簡單幾句我說完了。
溝通中,我說了我的項目經歷,然后他問了我 遇到的復雜的業務:我大致講了我認為的復雜的。有兩個細節我記得,一就是我說了索引失效的問題,但是我答得很淺,其實我也確實對索引認知不夠。二就是我說了我做一個商品管理的復雜業務(也沒說好)
另外,我今天有點針鋒相對了,他認為我做的業務難度不大,其實我也這么覺得。現在的我多了一個反問的膽子,我問:你們有什么復雜的業務嘛,你們php主要做啥....
聽他說了,我也怎么明白。當時有點尷尬,現在想來,自己說的厲害了。他們團隊是充盈的,在相同的業務情況下(視頻實時預覽,硬件對接),他們有着自己的底層,而我只有接入第三方的解決方案,以及使用nodejs、workerman、swoole做長連接服務,確實顯得
有點差勁了。但是我會相信 未來 php在常駐內存、網絡應用上一定會有一席之地,而我仍會堅持學習它們。
整個下來,效果不怎么好。面試官沒有get的我回答問題的深度,我自己也不自信了,然后回答的也不好。也感謝面試官的語言,深刻的讓我認識到當前所做的局限性。作為一個技術人,除了物質要求,也渴望技術領域的提升
時間倒流
人家問我做過什么復雜的業務沒有:
我應該把 我做的 接口安全規范驗證、webgis地圖服務,使用winform開發的桌面程序與php對接這些補上去,即使也會認為不復雜
人家問還有什么想問的:
我其實想問:公司的系統的pv、uv;公司的接口安全如何處理;數據量大了如何處理;團隊如何協作等等
留給每個看到的技術人
假如面試官問你 遇到了哪些復雜的問題,你們如何回答呢?