成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

PHP筆試面試題精選(一)

JohnLui / 1756人閱讀

摘要:,跨站腳本攻擊。實(shí)際發(fā)的請(qǐng)求就是,用于表示這是一個(gè)請(qǐng)求。,用于告知服務(wù)器根據(jù)這個(gè)參數(shù)獲取回調(diào)函數(shù)的名稱(chēng),通常約定就叫。,回調(diào)函數(shù)的名稱(chēng),也是前面參數(shù)的值,可省略,會(huì)自動(dòng)生成。

本次課程主要圍繞 PHP 面試和筆試中經(jīng)常會(huì)出現(xiàn)的一些知識(shí)點(diǎn),但是面試官會(huì)在筆試題基礎(chǔ)上深入擴(kuò)展,那么你知道如何更好的回答讓面試官滿(mǎn)意嗎?題目收集自騰訊,迅雷,美圖等公司的筆試面試題,以及本人面試經(jīng)歷中印象中的知識(shí)點(diǎn),同時(shí)也分享一些面試的經(jīng)驗(yàn),相信對(duì)你一定有很大的參考價(jià)值。

本期題目重點(diǎn)涉及基礎(chǔ)知識(shí),安全,跨域,及兩個(gè)簡(jiǎn)單的設(shè)計(jì)模式,預(yù)告下期重點(diǎn)是:計(jì)算機(jī)網(wǎng)絡(luò),WebSocket,http協(xié)議,tcp協(xié)議相關(guān)

講座地址:https://segmentfault.com/l/15...

一、PHP部分

1.函數(shù)內(nèi)部 static 和 global 關(guān)鍵字的作用

static 是靜態(tài)變量,在局部函數(shù)中存在且只初始化一次,使用過(guò)后再次使用會(huì)使用上次執(zhí)行的結(jié)果; 作為計(jì)數(shù),程序內(nèi)部緩存,單例模式中都有用到。

global 關(guān)鍵字,引用全局變量,wordpress中大量用到,如面向過(guò)程開(kāi)發(fā)。

static 靜態(tài)方法,是類(lèi)的成員方法,但不需要實(shí)例化類(lèi)可直接使用

$GLOBAL 在函數(shù)內(nèi)使用具有全局作用域的變量,如$GLOBAL["a"]

2.子類(lèi)重寫(xiě)父類(lèi)的 protected 方法有什么限制?或者說(shuō)有什么要遵守的規(guī)則?

用例子說(shuō)明,以 Laravel 框架中的控制器作為說(shuō)明

①final修飾的類(lèi)方法不可被子類(lèi)重寫(xiě)

②PHP是否重寫(xiě)父類(lèi)方法只會(huì)根據(jù)方法名是否一致判斷(5.3以后重寫(xiě)父類(lèi)方法參數(shù)個(gè)數(shù)必須一致)

③重寫(xiě)時(shí)訪(fǎng)問(wèn)級(jí)別只可以等于或者寬松于父類(lèi) 不可提升訪(fǎng)問(wèn)級(jí)別

3.PHP文件末尾是否應(yīng)該加 ?> 結(jié)束符號(hào),為什么?

主要防止 include,require 引用文件,把文件末尾可能的回車(chē)和空格等字符引用進(jìn)來(lái),還有一些函數(shù)必須在沒(méi)有任何輸出之前調(diào)用,就會(huì)造成不是期望的結(jié)果。PHP文件的編碼不包含BOM的UTF8. 這也是PSR-2中的規(guī)范:純PHP代碼文件必須省略最后的 ?> 結(jié)束標(biāo)簽。

4.談一談 PHP 開(kāi)源框架 CI,ThinkPHP,Laravel 的優(yōu)缺點(diǎn)及選型依據(jù)

CI非常輕量級(jí),是一個(gè)簡(jiǎn)單的MVC框架,性能也很快。

ThinkPHP3.2國(guó)內(nèi)使用比較多,優(yōu)點(diǎn)是文檔非常多,各種問(wèn)題解決方案比較多,缺點(diǎn)是代碼不夠規(guī)范,理念落后。

Laravel 是一個(gè)現(xiàn)代化的PHP開(kāi)發(fā)框架,代碼優(yōu)雅,使用 composer 方式擴(kuò)展功能,社區(qū)活躍,缺點(diǎn)是比較重,比較適合做后臺(tái)管理或者應(yīng)用型WEB系統(tǒng)。

5.Memcache 和 Redis 的讀寫(xiě)性能(qps)如何??jī)烧邇?yōu)缺點(diǎn)?Redis 支持哪些數(shù)據(jù)類(lèi)型?Redis 如何持久化?

讀寫(xiě)性能:

memcache更加快速,在讀取性能上比 Redis 快,缺點(diǎn)是僅支持字符串。

Redis支持豐富的數(shù)據(jù)結(jié)構(gòu)類(lèi)型,字符串,散列(哈希),集合,有序集合,還支持訂閱發(fā)布,地理位置等等。

實(shí)際運(yùn)用中可以redis,memcache結(jié)合,memcache可作為session存儲(chǔ)的方式,session都是KV類(lèi)型鍵值對(duì)。

Redis 提供了多種不同級(jí)別的持久化方式:

RDB 持久化可以在指定的時(shí)間間隔內(nèi)生成數(shù)據(jù)集的時(shí)間點(diǎn)快照(point-in-time snapshot)。

AOF 持久化記錄服務(wù)器執(zhí)行的所有寫(xiě)操作命令,并在服務(wù)器啟動(dòng)時(shí),通過(guò)重新執(zhí)行這些命令來(lái)還原數(shù)據(jù)集。 AOF 文件中的命令全部以 Redis 協(xié)議的格式來(lái)保存,新命令會(huì)被追加到文件的末尾。 Redis 還可以在后臺(tái)對(duì) AOF 文件進(jìn)行重寫(xiě)(rewrite),使得 AOF 文件的體積不會(huì)超出保存數(shù)據(jù)集狀態(tài)所需的實(shí)際大小。

Redis 還可以同時(shí)使用 AOF 持久化和 RDB 持久化。 在這種情況下, 當(dāng) Redis 重啟時(shí), 它會(huì)優(yōu)先使用 AOF 文件來(lái)還原數(shù)據(jù)集, 因?yàn)?AOF 文件保存的數(shù)據(jù)集通常比 RDB 文件所保存的數(shù)據(jù)集更完整。

你甚至可以關(guān)閉持久化功能,讓數(shù)據(jù)只在服務(wù)器運(yùn)行時(shí)存在。

參見(jiàn):http://doc.redisfans.com/topi...

6.使用 PHP 下載網(wǎng)絡(luò)圖片,有哪些方法?

1.file_get_contents

2.readfile讀取內(nèi)容

3.fopen系列函數(shù)

4.curl

7.什么是 CGI?什么是 FastCGI?php-fpm,F(xiàn)astCGI,Nginx 之間是什么關(guān)系?

CGI,通用網(wǎng)關(guān)接口,用于WEB服務(wù)器和應(yīng)用程序間的交互,定義輸入輸出規(guī)范,用戶(hù)的請(qǐng)求通過(guò)WEB服務(wù)器轉(zhuǎn)發(fā)給FastCGI進(jìn)程,F(xiàn)astCGI進(jìn)程再調(diào)用應(yīng)用程序進(jìn)行處理,如php解析器,應(yīng)用程序的處理結(jié)果如html返回給FastCGI,F(xiàn)astCGI返回給Nginx 進(jìn)行輸出。假設(shè)這里WEB服務(wù)器是Nginx,應(yīng)用程序是 PHP,而 php-fpm 是管理 FastCGI 的,這也就是 php-fpm,F(xiàn)astCGI,和 Nginx 之間的關(guān)系。

FastCGI 用來(lái)提高 cgi 程序性能,啟動(dòng)一個(gè)master,再啟動(dòng)多個(gè) worker,不需要每次解析 php.ini. 而 php-fpm 實(shí)現(xiàn)了 FastCGI 協(xié)議,是 FastCGI 的進(jìn)程管理器,支持平滑重啟,可以啟動(dòng)的時(shí)候預(yù)先生成多個(gè)進(jìn)程。

8.什么是 CSRF 攻擊 ?XSS 攻擊?如何防范?

CSRF,跨站請(qǐng)求偽造,攻擊方偽裝用戶(hù)身份發(fā)送請(qǐng)求從而竊取信息或者破壞系統(tǒng)。

講述基本原理:用戶(hù)訪(fǎng)問(wèn)A網(wǎng)站登陸并生成了cookie,再訪(fǎng)問(wèn)B網(wǎng)站,如果A網(wǎng)站存在CSRF漏洞,此時(shí)B網(wǎng)站給A網(wǎng)站的請(qǐng)求(此時(shí)相當(dāng)于是用戶(hù)訪(fǎng)問(wèn)),A網(wǎng)站會(huì)認(rèn)為是用戶(hù)發(fā)的請(qǐng)求,從而B(niǎo)網(wǎng)站就成功偽裝了你的身份,因此叫跨站腳本攻擊。

CSRF防范:

1.合理規(guī)范api請(qǐng)求方式,GET,POST

2.對(duì)POST請(qǐng)求加token令牌驗(yàn)證,生成一個(gè)隨機(jī)碼并存入session,表單中帶上這個(gè)隨機(jī)碼,提交的時(shí)候服務(wù)端進(jìn)行驗(yàn)證隨機(jī)碼是否相同。

XSS,跨站腳本攻擊。

防范:不相信任何輸入,過(guò)濾輸入。

9.列舉常用的設(shè)計(jì)模式并說(shuō)明?單例模式,觀(guān)察者模式等等

看示例代碼。

10.寫(xiě)一段代碼,實(shí)現(xiàn)PHP內(nèi)部的通知機(jī)制,如當(dāng)一個(gè)類(lèi)的屬性發(fā)生變化時(shí),另外一個(gè)類(lèi)就可以收到通知。

觀(guān)察者模式的應(yīng)用,使用代碼示例說(shuō)明。

對(duì)象的一種一對(duì)多的關(guān)系,當(dāng)依賴(lài)的對(duì)象狀態(tài)發(fā)生改變時(shí),所有依賴(lài)它的對(duì)象都得到通知并被自動(dòng)更新。

觀(guān)察者模式又稱(chēng)發(fā)布訂閱模式。

1.抽象主體(Subject)角色:主體角色將所有對(duì)觀(guān)察者對(duì)象的引用保存在一個(gè)集合中,每個(gè)主體可以有任意多個(gè)觀(guān)察者。 抽象主體提供了增加和刪除觀(guān)察者對(duì)象的接口。主體也就是被觀(guān)察者。

2.抽象觀(guān)察者(Observer)角色:為所有的具體觀(guān)察者定義一個(gè)接口,在觀(guān)察的主體發(fā)生改變時(shí)更新自己。

3.具體主體(ConcreteSubject)角色:存儲(chǔ)相關(guān)狀態(tài)到具體觀(guān)察者對(duì)象,當(dāng)具體主體的內(nèi)部狀態(tài)改變時(shí),給所有登記過(guò)的觀(guān)察者發(fā)出通知。具體主體角色通常用一個(gè)具體子類(lèi)實(shí)現(xiàn)。

4.具體觀(guān)察者(ConcretedObserver)角色:存儲(chǔ)一個(gè)具體主體對(duì)象,存儲(chǔ)相關(guān)狀態(tài),實(shí)現(xiàn)抽象觀(guān)察者角色所要求的更新接口,以使得其自身狀態(tài)和主題的狀態(tài)保持一致。

二、前端部分

1.$(“#content .abc”) 和 $(“#content”).find(“.abc”) 哪個(gè)效率更高?

后者,后者使用原生的document.getElementByN ame,ID>Tag>Class.

$(“#content”).find(“.abc”) .find()方法會(huì)調(diào)用瀏覽器的原生方法(getElementById,getElementByName,getElementByTagName等等),所以速度較快。比$(“#content .abc”) 效率快很多。

第一種慢的原因:在于 jQuery 內(nèi)部使用各種選擇器鏈條的選擇順序是從右到左,所以這條語(yǔ)句是先選.abc,然后再一個(gè)個(gè)過(guò)濾出父元素#content,這導(dǎo)致它慢很多。

2.ajax 中如何執(zhí)行跨域訪(fǎng)問(wèn)?同子域的情況如何處理?不同子域的情況如何處理?

跨域的存在是因?yàn)闉g覽器的同源策略,一個(gè)源表示協(xié)議,端口,域名都相同,否則就形成了跨域。

①jsonp,非官方協(xié)議,簡(jiǎn)單實(shí)用

通過(guò)JavaScript的callback方式調(diào)用,jQuery封裝了jsonp方式的請(qǐng)求。

callback({“result”:0,”msg”:”ok”,”data”:{xxx}})

②服務(wù)器響應(yīng)頭

header("Access-Control-Allow-Origin:*");

/星號(hào)表示所有的域都可以接受,/

header(“Access-Control-Allow-Methods:GET,POST");

③iframe實(shí)現(xiàn)跨域

3.$(document).ready()函數(shù)作用域是什么?

片段1:

var MyProject = {};
$(document).ready(function() {
    MyProject.intro = "";
    MyProject.intro = "something";
});
console.log(MyProject.intro); // "something"

片段2:

$(document).ready(function() {
    var1 = 12;      // no var =global
    var var2 = 24;  // local
});

alert(var1)
alert(var2)

4.$(this) 和 this 關(guān)鍵字在 jQuery 中有何不同?

一個(gè)是jquery對(duì)象,一個(gè)是js的屬性

5.jsonp 和 iframe 跨域訪(fǎng)問(wèn)原理是什么?

一個(gè)jsonp的例子,js代碼:

//JAVASCRIPT
$.getJSON("http://www.example.com/jsonp.php?callback=?","firstname=Jeff",function(res){
    alert("Your name is "+res.fullname);
});

//SERVER SIDE
  

Ajax發(fā)jsonp請(qǐng)求:

$.ajax({
        url: "http://api.flickr.com/services/rest/?method=flickr.interestingness.getList ",
        dataType: "jsonp",
        jsonp: "jsoncallback",
        success: function(data) {
            alert(data);
        }
    });

注意:對(duì)于上面第二個(gè)ajax示例,url中不必帶有callback參數(shù),jquery會(huì)自動(dòng)添加。

Jsonp參數(shù)是callback名稱(chēng),指的就是服務(wù)端$_GET[‘callback’]里的callback的名稱(chēng)。

實(shí)際發(fā)的請(qǐng)求就是http://api.flickr.com/service... 1471419449018

dataType: "jsonp",用于表示這是一個(gè) JSONP 請(qǐng)求。
jsonp: "callback",用于告知服務(wù)器根據(jù)這個(gè)參數(shù)獲取回調(diào)函數(shù)的名稱(chēng),通常約定就叫 callback。
jsonpCallback: "dosomething",回調(diào)函數(shù)的名稱(chēng),也是前面callback參數(shù)的值,可省略,jquery會(huì)自動(dòng)生成。
JSONP 的原理

AJAX 無(wú)法跨域是受到“同源政策”的限制,但是帶有src屬性的標(biāo)簽(例如

閱讀需要支付1元查看
<