京东 PHP 一面、二面总结

一面(完全自嗨)

2017 年 9 月 23 日上午 11:00 左右,小雨,在上海瀚海明玉大酒店,面试官是个女的,面试过程大概经历了 40 多分钟,其中大部分时间都由我在讲,全程问题都是围绕我的自我介绍和项目经验展开,我很主动。

  • 自我介绍

    毕业,我虽非计算机相关专业,但我较为系统的学习过计算机相关知识 ……

    (以时间为线索)

    2014 年 ……

    2015 年 ……

    2016 年 ……

    2017 年 ……

  • 项目介绍

    自我介绍中有讲在腾讯大连实习,参与了 PC QQ 看点和 TIM 消息漫游等项目的开发,因此对项目做了简单的介绍 ……

  • 安全处理

    因为自我介绍中提到了 WEB 安全升级,问了我做了哪些安全防范,从前端到后端都答了,因为之前有总结过,具体可以看我之前的博文《web 安全实战》

  • WEB 性能优化

    项目中提到了性能优化,然后问我做了哪些优化,这些问题都是比较广,比较开放,还好之前总结过《web 性能优化实战》,按照总结的思路逐一说,从前端到后端都有做优化,从如何减少 HTTP 请求(webpack js/css打包) –> 减少 TCP 连接(keep-alive) –> 压缩(gzip/deflate) –> 缓存等,大到传输、计算、存储,小到 HTTP 各种版本之间的区别,我会的都说了,面试官一直在耐心的听,偶尔打断一下我,偶尔补充一下。最后一句是对 MySQL 做优化,所以面试官又问下一个问题了……

  • 数据库优化

    面试官问了我对 MySQL 做了哪些优化,因为这些问题我都已经写好答案了,所以直接按照《MySQL 基础优化》 这个答就行,从建表建库到引擎选择,索引选择,到 SQL 优化到分表分库,读写分离、主从复制等。从原理到实现,反正我会的都讲了,一直滔滔不绝,看得出面试官很满意 ……

  • 数组去重复

    数组去重实际上是因为我项目中遇到了,从面经中也看到京东会问数组去重,所以就故意说项目中的业务有去重,所以自然就问我怎么去重复了,当然我的答案是结合项目回答的。待我详细说说

    QQ 看点的项目中,QQ 客户端 —–> 中间件 ——-> QQ 后台。从客户端到后台拉取新闻时,需要由中间件对数据处理,其中业务之一就是如果返回的文章中已经在前端页面中展示了,那么该文章属于重复,应该去重。去重的常规方式一般有 PHP 系统函数 array_unique() 或 array_flip() 键值反转函数,然而查阅 PHP 源码不难发现,array_unique 是使用 zend_qsort (zend 引擎的快速排序) 先排序再实现的,平均复杂度是 O(nlogn), 而 array_flip 是 hash 结构的键值反转,因此需要遍历数组,复杂度为 O(n)。我的项目中自然就使用 hash 结构去重,如果单纯判断一篇文章是否重复的话仅需要 O(1) 的复杂度。

  • 跨域问题

    跨域问题也是我总结好的,常用两种跨域方式 CORS 和 JSONP ,CORS 之前有详细总结过《关于 CORS 跨域的一点理解》,而 JSONP 跨域的原理按照 jQuery.js 源码实现方式说,就是动态创建 script 结点,使用 script 标签中 src 属性不受浏览器同源策略影响的特点实现跨域, 面试官显然也满意。

    以上几个问题以后,时间就过了 40 多分钟了,期间我有两次强调自己虽然是非计算机相关专业,但从大一开始就系统的学习计算机相关知识,为了不让面试官鄙视为半路出家、强行转行等。最后面试官也两次和我强调,她说不用担心自己是非计算机相关专业,她们更看重实力,然后问我有什么问题,我说我从外地来,如果有二面的话希望早一点,她说:“好的,我给你标注一下,安排你早一点面试”。

一面完。

二面(项目经验)

  • 自我介绍

  • 讲其中一个项目经验

  • 项目的架构图

  • 跨域

    1. jsonp 跨域
    2. cors 跨域:简单请求和非简单请求,如果设置请求头信息以实现跨域请求
  • 讲了数组去重复, Hash 冲突解决方案

    array_unique() 函数和 array_flip() 函数,HashTable 数组去重

    拉链法、链接法解决 Hash 冲突

  • 问了另一个项目

  • 问了为什么用 Node.js 为什么用 MongoDB

    事件驱动,异步 IO 、非阻塞

    key-value 存储,文档存储

  • 问了 Promise

    回掉处理: callback –> genarator –> promise –> async 函数(ES 7)

  • 项目中 Token 延时机制

    像 SESSION 一样缓存,设置缓存过期时间

  • 项目中文件状态锁

    MongoDB 实现事务而已

  • 问了如何获取来访 IP

    $_SERVER['REMOTE_ADDR'] || $_SERVER['HTTP_CLIENT_IP'] || $_SERVER['HTTP_X_FORWARDED_FOR']<==> Apache || IIS || 代理服务器

二面完。

本文标题:京东 PHP 一面、二面总结

文章作者:Gbin Peng

发布时间:2017年09月25日 - 17:09

最后更新:2017年12月04日 - 13:12

原始链接:http://yoursite.com/2017/09/25/jd-php-interview/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。