網際網路公司校招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。
姓名 | 分數 | 課程 |
name | score | course |
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