1. 程式人生 > >2018面試題集

2018面試題集

1、對ajax的理解
a) Ajax為非同步請求,即區域性刷新技術,在傳統的頁面中,使用者需要點選按鈕或者事件觸發請求,到重新整理頁面,而非同步技術為不需要點選即可觸發事件,這樣使得使用者體驗感增強,比如商城購物車的非同步載入,當你點選商品時無需請求後臺而直接動態修改引數。
2、AOP與IOC的概念(即spring的核心)
a) IOC:Spring是開源框架,使用框架可以使我們減少工作量,提高工作效率並且它是分層結構,即相對應的層處理對應的業務邏輯,減少程式碼的耦合度。而spring的核心是IOC控制反轉和AOP面向切面程式設計。IOC控制反轉主要強調的是程式之間的關係是由容器控制的,容器控制物件,控制了對外部資源的獲取。而反轉即為,在傳統的程式設計中都是由我們建立物件獲取依賴物件,而在IOC中是容器幫我們建立物件並注入依賴物件,正是容器幫我們查詢和注入物件,物件是被獲取,所以叫反轉。
b) AOP:面向切面程式設計,主要是管理系統層的業務,比如日誌,許可權,事物等。AOP是將封裝好的物件剖開,找出其中對多個物件產生影響的公共行為,並將其封裝為一個可重用的模組,這個模組被命名為切面(aspect),切面將那些與業務邏輯無關,卻被業務模組共同呼叫的邏輯提取並封裝起來,減少了系統中的重複程式碼,降低了模組間的耦合度,同時提高了系統的可維護性
3、資料庫優化
a) 選擇合適的欄位,比如郵箱欄位可以設為char(6),儘量把欄位設定為notnull,這樣查詢的時候資料庫就不需要比較null值
b) 使用關聯查詢( left join on)查詢代替子查詢
c) 使用union聯合查詢手動建立臨時表
d) 開啟事物,當資料庫執行多條語句出現錯誤時,事物會回滾,可以維護資料庫的完整性
e) 使用外來鍵,事物可以維護資料的完整性但是它卻不能保證資料的關聯性,使用外來鍵可以保證資料的關聯性
f) 使用索引,索引是提高資料庫效能的常用方法,它可以令資料庫伺服器以比沒有索引快的多的速度檢索特定的行,特別是對於max,min,order by查詢時,效果更明顯
g) 優化的查詢語句,絕大多數情況下,使用索引可以提高查詢的速度,但如果sql語句使用不恰當的話,索引無法發揮它的特性。
4、HTTP協議
a) 常用的請求方法有get、post
b) Get與post的區別:傳送資料,get攜帶引數與訪問地址傳送,使用者可以看見,這的話資訊會不安全,導致資訊洩露。而post則將欄位與對應值封裝在實體中傳送,這個過程使用者是不可見的。Get傳遞引數有限制,而post無限制。
5、事物的理解
a) 事物具有原子性,一致性,永續性,隔離性
b) 原子性:是指在一個事物中,要麼全部執行成功,要麼全部失敗回滾。
c) 一致性:事物執行之前和執行之後都處於一致性狀態
d) 永續性:事物多資料的操作是永久性
e) 隔離性:當一個事物正在對資料進行操作時,另一個事物不可以對資料進行操作,也就是多個併發事物之間相互隔離。
6、同步和非同步的區別?
首先同步非同步於阻塞非阻塞並沒有關係。同步非同步主要是事情做完以後,如何進行處理、或者說關注的是一種訊息通訊機制。
同步的情況下,是由處理訊息者自己去等待訊息是否被觸發;
而非同步的情況下是由觸發機制來通知處理訊息者;
阻塞非阻塞,主要是對於請求者而言的。
阻塞:發出請求等待結果返回,然後再處理後續的事情;
非阻塞:發出請求不等待結果返回,可以接著做後續的事情;
7、cookie 和session 的區別:
 1、cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。
 2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙
    考慮到安全應當使用session。
 3、session會在一定時間內儲存在伺服器上。當訪問增多,會比較佔用你伺服器的效能
     考慮到減輕伺服器效能方面,應當使用COOKIE。
 4、單個cookie儲存的資料不能超過4K,很多瀏覽器都限制一個站點最多儲存20個cookie。
 5、所以個人建議:
    將登陸資訊等重要資訊存放為SESSION
    其他資訊如果需要保留,可以放在COOKIE中
8、執行緒與程序的區別
一個程式至少有一個程序,一個程序至少有一個執行緒. 
執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。 
另外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的執行效率。 
執行緒在執行過程中與程序還是有區別的。每個獨立的執行緒有一個程式執行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。 
從邏輯角度來看,多執行緒的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現程序的排程和管理以及資源分配。這就是程序和執行緒的重要區別。
9、ajax過程
(1)建立XMLHttpRequest物件,也就是建立一個非同步呼叫物件.
(2)建立一個新的HTTP請求,並指定該HTTP請求的方法、URL及驗證資訊.
(3)設定響應HTTP請求狀態變化的函式.
(4)傳送HTTP請求.
(5)獲取非同步呼叫返回的資料.
(6)使用JavaScript和DOM實現區域性重新整理.
10、XHTML和HTML有什麼區別
HTML是一種基本的WEB網頁設計語言,XHTML是一個基於XML的置標語言
最主要的不同:
XHTML 元素必須被正確地巢狀。
XHTML 元素必須被關閉。
標籤名必須用小寫字母。
XHTML 文件必須擁有根元素。
11、索引的作用?和它的優點缺點是什麼?
索引就一種特殊的查詢表,資料庫的搜尋可以利用它加速對資料的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的資料。
索引的優點:
①  建立索引的列可以保證行的唯一性,生成唯一的rowId
②  建立索引可以有效縮短資料的檢索時間
③  建立索引可以加快表與表之間的連線
④  為用來排序或者是分組的欄位新增索引可以加快分組和排序順序
索引的缺點:
①  建立索引和維護索引需要時間成本,這個成本隨著資料量的增加而加大
②  建立索引和維護索引需要空間成本,每一條索引都要佔據資料庫的物理儲存空間,資料量越大,佔用空間也越大(資料表佔據的是資料庫的資料空間)
③  會降低表的增刪改的效率,因為每次增刪改索引需要進行動態維護,導致時間變長


12、什麼是事務?什麼是鎖?
事務就是被繫結在一起作為一個邏輯工作單元的SQL語句分組,如果任何一個語句操作失敗那麼整個操作就被失敗,以後操作就會回滾到操作前狀態,或者是上有個節點。為了確保要麼執行,要麼不執行,就可以使用事務。要將有組語句作為事務考慮,就需要通過ACID測試,即原子性,一致性,隔離性和永續性。 鎖:在所以的DBMS中,鎖是實現事務的關鍵,鎖可以保證事務的完整性和併發性。與現實生活中鎖一樣,它可以使某些資料的擁有者,在某段時間內不能使用某些資料或資料結構。當然鎖還分級別的。
13、約束有哪幾種  五種(都忘了)  
主鍵約束  
外來鍵約束  
唯一約束  
檢查約束  
非空約束  
14、GC是什麼? 為什麼要有GC? 
  GC是垃圾收集的意思(Gabage Collection),記憶體處理是程式設計人員容易出現問題的地方,忘記或者錯誤的記憶體回收會導致程式或系統的不穩定甚至崩潰,Java提供的GC功能      可以自動監測物件是否超過作用域從而達到自動回收記憶體的目的,Java語言沒有提供釋放已分配記憶體的顯示操作方法。
15、SQL語句優化
1)應儘量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。
2)應儘量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:
select id from t where num is null
可以在num上設定預設值0,確保表中num列沒有null值,然後這樣查詢:
select id from t where num=0
3)很多時候用 exists 代替 in 是一個好的選擇
4)用Where子句替換HAVING 子句 因為HAVING 只會在檢索出所有記錄之後才對結果集進行過濾
16、資料庫結構優化
1)正規化優化: 比如消除冗餘(節省空間。。) 2)反正規化優化:比如適當加冗餘等(減少join) 3)拆分表: 分割槽將資料在物理上分隔開,不同分割槽的資料可以制定儲存在處於不同磁碟上的資料檔案裡。這樣,當對這個表進行查詢時,只需要在表分割槽中進行掃描,而不必進行全表掃描,明顯縮短了查詢時間,另外處於不同磁碟的分割槽也將對這個表的資料傳輸分散在不同的磁碟I/O,一個精心設定的分割槽可以將資料傳輸對磁碟I/O競爭均勻地分散開。對資料量大的時時表可採取此方法。可按月自動建表分割槽。
4)拆分其實又分垂直拆分和水平拆分:
17、mysql索引優化
1.建立索引的關鍵:優化SQL語句的關鍵是儘可能減少語句的logical reads
2.單欄位索引,組合索引和覆蓋索引:(1) 對出現在where子句中的欄位加索引,(2).組合索引:如果where語句中有多個欄位,那麼可以考慮建立組合索引,(3).覆蓋索引:覆蓋索引能夠使得語句不需要訪問表僅僅訪問索引就能夠得到所有需要的資料
18、談談你對MVC的認識




MVC是Model—View—Controler的簡稱。即模型—檢視—控制器。MVC是一種設計模式,它強制性的把應用程式的輸入、處理和輸出分開。


MVC中的模型、檢視、控制器它們分別擔負著不同的任務。


              檢視: 檢視是使用者看到並與之互動的介面。檢視向用戶顯示相關的資料,並接受用    戶的輸入。檢視不進行任何業務邏輯處理。


模型: 模型表示業務資料和業務處理。一個模型能為多個檢視提供資料。這提高了應用程式的重用性。


控制器: 當用戶單擊Web頁面中的提交按鈕時,控制器接受請求並呼叫相應的模型去處理請求。然後根據處理的結果呼叫相應的檢視來顯示處理的結果。


MVC的處理過程:首先控制器接受使用者的請求,呼叫相應的模型來進行業務處理,並返回資料給控制器。控制器呼叫相應的檢視來顯示處理的結果。並通過檢視呈現給使用者。


一、MVC的優點 
1、可以為一個模型在執行時同時建立和使用多個檢視。變化-傳播機制可以確保所有相關的檢視及時得到模型資料變化,從而使所有關聯的檢視和控制器做到行為同步。 
2、檢視與控制器的可接插性,允許更換檢視和控制器物件,而且可以根據需求動態的開啟或關閉、甚至在執行期間進行物件替換。 
3、模型的可移植性。因為模型是獨立於檢視的,所以可以把一個模型獨立地移植到新的平臺工作。需要做的只是在新平臺上對檢視和控制器進行新的修改。 
4、潛在的框架結構。可以基於此模型建立應用程式框架,不僅僅是用在設計介面的設計中。


MVC的不足 
MVC的不足體現在以下幾個方面: 
(1)增加了系統結構和實現的複雜性。對於簡單的介面,嚴格遵循MVC,使模型、檢視與控制器分離,會增加結構的複雜性,並可能產生過多的更新操作,降低執行效率。 
(2)檢視與控制器間的過於緊密的連線。檢視與控制器是相互分離,但確實聯絡緊密的部件,檢視沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。 
(3)檢視對模型資料的低效率訪問。依據模型操作介面的不同,檢視可能需要多次呼叫才能獲得足夠的顯示資料。對未變化資料的不必要的頻繁訪問,也將損害操作效能。 
(4) 目前,一般高階的介面工具或構造器不支援MVC架構。改造這些工具以適應MVC需要和建立分離的部件的代價是很高的,從而造成使用MVC的困難。
19、說說什麼是面向物件?什麼是面向過程?
面向過程與面向物件的區別


“面向過程”是一種以過程為中心的程式設計思想。


就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候一個一個依次呼叫就可以了。
“面向物件”(Object Oriented,簡稱OO)是一種以事物為中心的程式設計思想。
就是把構成問題事務分解成各個物件,建立物件的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。
面向過程的優點:流程化使得程式設計任務明確,在開發之前基本考慮了實現方式和最終結果;效率高,面向過程強調程式碼的膽小精悍,善於結合資料結構來開發高效率的程式。。流程明確,具體步驟清楚,便於節點分析。缺點是:需要深入的思考,耗費精力,程式碼重用性低,擴充套件能力差,維護起來難度比較高,對複雜業務來說,面向物件的模組話難度較高,耦合度也比較高。


面向物件的優點:結構清晰,程式便於模組化,結構化,抽象化,更加符合人類的思維方式;封裝性,將事務高度抽象,從而便於流程中的行為分析,也便於操作和自省; 容易擴充套件,程式碼重用率高,可繼承,可覆蓋;實現簡單,可有效地減少程式的維護工作量,軟體開發效率高。面向物件的缺點:效率低,面向物件在面向過程的基礎上高度抽象,從而和程式碼底層的直接互動非常少機會,從而不適合底層開發和遊戲甚至多媒體開發;複雜性,對於事務開發而言,事務本身是面向過程的,過度的封裝導致事務本身的複雜性提高。
20、資料庫三正規化
1NF:
欄位原子性,不可再分
所有關係型資料庫都滿足1NF
2NF:
1NF+資料庫表中每個例項or行必須可以唯一的被區分
一般通過加上主鍵實現
3NF:
1NF+2NF+資料庫表不包含已在其他表中已包含的非主關鍵字資訊
21、什麼是檢視?
檢視實際上是在資料庫中通過Select查詢語句從多張表中提取的多個表字段所組成的虛擬表。
l 檢視並不佔據物理空間,所以通過檢視查詢出的記錄並非儲存在檢視中,而是儲存在原表中。
l 通過檢視可以對指定使用者隱藏相應的表字段,起到保護資料的作用。
l 在滿足一定條件時,可以通過檢視對原表中的記錄進行增刪改操作。
l 建立檢視時,只能使用單條select查詢語句。
23、final, finally, finalize的區別
答: final—修飾符(關鍵字)如果一個類被宣告為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被宣告為 abstract的,又被宣告為final的。將變數或方法宣告為final,可以保證它們在使用中不被改變。被宣告為final的變數必須在宣告時給定初值,而在以後的引用中只能讀取,不可修改。被宣告為final的方法也同樣只能使用,不能過載finally—再異常處理時提供 finally 塊來執行任何清除操作。如果丟擲一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將物件從記憶體中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個物件沒有被引用時對這個物件呼叫的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除物件之前對這個物件呼叫的
24、過載和重寫的區別
override(重寫)
   1. 方法名、引數、返回值相同。
   2. 子類方法不能縮小父類方法的訪問許可權。
   3. 子類方法不能丟擲比父類方法更多的異常(但子類方法可以不丟擲異常)。
   4. 存在於父類和子類之間。
   5. 方法被定義為final不能被重寫。
overload(過載)
  1. 引數型別、個數、順序至少有一個不相同。
  2. 不能過載只有返回值不同的方法名。
  3. 存在於父類和子類、同類中。
25、抽象類和介面有什麼區別
介面是公開的,裡面不能有私有的方法或變數,是用於讓別人使用的,而抽象類是可以有私有方法或私有變數的, 
另外,實現介面的一定要實現接口裡定義的所有方法,而實現抽象類可以有選擇地重寫需要用到的方法,一般的應用裡,最頂級的是介面,然後是抽象類實現介面,最後才到具體類實現。 
還有,介面可以實現多重繼承,而一個類只能繼承一個超類,但可以通過繼承多個介面實現多重繼承,介面還有標識(裡面沒有任何方法,如Remote介面)和資料共享(裡面的變數全是常量)的作用。
26、session 與 cookie 區別
cookie 是 Web 伺服器傳送給瀏覽器的一塊資訊。瀏覽器會在本地檔案中給每一個 Web 服務 器儲存 cookie。以後瀏覽器在給特定的 Web 伺服器發請求的時候,同時會發送所有為該服 務器儲存的 cookie。下面列出了 session 和 cookie 的區別: 無論客戶端瀏覽器做怎麼樣的設定,session都應該能正常工作。客戶端可以選擇禁用 cookie, 但是, session 仍然是能夠工作的,因為客戶端無法禁用服務端的 session。
27、HashMap 和 Hashtable 的區別
1.hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。
2.hashTable同步的,而HashMap是非同步的,效率上逼hashTable要高。
3.hashMap允許空鍵值,而hashTable不允許。
注意: 
TreeMap:非執行緒安全基於紅黑樹實現。TreeMap沒有調優選項,因為該樹總處於平衡狀態。
Treemap:適用於按自然順序或自定義順序遍歷鍵(key)。
28、HashSet 和 HashMap 區別
set是線性結構,set中的值不能重複,hashset是set的hash實現,hashset中值不能重複是用hashmap的key來實現的。
map是鍵值對對映,可以空鍵空值。HashMap是Map介面的hash實現,key的唯一性是通過key值hash值的唯一來確定,value值是則是連結串列結構。
他們的共同點都是hash演算法實現的唯一性,他們都不能持有基本型別,只能持有物件
29、執行緒的生命週期


新建(New)、就緒(Runnable)、執行(Running)、阻塞(Blocked)和死亡(Dead)5種狀態


(1)生命週期的五種狀態


新建(new Thread) 
當建立Thread類的一個例項(物件)時,此執行緒進入新建狀態(未被啟動)。 
例如:Thread t1=new Thread();


就緒(runnable) 
執行緒已經被啟動,正在等待被分配給CPU時間片,也就是說此時執行緒正在就緒佇列中排隊等候得到CPU資源。例如:t1.start();


執行(running) 
執行緒獲得CPU資源正在執行任務(run()方法),此時除非此執行緒自動放棄CPU資源或者有優先順序更高的執行緒進入,執行緒將一直執行到結束。


死亡(dead) 
當執行緒執行完畢或被其它執行緒殺死,執行緒就進入死亡狀態,這時執行緒不可能再進入就緒狀態等待執行。


自然終止:正常執行run()方法後終止


異常終止:呼叫stop()方法讓一個執行緒終止執行


堵塞(blocked) 
由於某種原因導致正在執行的執行緒讓出CPU並暫停自己的執行,即進入堵塞狀態。


正在睡眠:用sleep(long t) 方法可使執行緒進入睡眠方式。一個睡眠著的執行緒在指定的時間過去可進入就緒狀態。


正在等待:呼叫wait()方法。(呼叫motify()方法回到就緒狀態)


被另一個執行緒所阻塞:呼叫suspend()方法。(呼叫resume()方法恢復)
30、Error 和Exception 有什麼區別?
答:Error 表示系統級的錯誤和程式不必處理的異常,是恢復不是不可能但很困難的情況下的一種嚴重問題;比如記憶體溢位,不可能指望程式能處理這樣的情況;Exception 表示需要捕捉或者需要程式進行處理的異常,是一種設計或實現問題;也就是說,它表示如果程式執行正常,從不會發生的情況。
31、執行時異常與受檢異常有何異同?
答:異常表示程式執行過程中可能出現的非正常狀態,執行時異常表示虛擬機器的通常操作中可能遇到的異常,是一種常見執行錯誤,只要程式設計得沒有問題通常就不會發生。受檢異常跟程式執行的上下文環境有關,即使程式設計無誤,仍然可能因使用的問題而引發。Java編譯器要求方法必須宣告丟擲可能發生的受檢異常,但是並不要求必須宣告丟擲未被捕獲的執行時異常。異常和繼承一樣,是面向物件程式設計中經常被濫用的東西
32、列出一些你常見的執行時異常?
答:ArithmeticException(算術異常)、ClassCastException (類轉換異常)、IllegalArgumentException (非法引數異常)、IndexOutOfBoundsException (下標越界異常)、NullPointerException (空指標異常)、SecurityException (安全異常)
33、CSS中link 和@import的區別是?
(1) link屬於HTML標籤,而@import是CSS提供的;
(2) 頁面被載入的時,link會同時被載入,而@import被引用的CSS會等到引用它的CSS檔案被載入完再載入;
(3) import只在IE5以上才能識別,而link是HTML標籤,無相容問題;
(4) link方式的樣式的權重 高於@import的權重.
34、ICMP協議: 因特網控制報文協議。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制訊息。 
TFTP協議: 是TCP/IP協議族中的一個用來在客戶機與伺服器之間進行簡單檔案傳輸的協議,提供不復雜、開銷不大的檔案傳輸服務。 
HTTP協議: 超文字傳輸協議,是一個屬於應用層的面向物件的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統。 
DHCP協議: 動態主機配置協議,是一種讓系統得以連線到網路上,並獲取所需要的配置引數手段。
35、你對執行緒優先順序的理解是什麼?
每一個執行緒都是有優先順序的,一般來說,高優先順序的執行緒在執行時會具有優先權,但這依賴於執行緒排程的實現,這個實現是和作業系統相關的(OS dependent)。我們可以定義執行緒的優先順序,但是這並不能保證高優先順序的執行緒會在低優先順序的執行緒前執行。執行緒優先順序是一個int變數(從1-10),1代表最低優先順序,10代表最高優先順序。
單例模式
懶漢,執行緒不安全
public class Singleton {
    private static Singleton instance;
    private Singleton (){}


    public static synchronized Singleton getInstance() {
if (instance == null) {
    instance = new Singleton();
}
return instance;
    }
}
餓漢


public class Singleton {  
    private static Singleton instance = new Singleton();  
    private Singleton (){}  
    public static Singleton getInstance() {  
    return instance;  
    }  
}


36、海量資料解決方案
 


1.使用快取:
  使用方式:1,使用程式直接儲存到記憶體中。主要使用Map,尤其ConcurrentHashMap。2,使用快取框架。常用的框架:Ehcache,Memcache,Redis等。
  最關鍵的問題是:什麼時候建立快取,以及其失效機制。
對於空資料的緩衝:最好用一個特定的型別值來儲存,以區別空資料和未快取的兩種狀態。
 


2.資料庫優化:
  1,表結構優化。
  2,SQL語句優化,語法優化和處理邏輯優化。可記錄各語句執行時間,有針對性的分析。
  3,分割槽
  4,分表
  5,索引優化
  6,使用儲存過程代替直接操作
3.分離活躍資料
  例如使用者,可以分為活躍使用者和不活躍使用者。


4.批量讀取和延遲修改
  高併發情況可以將多個查詢請求合併到一個。
  高併發且頻繁修改的可以暫存快取中。


5.讀寫分離
  上圖,資料庫伺服器配置多個,配置主從資料庫。寫用主資料庫,讀用從資料庫。


6.分散式資料庫
  將不同的表存放到不同的資料庫中,然後再放到不同的伺服器中。有些複雜問題,如:事務處理,多表查詢。
7.NoSql和Hadoop
  NoSql,not only SQL。沒有關係型資料庫那麼多限制,比較靈活高效。
  Hadoop,將一個表中的資料分層多塊,儲存到多個節點(分散式)。每一塊資料都有多個節點儲存(叢集)。叢集可以並行處理相同的資料,還可以保證資料的完整性。


37、高併發的解決方案。
 
  
1.應用和靜態資源分離:將靜態資源(js,css,圖片等)放到專門的伺服器中。
  
2.頁面快取
:將應用生成的頁面快取起來可以節省大量cpu資源。
  對於部分頁面經常變換資料的,可以使用ajax來處理。


3.叢集和分散式
:叢集,多臺伺服器具有相同的功能,主要起分流的作用。
  分散式,將不同的業務放到不同的伺服器中,處理一個請求可能需要多臺伺服器,進而提高一個請求的處理速度。
  又分為靜態資源叢集和應用程式叢集。後者較複雜,經常要考慮session同步等問題。


4.反向代理
:客戶端直接訪問的伺服器並不是直接提供服務的伺服器,它從別的伺服器獲取資源,然後將結果返回給使用者。
  代理伺服器和反向代理伺服器:
  代理伺服器是代我們訪獲取資源,然後將結果返回。例如,訪問外網的代理伺服器。反向代理伺服器是我們正常訪問一臺伺服器的時候,伺服器自己呼叫了別的伺服器。
  代理伺服器我們主動使用,是為我們服務的,不需要有自己的域名;反向代理是伺服器自己使用的,我們並不知道,有自己的域名。


5,CDN
:CDN是一種特殊的叢集頁面緩衝伺服器,和普通的叢集的多臺頁面緩衝伺服器相比主要區別是:其存放位置和分配請求方式不同。
  CDN的伺服器分佈在全國各地,接收到請求後會將請求分配到最合適的CDN伺服器節點來獲取資料。其每一個CDN節點就是一個頁面快取伺服器。
  分配方式:並不是普通的負載均衡,而是專門的CDN域名解析伺服器在解析域名的時候就分配好的,一般的做飯是:ISP那裡使用CNAME將域名解析到一個特定的域名,然後再將解析到的那個域名用專門的CDN伺服器解析(返回給瀏覽器,再訪問)到相應的CDN節點。每個節點可能也叢集了多臺伺服器。


38、SSH框架的專案執行流程:




1.伺服器啟動,建立Struts2的Filter控制器,建立Spring容器物件.


   例項化Struts2控制器時,載入struts.xml,struts-default.xml,default.properties,struts-plugin.xml等Struts相關配置


   例項化Spring容器時,載入applicationContext.xml




2.客戶瀏覽器傳送請求,請求到達Struts2的Filter控制器




3.如果是Action請求,Struts2控制器根據struts.xml的<action>配置,


   要呼叫一個Action物件處理.




4.Struts2控制器呼叫struts-spring-plugin.jar提供的ObjectFactory


   獲取一個Action物件.


   方法一:ObjectFactory利用<action>元素的class屬性去Spring容器尋找id=class的Bean物件.


   *方法二:如果按上述方法找不到,ObjectFactory會利用class指定值建立一個物件.然後將Spring容器的DAO,Service按名稱匹配規則給Action注入.


 
5.Struts2控制器呼叫Action執行業務處理,處理完畢,返回一個String標識


 
6.Struts2控制器根據String標識呼叫Result元件,生成響應資訊


 
7.將響應資訊給客戶瀏覽器輸出,完成響應處理.


39、ssm框架專案的執行流程:
1.jsp(view)傳送請求
2.通過核心控制器DispatcherServlet呼叫請求解析器:HandlendMapping對請求進行解析,通過對映關係匹配到Controller層
3.在控制層呼叫業務邏輯層(service),資料持久層(DAO)返回控制層,請求完成獲取一個結果,設定一個要跳轉的檢視,(ModelAndView裝載並傳輸資料,設定檢視)
4.核心控制器呼叫 檢視解析器:ViewResolver解析檢視,匹配相應的頁面實現頁面跳轉


40、資料庫索引的種類:
1、按照索引列值的唯一性,索引可分為唯一索引和非唯一索引
非唯一索引:B樹索引
create index 索引名 on 表名(列名) tablespace 表空間名;
唯一索引:建立主鍵或者唯一約束時會自動在對應的列上建立唯一索引
2、索引列的個數:單列索引和複合索引
3、按照索引列的物理組織方式
B樹索引
create index 索引名 on 表名(列名) tablespace 表空間名;
點陣圖索引
create bitmap index 索引名 on 表名(列名) tablespace 表空間名;
反向鍵索引
create index 索引名 on 表名(列名) reverse tablespace 表空間名;
函式索引
create index 索引名 on 表名(函式名(列名)) tablespace 表空間名;
刪除索引
drop index 索引名
重建索引
alter index 索引名 rebuild


41、索引的原理:
索引的原理大致概括為以空間換時間,資料庫在未新增索引的時候進行查詢預設的是進行全量搜尋,也就是進行全域性掃描,有多少條資料就要進行多少次查詢,然後找到相匹配的資料就把他放到結果集中,直到全表掃描完。而建立索引之後,會將建立索引的KEY值放在一個n叉樹上(BTree)。因為B樹的特點就是適合在磁碟等直接儲存裝置上組織動態查詢表,每次以索引進行條件查詢時,會去樹上根據key值直接進行搜尋,次數約為log總條數,底數為頁面儲存數,例如一個100萬資料的表,頁面儲存數為100,那麼有索引的查詢次數為3次log1000000100,但是全量搜尋為100萬次搜尋,這種方式類似於二分法,但是這個是n分法。


42、攔截器,在AOP(Aspect-Oriented Programming)中用於在某個方法或欄位被訪問之前,進行攔截然後在之前或之後加入某些操作。攔截是AOP的一種實現策略


43、過濾器是一個程式,它先於與之相關的servlet或JSP頁面執行在伺服器上。過濾器可附加到一個或多個servlet或JSP頁面上,並且可以檢查進入這些資源的請求資訊


44、攔截器與過濾器的區別 : 
     1. 攔截器是基於java的反射機制的,而過濾器是基於函式回撥。
     2. 攔截器不依賴與servlet容器,過濾器依賴與servlet容器。 
     3. 攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
     4. 攔截器可以訪問action上下文、值棧裡的物件,而過濾器不能訪問。 
     5. 在action的生命週期中,攔截器可以多次被呼叫,而過濾器只能在容器初始化時被呼叫一次


45、jvm載入class檔案過程
1.裝載:查詢和匯入class檔案;
2.連線:
      (1)檢查:檢查載入的class檔案資料的正確性;
      (2)準備:為類的靜態變數分配儲存空間;
      (3)解析:將符號引用轉換成直接引用(這一步是可選的)
3.初始化:初始化靜態變數,靜態程式碼塊。
      這樣的過程在程式呼叫類的靜態成員的時候開始執行,所以靜態方法main()才會成為一般程式的入口方法。類的構造器也會引發該動作。


46、常用的類,包,介面各寫五個
常用的類:BufferedReader BufferedWriter FileReader FileWirter String Integer 
常用的包:java.lang java.awt java.io java.util java.sql 

常用的介面:Remote List Map Document NodeList

47、ArrayList和LinkedList的大致區別如下:
1.ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構。 
2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。 

3.對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。 

48、反射的機制