求教, PHP 面试该问啥

2019-04-15 17:15:41 +08:00
 ninestep

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

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

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

1994 次点击
所在节点    问与答
18 条回复
hafuhafu
2019-04-15 17:30:40 +08:00
我只知道稍微正常一点的人都不会说出"这些东西现实开发中用不到,所以我不知道 /不说"这种话...
hoyixi
2019-04-15 17:48:44 +08:00
除了基础知识(个人感觉基础知识还是笔试最好,能筛掉一批,免得浪费时间),最实际的:你工作中常用到的、常见问题,分个类,和他的项目经验牵涉到的知识,取个交集。

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

不过这样用心的面试官恐怕没几个,多数被拉过去面试,都扒拉几个题库就去问了。
triptipstop
2019-04-15 17:55:02 +08:00
我来答一下,估计答不上来。
1. 微信浏览器可以用 session 不过是 一次性的 窗口关了 再开就要再用 openid 登录一次
2. evel 等命令执行的方法
3. 看不动题目
4. 唯一列表 普通列表 直接存的 key:value (真的记不得)
triptipstop
2019-04-15 17:56:14 +08:00
@ninestep 请评分 并 做出指导 我很期待向你学习
tomczhen
2019-04-15 17:57:43 +08:00
@triptipstop 3 应该是 redis 持久化的问题,AOF 和 RDB。
uqf0663
2019-04-15 18:15:04 +08:00
谁说小程序 cookies 不能用了?可以用的,只不过你要在 request 的时候带上 header 而已。
tujin
2019-04-15 20:26:41 +08:00
@tomczhen redis 数据与 mysql 这些关系数据库数据同步问题吧
ninestep
2019-04-15 20:46:58 +08:00
@uqf0663 如果他答上来这个我也认为是正确,但是直接用小程序的网络请求确实不行
ninestep
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
2019-04-15 21:06:23 +08:00
@tomczhen 不是这个问题,
@tujin 说的对,是这个问题,因为总有一些数据虽然是存在 redis 中就可以实现功能,但是希望把这些数据完整保存到数据库中,那么如何将这个数据保存到数据库中,就比如抢购,我一般的做法就是先把抢购数据存到 redis,然后异步处理,再用 websocket 通知前端做页面跳转,但是同时我由希望将具体参加抢购的人的信息写进数据库,作为下一次抢购活动的优先推送人,或者活动分析啥的。
azhi
2019-04-16 08:38:50 +08:00
转树形那个我也不会,老铁解答一下吧
wangwenfan
2019-04-16 09:59:43 +08:00
我一般会说,你会什么?我们聊聊
banyancheung
2019-04-16 12:37:32 +08:00
浏览器敲下一个 url 回车,到返回页面结果,这中间经历了什么环节?越详细越好
ninestep
2019-04-16 13:24:52 +08:00
@wangwenfan 好的学到了
ninestep
2019-04-16 13:25:44 +08:00
@banyancheung 这个问题我记下了,遇到简历上写精通的我会问的
ninestep
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
2019-04-16 13:47:11 +08:00
@azhi markdown 语法记错了,没有写成代码块,另外这个只是我随手写的,没有做过测试,大概思路是对的
NjcyNzMzNDQ3
2019-04-16 14:33:32 +08:00
赞同楼主的做法,网上随便找的面试题不可取.

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

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

文笔不好,希望对你有所帮助,大佬们看后请一笑而过.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/555404

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX