测试小站: 处理网 回收帮 培训网 富贵论坛 老富贵论坛

「PHP面试题」跳槽面试必背-自己最近5年的整理(一)

  大厂最全面试题:分享一波腾讯PHP面试题2021最新大厂PHP面试题(附答案)php面试题之PHP核心技术PHP 2021经典面试题集100 个常见的 PHP 面试题和答案分享面试10家公司,收获9个offer,2021年PHP 面试问题1. 实现删除一个数组里面的重复值?

  使用键值反转

  最全PHP进阶架构资料,为打造自己可以在工作中休息时间学习哦!!

  array_flip(); 

  $a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");

  $result=array_flip($a1);

  print_r($result);

  ?>

  function unique3(array){

  var n=[array[0]];//结果数组

  //从第二项开始遍历

  for(var i=1; i<array.length; i++){

  //如果当前数组的第i项在当前数组中第一次出现的位置不是i;

  //那么表示第i项是重复的,忽略掉。否则存入结果数组。

  if(array.indexOf(array[i])==i){

  n.push(array[i]);

  }

  }

  return n;}2. 什么是 redis?

  开源 先进的 key-value 存储

  远程字典服务器 内存级数据库 数据结构服务器

  一个基于内存的网络存储系统

  3is 数据类型有哪几种?

  值(value)可以是:字符串 (String),

  哈希 (hash),

  列表 (list),

  集合 (sets)

  有序集合 (sorted sets)

  4is 持久化是如何操作的?

  为了保证效率数据都缓存在内存中,可以周期性写入磁盘或者把修改操作写入文件(持久化)。

  RDB 持久化,将 redis 在内存中的的状态保存到硬盘中,相当于备份数据库状态。

  AOF 持久化(Append-Only-File),AOF 持久化是通过保存 Redis 服务器锁执行的写状态来记录数据库的。相当于备份数据库接收到的命令,所有被写入 AOF 的命令都是以 redis 的协议格式来保存的。

  社区福利安排PHP进阶架构资料,免费获取5is 适应的一些场景

  1、取最新 N 个数据的操作

  2、排行榜应用,取 TOP N 操作

  3、需要精准设定过期时间的应用

  4、计数器应用

  5、Uniq 操作,获取某段时间所有数据排重值

  6、实时系统,反垃圾系统

  7、Pub/Sub 构建实时消息系统

  8、构建队列系统

  9、缓存

  6is 的三个特点?

  - Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

  - Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

  - Redis支持数据的备份,即master-slave模式的数据备份。

  7.ECS 与虚拟主机的区别介绍

  一个是服务器

  一个相当于是服务器里的文件夹

  云主机是在集群服务器上划分出来的独立的内存.硬盘.带宽等资源搭建而成的 一个虚拟服务器.有独立的IP和带宽,可以根据需求安装各版本操作系统以及 配置各种网站运行环境,有远程桌面连接东西.是完全独立的.

  而虚拟主机是在服务器硬盘上划分出来的一部分存储空间,它共享的是服务器 的IP和带宽.没有独立的资源和独立的操作系统.没有远程桌面功能,通常虚拟主机所支持的网站程序也是默认分配好的.没有办法由用户自己配置环境.功能相对单一.

  8. 重启 redis

  service redis-server restart

  9. 有序集合是怎么排序的?

  ? 它给集合中的每一个元素设置分数,按照其分数进行排序,也不允许有重复值

  10. 谈谈你对 memcache 的理解

  免费并且开源,高性能的,分布式的内存对象缓存系统

  数据形态以key->value结构

  用于从数据库调用、API调用或页面呈现的结果中获得少量任意数据(字符串、对象)。

  11. 谈谈你对 redis 的理解

  - 开源 先进的key-value存储

  - 远程字典服务器 内存级数据库 数据结构服务器

  - 一个基于内存的网络存储系统

  五种数据类型 字符串(String), 哈希(hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)

  三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

  Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 储。

  Redis支持数据的备份,即master-slave模式的数据备份

  应用场景:

  1、取最新 N 个数据的操作

  2、排行榜应用,取 TOP N 操作

  3、需要精准设定过期时间的应用

  4、计数器应用

  5、Uniq 操作,获取某段时间所有数据排重值

  6、实时系统,反垃圾系统

  7、Pub/Sub 构建实时消息系统

  8、构建队列系统

  9、缓存

  12. memcached 与 redis 的区别

  两者对比:

  redis提供数据持久化功能,memcached无持久化;redis的数据结构比memcached要丰富,能完成场景以外的事情;memcached的单个key限制在250B,value限制在1MB;redis的K、V都为512MB;当然这些值可以在源码中修改;memcached数据回收基于LRU算法,Redis提供了多种回收策略(包含LRU),但是redis的回收策的过期逻辑不可依赖,没法根据是否存在一个key判断是否过期。但是可根据ttl返回值判断是否过期;memcached使用多线程,而redis使用单线程,基于IO多路复用实现高速访问。所以可以理解为在极端情况下memcached的吞吐大于redis。

  结论:

  普通KV场景:memcached、redis都可以。

  从功能模块单一这个角度考虑的话,推荐memcached,只做cache一件事。

  在KV长度偏大、数据结构复杂(比如取某个value的一段数据)、需要持久化的情况下,用redis更适合:但是在使用redis的时候单个请求的阻塞会导致后续请求的积压,需要注意

  13. 缓存的原理

  ? 有缓存则读缓存,没缓存则读数据库然后做缓存

  14. memcache 和 memcached 的区别

  memcached是php连接memcached服务器的php扩展它的名字就叫memcached

  以前有个叫memcache也是php连接memcached服务器的扩展,它的名字叫memcache

  php的memcache和memcached扩展都是作为客户端去连接memcached服务器

  但memcached作为客户端比memcache性能更好功能更强大,而且memcache已经停止更新了,因此现在使用扩展的 话就用memcached

  15. 存放 session 的三种方法

  1、如果你能修改到服务器配置文件,那就打开打开php.ini

  修改下面两项:

  session.save_handler=memcache

  session.save_path="tcp://127.0.0.1:11211"

  2、修改网站根目录下的.htaccess文件

  php_value session.save_handler "memcache"

  php_value session.save_path "tcp://127.0.0.1:11211"

  3、最常用的方法 在程序代码中修改(推荐)

  ini_set("session.save_handler", "memcache");

  ini_set("session.save_path", "tcp://127.0.0.1:11211");

  16. mysql 优化的一般步骤?

  1. sql及索引

  索引优化

  开启慢查询日志 分析sql语句 分析是否加上索引 分析是否用上索引

  2. 数据库表结构

  3.系统配置

  4. 优化计算机硬件

  17. 对 mysql 事物的理解?

  是多个步骤为一个过程的事务(整体)

  1. 事务使用 INNODB 数据库引擎

  如果你不是INNODB ,开启事务,删除那就真的删除了.

  2. 要么成批的sql全部执行,要么不执行

  3. 事务用来管理 insert update delete 的语句

  事务条件:

  原子性 一组事务,要么成功,要么撤回.

  稳定性 有非法数据(外键约束),事务撤回

  隔离性 事务独立运行. 一个事务,处理后的结果影响到了其他事务,则事务撤回!

  可靠性 软件或者硬件崩溃,Innodb 表驱动,会利用日志文件,重构修改. 可靠 性 高速度 不可兼得

  关键字:

  Commit 提交 当一个事务完成后,发出commit 命令使所有的参与表 完成更改.

  Rollback 回滚 如果发送故障,发出rollback命令 使事务返回到 所有表以前的状态.

  语句:

  set autocommit=0;

  sql操作

  savepoint p1;

  sql操作

  savepoint p2;

  sql操作

  ROLLBACK to p2;

  commit;

  18. mysql 触发器是什么?

  ? 监视某种事件,并触发某种操作 (商品的添加,订单的删除 等等 连贯操作时候使用)

  ###触发四要素

  1. 监视地点 table

  2. 触发时间 (after/ before)

  3. 监视事件 (insert/update/delete)

  4. 触发事件 (insert/update/delete)

  1、创建一个名为tg1的触发器,当向t1表中插入数据前,就向a表中插入一条数据

  delimiter // mysql中可以转换结束符

  mysql>create trigger tg1 before insert on t1 for each row #固定写法

  ->begin

  -> insert into a values (4);

  ->end//

  19. 什么是组合索引,及使用情况?

  将两个字段共同添加一条索引

  例子:当前组合索引是这样一个顺序 ind_status_email(status,email)

  单独查询status时,可以用到这个索引,单独查询email时,却用不到

  再问: id name password 建立组合索引 怎么建立?为什么?

  name,password

  因为先到先得, name查询是多!!! 很少会通过password来查

  先到先得 如何设置我索引?

  根据字段的辨识度来做

  20. 为什么 like 在 % 第一个字符用不到索引?

  like % 校 会查处当前所有的姓,再去查名中有没有校 所以 会进行全表扫描,浪费性能

  21. 测试分析 sql 语句

  普通查询分析:

   desc select * from users 或 explain select * from users 效果一样

  关键字段: table:输出结果集的表名

  key:表示实际使用的索引

  keys_possible (可能用到的索引)

  rows:扫描行的数量

  22. 为什么不分开加索引?而非要加组合索引?

  1. 索引不是越多越好. 浪费资源 索引暂用资源,影响插入性能

posted @ 2021-12-17 19:59  linjingyg  阅读(490)  评论(0)    收藏  举报