今天開始整理面試和以前學的java等知識點和題目2018-9-20
2.求n階層
方法一:for迴圈
方法二;遞迴
public class Factorail { /** * 求5的階乘? 5*4*3*2*1 = ? */ public static int test(int number){ if(number == 1){ return 1; }else{ return number * test(number - 1); } } public static void main(String[] args) { System.out.println(test(5)); } }
3.水仙花數
4.java抽象類與介面的區別
5.JAVA執行緒同步的方法
6.JAVA氣泡排序
public static void bubbleSort(int []arr) {
int[] arr = {12,23,34,56,56,56,78};
for(int i =0;i<
arr.length-1
;i++) {
for(int
j
=
0
;j<arr.length-i-1;j++) {//-1為了防止溢位
if(arr[j]>arr[j+1]) {
int temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;}}}}
7.選擇排序
擇排序(Selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法。
public
static
void
selectSort(
int
[]a)
{
int
minIndex=
0
;
int
temp=
0
;
if
((a==
null
)||(a.length==
0
))
return
;
for
(
int
i=
0
;i<a.length;i++)
{
minIndex=i;
//無序區的最小資料陣列下標
for
(
int
j=i+
1
;j<a.length;j++)
{
//在無序區中找到最小資料並儲存其陣列下標
if
(a[j]<a[minIndex])
{
minIndex=j;
}
}
//將最小元素放到本次迴圈的前端
temp=a[i];
a[i]=a[minIndex];
a[minIndex]=temp;
}
}
8.希爾排序
希爾排序(Shell's Sort)是插入排序的一種又稱“縮小增量排序”(Diminishing Increment Sort),是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。
希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序演算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個檔案恰被分成一組,演算法便終止。
|
快速排序(Quicksort)是對氣泡排序的一種改進。
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。
class
Quick
{
public
void
sort(
int
arr[],
int
low,
int
high)
{
int
l=low;
int
h=high;
int
povit=arr[low];
while
(l<h)
{
while
(l<h&&arr[h]>=povit)
h--;
if
(l<h){
int
temp=arr[h];
arr[h]=arr[l];
arr[l]=temp;
l++;
}
while
(l<h&&arr[l]<=povit)
l++;
if
(l<h){
int
temp=arr[h];
arr[h]=arr[l];
arr[l]=temp;
h--;
}
}
print(arr);
System.out.print(
"l="
+(l+
1
)+
"h="
+(h+
1
)+
"povit="
+povit+
"\n"
);
if
(l>low)sort(arr,low,l-
1
);
if
(h<high)sort(arr,l+
1
,high);
}
}
/*//////////////////////////方式二////////////////////////////////*/
更高效點的程式碼:
public
<TextendsComparable<?superT>>
T[]quickSort(T[]targetArr,intstart,intend)
{
inti=start+
1
,j=end;
Tkey=targetArr[start];
SortUtil<T>sUtil=newSortUtil<T>();
if
(start>=end)
return
(targetArr);
/*從i++和j--兩個方向搜尋不滿足條件的值並交換
*
*條件為:i++方向小於key,j--方向大於key
*/
while
(
true
)
{
while
(targetArr[j].compareTo(key)>
0
)j--;
while
(targetArr[i].compareTo(key)<
0
&&i<j)i++;
if
(i>=j)
break
;
sUtil.swap(targetArr,i,j);
if
(targetArr[i]==key)
{
j--;
}
else
{
i++;
}
}
/*關鍵資料放到‘中間’*/
sUtil.swap(targetArr,start,j);
if
(start<i-
1
)
{
this
.quickSort(targetArr,start,i-
1
);
}
if
(j+
1
<end)
{
this
.quickSort(targetArr,j+
1
,end);
}
returntargetArr;
}
/*//////////////方式三:減少交換次數,提高效率/////////////////////*/
private
<TextendsComparable<?superT>>
voidquickSort(T[]targetArr,intstart,intend)
{
inti=start,j=end;
Tkey=targetArr[start];
while
(i<j)
{
/*按j--方向遍歷目標陣列,直到比key小的值為止*/
while
(j>i&&targetArr[j].compareTo(key)>=
0
)
{
j--;
}
if
(i<j)
{
/*targetArr[i]已經儲存在key中,可將後面的數填入*/
targetArr[i]=targetArr[j];
i++;
}
/*按i++方向遍歷目標陣列,直到比key大的值為止*/
while
(i<j&&targetArr[i].compareTo(key)<=
0
)
/*此處一定要小於等於零,假設陣列之內有一億個1,0交替出現的話,而key的值又恰巧是1的話,那麼這個小於等於的作用就會使下面的if語句少執行一億次。*/
{
i++;
}
if
(i<j)
{
/*targetArr[j]已儲存在targetArr[i]中,可將前面的值填入*/
targetArr[j]=targetArr[i];
j--;
}
}
/*此時i==j*/
targetArr[i]=key;
/*遞迴呼叫,把key前面的完成排序*/
this
.quickSort(targetArr,start,i-
1
);
/*遞迴呼叫,把key後面的完成排序*/
this
.quickSort(targetArr,j+
1
,end);
}
10.插入排序
/**
*插入排序
*@paramarr
*@return
*/
private
static
int
[] insertSort(
int
[]arr){
if
(arr ==
null
|| arr.length <
2
){
return
arr;
}
for
(inti=
1
;i<arr.length;i++){
for
(intj=i;j>
0
;j--){
if
(arr[j]<arr[j-
1
]){
//TODO:
int
temp=arr[j];
arr[j]=arr[j-
1
];
arr[j-
1
]=temp;
}
else
{
//接下來是無用功
break
;
}
}
}
return
arr;
}
11.JAVA類載入機制與雙委派模型
12.其他
13.加密解密演算法
14.
子網掩碼主要作用:
1 用於遮蔽IP地址的一部分以區別網路標識和主機標識,並說明該IP地址是在區域網上,還是在遠端網上。
2 是用於將一個大的IP網路劃分為若干小的子網路。
15.三次握手?為什麼不是兩次?
16.time_wait
17.TCP/UDP區別
18事物ACID,髒讀,幻讀
19.B/B+數
20JAVA HashMap原理
21 JavaHashMap原理,和HashTable區別ConcurrentHashMap和他們的區別
22 java程式碼中執行緒安全級別
23valotile關鍵字如何使用?
24 Spring MVC工作流程
25紅黑樹
http://www.cnblogs.com/skywang12345/p/3245399.html
25 REST四種請求(get,delete,put,post)
Map底層結構是平衡二叉樹(如紅黑樹);HashMap底層結構是陣列加連結串列,實際上是“連結串列雜湊。 Set底層結構是紅黑樹;HashSet底層資料結構是散列表。 List底層結構是陣列;ArrayList和Vector底層結構是陣列;LinkList底層結構是連結串列。
27資料庫索引
索引問題就是一個查詢問題。 (0)索引起源:大多數時候,我們不知道某一條記錄在第幾個位置,只知道主鍵(primary key)的值。這時為了讀取資料,可以一條條比對記錄。但是這樣做效率太低。 (1)索引介紹:資料庫索引,是資料庫管理系統中一個排序的資料結構,這些資料結構以某種方式引用(指向)資料,以協助快速查詢、更新資料庫表中資料。 (2)底層實現:索引的實現通常使用B樹及其變種B+樹。 (3)代價:為表設定索引要付出代價的:一是增加了資料庫的儲存空間,二是在插入和修改資料時要花費較多的時間進行索引的維護(因為索引也要隨之變動)。 (4)結構: Image (5)建立索引可以大大提高系統的效能。 第一,通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。 第二,可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。 第三,可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。 第四,在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時間。 第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的效能。 (6)在哪些列上適合建立索引? 在經常需要搜尋的列上,可以加快搜索的速度; 在經常用在連線的列上,這些列主要是一些外來鍵,可以加快連線的速度; 在經常需要排序的列上建立索引,因為索引已經排序,這樣查詢可以利用索引的排序, 加快排序查詢時間; 在經常使用在WHERE子句中的列上面建立索引,加快條件的判斷速度。 (7)哪列不應該建立索引? 第一,對於那些在查詢中很少使用或者參考的列不應該建立索引。 第二,對於那些只有很少資料值的列也不應該增加索引。 第三,對於那些定義為text, image和bit資料型別的列不應該增加索引。這是因為,這些列的資料量要麼相當大,要麼取值很少。 第四,當修改效能遠遠大於檢索效能時,不應該建立索引。這是因為,修改效能和檢索效能是互相矛盾的。當增加索引時,會提高檢索效能,但是會降低修改效能。當減少索引時,會提高修改效能,降低檢索效能。因此,當修改效能遠遠大於檢索效能時,不應該建立索引。 (8)資料庫設計器中建立三種索引:唯一索引、主鍵索引和聚集索引。 唯一索引 唯一索引是不允許其中任何兩行具有相同索引值的索引。 當現有資料中存在重複的鍵值時,大多數資料庫不允許將新建立的唯一索引與表一起儲存。資料庫還可能防止新增將在表中建立重複鍵值的新資料。例如,如果在employee表中職員的姓(lname)上建立了唯一索引,則任何兩個員工都不能同姓。 主鍵索引 主鍵索引指的就是主鍵,主鍵既是約束,也是索引,主鍵是索引的一種,是唯一索引的特殊型別。建立主鍵的時候,資料庫預設會為主鍵建立一個唯一索引。 該索引要求主鍵中的每個值都唯一。當在查詢中使用主鍵索引時,它還允許對資料的快速訪問。 聚集索引 在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。一個表只能包含一個聚集索引。 如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的資料訪問速度。 (9)主鍵索引和唯一索引的區別? 主鍵建立後一定包含一個唯一性索引,唯一性索引並不一定就是主鍵。 唯一性索引列允許空值,而主鍵列不允許為空值。 主鍵可以被其他表引用為外來鍵,而唯一索引不能。 一個表最多隻能建立一個主鍵,但可以建立多個唯一索引。 主鍵更適合那些不容易更改的唯一標識,如自動遞增列、身份證號等。
28 Vector和ArrayList 區別
29 String,StringBuffer與StringBuilder的區別??
30資料庫優化設計
31XML解析——Java中XML的四種解析方式
32 Spring AOP詳解
33Spring IOC原理
34 堆和棧的區別: 一、堆疊空間分配區別: 1、棧(作業系統):由作業系統自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧; 2、堆(作業系統): 一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由OS回收,分配方式倒是類似於連結串列。 二、堆疊快取方式區別: 1、棧使用的是一級快取, 他們通常都是被呼叫時處於儲存空間中,呼叫完畢立即釋放; 2、堆是存放在二級快取中,生命週期由虛擬機器的垃圾回收演算法來決定(並不是一旦成為孤兒物件就能被回收)。所以呼叫這些物件的速度要相對來得低一些。 三、堆疊資料結構區別: 堆(資料結構):堆可以被看成是一棵樹,如:堆排序; 棧(資料結構):一種先進後出的資料結構。
35java八種資料型別
36java讀取檔案
37java連結資料庫
38java遍歷集合中的元素
39迭代與遞迴的區別?
40java虛擬機器:垃圾回收機制,新生代、老年代、永久代的區別,永久代中主要儲存什麼?
41jdk8新特性
42java設計模式
43悲觀鎖和樂觀鎖
44java中鎖的機制
45sql聯合查詢
46資料庫索引
47jdk自帶執行緒池
48其他