一、servlet執行流程程序員
客戶端發出http請求,web服務器將請求轉發到servlet容器,servlet容器解析url並根據web.xml找到相對應的servlet,並將request、response對象傳遞給找到的servlet,servlet根據request就能夠知道是誰發出的請求,請求信息及其餘信息,當servlet處理完業務邏輯後會將信息放入到response並響應到客戶端。web
二、springMVC的執行流程ajax
springMVC是由dispatchservlet爲核心的分層控制框架。首先客戶端發出一個請求web服務器解析請求url並去匹配dispatchservlet的映射url,若是匹配上就將這個請求放入到dispatchservlet,dispatchservlet根據mapping映射配置去尋找相對應的handel,而後把處理權交給找到的handel,handel封裝了處理業務邏輯的代碼,當handel處理完後會返回一個邏輯視圖modelandview給dispatchservlet,此時的modelandview是一個邏輯視圖不是一個正式視圖,因此dispatchservlet會經過viewresource視圖資源去解析modelandview,而後將解析後的參數放到view中返回到客戶端並展示。spring
三、給定一個txt文件,如何獲得某字符串出現的次數sql
File file = new File("E://test.txt");數據庫
InputStream is = new FileInputStream(file);編程
byte b[] = new byte[1024];後端
int a = is.read(b);設計模式
String str[] = new String(b,0,a).split("");數組
int count = 0;
for(int i = 0;i<str.length;i++){
if("a".equals(str[i]))count++;
}
System.out.println(count);
四、Java設計模式思想(單列模式,工廠模式,策略模式,共23種設計模式)
a) 單例模式:單例模式核心只須要new一個實例對象的模式,好比數據庫鏈接,在線人數等,一些網站上看到的在線人數統計就是經過單例模式實現的,把一個計時器存放在數據庫或者內存中,當有人登錄的時候取出來加一再放回去,有人退出登錄的時候取出來減一再放回去,可是當有兩我的同時登錄的時候,會同時取出計數器,同時加一,同時放回去,這樣的話數據就會錯誤,因此須要一個全局變量的對象給所有人使用,只須要new出一個實例對象,這就是單例模式的應用,而且單例模式節省資源,由於它控制了實例對象的個數,並有利於gc回收。
b) 策略模式:就是將幾個類中公共的方法提取到一個新的類中,從而使擴展更容易,保證代碼的可移植性,可維護性強。好比有個需求是寫鴨子對象,鴨子有叫,飛,外形這三種方法,若是每一個鴨子類都寫這三個方法會出現代碼的冗餘,這時候咱們能夠把鴨子中的叫,飛,外形這三個方法提取出來,放到鴨父類中,讓每一個鴨子都繼承這個鴨父類,重寫這三個方法,這樣封裝的代碼可移植性強,當用戶提出新的需求好比鴨子會游泳,那麼對於咱們oo程序員來說就很是簡單了咱們只須要在鴨父類中加一個游泳的方法,讓會游泳的鴨子重寫游泳方法就能夠了。
c) 工廠模式:簡單的工廠模式主要是統一提供實例對象的引用,經過工廠模式接口獲取實例對象的引用。好比一個登錄功能,後端有三個類,controller類,interface類,實現接口的實現類。當客戶端發出一個請求,當請求傳到controller類中時,controller獲取接口的引用對象,而實現接口的實現類中封裝好了登錄的業務邏輯代碼。當你須要加一個註冊需求的時候只須要在接口類中加一個註冊方法,實現類中實現方法,controller獲取接口的引用對象便可,不須要改動原來的代碼,這種作法是的可拓展性強。
五、冒泡排序、二分查找
a) 冒泡
public static void mp(int a[]) {
int swap = 0;
for (int i = 0; i < a.length; i++) {
for (int j = i; j < a.length; j++) {
if (a[j] > a[i]) {
swap = a[i];
a[i] = a[j];
a[j] = swap;
}
}
}
System.out.println(Arrays.toString(a));
}
b)二分查找public static int ef(int a[], int tag) {
int first = 0;
int end = a.length;
for (int i = 0; i < a.length; i++) {
int middle = (first + end) / 2;
if (tag == a[middle]) {
return middle;
}
if (tag > a[middle]) {
first = middle + 1;
}
if (tag < a[middle]) {
end = middle - 1;
}
}
return 0;
}
六、對ajax的理解
a) Ajax爲異步請求,即局部刷新技術,在傳統的頁面中,用戶須要點擊按鈕或者事件觸發請求,到刷新頁面,而異步技術爲不須要點擊便可觸發事件,這樣使得用戶體驗感加強,好比商城購物車的異步加載,當你點擊商品時無需請求後臺而直接動態修改參數。
九、父類與子類之間的調用順序(打印結果)
a) 父類靜態代碼塊
b) 子類靜態代碼塊
c) 父類構造方法
d) 子類構造方法
e) 子類普通方法
f) 重寫父類的方法,則打印重寫後的方法
十、內部類與外部類的調用
a) 內部類能夠直接調用外部類包括private的成員變量,使用外部類引用的this.關鍵字調用便可
b) 而外部類調用內部類須要創建內部類對象
十一、多線程
a)一個進程是一個獨立的運行環境,能夠看作是一個程序,而線程能夠看作是進程的一個任務,好比QQ是一個進程,而一個QQ窗口是一個線程。
b)在多線程程序中,多線程併發能夠提升程序的效率,cpu不會由於某個線程等待資源而進入空閒狀態,它會把資源讓給其餘的線程。
c)用戶線程就是咱們開發程序是建立的線程,而守護線程爲系統線程,如JVM虛擬中的GC
d)線程的優先級別:每個線程都有優先級別,有限級別高的能夠先獲取CPU資源使該線程從就緒狀態轉爲運行狀態。也能夠自定義線程的有限級別
e)死鎖:至少兩個以上線程爭取兩個以上cpu資源,避免死鎖就避免使用嵌套鎖,只須要在他們須要同步的地方加鎖和避免無限等待
十二、AOP與IOC的概念(即spring的核心)
a) IOC:Spring是開源框架,使用框架可使咱們減小工做量,提升工做效率而且它是分層結構,即相對應的層處理對應的業務邏輯,減小代碼的耦合度。而spring的核心是IOC控制反轉和AOP面向切面編程。IOC控制反轉主要強調的是程序之間的關係是由容器控制的,容器控制對象,控制了對外部資源的獲取。而反轉即爲,在傳統的編程中都是由咱們建立對象獲取依賴對象,而在IOC中是容器幫咱們建立對象並注入依賴對象,正是容器幫咱們查找和注入對象,對象是被獲取,因此叫反轉。
b) AOP:面向切面編程,主要是管理系統層的業務,好比日誌,權限,事物等。AOP是將封裝好的對象剖開,找出其中對多個對象產生影響的公共行爲,並將其封裝爲一個可重用的模塊,這個模塊被命名爲切面(aspect),切面將那些與業務邏輯無關,卻被業務模塊共同調用的邏輯提取並封裝起來,減小了系統中的重複代碼,下降了模塊間的耦合度,同時提升了系統的可維護性。
1三、hibernate的核心思想
a) Hibernate的核心思想是ROM對象關係映射機制。它是將表與表之間的操做映射成對象與對象之間的操做。也就是從數據庫中提取的信息會自動按照你設置的映射要求封裝成特定的對象。因此hibernate就是經過將數據表實體類的映射,使得對對象的修改對應數據行的修改。
1四、Struts1與Struts2的區別
1五、最優刪除謀字符串的某個字符
1六、Arraylist與linkedlist的區別
a) 都是實現list接口的列表,arraylist是基於數組的數據結構,linkedlist是基於鏈表的數據結構,當獲取特定元素時,ArrayList效率比較快,它經過數組下標便可獲取,而linkedlist則須要移動指針。當存儲元素與刪除元素時linkedlist效率較快,只須要將指針移動指定位置增長或者刪除便可,而arraylist須要移動數據。
1七、mybaties與ibatise的區別
1八、數據庫優化
a) 選擇合適的字段,好比郵箱字段能夠設爲char(6),儘可能把字段設置爲notnull,這樣查詢的時候數據庫就不須要比較null值
b) 使用關聯查詢( left join on)查詢代替子查詢
c) 使用union聯合查詢手動建立臨時表
d) 開啓事物,當數據庫執行多條語句出現錯誤時,事物會回滾,能夠維護數據庫的完整性
e) 使用外鍵,事物能夠維護數據的完整性可是它卻不能保證數據的關聯性,使用外鍵能夠保證數據的關聯性
f) 使用索引,索引是提升數據庫性能的經常使用方法,它能夠令數據庫服務器以比沒有索引快的多的速度檢索特定的行,特別是對於max,min,order by查詢時,效果更明顯
g) 優化的查詢語句,絕大多數狀況下,使用索引能夠提升查詢的速度,但若是sql語句使用不恰當的話,索引沒法發揮它的特性。
1九、Tomcat服務器優化(內存,併發鏈接數,緩存)
a) 內存優化:主要是對Tomcat啓動參數進行優化,咱們能夠在Tomcat啓動腳本中修改它的最大內存數等等。
b) 線程數優化:Tomcat的併發鏈接參數,主要在Tomcat配置文件中server.xml中配置,好比修改最小空閒鏈接線程數,用於提升系統處理性能等等。
c) 優化緩存:打開壓縮功能,修改參數,好比壓縮的輸出內容大小默認爲2KB,能夠適當的修改。
20、HTTP協議
a) 經常使用的請求方法有get、post
b) Get與post的區別:傳送數據,get攜帶參數與訪問地址傳送,用戶能夠看見,這的話信息會不安全,致使信息泄露。而post則將字段與對應值封裝在實體中傳送,這個過程用戶是不可見的。Get傳遞參數有限制,而post無限制。
2一、TCP/UDP協議
2二、Java集合類框架的基本接口有哪些
a) Collection集合接口,List、set實現Collection接口,arraylist、linkedlist,vector實現list接口,stack繼承vector,Map接口,hashtable、hashmap實現map接口
2三、類加載的過程
a) 遇到一個新的類時,首先會到方法區去找class文件,若是沒有找到就會去硬盤中找class文件,找到後會返回,將class文件加載到方法區中,在類加載的時候,靜態成員變量會被分配到方法區的靜態區域,非靜態成員變量分配到非靜態區域,而後開始給靜態成員變量初始化,賦默認值,賦完默認值後,會根據靜態成員變量書寫的位置賦顯示值,而後執行靜態代碼。當全部的靜態代碼執行完,類加載纔算完成。
2四、對象的建立
a) 遇到一個新類時,會進行類的加載,定位到class文件
b) 對全部靜態成員變量初始化,靜態代碼塊也會執行,並且只在類加載的時候執行一次
c) New 對象時,jvm會在堆中分配一個足夠大的存儲空間
d) 存儲空間清空,爲全部的變量賦默認值,全部的對象引用賦值爲null
e) 根據書寫的位置給字段一些初始化操做
f) 調用構造器方法(沒有繼承)
2五、jvm的優化
a) 設置參數,設置jvm的最大內存數
b) 垃圾回收器的選擇
2六、高併發處理
a) 瞭解一點高併發性問題,好比一W人搶一張票時,如何保證票在沒買走的狀況下全部人都能看見這張票,顯然是不能用同步機制,由於synchronize是鎖同步一次只能一我的進行。這時候能夠用到鎖機制,採用樂觀鎖能夠解決這個問題。樂觀鎖的簡單意思是在不鎖定表的狀況下,利用業務的控制來解決併發問題,這樣即保證數據的可讀性,又保證保存數據的排他性,保證性能的同時解決了併發帶來的髒讀數據問題。
2七、事物的理解
a) 事物具備原子性,一致性,持久性,隔離性
b) 原子性:是指在一個事物中,要麼所有執行成功,要麼所有失敗回滾。
c) 一致性:事物執行以前和執行以後都處於一致性狀態
d) 持久性:事物多數據的操做是永久性
e) 隔離性:當一個事物正在對數據進行操做時,另外一個事物不能夠對數據進行操做,也就是多個併發事物之間相互隔離。
2八、Struts工做流程
a) 客戶端發出一個請求到servlet容器
b) 請求通過一些列過濾被filterdispatcher調用,filterdispatch經過actionMapper去找相對應的action。
c) Actionmapper找到對應的action返回給filterdispatch,dispatch把處理權交給actionproxy
d) Actionproxy經過配置文件找到對應的action類
e) Actionproxy建立一個actionIinvocation的實例處理業務邏輯