首頁  >  文章  >  後端開發  >  PHP面試總結分享

PHP面試總結分享

小云云
小云云原創
2018-05-15 14:08:082608瀏覽

本文主要和大家分享PHP面試總結,希望能幫助大家。

相關推薦:《2019年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:数据库索引使用的那种数据结构,画出数据结构

Linux

1:常用命令的使用,vim编辑器的使用。
2:进程,cpu等信息的查看命令。
3:文件内查看命令(主要涉及统计信息)。
4:Shell的使用,命令操作。
5:awk的用法
6:shell杀掉所有的php-fpm进程

NoSql

1:Redis的应用场景,结合微博业务说出他的具体应用。
2:Redis与MC支持数据的不同点,两者都支持哪些数据结构的存储,写越多越好。
3:Redis持久化存储的原理,与Mysql的应用区别。怎样保持持久化数据与内存数据同步的关系(Redis同步机制)
4:Redis与MC在并发状态下的性能比较。
5:MC的内存管理机制,当一个数据需要存储的时候怎样分配内存空间
6:Redis的内存管理机制,与MC有哪些不同点。

開發環境

1:PHP7中的新特性与废弃的特性
2:为什么要使用PHP7,PHP7快在哪里
3:PHP7中对异常和错误的理解

版本控制

1:git的使用命令,例如:写出版本回退命令。
2:git与svn的区别。
3:如何进行多分支开发,包括多人开发协同,分段测试,上线。

 下面給大家附上一張知識點導圖,幫助大家記憶:

PHP面試總結分享

#PHP部分

1、HTTP Keep-Alive的作用

2、php陣列函數常見的那些? (array_merge、in_array的作用)

3、PHP中幾個輸出函數echo,print(),print_r(),sprintf(),var_dump()的區別

4、不用新變數直接交換現有兩個變數的值

5、heredoc

6、寫個函數來解決多執行緒同時讀寫一個檔案的問題。

7、禁掉cookie的session使用方案,設定session過期的方法,對應函數

8、json格式資料有哪些特點

9、php取得檔案內容的方法,對應的函數

10、php魔術方法與魔術常數

11、PHP 如何取得客戶端的IP位址

12、寫一個函數,可以遍歷文件夾下的所有文件和資料夾。

13、有mail.log的一個文檔,內容為若干郵件地址,用’\n’分隔換行。挑選sina.com的地址。

14、PHP快取技術有哪些?tp是局部還是完全快取?

15、strlen()與mb_strlen的作用與差異

##16、寫一個函數,盡可能高效的從一個標準url中取出擴展名

17、php.ini 中safe mod關閉會影響哪些函數和參數,至少寫6個?

18、  約瑟夫環問題

19、Isset() 、empty()與is_null的區別

20、求兩個檔案的相對路徑

21、MVC的優缺點

22、Session與cookie的聯繫與區別(運行機制),session共享問題解決方案

23、正規表示式

#24 、寫一個函數得到header頭資訊

MySQL部分

 1、select * from table where (ID = 10)  or (ID = 32) or (ID = 22)  讓結果按10 , 32, 22的順序檢索出來?

Linux部分


1、Core檔案是什麼,有什麼用?

2、共享記憶體除了檔案映射還有什麼方式?

3、請解釋下列10個shell指令的用途

4、Linux檔案屬性有哪些? (共十位)

5、Linux查詢指令

伺服器部分

1、Apache與Nginx的優缺點比較 

2、Cgi 與fastcgi的區別

3、Select, poll和epoll的區別

4、Memcache和Redis區別

 --------------- ---------------------PHP部分------------------------------------------ ----------

php部分我是按照面試常問的問題總結的,下面的問題在面試中出場率很高。問題比較基礎

1、HTTP Keep-Alive的作用


作用:Keep-Alive:使客戶端到伺服器端的連線持續有效,當出現對伺服器的後繼請求時,Keep-Alive功能避免了建立或重新建立連線。 Web伺服器,基本上都支援HTTP Keep-Alive。

缺點:對於提供靜態內容的網站來說,這個功能通常很有用。但是,對於負擔較重的網站來說,雖然為客戶保留打開的連 接有一定的好處,但它同樣影響了性能,因為在處理暫停期間,本來可以釋放的資源仍舊被佔用。當Web伺服器和應用程式伺服器在同一台機器上運作時,Keep- Alive功能對資源利用的影響尤其突出。

解決:Keep-Alive: timeout=5, max=100

timeout:過期時間5秒(對應httpd.conf裡的參數是:KeepAliveTimeout),max是最多一百次請求,強制斷掉連接。就是在timeout時間內又有新的連接過來,同時max會自動減1,直到為0,強制斷掉。

2、php陣列函數常見的那些? (array_merge、in_array的作用)

     PHP中以array_開頭的陣列函數有哪些,並說出使用方法(至少6個)

一、陣列遍歷函數


1 list();  //不是真正的函数,而是PHP的语言结构,用于给一组变量赋值,仅能用于索引数组2 each();  //返回数组当前元素的键值对,并将指针移动到下一个元素位置3 while(); //可配合list或each使用:while(list($key, $value) = each($arr)){each $key, $value; }
二、陣列內部指標控制


1 current();  //读取指针位置的内容2 key();      //读取当前指针指向内容的索引值3 next();     //将数组中的内部指针指向下一单元4 prev();     //将数组内部指针倒回一位5 end();      //将数组内部指针指向最后一个元素6 reset();    //将目前指针指向第一个索引位置
三、陣列鍵值運算子


PHP面試總結分享

PHP面試總結分享

PHP面試總結分享

PHP面試總結分享

############################################# #########
1 array_values($arr);       //获得数组的值2 array_keys($arr);         //获得数组的键名3 array_flip($arr);         //数组中的值与键名互换(如果有重复前面的会被后面的覆盖)4 array_search('PHP',$arr); //检索给定的值,加true则是严格类型检查5 array_reverse($arr);      //将数组中的元素翻转(前后顺序)6 in_array("apple", $arr);  //在数组中检索apple7 array_key_exists("apple", $arr); // 检索给定的键名是否存在数组中8 array_count_values($arr);        // 统计数组中所有值出现的次数
9 array_unique($arr);              // 删除数组中重复的值
############四、陣列回呼函數###
1 array_filter(); //使用回调函数过滤数组中的元素,如果回调返回true则当前的元素被包含到返回数组中2 array_walk();   //回调函数处理数组,自定义函数要有两个参数,本函数第三个参数可以作为回调第三个参数返回3 array_map();    //可以处理多个数组,每个数组的长度应该相同,传入数组的个数和回调函数参数个数应该一致
###二、陣列的分段與填滿###
1 array_slice($arr, 0, 3);    //将数组中的一段取出,此函数忽略键名(数组的分段)2 array_splice($arr, 0, 3,array("black","maroon"));    //将数组中的一段取出,返回的序列从原数组中删除3 array_chunk($arr, 3, TRUE);   //将一个数组分割成多个,TRUE为保留原数组的键名(分割多个数组)
###四、數組與棧,列隊###
1 array_push($arr, "apple", "pear");    //将一个或多个元素压入数组栈的末尾(入栈),返回入栈元素的个数2 array_pop($arr);    // 将数组栈的最后一个元素弹出(出栈)3 array_shift($arr);   //数组中第一个元素移出并返回(长度减1,其他元素向前移动一位,数字键名改为从零计数,文字键名不变)4 array_unshift($arr,"a",array(1,2));  //在数组的开头插入一个或多个元素
###六、數組的排序#############
1 sort($arr);      //由小到大,忽略键名2 rsort($arr);     //由大到小,忽略键名
3 asort($arr);     //由小到大,保留键名4 arsort($arr);    //由大到小,保留键名
5 ksort($arr);     //按照键名正序排序6 krsort($arr);    //按照键名逆序排序
###########七、數組的計算## #

PHP面試總結分享

1 array_sum($arr);   //对数组内部的所有元素做求和运算(数组元素的求和)2 array_merge($arr1, $arr2); //合并两个或多个(相同字符串键名,后面覆盖前面,相同的数字键名,后面的附加到后面)3  4 array_diff($arr1, $arr2);       //返回差集结果数组   array_diff_assoc($arr1, $arr2, $arr3);  //返回差集结果数组,键名也做比较5 array_intersect($arr1, $arr2);  //返回交集结果数组    array_intersect_assoc($arr1, $arr2);   //返回交集结果数组,键名也做比较

PHP面試總結分享

八、其他的数组函数

1 array_unique($arr);   //移除数组中重复的值,新的数组中会保留原始的键名2 shuffle($arr);        // 将数组的顺序打乱

 3、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一样。 

例如:  

1 $str = "Hello";    
2 $number = 123; 
3 $txt = sprintf("%s world. Day number %u",$str,$number);4 //输出: Hello world. Day number 123

6:var_dump():函数,输出变量的内容、类型或字符串的内容、类型、长度。常用来调试。

可以通过function_exists('函数名称')进行测试

1 var_dump(function_exists('print'));  //bool(false)2 3 var_dump(function_exists('echo'));  //bool(false)4 5 var_dump(function_exists('print_r')); //bool(true)

4、不用新变量直接交换现有两个变量的值

PHP面試總結分享

 1 1:  3     list($a, $b) = array($b, $a); 4 2: 
 5     $a = $a . $b; 5     $b = strlen( $b ); 6     $b = substr( $a, 0, (strlen($a) – $b ) ); 7     $a = substr( $a, strlen($b) ); 8  9 3:(必须用一个两个字符串都都不能出现的字符做为分隔符)10     $a = $b.','.$a ;11     $a = explode(',', $a);12     $b = $a[1];13     $a = $a[0];14 15 4:这个是当两个数都是数字的时候:16     $a = $a + $b;17     $b = $a – $b;18     $a = $a – $b;19 20 5:借助数组21     $a = array($a,$b);22     $b = $a[0];23     $a = $a[1];

PHP面試總結分享

5、heredoc

Heredoc在正规的PHP文档中和技术书籍中一般没有详细讲述。他是一种Perl风格的字符串输出技术。使用heredoc技术可以实现界面与代码的准分离,比如phpwind模板。

heredoc的语法是用”

规则如下:

1、以

2、位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在heredoc中,变量不需要用连接符 . 或 , 来拼接,比如:

1 $a=2;2 $b= <p>3、heredoc常用在输出包含大量HTML语法文档的时候。他要比传统的echo输出精炼很多,如下所示:</p><p><img src="https://img.php.cn/upload/article/000/054/025/277f1538a44b804d1a78c0539aac6687-0.gif" alt="PHP面試總結分享"></p><pre class="brush:php;toolbar:false"> 1 function getHtml() 2 { 3     echo ""; 4     echo "<title>Title</title>"; 5     echo "Content"; 6     echo "; 7 } 8  9 function getHtml()10 {11 echo 13       <title>Title</title>14       Content15       

以上是PHP面試總結分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn