更新時間:2019-08-06 12:09:52 來源:動力節點 瀏覽2404次
1、請簡單解釋算法是什么?
算法是一個定義良好的計算過程,它將一些值作為輸入并產生相應的輸出值。簡單來說,它是將輸入轉換為輸出的一系列計算步驟。
2、解釋什么是快速排序算法?
快速排序算法能夠快速排序列表或查詢。它基于分割交換排序的原則,這種類型的算法占用空間較小,它將待排序列表分為三個主要部分:
小于Pivot的元素
樞軸元素Pivot(選定的比較值)
大于Pivot的元素
3、解釋算法的時間復雜度?
算法的時間復雜度表示程序運行完成所需的總時間,它通常用大O表示法來表示。
4、請問用于時間復雜度的符號類型是什么?
用于時間復雜度的符號類型包括:
Big Oh:它表示小于或等于目標多項式
Big Omega:它表示大于或等于目標多項式
Big Theta:它表示與目標多項式相等
Little Oh:它表示小于目標多項式
Little Omega:它表示大于目標多項式
5、解釋二分法檢索如何工作?
在二分法檢索中,我們先確定數組的中間位置,然后將要查找的值與數組中間位置的值進行比較,若小于數組中間值,則要查找的值應位于該中間值之前,依此類推,不斷縮小查找范圍,直至得到最終結果。
6、解釋是否可以使用二分法檢索鏈表?
由于隨機訪問在鏈表中是不可接受的,所以不可能到達O(1)時間的中間元素。因此,對于鏈表來說,二分法檢索是不可以的(對順序鏈表或排序后的鏈表是可以用的)。
7、解釋什么是堆排序?
堆排序可以看成是選擇排序的改進,它可以定義為基于比較的排序算法。它將其輸入劃分為未排序和排序的區域,通過不斷消除最小元素并將其移動到排序區域來收縮未排序區域。
8、說明什么是Skip list?
Skip list數據結構化的方法,它允許算法在符號表或字典中搜索、刪除和插入元素。在Skip list中,每個元素由一個節點表示。搜索函數返回與key相關的值的內容。插入操作將指定的鍵與新值相關聯,刪除操作可刪除指定的鍵。
9、解釋插入排序算法的空間復雜度是多少?
插入排序是一種就地排序算法,這意味著它不需要額外的或僅需要少量的存儲空間。對于插入排序,它只需要將單個列表元素存儲在初始數據的外側,從而使空間復雜度為O(1)。
10、解釋什么是“哈希算法”,它們用于什么?
“哈希算法”是一個哈希函數,它使用任意長度的字符串,并將其減少為唯一的固定長度字符串。它用于密碼有效性、消息和數據完整性以及許多其他加密系統。
11、解釋如何查找鏈表是否有循環?
要知道鏈表是否有循環,我們將采用兩個指針的方法。如果保留兩個指針,并且在處理兩個節點之后增加一個指針,并且在處理每個節點之后,遇到指針指向同一個節點的情況,這只有在鏈表有循環時才會發生。
12、解釋加密算法的工作原理?
加密是將明文轉換為稱為“密文”的密碼格式的過程。要轉換文本,算法使用一系列被稱為“鍵”的位來進行計算。密鑰越大,創建密文的潛在模式數越多。大多數加密算法使用長度約為64到128位的固定輸入塊,而有些則使用流方法。
13、列出一些常用的加密算法?
一些常用的加密算法是:
3-way
Blowfish
CAST
CMEA
GOST
DES 和Triple DES
IDEA
LOKI等等
14、解釋一個算法的最佳情況和最壞情況之間有什么區別?
最佳情況:算法的最佳情況解釋為算法執行最佳的數據排列。例如,我們進行二分法檢索,如果目標值位于正在搜索的數據中心,則這就是最佳情況,最佳情況時間復雜度為0。
最差情況:給定算法的最差輸入參考。例如快速排序,如果選擇關鍵值的子列表的最大或最小元素,則會導致最差情況出現,這將導致時間復雜度快速退化到O(n2)。
15、解釋什么是基數排序算法?
基數排序又稱“桶子法”,是通過比較數字將其分配到不同的“桶里”來排序元素的。它是線性排序算法之一。
16、解釋什么是遞歸算法?
遞歸算法是一個解決復雜問題的方法,將問題分解成較小的子問題,直到分解的足夠小,可以輕松解決問題為止。通常,它涉及一個調用自身的函數。
17、提到遞歸算法的三個定律是什么?
所有遞歸算法必須遵循三個規律
遞歸算法必須有一個基點
遞歸算法必須有一個趨向基點的狀態變化過程
遞歸算法必須自我調用
18、解釋什么是冒泡排序算法?
冒泡排序算法也稱為下沉排序。在這種類型的排序中,要排序的列表的相鄰元素之間互相比較。如果它們按順序排列錯誤,將交換值并以正確的順序排列,直到最終結果“浮”出水面。
19、寫一個方法,用一個for循環打印九九乘法表
Java代碼
/**
* 打印九九乘法口訣表
*/
public void nineNineMulitTable(){
for (int i = 1,j = 1; j <= 9; i++) {
System.out.print(i+"*"+j+"="+i*j+" ");
if(i==j){
i=0;
j++;
System.out.println();
}
}
}
20、給定一個java.util.Date對象,如何轉化為”2007-3-22 20:23:22”格式的字符串
Java代碼
/**
* 將某個日期以固定格式轉化成字符串
* @param date
* @return str
*/
public String date2FormatStr(Date date)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(date);
return str;
}
21、寫一個方法,能夠判斷任意一個整數是否素數
Java代碼 復制代碼 收藏代碼
/**
* 判斷任意一個整數是否素數
* @param num
* @return boolean
*/
public boolean isPrimeNumber(int num)
{
for (int i = 2; i <= Math.sqrt(num); i++) {
if(num%i==0)
{
return false;
}
}
return true;
}
22、寫一個方法,輸入任意一個整數,返回它的階乘
Java代碼
/**
*獲得任意一個整數的階乘
*@param n
*@returnn!
*/
public int factorial(int num)
{
//遞歸
if(num == 1)
{
return 1;
}
return num*factorial(num-1);
}
23、寫一個方法,用二分查找法判斷任意整數在任意整數數組里面是否存在,若存在就返回它在數組中的索引位置,不存在返回-1
Java代碼
/**
*二分查找特定整數在整型數組中的位置(遞歸)
*@param dataset
*@param data
*@param beginIndex
*@param endIndex
*@return index
*/
public int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){
int midIndex = (beginIndex+endIndex)/2;
//如果查找的數要比開始索引的數據要小或者是比結束索引的書要大,或者開始查找的索引值大于結束的索引值返回-1沒有查到
if(data
return -1;
}
if(data<dataset[midindex]){< p="">
return binarySearch(dataset,data,beginIndex,midIndex-1);
}else if(data>dataset[midIndex])
{
return binarySearch(dataset,data,midIndex+1,endIndex);
}else {
return midIndex;
}
}
/**
*二分查找特定整數在整型數組中的位置(非遞歸)
*@param dataset
*@param data
*@return index
*/
public int binarySearch(int[] dataset ,int data)
{
int beginIndex = 0;
int endIndex = dataset.length - 1;
int midIndex = -1;
if(data
return -1;
}
while(beginIndex <= endIndex) {
midIndex = (beginIndex+endIndex)/2;
if(data<dataset[midindex]) p="" {<="">
endIndex = midIndex-1;
} else if(data>dataset[midIndex]) {
beginIndex = midIndex+1;
}else {
return midIndex;
}
}
return -1;
}
24、定義一個20*5的二維數組,用來存儲某班級20位學員的5門課的成績;這5門課
按存儲順序依次為:core C++,coreJava,Servlet,JSP和EJB。
(1)循環給二維數組的每一個元素賦0~100之間的隨機整數。
(2)按照列表的方式輸出這些學員的每門課程的成績。
(3)要求編寫程序求每個學員的總分,將其保留在另外一個一維數組中。
(4)要求編寫程序求所有學員的某門課程的平均分。
class Student{
public static void main(String[] args ){
int[][] mark = new int[20][5];
// 給學生賦分數值,隨機生成
for ( int i = 0; )
}
}//未完成
更多java面試題請看:http://www.ilovecolors.com.cn/tutorial_baseinterviewquestions/
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習