找實習遇到的面試題

一、關於簡歷:
(一)愛奇藝
1、談一談項目,項目中使用的集合類,是否使用線程?
2、是否使用過Linux?
(二)網易有道
1、Hibernate跟MyBatis有什麼不同,各有什麼優缺點?
答:Hibernate的O/R Mapping實現了POJO 和數據庫表之間的映射,以及SQL 的自動生成和執行。程序員往往只需定義好了POJO 到數據庫表的映射關係,即可通過Hibernate 提供的方法完成持久層操作。程序員甚至不需要對SQL 的熟練掌握, Hibernate/OJB 會根據制定的存儲邏輯,自動生成對應的SQL 並調用JDBC 接口加以執行。
MyBatis 的着力點,則在於POJO 與SQL之間的映射關係。然後通過映射配置文件,將SQL所需的參數,以及返回的結果字段映射到指定POJO。 相對Hibernate“O/R”而言,MyBatis 是一種“Sql Mapping”的ORM實現。
在擴展性方面:
Hibernate與具體數據庫的關聯只需在XML文件中配置即可,所有的HQL語句與具體使用的數據庫無關,移植性很好。MyBatis項目中所有的SQL語句都是依賴所用的數據庫的,所以不同數據庫類型的支持不好。
總結:Mybatis優勢:
MyBatis可以進行更爲細緻的SQL優化,可以減少查詢字段。
MyBatis容易掌握,而Hibernate門檻較高。
Hibernate優勢:
Hibernate的DAO層開發比MyBatis簡單,Mybatis需要維護SQL和結果映射。
Hibernate對對象的維護和緩存要比MyBatis好,對增刪改查的對象的維護要方便。
Hibernate數據庫移植性很好,MyBatis的數據庫移植性不好,不同的數據庫需要寫不同SQL。
Hibernate有更好的二級緩存機制,可以使用第三方緩存。MyBatis本身提供的緩存機制不佳。
2、在做項目的過程中遇到過什麼問題,怎麼克服的?
3、MySQL跟PostgreSQL有什麼不同?
4、項目中MySQL存儲的數據量有多大?
5、Hibernate中的session是什麼?
答:在Hibernate的設計者的頭腦中,他們將session看作介於數據連接與事務管理一種中間接口。我們可以將session想象成一個持久對象 的緩衝區,Hibernate能檢測到這些持久對象的改變,並及時刷新數據庫。我們有時也稱Session是一個持久層管理器,因爲它包含這一些持久層相 關的操作,諸如存儲持久對象至數據庫,以及從數據庫從獲得它們。
另外,session也是hibernate的一級緩存。
(三)搜狗
1、瞭解多線程嗎?線程有哪幾種創建方式?寫一個多線程的例子
2、瞭解I/O嗎,寫一個關於I/O的例子
(四)今日頭條
1、TCP的三次握手和四次揮手
http://blog.csdn.net/whuslei/article/details/6667471
2、在瀏覽器中輸入一個url後回車,會發生那些事情?
http://magic3.blog.51cto.com/1146917/1354084
3、Java內存模型
http://www.cnblogs.com/nexiyi/p/java_memory_model_and_thread.html
4、垃圾回收機制
5、數據庫的索引
6、寫一個單例模式
(五)阿里內推
1、垃圾回收機制
2、線程的生命週期,幾種狀態?
3、什麼是死鎖?如何避免死鎖
4、n個線程同時使用n塊資源如何避免死鎖?
5、瞭解concurrent包嗎?講講ConcurrentMap
6、線程之間如何進行通信
7、靜態類、靜態方法、靜態代碼塊各自的使用場景
8、SpringMVC跟Struts的區別
9、瞭解SpringBoot嗎?
10、Java中接口可以多繼承嗎?
答:Java接口可以多繼承。Interface3 Extends Interface0, Interface1, interface……
不允許類多重繼承的主要原因是,如果A同時繼承B和C,而B和C同時有一個D方法,A如何決定該繼承那一個呢?
但接口不存在這樣的問題,接口全都是抽象方法繼承誰都無所謂,所以接口可以繼承多個接口。
二、關於算法:
(一)愛奇藝
1、直接插入排序,時間複雜度,是否穩定?

//時間複雜度O(N^2),穩定(相同元素的想對位置沒改變)
public void insertSort(int arr[]) {
    if (arr == null || arr.length == 0)
        return;
    for (int i = 1; i < arr.length; i++){ //要進行比較的元素位置
        int j = i
        while (j>0 && arr[j] < arr[j - 1]){
            swap(arr[j], arr[j - 1]);
            j--;
        }
    }
}

2、二叉樹有哪些遍歷方式?怎樣實現
有四種遍歷方式:前序遍歷、中序遍歷、後序遍歷和層序遍歷,分別可以使用遞歸的方式或者使用輔助棧的方式來進行實現。
3、MySQL的查詢語句:查詢一張表中年齡最大的員工。
使用子查詢

SELECT Name FROM Employee WHERE age = (SELECT MAX(age) FROM Employee);

4、10000行單詞,統計出現頻次最多的10個單詞。
(二)網易有道
1、有紅黃藍三種顏色的球,請將他們按照紅、黃、藍的先後順序一次擺放,即給一個數組,數組中有三個數字,請對這三個數字進行排序,要求只能遍歷數組一次。
思路:假設我們在數組中存放的是0、1、2三個數字來代替三種顏色,使用兩個指針分別指向數組的一前一後用來表示0和2的存儲位置,接下來就是遍歷數組,看該數是否爲0或2,如果爲零,與前指針指向的位置元素進行交換,如果爲2,與後指針指向的位置元素交換,如果爲1,則繼續向後遍歷,代碼實現如下:

public void sort (int arr[]){
    if (arr == null || arr.length == 0)
        return;
    int pre = 0;
    int post = arr.length - 1;
    int index = 0;
    while (index < post){
        if (arr[index] == 0){
            swap(arr[index], arr[pre++]);
            index++;//這裏index可以自加,因爲index在自加的同時已經把2放到後面了,也就是交換過後,index位置上只能是1,這時候直接index++即可
        }
        else if (arr[index] == 2){
            swap(arr[index], arr[post--]);//這時候index就不能自加,因爲與2交換後,index位置上可能是0,這時候還需繼續index與pre交換
        }
        else{
            index++;
        }   
    }
}

2、求連續子數組的最大和,進階版:求連續子數組的和的最小絕對值
3、假設學生的成績分佈在0~100,請問如何查找某一分數的學生的人數?
使用key-value映射關係,key值存分數,value存學生人數,用map可以實現。
4、給定一個包含加減乘除運算的字符串,請輸出該字符串的運算結果,例如“12+4*20/5-8-9/6”則輸出結果是18.5。
(三)搜狗
1、寫一個冒泡排序
(四)今日頭條
1、反轉鏈表
2、給一個數組,輸出從當前位置往後數,比當前元素大的第一個元素,例如,給出數組{2,4,3,2,1,6,7}則輸出結果爲{4,6,6,6,6,7}
3、給定一個n長的數組,裏面的元素爲0~n-1亂序排列,判斷該數組中是否有重複元素,如果元素類型爲無符號整形呢?
(五)阿里內推

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章