V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ninestep
V2EX  ›  问与答

求教, PHP 面试该问啥

  •  
  •   ninestep · 2019-04-15 17:15:41 +08:00 · 2150 次点击
    这是一个创建于 2052 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天面试一个人,他的简历上写的做过微信开发,运维,后台开发,redis 所以我问了

    1. 微信小程序每次请求都是独立请求,cookie+session 的模式不能用了,需要用什么方式实现相同功能?
    2. php 生产环境中需要禁用的函数有哪些?不需要确定的函数名,只需要说出功能或者某些类即可。
    3. redis 数据到数据库落地怎么做?
    4. redis 有几个数据类型?不需要说出名字,只要说出数量就好。 面试的人说这些问题现实开发用不到,我就换了一个问题 有一个二维数组$list,里面有pidlevel,name三个字段,要求将这个数组转化为树形,不限方法。 面试人又说现实开发中没有人会把所有数据取出来再做树形。

    我想问一下我的问题有没有问题,如果有问题,那面试中应该问一些什么?什么样的问题既能面试中问,又确实再现实中会遇到。

    第 1 条附言  ·  2019-04-15 21:09:10 +08:00
    各位如果可以,请将自己曾经出过的,遇到过的面试题写一下,我是第一次做招聘官,深刻知道找工作的不容易,所以我想认真面对每一个面试人,不想直接从网上下一套题目应付了事。
    18 条回复    2019-04-16 14:33:32 +08:00
    hafuhafu
        1
    hafuhafu  
       2019-04-15 17:30:40 +08:00
    我只知道稍微正常一点的人都不会说出"这些东西现实开发中用不到,所以我不知道 /不说"这种话...
    hoyixi
        2
    hoyixi  
       2019-04-15 17:48:44 +08:00
    除了基础知识(个人感觉基础知识还是笔试最好,能筛掉一批,免得浪费时间),最实际的:你工作中常用到的、常见问题,分个类,和他的项目经验牵涉到的知识,取个交集。

    比如,如果你遇到过数据库性能瓶颈,而对方简历也写了熟悉 xx 数据库和调优,你可以把你曾经的问题拿过来考他。

    不过这样用心的面试官恐怕没几个,多数被拉过去面试,都扒拉几个题库就去问了。
    triptipstop
        3
    triptipstop  
       2019-04-15 17:55:02 +08:00
    我来答一下,估计答不上来。
    1. 微信浏览器可以用 session 不过是 一次性的 窗口关了 再开就要再用 openid 登录一次
    2. evel 等命令执行的方法
    3. 看不动题目
    4. 唯一列表 普通列表 直接存的 key:value (真的记不得)
    triptipstop
        4
    triptipstop  
       2019-04-15 17:56:14 +08:00
    @ninestep 请评分 并 做出指导 我很期待向你学习
    tomczhen
        5
    tomczhen  
       2019-04-15 17:57:43 +08:00
    @triptipstop 3 应该是 redis 持久化的问题,AOF 和 RDB。
    uqf0663
        6
    uqf0663  
       2019-04-15 18:15:04 +08:00
    谁说小程序 cookies 不能用了?可以用的,只不过你要在 request 的时候带上 header 而已。
    tujin
        7
    tujin  
       2019-04-15 20:26:41 +08:00
    @tomczhen redis 数据与 mysql 这些关系数据库数据同步问题吧
    ninestep
        8
    ninestep  
    OP
       2019-04-15 20:46:58 +08:00
    @uqf0663 如果他答上来这个我也认为是正确,但是直接用小程序的网络请求确实不行
    ninestep
        9
    ninestep  
    OP
       2019-04-15 21:00:09 +08:00
    @triptipstop 第一个是因为小程序每次请求携带的 cookie 都不同,导致后台没法正常读取到 session,这种目前我知道两种解决方法,第一种就是 5 楼说的自己封装请求方法,把 cookie 写进去,另外一种就是参数里面携带 token,通过 token 确定登陆态;第二个对了,第三个其实就是 redis 怎么存进数据库,比如我现在做的一个聊天我就是写了一个队列任务一边发送聊天信息,一边把聊天信息存进数据库,其实方法有很多,定时转存什么的;第四个 redis 数据类型网上查一下就知道了,这个问题仅仅是考察它是否真正使用过 redis,所以稍微回答就好,另外百度都说 redis 是五种数据结构,但是最近我查文档的时候发现 redis 文档里面数据类型写了八个,但是推荐正式回答还是回答五个把,文档地址 https://redis.io/topics/data-types-intro
    ninestep
        10
    ninestep  
    OP
       2019-04-15 21:06:23 +08:00
    @tomczhen 不是这个问题,
    @tujin 说的对,是这个问题,因为总有一些数据虽然是存在 redis 中就可以实现功能,但是希望把这些数据完整保存到数据库中,那么如何将这个数据保存到数据库中,就比如抢购,我一般的做法就是先把抢购数据存到 redis,然后异步处理,再用 websocket 通知前端做页面跳转,但是同时我由希望将具体参加抢购的人的信息写进数据库,作为下一次抢购活动的优先推送人,或者活动分析啥的。
    azhi
        11
    azhi  
       2019-04-16 08:38:50 +08:00
    转树形那个我也不会,老铁解答一下吧
    wangwenfan
        12
    wangwenfan  
       2019-04-16 09:59:43 +08:00
    我一般会说,你会什么?我们聊聊
    banyancheung
        13
    banyancheung  
       2019-04-16 12:37:32 +08:00
    浏览器敲下一个 url 回车,到返回页面结果,这中间经历了什么环节?越详细越好
    ninestep
        14
    ninestep  
    OP
       2019-04-16 13:24:52 +08:00
    @wangwenfan 好的学到了
    ninestep
        15
    ninestep  
    OP
       2019-04-16 13:25:44 +08:00
    @banyancheung 这个问题我记下了,遇到简历上写精通的我会问的
    ninestep
        16
    ninestep  
    OP
       2019-04-16 13:44:59 +08:00
    @azhi
    ~~~
    /**
    * 数组生成树形
    * @param array $list 二维数组,内部有 pid,name,id 字段
    * @return array 树形数组
    * @throws Exception 报错
    */
    function listToTree($list)
    {
    $data = [];
    $tree = [];
    $ids = array_unique(array_column($list, 'id'));
    foreach ($list as $item) {
    if (!in_array($item['pid'], $ids)) {
    $data[$item['pid']][] = $item;
    } else {
    $tree[] = $item;
    }
    }
    /**
    * 闭包递归函数
    * @param int $pid 父 id
    * @param mixed $callback 递归函数,默认闯入本函数
    * @param int $count 当前递归层
    * @param int $max 最大递归层
    * @return array
    */
    $treeFun = function ($pid, $callback, $count = 1, $max = 10) use ($data) {

    try {
    $sub = $data[$pid];
    } catch (\Exception $e) {
    return [];
    }
    if (!empty($sub) && $count <= $max) {
    $count++;
    foreach ($sub as $it) {
    $sub['sub'] = $callback($it, $callback, $count);
    }
    }
    return $sub;
    };
    if (empty($tree)) {
    throw new Exception('未找到根节点');
    } else {
    foreach ($tree as &$item) {
    $item['sub'] = $tree($item['id'], $treeFun);
    }
    }
    return $tree;

    }
    ~~~
    ninestep
        17
    ninestep  
    OP
       2019-04-16 13:47:11 +08:00
    @azhi markdown 语法记错了,没有写成代码块,另外这个只是我随手写的,没有做过测试,大概思路是对的
    NjcyNzMzNDQ3
        18
    NjcyNzMzNDQ3  
       2019-04-16 14:33:32 +08:00
    赞同楼主的做法,网上随便找的面试题不可取.

    我觉得招人的时候要先确定好新人入职后干啥是首要目的,围绕目的来出实际工作上会发生的问题来问是最好的,扯些工作上用不到且胡吹海吹的技术没有意义.

    想的一下几点供参考.
    对近几年出的新鲜东西是否保持一个探索的态度?
    出了问题是否有独立解决的能力? ps:不会就问是好事,但是我更喜欢自己能解决问题的人
    入职后和同事是否相处融洽,例如做接口时能否考虑前端复杂度?

    文笔不好,希望对你有所帮助,大佬们看后请一笑而过.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3325 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 12:37 · PVG 20:37 · LAX 04:37 · JFK 07:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.