php面试题总结(一)

一、include、require、include_once和require_once的释义

1、include 引入文件一般在程序中用到的时候引入,遇到错误时会,会给出一个 warning,但脚本会继续执行 重复引入

2、include_once 引入文件一般在程序中用到的时候引入,遇到错误时会,会给出一个 warning,但脚本会继续执行 不会重复引入

 

3、require 在文件头部引入 遇到错误的时候会报出一个fatal error.脚本停止执行 会重复引入

4、require_once 在文件头部引入 遇到错误的时候会报出一个fatal error.脚本停止执行 不会重复引入

 

 

建议一般选择require_once和include_once引入

 

二、内存管理

内存管理主要是指程序运行时对计算机内存资源的分配、使用和释放等技术,内存管理的目标是高效、快速地分配内存同时及时地释放和回收内存资源。内存管理主要包括是否有足够的内存供程序使用,从内存池中获取可用内存,使用后及时销毁并重新分配给其他程序使用。

在PHP开发过程中,如果遇到大数组等操作,那么可能会造成内存溢出等问题。一些常见的处理方法如下:

1)通过ini_set('memory_limit','64M')方法重置php可以使用的内存大小,一般在远程主机上是不能修改php.ini文件的,只能通过程序设置。注:在safe_mode(安全模式)下,ini_set会失效。

2)另一方面可以对数组进行分批处理,及时销毁无用的变量,尽量减少静态变量的使用,在需要数据重用时,可以考虑使用引用(&)。同时对于数据库、文件操作完要及时关闭,对象使用完要及时调用析构函数等。

3)及时使用unset()函数释放变量,使用时需要注意以下两点:

① unset()函数只能在变量值占用内存空间超过256字节时才会释放内存空间。

② 只有当指向该变量的所有变量都销毁后,才能成功释放内存。

 

三、 说说对SQL语句优化有哪些方法?(选择几条)

(1)Where子句中:where表之间的连接必须写在其他Where条件之前,那些可以过滤掉最大数量记录的条件必须写在Where子句的末尾.HAVING最后。
(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。
(3) 避免在索引列上使用计算
(4)避免在索引列上使用IS NULL和IS NOT NULL
(5)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
(6)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
(7)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描

4、图片防盗链

php面试题总结(一)_第1张图片

 

白名单 如红色的区域 其他的域名不能直接访问网址的图片

 

四、海量日志文件的存放

(1)如每天入库的数据量特大,可以考虑按照月去存表

(2)日志可以不放在数据库里加重服务器负担,可放在redis,消息队列(kafka)、ELC。目前链家就用的后两个。


mysql的存储引擎以及比较。聚合索引以及非聚合索引的底层数据结构(B+树,前者叶子结点存放实际数据,后者叶子结点存放实际数据的地址)

 

五、如何提高web server性能

 

===========================

新浪

主要是高并发的处理比较多,新浪看点做公众号,每天数据库要插入20万到40万条数据。

mysql如何查询优化

1、数据库查询分页,perpage和page

2、查询分页当(limit 40万,200)遍历前40万也会超慢,这时候可以采用切片来查

select min, max(id) 然后计算分成若干片,每片的起始id和技术id可以算出来,然后放每片放缓存中。
---------------------
作者:筑梦悠然
来源:CSDN
原文:https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/79725234

六、php打印前一天的时间 格式为 **** ˉ ** ˉ ** **:**:**

echo date('Y-m-d H:i:s',strtotime('-1 days')); 

 

七、添加一条作业crontab,每月1日,16点执行一次,记录日志

在linux下编辑一条定时任务

crontab  -e

0 16 1 * * curl http://www.baidu.com/index.php/log/recordLog.php

**** crontab的文件格式

分 时 日 月 星期 要运行的命令

  • 第1列分钟0~59
  • 第2列小时0~23(0表示子夜)
  • 第3列日1~31
  • 第4列月1~12
  • 第5列星期0~7(0和7表示星期天)
  • 第6列要运行的命令

八、用php验证手机号码的正确性

2种方式,php和javascript

php

$phonenumber = '13712345678';
if(preg_match("/^1[3|4|5|7|8]\d{9}$/",$phonenumber)){
    echo "是手机号码";
}else{
    echo "不是手机号码";

}

javascript





你可能感兴趣的:(php面试题总结(一))