1. 程式人生 > >網際網路公司校招Java面試題總結及答案——京東

網際網路公司校招Java面試題總結及答案——京東

自己最近在為找工作做準備,總結了一下公司的面經,主要來源是牛客上17年秋招面經的一個總結帖:連結在這裡

感謝各位貢獻面經的同學以及牛妹的總結,我做的工作就是把問題收集起來,並一個個找到我認為還不錯的答案,所以這個過程中也很感謝網際網路的各個部落格的博主貢獻的相關知識。

因為才準備兩週多,總結的不全,後續會持續更新,直到明年畢業,希望能幫助到跟我一樣還在苦逼複習找工作的同學,加油,祝大家好運,也祝自己好運,希望來年春招能進入我心儀的公司。

明年就2017年了,新的一年期待努力後能有收穫。扯遠了,上主菜:

1.Spring的事務有哪些? 什麼是資料庫事務:訪問並可能改變資料庫中個數據項的一個程式執行單元。 實現方式共有兩種:編碼方式即採用註解的方式(類頭的@Transactional為預設事務配置);宣告式事務管理方式(bean)。 基於AOP技術實現的宣告式事務管理,實質就是:在方法執行前後進行攔截,然後在目標方法開始之前建立並加入事務,執行完目標方法後根據執行情況提交或回滾事務。 宣告式事務管理又有兩種方式:基於XML配置檔案的方式;另一個是在業務方法上進行@Transactional註解,將事務規則應用到業務邏輯中。

2.Java的鎖有哪幾種? 1、自旋鎖:自旋鎖是採用讓當前執行緒不停地的在迴圈體內執行實現的,當迴圈的條件被其他執行緒改變時 才能進入臨界區。 3、阻塞鎖:常用的有五個狀態的鎖都是阻塞所。 4、可重入鎖:ReentrantLock 5、讀寫鎖:寫鎖是排他鎖,讀鎖是共享鎖。 6、互斥鎖 7、悲觀鎖:在整個資料處理過程中,將資料處於鎖定狀態。 悲觀鎖的實現,往往依靠資料庫提供的鎖機制。 8、樂觀鎖:樂觀鎖假設認為資料一般情況下不會造成衝突,所以在資料進行提交更新的時候,才會正式對資料的衝突與否進行檢測,如果發現衝突了,則讓返回使用者錯誤的資訊,讓使用者決定如何去做。 公平鎖(Fair):加鎖前檢查是否有排隊等待的執行緒,優先排隊等待的執行緒,先來先得 非公平鎖(Nonfair):加鎖時不考慮排隊等待問題,直接嘗試獲取鎖,獲取不到自動到隊尾等待 18、訊號量 3.join的優勢是什麼? mysql不支援Full join。
select * from A inner join B on A.name = B.name; 在ON匹配階段 WHERE 子句的條件都不會被使用。僅在匹配階段完成以後,WHERE 子句條件才會被使用。它將從匹配階段產生的資料中檢索過濾。 cross join:交叉連線,得到的結果是兩個表的乘積,即笛卡爾積。 還有inner join,left join,right join。 4.用執行緒實現輸出1A2B3C.... 5.抽象類和介面的區別 6.JDK1.8和之前版本的區別 JDK7新特性: 1,switch中可以使用字串了 2,"<>"這個玩意兒的運用List<String> tempList = new ArrayList<>(); 即泛型例項化型別自動推斷 3. 自定義自動關閉類 4. 新增一些取環境資訊的工具方法 5. Boolean型別反轉,空指標安全,參與位運算 6. 兩個char間的equals 7,安全的加減乘除 8.數值可加下劃線 例如:int one_million = 1_000_000; 9.支援二進位制文字 例如:int binary = 0b1001_1001; 10、在try catch異常撲捉中,一個catch可以寫多個異常型別,用"|"隔開 11、jdk7之前,你必須用try{}finally{}在try內使用資源,在finally中關閉資源,不管try中的程式碼是否正常退出或者異常退出。jdk7之後,你可以不必要寫finally語句來關閉資源,只要你在try()的括號內部定義要使用的資源。 JDK8: 一、介面的預設方法
Java 8允許我們給介面新增一個非抽象的方法實現,只需要使用 default關鍵字即可,這個特徵又叫做擴充套件方法 二、Lambda 表示式 Collections.sort(names, (a, b) -> b.compareTo(a)); 三、函式式介面? 四、方法與建構函式引用 :: Java 8 在包java.time下包含了一組全新的時間日期API。 7.常用集合類 我的說的HashMap,他問為什麼不是List。 1。JSP的內建物件及方法。 在JSP中無需建立就可以使用的9個物件,它們是:request、response、session、application、out、pagecontext、config、page、exception l outJspWriter):等同與response.getWriter(),用來向客戶端傳送文字資料; 1. void clear() ; 清除輸出緩衝區的內容,但是不輸出到客戶端。 2. void clearBuffer() ;    清除輸出緩衝區的內容,並輸出到客戶端。 3. void close() ;    關閉輸出流,清除所有內容。 4. void flush() ;    輸出緩衝區裡面的資料。 5. int getBufferSize() ;    獲取以kb為單位的目前緩衝區大小。 6. int getRemaining() ;    獲取以kb為單位的緩衝區中未被佔用的空間大小。 7. boolean isAutoFlush() ;    是否自動重新整理緩衝區。 8. void newLine() ;    輸出一個換行字元。 l configServletConfig):對應“真身”中的ServletConfig,config物件用來存放Servlet初始的資料結構config 物件的主要作用是取得伺服器的配置資訊。通過 pageConext物件的 getServletConfig() 方法可以獲取一個config物件。當一個Servlet 初始化時,容器把某些資訊通過 config物件傳遞給這個 Servlet。 l page(當前JSP的真身型別):當前JSP頁面的“this”,即當前物件,page物件代表JSP物件本身,或者說代表編譯後的servlet物件,可以用( (javax.servlet.jsp.HttpJspPage)page )來取用它的方法和屬性 l pageContextPageContext):頁面上下文物件,它是最後一個沒講的域物件,pageContext物件儲存本JSP頁面相關資訊,如屬性、內建物件等pageContext 物件的作用是取得任何範圍的引數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等物件。 l exceptionThrowable):只有在錯誤頁面中可以使用這個物件,錯誤物件,只有在JSP頁面的page指令中指定isErrorPage="true"後,才可以在本頁面使用exception物件 l requestHttpServletRequest):即HttpServletRequest類的物件,request物件包含所有請求的資訊,如請求的來源、標頭、cookies和請求相關的引數值等,request物件代表了客戶端的請求資訊,主要用於接受通過HTTP協議傳送到伺服器的資料。(包括頭資訊、系統資訊、請求方式以及請求引數等)。request對 象的作用域為一次請求。 getParameterNames() 獲取客戶端提交的所有引數的名字。 l responseHttpServletResponse):即HttpServletResponse類的物件,response物件主要將JSP容器處理後的結果傳回到客戶端,response 代表的是對客戶端的響應,主要是將JSP容器處理過的物件傳回到客戶端。response物件也具有作用域,它只在JSP頁面內有效 response.sendRedirect(index.jsp) l applicationServletContext):即ServletContext類的物件,主要功用在於取得或更改Servlet的設定 setAttribute(String key,Object obj):將引數Object指定的物件obj新增到Application物件中,併為新增的物件指定一個索引關鍵字。 getAttribute(String key):獲取Application物件中含有關鍵字的物件。 l sessionHttpSession):即HttpSession類的物件,不是每個JSP頁面中都可以使用,如果在某個JSP頁面中設定<%@page session=”false”%>,說明這個頁面不能使用session,session物件表示目前個別使用者的會話狀態,用來識別每個使用者 public String getId():獲取Session物件編號。 public void setAttribute(String key,Object obj):將引數Object指定的物件obj新增到Session物件中,併為新增的物件指定一個索引關鍵字。 public Object getAttribute(String key):獲取Session物件中含有關鍵字的物件。 public Boolean isNew():判斷是否是一個新的客戶。 2.說說ArrayList(對比著LinkedList來說); 1.ArrayList是實現了基於動態陣列的資料結構,ArrayList不具有執行緒安全性,LinkedList基於連結串列的資料結構,LinkedList可以看做為一個雙向連結串列,LinkedList也是執行緒不安全的。  2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。  3.對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。 Vector是執行緒安全的 26.陣列(Array)和列表(ArrayList)有什麼區別?什麼時候應該使用Array而不是ArrayList? 下面列出了Array和ArrayList的不同點: Array可以包含基本型別和物件型別,ArrayList只能包含物件型別。 Array大小是固定的,ArrayList的大小是動態變化的。 ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。 對於基本型別資料,集合使用自動裝箱來減少編碼工作量。但是,當處理固定大小的基本資料型別的時候,這種方式相對比較慢。 27.ArrayList和LinkedList有什麼區別? ArrayList和LinkedList都實現了List介面,他們有以下的不同點: ArrayList是基於索引的資料介面,它的底層是陣列。它可以以O(1)時間複雜度對元素進行隨機訪問。與此對應,LinkedList是以元素列表的形式儲存它的資料,每一個元素都和它的前一個和後一個元素連結在一起,在這種情況下,查詢某個元素的時間複雜度是O(n)。 相對於ArrayList,LinkedList的插入,新增,刪除操作速度更快,因為當元素被新增到集合任意位置的時候,不需要像陣列那樣重新計算大小或者是更新索引。 LinkedList比ArrayList更佔記憶體,因為LinkedList為每一個節點儲存了兩個引用,一個指向前一個元素,一個指向下一個元素。 28.Comparable和Comparator介面是幹什麼的?列出它們的區別。 Java提供了只包含一個compareTo()方法的Comparable介面。這個方法可以個給兩個物件排序。具體來說,它返回負數,0,正數來表明輸入物件小於,等於,大於已經存在的物件。 Java 提供了包含compare()和equals()兩個方法的Comparator介面。compare()方法用來給兩個輸入引數排序,返回負數,0,正 數表明第一個引數是小於,等於,大於第二個引數。equals()方法需要一個物件作為引數,它用來決定輸入引數是否和comparator相等。只有當 輸入引數也是一個comparator並且輸入引數和當前comparator的排序結果是相同的時候,這個方法才返回true。 3.寫一個單例模式。我寫的是靜態內部類的單例,然後他問我這個地方為什麼用private,這兒為啥用static,這就考察你的基本功啦 類的建構函式定義為private的,保證其他類不能例項化此類,static保證每個類訪問到的都是同一個。 餓漢模式: public class Singleton{       private static Singleton instance = new Singleton();       private Singleton(){}       public static Singleton newInstance(){           return instance;       }   } 缺點,在類載入之後就被建立,即使沒有用到 懶漢模式: public class Singleton{       private static Singleton instance = null;       private Singleton(){}       public static synchronized Singleton newInstance(){           if(null == instance){               instance = new Singleton();           }           return instance;       }   }在特定時間載入,延遲載入 雙重校驗鎖: public class Singleton {       private static volatile  Singleton instance = null;       private Singleton(){}       public static Singleton getInstance() {           if (instance == null) {               synchronized (Singleton.class) {                   if (instance == null) {//2                       instance = new Singleton();                   }               }           }           return instance;       }   }執行緒安全 靜態內部類: public class Singleton{       private static class SingletonHolder{           public static Singleton instance = new Singleton();       }       private Singleton(){}       public static Singleton newInstance(){           return SingletonHolder.instance;       }   列舉: public enum Singleton{       instance;       public void whateverMethod(){}       } 很少使用 4.給了一個表三個欄位,寫SQL語句。主要考察基本SQL語句語法、聚集函式和Group By的用法
姓名 分數 課程
name score course
統計出每個學生有多少門課分數大於80分 select name,count(*) as num from student where score > 80 group by name; 5.說一說GC演算法吧。 當兩個存活區切換了幾次(HotSpot虛擬機器預設15次,用-XX:MaxTenuringThreshold控制,大於該值進入老年代)之後,仍然存活的物件(其實只有一小部分,比如,我們自己定義的物件),將被複制到老年代。Eden區與Survivor的比例較大,HotSpot預設是 8:1。在發生Minor GC時,虛擬機器會檢查每次晉升進入老年代的大小是否大於老年代的剩餘空間大小,如果大於,則直接觸發一次Full GC。 1) 從JVM記憶體模型開始說起,在紙上畫出大概的組成部分,然後說出每個組成部分的特點 執行緒隔離的有:虛擬機器棧,本地方法棧和程式計數器; 執行緒共享的有:方法區(被虛擬機器載入的類的元資料資訊:如常量、靜態變數、即時編譯器編譯後的程式碼。也成為永久代)和堆區(存放所有物件例項和陣列); 程式計數器(Program Counter Register): 每一個Java執行緒都有一個程式計數器來用於儲存程式執行到當前方法的哪一個指令,對於非Native方法,這個區域記錄的是正在執行的VM原語的地址,如果正在執行的是Natvie方法,這個區域則為空(undefined)。此記憶體區域是唯一一個在VM Spec中沒有規定任何OutOfMemoryError情況的區域。 Java虛擬機器棧: 本地變量表存放了編譯期可知的各種標量型別(boolean、byte、char、short、int、float、long、double)、物件引用(不是物件本身,僅僅是一個引用指標)、方法返回地址等。其中long和double會佔用2個本地變數空間(32bit),其餘佔用1個。 本地方法棧: 本地方法棧是為虛擬機器使用到的Native方法服務。 堆: 絕大部分的物件例項和陣列都在這裡分配。
2) 開始說說分代GC,這時就把GC演算法引入進來,再結合每個區域的特點 把Minor GC 和Full GC 引入進來 標記-清除演算法:從根節點開始標記所有可達物件,其餘沒標記的即為垃圾物件,執行清除。但回收後的空間是不連續的。 複製演算法:將記憶體分成兩塊,每次只使用其中一塊,垃圾回收時,將標記的物件拷貝到另外一塊中,然後完全清除原來使用的那塊記憶體。複製後的空間是連續的。(適用於新生代) 標記-壓縮演算法:適合用於老年代的演算法(存活物件多於垃圾物件)。標記後不復制,而是將存活物件壓縮到記憶體的一端,然後清理邊界外的所有物件。 2) 可以跟他說說垃圾回收器,Serial 、 ParNew 、CMS 等等 Serial 是單執行緒的,新生代使用的是複製演算法,老年代使用的是標記整理演算法; ParNew是Serial的多執行緒版本,Parallel Scavenge是ParNew的增強版,提供可控制的吞吐量設定; Serial Old和ParNew Old對應的是老年代的GC; CMS是一種以獲取最短回收停頓時間為目標的收集器;使用的標記清楚演算法; 初始標記,併發標記,重新標記,併發清除;
21.垃圾回收器G1,我只說了CMS CMS包含初始標記、併發標記、重新標記、併發清除4步。其中初始標記和重新標記是需要停止其他操作的,併發標記和併發清除是與應用執行緒併發執行。 但是CMS是CPU資源敏感的;無法處理浮動垃圾;CMS是基於“標記-清除”演算法的,所以有碎片。 G1是面向服務端的,特點:並行與併發、分代收集、空間整合(使用標記-整理演算法)、可預測停頓。它不再區分新老生代,而是劃分region,並通過Remembered Set來避免全堆掃描。 G1收集過程是:初始標記、併發標記、最終標記和篩選回收。除了併發標記是併發的,其他都是阻塞的。 6.說說死鎖吧,怎麼檢測死鎖? 死鎖:是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。 避免方法: (1)嚴格按照一定順序訪問資源; (2)在取得程序能夠執行的所有資源後才給程序分配資源,否則不分配; (3) 銀行家演算法: 7.說一說ThreadLocal 關鍵字吧,答出核心。還有volatile,synchronized,Lock 當使用ThreadLocal維護變數時,ThreadLocal為每個使用該變數的執行緒提供獨立的變數副本,所以每一個執行緒都可以獨立地改變自己的副本,而不會影響其它執行緒所對應的副本。 安全:使用元子類,實現併發鎖,使用執行緒安全的類,使用volatile關鍵字, 8.聚簇索引 和 非聚簇索引的區別 。下面貼一下核心內容: 建立聚族索引: CREATE CLUSTER INDEX index_name ON table_name(column_name1,column_name2,...); 儲存特點: 聚集索引:表資料按照索引的順序來儲存的,也就是說索引項的順序與表中記錄的物理順序一致。對於聚集索引,葉子結點即儲存了真實的資料行,不再有另外單獨的資料頁。 在一張表上最多隻能建立一個聚集索引,因為真實資料的物理順序只能有一種。 非聚集索引 : 表資料儲存順序與索引順序無關。對於非聚集索引,葉結點包含索引欄位值及指向資料頁資料行的邏輯指標,其行數量與資料錶行資料量一致。 9.說一說專案中Spring的IOC和AOP具體怎麼使用的。 幾乎都用的IOC(通過Spring容器進行物件的管理,以及物件之間組合關係的對映) 日誌管理是AOP 10.談一談對資料庫事務的理解。四個特性和隔離級別必須要牢記,瞭解 事務併發控制帶來的問題:髒讀、不可重複讀、更新丟失、幻讀等等 原子性,一致性,隔離性,永續性; ① Serializable (序列化):可避免髒讀、不可重複讀、幻讀的發生。   ② Repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。   ③ Read committed (讀已提交):可避免髒讀的發生。   ④ Read uncommitted (讀未提交):最低級別,任何情況都無法保證。 MySql在哪一個級別? 4種都有啊? 11.問我Hibernate的生成策略,主要說了native 、uuid 12.說說struts,我就拿出struts 1 和 struts 2 對比著說了 13.mysql 熟悉嗎?知道間隙鎖嗎?InnodB,MyISAM區別? 當我們用範圍條件而不是相等條件檢索資料,並請求共享或排他鎖時,InnoDB會給符合條件的已有資料記錄的索引項加鎖;對於鍵值在條件範圍內但並不存在 的記錄,叫做“間隙(GAP)”,InnoDB也會對這個“間隙”加鎖,這種鎖機制就是所謂的間隙鎖(Next-Key鎖)。InnoDB除了通過範圍條件加鎖時使用間隙鎖外,如果使用相等條件請求給一個不存在的記錄加鎖,InnoDB也會使用間隙鎖! Select * from  emp where empid > 100 for update; 間隙鎖的主要作用是為了防止出現幻讀,但是它會把鎖定範圍擴大,有時候也會給我們帶來麻煩。 間隙鎖,然後資料庫會向左掃描掃到第一個比給定引數小的值, 向右掃描掃描到第一個比給定引數大的值, 然後以此為界,構建一個區間, 鎖住整個區間內的資料。 InnoDB儲存引擎既支援行級鎖(row-level locking),也支援表級鎖,但預設情況下是採用行級鎖。MyISAM儲存引擎只支援表鎖。 MyISAM表鎖是deadlock free的,這是因為MyISAM總是一次獲得所需的全部鎖,要麼全部滿足,要麼等待,因此不會出現死鎖。 表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,併發度最低。 行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。 MySQL的表級鎖有兩種模式:表共享讀鎖(Table Read Lock)和表獨佔寫鎖(Table Write Lock)。MyISAM在執行查詢語句(SELECT)前,會自動給涉及的所有表加讀鎖,在執行更新操作(UPDATE、DELETE、INSERT等)前,會自動 給涉及的表加寫鎖,這個過程並不需要使用者干預,因此,使用者一般不需要直接用LOCK TABLE命令給MyISAM表顯式加鎖。 例子: Lock tables orders read local, order_detail read local; Select sum(total) from orders; Select sum(subtotal) from order_detail; Unlock tables; 上面的例子在LOCK TABLES時加了“local”選項,其作用就是在滿足MyISAM表併發插入條件的情況下,允許其他使用者在表尾併發插入記錄。MyISAM是寫優先的。 通過定期在系統空閒時段執行 OPTIMIZE TABLE語句來整理空間碎片,收回因刪除記錄而產生的中間空洞。 InnoDB與MyISAM的最大不同有兩點:一是支援事務(TRANSACTION);二是採用了行級鎖。 l  共享鎖(S):允許一個事務去讀一行,阻止其他事務獲得相同資料集的排他鎖。 l  排他鎖(X):允許獲得排他鎖的事務更新資料,阻止其他事務取得相同資料集的共享讀鎖和排他寫鎖。 另外,為了允許行鎖和表鎖共存,實現多粒度鎖機制,InnoDB還有兩種內部使用的意向鎖(Intention Locks),這兩種意向鎖都是表鎖。 l  意向共享鎖(IS):事務打算給資料行加行共享鎖,事務在給一個數據行加共享鎖前必須先取得該表的IS鎖。 l  意向排他鎖(IX):事務打算給資料行加行排他鎖,事務在給一個數據行加排他鎖前必須先取得該表的IX鎖。   共享鎖(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE。 排他鎖(X):SELECT * FROM table_name WHERE ... FOR UPDATE。 InnoDB行鎖是通過給索引上的索引項加鎖來實現的.由於MySQL的行鎖是針對索引加的鎖,不是針對記錄加的鎖,所以雖然是訪問不同行的記錄,但是如果是使用相同的索引鍵,是會出現鎖衝突的。如果不是相同的索引就不會等待。 create table tab_no_index(id int,name varchar(10)) engine=innodb; 一是MySQL的恢復是SQL語句級的,也就是重新執行BINLOG中的SQL語句。 二是MySQL的Binlog是按照事務提交的先後順序記錄的,恢復也是按這個順序進行的。 14.java的優勢 簡單(GC)、面向物件、平臺無關(JVM)、分散式、多執行緒、可靠和安全等特性 15.有沒有用過哪些集合? Collection       介面的介面     物件的集合  ├ List           子介面         按進入先後有序儲存   可重複  │├ LinkedList    介面實現類     連結串列     插入刪除   沒有同步   執行緒不安全  │├ ArrayList     介面實現類     陣列     隨機訪問   沒有同步   執行緒不安全  │└ Vector        介面實現類     陣列                  同步        執行緒安全  │   └ Stack  ├ Queue       子介面      佇列集合 └ Set            子介面       僅接收一次,並做內部排序  ├ HashSet  │   └ LinkedHashSet  插入的次序 └ TreeSet Map                介面      鍵值對的集合  ├ Hashtable                 介面實現類                同步        執行緒安全  鍵值非空 ├ HashMap                   介面實現類                沒有同步    執行緒不安全  │├ LinkedHashMap  插入次序 │└ WeakHashMap  ├ TreeMap  基於紅黑樹,可以返回子樹 排序的 └ IdentifyHashMap Collections 是針對集合類的一個幫助類。提供了一系列靜態方法實現對各種集合的搜尋、排序、執行緒完全化等操作。相當於對 Array 進行類似操作的類—— Arrays 。  16.Arraylist如何實現排序 使用Collections.sort()傳入ArrayList,會採用預設的方式進行排序(字典序) 使用Collections.sort()傳入ArrayList和自己實現Commparator介面的類的物件,實現自定義排序 使用List.sort()傳入自己實現Commparator介面的類的物件,實現自定義排序 17.Spring的annotation(註解)如何實現 Annotation是程式碼裡的特殊標記,這些標記可以在編譯、類載入、執行時被讀取,並執行相應的處理。通過使用Annotation,開發人員可以在不改變原有邏輯的情況下,在原始檔中嵌入一些補充的資訊。程式碼分析工具、開發工具和部署工具可以通過這些補充資訊進行驗證、處理或者進行部署。 4個元註解:[email protected],用於描述註解的使用範圍,@Target(ElementType.FIELD)     [email protected],用於描述註解的生命週期,@Retention(RetentionPolicy.RUNTIME)     [email protected],可以被例如javadoc此類的工具文件化 [email protected],@Inherited annotation型別是被標註過的class的子類所繼承。類並不從它所實現的介面繼承annotation,方法並不從它所過載的方法繼承annotation。 三種標準annontation型別: (1)Override,被標註的方法過載了父類的方法; (2)Deprecated (3)SuppressWarnings,此註解能告訴Java編譯器關閉對類、方法及成員變數的警告。 @Autowired顧名思義,就是自動裝配其作用是為了消除程式碼Java程式碼裡面的getter/setter與bean屬性中的property。 如果容器中有一個以上匹配的Bean,則可以通過@Qualifier註解限定Bean的名稱; @Service對應的是業務層Bean; @Repository對應資料訪問層Bean; @Configuration把一個類作為一個IoC容器,它的某個方法頭上如果註冊了@Bean,就會作為這個Spring容器中的Bean。 @Scope註解 作用域 @Lazy(true) 表示延遲初始化 @Service用於標註業務層元件、 @Controller用於標註控制層元件(如struts中的action) @Repository用於標註資料訪問元件,即DAO元件。 @Component泛指元件,當元件不好歸類的時候,我們可以使用這個註解進行標註。 @Scope用於指定scope作用域的(用在類上) @PostConstruct用於指定初始化方法(用在方法上) @PreDestory用於指定銷燬方法(用在方法上) @DependsOn:定義Bean初始化及銷燬時的順序 @Primary:自動裝配時當出現多個Bean候選者時,被註解為@Primary的Bean將作為首選者,否則將丟擲異常 @Autowired 預設按型別裝配,如果我們想使用按名稱裝配,可以結合@Qualifier註解一起使用。如下: @Autowired @Qualifier("personDaoBean") 存在多個例項配合使用

相關推薦

網際網路公司Java試題總結答案——京東

自己最近在為找工作做準備,總結了一下公司的面經,主要來源是牛客上17年秋招面經的一個總結帖:連結在這裡。 感謝各位貢獻面經的同學以及牛妹的總結,我做的工作就是把問題收集起來,並一個個找到我認為還不錯的答案,所以這個過程中也很感謝網際網路的各個部落格的博主貢獻的相關知識。

( 百度Java經)網際網路公司Java試題總結答案——百度(目前只是部分總結

1.關鍵字transient 1)一旦變數被transient修飾,變數將不再是物件持久化的一部分,該變數內容在序列化後無法獲得訪問。 2)transient關鍵字只能修飾變數,而不能修飾方法和類。注意,本地變數是不能被transient關鍵字修飾的。變數如果是使用者自定

網際網路公司Java試題總結答案——微店、去哪兒、蘑菇街

2.servlet和filter的區別。filter你在哪些地方用到過。 servlet是一種執行伺服器端的java應用程式,具有獨立於平臺和協議的特性,並且可以動態的生成web頁面,它工作在客戶端請求與伺服器響應的中間層。 1) 客戶端傳送請求至伺服器端; 2)

網際網路公司Java試題總結答案——樂視、滴滴、華為

1.新生老年代gc演算法的實現 新生代:複製; 老年代:標記整理 2.maven衝突如何解決; build-helper-maven-plugin 4.DNS均衡 智慧DNS可以通過多種負載均衡策略來將客戶端需要訪問的域名解析到不同的資料中心不同的線路上,比如通過

網際網路公司Java試題總結答案——銀科技

1.pubilc A{ public void test(){} }  public B extends A{ protected void test(){} } 這樣有問題嗎?為什麼?  錯, 2.public A{ public long test(){} }  p

網際網路公司Java試題總結答案——阿里、騰訊

部分重複的我已經去掉了,所以顯得比較少,其他請參看我的系列文章: ---------------------------------------阿里--------------------------------------------------- 1.H

2018阿里社Java試題總結(收藏明年跳槽用)

面試題 1、String和StringBuffer的區別 2、gc的概念,如果A和B物件迴圈引用,是否可以被GC? 3、Java中的記憶體溢位是如何造成的 4、String s = “123”;這個語句有幾個物件產生 5、Error、Exception和RuntimeException的區別,作用又

Java架構-大型網際網路公司必考java試題與面試技巧

為了節省大家的時間和提高學習效率,一些過時知識點和被筆試概率極低的題目不再被收錄和分析。 回答問題的思路:先正面敘述一些基本的核心知識,然後描述一些特殊的東西,最後再來一些錦上添花的東西。要注意有些不是錦上添花,而是畫蛇添足的東西,不要隨便寫上。把答題像寫書一樣寫。我要回答一個新技術的問

大型網際網路公司必考java試題與面試技巧

為了節省大家的時間和提高學習效率,一些過時知識點和被筆試概率極低的題目不再被收錄和分析。 回答問題的思路:先正面敘述一些基本的核心知識,然後描述一些特殊的東西,最後再來一些錦上添花的東西。要注意有些不是錦上添花,而是畫蛇添足的東西,不要隨便寫上。把答題像寫書一樣

大型網際網路公司必備的java試題(附答案

1、作用域public,private,protected,以及不寫時的區別 答:區別如下: 作用域 當前類 同一package 子孫類 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √

2017年網易Java試題

昨天參加了網易2017年校招面試,但是,一輪就被刷下來。仔細想想,確實自己實力不夠,今後需要更加努力!以下我是本次面試的經歷,主要講述面試題。 簡訊預約的是下午三點的面試,可是等到大概三點半才開始面試。我面試的Java開發,面試之前的幾天也抽時間看了點網上的資

兩道2017華為Java試題

void method(){ Vector vector = new Vector(); for (int i = 1; i<100; i++) { Object object = new Object();

阿里社Java試題總結

面試題1、String和StringBuffer的區別2、gc的概念,如果A和B物件迴圈引用,是否可以被GC?3、Java中的記憶體溢位是如何造成的4、String s = “123”;這個語句有幾個物件產生5、Error、Exception和RuntimeException

java試題2018答案

面向物件特徵 封裝,繼承,多型和抽象 封裝 封裝給物件提供了隱藏內部特性和行為的能力。物件提供一些能被其他物件訪問的方法來改 變它內部的資料。在 Java 當中,有 3 種修飾符: public, private 和 protected。每一種修飾符 給其他的位於同一個包或者不同包下面物件賦

58同城2018前端筆試題總結

opacity splay nbsp oms indexof init == city function 1. 用js實現一個隨機打亂數組順序的函數,要求可以設定數組中任意1個字符的位置不變,其他位置的元素位置隨機變化 思路:函數接受兩個參數:第一個參數是原數組,第二個參

Java高級工程師試題總結參考答案

排序算法 move ner 隔離級別 這一 aid 是我 分析 操作 一、面試題基礎總結 1、 JVM結構原理、GC工作機制詳解 答:具體參照:JVM結構、GC工作機制詳解 ,說到GC,記住兩點:1、GC是負責回收所有無任何引用對象的內存空間。 註意:垃圾回收回收的

Java試題總結-Day2

.title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medium; font-weight: bold; margin-top: 0 } .todo { font-famil

Java試題總結-Day4

.title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medium; font-weight: bold; margin-top: 0 } .todo { font-famil

2018年最新JAVA試題總結之資料庫(3)

轉自於:https://zhuanlan.zhihu.com/p/39804394   1、MySQL的delete與truncate區別? 回答:delete語句執行刪除的過程是每次從表中刪除一行,並且同時將該行的刪除操作作為事務記錄在日誌中儲存以便進行回滾操作,不清空AUTO_INCREM

2018年最新JAVA試題總結之基礎(1)

轉自於:https://zhuanlan.zhihu.com/p/39322967   1、JAVA中能建立volatile陣列嗎?volatile能使得一個非原子操作變成原子操作嗎? 回答: 能,Java 中可以建立 volatile 型別陣列,不過只是一個指向陣列的引用,而不是整個陣列。J