• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 第一部分 Java基礎
    第二部分 Java進階

    Java基礎面試題精選(82~113企業真題)

     

     

    81、以下哪句是對索引的錯誤描述(C)

     

    A.選擇性差的索引只會降低 DML 語句的執行速度

     

    B.選擇性強的索引只有被 Access Path 使用到才是有用的索引

     

    C.過多的索引只會阻礙性能的提升,而不是加速性能

     

    D.在適當的時候將最常用的列放在復合索引的最前面

     

    E.索引和表的數據都存儲在同一個 Segment 中

     

     

    82、關于鎖 locks,描述正確的是(A)

     

    A.當一個事務在表上防止了共享鎖(shared lock),其他事務,能閱讀表里的數據

     

    B.當一個事務在表上防止了共享鎖(shared lock),其他事務,能更新表里的數據

     

    C.當一個事務在表上防止了排他鎖(exclusive lock),其他事務,能閱讀表里的數據

     

    D.當一個事務在表上防止了排他鎖(exclusive lock),其他事務,能更新表里的數據

     

     

    83、如下那種情況下,Oracle不會使用 Full Table Scean(D)

     

    A.缺乏索引,特別是在列上使用了函數,如果要利用索引,則需要使用函數索引。

     

    B.當訪問的數據占整個表中的大部分數據時。

     

    C.如果時一個表的 high water mark 數據塊數少于初始化參數 DB_FILE_MULTIBLOCK_READ_COUNT。

     

    D.本次查詢可以用到該張表的一個引用,但是該表具有多個索引包含用于過濾的字段。

     

     

    84、System.out.println(3/2);System.out.println(3.0/2); System.out.println(3.0/2.0); 分別會打印什么結果?

     

    1

     

    1.5

     

    1.5

     

     

    85、SpringMVC攔截器用過嗎?什么場景會用到,過濾器,攔截器,監聽器有什么區別?

     

    攔截器:是指通過統一攔截從瀏覽器發往服務器的請求來完成功能的增強。使用場景:解決請求的共性問題(亂碼問題、權限驗證問題)。

     

    過濾器:Servlet中的過濾器Filter是實現了javax.servlet.Filter接口的服務器端程序,主要的用途是過濾字符編碼、做一些業務邏輯判斷等。其工作原理是只要你在web.xml文件配置好要攔截的客戶端請求,它都會幫你攔截到請求,此時你就可以對請求或響應(Request、Response)統一設置編碼,簡化操作;同時還可進行邏輯判斷,如用戶是否已經登錄、有沒有權限訪問該頁面等等工作。它是隨你的web應用啟動而啟動的,只初始化一次,以后就可以攔截相關請求,只有當你的web應用停止或重新部署的時候才銷毀。

     

    監聽器:現在來說說 Servlet 的監聽器 Listener,其中有一個監聽器是監聽上下文的,它實現了javax.servlet.ServletContextListener接口,它也是隨web應用的啟動而啟動,只初始化一次,隨web應用的停止而銷毀。主要作用是:做一些初始化的內容、設置一些基本的內容、比如一些參數或者是一些固定的對象等等。

     

     

    86、ThreadLocal 的原理和應用場景

     

    每一個ThreadLocal能夠放一個線程級別的變量,可是它本身能夠被多個線程共享使用,并且又能夠達到線程安全的目的,且絕對線程安全。

     

    ThreadLocal的應用場景:最常見的ThreadLocal使用場景為用來解決數據庫連接、Session 管理等

     

     

    87、簡述 TCP 的三次握手

     

    在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接。

     

    ● 第一次握手:建立連接時,客戶端發送 syn 包(syn=j)到服務器,并進入 SYN_SEND 狀態, 等待服務器確認; SYN:同步序列編號(Synchronize Sequence Numbers)。

     

    第二次握手:服務器收到 syn 包,必須確認客戶的 SYN(ack=j+1),同時自己也發送一個 SYN 包(syn=k),即SYN+ACK 包,此時服務器進入 SYN_RECV 狀態。

     

    ● 第三次握手:客戶端收到服務器的 SYN+ACK 包,向服務器發送確認包 ACK(ack=k+1),此包發送完畢,客戶端和服務器進入 ESTABLISHED 狀態,完成三次握手。完成三次握手,客戶端與服務器開始傳送數據

     

     

    88、SpringMVC request接收設置是線程安全的嗎?

     

    是線程安全的,request、response 以及 requestContext 在使用時不需要進行同步。而根據 spring的默認規則,controller對于BeanFactory而言是單例的。即controller只有一個, controller 中的request等實例對象也只有一個。

     

     

    89、列舉 Maven 常見的六種依賴范圍

     

    ● compile: 編譯依賴范圍(默認),對其三種都有效。

     

    ● test: 測試依賴范圍,只對測試 classpath 有效。

     

    ● runtime: 運行依賴范圍,只對測試和運行有效,編譯主代碼無效,例如 JDBC。

     

    ● provided: 已提供依賴范圍,只對編譯和測試有效,運行時無效,例如 selvet-api。

     

    ● system: 系統依賴范圍.謹慎使用.例如本地的,maven 倉庫之外的類庫文件。

     

    ● import(maven2.0.9 以上): 導入依賴范圍,不會對其他三種有影響。

     

     

    90、Mybatis 如何防止 sql 注入?mybatis 攔截器了解過嗎,應用場景是什么?

     

    Mybatis使用#{}經過預編譯的,是安全的,防止sql 注入。

     

    Mybatis攔截器只能攔截四種類型的接口:Executor、StatementHandler、ParameterHandler和ResultSetHandler。這是在Mybatis的Configuration中寫死了的,如果要支持攔截其他接口就需要我們重寫Mybatis的Configuration。

     

    Mybatis可以對這四個接口中所有的方法進行攔截。

     

    Mybatis攔截器常常會被用來進行分頁處理。
    ???

     

    91、簡單解釋自動裝配的各種模式,或者叫裝配方式

     

    在Spring框架中共有5種自動裝配:

     

    ● no:這是 Spring 框架的默認設置,在該設置下自動裝配是關閉的,開發者需要自行在bean定義中用標簽明確的設置依賴關系。

     

    ● byName:該選項可以根據bean名稱設置依賴關系。當向一個bean中自動裝配一個屬性時,容器將根據bean的名稱自動在在配置文件中查詢一個匹配的bean。如果找到的話,就裝配這個屬性,如果沒找到的話就報錯。

     

    ● byType:該選項可以根據bean類型設置依賴關系。當向一個bean中自動裝配一個屬性時,容器將根據bean的類型自動在在配置文件中查詢一個匹配的 bean。如果找到的話,就裝配這個屬性,如果沒找到的話就報錯。

     

    ● constructor:造器的自動裝配和 byType 模式類似,但是僅僅適用于與有構造器相同參數 的bean,如果在容器中沒有找到與構造器參數類型一致的bean,那么將會拋出異常。

     

    ● autodetect:該模式自動探測使用構造器自動裝配或者 byType 自動裝配。首先,首先會嘗試找合適的帶參數的構造器,如果找到的話就是用構造器自動裝配,如果在bean內部沒有找到相應的構造器或者是無參構造器,容器就會自動選擇byTpe的自動裝配方式。

     

     

    92、mvc的各個部分都有哪些技術來實現?如何實現的?

     

    MVC是Model-View-Controller的簡寫。Model代表的是應用的業務邏輯(通過 JavaBean,EJB組件實現),View 是應用的表示面(由JSP頁面產生),Controller是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用。

     

     

    93、反射機制一般應用在什么場景?

     

    ● 逆向代碼,例如反編譯

     

    ● 與注解相結合的框架,例如Retrofit

     

    ● 單純的反射機制應用框架,例如EventBus 2.x

     

    ● 動態生成類框架,例如Gson

     

     

    94、設計Java程序,假設有50瓶飲料,喝完三個空瓶可以換一瓶飲料,依次類推,請問總共喝了多少飲料。

     

    class Buy {
        public static void main(String[] args) {
            int n = 50;
            int i = 0;
            while (true) {
                n -= 3;
                n++;
                if (n < 3) {
                    System.out.println("共喝了" + (50 + i) + "瓶");
                    break;
                }
            }
        }
    }

     

     

    95、根據某年某月某日,輸出這是一年中第幾天。

     

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("請輸入3個整數,分別表示年月日:");
        int year = in.nextInt();
        int month = in.nextInt();
        int day = in.nextInt();
        int sum = 0;
        int[][] a = {
                {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
                {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
        };
        for (int i = 0; i < month - 1; i++) {
            if (year % 4 == 0 & year % 100 != 0 | year % 400 == 0)
                sum = sum + a[1][i];
            else
                sum = sum + a[0][i];
        }
        sum = sum + day;
        System.out.println(year + "年" + month + "月" + day + "是這一年的第" + sum + "天");
    }

     

     

    96、利潤與獎金,某公司銷售 10 萬元到 20 萬元的獎金 10%,在 20 萬元的獎金 10 萬元以上的獎金 7.5%,到 40 萬元超出 20 萬元的部分獎金為 5%,到 60 萬元的超出 40 萬元的部分獎金 3%,到 100 萬元的超出 60 萬元部分獎金 1%,請輸出說的獎金。

     

    public class Test {
        public static void main(String[] args) {
            float money = 0;
            Scanner scan = new Scanner(System.in);
            System.out.print("請輸入利潤:");
            float num = scan.nextInt();
            if (num <= 100000) {
                money = (float) (num * 0.1);
            } else if (num <= 200000) {
                money = (float) ((num - 100000) * 0.075 + 100000 * 0.1);
            } else if (num <= 400000) {
                money = (float) ((num - 200000) * 0.5 + 100000 * 0.175);
            } else if (num <= 600000) {
                money = (float) ((num - 400000) * 0.3 + 100000 * 0.175 + 200000 * 0.5);
            } else if (num <= 1000000) {
                money = (float) ((num - 600000) * 0.015 + 100000 * 0.175 + 200000 * 0.5 + 200000 * 0.3);
            } else {
                money = (float) ((num - 1000000) * 0.01 + 100000 * 0.175 + 200000 * 0.5 + 200000 * 0.3 + 400000 * 0.015);
            }
            System.out.println("獎金:" + money);
        }
    }

     

     

    97、除了懶漢式和餓漢式你還了解那些單例模式?

     

    //雙重檢查鎖模式
    public class DoubleCheckLock {
        private static DoubleCheckLock instance = null;
    
        private DoubleCheckLock() {
        }
    
        public static DoubleCheckLock getInstance() {
            if (instance == null) {
                synchronized (DoubleCheckLock.class) {
                    if (instance == null) {
                        instance = new DoubleCheckLock();
                    }
                }
            }
            return instance;
        }
    }
    
    //靜態內部類方式
    public class StaticInner {
        private static StaticInner instance;
    
        public static StaticInner getInstance() {
            return SingletonHolder.STATIC_INNER;
        }
    
        private static class SingletonHolder {
            private static final StaticInner STATIC_INNER = new StaticInner();
        }
    }

     

     

    98、簡述SSH的概念以及主要的設計思想?

     

    SSH是Struts+Spring+Hibernate的一個集成框架,是目前比較流行的一種Web應用程序開源框架。

     

    集成SSH框架的系統從職責上分為四層:表示層、業務邏輯層、數據持久層和域模塊層,以幫助開發人員在短期內搭建結構清晰、可復用性好、維護方便的 Web 應用程序。

     

    其中使用Struts作為系統的整體基礎架構,負責MVC的分離,在Struts框架的模型部分,控制業務跳轉,利用Hibernate框架對持久層提供支持,Spring做管理,管理Struts和Hibernate。

     

    具體做法是:用面向對象的分析方法根據需求提出一些模型,將這些模型實現為基本的 Java對象,然后編寫基本的DAO(Data Access Objects)接口,并給出 Hibernate的DAO實現,采用Hibernate架構實現的DAO類來實現Java類與數據庫之間的轉換和訪問,最后由Spring 做管理。

     

     

    99、Linux下如何讓命令在后臺執行?

     

    要讓程序在后臺執行,只需在命令行的最后加上“&”符號。例如:$ find . -name abc -print&

     

     

    100、Linux中rm -i 與 rm -r 個實現什么功能?

     

    rm –i: 交互模式刪除文件,刪除文件前給出提示。

     

    rm -r:遞歸處理,將指定目錄下的所有文件與子目錄一并處理。

     

     

    101、什么是樂觀鎖,什么是悲觀鎖,兩者的區別是什么?

     

    悲觀鎖(Pessimistic Lock),顧名思義,就是很悲觀,每次去拿數據的時候都認為別人會修改,所以每次在拿數據的時候都會上鎖,這樣別人想拿這個數據就會block直到它拿到鎖。傳統的關系型數據庫里邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。它指的是對數據被外界(包括本系統當前的其他事務,以及來自外部系統的事務處理)修改持保守態度,因此,在整個數據處理過程中,將數據處于鎖定狀態。悲觀鎖的實現,往往依靠數據庫提供的鎖機制(也只有數據庫層提供的鎖機制才能真正保證數據訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無法保證外部系統不會修改數據)。

     

    樂觀鎖(Optimistic Lock),顧名思義,就是很樂觀,每次去拿數據的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,可以使用版本號等機制。樂觀鎖適用于多讀的應用類型,這樣可以提高吞吐量,像數據庫如果提供類似于write_condition機制的其實都是提供的樂觀鎖。

     

    兩種鎖各有優缺點,不可認為一種好于另一種,像樂觀鎖適用于寫比較少的情況下,即沖突真的很少發生的時候,這樣可以省去了鎖的開銷,加大了系統的整個吞吐量。但如果經常產生沖突,上層應用會不斷的進行retry,這樣反倒是降低了性能,所以這種情況下用悲觀鎖就比較合適。

     

     

    102、日志打印的log4j的配置中%t表示什么?

     

    答案:%t 輸出產生該日志事件的線程名。

     

    擴展:%M 是輸出方法的名字、%m 是輸出代碼指定的日志信息。指定的打印信息的具體格式 ConversionPattern,具體參數:

     

    ● %m輸出代碼中指定的消息

     

    ● %p輸出優先級,即 DEBUG,INFO,WARN,ERROR,FATAL

     

    ● %r輸出自應用啟動到輸出該 log 信息耗費的毫秒數

     

    ● %c輸出所屬的類目,通常就是所在類的全名

     

    ● %t輸出產生該日志事件的線程名

     

    ● %n輸出一個回車換行符,Windows 平臺為"rn”,Unix 平臺為"n”

     

    ● %d 輸出日志時間點的日期或時間,默認格式為 ISO8601,也可以在其后指定格式,比如:%d{yyyy MM dd HH:mm:ss,SSS}

     

    ● %l輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數

     

    ● %x輸出和當前線程相關聯的 NDC(嵌套診斷環境),尤其用到像 java servlets 這樣的多客戶多線程的應用中。

     

    ● %%輸出一個”%”字符

     

    ● %F輸出日志消息產生時所在的文件名稱

     

    ● %M輸出執行方法

     

    ● %L輸出代碼中的行號

     

     

    103、Spring中什么時候引起NotWritablePropertyException和Could not open calss path resource[ApplicationContext.xml]

     

    出現NotWritablePropertyException異常的原因一般是在ApplicationContext.xml中 property name的錯誤等相關問題。

     

     

    104、關于Web應用程序,下列說法錯誤的是(B)

     

    A. WEB-INF目錄存在于web應用的根目錄下

     

    B. WEB-INF目錄與classes目錄平行

     

    C. web.xml在WEB-INF目錄下

     

    D. Web應用程序可以打包為war文件

     

     

    ???????105、有關Servlet的生命周期說法正確的有(CD)

     

    A. Servlet 的生命周期由 Servlet 實例控制

     

    B. init()方法在創建完 Servlet 實例后對其進行初始化,傳遞的參數為實現 ServletContext 接口的對象

     

    C. service()方法響應客戶端發出的請求

     

    D. destroy()方法釋放Servlet實例

     

     

    ???????106、有關會話跟蹤技術描述正確的是(ABC)

     

    A. Cookie是Web服務器發送給客戶端的一小段信息,客戶端請求時,可以讀取該信息發送到服務器端

     

    B. 關閉瀏覽器意味著會話 ID 丟失,但所有與原會話關聯的會話數據仍保留在服務器上,直至會話過期

     

    C. 在禁用 Cookie 時可以使用 URL 重寫技術跟蹤會話

     

    D. 隱藏表單域將字段添加到 HTML 表單并在客戶端瀏覽器中顯示

     

     

    ???????107、以下web.xml片斷(D)正確地聲明servlet上下文參數

     

    A.

    <init-param>

    <param-name>MAX</param-name>

    <param-value>100</param-value>

    </init-param>

     

    B.

    <context-param>

    <param name="MAX" value="100" />

    <context-param>

     

    C.

    <context>

    <param name="MAX" value="100" />

    <context>

     

    D.

    <context-param>

    <param-name>MAX</param-name>

    <param-value>100</param-value>

    <context-param>

     

     

    ???????108、以下(A)可用于檢索session屬性userid的值

     

    A. session. getAttribute (“userid”);

     

    B. session. setAttribute (“userid”);

     

    C. request. getParameter (“userid”);

     

    D. request. getAttribute (“userid”);

     

     

    109、下列 JSP 代碼,以下(CD)可放置在1處,不會發生編譯錯誤

     

    <html>
    <body>
    <%
    for(int i = 0; i < 10; i++) {
    //1
    }
    %>
    </body>
    </html>

     

    A. <%= i %>

     

    B. <b>i</b>

     

    C. %><%= i %><%

     

    D. 不寫任何內容

     

     

    110、???????考慮下面兩個JSP文件代碼片斷:

     

    ● test1.jsp:

     

    <HTML>
    <BODY>
    <% pageContext.setAttribute(“ten”,new Integer(10));%>
    //1
    </BODY>
    </HTML>

     

    ● test2.jsp:

     

    數字為:<%= pageContext.getAttribute(”ten”)%>

     

    以下(C)放置在 test1.jsp 中的//1 處,當請求 test1.jsp 時正確輸出 test2.jsp 中的內容。

     

    A. <jsp:include page=”test2.jsp”  />

     

    B. <jsp:forword page=”test2.jsp”  />

     

    C. <%@ include file=”test2.jsp”  %>

     

    D. pageContext對象的scope屬性為page,所以test2.jsp不能訪問 test1.jsp定義的屬性

     

     

    111、???????有關JSP隱式對象,以下(ACD)描述正確。

     

    A. 隱式對象是 WEB 容器加載的一組類的實例,可以直接在 JSP 頁面使用

     

    B. 不能通過config對象獲取 ServletContext 對象

     

    C. response對象通過sendRedirect方法實現重定向

     

    D. 只有在出錯處理頁面才有 exception 對象

     

    解釋:jsp 的九大內置對象分別是:config、request、response、out、page、pageContext、session、exception、application。其中exception 是特殊的內置對象,只有當在 jsp 中添加 isErrorPage="true"屬性時如下配置時才可以使用。該屬性一般出現在設定的錯誤界面。

     

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" isErrorPage="true" %>

     

     

    112、???????考慮下面 JSP 文件代碼片斷:

     

    <HTML>
    <BODY>
    <jsp:include page=”test2.jsp”>
        <jsp:param name=”username”  value=”zhangsan”/>
    </jsp:include>
    </BODY>
    </HTML>

     

    以下(C)代碼片斷放置在 test2.jsp 中不會導致錯誤。

     

    A. <jsp:getParam name=”username”/>

     

    B. <jsp:include param =”username”/>

     

    C. <%=request.getParameter(“username”)%>

     

    D. <%=request.getAttribute(“username”)%>

     

    解釋:<jsp:include page=”test2.jsp”>屬于動態調用test2.jsp界面,相當于動態去請求test2.jsp 所生成的Servlet,在請求的同時攜帶了請求參數“username”,我們知道在Servlet中獲取請求攜帶的參數就是通過request.getParameter(key)來獲取的,因此C正確。

     

     

    113、???????以下是login.jsp文件的代碼片斷:???????

     

    <%@ page isELIgnored="false"%>
    <html>
    <body>
    <FORM action="login.jsp" method="GET">
        <input type="text" name="name" value="${param['name']}">
        <input type="submit" value="提交">
    </FORM>
    <P>
        用戶名為: ${param.name}
    </body>
    </html>

     

    全部教程
  • <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 面对面棋牌游戏