这几天找工作遇到的面试题目,20 多家公司 100 多道题目
280

以下题目来自近20家各种类型的公司,ABCD轮上市公司的,知名不知名都有,
公司均有一定的规模,岗位薪酬范围20~40K的这种
搞懂大部分题目拿5个高级工程师职位的offer没有太大问题,当然了,进入工作后还得靠你的真才实干

题目已放到github,欢迎能人才子提交补充答案及优化排版
https://github.com/hookover/php-engineer-interview-questions (已手补部分答案,请点赞,谢谢)

几乎所有题目都能在百度找到满意的答案,你可以及时通过搜索引擎查漏补缺,还能加深你的印象。

题目如下

1、给你四个坐标点,判断它们能不能组成一个矩形,如判断([0,0],[0,1],[1,1],[1,0])能组成一个矩形。

2、写一段代码判断单向链表中有没有形成环,如果形成环,请找出环的入口处,即P点

3、写一个函数,获取一篇文章内容中的全部图片,并下载

4、获取当前客户端的IP地址,并判断是否在(111.111.111.111,222.222.222.222)

5、nginx的log_format配置如下:

log_format main ‘remoteaddr−remote_user [timelocal]"request”’ 
‘statusbody_bytes_sent “httpreferer"″"http_user_agent” “upstreamresponsetime""request_time” “http_x_forwarded_for"';

从今天的nginx log文件 access.log中:

  • a、列出“request_time”最大的20行?
  • b、列出早上10点访问量做多的20个url地址?

6、什么是CSRF攻击?XSS攻击?如何防范?

7、应用中我们经常会遇到在user表随机调取10条数据来展示的情况,简述你如何实现该功能。

8、从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是连续的

9、两条相交的单向链表,如何求它们的第一个公共节点

10、最长公共子序列问题LCS,如有[1,2,5,11,32,15,77]和[99,32,15,5,1,77]两个数组,找到它们共同都拥有的数,写出时间复杂度最优的代码,不能用array_intersect(这里有坑,需要去研究一下动态规划)。

11、linux的内存分配和多线程原理

12、MYSQL中主键与唯一索引的区别

13、http与https的主要区别

14、http状态码及其含意

15、linux中怎么查看系统资源占用情况

16、SQL注入的原理是什么?如何防止SQL注入

17、isset(null) isset(false) empty(null) empty(false)输出

18、优化MYSQL的方法

19、数据库中的事务是什么?

20、写一个函数,尽可能高效的从一个标准URL中取出文件的扩展名

21、参数为多个日期时间的数组,返回离当前时间最近的那个时间

22、echo、print、print_r的区别

23、http协议的header中有哪些key及含义

24、二叉树前中后遍历代码

25、PHP的数组和C语言的数组结构上有何区别?

26、Redis的跳跃表怎么实现的

27、哈希是什么?hash冲突后,数据怎么存?

28、聚簇索引,聚集索引的区别?

29、B+Tree是怎么进行搜索的

30、数组和hash的区别是什么?

31、写个函数,判断下面扩号是否闭合,左右对称即为闭合: ((())),)(()),(()))),(((((()),(()()),()()

32、 找出数组中不重复的值[1,2,3,3,2,1,5]

33、32题你的时间复杂度是多少?有的情况下,你写了个算法,然后面试官会让你把你的算法的时间复杂度表达式写出来

34、PHP的的这种弱类型变量是怎么实现的?

35、在HTTP通讯过程中,是客户端还是服务端主动断开连接?

36、PHP中发起http请求有哪几种方式?它们有何区别?

37、有一颗二叉树,写代码找出来从根节点到flag节点的最短路径并打印出来,flag节点有多个。比如下图这个树中的6和14是flag节点,请写代码打印8、3、6 和 8、10、14两个路径

38、有两个文件文件,大小都超过了1G,一行一条数据,每行数据不超过500字节,两文件中有一部分内容是完全相同的,请写代码找到相同的行,并写到新文件中。PHP最大允许内内为255M。

39、请写出自少两个支持回调处理的PHP函数,并自己实现一个支持回调的PHP函数

40、请写出自少两个获取指定文件夹下所有文件的方法(代码或思路)。

41、请写出自少三种截取文件名后缀的方法或函数(PHP原生函数和自己实现函数均可)

42、PHP如何实现不用自带的cookie函数为客户端下发cookie。对于分布式系统,如何来保存session值。

43、请用SHELL统计5分钟内,nginx日志里访问最多的URL地址,对应的IP是哪些?

44、写一段shell脚本实现备份mysql指定库(如test)到指定文件夹并打包,并删除30天前的备份,然后将新的备份推送到远端服务器,完成后送邮件通知。

45、mysql数据库中innodb和myisam引擎的区别

46、从用户在浏览器中输入网址并回车,到看到完整的见面,中间都经历了哪些过程。

47、如何分析一条sql语句的性能。

48、ping一个服务器ping不通,用哪个命令跟踪路由包?

linux:traceroute,windows:tracert

49、$a=[0,1,2,3]; $b=[1,2,3,4,5]; $a+=$b; var_dump($a)等于多少?

50、$a=[1,2,3]; foreach($a as &$v){} foreach($a as $v){} var_dump($a)等于多少; (我加的)

https://laravel-china.org/articles/7001/php-ray-foreach-and-references-thunder

51、数据库中的存放了用户ID,扣费很多行,redis中存放的是用户的钱包,现在要写一个脚本,将数据库中的扣费记录同步到redis中,每5分钟执行一次。请问要考虑哪些问题?

52、MYSQL主从服务器,如果主服务器是innodb引擎,从服务器是myisam引擎,在实际应用中,会遇到什么问题?

53、linux中进程信号有哪些?

54、redis的底层实现

55、异步模型

56、10g文件,用php查看它的行数

57、有10亿条订单数据,属于1000个司机的,请取出订单量前20的司机

58、设计一个微信红包的功能

59、根据access.log文件统计最近5秒的qps,并以如下格式显示,01 1000(难点在01序号)

60、php7性能为什么提升这么高

61、遍历一个多维数组

62、有这样一个字符串abcdefgkbcdefab......随机长度,写一个函数来求bcde在这个字符串中出现的次数

63、有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16个字节,内存限制大小是1M。返回频数最高的100个词

64、十道海量数据处理面试题与十个方法大总结(我加的)

https://blog.csdn.net/v_JULY_v/article/details/6279498

65、php进程模型,php怎么支持多个并发

66、nginx的进程模型,怎么支持多个并发

67、php-fpm各配置含义,fpm的daemonize模式

static - 子进程的数量是固定的(pm.max_children)
ondemand - 进程在有需求时才产生(当请求时,与 dynamic 相反,pm.start_servers 在服务启动时即启动
dynamic - 子进程的数量在下面配置的基础上动态设置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers

68、让你实现一个简单的架构,并保持高可用,两个接口,一个上传一条文本,一个获取上传的内容,你怎么来设计?要避免单机房故障,同时要让代码层面无感。

69、两台mysql服务器,其中一台挂了,怎么让业务端无感切换,并保证正常情况下讲台服务器的数据是一致的

70、http协议具体的定义

71、什么是锁,怎么解决锁的问题

72、rand与mt_rand的区别

73、mysql事务隔离是怎么实现的

74、mysql的锁怎么实现的

75、对称加密和非对称加密的方式

76、10瓶水,其中一瓶有毒,小白鼠喝完有毒的水之后,会在24小时后死亡,问:最少用几只小白鼠可以在24小时后找到具体是哪一瓶水有毒。

77、redis是如何进行同步的,同步的方式,同步回滚怎么办,数据异常怎么办,同时会问MYSQL的同步方式和相关异常情况

78、怎么解决跨域

79、json和xml区别,各有什么优缺点

80、Trait优先级

81、a引用b,报错c里面类重复定义,循环引用会出现什么问题

82、下面员工3的薪水大于其主管的薪水,一条SQL找到薪水比下属低的主管

id username salary pid
1 a 3000 null
2 b 8000 null
3 c 5000 1
4 d 6000 3

82、在一个坐标系内有一个N个点组成的多边形,现在有一个坐标点,写代码或思路来判断这个点是否处于多边形内

83、数据库如果出现了死锁,你怎么排查,怎么判断出现了死锁?

84、写一个一个程序来查找最长子串

85、分析一个问题:php-fpm的日志正常,但客户端却超时了,你认为可能是哪里出了问题,怎么排查?

86、nginx的工作流程是什么样的,可以画图描述

87、进程间通信方式有哪些

88、主从复制,从服务器会读取到主服务器正在回滚的数据吗?主数据库写成功,从服务器因为一些原因写失败,最后会出现什么情况?主从复制如果键冲突怎么办?

89、事务有几种隔离级别?事务的隔离级别是怎么实现的?

90、什么是B+数,请画b+树的结构

91、mysql中的字符集,客户端与数据库不一致,怎么办? MYSQL中字符串到显示到界面,字符转换的过程是怎样的?数据库中的字符集是latin1,你现在将utf8的字符串存到latin1字符集的数据库表,你能将utf8的字符串存进去吗?假如你说能存,追问:能否恢复?假如能,那怎么恢复?

92、写一段代码,找到所有子集合,如[a,b,c]的子集合有{},{a},{b},{c},{ab},{ac},{abc}

93、['a'=>200,'b'=>100,'c'=>100],写一个自定义排序函数,按值降序,如果值一样,按键排序

94、设计一个缓存系统,可以定期或空间占满之后自动删除长期不用的数据,不能使用用遍历。

我当时的答案是用链表来存,缓存命中就将该缓存移到链表头,然后链表尾就都是冷数据了。
我记得之前是在哪里看过这个设计,但我忘记在连接了,请知道朋友的把连接贴上来。

95、==和===的区别,写出以下输出:"aa"==1,"bb"==0,1=="1"

96、一个排序好的数组,将它从中间任意一个位置切分成两个数组,然后交换它们的位置并合并,合并后新数组元素如:20,21,22,25,30,1,2,3,5,6,7,8,15,18,19,写一个查询函数来查找某个值是否存在。

97、设计一个树形结构,再写一个函数对它进行层序遍历

98、'$var'和"$var"的区别

99、self和static的区别

100、PHP的协程以及用途

101、描述autoload的机制

102、mysql中字段类型各占几个字节:smallint、int、bigint、datetime、varchar(8)

103、哪些属性唯一确定一条TCP连接

104、myisam和innodb的区别,为什么myisam比innodb快,myisam和innodb的索引数据结构是什么样的?innodb主键索引和非主键索引的区别?其索引上存放的数据是什么样的?

105、断开TCP连接时,timewait状态会出现在发起分手的一端还是被分手的一端

106、AWK各种数据分析考得非常多,要多练习,题目不再一一写了

107、redis中集合、有序集合、hyperLog、hash的数据结构是啥样的

108、描述一下:一个请求到达nginx的全部处理过程(nginx自身会调用哪些逻辑)、然后怎么与php通信,中间的流程是什么样的等等?

109、nginx和php-fpm的相关配置,随便问里面各种参数啥意思

110、假如有一张地图,如下图,"-"代表海洋、"+"代表陆地,用你最擅长的方式,取出陆地的坐标。

--++----++--+++---
-++++----+++++++--
-+++----++++------
-----++------++++-
---++++++-----+++-
-----+++------+++-

比如上图在数组中表示成,1表示成陆地,0表示海洋:

[
    [0,0,1,1,0,0,0,1,1....],
    [0,1,1,1.....],
]

写个算法取出所有陆地的坐标,并按块放到一起,如地图上左上角第一个陆地的坐标是:

[
    [0,2],[0,3],
    [1,1],[1,2],[1,3],[1,4],
    [2,1],[2,2],[2,3]
]
本帖由系统于 5个月前 自动加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 68

神坑...

5个月前

几年工作经验的面试题

5个月前
Everan

阔怕...

5个月前

你的意向薪资莫不是20k+?

5个月前

个人表示难度上天了

5个月前
BradStevens

大哥你面试的是架构师?还是核心员工

5个月前
BradStevens

@hookover 厉害了,带上答案就更精彩了

5个月前
skyLee

可以放到 github 上,其他会的人可以提PR

5个月前
hookover

@skyLee 好的

5个月前
黑将军

可怕,我竟然几乎都不会

5个月前

我去找找答案

5个月前
ChiVincent

以高級 PHP 工程師來說這題目算是普通偏簡單

從本科的角度來看:

  1. 計算機概論/組織: http/https 的差別、Linux 記憶體(內存)的分配方式與多執行緖原理。
  2. 資料結構:單向鏈結、簡單的樹(二元樹)
  3. 演算法:動態規劃(DP)
  4. 基礎程式設計:弱型別語言實現、PHP 與 C 的陣列(數組)差異

真要說有什麼比較複雜的

  1. B+ Tree:會問這個估計是因為 MySQL 底層的資料結構實現是 B+ Tree
  2. XSS、CSRF、SQLi:不過這個有實作經驗的應該也要知道
  3. MySQL 的優化:這個也是視實作經驗

還有一些我覺得該問但沒問的:

  1. Stack(堆疊/堆棧,First In Last Out)、Queue(佇列,First In First Out)
  2. 時序型資料庫的資料壓縮(當主鍵是一個連續遞增的 64bit Integer 值時,如何將此值壓縮?)
  3. 試實現一個 LRU 的快取機制(或是任何類似的快取機制)
  4. MySQL 跟 PostgresQL 的差異
  5. 如何保持一個服務的高可用?
  6. 何時使用等待序列(Queue)、或定時排程(Cronjob),此時的等待序列(Queue)會想如何實現?

結論

大部份是本科的東西,如果是非本科出師的工程師可能會覺得有點不太友善,但其實問題都滿切中核心而且很實際。

5个月前

天书。。。

5个月前

我这边把几个会的问题 简单写了下答案 大家可以看下,请多多指教。
https://cloud.tencent.com/developer/article/1104156

5个月前

发现一个规律,面试的岗位越高,公司越大,题目就越偏基础、底层,问的都特别细,小公司都会偏应用层面
这个是真的

5个月前
BV

@hookover 好奇第一题是要听思路还是要写代码?

5个月前
aen233

大学太学渣。。。
看着还是像天书。。。
要努力补了。。。。

5个月前
OMGZui

mark,高级PHP工程师, 感谢分享,有题目玩了:)

5个月前
尼古丁

最后一个题目是一道数学题,之前看过 现在又忘记了 好像是利用二级制来解决的

5个月前
hookover

@BV 人家喊写代码

4个月前
hookover

@saurfang 更新了

4个月前
尼古丁

@hookover 4只老鼠就够了,思路是这样的。一共10个瓶子,分别做标记。第一个瓶子标记为1,第二个标记为2……,分别标记到10.第一个瓶子的酒给第一只老鼠喝,第二瓶酒给第二只老鼠喝,第三瓶酒给1,2只老鼠喝,第4瓶酒给第三只老鼠喝,利用二进制,以此类推。最后观察老鼠死的顺序,活的老鼠代表0死的老鼠表示为1,加入死的顺序是1,0,0,0,就代表第8瓶酒 有毒。

4个月前

@hookover 已经基本都补充了。你后面这些面试题的质量不太好,有些是问题描述的不清楚,或者太宽泛,不好回答。

4个月前

@hookover 不要那么多疑问。这个题简化一下,用二进制表示10,最多需要几位。2^A>=10,A=4。
按你这个思路,一千瓶水,一万瓶水怎么算。

4个月前

1只老鼠就能测出哪瓶水有毒,你们都没有抓住重点

4个月前

掐秒计时,第一秒喝第一瓶,第二秒喝第二瓶,依次类推,59分01秒死了那第一瓶有毒,第二秒死了那第二瓶有毒,人家的时间不是白给的 :smile:

4个月前

这题可能怎么答都对,考察的是这两种思维方式

4个月前

我感觉这得年薪百万起吧

4个月前

@hookover 时间是迷惑你的。这道题就是这么解的。

4个月前
hookover

@dinghua 年薪百万得看架构和管理和各种经验背景才行

4个月前

@ChiVincent 很赞同,本科计算机毕业这些都不是问题 :joy:

4个月前

@hookover 麻烦您,审题的时候审清楚。第一,题目中问的是用最少几只老鼠,不是死几只老鼠。第二,23小时59分59s后毒发身亡,和24小时内只差一秒。这个限制条件很迷惑人,本质还是限制你不能暴力方式 一只老鼠从第一瓶开始喝这个方法。你审题都没审清楚,怎么可能会答对?
后续的到109的问题跟前面的问题比起来,无论是问题的描述,还是问题的质量,都下降了很多。很多问题没有标准答案。你这是面了多少家公司了。

4个月前

@轻色年华 :smiley:求大神把答案写出来, 我来学习学习, 好多不会的

4个月前
hookover

@saurfang 题目描述不清楚,是因为都是对方口述的问题,不是写到纸上的

4个月前

跟大家分享下我参与筛选简历,面试的一些经验:
面试官充分准备的问题,尤其是不常见的问题,本质上是想看你有没有接触过相关的知识。如果一个人接触过,能说出接触范围内的大概,就算合格。但是常见的基础题,必须要掌握。
这就跟上大学一样,学了那么多东西,时间久了,学霸也会记不全。但知道有这个知识,知道这个问题,也知道去哪里查,怎么查。这就可以了。
面试最喜欢的就是这些【实事求是】的人。

4个月前

突然感觉 程序这个坑好深啊...

4个月前

楼主面新氧了吧~~哈哈哈哈哈,新氧的面试题我还都记得

4个月前

@hookover 不要以公司的规模来衡量面试题的质量,这两个没有正相关的。大公司喜欢问些基础问题,什么三次握手啊,进程,线程,协程啊,redis底层设计啊,网络模型啊,人尽皆知的,面试官也肯定知道。这些问题都是抛砖引玉,面试不经意间问的一句,【你之前做过什么】这才是面试的核心问题。正所谓“有道无术,术可求也”。面试最重要的是能把自己之前做的项目说清楚,说明白。具体而言,就是知道项目的架构设计,为什么这么设计。应用了那些技术,实现了什么效果,怎么实现的,各种技术之间怎么协调的,遇到过哪些问题,怎么解决的,还有那些地方还能进一步优化。各部分业务功能怎么抽象,怎么建模,怎么规范流程。这才是面试的时候重点问的。举个例子,之前做个电商的,可以问下他一个订单从下单到评价完成要经过几个状态管理;如果客户在中间某一步取消订单,应该怎么回退;秒杀程序,商品数量怎么控制;优惠券,满减券,以及其他优惠叠加的时候怎么去算价格,多个商品怎么拆单;这些问题才是最考验人的

4个月前

老哥,这是小白鼠,不是猪。你这样子,小白鼠估计是活不到24小时就已经被你给灌死了 :joy:

4个月前
hookover

@粉墨 是的,第一个公司,坐标确实坑

4个月前

@hookover 现在入职哪家了 我在新氧

4个月前
hookover

@saurfang 你的解是对的,老鼠试药2进制

4个月前
free-andy

敢问楼主是如何记下这么多面试题

4个月前

感谢分享 :neutral_face:

4个月前
hookover

@free-andy 面试完了回家复盘并记录面试的问题

4个月前
xianyunyehe

大致的整理了一些题目的解法和答案
面试题和解法

4个月前
Jourdon

我觉得我是假程序员。

4个月前

我觉得我不敢说自己是程序员了...

4个月前
hedeqiang

我能说这些题我几乎全部不会吗 :joy: :joy:

4个月前

@hookover 阔以的 兄dei

4个月前

@nulirener 你这操作很骚

4个月前

有些难度~~

4个月前
hookover

@saurfang 公司规模的题目体现在架构和应用层面,小公司主从复制都不用做,考你多机房数据同步,解决数据延迟,同步过程的异常情况,无感切换等“具体实现细节时”,如果你没有实际的应用经验,估计也会有感同身受吧

4个月前
hookover

@saurfang 比如你的答案的68题,面试官会问的更细,如何拉起来,如何切换,具体的实现方式

4个月前

@hookover 是的,这里面很多问题,如果没有实际操作的经验,确实很难理解。还有一些问题是,系统出了紧急情况才会遇到的。

4个月前

看了第一题就不会 瞬间没看下去的欲望了

4个月前

mark

4个月前

@keer 我这有答案的

4个月前
haobing

已跪 :joy:

4个月前

天书 根本看不懂

3个月前

@粉墨 新氧怎么样

3个月前

不错。

3个月前

真高级

2个月前

请问可以转载一下你的面试题到http://www.520zhiye.com/吗

2个月前
hookover

@wlaravel 可以

2个月前
OMGZui

原来大佬去了猎豹移动 :blush:

3周前
hookover

@OMGZui 老铁,你这不道德唉

3周前
OMGZui

@hookover 23333

3周前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!