1. 程式人生 > >面試題--Java(一)

面試題--Java(一)

1.Springmvc獨有的5個註解

1)@Controller

@Controller 用於標記在一個類上,使用它標記的類就是一個SpringMVC Controller 物件。分發處理器將會掃描使用了該註解的類的方法。通俗來說,被Controller標記的類就是一個控制器,這個類中的方法,就是相應的動作。

2)@RequestMapping

既可以作用在類級別,也可以作用在方法級別。當它定義在類級別時,標明該控制器處理所有的請求都被對映到 /favsoft 路徑下。@RequestMapping中可以使用 method 屬性標記其所接受的方法型別,如果不指定方法型別的話,可以使用 HTTP GET/POST 方法請求資料,但是一旦指定方法型別,就只能使用該型別獲取資料。

3)@PathVariable

獲取路徑變數 與requestMapping(“{value}”)配合使用

4)@RequestParam

獲取攜帶引數 與requestMapping(“{value}”)配合使用

5)@RequestBody

獲取請求體

6)@ResponseBody

將返回結果作為響應體

7)@RestController

Responbody + Controller

8)@HttpEntity

HttpEntity除了能獲得request請求和response響應之外,它還能訪問請求和響應頭

9)@ModelAttribute

在hibernate裡也有

2.IOC容器的理解

IoC—Inversion of Control,即“控制反轉”,不是什麼技術,是一種設計思想

IoC意味著將設計好的物件交給容器控制,而不是傳統的在你的物件內部直接控制。

●誰控制誰,控制什麼:傳統Java SE程式設計,我們直接在物件內部通過new進行建立物件,是程式主動去建立依賴物件;而IoC是有專門一個容器來建立這些物件,即由Ioc容器來控制物件的建立;誰控制誰?當然是IoC 容器控制了物件;控制什麼?那就是主要控制了外部資源獲取(不只是物件包括比如檔案等)。

●為何是反轉,哪些方面反轉了:有反轉就有正轉,傳統應用程式是由我們自己在物件中主動控制去直接獲取依賴物件,也就是正轉;而反轉則是由容器來幫忙建立及注入依賴物件;為何是反轉?因為由容器幫我們查詢及注入依賴物件,物件只是被動的接受依賴物件,所以是反轉;哪些方面反轉了?依賴物件的獲取被反轉了。

3.請談談你對AOP的理解。

AOP:Aspect Oriented Programming 面向切面程式設計。它是為解耦而生的。

如果多個類中出現相同的程式碼,應該考慮定義一個共同的抽象類,將這些相同的程式碼提取到抽象類中。

如果我們需要日誌記錄,它在方法呼叫前啟動,在方法呼叫返回前結束,並在內部記錄結果資訊。(模板抽象設計模式)

Spring中AOP代理由Spring的IOC容器負責生成、管理,其依賴關係也由IOC容器負責管理。因此,AOP代理可以直接使用容器中的其它bean例項作為目標,這種關係可由IOC容器的依賴注入提供。

Spring建立代理的規則為:

1、預設使用Java動態代理來建立AOP代理,這樣就可以為任何介面例項建立代理了
2、當需要代理的類不是代理介面的時候,Spring會切換為使用CGLIB代理,也可強制使用CGLIB

4.請說說HTTP協議中GET請求和POST請求的區別。

HTTP全稱為Hyper Text Transfer Protocol,瀏覽器和伺服器的互動是通過HTTP協議執行的,而GET和POST也是HTTP協議中的兩種方法。GET,POST,PUT,DELETE

GET:從伺服器上獲取資料,也就是所謂的查,僅僅是獲取伺服器資源,不進行修改。

GET互動方式是安全的,GET互動方式是從伺服器上獲取資料,而並非修改資料

GET互動方式是冪等的,對同一個URL的多個請求,得到的結果是相同的。就像資料庫查詢,不同的資料庫連線對同一個資料庫表用相同條件查詢時,得到的結果也是一樣的
POST:向伺服器提交資料,這就涉及到了資料的更新,也就是更改伺服器的資料。

涉及到資訊的修改,就會有安全問題 /post不是冪等的 delete和put是冪等的

一般的POST互動是必須要用到表單的,但是表單提交的預設方法是GET,如果改為POST方式,就需要修改表單提交時的Method。

GET方式:

1、GET方式是以實體的方式得到由請求URL所指定資源的資訊,如果請求URL只是一個數據產生過程,那麼最終要在響應實體中返回的是處理過程的結果所指向的資源,而不是處理過程的描述。
   也就是說,GET的到的資訊是資源,而不是資源的處理過程。
2、請的求的資料會附加在URL之後,以?分隔URL和傳輸資料,多個引數用&連線。
   URL編碼格式採用的是ASCII編碼,而不是Unicode,即所有的非ASCII字元都要編碼之後再傳輸。
3、因為URL的長度限制,GET方式傳輸的資料大小有所限制,傳送的資料量不超過2KB。
4、GET方式伺服器端用Request.QueryString獲取變數的值。
5、GET方式傳輸的引數安全性低,因為傳輸的資料會顯示在請求的URL中。

POST方式:

1、用來向目的伺服器發出請求,要求它接收被附在請求後的實體,並把它當做請求佇列中請求URL所指定資源的附加新子項。
2、POST方式將表單內各個欄位和內容放置在HTML HEADER中一起傳送到Action屬性所指定的URL地址,使用者是看不到這個過程的。
3、POST方式傳送的資料量比較大,一般被預設為沒有限制,但是根據IIS的配置,傳輸量也是不同的。
4、POST方式在伺服器端用Request.Form獲取提交的資料。
5、POST方式傳輸的資料安全性較高,因為資料傳輸不是明顯顯示的。

5.請介紹一下Cookie和Session的工作原理。

session儲存在伺服器,客戶端不知道其中的資訊;cookie儲存在客戶端,伺服器能夠知道其中的資訊。

session預設需要藉助cookie才能正常工作。如果客戶端完全禁止cookie,session這種方法將失效。

session在使用者會話結束後就會關閉了,但cookie因為儲存在客戶端,可以長期儲存

簡單的說,當你登入一個網站的時候,如果web伺服器端使用的是session,那麼所有的資料都儲存在伺服器上面,客戶端每次請求伺服器的時候會發送 當前會話的sessionid,伺服器根據當前sessionid判斷相應的使用者資料標誌,以確定使用者是否登入,或具有某種許可權。由於資料是儲存在伺服器上面,所以你不能偽造,但是如果你能夠獲取某個登入使用者的sessionid,用特殊的瀏覽器偽造該使用者的請求也是能夠成功的。sessionid是伺服器和客戶端連結時候隨機分配的,一般來說是不會有重複,但如果有大量的併發請求,也不是沒有重複的可能性,我曾經就遇到過一次。登入某個網站,開始顯示的是自己的資訊,等一段時間超時了,一重新整理,居然顯示了別人的資訊。
.
如果瀏覽器使用的是 cookie,那麼所有的資料都儲存在瀏覽器端,比如你登入以後,伺服器設定了 cookie使用者名稱(username),那麼,當你再次請求伺服器的時候,瀏覽器會將username一塊傳送給伺服器,這些變數有一定的特殊標記。服 務器會解釋為 cookie變數。所以只要不關閉瀏覽器,那麼 cookie變數便一直是有效的,所以能夠保證長時間不掉線。

6.Linux系統中如何通過命令檢視程序?如何在這個基礎上檢視具體某一個程序?

ps -aux 顯示所有程序  ps -ef

Ps -aux |grep mysql 檢視某個程序

netstat -anp|grep 3306  檢視程序id對應的程式

7.Linux系統中如何對一個tar包解壓縮?

壓縮  tar -zcvf [壓縮包檔名] [要壓縮的內容]

解壓縮:解壓到當前目錄下

tar -zxvf [壓縮包檔名]

unzip [壓縮包檔名]

8.請介紹一下資料庫事務的ACID屬性。

1)原子性(Atomicity)

所謂原子性就是將一組操作作為一個操作單元,是原子操作,即要麼全部執行,要麼全部不執行。不可再分

2)一致性(Consistency)

事務的一致性指的是在一個事務執行之前和執行之後資料庫都必須處於一致性狀態。如果事務成功地完成,那麼系統中所有變化將正確地應用,系統處於有效狀態。如果在事務中出現錯誤,那麼系統中的所有變化將自動地回滾,系統返回到原始狀態。

3)隔離性(Isolation)

隔離性指併發的事務是相互隔離的。即一個事務內部的操作及正在操作的資料必須封鎖起來,不被其它企圖進行修改的事務看到。

4)永續性(Durability)

永續性是指一個事務一旦被提交,它對資料庫中資料的改變就是永久性的,接下來的其他操作和資料庫故障不應該對其有任何影響。即一旦一個事務提交,DBMS(Database Management System)保證它對資料庫中資料的改變應該是永久性的,永續性通過資料庫備份和恢復來保證。

9.請說說List集合和Set集合的區別。

1.List,Set都是繼承自Collection介面,Map則不是

2.List特點:元素有放入順序,元素可重複
   Set特點:元素無放入順序,元素不可重複,重複元素會覆蓋掉
   注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的,加入Set的Object必須定義equals()方法,
   另外list支援for迴圈,也就是通過下標來遍歷,也可以用迭代器,但是set只能用迭代,因為他無序,無法用下標來取得想要的值。

3.SetList對比:

Set:檢索元素效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變。

List:和陣列類似,List可以動態增長,查詢元素效率高,插入刪除元素效率低,因為會引起其他元素位置改變。

4.Map適合儲存鍵值對的資料

5.執行緒安全集合類與非執行緒安全集合類

LinkedList、ArrayList、HashSet是非執行緒安全的,Vector是執行緒安全的;

HashMap是非執行緒安全的,HashTable是執行緒安全的;

StringBuilder是非執行緒安全的,StringBuffer是執行緒安全的。

10.Maven工程的座標由哪三個部分構成?Maven座標的用途是什麼?

1、groupId

顧名思義,這個應該是公司名或是組織名。一般來說groupId是由三個部分組成,每個部分之間以”.”分隔,第一部分是專案用途,比如用於商業的就是”com”,用於非營利性組織的就是”org”;第二部分是公司名,比如”tengxun”、”baidu”、”alibaba”;第三部分是你的專案名

2、artifactId

可以認為是Maven構建的專案名,比如你的專案中有子專案,就可以使用”專案名-子專案名”的命名方式

3、version

版本號,SNAPSHOT意為快照,說明該專案還在開發中,是不穩定的版本。在Maven中很重要的一點是,groupId、artifactId、version三個元素生成了一個Maven專案的基本座標,這非常重要,我在使用和研究Maven的時候多次感受到了這點。

  0.0.1:版本號
      大版本(主版本).中版本(分支版本).小版本(迭代版本)
      大版本:(專案架構發生變化,設計發生變化,模組有重新組織)
      中版本:(有模組上的修改,新增了功能)
      小版本:(解決了很多bug以後,升級一下小版本);    
  RELEASE:正式釋出版(經過測試基本沒有bug,可以穩定使用)
  SNAPSHOT:快照版;(這是一個非常不穩定的版本,經常發生變化)
  Alpha:(內測版)
  Beta:(公測版)

相關推薦

試題--Java

1.Springmvc獨有的5個註解 1)@Controller @Controller 用於標記在一個類上,使用它標記的類就是一個SpringMVC Controller 物件。分發處理器將會掃描使用了該註解的類的方法。通俗來說,被Contr

java經典試題總結

Java經典面試題總結繼續更新,有需要的小夥伴可以路過不要錯過了!看上一篇面試題總結的反響還是很不錯的,就繼續更新了,也非常感謝各位小夥伴的持續關注…… 這次更偏基礎一些! 1、String 和StringBuffer 的區別? 答:JAVA 平臺提供了兩個類:String 和StringBuffer,

java試題集錦

  第一,談談final, finally, finalize的區別。 最常被問到。 final:可以修飾非抽象類和非抽象類成員方法和變數     final類不能被繼承,沒有子類,final類中的方法預設是final     被宣告為final的變數必須在申明

超詳細的Java試題總結Java基礎知識篇

福利:看本文之前,推薦給大家一個阿里雲雙11活動,真的非常非常非常推薦,對於新人福利,阿里雲這次真的是下血本了,建議阿里雲新人一定一定一定不要錯過。如果覺得這單純是廣告的話(阿里雲肯找我做廣告就好了,嘿嘿),你可以直接跳過看正文。 阿里雲雙11最新活動(僅限阿

Java試題集錦

四. 如果類a繼承類b,實現介面c,而類b和介面c中定義了同名變數,請問會出現什麼問題? interface      A {        int x = 0; } class B {        int x =1; } class C extends B implements A {        p

Java公司試題集錦

如有錯誤,望各位指正 本人會做更新 我看到了網上流傳的多個《Java面試題大全》,認真的閱讀了以後發現裡面的很多題目是重複且無用的,而且還有很多的參考答案是錯誤的,於是我花了一個月時間對這個所謂的《Java面試大全》進行了整理修改,在整理過程中,參照了當時J

Java試題解析

第一篇 tput java開發 java基礎 director 路徑 run 字面值 記錄 本文是面試題目系列的第一篇,題目主要來自 GitChat 上一個課程,在此特別記錄自身想的答案和在網上查詢的結果,分享出來,大家共同學習。如果有不對的地方,歡迎大家指出。 Jav

PHP試題集錦

day clu 數據庫緩存 優勢 腳本 源代碼 任務 頁面 文件 1、用PHP打印出前一天的時間格式是2017-5-10 22:21:21(2分) Answer: $a = date("Y-m-d H:i:s", strtotime("-1 day")); pr

試題18:在O(1)時間刪除鏈表結點

else mil ptr font 復雜度 節點 else if 開始 nes // 面試題18(一):在O(1)時間刪除鏈表結點 // 題目:給定單向鏈表的頭指針和一個結點指針,定義一個函數在O(1)時間刪除該 // 結點。鏈表結點與函數的定義如下: // struct

試題總結、TCP協議

宣告:本文主要探討當TCP協議出現在面試筆試場合可能會涉及的問題,每一個知識點討論力求簡潔,便於記憶,但討論深度有限,如要深入研究可點選參考連結,希望對正在找工作的同學有點幫助。 一、TCP協議簡介 一般問到TCP協議的時候 最常見的是TCP連線建立和斷開的過程,也就是三次握手和四次揮手,兩

試題55:二叉樹的深度

一、題目 輸入一棵二叉樹的根結點,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 二、關鍵 三、解釋 四、程式碼 #include <cstdio> #include "..\Utilities\

試題58:翻轉單詞順序簡單

一、題目 輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。為簡單起見,標點符號和普通字母一樣處理。例如輸入字串"I am a student. ",則輸出"student. a am I"。 二、關鍵 1.反轉兩次。第一次:“.tneduts a ma

試題57:和為s的兩個數字

一、題目 輸入一個遞增排序的陣列和一個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對數字的和等於s,輸出任意一對即可。 二、關鍵 1.兩個指標,一個指向頭一個指向尾,按照規則向中間靠攏。 三、解釋 四、程式碼 #include <cstdio&

初級程式設計師試題總結

本人將這幾天面試的題目總結一些,如果出現錯誤請指正,謝謝。 1,談一談spring。 答:spring是為java程式開發提供的綜合性的基礎java開發平臺,它提供了從表現層SpringMVC到業務層Spring再到持久層springData的一套完整的解決

C++ 試題彙總

1. C++面向物件特點。 2. 多型、虛擬函式(實現原理)、純虛擬函式、抽象類及虛基類 3. 什麼是引用?引用使用時需要注意哪些? 4. 將引用作為函式引數有哪些特點? 5. 什麼時候使用常引用?將引用作為函式返回值型別的格式、好處及需要遵循的規則? 6. 引用和指標的區別? 7. 過載、

html+css試題集錦

1、對WEB標準以及W3C的理解與認識? web標準簡單來說可以分為結構、表現和行為,其中結構主要是有HTML標籤組成,或者通俗點來講,在頁面Body中我們寫入的標籤都是為了頁面的結構,表現指css樣式表,通過css可使頁面的結構標籤更具美感,行為是指頁面和使用者具有一定的

Android--試題整理

1. 什麼是Activity? 四大元件之一,一般的,一個使用者互動介面對應一個activity setContentView() ,// 要顯示的佈局 , activity 是Context的子類,同時實現了window.callback和keyevent.callb

筆試試題總結--- 軟體開發

1.Huffman編碼中的貪心策略,該部分所需要的計算時間。 首先,要理解Huffman編碼中那部分用到了貪心演算法,貪心的策略,這樣才能求所需的計算時間。 哈夫曼編碼演算法:每次將集合中兩個權值最小

Hadoop試題整理

        lucene是支援隨機讀寫的,而hdfs只支援隨機讀。但是HBase可以來補救。HBase提供隨機讀寫,來解決Hadoop不能處理的問題。HBase自底層設計開始即聚焦於各種可伸縮性問題:表可以很“高”,有數十億個資料行;也可以很“寬”,有數百萬個列;水平分割槽並在上千個普通商用機節點上自動複

嵌入式試題整理

自己整理了一些來自各個公司嵌入式行業的面試的題目。答案在後面(是自己寫的答案,不敢保證100%正確,哈哈,能力有限)。題目都是近兩年的公司面試題 關鍵字volatile有什麼含義?並列舉一個例子。 嵌入式系統總是要使用者變數或暫存器進行位操作。給定一個整變數a,寫兩段