2020 PHP面试题目
1、UDP和TCP有什么区别
答:1)连接方面区别:
TCP面向连接(如打电话要先拨号建立连接)
UDP是无连接的,即发送数据之前不需要建立连接
2)安全方面的区别:
TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达
UDP尽最大努力交付,即不保证可靠交付
3)传输效率的区别:
TCP传输效率相对较低
UDP传输效率高,适用于对高速传输和实时性有较高的通信或广播通信
4)连接对象数量的区别
TCP连接只能是点到点,一对一的
UDP支持一对一,一对多,多对一和多对多的交互通信
2、MySQL、MySQLi和PDO的区别
答: 1)mysql扩展提供了一个面向过程的接口;并且是针对Mysql4.1.3或更早版本设计的,因此这个扩展虽然可以与mysql4.1.3数据库服务端进行交互,但是不支持后期版本的mysql服务端的某些特性
2)mysqli扩展,我们有时称之为mysql增强扩展,可以用于使用mysql4.1.3或更新版本中新的高级特性;mysqli扩展有一系列的优势,相对于mysql扩展的提升主要有:面向对象接口、prepared语句支持、多语句执行支持、事务支持、增强的调试能力、嵌入式服务支持
3)PHP数据对象,是PHP应用中的一个数据库抽象层规范,PDO提供了一个统一的API接口可以使得你的PHP应用不去关心具体要连接的数据库服务器系统类型,也就是说,如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器。
PDO是PHP5.1之后才支持的,他为访问数据库采用了一致性的接口,在链接Mysql上几乎没有区别,PDO的性能损失可以忽略不计,同时具有mysql扩展库所不具备的优点
1:PDO真正的以底层实现的统一接口数据操作接口
2:PDO支持更高级的DB特性操作,如:存储过程的调度等,mysql原生库是不支持的
3:PDO是PHP官方的pecl库,兼容性稳定性必然要高于mysql Extension,可以直接使用pecl upgrade pdo命令升级
3、MVC、面向对象、面向切面的理解
答: MVC:模型-》视图-》控制器,是常见的软件设计架构,用一种业务逻辑、数据、界面显示分离的方式组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制页面及用户交互的同事,不需要重新编写业务逻辑。
面向对象:简称OOP,三大特性,封装、继承、多态
封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性
继承:提高代码复用性,继承是多态的前提
多态:父类或接口定义的引用变量可以指向子类或具体实现类的实力对象,提高了程序的扩展性
面向切面:是一种针对业务处理过程中的切面进行提取,它面对的是处理过程中的某个步骤或阶段,以达到在逻辑过程中的各部分之间低耦合性的代码隔离效果
4、列出常见数组函数,各自有何作用?
答: array_flip() :交换数组中的键和值
array_diff() :返回两个数组的差集数组
array_diff_key():比较键名,并返回两个数组的差集数组
array_column():返回输入数组中某个单一列的值
array_merge():把一个或多个数组合并为一个数组
array_pop():将数组最后一个单元弹出(出栈)
array_push():将一个或多个单元压入数组的末尾(入栈)
array_rand():从数组中随机选出一个或多个元素,并返回键值
array_unique():删除数组中重复的值
in_array():检查数组中是否存在指定的值
array_values():返回数组中所有的值,不包括键值名
array_key_exists():检查给定的键名或索引是否存在于数组中
5、Session的默认保存路径
答:在Linux中是 /tmp 或 /var/lib/php/session,在Windows中是 C:\Windows\Temp
6、Linux从nginx访问日志里面找出访问次数最多的10个IP,倒序排序,命令怎么写
答:awk '{print $1}' /usr/local/webserver/logs/error.log | sort | uniq -c | sort -nr| head -n 10
1)sort命令:
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出
-b:忽略每行前面开始出的空格字符;
-c:检查文件是否已经按照顺序排序;
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
-f:排序时,将小写字母视为大写字母;
-i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
-m:将几个排序号的文件进行合并;
-M:将前面3个字母依照月份的缩写进行排序;
-n:依照数值的大小排序;
-o<输出文件>:将排序后的结果存入制定的文件;
-r:以相反的顺序来排序;
-t<分隔字符>:指定排序时所用的栏位分隔字符;
2)uniq命令:
uniq命令用于报告或忽略文件中的重复行,一般与sort命令结合使用
-c或-count:在每列旁边显示该行重复出现的次数;
-d或–repeated:仅显示重复出现的行列;
-f<栏位>或–skip-fields=<栏位>:忽略比较指定的栏位;
-s<字符位置>或–skip-chars=<字符位置>:忽略比较指定的字符;
-u或——unique:仅显示出一次的行列;
-w<字符位置>或–check-chars=<字符位置>:指定要比较的字符。
3)head命令:
head用来显示文件的开头至标准输出中,默认head命令打印其相应文件的开头10行
-q 隐藏文件名
-v 显示文件名
-c 显示字节数
-n 显示的行数
举例:
head -n 5 log4j.log 显示文件的前n行命令
head -n -6 log4j.log 输出文件除了最后n行的全部内容