今天面试一个人,他的简历上写的做过微信开发,运维,后台开发,redis 所以我问了
$list
,里面有pid
,level
,name
三个字段,要求将这个数组转化为树形,不限方法。
面试人又说现实开发中没有人会把所有数据取出来再做树形。我想问一下我的问题有没有问题,如果有问题,那面试中应该问一些什么?什么样的问题既能面试中问,又确实再现实中会遇到。
1
hafuhafu 2019-04-15 17:30:40 +08:00
我只知道稍微正常一点的人都不会说出"这些东西现实开发中用不到,所以我不知道 /不说"这种话...
|
2
hoyixi 2019-04-15 17:48:44 +08:00
除了基础知识(个人感觉基础知识还是笔试最好,能筛掉一批,免得浪费时间),最实际的:你工作中常用到的、常见问题,分个类,和他的项目经验牵涉到的知识,取个交集。
比如,如果你遇到过数据库性能瓶颈,而对方简历也写了熟悉 xx 数据库和调优,你可以把你曾经的问题拿过来考他。 不过这样用心的面试官恐怕没几个,多数被拉过去面试,都扒拉几个题库就去问了。 |
3
triptipstop 2019-04-15 17:55:02 +08:00
我来答一下,估计答不上来。
1. 微信浏览器可以用 session 不过是 一次性的 窗口关了 再开就要再用 openid 登录一次 2. evel 等命令执行的方法 3. 看不动题目 4. 唯一列表 普通列表 直接存的 key:value (真的记不得) |
4
triptipstop 2019-04-15 17:56:14 +08:00
@ninestep 请评分 并 做出指导 我很期待向你学习
|
5
tomczhen 2019-04-15 17:57:43 +08:00
@triptipstop 3 应该是 redis 持久化的问题,AOF 和 RDB。
|
6
uqf0663 2019-04-15 18:15:04 +08:00
谁说小程序 cookies 不能用了?可以用的,只不过你要在 request 的时候带上 header 而已。
|
9
ninestep OP @triptipstop 第一个是因为小程序每次请求携带的 cookie 都不同,导致后台没法正常读取到 session,这种目前我知道两种解决方法,第一种就是 5 楼说的自己封装请求方法,把 cookie 写进去,另外一种就是参数里面携带 token,通过 token 确定登陆态;第二个对了,第三个其实就是 redis 怎么存进数据库,比如我现在做的一个聊天我就是写了一个队列任务一边发送聊天信息,一边把聊天信息存进数据库,其实方法有很多,定时转存什么的;第四个 redis 数据类型网上查一下就知道了,这个问题仅仅是考察它是否真正使用过 redis,所以稍微回答就好,另外百度都说 redis 是五种数据结构,但是最近我查文档的时候发现 redis 文档里面数据类型写了八个,但是推荐正式回答还是回答五个把,文档地址 https://redis.io/topics/data-types-intro
|
10
ninestep OP |
11
azhi 2019-04-16 08:38:50 +08:00
转树形那个我也不会,老铁解答一下吧
|
12
wangwenfan 2019-04-16 09:59:43 +08:00
我一般会说,你会什么?我们聊聊
|
13
banyancheung 2019-04-16 12:37:32 +08:00
浏览器敲下一个 url 回车,到返回页面结果,这中间经历了什么环节?越详细越好
|
14
ninestep OP @wangwenfan 好的学到了
|
15
ninestep OP @banyancheung 这个问题我记下了,遇到简历上写精通的我会问的
|
16
ninestep OP @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; } ~~~ |
18
NjcyNzMzNDQ3 2019-04-16 14:33:32 +08:00
赞同楼主的做法,网上随便找的面试题不可取.
我觉得招人的时候要先确定好新人入职后干啥是首要目的,围绕目的来出实际工作上会发生的问题来问是最好的,扯些工作上用不到且胡吹海吹的技术没有意义. 想的一下几点供参考. 对近几年出的新鲜东西是否保持一个探索的态度? 出了问题是否有独立解决的能力? ps:不会就问是好事,但是我更喜欢自己能解决问题的人 入职后和同事是否相处融洽,例如做接口时能否考虑前端复杂度? 文笔不好,希望对你有所帮助,大佬们看后请一笑而过. |