⑴ java面試題
1.把一個小於十進制9999的二位元組數字轉換成16進制的數,讓其的10進制和16進制是一樣的。比如:十進制的9527轉成十六進制的0x9527。
2.base32是一種編碼形式,每次取5bit。將"ABCDEFGHIJKLMNOPQRSTUVWXYZ"提取出來。
例如:
|-8bit-| |-8bit-| |-8bit-| |-8bit-| |-8bit-| |-8bit-| |-8bit-| |-8bit-| |-8bit-|
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
xxxxx
xxx xx
xxxxx
x xxxxx
xxx xx
xxxxx
x xxxx
xxxx x
xxxxx
xx xxx
xxxxx
以此類推
3.假如你要做一個物品管理系統,建立模型對象。有電腦主機和電視機。怎樣建立模型對象。如果要添加電冰箱,需要修改嗎。如果添加沙發,又要如何修改
⑵ java基礎面試題:請高手前來幫忙解答
list.add(String.valueOf(50))
你要明白List<String> 的含義,它的意思就是把你添加的數據給控死了,只能為String類型,添加Integer類型的肯定是不行的 ,除非你修改一下,改成List list=new ArrayList();在add就沒問題了
⑶ Java基礎面試題都有哪些
一般面試官都會讓面試者回答哪些Java基礎面試題啊?難不難啊? 針對這一系列的疑問,廣州增城Java培訓學校收集了部分Java基礎面試題與大家分享,希望對各位參加了廣州專業Java培訓的學生,有一定的幫助! 一、Java基礎知識 1.Java有那些基本數據類型,String是不是基本數據類型,他們有何區別。 2.字元串的操作: 寫一個方法,實現字元串的反轉,如:輸入abc,輸出cba 寫一個方法,實現字元串的替換,如:輸入bbbwlirbbb,輸出bbbhhtccc。 3.數據類型之間的轉換 如何將數值型字元轉換為數字(Integer,Double) 如何將數字轉換為字元 如何取小數點前兩位,並四捨五入。 4.日期和時間 如何取得年月日,小時分秒 如何取得從1970年到現在的毫秒數 如何獲取某個日期是當月的最後一天 如何格式化日期 5.數組和集合 6.文件和目錄(I/O)操作 如何列出某個目錄下的所有文件 如何列出某個目錄下的所有子目錄 判斷一個文件或目錄是否存在 如何讀寫文件 7.Java多態的實現(繼承、重載、覆蓋) 8.編碼轉換,怎樣實現將GB2312編碼的字元串轉換為ISO-8859-1編碼的字元串。 9.Java中訪問資料庫的步驟,Statement和PreparedStatement之間的區別。 10.找出下列代碼可能存在的錯誤,並說明原因: 二、JSP&Servlet技術 1.描述JSP和Servlet的區別、共同點、各自應用的范圍 2.在Web開發中需要處理HTML標記時,應做什麼樣的處理,要篩選那些字元(< > & 「」) 3.在JSP中如何讀取客戶端的請求,如何訪問CGI變數,如何確定某個Jsp文件的真實路徑。 4.描述Cookie和Session的作用,區別和各自的應用范圍,Session工作原理。 5.列出Jsp中包含外部文件的方式,兩者有何區別。 6.說明Jsp中errorPage的作用,應用范圍。 7.介紹在Jsp中如何使用JavaBeans。 8.簡單介紹JSP的標記庫 9.Jsp和Servlet中的請求轉發分別如何實現。 三、J2EE相關知識 1.介紹J2EE、J2SE、J2SE的區別。 2.J2EE是一種技術還是一種平台,他提供了那些技術。 3.什麼是Application Server,它有什麼功能和優點。 4.簡單介紹連接池的優點和原理。 5.Web.xml的作用 四、其他 1.Web安全性的考慮(表單驗證、瀏覽器Basic方式的驗證,應用程序的安全性,SSL,代碼考慮) 2.簡單介紹您所了解的MVC。 3.簡單介紹所了解的XML。 4.文檔和編碼規范 5.Java中的分頁、效率考慮。 6.簡單介紹您所了解的structs。 Java面試題收藏: 1.xml在項目中的作用 2.s-EJB 與 e-EJB的區別 3.會話面的作用 4.cmp與bmp的優缺點 5.j2me程序的必需的幾個部分 6.c/s與b/s的區別 7.構建一個connect pool然後再調用它, 8.j2ee平台與dotnet平台的區別 9.ejb的life cycle 10.session bean 和 entity bean的區別 11.ejb中的transaction機制 12.synchronized (生產者和消費) 13.String 和 StringBuffer 14.Serializable 15.MVC (Struts的工作流程) 16.什麼是MDA 17.tcp與udp的區別 18.鏈表與散列表和數組的區別 19.堆和棧的區別 20.ejb的分類及區別 21.你對現在軟體業以及國內軟體業的看法 22.談談java多線程 23.談談文件加密技術 24.軟體開發生命周期 25.路由協議種類及特點 26.java的awt和swing組件的GUI設計的關鍵 27.對於java流的認識 28.簡單描述一下awt與swing區別。 29.簡述java編程中事件處理模式。 30.你編寫過applet嗎?applet的安全許可權如何?試列舉java application或者applet中與servlet/jsp通信可以採用的方式。 31.簡述邏輯操作(如&|)與條件操作(如&&||)的區別。
⑷ java面試題有哪些常見的啊
第一,談談final, finally, finalize的區別。
最常被問到。
第二,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面)?
第三,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。
第四,&和&&的區別。
這個問得很少。
第五,HashMap和Hashtable的區別。
常問。
第六,Collection 和 Collections的區別。
你千萬別說一個是單數一個是復數。
第七,什麼時候用assert。
API級的技術人員有可能會問這個。
第八,GC是什麼? 為什麼要有GC?
基礎。
第九,String s = new String("xyz");創建了幾個String Object?
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
第十一,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
面試題都是很變態的,要做好受虐的准備。
第十二,sleep() 和 wait() 有什麼區別?
搞線程的最愛。
第十三,Java有沒有goto?
很十三的問題,如果哪個面試的問到這個問題,我勸你還是別進這家公司。
第十四,數組有沒有length()這個方法? String有沒有length()這個方法?
第十五,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
常問。
第十六,Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()? 它們有何區別?
第十七,給我一個你最常見到的runtime exception。
如果你這個答不出來,面試的人會認為你沒有實際編程經驗。
第十八,error和exception有什麼區別?
第十九,List, Set, Map是否繼承自Collection介面?
第二十,abstract class和interface有什麼區別?
常問。
第二十一,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
第二十二,介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)?
第二十三,啟動一個線程是用run()還是start()?
第二十四,構造器Constructor是否可被override?
第二十五,是否可以繼承String類?
第二十六,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
第二十七,try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行,什麼時候被執行,在return前還是後?
第二十八,編程題: 用最有效率的方法算出2乘以8等於幾?
有C背景的程序員特別喜歡問這種問題。
第二十九,兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
第三十,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這里到底是值傳遞還是引用傳遞?
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
第三十二,編程題: 寫一個Singleton出來。
好先說這么一些。
答:
第一,談談final, finally, finalize的區別。
final—修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。
finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
第二,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面)?
匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作為一個介面,由另一個內部類實現。
第三,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。
Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++嵌套類最大的不同就在於是否有指向外部的引用上。具體可見 http: //www.frontfree.net/articles/services/view.asp?id=704&page=1
註: 靜態內部類(Inner Class)意味著1創建一個static內部類的對象,不需要一個外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象
第四,&和&&的區別。
&是位運算符。&&是布爾邏輯運算符。
第五,HashMap和Hashtable的區別。
都屬於Map介面的類,實現了將惟一鍵映射到特定的值上。
HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。
Hashtable 類似於 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因為它是同步的。
第六,Collection 和 Collections的區別。
Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。
Collection是個java.util下的介面,它是各種集合結構的父介面。第七,什麼時候用assert。
斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式為 true。如果表達式計算為 false,那麼系統會報告一個 Assertionerror。它用於調試目的:
assert(a > 0); // throws an Assertionerror if a <= 0
斷言可以有兩種形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 應該總是產生一個布爾值。
Expression2 可以是得出一個值的任意表達式。這個值用於生成顯示更多調試信息的 String 消息。
斷言在默認情況下是禁用的。要在編譯時啟用斷言,需要使用 source 1.4 標記:
javac -source 1.4 Test.java
要在運行時啟用斷言,可使用 -enableassertions 或者 -ea 標記。
要在運行時選擇禁用斷言,可使用 -da 或者 -disableassertions 標記。
要系統類中啟用斷言,可使用 -esa 或者 -dsa 標記。還可以在包的基礎上啟用或者禁用斷言。
可以在預計正常情況下不會到達的任何位置上放置斷言。斷言可以用於驗證傳遞給私有方法的參數。不過,斷言不應該用於驗證傳遞給公有方法的參數,因為不管是否啟用了斷言,公有方法都必須檢查其參數。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試後置條件。另外,斷言不應該以任何方式改變程序的狀態。
第八,GC是什麼? 為什麼要有GC? (基礎)。
GC是垃圾收集器。Java 程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
第九,String s = new String("xyz");創建了幾個String Object?
兩個對象,一個是「xyx」,一個是指向「xyx」的引用對象s。
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
⑸ java基礎面試題有哪些
下面是10道java基礎面試題,後附答案
1.什麼是 Java 虛擬機?為什麼 Java 被稱作是「平台無關的編程語言」?
Java 虛擬機是一個可以執行 Java 位元組碼的虛擬機進程。Java 源文件被編譯成能被 Java 虛擬機執行的位元組碼文件。
Java 被設計成允許應用程序可以運行在任意的平台,而不需要程序員為每一個平台單獨重寫或者是重新編譯。Java 虛擬機讓這個變為可能,因為它知道底層硬體平台的指令長度和其他特性。
2.「static」關鍵字是什麼意思?Java 中是否可以覆蓋(override)一個 private 或者是static 的方法?
「static」關鍵字表明一個成員變數或者是成員方法可以在沒有所屬的類的實例變數的情況下被訪問。
Java 中 static 方法不能被覆蓋,因為方法覆蓋是基於運行時動態綁定的,而 static 方法是編譯時靜態綁定的。static 方法跟類的任何實例都不相關,所以概念上不適用。
3.JDK 和 JRE 的區別是什麼?
Java 運行時環境(JRE)是將要執行 Java 程序的 Java 虛擬機。它同時也包含了執行 applet 需要的瀏覽器插件。Java 開發工具包 (JDK)是完整的 Java 軟體開發包,包含了 JRE,編譯器和其他的工具(比如:JavaDoc,Java 調試器),可以讓開發者開發、編譯、執行 Java 應用程序。
4.是否可以在 static 環境中訪問非 static 變數?
static 變數在 Java 中是屬於類的,它在所有的實例中的值是一樣的。當類被 Java 虛擬機載入的時候,會對 static 變數進行初始化。如果你的代碼嘗試不用實例來訪問非 static 的變數,編譯器會報錯,因為這些變數還沒有被創建出來,還沒有跟任何實例關聯上。
5.Java 支持的數據類型有哪些?什麼是自動拆裝箱?
Java 語言支持的 8 中基本數據類型是:
byte
short
int
long
float
double
boolean
char
自動裝箱是 Java 編譯器在基本數據類型和對應的對象包裝類型之間做的一個轉化。比如:把 int 轉化成 Integer,double 轉化成 double,等等。反之就是自動拆箱。
6.Java 支持多繼承么?
不支持,Java 不支持多繼承。每個類都只能繼承一個類,但是可以實現多個介面。
7.Java 中,什麼是構造函數?什麼是構造函數重載?什麼是復制構造函數?
當新對象被創建的時候,構造函數會被調用。每一個類都有構造函數。在程序員沒有給類提供構造函數的情況下,Java 編譯器會為這個類創建一個默認的構造函數。
Java 中構造函數重載和方法重載很相似。可以為一個類創建多個構造函數。每一個構造函數必須有它自己唯一的參數列表。
Java 不支持像 C++中那樣的復制構造函數,這個不同點是因為如果你不自己寫構造函數的情況下,Java 不會創建默認的復制構造函數。
8.Java 中的方法覆蓋(Overriding)和方法重載(Overloading)是什麼意思?
Java 中的方法重載發生在同一個類裡面兩個或者是多個方法的方法名相同但是參數不同的情況。與此相對,方法覆蓋是說子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。
9.介面和抽象類的區別是什麼?
Java 提供和支持創建抽象類和介面。它們的實現有共同點,不同點在於:
介面中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
類可以實現很多個介面,但是只能繼承一個抽象類
類如果要實現一個介面,它必須要實現介面聲明的所有方法。但是,類可以不實現抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。
抽象類可以在不提供介面方法實現的情況下實現介面。
Java 介面中聲明的變數默認都是 final 的。抽象類可以包含非 final 的變數。
Java 介面中的成員函數默認是 public 的。抽象類的成員函數可以是 private, protected 或者是 public。
介面是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含 main 方法的話是可以被調用的。
10.什麼是值傳遞和引用傳遞?
對象被值傳遞,意味著傳遞了對象的一個副本。因此,就算是改變了對象副本,也不會影響源對象的值。
對象被引用傳遞,意味著傳遞的並不是實際的對象,而是對象的引用。因此,外部對引用對象所做的改變會反映到所有的對象上。
最後祝你面試順利!
⑹ java面試題 很急 謝謝
2, 歸並排序(merge sort)體現了分治的思想,即將一個待排序數組分為兩部分,對這兩個部分進行歸並排序,排序後,再對兩個已經排序好的數組進行合並。這種思想可以用遞歸方式很容易實現。歸並排序的時間復雜度為O(nlogn),空間復雜度為O(n)。
實現代碼如下:
#include <stdio.h>
#include "common.h"
void merge(int data[], int p, int q, int r)
{
int i, j, k, n1, n2;
n1 = q - p + 1;
n2 = r - q;
int L[n1];
int R[n2];
for(i = 0, k = p; i < n1; i++, k++)
L[i] = data[k];
for(i = 0, k = q + 1; i < n2; i++, k++)
R[i] = data[k];
for(k = p, i = 0, j = 0; i < n1 && j < n2; k++)
{
if(L[i] > R[j])
{
data[k] = L[i];
i++;
}
else
{
data[k] = R[j];
j++;
}
}
if(i < n1)
{
for(j = i; j < n1; j++, k++)
data[k] = L[j];
}
if(j < n2)
{
for(i = j; i < n2; i++, k++)
data[k] = R[i];
}
}
void merge_sort(int data[], int p, int r)
{
if(p < r)
{
int q = (p + r) / 2;
merge_sort(data, p, q);
merge_sort(data, q + 1, r);
merge(data, p, q, r);
}
}
void test_merge_sort()
{
int data[] = {44, 12, 145, -123, -1, 0, 121};
printf("-------------------------------merge sort----------------------------\n");
out_int_array(data, 7);
merge_sort(data, 0, 6);
out_int_array(data, 7);
}
int main()
{
test_merge_sort();
return 0;
}
4.對於有n個結點的線性表(e0,e1,…,en-1),將結點中某些數據項的值按遞增或遞減的次序,重新排列線性表結點的過程,稱為排序。排序時參照的數據項稱為排序碼,通常選擇結點的鍵值作為排序碼。
若線性表中排序碼相等的結點經某種排序方法進行排序後,仍能保持它們在排序之前的相對次序,稱這種排序方法是穩定的;否則,稱這種排序方法是不穩定的。
在排序過程中,線性表的全部結點都在內存,並在內存中調整它們在線性表中的存儲順序,稱為內排序。在排序過程中,線性表只有部分結點被調入內存,並藉助內存調整結點在外存中的存放順序的排序方法成為外排序。
下面通過一個表格簡單介紹幾種常見的內排序方法,以及比較一下它們之間的性能特點。
排序方法
簡介
平均時間
最壞情況
輔助存儲
是否穩定
簡單排序
選擇排序
反復從還未排好序的那部分線性表中選出鍵值最小的結點,並按從線性表中選出的順序排列結點,重新組成線性表。直至未排序的那部分為空,則重新形成的線性表是一個有序的線性表。
O( )
O( )
O(1)
不穩定
直接插入排序
假設線性表的前面I個結點序列e0,e1,…,en-1是已排序的。對結點在這有序結點ei序列中找插入位置,並將ei插入,而使i+1個結點序列e0,e1,…,ei也變成排序的。依次對i=1,2,…,n-1分別執行這樣的插入步驟,最終實現線性表的排序。
O( )
O( )
O(1)
穩定
冒泡排序
對當前還未排好序的范圍內的全部結點,自上而下對相鄰的兩個結點依次進行比較和調整,讓鍵值大的結點往下沉,鍵值小的結點往上冒。即,每當兩相鄰比較後發現它們的排列順序與排序要求相反時,就將它們互換。
O( )
O( )
O(1)
穩定
希爾排序
對直接插入排序一種改進,又稱「縮小增量排序」。先將整個待排序列分割成為若乾子序列分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行一次直接插入排序。
kn ln n
O( )
O(logn)
不穩定
快速排序
對冒泡排序的一種本質的改進。通過一趟掃視後,使待排序序列的長度能大幅度的減少。在一趟掃視後,使某個結點移到中間的正確位置,並使在它左邊序列的結點的鍵值都比它的小,而它右邊序列的結點的鍵值都不比它的小。稱這樣一次掃視為「劃分」。每次劃分使一個長序列變成兩個新的較小子序列,對這兩個小的子序列分別作同樣的劃分,直至新的子序列的長度為1使才不再劃分。當所有子序列長度都為1時,序列已是排好序的了。
O(nlogn)
O( )
O(logn)
不穩定
堆排序
一種樹形選擇排序,是對直接選擇排序的有效改進。一個堆是這樣一棵順序存儲的二叉樹,它的所有父結點(e[i])的鍵值均不小於它的左子結點(e[2*i+1])和右子結點(e[2*i+2])的鍵值。初始時,若把待排序序列的n個結點看作是一棵順序存儲的二叉樹,調整它們的存儲順序,使之成為一個堆,這時堆的根結點鍵值是最大者。然後將根結點與堆的最後一個結點交換,並對少了一個結點後的n-1結點重新作調整,使之再次成為堆。這樣,在根結點得到結點序列鍵值次最大值。依次類推,直到只有兩個結點的堆,並對它們作交換,最後得到有序的n個結點序列。
O(nlogn)
O(nlogn)
O(1)
不穩定
歸並排序
將兩個或兩個以上的有序子表合並成一個新的有序表。對於兩個有序子表合並一個有序表的兩路合並排序來說,初始時,把含n個結點的待排序序列看作有n個長度都為1的有序子表所組成,將它們依次兩兩合並得到長度為2的若干有序子表,再對它們作兩兩合並……直到得到長度為n的有序表,排序即告完成。
O(nlogn)
O(nlogn)
O(n)
穩定
後面根據各種排序演算法,給出了C語言的實現,大家在復習的時候可以做下參考。
u 選擇排序
void ss_sort(int e[], int n)
{ int i, j, k, t;
for(i=0; i< n-1; i++) {
for(k=i, j=i+1; j<n; j++)
if(e[k]>e[j]) k=j;
if(k!=i) {
t=e[i]; e[i]=e[k]; e[k]=t;
}
}
}
u 直接插入排序
void si_sort(int e[], int n)
{ int i, j, t;
for(i=0; i< n; i++) {
for(t=e[i], j=i-1; j>=0&&t<e[j]; j--)
e[j+1]=e[j];
e[j+1]=t;
}
}
u 冒泡排序
void sb_sort(int e[], int n)
{ int j, p, h, t;
for(h=n-1; h>0; h=p) {
for(p=j=0; j<h; j++)
if(e[j]>e[j+1]) {
t=e[j]; e[j]=e[j+1]; e[j+1]=t;
p=j;
}
}
}
u 希爾排序
void shell(int e[], int n)
{ int j, k, h, y;
for(h=n/2; h>0; h=h/2)
for(j=h; j<n; j++) {
y=e[j];
for(k=j-h; k>0&&y<e[k]; k-=h)
e[k+h]=e[k];
e[k+h]=y;
}
}
u 堆排序
void sift(e, n, s)
int e[];
int n;
int s;
{ int t, k, j;
t=e[s];
k=s; j=2*k+1;
while(j<n) {
if(j<n-1&&e[j]<e[j+1])
j++;
if(t<e[j]) {
e[k]=e[j];
k=j;
j=2*k+1;
}else break;
}
e[k]=t;
}
void heapsorp (int e[], int n)
{ int i, k, t;
for(i=n/2-1; i>=0; i--)
sift(e, n, i);
for(k=n-1; k>=1; k--) {
t=e[0]; e[0]=e[k]; e[k]=t;
sift(e, k, 0);
}
}
u 快速排序
void r_quick(int e[], int low, int high)
{ int i, j, t;
if(low<high) {
i=low; j=high; t=e[low];
while(i<j) {
while (i<j&&e[j]>t) j--;
if(i<j) e[I++]=e[j];
while (i<j&&e[i]<=t) i++;
if(I<j) e[j--]=e[i];
}
e[i]=t;
r_quick(e,low,i-1);
r_quick(w,i+1,high);
}
}
另外,外排序是對大型文件的排序,待排序的記錄存儲在外存中,在排序過程中,內存只存儲文件的一部分記錄,整個排序過程需進行多次的內外存間的交換。
*** 查找
查找就是在按某種數據結構形式存儲的數據集合中,找出滿足指定條件的結點。
按查找的條件分類,有按結點的關鍵碼查找、關鍵碼以外的其他數據項查找或其他數據項的組合查找等。按查找數據在內存或外存,分內存查找和外存查找。按查找目的,查找如果只是為了確定指定條件的結點存在與否,成為靜態查找;查找是為確定結點的插入位置或為了刪除找到的結點,稱為動態查找。
這里簡單介紹幾種常見的查找方法。
u 順序存儲線性表的查找
這是最常見的查找方式。結點集合按線性表組織,採用順序存儲方式,結點只含關鍵碼,並且是整數。如果線性表無序,則採用順序查找,即從線性表的一端開始逐一查找。而如果線性表有序,則可以使用順序查找、二分法查找或插值查找。
u 分塊查找
分塊查找的過程分兩步,先用二分法在索引表中查索引項,確定要查的結點在哪一塊。然後,再在相應塊內順序查找。
u 鏈接存儲線性表的查找
對於鏈接存儲線性表的查找只能從鏈表的首結點開始順序查找。同樣對於無序的鏈表和有序的鏈表查找方法不同。
u 散列表的查找
散列表又稱雜湊表,是一種非常實用的查找技術。它的原理是在結點的存儲位置和它的關鍵碼間建立一個確定的關系,從而讓查找碼直接利用這個關系確定結點的位置。其技術的關鍵在於解決兩個問題。
I. 找一個好的散列函數
⑺ 想面試Java開發崗位,請問過來人要准備的專業面試題都有哪些
首先確認,你是java行業的新手。
面試題。
java基礎部分(常見的):
1、java有幾種基本數據類型。
2、冒泡排序,(筆試常出現)
3、解釋什麼是類的成員變數,局部變數,實例成員變數,類成員變數?
4、最狠得就是——什麼是面向對象,這個只能自己組織語言,按自己的理解來回答,根本找不到具體答案。
5、抽象類與介面的區別。
6、線程有幾種實現方式,分別是什麼?
7、如何使線程同步?
8、什麼是GC?
9、構造方法是否能被重寫?為什麼?
10、java關鍵字是否區分大小寫?
11、for循環里的三個表達式的執行順序是什麼?
12、簡述什麼是關系型資料庫?
13、arrayList與linkedList的區別?
14、String與StringBuffer的區別?
資料庫部分(常見):
1、組函數,
2、having和where的區別,
3、偽列,
4、怎麼實現數據分頁?
5、表鏈接
6、事務(ACID)
7、數據安全
8、序列
9、索引
10、你所參與過的項目用了幾個表?
JDBC部分(常見):
1、JDBC的六個步驟。
2、JDBC分頁。
Servlet(常見):
1、客戶端發送請求的幾種方式。
2、servlet的生命周期的幾個階段。
3、forward跳轉與redirect跳轉的區別。
4、cookie與session的區別。
5、三大作用域。
6、連接池。
JSP(常見):
1、jsp的九大內置對象。
2、EL表達式。
3、JSTL標簽庫。
javaScript(很少會問,了解即可):
1、DOM:對象,文檔,模型
2、滑鼠點擊事件:
AJAX(了解):
1、ajax請求與傳統請求的區別。
框架相關:
1、Struts2數據處理機制。
2、OGNL表達式。
3、了解下值棧。
4、MVC開發模式的好處。
5、Hibernate與MyBatis的區別。
6、連接池
7、struts2與SpringMVC的區別。
8、IOC,DI。
9、AOP。
10、運用框架的好處。
11、用到過的開發模式有哪些?
註:以上內容只要會一大部分,面試基本都會通過,如果全部會的話,就可以挑offer了,會一半就有很大的可能了(手都敲麻了.。。。)。