那些php面试官的问题

1.mysql一个字段 频繁插入 要用普通索引还是唯一索引呢?
普通索引,唯一索引要先去查看唯一性,chang buffer
更新:
对于更新操作二者还是有很大区别的,要理解他们之间的区别首先要理解change buffer
change buffer是用来记录更新操作的一种行为,在没有把数据项从硬盘读取到内存中时,进行更新操作会先将操作记录的change buffer中
在下一次进行select的时候在把数据项读取到内存中时,会对数据项执行change buffer中的命令,这个过程也成为merge
所以唯一索引的更新操作往往是这样,首先判断要插入的项在数据库中存不存在,这里就涉及到了一个读的问题,往往这个时候就会把数据从硬盘读取到内存中,如果这个时候还使用change buffer的意义并不大
因为change buffer存在的意义就是减少磁盘于内存的IO,现在数据项已经在内存中了,可以直接修改,所以唯一索引是不适用change buffer的
普通索引的更新操作
普通索引往往是将操作记录到change buffer中,在下一次读取的时候执行这些操作,可以显著减少磁盘与内存的IO操作,从而提高效率
2.redis一次取出多个kv的命令 mget mset
redis一次删除多个kv的命令 pipeline 管道命令
3.mysql索引何时失效
null < > 1= like %abc%

select * from 表 where a > 5 and b = 'test';
a、b都是普通索引
a索引出现了>,a索引有效 b索引失效

select * from 表 where a like '%test';
select * from 表 where a like '%test%';
select * from 表 where a like 'test%';
第三个是有效的

select * from 表 where a > 5 and b = 'test';
select * from 表 where b = 'test';
select * from 表 where a > 5;
index a_b(a,b) 建立复合索引

4.nginx 与PHP之间是怎么交互的?
nginx --->php-fpm socket--->wrapper->php
unix socket,tcp socket
5.php的运行模式?
cgi fastcgi moudle api cli
6.mysql Innodb的索引?
聚餐索引 B+树
7.mysql的主从复制如何实现的?
binlog relaylog
8.对于一个负载很高的主库,应该如何缓解呢?
分库 做集群负载
9.如何保证接口的安全呢?
token 时间戳过期 签名 https ip白名单 rsa非对称加密
如何保证前后端接口的安全呢?
token 签名
10.https的握手情况?还有nginx配置的那两个证书文件是什么内容呢?
pem和key 这两种格式 分别存储的是证书base64加密和私钥base64加密还有格式分割符,也就是说pem存的是证书,key 存的是私钥
11.laravel路由功能是如何实现的呢?
12.mysql索引的数据结构?
b+tree 结构
https://www.cnblogs.com/nijunyang/p/11406688.html
13.qps如何查看呢?
根据日志 单个时间内的访问量来计算
14.时间复杂度 空间复杂度

15.mysql主从复制是如何实现的呢?

16.redis的事务如何实现呢?
multi exec discard watch unwatch
redis RDB和AOF文件中的内容是什么呢?
二进制文件
17.事务的几个特性?
原子性 一致性 隔离性 持久性
隔离级别:未授权读取 授权读取 可重复读取 序列化
悲观锁和乐观锁 行锁和表锁
使用select…for update会把数据给锁住,不过我们需要注意一些锁的级别,MySQL InnoDB默认Row-Level Lock,所以只有「明确」地指定主键或者索引,MySQL 才会执行Row lock (只锁住被选取的数据) ,否则MySQL 将会执行Table Lock (将整个数据表单给锁住)。
18.ngnix端如何防止大量恶意请求?
limit模块 限制请求数 限制并发连接数
deny 黑名单
禁止curl wget ua的请求 限制UA(user-agent)信息
laravel Throttle中间件
19.oauth2.0协议?
token timestamp signinfo
20.正向代理和反向代理区别?nginx是什么?PHP-FPM是什么?
正向代理是发生在客户端的 如vpn
反向代理是发生在服务端的 如nginx

21.如何保证redis和数据库的一致性呢?

22.http和tcp的区别?

23.一个php的进程负载特别高?可以用什么来查看排查呢?

24.工厂模式的实际应用场景?
db类 baseModel 给不同的表名 返回不同的表对象
一般的MVC框架中,都有一个基本的DB数据库基本操作类
我叫它DB class,有一个baseModel class 去继承 db class
baseModel 是所有框架model的基类,需要继承baseModel
baseModel已经有db类的 增删查改的方法了,baseModel其实就是数据库工厂,不同的模型继承baseModel,就有操作不同数据表的对象实例了,这样就用一个基础的class 完成了实例化各个不同数据表的对象,就好像是工厂一样,传不同的表名字就返回给你不同的对象。

25.mysql binlog的使用 作用?
读写分离主从复制 数据恢复 数据库和缓存的数据一致性 binlog同步组件
26.redis的aof备份机制和方法?是每秒都去持久化么?
always everysec no 默认是 everysec
27.redis的负载很高了,如何解决呢?
做redis负载均衡 redis cluter
28.mysql安装以后最常修改的my.conf配置有哪些?

character_set_server = utf8
max_connections=2000
wait_timeout=315360000
interactive-timeout=315360000
好多其他的....
29.前后端分离 跨域是如何解决的呢?
jwt
jsonp
cors
nginx 反向代理
30.某个php后端接口返回很慢,如何查找 解决呢?
xdebug php性能优化
31.如何把2亿个元素的数组,存入到文件中去呢?
考点是内存占用,2亿肯定不能全部放入内存中去,要一部分一部分生成 再放入
32.redis down机了,数据如何处理呀?
aof
33.去除数组内为空的元素
array_filter()
去重数组 相同值的元素
array_unique()
求交集array_intersect() 并集 array_merge() 差集 array_diff()
34.唯一索引的 要实现 如果存在相同的数据 就去更新,如果没有就去插入
php判断是否存在 去进行 插入和更新
mysql关键字 insert into tablea () values () on duplicate key update
replace into table () values ()
35.linux 统计一个文件有多少行 wc -l test.php // cat test.php | wc -l 去重多少列 出现次数 shell脚本,awk 根据文件某列去重并且统计该列频次。 查看一个文件的最后几行 tail -n 20 test.php 直接用sed命令: sed -n '5,10p' filename.txt 只查看文件的第5行到第10行
比较两个文件的差异
diff file1 file2 比较两个文件的差异,并把不同地方的信息显示出来。
36.redis实现分布式锁
37.mysql设计三范式
1.字段满足原子性(不可再分割) 每种实体数据独立建表
2.消除对主键的部分依赖 创建一个与业务逻辑无关的主键字段
3.消除对主键的传递依赖,不同关系的表用关键字进行连接
逆范式
38.

posted @ 2020-03-20 22:11  段佳伟  阅读(705)  评论(0编辑  收藏  举报