PHP 面试踩过的坑

PHP 面试踩过的坑

大家好,又见面了,我是全栈君。

因为最近需要面试,所以特意整理了一下面试所经历的一些面试题。分享一下,希望对自己有用,也对其他人有用。尚未有答案的,后面会陆续更新,如果有补充答案的,也十分感激。

1.get,post 的区别

**显示有区别 **
get方法是将字符串拼接在地址栏后面可以看见 
而post方法看不见




**传递的大小有区别 **
具体大小和浏览器有关系,ie浏览器是2k其他浏览器的最大值可能不同,但是也比较小。
而post方法传递参数的大小是可以设定的,原来是认为无限大。在Php当中在php.ini文件是可以设置参数的大小的。




**安全性 **
get方法安全性比较低因为暴露在外面而post方法安全性比较高




**提交的原理 **
get方法提交的数据都是独立的。
而Post方法将所有的提交的数据变成一个整体(将提交的数据变成xml格式)




**灵活性**
get方法很灵活, 
post方法不灵活,必须要有表单的参与才能用post提交很不方便




原文:http://www.php.cn/php-weizijiaocheng-379043.html




PS在查资料的时候发现一个有趣的回答:
传送门:https://www.cnblogs.com/xkzy/p/5987742.html

2.require,include 区别

 require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require
 include有返回值,而require没有(可能因为如此require的速度比include快)
 包含文件不存在或者语法错误的时候require是致命的错误终止执行,include不是

3. 获取 URL 后缀名

pathinfo()解析文件路径,返回其组成部分;
返回关联数组
dirname    文件路径
basename   文件名+扩展名
extension   最后一个扩展名
filename   文件名
eg: print_r( pathinfo('/ab/cd/e.php') );
Array(
  [dirname] => /ab/cd
  [basename] => e.php
  [extension] => php
  [filename] => e
)
扩展:
打印解析路径    var_dump( pathinfo($path) );
打印路径的父级路径    var_dump( pathinfo($path, PATHINFO_DIRNAME) );
打印路径的尾名    var_dump( pathinfo($path, PATHINFO_BASENAME) );
打印路径的最后的扩展名   var_dump( pathinfo($path, PATHINFO_EXTENSION) );
打印路径的文件的名字   var_dump( pathinfo($path, PATHINFO_FILENAME) );




原文:https://www.cnblogs.com/laowenBlog/p/6527632.html

4.tcp,udp,http 区别

参考链接:https://blog.csdn.net/qq_31332467/article/details/79217262

5. 获取上级目录的方法

echo __FILE__ ; // 获取当前所在文件的绝对路径及地址,结果:D:\aaa\my.php
echo dirname(__FILE__); // 取得当前文件所在的绝对目录,结果:D:\aaa\ 
echo dirname(dirname(__FILE__)); //取得当前文件的上一层目录名,结果:D:\ 
原文:https://blog.csdn.net/viqecel/article/details/80765275

6. 数据库主从复制,读写分离

* 什么是主从复制
主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;


* 主从复制的原理:
1.数据库有个bin-log二进制文件,记录了所有的sql语句。
2.只需要把主数据库的bin-log文件中的sql语句复制。
3.让其从数据的relay-log重做日志文件中在执行一次这些sql语句即可。


* 主从复制的作用
1.做数据的热备份,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
2.架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问频率,提高单机的I/O性能
3.主从复制是读写分离的基础,使数据库能制成更大 的并发。例如子报表中,由于部署报表的sql语句十分慢,导致锁表,影响前台的服务。如果前台服务使用master,报表使用slave,那么报表sql将不会造成前台所,保证了前台的访问速度。


* 主从复制的几种方式:
1.同步复制:所谓的同步复制,意思是master的变化,必须等待slave-1,slave-2,...,slave-n完成后才能返回。
2.异步复制:如同AJAX请求一样。master只需要完成自己的数据库操作即可。至于slaves是否收到二进制日志,是否完成操作,不用关心。MYSQL的默认设置。
3.半同步复制:master只保证slaves中的一个操作成功,就返回,其他slave不管。
这个功能,是由google为MYSQL引入的。


* 关于读写分离
在完成主从复制时,由于slave是需要同步master的。所以对于insert/delete/update这些更新数据库的操作,应该在master中完成。而select的查询操作,则落下到slave中。


原文:
https://blog.csdn.net/darkangel1228/article/details/80004222
https://www.cnblogs.com/KTblog/p/5122825.html

7. 数据库索引

**什么是索引**
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。(摘自百度百科)


**索引类型**
1.FULLTEXT 全文索引
    全文索引,仅MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。
2.HASH 哈希索引
    HASH索引的唯一性及类似键值对的形式十分适合作为索引,HASH索引可以一次定位,不需要像树形索引那样逐层参照,因此具有极高的效率。但是这种高效是有条件的。即只在“=”和“in”条件下高效,对于范围查询,排序及组合索引仍然效率不高。
3.BTREE 树形索引
    BTREE所以是一种将索引按一定算法,存入一个树形的数据结构中(二叉树),每次查询都是从树的入口root开始,一次遍历node,获取leaf。这是MySQL中默认也是最常用的索引类型。
4.RTREE
    RTREE在MySQL中很少使用,仅支持geometry数据类型,支持该存储引擎只有MyISAM、BDb、InnoDb、NDb、Archive几种。相对于BTREE,RTREE的优势在于范围查找。


**索引种类**
普通索引:仅加速查询
唯一索引:加速查询+列值唯一(可以有null)
主键索引:加速查询+列值唯一(不可以有null)+表中只有一个
组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
全文索引:对文本内容进行分词,进行搜索
外键索引:与主键索引形成联系,保证数据的完整性。


**索引使用的注意事项**
1.符合索引遵循前缀原则
2.like查询%不能再前,否则索引失效。如有需要,使用全文索引
3.column is null可以使用索引
4.如果MySQL估计使用索引比全表扫描慢,则放弃使用索引
5.如果or前的条件中列有索引,后面的没有,索引不会生效。
6.列类型是字符串,查询时,一定要给值加引号,否则索引失效。
7.确定order by 和 group by 中只有一个表的列,这样才能使用索引

8. 高并发的解决方案

web服务器优化 :负载均衡 
流量优化:防盗链处理 将恶意请求屏蔽,
前端优化:减少http请求、添加异步请求、启用浏览器缓存和文件压缩、cdn加速、建立独立的图片服务器、
服务端优化:页面静态化、并发处理、队列处理、
数据库优化:数据库缓存、分库分表、分区操作 、读写分离、负载均衡

9.MVC 的理解

1、Model(业务模型):应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据。          
2、view(视图):应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
3、controller(控制器):应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

10. 常用的文件操作函数

**1. 获得文件名:**
basename — 返回路径中的文件名部分


$path = "/home/cate/index/index2.php";\
$file = basename($path);\
echo $file; //结果index2.php


**2. 获得目录名**
dirname — 返回路径中的目录部分


$path = "/home/cate/index/index2.php";\
$file = dirname($path);\
echo $file;//结果/home/cate/index


**3.得到路径关联数组**
pathinfo() 函数以数组的形式返回关于文件路径的信息。
返回的数组元素如下:
-   [dirname]: 目录路径
-   [basename]: 文件名
-   [extension]: 文件后缀名
-   [filename]: 不包含后缀的文件名
pathinfo(path,options)
| path | 必需。规定要检查的路径。|
| options | 可选。规定要返回的数组元素。默认是 all。




可能的值:


-   PATHINFO_DIRNAME - 只返回 dirname
-   PATHINFO_BASENAME - 只返回 basename
-   PATHINFO_EXTENSION - 只返回 extension
-   PATHINFO_FILENAME - 只返回 filename


 **4.filesize取得文件大小**
filesize ( string $filename )
返回文件大小的字节数,如果出错返回  **FALSE** 并生成一条  **E_WARNING** 级的错误。


 **判断目录是否存在**
 $lujing = "./nihao/wohao";
 if(!is_dir($liujing)){ 
     mkdir(iconv("UTF-8", "GBK", $lujing),0777,true);
 }
 **判断文件是否存在**
 file_exists(path);
 更多请参照:http://www.w3school.com.cn/php/php_ref_filesystem.asp
原文:http://www.w3school.com.cn/php/php_ref_filesystem.asp

转自链接:https://learnku.com/articles/28758

PHP 面试踩过的坑

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111868.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sublime Text3配置及快捷键、插件推荐总结

    sublime Text3配置及快捷键、插件推荐总结

    2021年11月29日
    47
  • java加壳工具_加壳工具 – virbox加密空间站 – OSCHINA – 中文开源技术交流社区

    java加壳工具_加壳工具 – virbox加密空间站 – OSCHINA – 中文开源技术交流社区VirboxProtectorStandalone加壳工具可直接对dll文件进行加壳,防止代码反编译,更安全,更方便。产品简介VirboxProtectorStandalone提供了强大的代码虚拟化、高级混淆与智能压缩技术,保护您的程序免受逆向工程和非法修改。VirboxProtectorStandalone将被保护的程序代码转换为虚拟机代码,程序运行时,虚拟机将模拟程序执行,进入…

    2022年6月27日
    71
  • CentOS安装图形界面

    CentOS安装图形界面VmwareCentOS图形界面

    2022年6月11日
    28
  • 系统可靠性计算「建议收藏」

    系统可靠性计算「建议收藏」系统可靠性计算是软考考试的一个重点,近些年几乎每次考试都会考到,但这个知识点的难度不高,了解基本的运算公式,即可轻松应对。可靠性计算主要涉及三种系统,即串联系统、并联系统和冗余系统,其中串联系统和并联系统的可靠性计算都非常简单,只要了解其概念,公式很容易记住。冗余系统要复杂一些。在实际的考试当中,考得最多的就是串并混合系统的可靠性计算。所以要求我们对串联系统与并联系统的特点有基本的了解,对其计算…

    2022年7月26日
    8
  • wpf一定比winform好吗_winform转wpf好转吗

    wpf一定比winform好吗_winform转wpf好转吗1、结果来说,属于两套界面渲染方式。一个是对传统windows界面元素的封装,通过gdi绘制。另一个是全新的dx渲染绘制的界面,也脱离了对传统windows控件的依赖,没有历史包袱,理论上可以展现更炫酷的界面。对初级开发人员来说,没太大区别,类似的基本设计器是他们设计界面的主要手段,一样给事件编写代码。对初级以上开发人员来说,wpf需要学习xaml,有全新的ui描述语言,特别是可以通过模板的嵌套…

    2025年7月27日
    1
  • 默认位置从c盘改到d盘_怎样将c盘中的文件夹移动至d盘中

    默认位置从c盘改到d盘_怎样将c盘中的文件夹移动至d盘中如何把C盘里的文件默认位置更改到D盘指定目录?1.打开运行,输入%HOMEPATH%2.以”桌面”文件转移到D盘目录为例(其他文档类比进行操作)3.鼠标右键”桌面”选择属性定位到位置标签下

    2022年8月6日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号