2020最新PHP面试题和进阶资料
分享一波PHP最新的面试题
1:请自我介绍一下?
答: 我叫xxx,来自上海,20xx年毕业于xx大学计算机xx系,毕业后在武汉从事了x年的PHP开发工作,公司是一个外包公司,主要做微信开发、公众号推广、商城、论坛的开发等。
2:你负责哪些项目?
答: 由于我们公司是一个外包公司,不可能只做一个项目,公司的项目都是交叉进行的,论坛、微信、商城我都做过。
3:使用什么前端框架和后端框架?
答:根据自己的情况回答。比如TP框架:运用的mysql+apache+PHP进行开发,因为TP框架是一个免费开源的、轻量级的PHP开发框架,而且是我们中国人自己开发的,也是国内用的比较多的,各种资料也比较齐全。
4:你做过哪些模块?
答:登陆注册、商品管理、购物车模块、订单管理等。
5:请用简单的语言告诉我PHP是什么?
答:PHP全称:Hypertext Preprocessor,是一种用来开发动态网站的服务器脚本语言。
6:什么是MVC?
答:MVC由三个部分组成,分别是Model(模型)、View(视图)和Controller(控制器),使用PHP MVC可以更高效地管理好3个不同层的PHP代码。
Model:数据信息存取层。
View:view层负责将应用的数据以特定的方式展现在界面上。
Controller:通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
7:PHP支持多继承吗?
答:不可以。PHP类只能继承一个父类,并用关键字“extends”标识。
8:请问PHP中echo和print有什么区别?
答:这两个的功能都是将一些值打印在屏幕上。两者的区别在于:echo用来输出字符串,显示多个值的时候可以用逗号隔开,而且只支持基本类型。而print不仅可以打印字符串值, 而且可以打印函数的返回值。
9:http 协议中的 post 和 get 有何区别?
答:
10:PHP中获取图像尺寸大小的方法是什么?
答:getimagesize()获取图片的尺寸;Imagesx()获取图片的宽度;Imagesy()获取图片的高度。
11:PHP中的PEAR是什么?
答:PEAR也就是为PHP扩展与应用库(PHP Extension and Application Repository),它是一个PHP扩展及应用的一个代码仓库。
12:如何用PHP和MySQL上传视频?
答:
13:PHP中的错误类型有哪些?
答:PHP中遇到的错误类型大致有3种。
(1)提示notice:这基本都是一些比较正常的信息而非错误,有些甚至不会展示给用户。比如访问不存在的变量。
(2)警告warning:这类一般是一些常规错误,会将警告信息展示给用户,但是不会影响代码的输出,比如包含一些不存在的文件。
(3)错误error:这是比较严重的错误,会影响整个代码的运行,比如访问不存在的PHP类。
14:如何在PHP中定义常量?
答:在PHP中,可以使用Define()来定义常量,如下:
define(“Newconstant”, 30)
15:foo()和@foo()之间有什么区别?
答:foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。
@foo() 在执行这个函数时,会隐藏所有上述的错误讯息。
很多应用程式都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误讯息,我
认为这是很严重的失误,因为错误不该被隐藏,你必须妥善处理它们,可能的话解决它们。:
16:MYISAM 和 INNODB 的区别
答:1. myisam 不支持事务,innodb 支持事物
-
myisam 是表级锁,innodb 是行级锁
-
msIsam 支持全文索引,innodb 不支持全文索引
-
myisam 常用于 select 较多的数据库,innodb 常用于更新较多的数据库
17:排序都是有哪些,写出一种排序
答:排序有:冒泡排序,简单选择排序,直接插入排序,shell 排序,堆排序,归并排序,快速排序
例如:快速排序
function quick_sort($array){
$length = count($array);
if($length<=1){
return $array;
}
$privotkey = $array[0];
$left_array = array();
$right_array = array();
for($i=0;$i<$length;$i++){
if($array[$i]<=$privotkey){
$left_array[] = $array[$i];
}else{
$right_array[] = $array[$i];
}
}
$left_array = quick_sort($left_array);
$right_array = quick_sort($right_array);
return array_merge($left_array,array($privotkey),$right_array);
}
18:你用的是什么服务器 Apache OR Nginx,说说二者的区别。
答:我用的是 Apache,因为之前做的项目都小中型项目,所以用 Apache 会比较稳点,二者 的区别主要是两者的运行机制不同,对于中小型的项目来说不涉及到高并发量的数据请求 Apache 处理起 来会很轻松并且很稳定。最核心的区别在于 apache 是同步多进程模型,一个连接对应一个 进程;nginx 是异步的,多个连接(万级别)可以对应一个进程 ;Apache 在处理动态有优 势,Nginx 并 发性比较好,CPU 内存占用低,如果 rewrite 频繁,那还是 Apache
19:Apache 解析 PHP 的三种方式?哪种方式最稳定?(把 PHP 配置到Apache 模块中最稳定)
答: CGI、fastCGI 和 Apache 的模块化配置
20:fastCGI 和 CGI 的区别?(最大的区别是 fastCGI 能独立运行,而 CGI只能依托于 Apache 运行)
答:fastCGI 是一种常驻内存的 CGI,只需要加载一次,解决了 CGI 程序每次都要重新进行 fork 一个新的进程。 最大的区别是 fastCGI 能独立运行,而 CGI 只能依托于 Apache 运行。
21:用PHP写出一个安全的用户登录系统需要注意哪些方面。
答:
1、密码要使用MD5(密码+字符串)进行加 密。
2、登录表单的名称不要跟数据库字段一样,以免暴漏表字段。
3、用户表的表名、字段名、密码尽量用不容易被猜到的。
4、要使用验证码验证登陆,以防止 暴力破解。
5、验证提交的数据是不是来自本网站。
6、登录后台处理代码数据库部分使用预处理,做好过滤,防止sql注入。
22:描述一下大流量高并发量网站的解决方案
答:
23:如何设计或配置Mysql,才能达到高效使用的目的。
答:
1、数据库设计方面,设计结构良好的数据库,允许部分数据冗余。 选取最适用的字段属性,尽可能把字段设置为NOTNULL,这样在查询的时候,数据库不用去比较NULL值。
2、系统架构设计方面,表散列,把海量数据散列到几个不同的表里面,集群,数据库查询和写入分开。 写高效sql语句,以提高效率。使用连接(join)来代替子查询使用联合(union)来代替手动创建的临时表所得皆必须,只从数据库取必须的数据。必 要的时候用不同的存储引擎,比如Innodb可以减少死锁,HEAP可以提高一个数量级的查询速度。
24:使用事务使用外键使用索引24.如何进行防SQL注 入?
答
25:ESSION与 COOKIE的区别是什么,请从协议,产生的原因与作用说明?
答:
1、http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的 页面不能看做是同一个用户。
2、SESSION保存在服务器端,COOKIE保存在客户端,SESSION依赖COOKIE进行传输,如果COOKIE被 禁用了,SESSION将不能继续使用。
26:HTTP状态中302、403、 500、200、404、502代码含义?
答:
302:临时重定向
403:服务器拒绝请求
500:服务器内部错误
200:请求成功
404:页面无法找到
502:服务器网关错误
27:下面的代码有什么问题吗?输出会是什么,怎样修复它
$referenceTable = array();
$referenceTable['val1'] = array(1, 2);
$referenceTable['val2'] = 3;
$referenceTable['val3'] = array(4, 5);
$testArray = array();
$testArray = array_merge($testArray, $referenceTable['val1']);
var_dump($testArray);
$testArray = array_merge($testArray, $referenceTable['val2']);
var_dump($testArray);
$testArray = array_merge($testArray, $referenceTable['val3']);
var_dump($testArray);
答:
28:PHP的is_writeable()函数存在Bug,无法准确判断一个目录/文件是否可写,请写一个函数来判断目录/文件是否绝对可写。
答:
29:PHP 中几个输出函数 echo,print(),print_r(),sprintf(),var_dump()的区别
答:
1、echo:是语句不是函数,没有返回值,可输出多个变量值,不需要圆括号。不能输出数组和对象,只能打印简单类型(如 int,string)。
2、:print:是语句不是函数,有返回值 1 ,只能输出一个变量,不需要圆括号。不能输出数组和对象,只能打印简单类型(如 int,string)。
3、print_r:是函数,可以打印复合类型,例如:stirng、int、float、array、object 等,输出 array 时会用结构表示,而且可以通过 print_r($str,true)来使 print_r 不输出而返回print_r 处理后的值
4、printf:是函数,把文字格式化以后输出(参看 C 语言)
5、sprintf:是函数,跟 printf 相似,但不打印,而是返回格式化后的文字(该函数把格式化的字符串写入一个变量中,而不是输出来),其他的与 printf 一样。
例如:
$str = "Hello";
$number = 123;
$txt = sprintf("%s world. Day number %u",$str,$number);
//输出: Hello world. Day number 123
6、var_dump():函数,输出变量的内容、类型或字符串的内容、类型、长度。常用来调试。 可以通过 function_exists(‘函数名称’)进行测试
var_dump(function_exists('print')); //bool(false)
var_dump(function_exists('echo')); //bool(false)
var_dump(function_exists('print_r')); //bool(true)
30:写个函数来解决多线程同时读写一个文件的问题。
答:
<?php
$fp = fopen("/tmp/lock.txt","w+");
if(flock($fp, LOCK_EX)){// 进行排它型锁定
fwrite($fp,"Write something here\n");
flock($fp, LOCK_UN);// 释放锁定
}else{
echo "Couldn't lock the file !";
}
fclose($fp);
?>
31:php 魔术方法与魔术常量
答:
1、__construct();
用法说明:具有构造函数的类会在每次创建新对象时先调用此方法,适合在使用对象之前做一些初始化工作。如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承。
2、__destruct();
用法说明:析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
3、__call();
用法说明:在对象中调用一个不可访问方法时,__call(); 方法会被调用。
4、__callStatic();
用法说明:用静态方式中调用一个不可访问方法时,__callStatic(); 方法会被调用。
5、__get();
用法说明:读取不可访问属性的值时,__get() 会被调用。
6、__set();
用法说明:在给不可访问属性赋值时,__set() 会被调用。
7、__isset();
用法说明:当对不可访问属性调用 isset() 戒 empty() 时,__isset() 会被调用。
8、__unset();
用法说明:当对不可访问属性调用 unset() 时,__unset() 会被调用。
9、__sleep();
用法说明:序列化时调用,serialize() 函数会检查类中是否存在该魔术方法。如果存在,该方法会先被调用,然后才执行序列化操作。
10、__wakeup();
用法说明:unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用该方法,用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作
11、__toString();
用法说明:方法用于一个类被当成字符串时调用,例如把一个类当做字符串进行输出
12、__invoke();
用法说明:当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。
12、__set_state();
用法说明:当调用 var_export() 导出类时,此静态 方法会被调用。 本方法的唯一参数是一个数组
13、__clone();
用法说明:当复制完成时,如果定义了 __clone() 方法,则新创建的对象(复制于生成的对象)中的 __clone() 方法会被调用,可用二修改属性的值。
14、__autoload();
用法说明:该方法可以自动实例化需要的类。当程序要用一个类但没有被实例化时,该方法在指定路径下查找和该类名称相同的文件。否则报错。
说明:PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀。在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。
常量:
LINK //文件中的当前行号。
FILE //文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
DIR //文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录,它等价于二 dirname(FILE)。
FUNCTION //函数名称。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
CLASS //类的名称。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
METHOD //类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
NAMESPACE //当前命名空间的名称(大小写敏感)。这个常量是在编译时定义的(PHP 5.3.0 新增)
32:写一个函数,可以遍历文件夹下的所有文件和文件夹。
答:
function get_dir_info($path){
$handle = opendir($path);//打开目录返回句柄
while(($content = readdir($handle))!== false){
$new_dir = $path . DIRECTORY_SEPARATOR . $content;
if($content == '..' || $content == '.'){
continue;
}
if(is_dir($new_dir)){
echo "<br>目录:".$new_dir . '<br>';10 get_dir_info($new_dir);
}else{
echo "文件:".$path.':'.$content .'<br>';
}
}
}
get_dir_info($dir);
33:Memcache 和 Redis 区别
答:
34:什么是面向对象?主要特征是什么?
答:
1、面向对象是程序的一种设计方式,它利于提高程序的重用性,是程序结构更加清晰。
2、主要特征:封装、继承、多态。
35:说一下赋值和引用的区别
答:
36:TP的特性有哪些?
答:
1.多表查询非常方便,在model中几句代码就可以完成对多表的关联操作
2.融合了smarty模板,使前后台分离
3.支持多种缓存技术,尤其对memcache技术支持非常好
4.命名规范,模型,视图,控制器严格遵循命名规则,通过命名一一对应
5.支持多种url模式
6.内置ajax返回方法,包括xml,json,html等
7.支持应用扩展,类库扩展,驱动扩展等
37:如何解决异常处理?
答:
38:什么是队列?排它锁,Myisam死锁如何解决?
答:在默认情况下MYisam是表级锁,所以同时操作单张表的多个动作只能以队列的方式进行;
排它锁又名写锁,在SQL执行过程中为排除其它请求而写锁,在执行完毕后会自动释放;
死锁解决:先找到死锁的线程号,然后杀掉线程ID
39:bootstrap框架有哪些优点?
答:bootstrap是一款web开发框架,它由CSS,JavaScript,Html,三部分构成,它简洁灵活,使得web开发更加的快捷
优点:
1.节省时间: 使用bootstrap框架,可以大大的节省项目开发时间,它包含了很多现成的代码,如果需要使用,只需要找到合适的代码,插入合适的位置即可,此外,CSS是使用LESS编写,很多样式和设计都已经设计完成
2.定制化: bootstrap可以根据自己的项目,留取框架中自己需要的部分
3.设计合理:
栅格系统: bootstrap定义12格栅系统,在页面已经完成时,你可以根据合适的网格,以自己的需求改变行数和布局大小,样式已经开发完成了,只需要把代码放入合适的HTML代码位置即可
LESS: LESS是基于CSS之上的高级语言,其目的是使得CSS开发更加灵活,更加强大
JavaScript:bootstrap提供JavaScript库,该库超越了基本的架构和样式,开发者可以轻松的操作窗口警告框,工具提示框等,可避免了我们费神费力的写脚本
4.一致性: bootstrap可以保证界面在不同平台的统一性,无论实在IE,Chrome等
5.持续更新: bootstrap在不断的改进,更具规律性和持续性
6.响应式: 无论是在PC端还是移动端,都可以保持界面的一致性
7.文档多: bootstrap的非常多
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 指定的部分。
Mysql 基础
1:基础 sql 语句书写(一般让写关联和子查询语句)2:索引的创建,优缺点,最左原则
3:存储引擎,常用的几个,优缺点,差别,原理(面试必出)
4:sql 注入的处理方法
5:mysql 处理函数(PHP 中封装的)
6:PDO 的使用方法,为什么使用
7:mysql 的优化,表拆分等
8:事务处理,sql 语句的处理效率等
9:数据表字段的类型,同类型间的区别,改如何选取,int(10)与 int(11)的区别等。
10:数据库索引使用的那种数据结构,画出数据结构
最后,祝所有大家在面试中过关斩将,拿到心仪offer。
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家(点击此处加入php高级交流群一起学习交流,11年架构师带你解读年薪50万面试通关秘籍。)
进阶PHP月薪30k>>>架构师成长路线【视频、面试文档免费获取】
如果喜欢我的文章,想与一群资深开发者一起交流学习的话,获取更多相关大厂面试咨询和指导,欢迎加入我的学习交流群953224940
本文地址:https://blog.csdn.net/weixin_49163826/article/details/107347967
上一篇: 找错钱了
下一篇: 数据库:mysql的InnoDB体系架构