一、請選擇下面結(jié)果為true的表達(dá)式
- null instanceof Object
- null == undefined
- NaN == NaN
- parseInt("8",8) == 8
- 100 == "100"
二、實現(xiàn)一個通用的事件綁定函數(shù),addEvent(dom,type,handler)
三、不使用全局變量,使用閉包寫一個函數(shù),實現(xiàn)返回從1逐漸增加的數(shù)值,比如第一次調(diào)用返回1,第二次返回2,第三次返回3...
四、實現(xiàn)一個對象拷貝函數(shù)extend(target,source,isDeep)
五、下面一段代碼:
var name = "Bill ";
var aFamousPerson = {
name:"Steve ",
fiend:{
name:"Mark",
showMyName:function(){ alert(this.name)}
}
}
1) 調(diào)用aFamousPerson.friend.showMyName(),顯示結(jié)果是哪個?
2) 如果加一段代碼,show = aFamousPerson.friend.showMyName,然后再執(zhí)行show(),顯 示的結(jié)果是哪個?
3) 如果希望依次顯示,Bill、Steve、Mark,代碼該如何寫?
六、實現(xiàn)一個trim函數(shù),用于去除字符串左右的空格,可以如下調(diào)用:
" ab cd e ".trim; //結(jié)果為"ab cd e"
七、有一段html結(jié)構(gòu)如下:
<ul id="item">
<li>內(nèi)容 1</li>
....
<li>內(nèi)容 1</li>
</ul>
其中l(wèi)i節(jié)點數(shù)量很大且可能動態(tài)變化。
實現(xiàn)一個功能,當(dāng)點擊這些節(jié)點的時候,彈出li節(jié)點的坐標(biāo)信息及節(jié)點內(nèi)容。
八、談?wù)勀闼赖目缬蚪鉀Q方案(至少3種)。
九、http協(xié)議有哪些請求類型?有哪些常見的狀態(tài)碼?什么是長連接?如果要將頁面緩存一天,服務(wù)器該如何設(shè)置?
十、有一個url為 htttp://www.example.com/getUserInfo?userId=123&valideCode=abcd的頁面,
會展示用戶的一些私密信息(比如薪資),請考慮如何解決以下安全問題:
1)防止SQL注入攻擊。
2)防止XSS攻擊。
3)防止CSRF攻擊。
十一、一個頁面從輸入url到頁面加載完成,整個過程中發(fā)生了什么?請談?wù)勀愕睦斫猓ㄟ^ 程盡可能詳細(xì))。
十二、如果一個頁面被投訴說加載很慢,需要你來給出方案,你有哪些措施?(至少10條)
十三、HTML5規(guī)范已于2014年10日定稿,列出你所知道的HTML5新技術(shù)(10條)
十四、有10萬cdkey號碼(數(shù)字、字母組成的序列號,每個序列號可以在網(wǎng)站上兌換一定 的物品, 比如購物券等)。給出發(fā)放cdkey的一個方案。
1)用戶在網(wǎng)站上登錄后領(lǐng)取,每人限領(lǐng)一張。
2)在用戶量并發(fā)比較大的時候,不允許出現(xiàn)一個cdkey發(fā)放給多人的情況。
3)給出價格設(shè)計并解釋主要步驟流程。
參考答案
一、2,5
二、
function addEvent(dom,type,handler){
if (dom.addEventListener) {
dom.addEventListener(type,handler,false);
}else if (dom.attachEvent) {
//如果為IE瀏覽器,添加事件采用 attachEvent
dom.attachEvent(‘on’+type,handler);
}else{
dom[‘on’+type] = handler;
}
}-
三、
function Foo() {
let i = 1;
return function() {
console.log(i++);
}
}var f1 = Foo();
f1();
f1();首先,這是一個js中的閉包,一個函數(shù)有權(quán)操作另一個函數(shù)的變量和作用域,這里,匿名函數(shù)有權(quán)訪問foo函數(shù)的i變量,其次,需要知道foo與foo()的區(qū)別,foo指的是整個foo函數(shù)的js代碼,foo()指的是return的語句。var f1=foo(),那么f1實際上的值為匿名函數(shù)代碼段,然后f1()。
五:
1.Mark, 2.Bill, 3.
show = function(){
console.log(name);
console.log(aFamousPerson.name);
aFamousPerson.friend.showMyName()
}
show();-
六:
Object.prototype.trim = function(){
return this.replace(/(^\s)|(\s$)/g,”);//去除兩端空格// return this.replace(/\s+/g,””); //去除所有空格
// return this.replace( /^\s/, ”);//去除左空格
// return this.replace(/(\s$)/g, “”);//去除右空格}
七:
var ul = document.getElementById(‘item’);
ul.onclick = function (e) {
var e = e || window.event;
var target = e.target || e.srcElement;
alert(e.clientX+’,’+e.clientY);
alert(target.textContent);
}-
四、此道題答案來自網(wǎng)絡(luò):
/*- @param {Object} target 目標(biāo)對象。
- @param {Object} source 源對象。
- @param {boolean} deep 是否復(fù)制(繼承)對象中的對象。
- @returns {Object} 返回繼承了source對象屬性的新對象。
/
function extend(target, /optional/ source, /optional*/ deep) {
target = target || {};
var sType = typeof source,
i = 1,
options;
if (sType === ‘undefined’ || sType === ‘boolean’) {
deep = sType === ‘boolean’ ? source : false;
source = target;
target = this;
}
if (typeof source !== ‘object’ && Object.prototype.toString.call(source) !== ‘[object Function]’)
source = {};
while (i <= 2) {
options = i === 1 ? target : source;
if (options != null) {
for (var name in options) {
var src = target[name],
copy = options[name];
if (target === copy)
continue;
if (deep && copy && typeof copy === 'object' && !copy.nodeType)
target[name] = this.extend(src ||
(copy.length != null ? [] : {}), copy, deep);
else if (copy !== undefined)
target[name] = copy;
}
}
i++;
}
return target;
};
八:跨域解決方案
1、 通過jsonp跨域
2、 document.domain + iframe跨域
3、 location.hash + iframe
4、 window.name + iframe跨域
5、 postMessage跨域
6、 跨域資源共享(CORS)
7、 nginx代理跨域
8、 nodejs中間件代理跨域
9、 WebSocket協(xié)議跨域
參考:http://www.coolivan.com/463-
九、
1.http協(xié)議有哪些請求類型:
①OPTIONS:返回服務(wù)器針對特定資源所支持的HTTP請求方法。也可以利用向Web服務(wù)器發(fā)送’*’的請求來測試服務(wù)器的功能性。
②HEAD:向服務(wù)器索要與GET請求相一致的響應(yīng),只不過響應(yīng)體將不會被返回。這一方法可以在不必傳輸整個響應(yīng)內(nèi)容的情況下,就可以獲取包含在響應(yīng)消息頭中的元信息。
③GET:向特定的資源發(fā)出請求。
④POST:向指定資源提交數(shù)據(jù)進(jìn)行處理請求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求體中。POST請求可能會導(dǎo)致新的資源的創(chuàng)建和/或已有資源的修改。
⑤PUT:向指定資源位置上傳其最新內(nèi)容。
⑥D(zhuǎn)ELETE:請求服務(wù)器刪除Request-URI所標(biāo)識的資源。
⑦TRACE:回顯服務(wù)器收到的請求,主要用于測試或診斷。
⑧CONNECT:HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。2.有哪些常見的狀態(tài)碼:
① 客戶方錯誤 1xx;
② 成功 2xx;
③ 重定向 3xx;
④ 客戶方錯誤 4xx;
⑤ 服務(wù)器錯誤 5xx3.長連接:
HTTP協(xié)議采用“請求-應(yīng)答”模式,當(dāng)使用普通模式,每個請求/應(yīng)答客戶和服務(wù)器都要新建一個連接,完成之后立即斷開連接(HTTP協(xié)議為無連接的協(xié)議);
當(dāng)使用長連接(Keep-Alive)又稱持久連接時,使客戶端到服務(wù)器的連接持續(xù)有效,當(dāng)出現(xiàn)對服務(wù)器后繼請求時,長連接功能避免了建立或者重新建立連接。4. 頁面緩存一天,服務(wù)器的設(shè)置:
①Http Header,Expires: 設(shè)置為后一天
②把請求的html緩存入redis,ttl設(shè)置為86400s -
十:
1)防止SQL注入攻擊。
①檢查變量數(shù)據(jù)類型和格式
②過濾特殊符號
③綁定變量,使用預(yù)編譯語句2)防止XSS攻擊。
①token驗證
②referer來源
③隱藏令牌3)防止CSRF攻擊。
①cookie 設(shè)置http only
②代碼轉(zhuǎn)義
③過濾html -
十一、完整的HTTP過程
a. 域名解析b. 發(fā)起TCP的3次握手
c. 建立TCP連接后發(fā)起http請求
d. 服務(wù)器端響應(yīng)http請求,瀏覽器得到html代碼
e. 瀏覽器解析html代碼,并請求html代碼中的資源
以下為頁面解析渲染
F.構(gòu)建DOM樹
G.DOM樹與CSS樣式進(jìn)行附著構(gòu)造呈現(xiàn)樹
H.布局
I.繪制 -
十二、
- 資源合并壓縮,減少HTTP請求
- 使用內(nèi)容發(fā)布網(wǎng)絡(luò),CDN加速
- DNS預(yù)解析,減少DNS查找
- 合理利用緩存,添加Max-Age、expires頭、配置ETag
- 將CSS樣式表放在頂部,將javascript腳本放在底部
- 避免使用CSS表達(dá)式,避免使用@import
- 優(yōu)化精簡javascript(DocumentFragments,防抖與節(jié)流,事件委托,Web Storage緩存, Web Workers)
- 非核心代碼異步加載, 延遲加載依賴
- 使用外部javascript和CSS緩存
- 避免重定向
- 服務(wù)器開啟Gzip壓縮
- nginx反向代理
-
十三、
語義: 能夠讓你更恰當(dāng)?shù)孛枋瞿愕膬?nèi)容是什么。
連通性: 能夠讓你和服務(wù)器之間通過創(chuàng)新的新技術(shù)方法進(jìn)行通信(web sockets等)。
離線 & 存儲:能夠讓網(wǎng)頁在客戶端本地存儲數(shù)據(jù)以及更高效地離線運行(離線資源、在線和離線事件、DOM存儲、IndexDB、自web應(yīng)用程序中使用文件[FileReader])。
多媒體:使 video 和 audio 成為了在所有 Web 中的一等公民。
2D/3D 繪圖 & 效果:提供了一個更加分化范圍的呈現(xiàn)選擇(canvas、webGL)。
性能 & 集成:提供了非常顯著的性能優(yōu)化和更有效的計算機硬件使用(WebWorkers、XMLHttpRequest2、HistoryAPI、拖放、requestAnimationFrame、全屏API、指針鎖定API、在線和離線事件)。
設(shè)備訪問 Device Access:能夠處理各種輸入和輸出設(shè)備(觸控事件touch、使用地理位置定位、檢測設(shè)備方向)。classList
autofocus
email Inputs
Local Storage
fullScreen
visibilitychange
prefetch
IndexDB
video/audio
canvas/webGL
WebWorkers
HistoryAPI
File API
WebSockets
insertAdjacentHTML()
outerHTML
dataset
…