一次尴尬的面试经历

     阴雨绵绵,骑上我心爱的小摩托,没有堵车,顺利到达目的。等了一阵,给了一份笔试题,做吧。
    遥想前几日,我临时决定写简历,周末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;公司的接口安全如何处理;数据量大了如何处理;团队如何协作等等

 

留给每个看到的技术人

          假如面试官问你 遇到了哪些复杂的问题,你们如何回答呢?

posted @ 2020-05-20 17:41  yangboom  阅读(664)  评论(2编辑  收藏  举报
TOP