更新時間:2020-10-27 17:50:35 來源:動力節(jié)點 瀏覽1324次
算法是學(xué)習(xí)計算機的基礎(chǔ),更是學(xué)習(xí)編程必會的內(nèi)容。在java程序員的面試中,對應(yīng)聘者基礎(chǔ)知識的掌握情況越來越重視,因此java算法面試題是大家在面試前必須要做的準備工作之一,下面整理了10道??嫉膉ava算法面試題,都是必會的基礎(chǔ)題。
1、初級java排序算法的原理?
答:冒泡排序:重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢“浮”到數(shù)列的頂端。
選擇排序:在要排序的一組數(shù)中,選出最小的一個數(shù)與第一個位置的數(shù)交換;然后在剩下的數(shù)當中再找最小的與第二個位置的數(shù)交換,如此循環(huán)到倒數(shù)第二個數(shù)和最后一個數(shù)比較為止。
插入排序:每步將一個待排序的記錄,按其順序碼大小插入到前面已經(jīng)排序的字序列的合適位置(從后向前找到合適位置后),直到全部插入排序完為止。
希爾排序:先將整個待排序的記錄序列分割成為若干子序列分別進行直接插入排序,待整個序列中的記錄“基本有序”時,再對全體記錄進行依次直接插入排序。
2、解釋什么是冒泡排序算法?
答:冒泡排序算法也稱為下沉排序。在這種類型的排序中,要排序的列表的相鄰元素之間互相比較。如果它們按順序排列錯誤,將交換值并以正確的順序排列,直到最終結(jié)果“浮”出水面。
3、什么是復(fù)制回收算法?
答:把堆均分成兩個大小相同的區(qū)域,只使用其中的一個區(qū)域,直到該區(qū)域消耗完。此時垃圾回收器終端程序的執(zhí)行,通過遍歷把所有活動的對象復(fù)制到另一個區(qū)域,復(fù)制過程中它們是緊挨著布置的,這樣也可以達到消除內(nèi)存碎片的目的。復(fù)制結(jié)束后程序會繼續(xù)運行,直到該區(qū)域被用完。
但是,這種方法有兩個缺陷:對于指定大小的堆,需要兩倍大小的內(nèi)存空間;需要中斷正在執(zhí)行的程序,降低了執(zhí)行效率。
4、按代回收算法按代回收是為什么?
答:為什么要按代進行回收?這是因為不同對象生命周期不同,每次回收都要遍歷所有存活對象,對于整個堆內(nèi)存進行回收無疑浪費了大量時間,對癥下藥可以提高垃圾回收的效率。主要思路是:把堆分成若搞個子堆,每個子堆視為一代,算法在運行的過程中優(yōu)先收集“年幼”的對象,如果某個對象經(jīng)過多次回收仍然“存活”,就移動到高一級的堆,減少對其掃描次數(shù)。
5、解釋二分法檢索如何工作?
答:在二分法檢索中,我們先確定數(shù)組的中間位置,然后將要查找的值與數(shù)組中間位置的值進行比較,若小于數(shù)組中間值,則要查找的值應(yīng)位于該中間值之前,依此類推,不斷縮小查找范圍,直至得到最終結(jié)果。
6、解釋是否可以使用二分法檢索鏈表?
答:由于隨機訪問在鏈表中是不可接受的,所以不可能到達O(1)時間的中間元素。因此,對于鏈表來說,二分法檢索是不可以的(對順序鏈表或排序后的鏈表是可以用的)。
7、解釋什么是堆排序?
答:堆排序可以看成是選擇排序的改進,它可以定義為基于比較的排序算法。它將其輸入劃分為未排序和排序的區(qū)域,通過不斷消除最小元素并將其移動到排序區(qū)域來收縮未排序區(qū)域。
8、解釋一個算法的最佳情況和最壞情況之間有什么區(qū)別?
答:最佳情況:算法的最佳情況解釋為算法執(zhí)行最佳的數(shù)據(jù)排列。例如,我們進行二分法檢索,如果目標值位于正在搜索的數(shù)據(jù)中心,則這就是最佳情況,最佳情況時間復(fù)雜度為0。
最差情況:給定算法的最差輸入?yún)⒖?。例如快速排序,如果選擇關(guān)鍵值的子列表的最大或最小元素,則會導(dǎo)致最差情況出現(xiàn),這將導(dǎo)致時間復(fù)雜度快速退化到O(n2)。
9、使用遞歸算法輸出某個目錄下所有文件和子目錄列表
答:
package com.bjsxt;
import java.io.File;
public class $ {
public static void main(String[] args) {
String path = "D:/301SXT";
test(path);
}
private static void test(String path) {
File f = new File(path);
File[] fs = f.listFiles();
if (fs == null) {
return;
}
for (File file : fs) {
if (file.isFile()) {
System.out.println(file.getPath());
} else {
test(file.getPath());
}
}
}
10、說明一下java排序的基本概念是什么?
答:排序主要分為兩類:內(nèi)部排序和外部排序,java各種排序算法其實指的是內(nèi)部排序算法。內(nèi)部排序是基于內(nèi)存的,整個排序過程都是在內(nèi)存中完成的,而外部排序指的是由于數(shù)據(jù)量太大,內(nèi)存不能完全容納,排序的時候需要借助外存才能完成(常常是算計著某一部分已經(jīng)計算過的數(shù)據(jù)移出內(nèi)存讓另一部分未被計算的數(shù)據(jù)進入內(nèi)存)。
算法是學(xué)習(xí)java編程的基礎(chǔ),因為是否有一個扎實的基本功是面試官衡量是否能勝任java程序員崗位的一個標準,Java算法面試題更是基本功中的基本。當然這些題目肯定不能包含java算法的所有知識點,在java教程中會涵蓋所有算法的內(nèi)容。大家可以通過這10道java算法面試題來自測自己對算法的掌握程度怎么樣,及時的查漏補缺。
初級 202925
初級 203221
初級 202629
初級 203743