記錄某公司(簡稱SMKJ) 的一次面試

昨天去了一家公司面試 Java 開發(fā)崗位,這篇文章主要是做一個面試的記錄以及總結(jié)。

這家公司的規(guī)模大概100-200人,環(huán)境還可以,在一棟大廈租了兩層辦公室(31層和32層)。一同搭電梯上去的還有一位去應(yīng)聘測試崗位的妹紙??

這里要吐槽一下該公司的前臺,由于跟HR約好了是在31樓面試,我和測試妹紙都去了31樓的前臺,31樓的前臺直接讓我們?nèi)巧险?2樓的前臺,32樓的前臺找了樓下31樓的面試官,結(jié)果又把我們帶回樓下31樓面試。

首先填了一份個人信息表,然后直接進(jìn)入面試環(huán)節(jié)(沒有筆試 ??)。

以下是面試時一些問題的記錄:

1、面向?qū)ο蟮娜筇匦?/h2>

答:封裝、繼承、多態(tài)。

2、XML解析

答:
1、解析方式

  • DOM:Document Object Model,文檔對象模型。這種方式是W3C推薦的處理XML的一種標(biāo)準(zhǔn)方式。

缺點:必須讀取整個XML文檔,才能構(gòu)建DOM模型,如果XML文檔過大,造成資源的浪費。
優(yōu)點:適合對XML中的數(shù)據(jù)進(jìn)行操作(CRUD)。

  • SAX:Simple API for XML。這種方式不是官方標(biāo)準(zhǔn),屬于開源社區(qū)XML-DEV,幾乎所有的XML解析器都支持它。

2、解析工具

  • JAXP:

DOM或SAX方式進(jìn)行解析XML。API在JDK之中。

  • Dom4J:(推薦)

是開源組織推出的解析開發(fā)包。(牛,大家都在用,包括SUN公司的一些技術(shù)的實現(xiàn)都在用)

3、反射

答:當(dāng)我們的程序在運行時,需要動態(tài)的加載一些類,這些類可能之前用不到所以不用加載到j(luò)vm,而是在運行時根據(jù)需要才加載,這樣的好處對于服務(wù)器來說不言而喻。

舉個例子,我們的項目底層有時是用mysql,有時用oracle,需要動態(tài)地根據(jù)實際情況加載驅(qū)動類,這個時候反射就有用了,假設(shè) com.java.dbtest.myqlConnection,com.java.dbtest.oracleConnection這兩個類我們要用,這時候我們的程序就寫得比較動態(tài)化,通過Class tc = Class.forName("com.java.dbtest.TestConnection");通過類的全類名讓jvm在服務(wù)器中找到并加載這個類,而如果是oracle則傳入的參數(shù)就變成另一個了。這時候就可以看到反射的好處了,這個動態(tài)性就體現(xiàn)出java的特性了!

舉多個例子,大家如果接觸過spring,會發(fā)現(xiàn)當(dāng)你配置各種各樣的bean時,是以配置文件的形式配置的,你需要用到哪些bean就配哪些,spring容器就會根據(jù)你的需求去動態(tài)加載,你的程序就能健壯地運行。

4、Java 8 新特性

  • Lambda 表達(dá)式:Lambda允許把函數(shù)作為一個方法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)方法中)。

  • 方法引用:方法引用提供了非常有用的語法,可以直接引用Java的類方法、對象方法或者構(gòu)造器。

5、Lambda 表達(dá)式

Lambda 表達(dá)式我們可以理解為對于函數(shù)式接口和其中的抽象方法的具體實現(xiàn)。

Lambda 表達(dá)式可以認(rèn)為是一種特殊的匿名內(nèi)部類,Lambda只能用于函數(shù)式接口。

lambda語法如下:

     ([形參列表,不帶數(shù)據(jù)類型]) -> {
         //執(zhí)行語句
         [return..;]
     }

代碼演示如下:

public class TestLambda {  
     public static void main(String[] args) {  
           TestLambdaInterface1 t1 = new TestLambdaInterface1() {  
                @Override  
                public void test() {  
                     System.out.println("使用匿名內(nèi)部類");  
  
                }  
           };  
           
           //與上面的匿名內(nèi)部類執(zhí)行效果一樣  
           //右邊的類型會自動根據(jù)左邊的類型進(jìn)行判斷  
           TestLambdaInterface1 t2 = () -> {  
                System.out.println("使用lambda");  
           };  
           t1.test();  
           t2.test(); 
     }
}

@FunctionalInterface  
interface TestLambdaInterface1 {  
     //不帶參數(shù)的抽象方法  
     void test();  
}  

6、設(shè)計模式

單例模式

單例模式:確保一個類只有一個實例,并提供了一個全局訪問點。

實現(xiàn):

  • 使用一個私有靜態(tài)變量、一個私有構(gòu)造函數(shù)以及一個公有靜態(tài)函數(shù)來實現(xiàn)。

  • 私有構(gòu)造函數(shù)保證了不能通過構(gòu)造函數(shù)來創(chuàng)建對象實例,只能通過公有靜態(tài)函數(shù)返回唯一的私有靜態(tài)變量。

public class Singleton {

    private static Singleton instance;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

代理模式

發(fā)布訂閱模式

MVC 模式

7、Hibernate 的一級緩存、二級緩存

Session 的緩存被稱為 Hibernate 的第一級緩存。SessionFactory 的外置緩存稱為 Hibernate 的二級緩存。這兩個緩存都位于持久層,它們存放的都是數(shù)據(jù)庫數(shù)據(jù)的拷貝。SessionFactory 的 內(nèi)置緩存 存放元數(shù)據(jù)和預(yù)定義 SQL,SessionFactory 的內(nèi)置緩存是只讀緩存。

緩存的作用:

  • 減少數(shù)據(jù)庫的訪問頻率,提高訪問性能。

  • 保證緩存中的對象與數(shù)據(jù)庫同步,位于緩存中的對象稱為持久化對象。

8、ConcurrentHashMap 的 key 可不可以為 null ?

  • HashMap 可以允許插入 null key 和 null value

  • HashTable 和 ConcurrentHashMap 都不可以插入 null key 和 null value

9、線程池的線程命名

一、創(chuàng)建線程的時候沒有傳入名字

ThreadPoolManager.potatoPool.execute(new MyThread());  

在這種情況下,線程池會給線程自動命名,如果想改變線程的名稱,那么需要在線程中的run方法中給線程setName。如下:

public class MyThread extends Thread{  
    public String threadName;  
    public MyThread (String threadName){  
        this.threadName=threadName;  
    }  
    
    @Override  
    public void run() {  
        Thread.currentThread().setName(threadName);  
    }  
  
}  

二、創(chuàng)建線程的時候直接傳入名字

ThreadPoolManager.potatoPool.execute(new MyThread("aa"));  

10、Linux上安裝好MySQL,只能本機訪問,其他機器不能訪問的問題

1、權(quán)限問題,修改權(quán)限

2、防火墻的原因,修改防火墻配置

11、線程池核心線程數(shù)(core) 和 最大線程數(shù)(max)

當(dāng)所有的核心線程(core) 都在干活時,新添加的任務(wù)會被添加到隊列中等待處理,如果隊列滿了,則新建非核心線程執(zhí)行任務(wù)。

12、線程池捕獲異常

public class CaptureUncaughtException {  
    public static void main(String[] args) {  
        Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());  
        ExecutorService exec = Executors.newCachedThreadPool();  
        exec.execute(new ExceptionThread2());  // ExceptionThread2 為任務(wù)對象
    }  
}  

/**  
 * MyUncaughtExceptionHandler:捕獲線程異常處理的類,需要實現(xiàn) UncaughtExceptionHandler 接口
 * @author nnngu  
 */  
class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {  
    @Override  
    public void uncaughtException(Thread t, Throwable e) {  
        System.out.println(t+"捕獲到了異常,異常處理的對象為:"+e); // e:拋出的對象 
    }  
}  

13、Mybatis 的 Mapper

參考:

為什么mybatis的mapper沒有實現(xiàn)類(原理探究)

Mybatis中Mapper映射文件詳解

14、Jsp和servlet ,jsp的 9大內(nèi)置對象

Servlet 的生命周期:init、service(doGet、doPost)、destory

JSP 的九大內(nèi)置對象:

內(nèi)置對象名 類型
request HttpServletRequest
response HttpServletResponse
config ServletConfig
application ServletContext
session HttpSession
exception Throwable
page Object(this)
out JspWriter
pageContext PageContext

JSP 的四大域?qū)ο螅?/h3>
對象
ServletContext context域
HttpServletRequet request域
HttpSession session域
PageContext page域

15、文件上傳、socket、流

參考:

java文件上傳和下載

16、Netty

參考:

Netty——基本使用介紹

17、集合

答:List、Set、Map

List 是有序的,可以有重復(fù)元素

Set 是無序的,不允許有重復(fù)元素

Map 是鍵值對

18、IO 和 NIO

參考:

Java NIO 系列教程

19、寫在最后

最后,我發(fā)現(xiàn)面試官也有一些錯誤,在此也把它記錄下來:

  • 面試官說 NIO 是 JDK 1.5 之后引入的。(其實 NIO 是 JDK 1.4 開始引入的)
  • 關(guān)于線程池的核心線程數(shù)(core) 和 最大線程數(shù)(max)的問題,面試官說當(dāng)線程池里的線程數(shù)達(dá)到核心線程數(shù)(core) 時,新來了任務(wù)就會繼續(xù)創(chuàng)建線程來處理。(其實當(dāng)線程數(shù)達(dá)到核心線程數(shù)之后,新來的任務(wù)會加入隊列等待處理,只有當(dāng)隊列滿了才會繼續(xù)創(chuàng)建線程)

先寫到這里,以后有什么補充再更新。

本文永久更新地址:https://github.com/nnngu/LearningNotes/blob/master/_posts/2018-03-30-%E6%9F%90%E5%85%AC%E5%8F%B8(%E7%AE%80%E7%A7%B0SMKJ)%E9%9D%A2%E8%AF%95%E8%AE%B0%E5%BD%95.md

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • categories: Interviewdescription: 本文收集了一些經(jīng)典的Java面試題 1、面向?qū)?..
    我是阿喵醬閱讀 88,450評論 0 86
  • 今天上午有幸參加了廈門路小學(xué)積分制管理啟動大會,會議中初老師精彩分享了《積分制管理理念與實操》 積分制的精髓和本質(zhì)...
    尚源希媽媽閱讀 211評論 0 0
  • 小時候,發(fā)現(xiàn)自己有種預(yù)知未發(fā)生事件的天賦。某天,對易經(jīng)感興趣,翻閱之下,匆匆合上,發(fā)誓年過60后才會再研究。 某次...
    吳若源1閱讀 192評論 0 0
  • 今天師傅給6個師兄師姐升了段。我還要努力,Oss! 今日內(nèi)容,完善理論學(xué)習(xí),完善關(guān)鍵動作。 1.Trangle(三...
    姚問道閱讀 813評論 0 0
  • Our story began in January 15th.為了找一個適合寫我和你之間的故事的軟件我找了好久,...
    jccccc閱讀 279評論 0 0

友情鏈接更多精彩內(nèi)容