<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            java語言

            經常被遺忘的Java面試題

            時間:2025-03-30 05:57:20 java語言 我要投稿
            • 相關推薦

            經常被遺忘的Java面試題

              通常,在面試中,會遇到面試官提一些比較“偏冷”的基礎知識,因此,本文對一些容易被遺忘的問題進行歸納,希望可以幫助廣大程序員輕松應對面試官的技術問題,以及提升編碼效率。

            經常被遺忘的Java面試題

              靜態類和靜態方法

              如果一個類要被聲明為static的,只有一種情況,就是靜態內部類。

              靜態內部類實際上與普通類(即類名必須與文件名一樣的頂級類)一樣,只是靜態內部類在某一類的內部定義了而已,既然是類,要想使用就必須實例化。概念上與靜態變量、靜態方法是不一樣的,不要被“靜態”兩個字迷惑了(不要以為凡是靜態的東西就不需要實例化就可以直接使用,靜態內部類是有區別),而且只有靜態內部類,而沒有靜態類(頂級類)的概念。

              public class Singleton{

              private Singleton(){}

              private static class SingletonHolder{

              private final static Singleton instance;

              }

              public Singleton getInstance(){

              return SingletonHolder.instance;

              }

              }

              public class Singleton{

              private Singleton(){}

              private static class SingletonHolder{

              private final static Singleton instance;

              }

              public Singleton getInstance(){

              return SingletonHolder.instance;

              }

              }

              靜態方法只能訪問靜態成員,實例方法可以訪問靜態和實例成員。之所以不允許靜態方法訪問實例成員變量,是因為實例成員變量是屬于某個對象的,而靜態方法在執行時,并不一定存在對象。靜態方法中也不能使用關鍵字this。

              倒排索引

              Inverted Index

              如果翻譯成轉置索引可能更好懂,它就相當于做了矩陣轉置。

              倒排索引是一種索引方法,被用來存儲在全文搜索下某個單詞在一個文檔或者一組文檔中的存儲位置的映射。

              反射

              反射API中提供的動態代理也是非常強大的功能,可以原生實現AOP中 的方法攔截功能。正如英文單詞reflection的含義一樣,使用反射API的時候就好像在看一個Java類在水中的倒影一樣。知道了Java類的內部 結構之后,就可以與它進行交互,包括創建新的對象和調用對象中的方法等。

              這種交互方式與直接在源代碼中使用的效果是相同的,但是又額外提供了運行時刻的靈活性。使用反射的一個最大的弊端是性能比較差。相同的操作,用反射API所需的時間大概比直接的使用要慢一兩個數量級。不過現在的JVM實現中,反射操作的性能已經有了很大的提升。

              Java 反射API的第一個主要作用是獲取程序在運行時刻的內部結構。

              多路歸并算法

              歸并排序也是一種使用分治法來實現的有效排序算法,它是現代計算機創始人John von Neumann于1945年發明的。

              歸并排序在眾多排序算法中既是穩定排序,又有不錯的效率,同時,歸并排序不僅可以用于內排序,還可以用于外排序。

              歸并排序的思路如下(以二路歸并為例):

              將數組劃均分為兩個子數組;

              對兩個字數組進行排序;

              將排序好的兩個字數組歸并。

              所謂 N路歸并 是指將數組均分為N個子數組,將字數組排序后再歸并。因此二路歸并是歸并排序的最一般的情況。

              e.g.

              def msort(array):

              length = len(array)

              if length == 1:

              return array

              else:

              mid = length / 2

              left = msort(array[0: mid])

              right = msort(array[mid: length])

              return merge(left, right)123

              def msort(array):

              length = len(array)

              step = 1

              while step < length:

              for left in range(0, length - step, 2 * step):

              result = merge(array[left:left + step],

              array[left + step: min(left + 2 * step,

              length)])

              array = array[0:left] + result + array[min(left + 2 *

              step, length)]

              step = step * 2

              return array

              def merge(left, right):

              llen = len(left)

              lcur = 0

              rlen = len(right)

              rcur = 0

              result = []

              while lcur < llen and rcur < rlen:

              lone = left[lcur]

              rone = right[rcur]

              result.append(min(lone, rone))

              if lone < rone:

              lcur += 1

              else:

              rcur += 1

              result += left[lcur:]

              result += right[rcur:]

              return result

              枚舉類型

              Enumerated Type

              enum 類型不支持 public 和 protected 修飾符的構造方法,因此構造函數一定要是 private 或 friendly 的。也正因為如此,所以枚舉對象是無法在程序中通過直接調用其構造方法來初始化的。

              由于 enum 類型的值實際上是通過運行期構造出對象來表示的,所以在 cluster 環境下,每個虛擬機都會構造出一個同義的枚舉對象。因而在做比較操作時候就需要注意,如果直接通過使用等號 ( ‘ == ’ ) 操作符,這些看似一樣的枚舉值一定不相等,因為這不是同一個對象實例。

              多線程

              Java中實現多線程有兩種方法:繼承Thread類、實現Runnable接口,在程序開發中只要是多線程,肯定永遠以實現Runnable接口為主,因為實現Runnable接口相比繼承Thread類有如下優勢:

              1、可以避免由于Java的單繼承特性而帶來的局限;

              2、增強程序的健壯性,代碼能夠被多個線程共享,代碼與數據是獨立的;

              3、適合多個相同程序代碼的線程區處理同一資源的情況。

              下面是通過實現Runnable接口實現的多線程程序,代碼如下:

              lass MyThread implements Runnable{

              private int ticket = 5;

              public void run(){

              for (int i=0;i<10;i++)

              {

              if(ticket > 0){

              System.out.println("ticket = " + ticket--);

              }

              }

              }

              }

              public class RunnableDemo{

              public static void main(String[] args){

              MyThread my = new MyThread();

              new Thread(my).start();

              new Thread(my).start();

              new Thread(my).start();

              }

              }

            【經常被遺忘的Java面試題】相關文章:

            Java面試題(精選)06-30

            java面試題05-20

            Java線程面試題08-25

            高級Java面試題精選11-02

            Java 問答面試題09-03

            Java原理面試題07-13

            經典Java基礎面試題08-13

            高級Java面試題匯總11-03

            Java基礎面試題集錦09-02

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院