一次尷尬的面試經歷


     陰雨綿綿,騎上我心愛的小摩托,沒有堵車,順利到達目的。等了一陣,給了一份筆試題,做吧。
    遙想前幾日,我臨時決定寫簡歷,周末2天時間我大致整理出了我的一份新簡歷。於是乎,我上傳到了某些平台。前天,我開始溝通,與某個公司簡短的溝通之后,便遞交了我的簡歷。當天下午,收到了他們的面試邀請,然后我做了一個很大的決定:“去試試”。

    從到面試的時間往前推,留給我復習的時間只有2天不到,這兩天我還要工作,那差不多久是晚上了。這段時間里,我看了兩套面試題,然后又看了很多協議、進程、nginx、php-fpm的知識,有預習了我自己寫過的項目。最后,我差不多知道,做筆試的話,應該有點老火,畢竟最近業務忙,(雖然可能是基礎差說辭,但是也真有點,筆試和考試一樣,復習的好,效果可能會好很多)。

 

   兩張紙,做題40多分鍾,字也太差了,重抄了一份。整套題的難度適中,但我寫出來的效果還是差太多,這也反應自己的基礎問題,平時也不能光Ctrl+c、Ctrl+v了,考前多預習。

  現在我來分析一下題以及我回答的情況:

       大致的題目如下:

  1. 求100以內的素數(1和自身整除)
  2. 用戶表user 字段id,name,age,city 寫sql:age 20~30,city分組,分組>10
  3. 字符串"aabckaaas" 求出現最多的字母
  4. "/usr/home/www/user.php"的后綴
  5. 正則匹配 1a2l13c的全部數字
  6. 求 你好啊hello,中文算一個的長度
  7. 補全時間,給定的集合中,補全前后差值超過3的元素
    [
    ['time' => 1],
    ['time' => 4],
    ['time' => 7],
    ['time' => 22],
    ['time' => 31],
    ['time' => 41],
    ]

    我的情況:

  1.           素數:我寫的是個啥,只想到了第二層循環去除,➳♥゛
     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);

     

  2. 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

     

  3. 求出現最多的字母:我這里首先混淆了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));

     

  4. 取文件后綴:使用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;

     

  5. 正則:我都不貼我寫的了,居然把子表達式符號記成了{},還有函數還少寫了中間的字符串
    preg_match_all("/(\d+)/", "1a2l13c", $matches);

     

  6. 求含有中文字符的長度,中文算一個:
    echo '長度:', mb_strlen("你好啊hello"), PHP_EOL;

     

  7. 補全時間:現場寫的時候我在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;公司的接口安全如何處理;數據量大了如何處理;團隊如何協作等等

 

留給每個看到的技術人

          假如面試官問你 遇到了哪些復雜的問題,你們如何回答呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM