小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

2017年阿里內推一面面經(不斷更新)

 SheldonDemo 2017-04-05

在3月1號投完簡歷,做好測評以后,我是一直等啊等,始終期待著一面的到來。

好不容易在3月8號這天中午12點10左右接到了來自阿里的面試電話。

剛開始,我是一臉的懵逼啊,面試官問我:“你是不是面過了???”我是一臉黑臉問號.jpg。Excuse me?在我一番解釋后,終于進入了正題。


首先還是自我介紹。然后下面是問題清單:

1、平時在項目中主要負責哪塊技術???(我回答數據庫方面的代碼)好,那么請問,你所知道的數據庫方面所需要注意的地方有什么?怎么優(yōu)化數據庫?

引申出來以后,他又我問了我關于left join與right join的區(qū)別,(我回答了出來),然后,他又問我那inner join呢?(我當時是忘記了,一臉懵逼啊,絕望放棄回答)?用很多join好嗎,有什么 缺點?(效率降低)

這里寫圖片描述

  • 關于索引:

    • 應該建索引的字段:
      1.經常作為查詢條件的字段
      2.外鍵
      3.經常需要排序的字段
      4.分組排序的字段

    • 應該少建或者不建索引的字段有:
      1.表記錄太少
      2.經常需要插入,刪除,修改的表,
      3.表中數據重復且分布平均的字段


2、HTTP的特點,TCP/UDP特點以及區(qū)別?

1.支持客戶/服務器模式。

2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規(guī)定了客戶與服務器聯(lián)系的類型不同。由于HTTP協(xié)議簡單,使得HTTP服務器的程序規(guī)模小,因而通信速度很快。

3.靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。

4.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節(jié)省傳輸時間。

5.無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對于事務處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。


3、HashMap、HashTable、ConCurrentHasgMap的區(qū)別以及實現原理?
ConCurrentHasgMap調用get()方法的時候有鎖嗎?

對于put和remove操作,是使用鎖同步來進行的,不過是用的ReentrantLock而不是synchronized,性能上要更高一些。它們的實現前文都已經提到過,就沒什么可分析的了。

友情鏈接:ConCurrentHasgMap源碼分析

我們還需要知道一點,ConcurrentHashMap的迭代器不是Fast-Fail的方式,所以在迭代的過程中別其他線程添加/刪除了元素,不會拋出異常,也不能體現出元素的改動。但也沒有關系,因為每個entry的成員除了value都是final修飾的,暴漏出去也不會對其他元素造成影響。

  • 為什么hashmap擴容是是擴大成原來的2倍,而不是3倍?

友情鏈接:深入理解HashMap(及hash函數的真正巧妙之處)


4、怎么實現并發(fā)編程?請詳細描述?

鎖機制(Lock)、CAS無鎖算法、Synchronized區(qū)別


5、類加載機制(如果自己寫幾個Jar包,應該放哪里?)


6、String、StringBuffer、StringBuilder的區(qū)別?

如果StringBuilder后增加一個字符串常量,并且這時候是多線程運行,那這時候StringBuilder是線程安全的嗎?

字符串常量就是不能改變該對象,而后者是可是改變的字符串對象,他不像String一樣,需要每次創(chuàng)建,后兩者是在原有的字符串對象進行操作的。


7、JDK7、8的區(qū)別?

在JMM方面的區(qū)別:

永久代
在JDK8之前的HotSpot實現中,類的元數據如方法數據、方法信息(字節(jié)碼,棧和變量大?。?、運行時常量池、已確定的符號引用和虛方法表等被保存在永久代中,32位默認永久代的大小為64M,64位默認為85M,可以通過參數-XX:MaxPermSize進行設置,一旦類的元數據超過了永久代大小,就會拋出OOM異常。

虛擬機團隊在JDK8的HotSpot中,把永久代從Java堆中移除了,并把類的元數據直接保存在本地內存區(qū)域(堆外內存),稱之為元空間。

這樣做有什么好處?
有經驗的同學會發(fā)現,對永久代的調優(yōu)過程非常困難,永久代的大小很難確定,其中涉及到太多因素,如類的總數、常量池大小和方法數量等,而且永久代的數據可能會隨著每一次Full GC而發(fā)生移動。

而在JDK8中,類的元數據保存在本地內存中,元空間的最大可分配空間就是系統(tǒng)可用內存空間,可以避免永久代的內存溢出問題,不過需要監(jiān)控內存的消耗情況,一旦發(fā)生內存泄漏,會占用大量的本地內存。

ps:JDK7之前的HotSpot,字符串常量池的字符串被存儲在永久代中,因此可能導致一系列的性能問題和內存溢出錯誤。在JDK8中,字符串常量池中只保存字符串的引用。


8、JMM在初始化堆內存時,新生代與老年代的默認比例是多少?

永久代不屬于堆內存,堆內存只包含新生代和老年代。

默認的,新生代 ( Young ) 與老年代 ( Old ) 的比例的值為 1:2 ( 該值可以通過參數 –XX:NewRatio 來指定 ),即:新生代 ( Young ) = 1/3 的堆空間大小。
老年代 ( Old ) = 2/3 的堆空間大小。其中,新生代 ( Young ) 被細分為 Eden 和 兩個 Survivor 區(qū)域,這兩個 Survivor 區(qū)域分別被命名為 from 和 to,以示區(qū)分。
默認的,Edem : from : to = 8 : 1 : 1 ( 可以通過參數 –XX:SurvivorRatio 來設定 ),即: Eden = 8/10 的新生代空間大小,from = to = 1/10 的新生代空間大小。
JVM 每次只會使用 Eden 和其中的一塊 Survivor 區(qū)域來為對象服務,所以無論什么時候,總是有一塊 Survivor 區(qū)域是空閑著的。
因此,新生代實際可用的內存空間為 9/10 ( 即90% )的新生代空間。

  • Java內存模型的描述?

9、Spring中控制反轉定義?相比于創(chuàng)建對象的好處?AOP編程的優(yōu)點?

友情鏈接:三大框架的原理及優(yōu)缺點

原來我們的程序我們控制的是具體的實現,寫程序直接寫實現,現在我們控制的是它的接口它的抽象,原來我們依賴的是它的實現,現在我們依賴的是它的抽象。從具體的實現反轉到抽象的概念上,我們針對的是接口編程。

1)降低組件之間的耦合度,實現軟件各層之間的解耦。
Controller——>Service——>DAO
2)可以使用容器提供的眾多服務,如:事務管理服務、消息服務等等。當我們使用容器管理事務時,開發(fā)人員就不再需要手工控制事務.也不需處理復雜的事務傳播。
3)容器提供單例模式支持,開發(fā)人員不再需要自己編寫實現代碼。
4)容器提供了AOP技術,利用它很容易實現如權限攔截、運行期監(jiān)控等功能。
5)容器提供的眾多輔作類,使用這些類能夠加快應用的開發(fā),如: JdbcTemplate、 HibernateTemplate。
6)Spring對于主流的應用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,這樣更便于應用的開發(fā)。
7) 使用spring容器可以提供的服務:事務管理服務,JMS服務,Spring Core核心服務,持久化服務等。
8)如果使用Spring, 我們就不再需要手工控制事務,例如在Hibernate中控制事務的語句 session.beginTransaction();session.getTransaction().commit();
9)使用Spring,不再需要我們處理復雜的事務傳播行為。


10、SpringMVC中動態(tài)代理的實現機制,源碼?

友情鏈接:Spring AOP動態(tài)代理原理與實現方式 (轉)

友情鏈接:Java的動態(tài)代理機制和Spring的實現方式

友情鏈接:Java中動態(tài)代理實現機制


11、讀過哪些源碼,請詳細描述一個你最熟悉的?(我回答ArrayList)

12、JVM虛擬機?請詳細描述?

13、Java GC回收機制?請詳細描述?

14、問了兩道智力題?。。。?!

(1)有8個產品,其中有一個次品(有可能偏重,有可能偏輕),那么如何用天平秤三次找出那個次品?

(2)忘記了。。。。關于買賣問題

15、看過GitHub上的開放源碼嗎(比如阿里,騰訊優(yōu)秀團隊的)?

16、使用過哪些代碼管理工具?(Git,Maven)熟練使用嗎?會不會使用GitHub上傳代碼?

17、使用過哪些寫代碼的工具?(Myeclipse和IDE),列出你常用的快捷鍵?

18、學習編程的方法、渠道?(看博客,網站)?上哪些網站?

19、說說自己的優(yōu)缺點?學習時間的分配?

20、漏了一個問題,怎么實現讓兩個線程交替執(zhí)行?(用代碼實現?)

一般來說線程鎖可以用:Synchronized、Lock。
這個題目的難點不在于同步塊,而在于怎么樣設計這個兩個線程的交替實現。由于線程爭用cpu的隨機性,就需要A線,B線程執(zhí)行,在B執(zhí)行完一次進入等待之前喚醒A,如此往復,那么這里就要用上notify和wait了。

public class Thread1 { public static void main(String args[]) { final Bussiness business = new Bussiness(); Thread a=new Thread(new Runnable(){ @Override public void run(){ business.SubThread(); } }); Thread b=new Thread((new Runnable() { @Override public void run() { business.MainThread(); } })); a.start(); b.start(); } } class Bussiness { private static Object LOCK = new Object(); volatile boolean bShouldSub = true;//這里相當于定義了控制該誰執(zhí)行的一個信號燈 public void MainThread() { for (int i = 0; i < 50; i ) { synchronized (LOCK) {//notify和wait的對象一定要和synchronized的對象保持一致 for (int j = 0; j < 10; j ) { System.out.println(Thread.currentThread().getName() ' MainThread:i=' i ',j=' j); } if (bShouldSub) { bShouldSub = false; LOCK.notify(); if(i<49){ try { LOCK.wait(); }catch (InterruptedException e) { // TODO Auto-generatedcatch block e.printStackTrace(); } } } } } } public void SubThread() { for (int i = 0; i < 50; i ) { synchronized (LOCK){ for (int j = 0; j < 5; j ) { System.out.println(Thread.currentThread().getName() ' SubThread:i=' i ',j=' j); } if (!bShouldSub) { bShouldSub = true; LOCK.notify(); if(i<49){ try { LOCK.wait(); } catch (InterruptedException e) { // TODO Auto-generatedcatch block e.printStackTrace(); } } } } } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73

各種容器的初始化長度是多少?

使用ArrayList初始化時注意事項?(自動擴充機制方面,原理實現)?

好了,一面到此結束,歷時一個半小時,淚崩,懵逼?。P鍵下午還有課!??!遲到了!?。。?/p>

總結一點,閱讀源碼很重要?。⊿pring SpringMVC Mybatis)


上面題目的部分答案,歡迎前往歷年阿里面試題匯總(2017年不斷更新中)、各大公司Java后端開發(fā)面試題總結查閱

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多