PHP 试题

PHP 基础

  • 简述 PHP

    PHP 是一个基于 服务端 来创建 动态网站 的脚本语言,可以结合 HTML 来生成主页;

  • PHP 的八种类型

    boolean(布尔值)、integer(整型)、float(浮点型)、string(字符串)、array(数组)、object(对象)、null、resource(资源);

  • 以下预定义全局变量的作用

    // 当前运行脚本所在目录的根目录
    $_SERVER['DOCUMENT_ROOT'];
    
    // 当前请求 Host 头部的内容
    $_SERVER['HTTP_HOST'];
    
    // 当前请求用户的 ip
    $_SERVER['REMOTE_ADDR']; 或者
    getenv['REMOTE_ADDR'];
    
    // 获取服务器 ip
    $_SERVER['SERVER_ADDR']; 
    
    // 链接到当前页面的前一页的 url 地址
    $_SERVER['HTTP_REFERER'];
    
    // 当前服务器的名称
    $_SERVER['SERVER_NAME'];
    
    // 上传文件的所有信息
    $_FILE;
    
    
  • 比较 include()require()

    两者最大的区别就是对包含文件需求程度;
    include()就是包含,如果包含的文件不存在,会提示一个错误,但是程序仍然往下执行;
    require()是需要,如果包含的文件不存在,则报出一个致命的错误,程序也会终止执行;
    include()执行文件时,每次都要读取和评估;require()文件只处理一次;如果大量代码只读取一个文件 require()效率更高,读取多个文件 include()效率更高;
    include_once()require_once()都是包含一次,避免重复包含;

  • POST 和 GET 的最大传输容量分别是多少?

    POST 是根据 php.ini 文件配置的(默认是 8M);
    GET 一般大小限制在 2kb;
    一般来说 get/post 是没有长度限制的,主要的限制是来源于 浏览器服务器

    区别:

    • get 可以被 cache ,而 post 不能被缓存;
    • get 请求有长度的限制,post 理论上是没有长度的限制的;
    • get 提交的数据较小,一般是 2k ~ 8k ,而 post 提交的数据较大,大小是根据服务器设定来的;
  • 如何判断接收的数据是 POST 还是 GET

    $_SERVER['REQUEST_METHOD']

  • echoprintprint_r的区别

    echo是一个语言结构,输出一个或者多个字符串;
    print()输出一个字符串;
    print_r()是一个函数,打印的是变量的信息,对象、数组等

  • 传值赋值和引用赋值的区别

    传值赋值是将内容复制一份,修改其中一个变量另一个变量不会受到影响;引用传值是将两个变量指向同一个内存空间,其中一个变量改变会影响到另一个变量;
    引用赋值使用 &

  • 将 1234567890 修改成 1,234,567,890

       $b = strrev($a); // 翻转字符串
       $c = chunk_split($b, 3, ','); // 分割字符串
       $d = strrev($c);
       $e = substr($d, 1);// 截取字符串
       // $e = ltrim($d, ','); // 删除字符串开头的空白字符(或其他字符)
       echo $e . PHP_EOL;
    
  • PHP 中 error_reporting这个函数的作用

    打开或者关闭错误报告: error_reporting(2047)打开所有错误报告

  • echo count('abc')返回的是什么

    返回 1 ,count()是计算 array的,其他类型返回 1 ,count('null')返回 0;

  • session()cookie的区别

    1. cookie 是放到客户端上的, session 是放到服务器上的;
    2. cookie 不是很安全,别人可以分析本地 cookie 来进行 cookie 欺骗,考虑安全应当使用 session;
    3. session 是放在内存中的,大量 session 会影响服务器性能;
    4. 单个 Cookie 保存的长度不能超过 4K,一个网址被限制只能保存 20 个 cookie;
  • 如何设置 session 的生存时间

    session_set_cookie_params()

MySQL

  • MySQL 函数

    mysql_num_rows()取得的查询返回集总数

  • SQL 语句应该考虑哪些安全性

    1. 防 sql 注入;
    2. 最小用户权限原则,最好不要使用 root 连接数据库;
    3. 当 sql 运行出错时,不要把所有错误信息暴露给用户;
  • MySQL 索引

    普通索引,唯一索引,主键索引

  • char 和 varchar 的区别

    char 定长,不管储存是否达到设定的值,都按设定的值储存,效率较高,varchar 变长;varchar 储存字符比 char 长;

  • MySQL 取得当前时间和格式化时间的函数

    now()
    date_format(time, '%Y%m%d')

  • 优化 sql 查询语句

    1. 尽量选择较小的列;
    2. 将 where 后面使用较频繁的字段加上索引;
    3. select 语句中避免使用 ‘*’;
    4. 避免在索引列上计算,使用 not in 和 <> 等操作;
    5. 合理使用 limit 字段;
    6. 合适分割表,查询较慢时用 explain 分析查询语句;
    7. (使用缓存);//
  • MySQL 中的事务

    保证成批的 sql 语句要么同时完成要么同时失败,保证数据的完整性;

    四个特性(ACID):原子性、一致性、隔离性、持久性;

  • 优化数据库方法

    1. 选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段 设置 not null 例如’省份,性别’,最好设置为 enum
    2. 使用连接(join)来代替子查询
    3. 使用联合(union)来代替手动创建的临时表
    4. 事务处理
    5. 锁定表,优化事务处理
    6. 使用外键,优化锁定表
    7. 建立索引
    8. 优化查询语句
  • 对于大流量访问网站,怎么来优化访问量

    1. 确认服务器硬件是否足够支持当前流量;
    2. 优化数据库访问;
    3. 禁止外部盗链;
    4. 控制大文件下载;
    5. 使用不同主机分流主要流量;

HTTP 协议

  • http 响应状态码

    1xx:请求被接受;2xx:成功;3xx:重定向;4xx:客服端错误;5xx:服务端错误

    常见 Code 码:200:成功;301/2:永久/临时重定向;307:重定向中保持原有的请求数据;404:网页不存在;503:服务器暂时不可用;500:服务器内部错误;

优化安全

  • 防 SQL 注入漏洞可以用哪些函数?

    addslashes()
    mysql_escape_string()

  • 开发过程中有什么方法加快页面加载速度

    • 数据库优化;
    • php 缓存;
    • 使用 smarty、zend 引擎;
    • 分布式部署;
    • 静态化处理;

Linux

  • 常用的 linux 命令及功能

    • ls 显示文件或者目录 -a 所有文件 -l 详细显示
    • mkdir 创建目录
    • cd 切换目录
    • touch 创建空文件
    • cat 查看文件内容
    • cp 拷贝
    • mv 移动或者重命名
    • rm 删除文件 -r 递归删除 -f 强制删除
    • pwd 显示当前目录
    • ln 链接文件
  • find 和 grep 的区别

    find 是查找文件,grep 是查找文件内容;

简单算法

  • 冒泡排序

    // 将大数放在后面
    function bubble($arr)
    {
    	for ($i=0; $i  $arr[$j]) {
    				$tmp = $arr[$i]; // 将大数暂存
    				$arr[$i] = $arr[$j];
    				$arr[$j] = $tmp;
    			}
    		}
    	}
    
    	return $arr;
    }
    
  • 快速排序

    // 将第一个数来作为比较,使用递归
    function quickSort($arr)
    {
    	if (count($arr) <= 1) {
    		return $arr;
    	}
    
    	$firstOne = $arr[0];
    
    	$left = $right = [];
    
    	for ($i=1; $i 
  • 约瑟夫闭环问题

    function king($n, $m)
    {
    	$monkey = range(1, $n);
    	$i = 0;
    	while (count($monkey) > 1) {
    		$i += 1;
    		$head = array_shift($monkey);
    		if ($i % $m != 0) {
    			array_push($monkey, $head);
    		}
    	}
    
    	return $monkey[0];
    }
    
  • 遍历文件夹

    function showFile($path)
    {
    	$result = [];
    	$handle = opendir($path);
    	if ($handle) {
    		while (false !== ($file = readdir($handle))) {
    			if ($file != '.' && $file != '..') {
    				$cur_path = $path . '/' .$file;
    				if (is_dir($cur_path)) {
    					$result['dir'][$cur_path] = showFile($cur_path);	
    				}else {
    					$result['file'][] = $cur_path;
    				}
    			}
    			
    		}
    		closedir($handle);
    	}
    	return $result;
    }
    

你可能感兴趣的:(PHP)