PHP面经

本人最近离职换工作,面试了几家,记录下面试经历,以便查漏补缺。
本人工作经验2年,求职岗位是PHP。

1 杭州蜂融 3.19 GG

面试我的应该是一个leader,面得一般,本人好久没面试,感觉没抓住很多点。挂了。

1.1 mysql 如果表里有几亿条数据 分页怎么快速跳转到指定的页面

答了用主键ID,面试官说是用最小ID,没答好。

1.2 Redis 是单进程为什么能这么高效

忘记了。I/O复用。

采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求

相关说明

1.3 用伪码写个冒泡排序

比较简单,冒泡核心就是,交换,一次循环确定一个位置。

1.4 看到有用过Elasticsearch,问了ELK L层怎么写入数据的

挂。没用过,平时开发只用到es的日志查询接口。
以后还是研究下吧。

1.5 Linux常用命令
答了 cat tail top ps file 其实有很多命令一时间忘记了。

cat tail top ls file pwd cp mv df ….

面试后面有点紧张一时间想不起来了,可能这就是菜吧。。。。

大概是这些,感觉问题不难,没有复习到位,还有自己在面试语言组织不是很好,火箭造不动,还是要好好复习。

2 小码王 3.20 GG

上来就是笔试题,填表然后面试,面试官看上去就很厉害,果然这次面试就凉了。

先根据笔试题问的:
2.1 mysql int(1) int(11) 的区别

int(11) 是指的显示宽度, 跟数据的存储和计算没有影响( ZEROFILL 除外 )

没答上 ZEROFILL 这个点

2.2 用不超过5行写一个方法判断 时间字符串 是否符合

1
2
3
function chekTime($str) {
//todo
}

有点忘记了怎么写的 感觉是用 strtotime 所以没多想,填的是

return strtotime($str)

面试官问 这个写法是否有问题,我对这个方法异常参数没用过,答得不好,感觉他不是很满意

回来查了 strtotime 的文档 ,发现在 PHP 5.1.0 之后解析失败是返回 FALSE ,所以应该要判断下而不是直接返回。不该错。

1
2
3
4
5
if (strtotime($str)) {
return true;
} else {
return false;
}

2.3 单例模式的使用举例

问的是公司的单例模式的应用有哪些,公司代码底层的单例还真没注意,有点疏忽了,答了个mysql连接使用的单例,答得不好,单例在laravel中有 任务调度、异常捕获。

2.4 接 2.3 问mysql在 nginx 使用的连接方式是fpm还是什么

不知道。查波google没结果,不知道问的是啥。

2.5 var_dump(intval(0.58 * 100)) 还有没有其他结果

笔试答案我填的是 int 58,我答得不够自信,所以质疑了一下,应该是答错了。

intval ( mixed $var [, int $base = 10 ] ) : int

通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。

正确结果是 int(57),看样子得研究一波原因了。

直接输出 intval(58) 发现结果是 int(58),所以问题是 0.58 * 100, 输出 var_dump(0.58 * 100) 结果是 float(58), 根据 intval 的文档说明,返回的是 var 的 integer 值, 所以 int(57)原因是 相乘之后的精度丢失,考察的是对这个精度问题的解答,如果改成 intval(bcmul(0.58, 100)) 结果就是58了。这个坑没了解过,涨知识了。

这个公司算是挂了,问的问题目前很多都没涉及到,不过学到了不少,不亏。