更新時(shí)間:2020-10-27 17:50:35 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1543次
算法是學(xué)習(xí)計(jì)算機(jī)的基礎(chǔ),更是學(xué)習(xí)編程必會(huì)的內(nèi)容。在java程序員的面試中,對(duì)應(yīng)聘者基礎(chǔ)知識(shí)的掌握情況越來(lái)越重視,因此java算法面試題是大家在面試前必須要做的準(zhǔn)備工作之一,下面整理了10道??嫉膉ava算法面試題,都是必會(huì)的基礎(chǔ)題。

1、初級(jí)java排序算法的原理?
答:冒泡排序:重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過(guò)來(lái)。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說(shuō)該數(shù)列已經(jīng)排序完成。這個(gè)算法的名字由來(lái)是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端。
選擇排序:在要排序的一組數(shù)中,選出最小的一個(gè)數(shù)與第一個(gè)位置的數(shù)交換;然后在剩下的數(shù)當(dāng)中再找最小的與第二個(gè)位置的數(shù)交換,如此循環(huán)到倒數(shù)第二個(gè)數(shù)和最后一個(gè)數(shù)比較為止。
插入排序:每步將一個(gè)待排序的記錄,按其順序碼大小插入到前面已經(jīng)排序的字序列的合適位置(從后向前找到合適位置后),直到全部插入排序完為止。
希爾排序:先將整個(gè)待排序的記錄序列分割成為若干子序列分別進(jìn)行直接插入排序,待整個(gè)序列中的記錄“基本有序”時(shí),再對(duì)全體記錄進(jìn)行依次直接插入排序。
2、解釋什么是冒泡排序算法?
答:冒泡排序算法也稱為下沉排序。在這種類型的排序中,要排序的列表的相鄰元素之間互相比較。如果它們按順序排列錯(cuò)誤,將交換值并以正確的順序排列,直到最終結(jié)果“浮”出水面。
3、什么是復(fù)制回收算法?
答:把堆均分成兩個(gè)大小相同的區(qū)域,只使用其中的一個(gè)區(qū)域,直到該區(qū)域消耗完。此時(shí)垃圾回收器終端程序的執(zhí)行,通過(guò)遍歷把所有活動(dòng)的對(duì)象復(fù)制到另一個(gè)區(qū)域,復(fù)制過(guò)程中它們是緊挨著布置的,這樣也可以達(dá)到消除內(nèi)存碎片的目的。復(fù)制結(jié)束后程序會(huì)繼續(xù)運(yùn)行,直到該區(qū)域被用完。
但是,這種方法有兩個(gè)缺陷:對(duì)于指定大小的堆,需要兩倍大小的內(nèi)存空間;需要中斷正在執(zhí)行的程序,降低了執(zhí)行效率。
4、按代回收算法按代回收是為什么?
答:為什么要按代進(jìn)行回收?這是因?yàn)椴煌瑢?duì)象生命周期不同,每次回收都要遍歷所有存活對(duì)象,對(duì)于整個(gè)堆內(nèi)存進(jìn)行回收無(wú)疑浪費(fèi)了大量時(shí)間,對(duì)癥下藥可以提高垃圾回收的效率。主要思路是:把堆分成若搞個(gè)子堆,每個(gè)子堆視為一代,算法在運(yùn)行的過(guò)程中優(yōu)先收集“年幼”的對(duì)象,如果某個(gè)對(duì)象經(jīng)過(guò)多次回收仍然“存活”,就移動(dòng)到高一級(jí)的堆,減少對(duì)其掃描次數(shù)。
5、解釋二分法檢索如何工作?
答:在二分法檢索中,我們先確定數(shù)組的中間位置,然后將要查找的值與數(shù)組中間位置的值進(jìn)行比較,若小于數(shù)組中間值,則要查找的值應(yīng)位于該中間值之前,依此類推,不斷縮小查找范圍,直至得到最終結(jié)果。

6、解釋是否可以使用二分法檢索鏈表?
答:由于隨機(jī)訪問(wèn)在鏈表中是不可接受的,所以不可能到達(dá)O(1)時(shí)間的中間元素。因此,對(duì)于鏈表來(lái)說(shuō),二分法檢索是不可以的(對(duì)順序鏈表或排序后的鏈表是可以用的)。
7、解釋什么是堆排序?
答:堆排序可以看成是選擇排序的改進(jìn),它可以定義為基于比較的排序算法。它將其輸入劃分為未排序和排序的區(qū)域,通過(guò)不斷消除最小元素并將其移動(dòng)到排序區(qū)域來(lái)收縮未排序區(qū)域。
8、解釋一個(gè)算法的最佳情況和最壞情況之間有什么區(qū)別?
答:最佳情況:算法的最佳情況解釋為算法執(zhí)行最佳的數(shù)據(jù)排列。例如,我們進(jìn)行二分法檢索,如果目標(biāo)值位于正在搜索的數(shù)據(jù)中心,則這就是最佳情況,最佳情況時(shí)間復(fù)雜度為0。
最差情況:給定算法的最差輸入?yún)⒖?。例如快速排序,如果選擇關(guān)鍵值的子列表的最大或最小元素,則會(huì)導(dǎo)致最差情況出現(xiàn),這將導(dǎo)致時(shí)間復(fù)雜度快速退化到O(n2)。
9、使用遞歸算法輸出某個(gè)目錄下所有文件和子目錄列表
答:
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、說(shuō)明一下java排序的基本概念是什么?
答:排序主要分為兩類:內(nèi)部排序和外部排序,java各種排序算法其實(shí)指的是內(nèi)部排序算法。內(nèi)部排序是基于內(nèi)存的,整個(gè)排序過(guò)程都是在內(nèi)存中完成的,而外部排序指的是由于數(shù)據(jù)量太大,內(nèi)存不能完全容納,排序的時(shí)候需要借助外存才能完成(常常是算計(jì)著某一部分已經(jīng)計(jì)算過(guò)的數(shù)據(jù)移出內(nèi)存讓另一部分未被計(jì)算的數(shù)據(jù)進(jìn)入內(nèi)存)。
算法是學(xué)習(xí)java編程的基礎(chǔ),因?yàn)槭欠裼幸粋€(gè)扎實(shí)的基本功是面試官衡量是否能勝任java程序員崗位的一個(gè)標(biāo)準(zhǔn),Java算法面試題更是基本功中的基本。當(dāng)然這些題目肯定不能包含java算法的所有知識(shí)點(diǎn),在java教程中會(huì)涵蓋所有算法的內(nèi)容。大家可以通過(guò)這10道java算法面試題來(lái)自測(cè)自己對(duì)算法的掌握程度怎么樣,及時(shí)的查漏補(bǔ)缺。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)