V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dongbeta
V2EX  ›  酷工作

我司 PHP 面试题

  •  
  •   dongbeta · 2014-07-06 18:48:26 +08:00 · 9005 次点击
    这是一个创建于 3572 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们是一个位于美国/香港/北京的创业公司,我们致力于创建一个面向美国市场的专业金融服务网站。 关于招聘要求,薪资福利,项目发展请参考 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   ·   我们的愿景   ·   实用小工具   ·   3276 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 13:47 · PVG 21:47 · LAX 06:47 · JFK 09:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.