我司 PHP 面试题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
外包信息请发到 /go/outsourcing 节点。
不要把相同的信息发到不同的节点
dongbeta
V2EX    酷工作

我司 PHP 面试题

  •  
  •   dongbeta 2014-07-06 18:48:26 +08:00 9759 次点击
    这是一个创建于 4116 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们是一个位于美国/香港/北京的创业公司,我们致力于创建一个面向美国市场的专业金融服务网站。 关于招聘要求,薪资福利,项目发展请参考 https://careers.ngfplanner.com/

    受 sofish/hire 启发,今天制作了一份题目放在:
    https://github.com/dongbeta/hire

    欢迎来踩 ☆*:.. o()o ..:*☆
    第 1 条附言    2014-07-06 20:57:01 +08:00
    改写了 Part III,更准确地考察了我们想要看到的东西。

    *\(^o^)/*


    是的,我们不考算法,只是用三个很简答的问题和背后的记分项目。如果能通过这三步的考察,才有可能是我们需要找到人和愿意给高薪酬的人。
    78 条回复    2014-08-08 17:12:53 +08:00
    wy315700
        1
    wy315700  
       2014-07-06 18:57:20 +08:00
    dongbeta
        2
    dongbeta  
    OP
       2014-07-06 18:59:40 +08:00
    @wy315700 看后端的,前端的还没 push。
    RemRain
        3
    RemRain  
       2014-07-06 19:11:04 +08:00
    前端题目404。
    后端题目P1面试时候聊聊还行,放笔试里面答起来太累了,另外从题目来看,懂yii和laravel有加分,私以为不用规定这么死,让应聘者聊自己所熟悉框架也可以。
    P2部分要想好好做,工作量不小,即使写出来,也不能确保换一个环境能正常运行。加分项里面有HighCharts,这是要求后端工程师对前端常用框架也有所了解么?
    P3考验编码质量

    感觉纯PHP开发好那啥啊,都是偏重应用和对各种框架的熟悉程度,没有数据结构、操作系统之类的要求

    表示我不是来面试的,只是被题目吸引进来了>_<"
    raincious
        4
    raincious  
       2014-07-06 19:11:44 +08:00
    Part 3, 请问用foreach搞定的能给多少工资?

    $arr = array('P.R. China', 'United States', 'Taiwan');
    $i = count($arr);
    foreach ($arr as $v) {
    echo $v;
    }
    xuxu
        5
    xuxu  
       2014-07-06 19:19:58 +08:00
    Part III:
    $countries = array('P.R. China', 'United States', 'Taiwan');
    foreach($countries as $country) {
    echo $country;
    }

    6行代码能有啥问题?
    wy315700
        6
    wy315700  
       2014-07-06 19:20:59 +08:00
    @raincious 同问

    顺便问问有没有比foreach更好的答案。
    barbery
        7
    barbery  
       2014-07-06 19:21:49 +08:00
    赞一个,这样的形式比较好玩!
    trimleo
        8
    trimleo  
       2014-07-06 19:26:42 +08:00
    今天看快简历的时候也看到贵司了
    RemRain
        9
    RemRain  
       2014-07-06 19:35:24 +08:00
    我觉得echo的时候还得加个空格或者\n,不让打印出来连在一起多丑
    msputup
        10
    msputup  
       2014-07-06 19:38:31 +08:00 via iPhone
    @wy315700 应该没有吧foreach的性能好像比while快上20%左右。其他能替代的是有,但是论性能,没发现
    dongbeta
        11
    dongbeta  
    OP
       2014-07-06 20:02:16 +08:00
    @xuxu 还是有问题的
    @RemRain 你说的问题是因为我们故意把考题设置成这个样子的。而且一周时间搞不懂一道加分问题的话,可以不用试了。
    @trimleo 欢迎来试试呀
    @raincious 薪资报酬在说明中有,全做完才能考评 :)
    yzxh24
        12
    yzxh24  
       2014-07-06 20:11:50 +08:00   1
    Part III:
    $array = array('P.R. China', 'United States', 'Taiwan');
    echo implode('', $arr);
    horsley
        13
    horsley      2014-07-06 20:13:01 +08:00
    我觉得p3的主要问题在于在循环测试条件上反复count,数组小倒是关系不大,但是是个坏习惯,而且计数变量没啥用途,如楼上所说foreach就好
    raincious
        14
    raincious  
       2014-07-06 20:13:33 +08:00
    @dongbeta 这个问题暂时先不谈。

    那个,front-end.md中间多了个“-”,已经fork改成没有“-”的版本了……

    楼主如果也觉得那个难看,pull request已发……
    yzxh24
        15
    yzxh24  
       2014-07-06 20:14:47 +08:00
    一看到要去抓取别人数据顿时就没兴趣了。。。
    dongbeta
        16
    dongbeta  
    OP
       2014-07-06 20:19:26 +08:00
    @raincious 我正在查到底哪个词是对的 back-end, backend, front-end, frontend。我的字典告诉我说 frontend 是错的。
    yakczh
        17
    yakczh  
       2014-07-06 20:22:16 +08:00
    可以远程工作吗?
    dongbeta
        18
    dongbeta  
    OP
       2014-07-06 20:24:26 +08:00
    @yakczh 如果你足够优秀,我们会想方设法让你来北京的。这不,某成都刚买了房子的同学都搬到我大石景山区来了。
    raincious
        19
    raincious  
       2014-07-06 20:32:30 +08:00
    @dongbeta

    好吧。根据 http://english.stackexchange.com/questions/34447/is-it-front-end-frontend-or-front-end 的回答者,他认为front-end以及frontend都是Front End的一种形式。

    于是乎,根据他的观点,其实front-end和frontend都是“可替代形式”,一个级别的。那么可以考虑牵就Backend。

    然后,

    (Google Front-End)
    http://googlesystem.blogspot.com/2007/09/googles-server-names.html

    (GnuPG Frontends)
    https://www.gnupg.org/related_software/frontends.html

    其实貌似没有一个统一的标准来定义到底应该说frontend还是front-end。所以讨论这个某种程度有点像是……大括号是否另起一行?我猜。
    hxgdzyuyi
        20
    hxgdzyuyi  
       2014-07-06 20:55:58 +08:00
    感觉 part3 应该给个测试用例比较好。
    dongbeta
        21
    dongbeta  
    OP
       2014-07-06 20:57:43 +08:00
    @hxgdzyuyi 你说的对。我修改了 Part III ,现在能真实反应原来的考察意图了。
    dongbeta
        22
    dongbeta  
    OP
       2014-07-06 20:58:04 +08:00
    @raincious 嗯,好纠结啊。
    Actrace
        23
    Actrace  
       2014-07-06 21:06:26 +08:00
    B格有点高。。。英文注释。。。
    jsonline
        24
    jsonline  
       2014-07-06 21:08:13 +08:00
    我这里面试/笔试都是因人而异的。
    cdffh
        25
    cdffh  
       2014-07-06 21:11:11 +08:00
    不错的面试题 顶一个。
    nooper
        26
    nooper  
       2014-07-06 21:22:28 +08:00
    股票的那个太。。。,缺少金融专业知识。
    Actrace
        27
    Actrace  
       2014-07-06 21:27:02 +08:00
    我就觉得第三题有点意思.
    function filter($arr, $check, $check2 = null) {
    $new_arr = [];
    if ($check2 !== null) {
    foreach ($arr as $val) {
    if (strpos($val, $check) !== false) {
    $new_arr[] = $val;
    continue;
    }
    if (strpos($val, $check2) !== false) {
    $new_arr[] = $val;
    }
    }
    } else {
    foreach ($arr as $val) {
    if (strpos($val, $check) !== false) {
    $new_arr[] = $val;
    }
    }
    }
    return $new_arr;
    }
    evefree2
        28
    evefree2  
       2014-07-06 21:27:17 +08:00
    深圳的是否去hk office
    Actrace
        29
    Actrace  
       2014-07-06 21:27:25 +08:00
    窝巢,我完美的换行没了...
    raincious
        30
    raincious  
       2014-07-06 21:36:20 +08:00
    @dongbeta

    题目不错哈。感觉不坑,希望我到时候找工作的时候也能遇到这样有意思的题,而别是我根本做不好的算法题。

    照着原功能写了下,我觉得要不就是str_replace对端字符串的性能很强,要不就是我什么地方搞错了。献丑:
    https://gist.github.com/raincious/c8b6d71d5b895e2cceda
    raincious
        31
    raincious  
       2014-07-06 21:41:55 +08:00
    @Actrace 贴gist吧。

    话说,我竟然忘了continue,这样就不用叫那个is_null判断了。

    Nice coding BTW.
    Actrace
        32
    Actrace  
       2014-07-06 21:51:38 +08:00
    @raincious 刚刚跑了一下你的代码,顺路把我的方法也贴上去,发现结果竟然有误差.

    $array:423

    255
    0.0010440349578857
    255
    0.00032591819763184
    //下面这个是我那个方法的结果...姿势不对吗?
    423
    0.00036907196044922
    Actrace
        33
    Actrace  
       2014-07-06 21:54:01 +08:00
    P3其实有两个问题.
    while里面放count会导致性能下降.
    strpos可能给出0,也就是开头就匹配到了,不过if会将0当做false来处理,所以需要全等判断.
    WildCat
        34
    WildCat  
       2014-07-06 21:57:16 +08:00 via iPhone
    一周内完成就可以…?
    我本来以为我PartI会很
    xiaozi
        35
    xiaozi  
       2014-07-06 22:10:54 +08:00
    其实用array_filter来个匿名回掉函数就可以了,strpos记得用false来判断,简单的一毛
    dongbeta
        36
    dongbeta  
    OP
       2014-07-06 22:12:44 +08:00
    @nooper 那些术语应该不是问题,我们也都缺乏专业背景。
    @WildCat 嗯,一周。可以参考任意资料。:)
    dongbeta
        37
    dongbeta  
    OP
       2014-07-06 22:13:31 +08:00
    @xiaozi 如果觉得简单,可以试试。
    raincious
        38
    raincious  
       2014-07-06 22:15:21 +08:00
    @Actrace 这是因为我傻了……写完代码然后运行了下能跑就贴了……完全没主意到感叹号以及变量名的问题……(掩面)

    我就当这是上帝在警告我不要瞎起哄了,我去安安静静的完成我的山寨FormValidation类去了……
    Actrace
        39
    Actrace  
       2014-07-06 22:17:01 +08:00
    @xiaozi strpos的全等判断可以刷出很多人了,楼主其实想要PHP基本功扎实的码农免得以后写出很多坑。


    @dongbeta 另外还可以在面试的时候要求写一个创建空文件或者序列化函数,要用笔来写。这招可以刷掉不少号称N年PHP开发的人。。。亲测可用。
    xiaozi
        40
    xiaozi  
       2014-07-06 22:17:56 +08:00
    laravel Facade各种舒服的 链式调用,但是IDE基本都认不出来函数的定义位置,重度的magic函数依赖
    xiaozi
        41
    xiaozi  
       2014-07-06 22:22:01 +08:00
    @dongbeta 楼主要考基本功,不如直接笔试的时候 各种不同类型的变量进行比较,死记的基本嗝屁。
    还有熟悉php的那些个内置函数才是比较重要的,不要重复造轮子。
    还有比如switch in_array神马的都是弱类型比较也是可以考察一下的。
    dongbeta
        42
    dongbeta  
    OP
       2014-07-06 22:22:37 +08:00
    @Actrace 还有呢。

    不过不再提示了。愿意试试的朋友可以参加一下。对于优秀的人才,其他都不是问题。
    Actrace
        43
    Actrace  
       2014-07-06 22:36:20 +08:00
    @dongbeta
    HTTP协议,GET参数长度,做后端开发不知道的话,真的应该TJJTDS。
    这个又可以刷掉不少人哦。。。~
    我面试不少人没有一个正确回答。后来只好把这个从面试里移除掉了。
    baocaixiong
        44
    baocaixiong  
       2014-07-06 22:37:52 +08:00
    @dongbeta

    https://gist.github.com/78f306e51628fb45c4f0.git

    这个我刚刚试了试,最近喜欢用数组方法。
    baocaixiong
        45
    baocaixiong  
       2014-07-06 22:38:32 +08:00
    raincious
        46
    raincious  
       2014-07-06 22:39:59 +08:00
    @Actrace 我又来了,还得问PHPUnit用的咋样。原因我就掩面不说了……

    还有一些规范,PSR-2。或者直接拿写好的代码来看,如果漂亮说明还是会注意代码风格的。
    Actrace
        47
    Actrace  
       2014-07-06 22:43:03 +08:00
    @baocaixiong 不定参数的方式在IDE里就没有提示了。另外需求是两个参数。虽然说可以做得很灵活,但是不符合要求的吧?
    这个代码看起来很高端,但是嵌套太多层代码质量严重蛋疼了。
    另外你可以用 @raincious 的代码跑个分。。。我对这个比较感兴趣。。。第一次看到这么写的。。。
    Actrace
        48
    Actrace  
       2014-07-06 22:46:12 +08:00
    @raincious 玩PHP那么多年了,PHPUnit在我心中一直都是传说。
    baocaixiong
        49
    baocaixiong  
       2014-07-06 22:47:17 +08:00
    @Actrace 我现在操作数组的时候,只要是能用map, filter, reduce,这些函数的统统不用foreach了。

    具体性能还没有仔细研究过呢,这么多嵌套我要是将closure拆到array_filter外面可能会好看点点。
    另外:咋跑分?
    baocaixiong
        50
    baocaixiong  
       2014-07-06 22:49:12 +08:00
    @Actrace 我刚进公司的时候,我被安排给一个项目补unittest,大概一个多月的时间,全部都在写phpunittest, 虽然痛苦不已,但是现在来看,我觉得unittest这个过程是必须的了。也更加深入了项目代码的理解。
    当然,我现在写测试的速度很快,检查错误也很快,可能就是之前养成的
    raincious
        51
    raincious  
       2014-07-06 22:52:38 +08:00
    @Actrace 还好吧,我觉得对我这种不知道啥时候就掩面的,PHPUnit还是挺有用的……

    我现在上比较重要的新模块都这么干了:



    而且这样开发效率会稍微高点,因为毕竟不用让其他用不着的部分跑起来。以前都是在实际项目上做测试,然后一个页面刷新下整个服务都得开起来,比较麻烦。
    xiaowangge
        52
    xiaowangge  
       2014-07-06 22:54:47 +08:00 via Android
    「您访问的是: https://careers.ngfplanner.com/

    经检测发现该网站可能存在OpenSSL“心血”漏洞,登录该网站可能会泄漏你的账号和密码,建议你暂时不要登录。

    如果您确认该网页不包含有欺诈内容,可以选择继续访问或者进行误报申诉」

    Android手机访问时,腾讯管家报告。(^_^)
    Actrace
        53
    Actrace  
       2014-07-06 22:55:03 +08:00
    @baocaixiong 请看30楼。
    另外在过去的时代,据说是用结构体+关键字会比调用函数性能要好。所以老朽一直优先考虑使用这种解决方案来处理问题。
    过多嵌套确实是会影响代码可读性的。
    这个就需要综合考量了。
    除非项目完全你自己一个人写,否则在做这种决定的时候最好先咨询其他人的意见。
    Actrace
        54
    Actrace  
       2014-07-06 23:01:55 +08:00
    @raincious
    @xiaowangge
    有一些东西必须走完整流程。当你们碰到这样的问题时。
    http://v2ex.com/t/121102
    测试这种事情,怎么简单怎么来。
    就拿刚刚那个30楼的测试来说,把代码copy下来放netbeans改改运行10秒都用不到。
    如果用IDE开发的话,基本上80%的问题都能提前解决。
    baocaixiong
        55
    baocaixiong  
       2014-07-06 23:02:54 +08:00
    @Actrace
    @raincious

    谢谢。我的慢多了。
    原来跑分这么简单...
    aveline
        56
    aveline  
       2014-07-06 23:11:23 +08:00
    zhujinliang
        57
    zhujinliang  
       2014-07-07 07:45:37 +08:00
    第三题回头看看能不能用preg_filter搞一下
    simapple
        58
    simapple  
       2014-07-07 08:26:57 +08:00
    part 1 说不太好,YII laravel在真正使用于全环境的时候还是少,
    part 2 推荐phpsimpledomparse 搞到数据很简单,除非页面数据来自认证和js渲染
    part 3 不知道要考察啥,$arr会是多维数组么?换个思路,直接将要查找的元素组成一个数组,和原数组取交集怎么样?

    楼主提供的待遇倒是诱惑力十足,满满的幸福啊
    likexian
        59
    likexian  
       2014-07-07 09:29:14 +08:00
    part 3

    def filter(arr, check, check2):
    ....new_arr = [i for i in arr if check in i and check2 in i]

    so, 老板,写什么php啊,我们换python吧,python是世界上最好的语言
    555
        60
    555  
       2014-07-07 09:38:31 +08:00
    part3和前面的感觉不在一个档次上
    konakona
        61
    konakona  
       2014-07-07 10:31:41 +08:00
    有点意思,做做题。
    svampire
        62
    svampire  
       2014-07-07 10:38:38 +08:00
    已在香港可否在香港工作?
    lijingyu68
        63
    lijingyu68  
       2014-07-07 11:05:13 +08:00
    顺便贴一下我的代码,主要是从功能方面考虑,扩展了只能传入两个参数的限制,没考虑性能的问题。

    function filter($arr){
    $args = func_num_args();
    $checks = array_slice(func_get_args(), 1);
    if($args < 2){
    throw new exception('Parameter Error: need at least 2 parameters.');
    }
    $result = [];
    foreach($arr as $item){
    foreach($checks as $check){
    if(strpos($item, $check)){
    $result[] = $item;
    break;
    }
    }
    }
    return $result;
    }

    貌似比前面几位短。。。献丑了
    dongbeta
        64
    dongbeta  
    OP
       2014-07-07 11:23:20 +08:00
    @svampire 目前技术团队大部分在北京,不过你可以考虑远程。
    dongbeta
        65
    dongbeta  
    OP
       2014-07-07 11:24:05 +08:00
    @likexian 我写 ruby 的,你让我换 python ……
    ideaa
        66
    ideaa  
       2014-07-07 14:01:10 +08:00
    function filter2($arr, $check, $check2=null)
    {
    $result = array();
    array_map(function($a) use($check, $check2, & $result){
    if (false !== strpos($a, $check)) {
    $result[] = $a;
    } else if (null !== $check2 && false !== strpos($a, $check2)) {
    $result[] = $a;
    }
    }, $arr);

    return $result;
    }

    这样如何?
    cocalrush
        67
    cocalrush  
       2014-07-07 14:54:46 +08:00
    哈哈 这样比较赞 ~~ 蛮好玩的
    zencoding
        68
    zencoding  
       2014-07-07 15:42:06 +08:00
    function filter($arr, $check, $check2 = null){
    $new_arr = checkit($arr, $check);
    if ($check2) $new_arr .= checkit($arr, $check2);
    }
    function checkit($arr, $check){
    $tmp_array = array();
    foreach ($arr as $key => $value) {
    if (strpos($value, $check) !== false) $tmp_array[$key] = $value;
    }
    return $tmp_array;
    }
    bestwishes
        69
    bestwishes  
       2014-07-07 16:02:38 +08:00
    第三题很简单啊,其实就是一行语句的事情大家想复杂了吧

    <?php
    $arr = array('a', 'b', 'c');
    $check = 'a';
    $check2 = 'b';

    $new_arr = array_filter($arr, function ($str) use ($check, $check2) {
    return !empty($check) && strpos($str, $check) !== false || !empty($check2) && strpos($str, $check2) !== false;
    });
    print_r($new_arr);

    另外楼主的代码写的有问题,strpos不能这么用啊,要判断!==false而不是直接当成boolean的值来用,要知道如果这个被包含的字符串可能是从第0个字符开始的,这样会出差错了
    bestwishes
        70
    bestwishes  
       2014-07-07 16:17:51 +08:00
    第二题我做过类似的,还是8年以前做的了,在elance上给一个美国的印度人做的,用curl抓的数据,然后用gd2把那个数据图给改颜色,尺寸和去logo了,具体记不太清楚。觉得这类需求PHP就不合适,还是用node.js的request搭配cheerio吧,绝配
    Yii和Laravel都有研究过一些,不过Yii没怎么开发过实际项目。
    ejan
        71
    ejan  
       2014-07-07 20:47:36 +08:00
    我随手把第一题转给我的CTO,他说他不知道,我该怎么办?着急,在线等……
    ioth
        72
    ioth  
       2014-07-08 10:17:17 +08:00
    前端招聘题目

    我们的前端小伙伴正在编写题目中 …… ^_^

    .....
    lenzhang
        73
    lenzhang  
       2014-07-08 14:57:52 +08:00
    第三题目测
    想到用array_map,array_filter的可以通过,其他的估计很难通过
    zerooo
        74
    zerooo  
       2014-07-12 22:43:12 +08:00
    @dongbeta 这个招聘信息还有效吗?为什么给你们发了项目地址没有回复?
    dongbeta
        75
    dongbeta  
    OP
       2014-07-13 10:54:35 +08:00
    @zerooo 有效,这两天我们在做版本demo,还没有来得及回复。
    @lenzhang 不好意思,你解读错了。
    yqw
        76
    yqw  
       2014-08-07 10:00:10 +08:00
    请问贵公司能办理香港的工作签证吗?(理工大学学生
    dongbeta
        77
    dongbeta  
    OP
       2014-08-08 16:50:03 +08:00
    @yqw 抱歉,不能办理,目前技术在北京这边。
    yqw
        78
    yqw  
       2014-08-08 17:12:53 +08:00
    @dongbeta 好吧,谢谢T^T
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     850 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 20:26 PVG 04:26 LAX 13:26 JFK 16:26
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86