作业帮-PHP技术一面整理
阅读原文时间:2023年07月08日阅读:3

项目经验介绍

用amf 和 base64编码

我想问的是通信协议:调用rpc接口时的过程是什么样?比如业务调用PHP接口的时候,用的是什么协议?

(没理解)(https://www.cnblogs.com/rianley/p/11076107.html)

业务调用PHP是直接掉吗?中间有用nginx吗?

业务直接调PHP-FPM,没用nginx

那如何做负载均衡?

业务服务简单地做轮询(负载均衡)<- 这块需要回顾一下业务服务的代码

cgi与fastcgi;fpm3种进程池模式;fpm的启动、进程池初始化、主进程处理事件循环(功能——子进程管理)

和共享内存有关?(完全不清除)

FPM如何解决的?

重启?

对,是重启,自动重启

我以为是和底层zval相关的

其实就是哈希的时候,将元素存储在链表里,串起来,以保证有序 <- 这里需要去了解array的底层实现

用什么引擎

innodb

为什么 (和 myisam比较)

myisam不支持行级锁

还有呢?

可能和索引有关?<- 未答出,须强化 (https://blog.csdn.net/qq_35642036/article/details/82820178)

类型?

聚簇、二级索引

两者区别

聚簇b+树,节点保存完整row数据;非聚簇b+树,叶子节点只保存主键信息

如何通过非聚簇索引查找数据

where 子句命中非聚簇索引节点,拿到逐渐信息,再用主键回标查询 <- 不确定回答方向是否正确

有遇到慢查询吗?

…没有用到索引最左匹配

如果建了索引,sql也命中索引了,但是还是慢查询,遇到过吗?

没有(考察点是mysql优化)

如何发现慢查询

php slow 日志-> 请求耗时 -> sql语句 explain查看执行计划 -> 查看索引有无?是否命中

mysql查询语句如何执行?

不清楚 <- 强化

读未提交->读已提交->可重复读->串行

各级别有什么问题?

… <- 讲得不清楚,须强化!

重复读呢,解决什么问题?

给提示?

你想想重复读如何实现?

快照?解决幻读的问题?

mvvc (应该是mvcc)

描述一下这个是如何实现的

不清楚

做缓存,自称分布式,但是memcache 服务之间无通信,可以当单机缓存使用;客户端实现一致性哈希,来实现分布式

为何不用redis?

项目中用不上分布式特性,当单机缓存用

单机缓存qps多少?

没测过,一般不会出现性能瓶颈,瓶颈在网卡上

memcache有什么数据结构吗?

没有数据结构,文本存储。 redis是有数据结构的

那介绍一下redis的数据结构?

string, set, zset, 位图? <- 强化了解一下

消息队列?

没有过 <- 可以了解一些

有监控报警机制吗?

没有,脚本crond定时运行

那会出现线上出现问题研发压根不知道的情况?

… 一顿乱答

项目中做服务注册和发现、配置的统一部署

zookeeper怎么部署?单机部署?

多台部署

多台如何保持配置一致?

master 对 slave 同步

master 挂了怎么办?

选举算法

选举的时候,需要部署多少台机器?

没答上 <- 强化了解

zookeeper 可以选举自己吗?有监听吗?如何知道自己挂了?

一顿乱答… 心跳包? <- 强化了解

查看线上请求耗时

没有。。项目不涉及http

算法题

一个有序数组,从中间一个位置分割,旋转拼接,比如 '1234567' -> '4567123',要求,输入旋转后的数组,查找给定值v是否存在,限定时间复杂度lg(n)

思路不清晰,没写出代码

在传统二分的基础上,添加向左、右分支搜索的判断—— if (mid > low),表明左边部分是升序的,否则,左边部分是有分割点存在的