基础知识部分

1.PDO

2.composer 干嘛用的

3.restful 接口的机制

4.auth协议的原理

5.session 和cookie的区别

6.怎么打开PHP文件 fopen file_get_content

7.PHP 7新特性

8.PHP如何进行多进程(trait 子类) 有没有用过larval 框架 不知道不用说 面试官只是做个了解


8.php 获取代码执行时间和消耗的内存

1:变量的传值与引用。
2:变量的类型转换和判断类型方法。
3:php运算符优先级,一般是写出运算符的运算结果。
4:PHP中函数传参,闭包,判断输出的echo,print是不是函数等。
5:PHP数组,数组函数,数组遍历,预定义数组(面试必出)。
6:PHP面向对象,魔术方法,封装、继承、多态。设计模式,包括(单利、工厂、迭代器、装饰、命令、策略)。
7:正则表达式,每个标号含义,邮箱、网址、标签匹配,正则函数(面试必出)。
8:PHP异常处理(级别,错误日志,控制错误输出)(面试必出)。
9:PHP时间函数,日期计算函数。
10:文件系统,记录日志、目录、文件的遍历、上传、多方法得到文件扩展名、文件引用方式、引用函数区别。(面试必出)。
11:会话控制,主要说原理。session与cookie在分布式应用中出现问题的解决方案。
12:PHP模板引擎,常用模板引擎特点,MVC好与不好的地方。
13:PHP安全处理,过滤函数。
14:XML的使用。
15:PHP字符串的处理,包括转义(安全)、编码、截取、定位、与数组间的转换、处理函数等。(面试必出)。
16:Socket编程,各种协议,head头,curl参数含义。
17:网络状态码含义,常用(204,304, 404, 504,502)。
18:Apache配置文件,PHP配置文件,各个含义字段的含义。
19:网络各种攻击的名词含义(SQL攻击、XSS、CSRF、DDos),防止措施。
20:url的处理函数,得到url指定的部分

PHP 长连接和短连接
Include 与 require的区别,require和require_once的效率哪个高?
php-fpm中master与worker工作方式及关系(https://blog.csdn.net/zizhilianqiu/article/details/90374255

https://www.cnblogs.com/zyf-zhaoyafei/p/4828358.html



PHP面向对象部分

1.常见的魔术方法有哪些?

2.常见的设计模式你知道哪些,单列,工厂,观察者,单列模式原理

Mysql 部分

https://www.jianshu.com/p/7482c64325ff

https://blog.csdn.net/weixin_43243070/article/details/86058624

1.sql怎么去优化?

2.innoDb 和 Myisam 的区别和相同点

3.在什么情况下执行索引没有效果

4.一张表的数据量有几千万行,要怎么优化,提高查询速度

5.历史的订单存到mysql中,最近订单存到缓存中

6.mysql 的最左匹配原则

7.innoDb使用的是聚簇索引,myisam 使用的是非聚簇索引


缓存部分

1.redis和mecache的优缺点及区别

redis之持久化机制

2.缓存都用于哪些应用场景

网络协议

1.TCP/IP 三次握手

2.HTTP 协议原理

网络编程

1.socket 通信

2.前端调用接口时使用什么协议

3.PHP 可以用guzzle 扩展实现异步请求(场景 连打印设备 异步请求GO接口 然后传入指令)

4.PHP长链接 HTTP请求 通过keepalive

数据结构和算法

1.常用排序算法

2.链表、二叉树、数据

计算机书

高性能mysql

HTTP 权威指南

TCP/TP 协议

深入Linux内核

数据结构与算法



php数组:


1.array_key_change_case($arr,$case):将数组所有的键转化为大写或者小写,$case可设为CASE_LOWER或者CASE_UPPER。

2.array_chunk($arr,$number):把数组分割为有特定($number)个元素的数组块。

3.array_column($arr,$column):返回数组中某一个单列的值。

4.array_combine($arr1,$arr2):合并两个数组为一个新数组,并把$arr1的值作为键,$arr2的值作为值。

5.array_count_values(Array('a','b','c','a','b')):返回数组中所有值出现的次数,函数执行结果:Array ( [a] => 2 [b] => 2 [c] => 1 )。

6.array_diff($arr1,$arr2):返回两个数组的差集(只比较键值)

7.array_diff_key($arr1,$arr2):返回两个数组的差集(只比较键名),该数组返回在$arr1中,但不在 $arr2中的元素。

8.array_intersect($arr1,$arr2):比较数组,返回两个数组的交集。

9.array_key_exists($key,$arr):查询数组中是否存在指定的键名。

10.array_keys($arr):返回数组中所有的键名,并且组成一个新数组。

11.array_map('myFunction',$arr):将用户自定义函数作为回调函数作用在数组的每个元素上,返回一个新数组。

12.array_merge($arr1,$arr2,$arr3.....):合并一个或多个元素为一个新数组,如果两个或更多元素有相同的键名,后者会覆盖前者。

13.array_merge_recursive($arr1,$arr2,$arr3.....):合并一个或多个元素为一个新数组,如果两个或更多元素有相同的键名,后者不会覆盖前者,而会递归创建一个新数组。

14.array_pop($arr):删除数组中的最后一个元素(出栈)。

15.array_product(Array(1,2,3)):计算数组中所有值的乘积。

16.array_push($arr,'a','b'):将一个或多个元素插入数组的末尾(入栈)。

17.array_rand($arr,number):返回一个包含随机键名的数组。

18.array_replace($arr1,$arr2):后面数组的值替换前面数组的值。

19.array_reverse($arr1,$arr2):将数组中的元素逆序输出(反转)

20.array_search('a',$arr):在数组中搜索给定的键名,成功的话返回它的键名。

21.array_shift():删除数组中的第一个元素,并返回被删除元素的值。

22.array_sum():返回数组中所有值的和。

23.array_unshift():在数组开头插入一个或多个元素。

24.array_values():返回数组中所有的值。

25.array_walk($arr,'myFunction'):对数组中的每个成员应用自定义函数。

26.arsort():对关联数组按照键值降序排列。

27.asort():对关联数组按照键值升序排列。

28.current():返回数组中的当前元素(第一个指针指向的元素)。

29.in_array('a',$arr):搜索数组中是否存在指定的值。

30.krsort():把数组按照键名降序排列。

31.ksort():把数组按照键名降升序序排列。

32.list():把数组中的值赋给一些变量。list($a,$b,$c) = array(1,2,3)。
======================================================================================================

PHP:字符串

返回bool

1.isset($a)//当$a=NULL 或不存在,返回false,反之为true
2.empty($a)//当$a=NULL/''/array()/0/'0'/不存在 时 返回true,反之为false

返回值为自字符

1.substr(字符串,开始地方,[返回字符串的长度]);// 截取字符串的一部分,第一个字符位置为0
2.substr_replace($str,"aaa",start[,length]);在$str上操作,从第start个开始,把【后边】的字符[全/或length个]替换
3.sub_count($str,"is"[,5,10]);//[ 从第五个字符开始,搜索长度为10,]搜索is在$str中出现的次数,【返回次数】
4.strstr($email,"@"[,true])    //从头开始搜索,无true返回@后边字符,有true返回@前边的字符[strrchr对比]
5.strrchr($email,"@")//从结尾开始搜索,返回@后的所有字符
6.str_replace(被替换词,替换词,被搜索字符串,[统计替换次数$num])   前两个参数也可为数组,两个数组元素个数相同
7.str_repeat($str,num);//重复$str字符串 num次,

返回值为数字类的

1.strpos($str,"@");//返回@【第一次出现的位置】
2.strrpos($str,"@");//返回@【最后一次出现的位置】
3.str_word_count($str[,0/1/2]);//返回$str中单词的数量[0指返回次数,默认值/1指以数组形式返回单词值/2指返回关联数组,k为单词首字母下标,v单词值]
4.strcmp($str1,$str2);//按ASCII码比较 str1>str2 则返回1 相等返回0 <返回-1 strcasecmp不区分大小写的比较
5.strnatcmp($str1,$str2);//按自然数的排序比较,上边的比较10<2;本函数比较10>2,按自然数大小来的
strcasecmp($str1,$str2);strnatcasecmp//以上4个函数,$str1,$str2比较,【返回值:相等0,小于-1,大于1】
6. number_format(10000[,2]);        //==》10,000.00        把第一个参数格式化,保留2位小数
7. strlen($string);成功则返回字符串 $string 的长度
8. mb_strlen($string,'utf8');//获取字符串$string长度,多字节的字符被计为 1。

thinkphp和laravel和yii的区别

Laravel:
1:提交数据的方式,Laravel在提交表单时需要在表单中加入{csrf_field}来防止跨域***,而TP不会。
2:路由,Laravel必须先定义,再使用,路由文件为routes.php;他可以没有控制器方法,没有模型,没有视图,但是一定要有路由;Laravel默认的路由机制比较适合SEO
3:中间件,Laravel的中间件,中间件就是HTTP请求到达之前经过的层,通过中间件我们可以验证用户是否登录等一些通用操作。
4:Laravel升级十分简易,而TP大版本的升级要重构代码。
5:但在Laravel框架中内置了"哈希"Hash加密单向加密方法,且同样的参数加密出的字符串是绝对不会出现相同的情况 这就提高了安全性;
在实际开发中我们常常遇到这样的问题,就是开发地点不固定,这就造成了我们需要频繁的更改数据库配置,给开发工作造成了麻烦,TP依然没有避免这个"灾难";在laravel框架中,.env环境文件的出现解决了这个麻烦,我们只需要在不同的工作地点配置好.env文件就不必再进行配置,因为无论是git还是svn " .env是不会随着文件一起提交到服务器的";

缺点:
基于组件式的框架,所以比较臃肿

二、Yii
Yii 是一个基于组件的高性能php框架,用于开发大型Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,Yii提供了 今日Web 2.0应用开发所需要的几乎一切功能。事实上,Yii是最有效率的PHP框架之一。

优点
1.纯OOP
2.用于大规模Web应用
3.模型使用方便
4.开发速度快,运行速度也快。性能优异且功能丰富
5.使用命令行工具。
6.支持composer包管理工具

缺点:
1.对Model层的指导和考虑较少
2.文档实例较少
3.英文太多
4.要求PHP技术精通,OOP编程要熟练!
5.View并不是理想view,理想中的view可能只是html代码,不会涉及PHP代码。

mysql =====================

优化数据库的方法
选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTNULL,例如’省份’、’性别’最好适用ENUM
使用连接(JOIN)来代替子查询
适用联合(UNION)来代替手动创建的临时表
事务处理
锁定表、优化事务处理
适用外键,优化锁定表
建立索引
优化查询语句