高級php面試題及部分答案

轉載鏈接:http://www.2cto.com/kf/201304/201112.html


一. 基本知識點
1.1 HTTP協議中幾個狀態碼的含義:503 500 401 403 404 200 301 302。。。
200 : 請求成功,請求的數據隨之返回。
301 : 永久性重定向。
302 : 暫時行重定向。
401 : 當前請求需要用戶驗證。
403 : 服務器拒絕執行請求,即沒有權限。
404 : 請求失敗,請求的數據在服務器上未發現。
500 : 服務器錯誤。一般服務器端程序執行錯誤。
503 : 服務器臨時維護或過載。這個狀態時臨時性的。

1.2 Include require include_once require_once 的區別.
處理失敗方式不同:
require 失敗時會產生一個致命級別錯誤,并停止程序運行。
include 失敗時只產生一個警告級別錯誤,程序繼續運行。

include_once/require_once和include/require 處理錯誤方式一樣,
唯一區別在于當所包含的文件代碼已經存在時候,不在包含。

1.3 PHP/Mysql中幾個版本的進化史,比如mysql4.0到4.1,PHP 4.x到5.1的重大改進等等。


1.4 HEREDOC介紹
一種定義字符串的方法。
結構:
<<<。在該提示符后面,要定義個標識符(單獨一行),
然后是一個新行。接下來是字符串 本身,
最后要用前面定義的標識符作為結束標志(單獨一行)
注意:
標識符的命名也要像其它標簽一樣遵守PHP的規則:
只能包含字母、數字和下劃線,并且必須以字母和下劃線作為開頭


1.5 寫出一些php魔幻(術)方法;
__construct() 實例化類時自動調用。
__destruct() 類對象使用結束時自動調用。
__set() 在給未定義的屬性賦值的時候調用。
__get() 調用未定義的屬性時候調用。
__isset() 使用isset()或empty()函數時候會調用。
__unset() 使用unset()時候會調用。
__sleep() 使用serialize序列化時候調用。
__wakeup() 使用unserialize反序列化的時候調用。
__call() 調用一個不存在的方法的時候調用。
__callStatic()調用一個不存在的靜態方法是調用。
__toString() 把對象轉換成字符串的時候會調用。比如 echo。
__invoke() 當嘗試把對象當方法調用時調用。
__set_state() 當使用var_export()函數時候調用。接受一個數組參數。
__clone() 當使用clone復制一個對象時候調用。

1.6 一些編譯php時的configure 參數
–prefix=/usr/local/php??? php安裝目錄
–with-config-file-path=/usr/local/php/etc 指定php.ini位置
–with-mysql=/usr/local/mysql mysql安裝目錄,對mysql的支持
–with-mysqli=/usr/local/mysql/bin/mysql_config mysqli文件目錄,優化支持
–enable-safe-mode 打開安全模式
–enable-ftp 打開ftp的支持
–enable-zip 打開對zip的支持
–with-bz2 打開對bz2文件的支持
–with-jpeg-dir 打開對jpeg圖片的支持
–with-png-dir 打開對png圖片的支持
–with-freetype-dir 打開對freetype字體庫的支持
–without-iconv關閉iconv函數,種字符集間的轉換
–with-libxml-dir 打開libxml2庫的支持
–with-xmlrpc 打開xml-rpc的c語言
–with-zlib-dir 打開zlib庫的支持
–with-gd 打開gd庫的支持

更多可以使用 ./configure help 查看

?

1.7 向php傳入參數的三種方法。

/*
???? * 方法一 使用$argc $argv
???? *? 在命令行下運行 /usr/local/php/bin/php ./getopt.php -f 123 -g 456
???? */
//??? if ($argc > 1){
//??????? print_r($argv);
//??? }


??? /**
???? * 運行結果
???? *
???? sync@MySUSE11:~/web_app/channel3/interface> /usr/local/php/bin/php ./getopt.php -f 123 -g 456
??????? Array
??????? (
??????????? [0] => ./getopt.php
??????????? [1] => -f
??????????? [2] => 123
??????????? [3] => -g
??????????? [4] => 456
??????? )
???? */

?

?

?

?


???? /*
???? * 方法二 使用getopt函數()
???? *? 在命令行下運行 /usr/local/php/bin/php ./getopt.php -f 123 -g 456
???? */


//??? $options = "f:g:";
//??? $opts = getopt( $options );
//??? print_r($opts);


??? /**
???? * 運行結果
???? *
???? sync@MySUSE11:~/web_app/channel3/interface> /usr/local/php/bin/php ./getopt.php -f 123 -g 456
??????? Array
??????? (
??????????? [f] => 123
??????????? [g] => 456
??????? )
???? */

?

?


??? /*
???? * 方法三 提示用戶輸入,然后獲取輸入的參數。有點像C語言
???? *? 在命令行下運行 /usr/local/php/bin/php ./getopt.php
???? */
??? fwrite(STDOUT, "Enter your name: ");
??? $name = trim(fgets(STDIN));
??? fwrite(STDOUT, "Hello, $name!");
??? /**
???? * 運行結果
???? *
???? sync@MySUSE11:~/web_app/channel3/interface> /usr/local/php/bin/php ./getopt.php
???? Enter your name: francis
???? Hello, francis!
???? */
?
?


1.8 (mysql)請寫出數據類型(int char varchar datetime text)的意思; 請問varchar和char有什么區別;
int : 數值類型
char : 固定長度字符串類型
varchar : 可變長度字符串類型
datetime : 時期時間類型
text : 文本類型

varchar和char有什么區別:
a. char 長度是固定的,不管你存儲的數據是多少他都會都固定的長度。
而varchar則處可變長度但他要在總長度上加1字符,這個用來存儲位置。

b. char 固定長度,所以在處理速度上要比varchar快速很多,但是浪費存儲空間,
所以對存儲不大,但在速度上有要求的可以使用char類型,反之可以用varchar類型來實例。


1.9 error_reporting 等調試函數使用
error_reporting() 函數能夠在運行時設置php.ini中 error_reporting 指令。
所以可以再程序中隨時調節顯示的錯誤級別。
使用此函數時 display_errors必須是打開狀態。

1.10 您是否用過版本控制軟件? 如果有您用的版本控制軟件的名字是?
?

?

1.11 posix和perl標準的正則表達式區別;

?

1.12 Safe_mode 打開后哪些地方受限.
啟動safe_mode,會對許多PHP函數進行限制,特別是和系統相關的文件打開、命令執行等函數.
所有操作文件的函數將只能操作與腳本UID相同的文件.


1.13 寫代碼來解決多進程/線程同時讀寫一個文件的問題。
PHP是不支持多線程的,可以使用php的flock加鎖函數實現。
$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);


1.14 寫一段上傳文件的代碼。
upload.html
<form enctype="multipart/form-data" method="POST" action="upload.php">
Send this file: <input name="name" type="file" />
<input type="submit" value="Send File" />
</form>

upload.php
$uploads_dir = '/uploads';
foreach ($_FILES["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["tmp_name"][$key];
$name = $_FILES["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
}
}

?


1.15 Mysql 的存儲引擎,myisam和innodb的區別。
a. MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持.
b. MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快.
c. InnoDB不支持FULLTEXT類型的索引.
d. InnoDB 中不保存表的具體行數,也就是說,
執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,
但是MyISAM只要簡單的讀出保存好的行數即可.
e. 對于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯合索引。
f. DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。
g. LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導入數據后再改成InnoDB表,
但是對于使用的額外的InnoDB特性(例如外鍵)的表不適用.
h. MyISAM支持表鎖,InnoDB支持行鎖。
?


二. web 架構,安全,項目經驗
2.1 介紹xdebug,apc,eAccelerator,Xcache,Zend opt的使用經驗。


2.2 使用mod_rewrite,在服務器上沒有/archivers/567.html這個物理文件時,重定向到index.php?id=567 ,請先打開mod_rewrite.
首先,打開mod_rewrite模塊。

其次,http.conf找到以下代碼段:
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
將其中的:AllowOverride None 改為 AllowOverride All ,重啟httpd服務即可。

然后,在項目根目錄下簡歷 .htaccess 文件,填寫規則。
??

2.3 MySQL數據庫作發布系統的存儲,一天五萬條以上的增量,預計運維三年,怎么優化?
a. 設計良好的數據庫結構,允許部分數據冗余,盡量避免join查詢,提高效率。
b. 選擇合適的表字段數據類型和存儲引擎,適當的添加索引。
c. mysql庫主從讀寫分離。
d. 找規律分表,減少單表中的數據量提高查詢速度。
e。添加緩存機制,比如memcached,apc等。
f. 不經常改動的頁面,生成靜態頁面。
g. 書寫高效率的SQL。比如 SELECT * FROM TABEL 改為 SELECT field_1, field_2, field_3 FROM TABLE.


2.4 寫出一種排序算法(原理),并說出優化它的方法。


2.5 請簡單闡述您最得意的開發之作


2.6 對于大流量的網站,您采用什么樣的方法來解決各頁面訪問量統計問題
a. 確認服務器是否能支撐當前訪問量。
b. 優化數據庫訪問。參考2.3
c. 禁止外部訪問鏈接(盜鏈), 比如圖片盜鏈。
d. 控制文件下載。
e. 使用不同主機分流。
f. 使用瀏覽統計軟件,了解訪問量,有針對性的進行優化。


2.7 您是否用過模板引擎? 如果有您用的模板引擎的名字是?
Smarty

2.8 請介紹Session的原理,大型網站中Session方面應注意什么?

?


2.9 測試php性能和mysql數據庫性能的工具,和找出瓶頸的方法。


2.10 正則提出一個網頁中的所有鏈接.


2.11 介紹一下常見的SSO(單點登陸)方案(比如dedecms整合discuz的passport)的原理。


2.12 您寫過的PHP框架的特點,主要解決什么問題,與其他框架的不同點。


2.13 大型的論壇/新聞文章系統/SNS網站在性能優化上有什么區別?


2.14 相冊類應用:要求在瀏覽器中能同時選中并上傳多個文件,圖片要求能剪裁,壓縮包在服務器端解壓。能上傳單個達50M的文件。上傳過程中有進度條顯示。每個圖片能生成四種大小縮略圖,視頻文件要轉成flv供flash播放。敘述要涉及的各類開源軟件和簡單用途。
一群猴子排成一圈,按1,2,…,n依次編號。然后從第1只開始數,數到第m只,把它踢出圈,從它后面再開始數,再數到第m只,在把它踢出去…,如此不停的進行下去,直到最后只剩下一只猴子為止,那只猴子就叫做大王。要求編程模擬此過程,輸入m、n, 輸出最后那個大王的編號。用程序模擬該過程。


三. unix/linux 基本使用
3.1 linux下查看當前系統負載信息的一些方法。


3.2 vim的基本快捷鍵。


3.3 ssh 安全增強方法;密碼方式和rsa key 方式的配置。


3.4 rpm/apt/yum/ports 裝包,查詢,刪除的基本命令。


3.5 Makefile的基本格式,gcc 編譯,連接的命令,-O0 和-O3區別。


3.6 gdb,strace,valgrind的基本使用.


四. 前端,HTML,JS
css盒模型。
javascript中的prototype。
javascript中this對象的作用域。
IE和firefox事件冒泡的不同。
什么是怪異模式,標準模式,近標準模式。
DTD的定義
IE/firefox常用hack.
firefox,IE下的前端js/css調試工具。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276223.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276223.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276223.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iec104點號_IEC104報文流程(有常用類型標識解釋)

參數地址圍類別97版基地址2002版基地址遙信1H------400H1H------4000H遙測701H------900H4001H------5000H遙控B01------B806001H------6100H設點B81H------C00H6201H------6400H電度C01H------C80H6401H------6600H遙測和遙信個數不設置上限&#xff0c;可以沒有上限限制&…

本周ASP.NET英文技術文章推薦[04/08 - 04/14](附贈自彈超級瑪麗主題曲)

摘要 本期共有6篇文章&#xff1a; ASP.NET編譯問題的公開Hotfix補丁 期待下個版本AjaxPro 的發布 在ASP.NET 2.0中使用MultiView控件實現多頁面表單 數據綁定的技巧&#xff1a;嵌套Eval語句 在ASP.NET 2.0中訪問并更新數據&#xff1a;使用數據源控件以編程方式訪問數據 AD…

一個離開某門戶網站人員自爆黑幕

去年&#xff0c;我已在星星發表了一個關于免費發短信的各類軟件的黑幕所在。而事實上的SMS&#xff08;即短信&#xff09;的黑幕遠不止于此&#xff0c;今天&#xff0c;我終于有空坐下來&#xff0c;把其中的一些讓你感覺平常卻實際觸目驚心的事情告訴你們&#xff0c;讓你們…

28歲自學3年前端成功轉行的勵志故事

為什么轉行因為混得不好。在成為程序員之前&#xff0c;我干過很多工作。由于學歷的問題&#xff08;高中&#xff09;&#xff0c;我的工作基本上都是體力活。包括但不限于&#xff1a;工廠普工、銷售&#xff08;沒有干銷售的才能&#xff09;、搬運工、擺地攤等&#xff0c;…

css中!important的作用

轉載鏈接&#xff1a;http://www.cnblogs.com/guoguo-15/archive/2011/08/24/2151859.html css中!important的作用 {*rule !important}這個css規則當今在網頁制作的時候的普及已經非常流行了&#xff0c;以前我對它的理解就停留在‘瀏覽器是否識別階段’ 而沒有真正去研究過&am…

word2vec應用場景_word2vec的使用參數解釋和應用場景

" > corpus.txt因為這些數據雖然去除了其他標簽的數據&#xff0c;但是卻把保留下來了&#xff0c;所以后來作者在分詞程序中去除了這個標簽我在這個[網頁](http://www.jb51.net/article/65497.htm)上找到了一個python去標簽的簡單代碼。但是沒有實驗過&#xff0c;不知…

usb 驅動

usb 驅動學習總結&#xff1a; usb 采用分層的拓撲結構&#xff0c;金字塔型&#xff0c;最多是7層。usb 是主從結構&#xff0c;主和主或者從和從之間不能交換數據。理論上一個usb主控制器最多可接127個設備&#xff0c;協議規定每個usb設備具有一個7bit的地址&#xff0c;范圍…

讓Spring架構減化事務配置(轉)

讓Spring架構減化事務配置(轉) 注&#xff1a;原文章曾發表在it168Spring顛覆了以前的編程模式&#xff0c;引入了IOC等全新的概念&#xff0c;廣受大家的喜愛。目前大多數j2ee項目都已經采用Spring框架。Spring最大的問題是太多的配置文件&#xff0c;使得你不僅需要維護程序代…

面試字節跳動后的2點總結,建議收藏!

首先我來辟個謠&#xff1a;隨便打開一個招聘網站&#xff0c;你會發現前端工程師的崗位需求依舊龐大&#xff0c;大廠人才奇缺&#xff0c;就業薪資起點高&#xff0c;無行業限制。&#xff08;數據來源&#xff1a;職友集&#xff09;前端開發的行業大環境行業升級&#xff0…

phpexcel中文教程-設置表格字體顏色背景樣式、數據格式、對齊方式、添加圖片、批注、文字塊、合并拆分單元格、單元格密碼保護

轉載連接&#xff1a;http://www.cnblogs.com/huangcong/p/3687665.html phpexcel中文教程-設置表格字體顏色背景樣式、數據格式、對齊方式、添加圖片、批注、文字塊、合并拆分單元格、單元格密碼保護 首先到phpexcel官網上下載最新的phpexcel類&#xff0c;下周解壓縮一個cla…

對比倆個字符串的相似度

package com.opslab.util.algorithmImpl; import com.opslab.util.CharsetUtil;import com.opslab.util.SysUtil; import java.io.ByteArrayInputStream;import java.io.InputStream;import java.io.UnsupportedEncodingException; /** * 對比倆個字符串的相似度 */public clas…

如何下載python2.7.16_CENTOS6.5 安裝PYTHON2.7.16

前言Centos6.5默認自帶python2.6.6&#xff0c;很多模塊無法使用&#xff0c;建議安裝2.7以后版本較為穩定&#xff0c;需要升級到2.7。一、安裝過程1. 先安裝相應的依賴yum -y install gcc openssl-devel bzip2-devel2. 下載軟件包cd /optwget https://www.python.org/ftp/pyt…

2021年的今天,如何成為一名專業的前端工程師?

大家好&#xff0c;我是若川。今天給分享一篇來自阿里克軍大佬的好文。以下是正文~如果你想成為一名專業的前端工程師&#xff0c;那么你需要了解要學什么&#xff0c;學到什么程度&#xff0c;以及如何有效地學習。大學里沒有正規的前端技術課程&#xff0c;普遍缺少比較權威的…

“劣質”的PHP代碼簡化

下面這一小段“劣質”的PHP代碼是一道簡化了的測試題。這種問題就像在問&#xff1a;你該怎樣優化這段代碼&#xff1f;<?echo("<p>search results for query:").$_GET[query].".</p>";?>這段代碼的主要問題在于它把用戶提交的數據直接…

nc65右鍵生成菜單_DbSchema生成表單和報表,原來如此簡單

DbSchema 8 for Mac是mac上一款非常實用的商業數據庫ER圖繪制軟件&#xff0c;可以輕松的對文檔進行注釋或標注&#xff0c;而且Dbschema集成了SQL和數據工具&#xff0c;能生成直觀的圖表、PDF文件或HTML 5文檔等&#xff0c;非常的實用。現在就來給大家分享DbSchema如何生成表…

Java行為參數化(一)

一.什么是行為參數化呢 說白了就是將一段行為當作參數傳入一個方法中唄&#xff0c;那么這段行為是什么呢&#xff1f; 答&#xff1a;那也是一個方法咯。 Java在1.8版本引入了行為參數化的概念&#xff0c;首先&#xff0c;我們先看一小段代碼 public class test { public sta…

猴子排圈求最后編號問題

轉載鏈接&#xff1a;http://www.cnblogs.com/mztest/archive/2013/01/30/2882829.html 一群猴子排成一圈&#xff0c;按1&#xff0c;2&#xff0c;...&#xff0c;n依次編號。然后從第1只開始數&#xff0c;數到第m只,把它踢出圈&#xff0c;從它后面再開始數&#xff0c;再…

若川的2020年度總結,水波不興

前言從2014年開始&#xff0c;每一年都會寫年度總結&#xff0c;堅持了6個年頭。回顧2014&#xff0c;約定2015&#xff08;QQ空間日志&#xff09;2015年總結&#xff0c;淡化舊標簽&#xff0c;無懼未來&#xff08;QQ空間日志&#xff09;2016年度總結&#xff0c;畢業工作2…

sql修改表字段數據類型

--加 ALTER TABLE table2 ADD row_id bigint --刪 ALTER TABLE table2 DROP COLUMN row_id --改 ALTER TABLE 你的表 ALTER COLUMN 列名 你的類型 null declare a varchar(200) select ac.name fr…

關于敏捷開發方法(Agile Software Development)的閱讀筆記

對“敏捷開發”&#xff08;Agile Software Development&#xff09;這個詞&#xff0c;我是在這學期鄒欣老師《現代程序設計》課上第一次聽到的&#xff0c;剛聽到時并不知道其具體指什么&#xff0c;只是從字面上直覺其意思應該是快速開發之類的。這次從 Agile Guide 、 The …