|
在3月1號投完簡歷,做好測評以后,我是一直等啊等,始終期待著一面的到來。 好不容易在3月8號這天中午12點10左右接到了來自阿里的面試電話。 剛開始,我是一臉的懵逼啊,面試官問我:“你是不是面過了???”我是一臉黑臉問號.jpg。Excuse me?在我一番解釋后,終于進入了正題。 首先還是自我介紹。然后下面是問題清單: 1、平時在項目中主要負責哪塊技術???(我回答數據庫方面的代碼)好,那么請問,你所知道的數據庫方面所需要注意的地方有什么?怎么優(yōu)化數據庫? 引申出來以后,他又我問了我關于left join與right join的區(qū)別,(我回答了出來),然后,他又問我那inner join呢?(我當時是忘記了,一臉懵逼啊,絕望放棄回答)?用很多join好嗎,有什么 缺點?(效率降低)
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ū)別以及實現原理? 對于put和remove操作,是使用鎖同步來進行的,不過是用的ReentrantLock而不是synchronized,性能上要更高一些。它們的實現前文都已經提到過,就沒什么可分析的了。 我們還需要知道一點,ConcurrentHashMap的迭代器不是Fast-Fail的方式,所以在迭代的過程中別其他線程添加/刪除了元素,不會拋出異常,也不能體現出元素的改動。但也沒有關系,因為每個entry的成員除了value都是final修飾的,暴漏出去也不會對其他元素造成影響。
友情鏈接:深入理解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中,把永久代從Java堆中移除了,并把類的元數據直接保存在本地內存區(qū)域(堆外內存),稱之為元空間。 這樣做有什么好處? 而在JDK8中,類的元數據保存在本地內存中,元空間的最大可分配空間就是系統(tǒng)可用內存空間,可以避免永久代的內存溢出問題,不過需要監(jiān)控內存的消耗情況,一旦發(fā)生內存泄漏,會占用大量的本地內存。 ps:JDK7之前的HotSpot,字符串常量池的字符串被存儲在永久代中,因此可能導致一系列的性能問題和內存溢出錯誤。在JDK8中,字符串常量池中只保存字符串的引用。 8、JMM在初始化堆內存時,新生代與老年代的默認比例是多少? 永久代不屬于堆內存,堆內存只包含新生代和老年代。 默認的,新生代 ( Young ) 與老年代 ( Old ) 的比例的值為 1:2 ( 該值可以通過參數 –XX:NewRatio 來指定 ),即:新生代 ( Young ) = 1/3 的堆空間大小。
9、Spring中控制反轉定義?相比于創(chuàng)建對象的好處?AOP編程的優(yōu)點? 友情鏈接:三大框架的原理及優(yōu)缺點 原來我們的程序我們控制的是具體的實現,寫程序直接寫實現,現在我們控制的是它的接口它的抽象,原來我們依賴的是它的實現,現在我們依賴的是它的抽象。從具體的實現反轉到抽象的概念上,我們針對的是接口編程。 1)降低組件之間的耦合度,實現軟件各層之間的解耦。 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。 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();
}
}
}
}
}
}
}
各種容器的初始化長度是多少? 使用ArrayList初始化時注意事項?(自動擴充機制方面,原理實現)? 好了,一面到此結束,歷時一個半小時,淚崩,懵逼?。P鍵下午還有課!??!遲到了!?。。?/p> 總結一點,閱讀源碼很重要?。⊿pring SpringMVC Mybatis)
|
|
|
來自: SheldonDemo > 《Java》