美文网首页
面试宝典

面试宝典

作者: phpdi | 来源:发表于2019-02-12 20:37 被阅读0次

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.自定义函数,及内部函数

  • 静态变量定义:仅在局部函数中存在,但当程序执行离开此作用域的时候,其值不会消失。
  • 静态变量特性
    1. 仅初始化一次
    2. 初始化的时候需要赋值,不赋值,则为null
    3. 每次执行函数该值会保留
    4. static 变量作用域是局部的,仅在函数内部有效
    5. 可以用来记录函数调用次数,某些情况下可以用来终止递归
  • 系统内置函数
    • 时间日期函数: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进程解析部分
    1. scanning #将php代码转换为语言片段(token)
    2. parsing #将token 转换为简单而有意义的表达式
    3. compilation # 将表达式编译成opcode,
    4. execution #顺序执行opcodes,从而实现php脚本的功能

linux 操作

  • 软件编译安装
  • php扩展安装
  • 计划任务
    • crontab -e #循环执行
    • at #一次执行
  • sed 配合awk的使用截取文本数据

相关文章

网友评论

      本文标题:面试宝典

      本文链接:https://www.haomeiwen.com/subject/phfleqtx.html