php 模数 指数 公钥生成_2020最新高级PHP面试题整理

107eb6e063d82f3312bbc850a4550bd7.png

2aeca3b99f349d38b3086fc1f1e9850c.gif 文章来自于

http://www.panwenbin.com/38

PHP进阶学习交流QQ群:983229225

PHP运行原理

FastCGI

与cgi区别:cgi是请求过来再初始化进程并执行代码,FastCGI预先初始化一些进程,请求过来可以直接分发处理,并且进程重复使用,实现了一个进程池。

与php-fpm关系:php-fpm是一个被纳入php核心的FastCGI进程管理程序(FastCGI Process Manager),FastCGI模式的关键部分是对fastcgi进程的有效管理。

与nginx通讯:nginx通过tcp socket或者unix socket与fastcgi进程通讯。

swoole

与fastcgi区别:swoole接管了nginx和php-fpm这部分的功能,由类似的进程结构实现。避免了fastcgi每次请求初始化后所有文件都需要重新加载。

进程结构:一个master(相当于nginx角色),一个manager(相当于fpm角色),若干worker(相当于fastcgi进程),若干taskWorker(用于异步处理长时间的任务)。

异步事件模型,并实现了一些异步IO库。

2.0开始内置协程(Coroutine)

垃圾回收

PHP使用基于引用计数的垃圾回收机制,垃圾回收周期为引用数减到非零值时。

简单算法描述

冒泡排序(2轮循环)

  • 第一层通过连续比较交换,把最大的值放到末尾

  • 循环此过程(不含上一轮末尾的值)

 快速排序(递归)

  • 与预选值比较,把要排序的数据分为2部分:<=预选值和>预选值。

  • 对每部分递归调用,直到最后不能再分(只剩一个值)。

MySQL

存储引擎(这可能是个过时的问题)

  • MySQL5.5之后默认引擎已改为InnoDB,使用MyISAM(读更快,不支持事务,不支持行锁)的理由更小了。MyISAM to InnoDB: Why and How

  • 其他引擎平时并不常用,只做了解。Alternative Storage Engines

MyISAM、MEMORY、CSV、ARCHIVE、BLACKHOLE、MERGE、FEDERATED、EXAMPLE、其他

索引

种类:主键(Primary)、唯一索引(unique)、普通索引(index)、组合索引(unique或index)、全文索引(fulltext)

  • 聚集索引:其中InnoDB的主键是聚集索引,与数据存储结构一致。所以查询时可直接拿到数据,不需要二次取数据。

  • 组合索引:组合索引的存储结构是一棵树,使用索引的条件是查询字段要按照树的主干节点往后连续。

  • B树与Hash索引:B树索引用于可比较大小的值,支持范围查找;Hash索引只能精确匹配,不能范围查找。

 explain查看索引使用情况

  • type值从好到坏:const、eq_reg、ref、range、index、ALL

  • 更详细的可以用performance_schema

如何优化MySQL(套路)

  • 设计表时遵循三大范式,适当反范式

  • 合理设计索引,针对慢查询调整索引

  • 实时性低、消耗大的查询加缓存

  • 大量数据写入可以攒一些批量写入

  • 选用SSD作为存储介质

  • 主从分离,分担查询负担

  • 使用MySQL自带分区功能,对外透明(不常用)

  • 分库分表降低单实例、单表的负担

参考: MySQL如何优化

一致性Hash算法解释

  • 先准备0~2^32的圆盘 

  • 将存储数据key的hash值映射到圆盘上

  • 将服务器标识的hash值也映射到圆盘上

  • 顺时针查找,将数据存储到第一个找到的服务器上

eab99e3f072bdfc4b6b7ac3e3a292b27.png

设计模式

可以知道一些设计模式:

单例、工厂、池;注入(IoC/DI);观察者;适配器;代理;策略;装饰器;

平时使用框架和思考过程中就一直在使用设计模式,不建议过分强调设计模式,它是自然而然的产物。为了设计模式而设计模式就是本末倒置了!

熟悉设计模式可作为参考,设计模式都是比较成熟的处理特定问题的方案,不需要在这些常见问题上绞尽脑汁。

消息队列

消息队列适用于异步/串行化处理任务。架构上可用于解耦消息通讯。

按角色分为生产者和消费者:

  • 生产者,产生消息的应用

  • 消费者,处理消息的应用

实现:Redis、Beanstalkd、RabbitMQ、RocketMQ、Kafka等

Redis

数据结构:String(字符串)、List(列表)、Set(集合)、Hash(Map)、Zset(有序集合);

应用场景:

  • 缓存

  • 计数器(原子操作)

  • 队列(列表)

  • 位操作(大量状态数据)

  • 分布式锁与单线程机制(Redis单线程)

  • 排行榜(Zset)

依赖注入

依赖注入(DI)/控制反转(Ioc):将依赖关系从程序中提取到外部,并在运行时注入回去。

  • 好处:可以解耦调用与实现,方便的替换实现。

  • 注入方法:通过读取配置或者传参。

  • 实现方式:通常不同实现会实现同一套接口,调用处只调用接口。

SSL原理

这里说一下SSL通讯过程。

  • 客户端与服务端建立连接

  • 互相Hello(包含支持的版本、算法;加上随机数)

  • 服务端发送公钥

  • 客户端发送公钥(双向验证才需要,单向跳过)

  • 服务端验证客户端公钥(双向验证才需要,单向跳过)

  • 客户端验证服务端公钥

  • 交换DH参数(如果用DH密钥交换算法)

  • 客户端生成PreMaster Secret,并发送给服务端(DH根据随机数和参数直接算)

  • 服务端解密PreMaster Secret,得到对称密钥(DH根据随机数和参数直接算)

  • 使用对称密钥通讯

HTTP/2新特性

二进制分帧、多路复用、流优先级、服务器推送、头部压缩、应用层协商协议

*强制SSL,虽然规范没有强制,但是所有浏览器均只支持SSL下的HTTP/2

HTTP/2 Frequently Asked Questions。

需要自己总结的内容

  • 项目过程中遇到的问题及如何解决的

  • 自己做出的比较突出的成绩

您还有什么问题要问的吗?

对于优秀的面试官,应该知道应聘者如果入职,需要知道哪些东西,而主动告知。

比如:所属团队,工作环境,工作内容,工作强度;

人事可以告知公司特有的文化、规范;

如果这些面试官没有主动告知,请问清楚。

也可以问一些生活相关的事宜。

1666bb3dcba187323ad550262a337b39.png 867350e55a4962e0269bab8e72c8ff96.gif 798964c25df5bfd835ca28c3bcf0879b.png 3349a9147d4f4c36aa7e4019f5e1cd11.gif关注  架构师学习路线  升职涨薪不是梦
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值