部分面試知識點(web前端工程師)

JavaScript的類型轉換javascript

JavaScript是一種無類型語言,類型轉換分爲顯式轉換和隱式轉換php

隱式轉換css

經過運算符進行轉換,在一些運算中,Javascript也會進行自動類型轉換html

顯式轉換java

經過手動進行類型轉換,Javascript提供瞭如下轉型函數:node

轉換爲數值類型:Number(mix)、parseInt(string,radix)、parseFloat(string)
轉換爲字符串類型:toString(radix)、String(mix)
轉換爲布爾類型:Boolean(mix)程序員

JavaScript的原型與繼承ajax

Js全部的函數都有一個prototype屬性,這個屬性引用了一個對象,簡稱原型,javascript中的繼承是經過原型鏈來體現的,訪問一個對象的屬性時,先在基本屬性中查找,若是沒有,再沿着__proto__這條鏈向上找,這就是原型鏈。算法

B.prototype = new A();,此時B.prototype.constructor就是構造對象A,隨後使用B.prototype.constructor = B;將B原型的構造器從新指向B構造函數在進行原型繼承後,要進行修正操做。spring

JavaScript的閉包

閉包函數相似於Java等OO語言中的getter和setter函數,即由於變量做用域的緣由,在函數外部沒法讀取函數內的局部變量。閉包就是可以讀取其餘函數內部變量的函數。父對象的全部變量,對子對象都是可見的,反之則不成立。閉包就是將函數內部和函數外部鏈接起來的一座橋樑。

因爲閉包會使得函數中的變量都被保存在內存中,內存消耗很大,在IE中可能致使內存泄露。解決方法是,在退出函數以前,將不使用的局部變量所有刪除。   閉包會在父函數外部,改變父函數內部變量的值。

HTTPGetPost

get是從服務器上獲取數據,post是向服務器傳送數據。

GET請求,請求的數據會附加在URL以後,以?分割URL和傳輸數據,多個參數用&鏈接。POST請求:POST請求會把請求的數據放置在HTTP請求包的包體中。

即GET請求的數據會暴露在地址欄中,而POST請求則不會。

對於GET,特定的瀏覽器和服務器對URL的長度有限制。所以,在使用GET請求時,傳輸數據會受到URL長度的限制。數據量不能大於2KB

對於POST,因爲不是URL傳值,理論上是不會受限制的,可是實際上各個服務器會規定對POST提交數據大小進行限制,理論上,IIS4中最大量爲80KB,IIS5中爲100KB。

POST的安全性比GET的高。在FORM提交的時候,若是不指定Method,則默認爲GET。

JavaScript事件綁定

IE的attachEvent()

elemObject.attachEvent("eventName", functionReference);

eventName 參數的值是表示事件名稱的字符串,好比onclick(含on)。functionReference 參數是一個不帶括號的函數引用

W3C DOM 的addEventListener()

nodeReference.addEventListener("eventType", listenerReference, captureFlag);

用 W3C DOM 規範中的行話來講,addEventListener() 方法爲指定的結點註冊了一個事件,表示該結點但願處理相應的事件。

第一個參數是一個聲明事件類型的字符串,好比click,mousedown。(不含on)

第二個參數能夠和早些時候描述過的函數引用一樣對待。

第三個參數則是一個Boolean值,指明該結點是否以DOM中的捕捉模式來偵聽事件。

JavaSciprt事件冒泡以及目標元素

事件冒泡: 當一個元素上的事件被觸發的時候,好比說鼠標點擊了一個按鈕,一樣的事件將會在那個元素的全部祖先元素中被觸發。這一過程被稱爲事件冒泡;這個事件從原始元素開始一直冒泡到DOM樹的最上層。

目標元素: 任何一個事件的目標元素都是最開始的那個元素,而且它在咱們的元素對象中以屬性的形式出現。使用事件代理的話咱們能夠把事件處理器添加到一個元素上,等待一個事件從它的子級元素裏冒泡上來,而且能夠很方便地得知這個事件是從哪一個元素開始的。

JavaScript圖片輪播

1.全局變量等

定義初始index,圖片總數

2.自動切換定時器處理

設置自動切換時間,自動切換後修改index

3.爲左右箭頭添加事件處理

滑入清除定時器,滑出則重置定時器,根據curIndex進行上/下一個圖片處理

4.爲右下角的li 按鈕綁定事件處理

用css來隱藏img,用siblings而不是先hide所有在fadein,使用siblings來處理這樣的狀況速度會比較快。簡單來說siblings就是除開當前顯示的這個之外的全部統計圖片所有fadeOut

JavaScript網頁前進和後退的代碼

前進: history.forward();=history.go(1);

後退: history.back();=history.go(-1);

cookiesession的區別

一、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。

二、cookie不是很安全,別人能夠分析存放在本地的COOKIE並進行COOKIE欺騙,考慮到安全應當使用session。

三、session會在必定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能,考慮到減輕服務器性能方面,應當使用COOKIE。

四、單個cookie保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20個cookie。

CSS 優先級法則

1.、 選擇器都有一個權值,權值越大越優先,當權值相等時,後出現的樣式表設置要優於先出現的樣式表設置;

二、 創做者的規則高於瀏覽者:即網頁編寫者設置的CSS 樣式的優先權高於瀏覽器所設置的樣式;

三、繼承的CSS 樣式不如後來指定的CSS 樣式,在同一組屬性設置中標有「!important」規則的優先級最大

CSS選擇器

 

瀏覽器兼容性問題

javascript兼容性問題

一、在標準的事件綁定中綁定事件的方法函數爲 addEventListener,而IE使用的是attachEvent

二、事件處理中很是有用的event屬性得到亦不相同,標準瀏覽器是做爲參數帶人,而ie是window.event方式得到,得到目標元素ie爲e.srcElement 標準瀏覽器爲e.target

三、而後在ie中是不能操做tr的innerHtml

四、而後ie日期函數處理與其它瀏覽器不大一致,好比: var year= new Date().getYear(); 在IE中會得到當前年,可是在firefox中則會得到當前年與1900的差值。

五、得到DOM節點的方法有所差別,其得到子節點方法不一致。

css兼容性問題

一、不一樣瀏覽器的標籤默認的外補丁和內補丁不一樣,解決方案:用通配符*來設置各個標籤的內外補丁是0。

二、div的垂直居中問題 vertical-align:middle; 將行距增長到和整個DIV同樣高 line-height:200px; 而後插入文字

三、margin加倍的問題 設置爲float的div在ie下設置的margin會加倍。這是一個ie6都存在的bug。解決方案是在這個div裏面加上 display:inline; 

Ajax是什麼

ajax是異步的 JavaScript 和 XML。經過在後臺與服務器進行少許數據交換,AJAX 可使網頁實現異步更新。這意味着能夠在不從新加載整個網頁的狀況下,對網頁的某部分進行更新。

Ajax的交互模型

 1--啓動  獲取XMlHttpRequest對象
 2--open 打開url通道,並設置異步傳輸 
3--send 發送數據到服務器

4--服務器接受數據並處理,處理完成後返回結果 
5--客戶端接收服務器端返回

 

 

同步和異步的區別

同步:腳本會停留並等待服務器發送回覆而後再繼續

異步:腳本容許頁面繼續其進程並處理可能的回覆

Ajax跨域的解決方法

若是在A網站中,咱們但願使用Ajax來得到B網站中的特定內容,若是A網站與B網站不在同一個域中,那麼就出現了跨域訪問問題。

IE對於跨域訪問的處理是,彈出警告框,提醒用戶。若是用戶將該網站歸入可信任網站,或者調低安全級別,那麼這個問題IE就不會在提醒你。

FireFox等其它非微軟的瀏覽器遇到跨域訪問,則解決方案統一是拒絕訪問

幾個可行的方案:

一、Web代理的方式。

二、on-Demand方式

三、iframe方式。

四、用戶本地轉儲方式

 

 

什麼是PHP

超級文本預處理語言 Hypertext PreProcessor,是一種用來開發動態網站的服務器端腳本語言。

PHP字符串翻轉

echo strrev($a);

PHP支持多繼承嗎?

不支持。PHP中只容許單繼承,父類能夠被一個子類用關鍵字「extends」繼承。

echo(),print(),print_r()的區別

echo是PHP語句, print和print_r是函數,語句沒有返回值,函數能夠有返回值

echo輸出一個或者多個字符串

print()只能打印出簡單類型變量的值(如int,string) 

print_r()  能夠打印出複雜類型變量的值(如數組,對象) 

PHP中如何定義常量

使用define () 來定義常量,好比define (「Newconstant」, 30);

語句includerequire的區別,如何避免屢次包含同一文件

require是無條件包含,也就是若是一個流程里加入require,不管條件成立與否都會先執行require 

include有返回值,而require沒有(可能由於如此require的速度比include快) 包含文件不存在或者語法錯誤的時候require是致命的,include不是

使用 require_once() 和 include_once()能夠避免屢次包含同一文件以免函數重定義,變量從新賦值等問題。 返回值和include() 相同。若是文件已被包含,本函數返回 TRUE。

HTTP協議1.01.1的區別,並簡單說下HTTP協議
HTTP,超文本傳輸協議。它定義了瀏覽器和服務器的通訊規則。HTTP協議是基於TCP/IP的TCP協議上,如今萬維網使用的是HTTP1.1版本,其特色包括,C/S模式,請求簡單(GET/POST/HEAD),靈活(能夠傳輸任何類型的數據HTML、XML、JSON、自定義等),無鏈接(每次鏈接只處理一個請求,從發出請求到收到200狀態爲止斷開鏈接),無狀態。

HTTP協議主要包括,響應消息格式、請求消息格式、狀態碼知識點。

什麼是MVC
MVC,即Model(數據層),View(視圖層),Controller(控制層)。

PHP中的MVC模型是一種有效將代碼分紅三層的管理辦法,

Model表示着應用中的數據信息

View負責將應用中的數據信息展示出來

Controller控制着如何將數據信息讀出。

 

 

Spring MVC工做原理
1. 客戶端請求提交到DispatcherServlet
2. 由DispatcherServlet控制器查詢一個或多個HandlerMapping,找處處理請求的Controller
3. DispatcherServlet將請求提交到Controller
4. Controller調用業務邏輯處理後,返回ModelAndView
5. DispatcherServlet查詢一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖
6. 視圖負責將結果顯示到客戶端

爲何要用Spring 
一、Spring能很好的與各大框架進行集成
二、建立對象時,若是咱們不用spring須要用工廠模式來建立,這個spring至關於工廠模式已經幫咱們作了建立對象的功能(IOC、依賴注入)。
三、在用Hibernate的時候,若是不用spring每次都要寫事務的提交代碼,有了spring能夠經過AOP幫助咱們管理事務 
四、面向切面編程(AOP)在要記錄日誌的時候添加一條記錄後須要在數據裏同時添加一條添加成功了或失敗的記錄,那麼就能夠用Spring的Aop來處理,雖然不用Aop也能作可是不用Spring的Aop就會寫不少重複的代碼。

Spring中的IOCAOP

IOC依賴注入,即用接口編程,在程序中不出現new關鍵字,用接口來命名引用,而後經過某種方式把接口的某個實現類的實例注入到引用裏,從而實現接口與具體實現類的鬆耦合。

AOP面向方面的編程,即,是一種編程技術,它容許程序員對橫切關注點或橫切典型的職責分界線的行爲(例如日誌和事務管理)進行模塊化。AOP 的核心構造是方面,它將那些影響多個類的行爲封裝到可重用的模塊中。

Spring bean生命週期

實例化——填充屬性——

調用BeanNameAware的setBeanName()方法

調用BeanFactoryAware的setBeanFactory()方法

調用ApplicationContextAwar的setApplicationContext()方法

調用BeanPostprocessore的預初始化方法

調用InitialzingBean的afterPropertiesSet()方法

調用定製的初始化方法——調用Beanprocessors的後初始化方法——

bean可使用——容器關閉——

調用DisposableBean的destroy()方法——

調用定製的銷燬方法——結束

1.    BeanFactoyPostProcessor實例化

2.    Bean實例化,而後經過某些BeanFactoyPostProcessor來進行依賴注入

3.    BeanPostProcessor的調用.Spring內置的BeanPostProcessor負責調用Bean實現的接口: BeanNameAware, BeanFactoryAware, ApplicationContextAware等等,等這些內置的BeanPostProcessor調用完後纔會調用本身配置的BeanPostProcessor

4.     Bean銷燬階段

SSH整合 
SSH:Struts(表示層)+Hibernate(持久層)+Spring(業務層)
Struts是一個表示層框架,主要做用是界面展現,接收請求,分發請求。
Hibernate是一個持久層框架,它只負責與關係數據庫的操做。
Spring是一個業務層框架,是一個整合的框架,可以很好地黏合表示層與持久層。

Spring的事務管理 
事務就是對一系列的數據庫操做進行統一的提交或回滾操做,若是插入成功,那麼一塊兒成功,若是中間有一條出現異常,那麼回滾以前的全部操做。這樣能夠防止出現髒數據,防止數據庫數據出現問題。

開發中爲了不這種狀況通常都會進行事務管理。Spring中也有本身的事務管理機制,通常是使用TransactionMananger進行管理,能夠經過Spring的注入來完成此功能。

數據庫鏈接池

開源數據庫鏈接池主要有c3p0、dbcp、proxool三種

DBCP是Apache上的一個 java鏈接池項目,也是 tomcat使用的鏈接池組件。因爲創建數據庫鏈接是一個很是耗時耗資源的行爲,因此經過鏈接池預先同數據庫創建一些鏈接,放在內存中,應用程序須要創建數據庫鏈接時直接到鏈接池中申請一個就行,用完後再放回去。dbcp沒有自動的去回收空閒鏈接的功能。

 

 

各類排序算法的比較

 

二叉樹

1.在二叉樹的第I層上至多有2i-1個結點。
2.深度爲k的二叉樹至多有2k-1個結點(k>=1)
3.在任意一個二叉樹中,度爲0的結點老是比度爲2的結點多一個;
4.具備n 個結點的二叉樹,其深度至少爲[log2n]+1。

B平衡多路查找樹

1.全部非葉子結點至多擁有兩個兒子(Left和Right);

2.全部結點存儲一個關鍵字;

3.非葉子結點的左指針指向小於其關鍵字的子樹,右指針指向大於其關鍵字的子樹;

4.全部的葉子結點都位於同一層。

搜索:從根結點開始,若是查詢的關鍵字與結點的關鍵字相等,那麼就命中;

不然,若是查詢關鍵字比結點關鍵字小,就進入左兒子;若是比結點關鍵字大,就進入

右兒子
Dijkstra 算法

無向圖 G=(V,E) 中,假設每條邊 E[i] 的長度爲 w[i],找到由頂點 V0 到其他各點的最短值。

把頂點集合V分紅兩組:

1.S:已求出的頂點的集合(初始時只含有源點V0)

2.V-S=T:還沒有肯定的頂點集合

將T中頂點按遞增的次序加入到S中,保證:

1.從源點V0到S中其餘各頂點的長度都不大於從V0到T中任何頂點的最短路徑長度

2.每一個頂點對應一個距離值

相關文章
相關標籤/搜索