1.如何取得來訪者的IP地址? $_SERVER[‘RRMOTE_ADDR’]; $_SERVER[‘CLIENT_IP’]; $_SERVER[‘HTTP_X_FORWARED_FOR’]; 2.$_FILES的結構 Array ( [pic] => Array ( [name] => 菜單2.jpg [type] => image/jpeg [tmp_name] => E:\sssssss\tmp\php1923.tmp [error] => 0 [size] => 288583 ) ) 3.session,cookie的區別 存儲位置: cookie存儲在瀏覽器,session存於服務器. 存儲類型: cookie 能存儲字符串,數字,不能存儲數組,對象 session能夠存儲全部類型(除了資源) 存儲大小不一樣:受瀏覽器的限制,不一樣瀏覽器對於cookie的個數和大小,有限制. session存儲在文件上,所以能夠存儲較大內容. 安全性: 不可以直接信任cookie數據,由於能夠僞造,要加鹽驗證, session須要利用cookie來傳遞session_id. 禁用cookie後的方法:一、<input type="text" name="PHPSESSID" value="g6fgb641che30nre1bccvgeu23"> cookie和session的設置和過時時間問題 setcookie('test','hello',3600,'/');cookie,只要是根目錄下的均可以訪問 session_start(); $_SESSION["username"]="lhp"; 4.函數: pathinfo(); $url = "http://www.lagou.com/jobs/2499163.html?source=delivered&i=delivered-5"; $res = pathinfo($url); Array ( [dirname] => http://www.lagou.com/jobs [basename] => 2499163.html?source=delivered&i=delivered-5 [extension] => html?source=delivered&i=delivered-5 [filename] => 2499163 ) 字符串函數: 截取查找等 addslashes那幾個函數 數組函數: 排序等 php獲取mysql查詢結果集總數的函數是? mysql_num_rows(資源) // 獲取select語句的返回行數 mysql_affected_rows(); // 獲取insert/update/delete 語句的影響行數 5.請簡述你對MVC設計模式的理解和常見開發設計模式 mvc模式: m model v view c controller 請求訪問controller,通過controller進行邏輯處理,若須要進行數據增刪改查,則經過controller處理好數據而後調用model,再根據model返回的數據進行處理,顯示在view上 開發設計模式 單例模式:讓某個類的實例只有一個,不重複,能夠節約資源,防止new的濫用,經常使用在mysql,購物車 工廠模式:將類的功能實現具體細節封裝起來,開放某些接口,供外部調用,不讓外部瞭解裏面具體細節 觀察者模式:須要觀察者和被觀察者,經過被觀察者的一些狀態的變化,讓觀察者去進行相關業務處理 6.遞歸打印某個磁盤目錄,結構和文件 使用到opendir(),readdir(),closedir(); 判斷是否爲.和.. 是的話要過濾掉 判斷是不是目錄 是的話則遞歸調用本函數 7.PHP魔術方法(或函數)和魔術變量 __construct(),__destruct(),__get(),__set(),__isset(),__unset(),__unset(),__clone()等 __FILE__ 表明當前文件路徑 __LINE__ 當前行數 __DIR__ 當前目錄 __FUNCTION__ 當前函數名 __CLASS__ 當前類名 7.1 請簡述php異常處理機制 語法 try{ throw new Exception("Error Exception", 1); }catch(Exception $e){ echo $e -> getMessage (); } 8.你的代碼在本地正常,上傳到購買的虛擬主機後,顯示空白. 該如何調試? 查看日誌. 若是程序沒有日誌, 只能看PHP的原始報錯,想一想,爲何空白? php.ini有2個設置: display_errors,修改成on, error_reporting(E_ALL); 同時,因爲虛擬主機,你無權修改php.ini, 在php腳本中,動態修改ini,用ini_set(); 綜上: ini_set(‘display_errors’ , 1); error_reporting(E_ALL); 9.如下HTTP狀態碼的含義 404,403,200,302,304,500 404 Not Found 403 forbidden 200 OK 302 臨時重定向 304 not modified 500 服務器內部錯誤 10.各類服務的默認端口號: http:80 https:443 tomcat:8080 mysql:3306 ftp:21 ssh:22 telnet:23 smtp:25 php-fpm:9000 memcached:11211 redis:6379 mongodb:27017 sphinx:9312 11.寫一個最簡單的單例類 final class single{ protected static $ins=null; protected function __construct(){} public static function getIns(){ if(self::$ins==null){ self::$ins = new self(); } return self::$ins; } protected function __clone(){} } 12.說出你用的框架,並比較他們之間的差別 TP, laravel 1. laravel的路由更簡單靈活,直接指向控制器的方法,而tp是經過m/c/a的方式獲取對應參數,來訪問對應模塊下控制器的方法 2. laravel接管了網站的全過程,數據庫(遷移文件,migration)+mvc(路由)+錯誤處理 3. laravel的傳參和獲取參數方式不同,它有一個強大的request對象 4. laravel模板blade語法更接近php語法,相對tp裏面的改過的smarty模板更簡單 5. laravel引入第三方類庫方式比較好,大大提升開發人員使用第三方類庫的效率 數據庫 13.簡述char與varchar的區別 分別是定長與變長. 以char(M)爲例, 能夠存儲0-M個字符,存儲不夠M個字符, 仍然佔據M個字符的寬度.(不夠M個,右側用空格補齊). varchar(M),能夠存儲0-M個字符,但須要1-2個額外的字節,來標註此字段具體的大小. 14.ddl語句,數據表創建等語句 1.複習祕籍.html 練習一遍 2.show TABLE status [where name='art'] //查看錶的詳細信息 //裏面有comment標註是 表 仍是 視圖 show VARIABLES like '%character%':查看當前字符集設置 1五、如何查看SQL語句的執行效率? 1六、關係數據庫中,索引的做用主要有哪些,通常什麼狀況下須要建索引? 並簡述索引都有哪幾種類型,有何區別? 提升查詢速度,有利於排序和分組. (排序和分組如用不上索引,則會產生臨時表和filesort的過程) 根據業務邏輯,分析列查詢的頻度和順序, 創建索引和複合索引. 主鍵索引(primary key), ---->不須要有索引名,由於只有一個主鍵索引 惟一索引(unique key) ---->unique key email(email(10)) 括號裏面是表字段,外面是索引名字,其餘索引同樣 裏面的10是指索引的長度,如1234567899@qq.com,只取出了前面10個字符作索引 普通索引(key), 全文索引(fulltext key)--->中文環境下基本無效,通常用第三方方案如sphinx(中文分詞) 多列索引:key xm(xing,ming)用xing和ming兩個字段作索引 冗餘索引:在某個字段上有多個索引,如 key xm(xing,ming) ,key m(ming),有兩個 就是冗餘索引 16.一、索引:提升了查詢速度,下降了增刪改的速度 索引操做: 查看索引:show index from table tbname,show create table tbname 刪除索引:alter table tbname drop index key1,drop index key1 from tbname 添加索引:alter table tbname add index key1(字段) 添加主鍵索引:alter table tbname add primary key(id) 刪除主鍵索引:alter table tbname drop primary key 1七、在使用多列索引或創建多列索引時,咱們通常要遵循「最左前綴原則」。請簡單說明「最左前綴原則」。 針對單列索引, 左邊準確而右邊模糊,能夠用到索引,反之則不能夠. 如 where name like ‘poly%’,能夠用到, 而」%poly」則不用到. 針對多列索引, 左邊的列用到索引後,右側的列纔有可能用到索引. 例 index(a,b,c), where a=? and b=? ,b列索引會用到. 若是直接 where b=?, 由於a列沒用索引,因此b索引,用不到. 17.1事務 四大特性:隔離性,原子性,一致性,持久性 17.2 mysql引擎 常見三種: innodb:全部數據在一個文件中 myisam:數據分類存儲 memory:內存 innodb和myisam區別: innodb(李當心):支持事務,不支持全文索引,行鎖(更細),支持多種索引 myisam(張馬虎):不支持事務,支持全文索引,表鎖,只支持B樹索引 linux 18.查找當前目錄下,全部的.php文件 答: find . -name 「*.php」 19. 查找當前目錄下,全部的.php文件並匹配含有」dog」的行 答: find . -name 「*.php」 | xargs grep dog 20.有一個備份程序 mybackup.sh,須要天天凌晨3點執行一次,crontab命令格式怎麼寫? 答: crontab -e 進入編輯狀態. 0 3 * * * /bin/bash mybackup.sh 21.請簡述php會話(session)實現原理,並考慮以下問題: 禁用了cookie,session可否使用? 如何把session存儲數據庫/memcached/redis 如何實現一個嚴格的30分鐘過時的會話?、 如何實踐web服務器集羣的會話共享? 如何實現兩個不一樣域站點的會話共享? 答: 能! cookie和session的關係 cookie傳遞session_id,供服務器決定session文件. 因此只要能向服務器傳遞session_id,session就能正常使用. 而cookie只是傳遞session_id的一種方式而已. 用url也能傳遞session_id php.ini 配置以下: session.use_only_cookies = 0 session.use_trans_sid = 1 OK了. class sess { protected static $mem = null; public static function open() { if(self::$mem === null) { self::$mem = new memcache(); self::$mem->connect('localhost' , 11211); } } public static function close() { self::$mem->close(); } public static function read($id) { return self::$mem->get($id); } public static function write($id , $data) { return self::$mem->add($id,$data , false); } public static function destroy($id) { return self::$mem->delete($id); } public static function gc($lifetime) { // } } session_set_save_handler('sess::open', 'sess::close', 'sess::read', 'sess::write', 'sess::destroy', 'sess::gc'); ?> 如何實現30分鐘過時的session? 答: 1. 加時間戳, $_SESSION[‘expire’] = time()+1800; 業務邏輯去判斷. 2.ini_set(‘session.cookie_lifetime’ , 1800) 3.或者用memcache,存儲的時候,加上1800的有效期. 4.接管session處理權,第1題中,$mem->connect(‘專門的一臺memcached服務器’). 把session文件放在專門的服務器中. 各個web服務器共享此session服務器. 5.若是不跨主域, 如book.163.com, lady.163.com , mil.163.com 在setcookie(‘key’,’value’,’expire’ , /path‘ , ‘.163.com’); 域名只寫到主域名,cookie將會在各個子域名生效. 若是必須跨域,咱們依照oauth原理. 22.在不刷新新頁面的前提下,js有哪幾種方式能夠向後端服務發起請求?怎麼經過先後端的配置實現跨域請求? ajax (默認不能跨域) jsonp(能夠跨域) document.createElement(‘img’); img.src=’xx.com/url’; 也能夠經過最新的XHR對象的特色, 在服務端發送頭信息 Access-Control-Allow -Origin: * 同步和異步的區別: 同步須要等待返回結果才能繼續,異步沒必要等待 23請指出下面幾種編碼分別是什麼格式: %E4%B8%AD%E6%96%87 %D6%D0%CE%C4 URL encoded, php有urlencoded, js用encodeURI 0xe40xb80xad0xe60x960x87 ,十六進制 \u4e2d\u6587 , unicode碼,返回的json數據中常見 中文 , html實體 2四、請給出能知足下面要求的linux命令: 1) 查看系統的運行狀態(CPU/內存/負載等); top , cat /proc/meminfo 查看內層狀態 cat /proc/cpuinfo w 命令能夠看到 load average: 0.00, 0.00, 0.00 2)重啓apache/httpd/nginx服務(寫出一條便可); apache: /path/to/apache/httpd -k start|stop|restart nginx: /path/to/nginx/sbin/nginx -s reload 24.1 查看文件大小 2五、PHP運行模式: 1) CGI (通用網關接口 / Common Gatew ay I nterface) CGI 即通用網關接口:每有一個用戶請求,都會先要建立CGI 的子進程,而後處理請求, 處理完後結束這個子進程, 這就是Fork-And-Ex ecute模式。 當用戶請求數量很是多時,會大量擠佔系統的資源如 內存, CPU 時間等,形成效能低下。 屬於PH P早期的運行模式,目前使用較少; 2) FastCGI (常駐型CGI / Long-Live CGI ) FastCGI 是CGI 的升級版本, FastCGI 像是一個常駐 (long-live)型的 CGI ,它能夠一直執行 着,只要激活後, 不會每次都要花費時間去 Fork 一次 (這是 CGI 最爲人詬病的 fork-and-ex ecute 模 式)。 3) Web模塊模式( Apache等Web服務器運行的模式) 模塊的做用是接收Apache傳遞過來的PH P文件請求,並處理這些請求,而後將處理後 的結果返回給Apache。而後在返回給用戶; 4) CLI (命令行運行 / Command Line I nterface) PH P-CLI 是PH P Command Line I nterface的簡稱,如同它名字的意思,就是PH P在命令行運行的接口, 區別於在Web服務器上運行的PH P環境( PH P-CGI , I SAPI 等)。 PH P 的命令行模式能使得 PH P 腳本能徹底獨立於 w eb 服務器單獨運行。 切換目錄到php.ex e所在文件夾; 在cli命令行模式下: 命令行下如何接收參數 命令行下如何接收參數 用$argv來接收參數, $argv是一個數組, 第0個單元,表明php文件的名稱 第1個單元,表明第1個參數的值 第2個單元,表明第2個參數的值 ... 2六、lnmp搭建步驟 2七、js事件委託 有時候進行某個事件操做,可能操做對象是不少相似的對象,不可能所有綁定同一個方法 這個時候用事件委託,將事件綁定到這些類似對象的上一級,如td綁定到table var table = document.getElementsByTagName('table')[0]; table.onclick = function(ev){ ev.srcElement.style.background = '#000'; } 2八、框架,tp,laravel(隊列?),yii,node.js 2九、面向對象 單例模式 幾個類 30、排序算法代碼(冒泡,快速等) 冒泡排序: 1.比較相鄰的元素。若是第一個比第二個大,就交換他們兩個。 2.對每一對相鄰元素做一樣的工做,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。 3.針對全部的元素重複以上的步驟,除了最後一個。 4.持續每次對愈來愈少的元素重複上面的步驟,直到沒有任何一對數字須要比較 代碼: function bubbleSort($numbers) { $cnt = count($numbers); for ($i = 0; $i < $cnt; $i++) { for ($j = 0; $j < $cnt - $i - 1; $j++) { if ($numbers[$j] > $numbers[$j + 1]) { $temp = $numbers[$j]; $numbers[$j] = $numbers[$j + 1]; $numbers[$j + 1] = $temp; } } } return $numbers; } $num = array(20, 40, 60, 80, 30, 70, 90, 10, 50, 0); var_dump(bubbleSort($num)); 快速排序: 經過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的全部數據都比另一部分的全部數據都要小,而後再按此方法對這兩部分數據分別進行快速排序,整個排序過程能夠遞歸進行,以此達到整個數據變成有序序列 代碼: function quickSort(&$arr){ if(count($arr)>1){ $k=$arr[0]; $x=array(); $y=array(); $_size=count($arr); for($i=1;$i<$_size;$i++){ if($arr[$i]<=$k){ $x[]=$arr[$i]; }elseif($arr[$i]>$k){ $y[]=$arr[$i]; } } $x=quickSort($x); $y=quickSort($y); return array_merge($x,array($k),$y); }else{ return $arr; } } 3一、memcached、redis、mongodb以及它們之間的區別 3二、郵件發送協議:SMTP、POP三、IMAP4 3三、 3三、$GLOBALS和global區別 $GLOBALS:全局變量數組 global:在函數內容聲明某個變量是全局變量中的某一個變量, 而後能夠對這個聲明的變量進行全局增刪改查 例如: $c = 1; echo $c;//1 function a(){ global $c; $c = 222; } a(); echo $c;//222 3四、字符串函數: 正則經常使用函數: preg_split()將字符串,按正則一個一個字符分割到數組中 字符串函數: strrev,反轉字符串 str_split,按指定字符串長度拆成數組 chunk_split,按照指定的長度進行切割字符串並加上其餘字符如 123434--->123,434 number_format 千分位格式化數字 3五、多練習理解memcached、redis、momgodb 三者應用以下 <?php $mem = new memcache; $mem->connect('localhost',11211); //經過memcached來設置一個自增的id $_id = $mem->increment('_id'); $mongo = new mongoClient; $test = $mongo->test; $book = $test->book; //用自增的id來放到mongodb的json串中 $data = ['_id'=>$_id,'title'=>$_POST['title']]; $book->insert($data); $tags = explode(',',$_POST['tags']); $redis = new redis; var_dump($redis->connect('localhost',6379)); foreach($tags as $v){ echo $v; //使用redis來保存標籤tags的內容 $redis->sAdd($v,$_id); } echo 'OK'; ?> 3六、服務器反向代理,集羣,負載均衡 反向代理:動靜分離等, 也就是對應不一樣的請求使用不一樣的服務器, 如:訪問一個頁面時,用一個服務器來解析html,一個解析php,一個服務器來存圖片並,請求的時候返回圖片資源等 集羣:多個服務器,放在一個服務器組裏面,當有請求時,將請求給服務器組。 配置例子: upstream aaaserver{ sever 192.168.3.1:80....... sever 192.168.3.2:80....... sever 192.168.3.3:80....... } 負載均衡:當請求給服務器組時,將請求按照必定(算法、策略),分發給服務器組裏面的各個服務器 3七、mysql優化 ①原則:不查-->少查-->內存查-->磁盤查-->少排序(最好的優化是少查詢) ②表的優化: a定長和變長字段分離--->核心且經常使用字段宜建成定長,放一張表 b經常使用和不經常使用字段分離 c須要關聯同級的表中,添加冗餘字段 如:一個文章表中,展現文章的時候常常要用到做者名, 這個時候能夠在文章表中加上用戶(做者)uname,從而不用去連表查用戶表 ③列的選擇: a字段類型優先級--->int>date,time<enum.char>varchar>blob,text b長度夠用就行--->如age用tinyint最大可存255,用int浪費了3個字節 由於大的字段,浪費內存,影響速度 c儘可能避免用null 由於null不利於索引,要用特殊字段來標註 另外查詢也不方便,還須要用is null或is not null ④索引的優化 經常使用符合索引來優化,同時用幾個字段來索引 3八、查看sql語句執行效率 a:使用explain + select語句 b:set profiling=1,show profiles 設計模式,數據庫設計,優化,laravel,tp