面试宝典
2019-02-12 本文已影响0人
phpdi
1.引用变量考点
- 引用变量定义:用不同的名字访问同一个变量内容
- cow机制
- 遍历时的引用处理
- unset 只会取消引用,不会销毁内存空间
- php中对象默认是引用传递,若需要复制,则需要使用clone
2.常量及数据类型
- define,const;php5.6以用const定义常量不支持表达式;
- 7种false情况:0,0.0,'','0',[],null,false;
- 精度丢失;
- 获取客户端,服务端ip;
- 与app交互$_POST失效,需要使用file_get_content(php://input)来获取源输入;
3.运算符
- 递增,递减不影响布尔值;
- 递减null没有效果;
- 运算符优先级:递增递减>!>算数运算符>大小比较>(不)等运算符>逻辑与>逻辑或>三目>赋值;
- 短路作用
4.流程控制
- for循环 #只能遍历索引数组
- foreach循环 #遍历索引数组和关联数组
- while,list(),each() 组合循环 #遍历索引数组和关联数组
- while,list ,each 不会reset(),重置指针,foreach遍历会对数组进行reset操作
- switch case #和if else 不同的是switch后面的控制表达式的数据类型只能是整形,浮点类型,或者字符串
- continue语句作用到switch的作用类似于break
- 跳出switch外的循环,可以使用continue2
- 效率:如果条件比一个简单的比较要复杂的多或则在一个很多次的循环中,那么switch语句会快一些,因为switch case会建立跳转表,不会一个一个去判定
5.自定义函数,及内部函数
- 静态变量定义:仅在局部函数中存在,但当程序执行离开此作用域的时候,其值不会消失。
- 静态变量特性
- 仅初始化一次
- 初始化的时候需要赋值,不赋值,则为null
- 每次执行函数该值会保留
- static 变量作用域是局部的,仅在函数内部有效
- 可以用来记录函数调用次数,某些情况下可以用来终止递归
- 系统内置函数
- 时间日期函数:date(),strtotime(),mktime(),time(),microtime(),date_default_timezone_set()
- ip处理函数:ip2long(),long2ip();
- 打印处理:print(),printf(),print_r(),echo,sprintf(),var_dump(),var_export()
- 序列化和反序列化函数:serialize(),unserialize()
- 字符串处理函数:implode(),explode(),strrev(),trim(),strstr(),number_format()
- 数组处理函数:array_keys(),array_values(),array_diff(),array_intersect(),array_merage(),array_shift(),array_unshift(),array_pop(),array_push(),array_rand(),sort()
- 例题
<?php
$var1 = 5;
$var2 = 10;
function foo(&$my_var)
{
global $var1;
$var1 += 2;
$var2 = 4;
$my_var += 3;
return $var2;
}
$my_var = 5;
echo foo($my_var) . "\n";
echo $my_var . "\n";
echo $var1;
echo $var2;
$bar = 'foo';
$my_var = 10;
echo $bar($my_var) . "\n";
//答案:4 8 7 10 4
6.外部文件的引入
- include 和 require的区别
- include 和 include_once的区别是重复引入文件的时候include_once的返回值为true
7.正则表达式
- 正则表达式的作用:分割,查找,匹配, 替换
- 分割符:/,#,~
- 通用原子
- \d #[0-9],\D #[^0-9]
- \w #[数字字母下划线],\W #[^\w]
- \s #[空白符],\S #[^\s]
- \b #匹配一个单词的开头或结尾
- 元字符:. * ? ^ $ + {n} {n,} {n,m} [] () [^] | [-] #元字符的作用是用来修饰原子的
- 模式修正符
- i #不区分大小写
- m #多行匹配,当字符串中含有\n ,仍然可以进行匹配
- e #php7,已经移除
- s #将字符串视为单行,换行符作为普通字符;
- U #取消贪婪模式, 只匹配最近的一个字符串;不重复匹配;
- x #将模式中的空白忽略;
- A #以这个模式开头
- D #如果使用$限制结尾字符,则不允许结尾有换行;
- u #表示待匹配的串是一个符合unicode编码规则的串,比如utf-8编码的串在u修饰符下,一个汉字被当做一个字符被处理。\w有原来的[_0-9A-Za-z]扩展到汉字
- 后向引用
- 贪婪模式,取消贪婪模式的方式
- 匹配规则中使用?
- 使用模式修正符U
- 常见的preg函数
- preg_match #匹配
- preg_match_all #匹配
- preg_replace #替换
- preg_split #分割
- 匹配utf8 中文:'/[\x{4e00}-\x{9fa5}]+/u'
文件及目录处理
- file_get_contents()
- file_put_contents()
会话控制
- cookie #数据存储在客户端
- setcookie #设置cookie,在下一次请求时才会有值
- $_COOKIE # 获取cookie
- setcookie(name,'',time()-1) #清除cookie
- 存储在客户端不会占用服务端空间,节约了资源
- 会暴露数据,客户端可以禁止使用cookie
- session #数据存储在服务端,session是基于cookie的,使用sessionid来区分是那个客户端,理论上sessionid是可能重复的
- session.cookie_lifetime #这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废
网络协议
- http工作原理:客户端发送请求给服务器,创建一个tcp连接,指定端口,默认为80,连接到服务器,服务器监听到客户端请求,分析请求类型后,向客户端返回状态信息和处理内容
- http常见的请求/响应头
- Content-Type #
- Accept
- Origin
- Cookie
- Cache-Control
- User-Agent
- Referrer
- X-Forwarded-For
- Access-Control-Allow-Origin
- Last-Modified
- http协议常见的请求方法
- GET #数据的读取
- POST #修改现有的资源或者创建新的资源,主要用于创建资源
- HEAD #服务器不会回传数据内容部分,只会回传HEAD部分,一般用户客户端查看服务器的性能
- OPTIONS #返回http所支持的所有请求的方法,可以用来测试服务器功能是否正常
- PUT #修改资源
- DELETE #删除资源
- TRACE #请求服务器回显请求信息,主要用于测试
- http协议中GET和POST请求方法的区别
- get在后退或者刷新的时候数据不会发生变化,而post则会将数据重新提交
- get可以收藏为书签,post不能被收藏为书签
- get请求可以被浏览器缓存,而post则不能
- get请求有长度限制,post没有长度限制
- get的参数会保留在历史记录中,而post则不能
- https协议的工作原理
- https是一种基于ssl/tls的http协议,所有的http数据都是在SSL/TLS协议封装之上传输的
- https协议在http协议的基础上,添加了SSL/TLS握手以及数据加密协议,也属于应用层协议
- 常见网络协议含义及端口
- FTP #文件传输协议 默认端口21
- Telnet #远程登录协议 默认端口23
- SMTP #简单邮件传输协议 默认端口25
- POP3 #用于接收邮件 默认端口110
- http #超文本传输协议 默认端口80
- DNS #域名解析服务 默认端口53
后端处理请求的过程 lnmp架构
- PHP-FPM 包含一个master进程和多个woker进程,master负责监听http请求,每个woker进程中嵌入一个zend引擎,用来解析php
- nginx和php-fpm 是怎么配合处理请求的
- php的执行过程,即woker进程解析部分
- scanning #将php代码转换为语言片段(token)
- parsing #将token 转换为简单而有意义的表达式
- compilation # 将表达式编译成opcode,
- execution #顺序执行opcodes,从而实现php脚本的功能
linux 操作
- 软件编译安装
- php扩展安装
- 计划任务
- crontab -e #循环执行
- at #一次执行
- sed 配合awk的使用截取文本数据