尚學堂 老師好!

上海:15201841284

廣州:020-2989 6995

深圳:0755-23061965

武漢:027-8798 9193

第一篇:面試題匯總

Java基礎、語法
1.Java跨平臺原理(字節碼文件、虛擬機) 2.Java的安全性 3.Java三大版本 4.什么是JVM?什么是JDK? 什么是JRE? 5.Java三種注釋類型 6.8種基本數據類型及其字節數 7.i++和++i的異同之處 8.&和&&的區別和聯系,|和||的區別和聯系 9.用最有效率的方法算出2乘以8等于多少 10.基本數據類型的類型轉換規則 11.if多分支語句和switch多分支語句的異同之處 12.while和do-while循環的區別 13.break和continue的作用 14.請使用遞歸算法計算n! 15.遞歸的定義和優缺點 16.數組的特征 17.請寫出冒泡排序代碼 18.請寫出選擇排序的代碼 19.請寫出插入排序的代碼 20.可變參數的作用和特點 21.類和對象的關系 22.面向過程和面向對象的區別 23.this和super關鍵字的作用 24.static關鍵字的作用 25.final和abstract關鍵字的作用 26.final、finally、finalize的區別 27.寫出java.lang.Object類的六個常用方法 28.private/默認/protected/public權限修飾符的區別 29.繼承條件下構造方法的執行過程 30.==和equals的區別和聯系 31.談談Java的多態 32.簡述Java的垃圾回收機制 33.基本數據類型和包裝類 34.Integer與int的區別 35.java.sql.Date和java.util.Date的聯系和區別 36.使用遞歸算法輸出某個目錄下所有文件和子目錄列表 37.關于Java編譯,下面哪一個正確()(選擇一項) 38.下列說法正確的有()(選擇一項) 39.Java中接口的修飾符可以為()(選擇一項) 40.給定以下代碼,程序將輸出 ()(選擇一項) 41.下列關于關鍵字的使用說法錯誤的是()(選擇一項) 42.下列哪些語句關于內存回收的說法是正確的()(選擇一項) 43.選出合理的標識符()(選擇兩項) 44.下列說法正確的是()(選擇多項) 45.定義一個類名為”MyClass.java”的類,并且該類可被一個工程中的所有類訪問,那么該類的正確聲明為()(選擇兩項) 46.面向對象的特征有哪些方面?請用生活中的例子來描述。 47.說明內存泄漏和內存溢出的區別和聯系,結合項目經驗描述Java程序中如何檢測?如何解決? 48.什么是Java的序列化,如何實現Java的序列化?列舉在哪些程序中見過Java序列化? 49.不通過構造函數也能創建對象嗎? 50.匿名內部類可不可以繼承或實現接口。為什么? 在Java中,為什么基本類型不能做為HashMap的鍵值,而只能是引用類型,把引用類型做為HashMap的健值,需要注意哪些地方。 52.簡述Java中如何實現多態 53.以下對繼承的描述錨誤的是 () 54.Java 中 Math.random()/Math.random()值為? 55.Java中,如果Manager是Employee的子類,那么Pair< Manager>是Pair< Employee>的子類嗎? 56.接口和抽象類的區別 57.同步代碼塊和同步方法有什么區別 58.靜態內部類和內部類有什么區別 59.反射的概念與作用 60.提供Java存取數據庫能力的包是() 61.下列運算符合法的是()(多選) 62.執行如下程序代碼,c的值打印出來是() 63.下列哪一種敘述是正確的() 64.下列語句正確的是() 65.下列哪種說法是正確的() 66.Java程序的種類有()(多選) 67.下列說法正確的有()(多選) 68.下列標識符不合法的有()(多選) 69.下列說法錯誤的有()(多選) 70.不能用來修飾interface的有()(多選) 71.下列正確的有()(多選) 72.下列說法錯誤的有()(多選) 73.下列說法錯誤的有()(多選) 74.下列說法錯誤的有()(多選) 75.請問0.3332的數據類型是() 76.Java接口的修飾符可以為() 77.不通過構造函數也能創建對象么() 78.存在使i+1< i的數么? 79.接口可否繼承接口?抽象類是否可實現接口?抽象類是否可繼承實體類? 80.int與Integer有什么區別? 81.可序列化對象為什么要定義serialversionUID值? 82.寫一個Java正則,能過濾出html中的 < a href=”url” >title< /a>形式中的鏈接地址和標題. 83.十進制數72轉換成八進制數是多少? 84.Java程序中創建新的類對象,使用關鍵字new,回收無用的類對象使用關鍵字free正確么? 85.Class類的getDeclaredFields()方法與getFields()的區別? 86.在switch和if-else語句之間進行選取,當控制選擇的條件不僅僅依賴于一個x時,應該使用switch結構;正確么? 88.使用final關鍵字修飾符一個變量時,是引用不能變,還是引用的對象不能變? 88.使用final關鍵字修飾符一個變量時,是引用不能變,還是引用的對象不能變? 89.請解釋以下常用正則含義:\d,\D,\s,.,*,?,|,[0-9]{6},\d+ 90.已知表達式int m[] = {0,1,2,3,4,5,6}; 下面那個表達式的值與數組的長度相等() 91.下面那些聲明是合法的?() 92.以下選項中選擇正確的java表達式() 93.下列代碼的輸出結果是 94.以下哪些運算符是含有短路運算機制的?請選擇:() 95.下面哪個函數是public void example(){....}的重載函數?() 96.給定某java程序片段,該程序運行后,j的輸出結果為() 97.在java中,無論測試條件是什么,下列()循環將至少執行一次。 98.打印結果: 99.指出下列程序的運行結果 100.解釋繼承、重載、覆蓋。 101.什么是編譯型語言,什么是解釋型語言?java可以歸類到那種? 102.簡述操作符(&,|)與操作符(&&,||)的區別 &和&&的聯系(共同點) 103.try{}里面有一個return語句,那么緊跟在這個try后的finally, 里面的語句在異常出現后,都會執行么?為什么? 104.有一段java應用程序,它的主類名是al,那么保存它的源文件可以是?() 105.Java類可以作為() 106.在調用方法時,若要使方法改變實參的值,可以?() 107.Java語言具有許多優點和特點,哪個反映了java程序并行機制的() 108.下關于構造函數的描述錯誤是() 109.若需要定義一個類域或類方法,應使用哪種修飾符?() 110.下面代碼執行后的輸出是什么() 111.給出如下代碼,如何使成員變量m被函數fun()直接訪問() 112.下面哪幾個函數是public void example(){….}的重載函數() 113.請問以下代碼執行會打印出什么? 114.如果有兩個類A、B(注意不是接口),你想同時使用這兩個類的功能,那么你會如何編寫這個C類呢? 115.一個類的構造方法是否可以被重載(overloading),是否可以被子類重寫(overrding)? 116.Java中byte表示的數值范圍是什么? 117.如何將日期類型格式化為:2013-02-18 10:53:10? 118.不通過構造函數也能創建對象嗎() 119.下面哪些是對稱加密算法() 120.下面的代碼段,當輸入為2的時候返回值是() 121.以下Java代碼段會產生幾個對象 122.Math.round(-11.2)的運行結果是。 123.十進制數278的對應十六進制數 124.Java中int.long占用的字節數分別是 125.System.out.println(‘a’+1);的結果是 126.下列語句那一個正確() 127.下列說法正確的有() 128.執行如下程序代碼() 129.下列哪一種敘述是正確的() 130.下列語句正確的是() 131.成員變量用static修飾和不用static修飾有什么區別? 132.如果變量用final修飾,則怎樣?如果方法final修飾,則怎樣? 133.在二進制數據中,小數點向右移一位,則數據() 134.面向對象的特征有哪些方面? 135.float f=3.4;是否正確? 136.short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯嗎? 137.Java 有沒有goto? 138.int 和Integer 有什么區別? 139.&和&&的區別? 140.Math.round(11.5) 等于多少? Math.round(-11.5)等于多少? 141.swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上? 142.用最有效率的方法計算2乘以8? 143.在Java 中,如何跳出當前的多重嵌套循環? 144.構造器(constructor)是否可被重寫(override)? 145.兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對? 146.當一個對象被當作參數傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞? 147.重載(Overload)和重寫(Override)的區別。重載的方法能否根據返回類型進行區分? 148.華為的面試題中曾經問過這樣一個問題:為什么不能根據返回類型來區分重載,為什么? 149.靜態嵌套類(Static Nested Class)和內部類(Inner Class)的不同? 150.抽象的(abstract)方法是否可同時是靜態的(static),是否可同時是本地方法(native),是否可同時被synchronized修飾? 151.靜態變量和實例變量的區別? 152.是否可以從一個靜態(static)方法內部發出對非靜態(non-static)方法的調用? 153.如何實現對象克隆? 154.接口是否可繼承(extends)接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承具體類(concrete class)? 155.一個“.java”源文件中是否可以包含多個類(不是內部類)?有什么限制? 156.Anonymous Inner Class(匿名內部類)是否可以繼承其它類?是否可以實現接口? 157.內部類可以引用它的包含類(外部類)的成員嗎?有沒有什么限制? 158.Java 中的final關鍵字有哪些用法? 159.指出下面程序的運行結果: 160.說說數據類型之間的轉換: 161.如何實現字符串的反轉及替換? 162.怎樣將GB2312編碼的字符串轉換為ISO-8859-1編碼的字符串? 163.Java中的日期和時間: 164.打印昨天的當前時刻。 165.Java反射技術主要實現類有哪些,作用分別是什么? 166.Class類的作用?生成Class對象的方法有哪些? 167.反射的使用場合和作用、及其優缺點 168.面向對象設計原則有哪些
集合
193.Java集合體系結構(List、Set、Collection、Map的區別和聯系) 194.Vector和ArrayList的區別和聯系 195.ArrayList和LinkedList的區別和聯系 196.HashMap和Hashtable的區別和聯系 197.HashSet的使用和原理(hashCode()和equals()) 198.TreeSet的原理和使用(Comparable和comparator) 199.集合和數組的比較(為什么引入集合) 200.Collection和Collections的區別 201.下列說法正確的有()(選擇一項) 202.Java的HashMap和Hashtable有什么區別HashSet和HashMap有什么區別?使用這些結構保存的數需要重載的方法是哪些? 203.列出Java中的集合類層次結構? 204.List,Set,Map各有什么特點 205.ArrayList list=new ArrayList(20);中的list擴充幾次() 206.List、Set、Map哪個繼承自Collection接口,一下說法正確的是() 207.合并兩個有序的鏈表 208.用遞歸方式實現鏈表的轉置。 209.給定一個不包含相同元素的整數集合,nums,返回所有可能的子集集合。解答中集合不能包含重復的子集。 210.以下結構中,哪個具有同步功能() 211.以下結構中,插入性能最高的是() 212.以下結構中,哪個最適合當作stack使用() 213.Map的實現類中,哪些是有序的,哪些是無序的,有序的是如何保證其有序性,你覺得哪個有序性性能更高,你有沒有更好或者更高效的實現方式? 214.下面的代碼在絕大部分時間內都運行得很正常,請問什么情況下會出現問題?根源在哪里? 215.TreeMap和TreeSet在排序時如何比較元素?Collections工具類中的sort()方法如何比較元素? 216.List里面如何剔除相同的對象?請簡單用代碼實現一種方法 217.Java.util.Map的實現類有 218.下列敘述中正確的是() 219.List、Set、Map 是否繼承自Collection 接口? 220.說出ArrayList、Vector、LinkedList 的存儲性能和特性? 221.List、Map、Set 三個接口,存取元素時,各有什么特點? 222.TreeMap和TreeSet在排序時如何比較元素?Collections工具類中的sort()方法如何比較元素?
多線程
223.下面程序的運行結果()(選擇一項) 224.下列哪個方法可用于創建一個可運行的類() 225.說明類java.lang.ThreadLocal的作用和原理。列舉在哪些程序中見過ThreadLocal的使用? 226.說說樂觀鎖與悲觀鎖 227.在Java中怎么實現多線程?描述線程狀態的變化過程。 228.請寫出多線程代碼使用Thread或者Runnable,并說出兩種的區別。 229.在多線程編程里,wait方法的調用方式是怎樣的? 230.Java線程的幾種狀態 231.在Java多線程中,請用下面哪種方式不會使線程進入阻塞狀態() 232.volatile關鍵字是否能保證線程安全? 233.請寫出常用的Java多線程啟動方式,Executors線程池有幾種常用類型? 234.關于sleep()和wait(),以下描述錯誤的一項是() 235.進程和線程的區別是什么? 236.以下鎖機機制中,不能保證線程安全的是() 237.創建n多個線程,如何保證這些線程同時啟動?看清,是“同時”。 238.同步和異步有何異同,在什么情況下分別使用它們? 239.Java線程中,sleep()和wait()區別 240.下面所述步驟中,是創建進程做必須的步驟是() 241.無鎖化編程有哪些常見方法?() 242.sleep()和yield()有什么區別? 243.當一個線程進入一個對象的synchronized方法A之后,其它線程是否可進入此對象的synchronized方法? 244.請說出與線程同步相關的方法。 245.編寫多線程程序有幾種實現方式? 246.synchronized關鍵字的用法? 247.啟動一個線程是用run()還是start()方法? 248.什么是線程池(thread pool)? 249.線程的基本狀態以及狀態之間的關系? 250.簡述synchronized 和java.util.concurrent.locks.Lock的異同? 251.創建線程的兩種方式分別是什么,優缺點是什么? 252.Java創建線程后,調用start()方法和run()的區別 253.線程的生命周期 254.如何實現線程同步? 255.說說關于同步鎖的更多細節 256.Java中實現線程通信的三個方法的作用是什么?
Web方面相關
291.WEB應用中如果有.class和.jar類型的文件一般分別應該放在什么位置? 292.元素中有一個輸入框(< input type=‘text’ name=’username‘id=’username”value=‘’"/>,請用JavaScript語言寫一行代碼,取得這個輸入框中的值。 293.簡單描述一下Servlet與JSP的的相同點和區別點。 294.請簡單描述下幾個您熟悉JavaScript庫,它們有哪些作用和特點? 295.簡單描述HTML,CSS,Javascript在Web開發中分別起什么作用? 296.當DOM加載完成后要執行的函數,下面哪個是正確的() 297.舉例說明JAVA中如何解析xml,不同方式有和優缺點? 298.char型變量中能不能存儲一個中文漢字? 299.一個類可以實現多個接口,但只能繼承一個抽象類。 300.比較一下Java 和JavaSciprt 301.什么時候用assert? 302.UML是什么?UML中有哪些圖? 303.XML 文檔定義有幾種形式?它們之間有何本質區別?解析XML 文檔有哪幾種方式? 304.你在項目中哪些地方用到了XML? 305.用JavaScript實現用正則表達式驗證,某個字符串是合法的6位數字的郵編的函數 306.請使用JQuery將頁面上的所有元素邊框設置為2pix寬的虛線? 307.如何設定JQuery異步調用還是同步調用? 308.說出3條以上firefox和IE的瀏覽器兼容問題? 309.請用Jquery語言寫出ajax請求或者post請求代碼 310.body中的onload ()函數和jQuery中document.ready()有什么區別? 311.jQuery中有哪幾種類型的選擇器? 312.EasyUI中datagrid刷新當前數據的方法? 313.分別寫出一個div居中和其中的內容居中的css屬性設置 314.概述一下session與cookie的區別 315.JavaScript 中 null和 undefined 是否有區別?有哪些區別? 316.Servlet中的doPost和doGet方法有什么區別?它們在傳遞和獲取參數上有什么區別? 317.請寫出一段jQuery代碼,實現把當前頁面中所有的a元索中class 屬性為“view-link”的鏈接都改為在新窗口中打開 318.如下JavaScript代碼的輸出為: 319.Jquery中’.get()’與’.eq()’的區別 320.如何給weblogic定內存的大小? 321.TCP為何采用三次握手來建立連接,若釆用二次握手可以嗎,請說明理由? 322.以下HTTP相應狀態碼的含義描述正確的是() 323.JSP頁面包括哪些元素?() 324.Ajax有四種技術組成:DOM,CSS,JavaScript,XmlHttpRequest,其中控制文檔結構的是() 325.下面關于session的用法哪些是錯誤的?() 326.Jsp九大內置對象 327.如何配置一個servlet? 328.JavaScript,如何定義含有數值1至8的數組? 329.以下JavaScipt語句會產生運行錯誤的是_() 330.在JSP中,下面__()__塊中可以定義一個新類: 331.HTML含義和版本變化 332.什么是錨鏈接 333.HTML字符實體的作用及其常用字符實體 334.HTML表單的作用和常用表單項類型 335.表格、框架、div三種HTML布局方式的特點 336.form中input設置為readonly和disabled的區別 337.CSS的定義和作用 338.CSS2常用選擇器類型及其含義 339.引入樣式的三種方式及其優先級別 340.盒子模型 341.JavaScript語言及其特點 342.JavaScript常用數據類型有哪些 343.html語法中哪條命令用于使一行文本折行,而不是插入一個新的段落? (B) 344.Ajax的優點和缺點 345.怎樣防止表單刷新重復提交問題?(說出思路即可) 346.JQuery.get()和JQuery.ajax()方法之間的區別是什么? 347.Jquery里的緩存問題如何解決?例如($.ajax()以及$.get()) 348.Javascript是面向對象的,怎么體現Javascript的繼承關系? 349.Javascript的有幾種種變量。變量范圍有什么不同? 350.Js如何獲取頁面的dom對象 351.Servlet API中forward() 與redirect()的區別? 352.Session域和request域什么區別? 353.頁面中有一個命名為bankNo的下拉列表,寫js腳本獲取當前選項的索引值,如果用jquery如何獲取 354.寫出要求11位數字的正則表達式 355.分別獲取指定name、Id的javascript對象,如果用jquey如何獲取 356.一個頁面有兩個form,如何獲取第一個form 357.如何設置一個層的可見/隱藏 358.描述JSP中動態INCLUDE與靜態INCLUDE的區別? 359.列舉JSP的內置對象及方法 360.列舉jsp的四大作用域 361.html和xhtml的區別是什么? 362.你做的頁面用哪些瀏覽器測試過?這些測試的內核分別是什么? 363.你遇到了哪些瀏覽器的兼容性問題?怎么解決的? 364.你知道的常用的js庫有哪些? 365.Js中的三種彈出式消息提醒(警告窗口、確認窗口、信息輸入窗口)的命令是什么? 366.談談js的閉包 367.寫一段js,遍歷所有的li,將每個li的內容逐個alert出來 368.頁面上如何用JavaScript對多個checkbox全選 369.寫一個簡單的JQuery的ajax 370.Js截取字符串abcdefg的efg 371.http的請求頭信息包含了什么? 372.http的響應碼200,404,302,500表示的含義分別是? 373.Servlet中request對象的方法有? 374.Javascript的常用對象有哪些 375.DOM和BOM及其關系 376.JavaScript中獲取某個元素的三種方式JavaScript中的三種彈出式消息提醒命令是什么? 377.JavaScript操作CSS的兩種方式 378.靜態網頁和動態網頁的聯系和區別 379.JSP/ASP/PHP的比較 380.CGI/Servlet/JSP的比較 381.HTTP協議工作原理及其特點 382.get和post的區別 383.如何解決表單提交的中文亂碼問題 384.絕對路徑、根路徑、相對路徑的含義及其區別 385.如實現servlet的單線程模式 386.Servlet的生命周期 387.轉發和重定向的區別 388.JSP的執行過程 389.JSP動作有哪些,簡述作用? 390.page/request/session/application作用域區別 391.JSP和Servlet的區別和聯系 392.談談過濾器原理及其作用? 393.jQuery相比JavaScript的優勢在哪里 394.DOM對象和jQuery對象的區別及其轉換 395.jQuery中$的作用主要有哪些 396.Ajax含義及其主要技術 397.Ajax的工作原理 398.JSON及其作用 399.文件上傳組件Common-fileUpload的常用類及其作用? 400.說出Servlet的生命周期,并說出Servlet和CGI的區別? 401.JSP 和Servlet 有有什么關系? 402.JSP中的四種作用域? 403.如何實現JSP或Servlet的單線程模式? 404.實現會話跟蹤的技術有哪些? 405.過濾器有哪些作用和用法? 406.監聽器有哪些作用和用法? 407.你的項目中使用過哪些JSTL標簽? 408.使用標簽庫有什么好處?如何自定義JSP標簽? 409.表達式語言(EL)的隱式對象及其作用? 410.表達式語言(EL)支持哪些運算符? 411.Servlet 3中的異步處理指的是什么? 412.如何在基于Java的Web項目中實現文件上傳和下載? 413.簡述值棧(Value-Stack)的原理和生命周期 414.闡述Session加載實體對象的過程。 415.怎么防止重復提交 416.$(document).ready(function(){}) jQuery(document).ready(function(){}); 有什么區別? 417.寫出輸出結果 418.web項目從瀏覽器發起交易響應緩慢,請簡述從哪些方面如數分析
高級框架
431.什么是Maven? 432.Maven和ANT的區別 433.Maven倉庫是什么 434.Maven的工程類型有哪些? 435.Maven常用命令有哪些? 436.ZooKeeper的作用是什么? 437.什么是Znode? 438.Znode節點類型有哪些? 439.什么是Dubbo? 440.什么是RPC遠程過程調用? 441.Dubbo中有哪些角色? 442.Dubbo執行流程什么是? 443.說說Dubbo支持的協議有哪些? 444.Dubbo支持的注冊中心有哪些? 445.SessionFactory是線程安全的嗎?Session是線程安全的嗎,兩個線程能夠共享同一個Session嗎? 446.Session的load和get方法的區別是什么? 447.Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法有什么區別? 448.什么是VSFTPD? 449.什么是Nginx? 450.Nginx有哪些作用? 451.什么是正向代理? 452.什么是反向代理? 453.什么是Redis? 454.Redis的特點什么是? 455.Redis數據類型有哪些? 456.Redis中的常用命令哪些? 457.Redis的配置以及持久化方案有幾種? 458.什么是RDB方式? 459.什么是AOF方式? 460.什么是全文檢索? 461.什么是Lucene? 462.什么是Solr? 463.Solr是由哪兩個部分構成? 464.什么是正排索引? 465.什么是倒排索引? 466.什么是ActiveMQ? 467.消息服務的應用場景有哪些? 468.什么是JMS? 469.JMS有哪些模型? 470.什么是JsonP? 471.什么是跨域? 472.什么是同源策略? 473.什么是MyCat? 474.什么是縱向切分/垂直切分? 475.簡述Tomcat,Apache,JBoss和WebLogic的區別和聯系 476.以下可以實現負載均衡的是() 477.Tomcat/ WebSphere/WebLogic的作用和特點 478.B/S和C/S的含義及其區別 479.說說你對容器的理解 480.為什么要使用連接池? 481.數據庫連接池的原理 482.MVC模式及其優缺點 483.MVC模式完成分頁功能的基本思路是什么? 484.常用的Web容器 485.Java Web開發的Model 1和Model 2分別指的是什么? 486.說說什么是框架: 487.簡單說一下MVC框架? 488.簡單講一下struts2的執行流程 489.Struts2中的攔截器,你都用它干什么? 490.簡單講一下SpringMVC的執行流程? 491.簡單說一下struts2和springMVC有什么不同 492.說一下Spring中的兩大核心 493.講一下Spring的事務的傳播特性 494.什么是ORM 495.Hibernate對象的狀態 496.介紹一下Hibernate的緩存 497.簡單講一下webservice使用的場景 498.簡單介紹一下activity? 499.什么是MyBatis? 500.Mybatis是如何進行分頁的?分頁插件的原理是什么? 501.MyBatis與Hibernate有哪些不同? 502.簡述Mybatis的Xml映射文件和Mybatis內部數據結構之間的映射關系? 503.什么是MyBatis的接口綁定,有什么好處? 504.Mybatis能執行一對一、一對多的關聯查詢嗎?都有哪些實現方式,以及它們之間的區別? 505.MyBatis里面的動態Sql是怎么設定的?用什么語法? 506.使用MyBatis的mapper接口調用時有哪些要求? 507.Mybatis是如何將sql執行結果封裝為目標對象并返回的?都有哪些映射形式? 508.MyBatis接口綁定有幾種實現方式,分別是怎么實現的? 509.MyBatis實現一對一有幾種方式?具體怎么操作的? 510.什么情況下用注解綁定,什么情況下用xml綁定? 511.MyBatis的好處是什么?
數據庫
538.下列屬于關系型數據庫的是()(選擇兩項) 539.請列出Java常見的開源數據連接池,并對參數做出簡單的說明 540.儲蓄所有多個儲戶,儲戶在多個儲戶所存取款,儲蓄所與儲戶之間是() 541.視圖是一個“虛表”,視圖的構造基于() 542.設有關系R(A,B,C,D)及其上的函數相關性集合F={B→A,BC→D},那么關系R最高是() 543.什么是DAO模式? 544.數據庫MySQL,Oracle,SqlServer分頁時用的語句 545.Oracle完成分頁功能的三層子查詢語句及其含義? 546.問SQL怎么優化執行效率更高 547.談談數據庫去空格的情況 548.根據你以往的經驗簡單敘述一下MYSQL的優化 549.以Oracle11R為例簡述數據庫集群部署 550.說一下數據庫的存儲過程? 551.數據庫創建索引的缺點? 552.有兩張表;請用SQL查詢,所有的客戶訂單日期最新的前五條訂單記錄。(分別注明MySQL. Oracle寫法) 553.關于HQL與SQL,以下哪些說法正確?() 554.下面是學生表(student)的結構說明 555.為管理崗位業務培訓信息,有如下3個表: 556.用Java怎么實現有每天有1億條記錄的DB儲存?MySQL上億記錄數據量的數據庫如何設計? 557.Mysql的引擎有哪些?支持事物么?DB儲存引擎有哪些? 558.以下是學生考試結果表 559.庫中已經存在雇用表表名: 560.如下表1中的數據,表名為:t_test,記錄某場比賽的結果。 561.請將如下數據庫語句進行優化,使其執行效率更高(提示:…不需要更改) 562.請簡述如何將Oracle中的數據庫轉至DB2中,需要保證表結構和數據不變 563.學生成績表 564.Oracl數據庫中有兩張表Stu(學生表)和Grade(分數表),如下圖所示: 565.下面是學生表(Student)的結構說明: 566.取出sql表中低31到40的記錄(以自動增長ID為主鍵) 567.下列兩個表,需要用一條sql語句把b表中的ID和NAME 字段的數值復制到A表中 568.什么是基本表,什么是視圖,兩者的區別和聯系是什么? 569.什么是事務?什么是鎖? 570.Student學生表(學號,姓名、性別、年齡、組織部門),Course 課程表(編號,課程名稱),Sc選課表(學號,課程編號,成績) 571.sql查詢
Linux操作
580.請寫出常用的linux指令不低于10個,請寫出linux tomcat啟動。 581.當使用RMI技術實現遠程方法調用時,能為遠程對象生成Sub和Skeleton命令的是() 582.以下哪個是服務() 583.下面的網絡協議中,面向連接的的協議是: () 584.在/etc/fstab 文件中指定的文件系統加載參數中, () 參數一般用于CD-ROM 等移動設備。 585.Linux 文件權限一共10 位長度,分成四段,第三段表示的內容是 () 586.終止一個前臺進程可能用到的命令和操作 () 587.在使用mkdir 命令創建新的目錄時,在其父目錄不存在時先創建父目錄的選項是 () 588.下面關于i 節點描述錯誤的是 () 589.一個文件名字為rr.Z,可以用來解壓縮的命令是: () 590.具有很多C 語言的功能,又稱過濾器的是 () 591.一臺主機要實現通過局域網與另一個局域網通信,需要做的工作是 () 592.建立動態路由需要用到的文件有 () 593.局域網的網絡地址192.168.1.0/24,局域網絡連接其它網絡的網關地址是192.168.1.1。主機192.168.1.20 訪問172.16.1.0/24 網絡時,其路由設置正確的是 () 594.下列提法中,不屬于ifconfig 命令作用范圍的是 () 595.下列關于鏈接描述,錯誤的是() 596.在局域網絡內的某臺主機用ping 命令測試網絡連接時發現網絡內部的主機都可以連同,而不能與公網連通,問題可能是() 597.下列文件中,包含了主機名到IP 地址的映射關系的文件是: 598.不需要編譯內核的情況是() 599.在shell 中變量的賦值有四種方法,其中,采用name=12 的方法稱 () 600.()命令可以從文本文件的每一行中截取指定內容的數據。 601.下列不是Linux 系統進程類型的是() 602.在日常管理中,通常CPU 會影響系統性能的情況是: () 603.若一臺計算機的內存為128MB,則交換分區的大小通常是 604.在安裝Linux 的過程中的第五步是讓用戶選擇安裝方式,如果用戶希望安裝部分組件(軟件程序),并在選擇好后讓系統自動安裝,應該選擇的選項是() 605.Linux 有三個查看文件的命令,若希望在查看文件內容過程中可以用光標上下移動來查看文件內容,應使用()命令 606.下列信息是某系統用ps –ef 命令列出的正在運行的進程 ()進程是運行Internet 超級服務器,它負責監聽Internet sockets 上的連接,并調用合適的服務器來處理接收的信息。 607.在TCP/IP 模型中,應用層包含了所有的高層協議,在下列的一些應用協議中, ()是能夠實現本地與遠程主機之間的文件傳輸工作 608.當我們與某遠程網絡連接不上時,就需要跟蹤路由查看,以便了解在網絡的什么位置出現了問題,滿足該目的的命令是() 609.對名為fido 的文件用chmod 551 fido 進行了修改,則它的許可權是() 610.用ls –al 命令列出下面的文件列表,()文件是符號連接文件 611.DNS 域名系統主要負責主機名和()之間的解析。 612.WWW 服務器是在Internet 上使用最為廣泛,它采用的是()結構 613.Linux 系統通過()命令給其他用戶發消息。 614.NFS 是()系統。 615.()命令可以在Linux 的安全系統中完成文件向磁帶備份的工作 616.Linux 文件系統的文件都按其作用分門別類地放在相關的目錄中,對于外部設備文件,一般應將其放在()目錄中 617.在重新啟動Linux 系統的同時把內存中的信息寫入硬盤,應使用()命令實現 618.網絡管理具備以下幾大功能:配置管理、()、性能管理、安全管理和計費管理等 619.關閉linux 系統(不重新啟動)可使用命令() 620.實現從IP 地址到以太網MAC 地址轉換的命令為: () 621.在vi 編輯器中的命令模式下,鍵入()可在光標當前所在行下添加一新行 622.在vi 編輯器中的命令模式下,刪除當前光標處的字符使用()命令 623.在vi 編輯器中的命令模式下,重復上一次對編輯的文本進行的操作,可使用()命令 624.刪除文件命令為: () 625.退出交互模式的shell,應鍵入()
算法分析及手寫代碼
626.判斷身份證:要么是15位,要么是18位,最后一位可以為字母,并寫出程序提出其中年月日。要求: 627.對于一個字符串,請設計一個高效算法,找到第一次重復出現的字符保證字符串中有重復的字符,字符串的長度小于等于500. 628.寫一個完整函數,實現拷貝數組 629.寫一排序算法,輸入10個數字,以逗號分開,可根據參數選擇升序或者降序排序,須注明是何種排序算法。 630.判斷字符串是否是這樣的組成的,第一個字母,后面可以是字母、數字、下劃線、總長度為5-20。 631.已排好序的數組A,一般來說可用二分查找可以很快找到,現有一特殊數組A,它是循環遞增的,如a[]={17, 19 ,20, 25, 1, 4, 7, 9},在這樣的數組中找一元素,看看是否存在。請寫出你的算法,必要時可寫偽代碼,并分析其空間,時間復雜度。 632.請編寫一個完整的程序,實現如下功能:從鍵盤輸入數字n,程序自動計算n!并輸出。(注1:n!=1*2*3...*n, 注2:請使用遞歸實現) 633.請用遞歸的方法計算斐波那契數列的同項F(n),已知F0=0,F1=1,F(n)=F(n-1)+F(n-2)(n>=2,n∈N*). 634.現在有整數數組{11,66,22,0,55,32},請任意選擇一種排序算法,用Java程序實現 635.請根據注釋,編碼實現下面類的方法 636.二分法查詢(遞歸實現) 637.編寫一段Java程序,把一句英語中的每個單詞中的字母次序倒轉,單詞次序保持不變,例入輸入為“There is a dog.”,輸出結果應該是“erehT si a god.”要求不使用Java的庫函數,例如String類的split,reverse方法。 638.手寫9x9乘法表,冒泡排序 639.題目: 給定一個整數數組,找到是否該數組包含任何重復數字。你的函數應該返回true只要有任何數字 在該數組中重復出現,否則返回false。 640.給定一個數組nums, 寫一個函數來移動所有0元素到數組末尾,同時維持數組中非0元素的相對順序不變。要求不能申請額外的內存空間,并且最小化操作次數。 641.給定一顆二叉樹,返回節點值得先序遍歷,請使用迭代(非遞歸)方式實現。 642.驗證一棵樹是否為有效的二叉搜索樹BST 643.從一個鏈表中刪除節點 644.二叉搜索樹BST中第Kth小的元素 題目:給定?個BST,寫一個函數kthSmallest來找到第kth小的元素 645.題目:給定含有n個整數的數組S,S中是否存在三個元素a,b,c使得a + b + c = 0? 找到所有這樣的三元 組,并且結果集中不包含重復的三元組。 646.子集問題 647.迭代方法實現二叉樹的先序遍歷:題目: 給定一顆?叉樹,返回節點值得先序遍歷,請使用迭代(非遞歸)方式實現。 648.驗證二叉搜索樹BST:題目: 驗證一棵樹是否為有效的二叉搜索樹BST比如,二叉樹[2, 1, 3],返回true二叉樹[1, 2, 3], 返回false 649.編輯距離題目: 給定兩個單詞word1和word2,找到最小的操作步驟使得word1轉換成word2,每次操作算作一 步。你可以對單詞進行以下三種操作:1)插入一個字符2)刪除一個字符3)替換一個字符 650.買賣股票問題:題目: 你有一個數組,第i個元素表示第i天某個股票的價格,設計一個算法找到最大的利潤,并且你只能最多完成兩次交易。 651.[編程]任給n個整數和一個整數x。請計算n個整數中有多少對整數之和等于x。 652.[編程]請說明快速排序算法的設計思想和時間復雜度,并用高級語言寫出對整數數組進行一趟快排的函數實現。 653.對于一段形如:1,-1~3,1~15×3的輸入 654.有兩個字符串:目標串S=“s1s2.......sn”,模式串T="t1t2.......tm"。若存在T的每個字符一次和S中的一個連續字符序列相等,則匹配成功,返回T中第一個字符在S中的位置。否則匹配不成功,返回0。寫出你的算法,要求線性時間復雜度 655.如何生成一個0-100的隨機整數? 656.請編寫一段Java程序將兩個有序數組合并成一個有序數組 657.在最佳情況下,以下哪個時間復雜度最高(D) 658.一個數組,元素為從0到m的整數,判斷其中是否有重復元素,使用java語言編寫一個方法 659.某二叉樹的先序遍歷是12453,中序遍歷是42513,那么其后序遍歷是(A) 660.設一顆二叉樹中有3個葉子節點,有八個度為1的節點,則該二叉樹中總的節點數為() 661.給出下面的二叉樹先序、中序、后序遍歷的序列? 662.你知道的排序算法都哪些?用Java寫一個排序系統 663.寫一個二分查找(折半搜索)的算法。 664.統計一篇英文文章單詞個數。 665.輸入年月日,計算該日期是這一年的第幾天。 666.回文素數:所謂回文數就是順著讀和倒著讀一樣的數(例如:11,121,1991…),回文素數就是既是回文數又是素數(只能被1和自身整除的數)的數。編程找出11~9999之間的回文素數。 667.全排列:給出五個數字12345的所有排列。 668.對于一個有N個整數元素的一維數組,找出它的子數組(數組中下標連續的元素組成的數組)之和的最大值。 669.用遞歸實現字符串倒轉 670.輸入一個正整數,將其分解為素數的乘積。 671.一個有n級的臺階,一次可以走1級、2級或3級,問走完n級臺階有多少種走法。 672.寫一個算法判斷一個英文單詞的所有字母是否全都不同(不區分大小寫) 673.有一個已經排好序的整數數組,其中存在重復元素,請將重復元素刪除掉,例如,A= [1, 1, 2, 2, 3],處理之后的數組應當為A= [1, 2, 3]。 674.給一個數組,其中有一個重復元素占半數以上,找出這個元素。 675.編寫一個方法求一個字符串的字節長度?
第三篇:熱門專業學習之路
前言

本題集由尚學堂學員整理,列舉了眾多IT公司面試真題,對應聘Java程序員職位的常見考點和知識體系都進行的分類和歸納整理。

本題集適合應聘Java和JavaEE職位的程序員作為面試復習、學習和強化的資料,也適合其他程序員作為拓展讀物進行閱讀。

本題集包含了常見的算法、面試題,也包含了新的高級技術,比如:微服務架構等技術的面試題目。本題集非常全面,對于工作1-5年左右的java程序員面試有非常好的指導作用。

大家也可以訪問(直接在線觀看最新版的面試題):www.haoyhh.com/javamianshiti.html

1.大學生高端復合人才成長
1.JAVA專業,1000課 3.大數據專業,500課
2.Python專業,500課    4.人工智能專業,500課

四個專業都要學,從零開始2000小時,成為高端人才,打下一生技術基礎,不再是低端碼農。

2.掃一掃,咨詢詳情:

訪問官網 www.itbaizhan.cn

Java基礎、語法:

1.Java跨平臺原理(字節碼文件、虛擬機)

C/C++語言都直接編譯成針對特定平臺機器碼。如果要跨平臺,需要使用相應的編譯器重新編譯。

Java源程序(.java)要先編譯成與平臺無關的字節碼文件(.class),然后字節碼文件再解釋成機器碼運行。解釋是通過Java虛擬機來執行的。

字節碼文件不面向任何具體平臺,只面向虛擬機。

Java虛擬機是可運行Java字節碼文件的虛擬計算機。不同平臺的虛擬機是不同的,但它們都提供了相同的接口。

Java語言具有一次編譯,到處運行的特點。就是說編譯后的.class可以跨平臺運行,前提是該平臺具有相應的Java虛擬機。但是性能比C/C++要低。

Java的跨平臺原理決定了其性能沒有C/C++高

2.Java的安全性

語言層次的安全性主要體現在:

Java取消了強大但又危險的指針,而代之以引用。由于指針可進行移動運算,指針可隨便指向一個內存區域,而不管這個區域是否可用,這樣做是危險的,因為原來這個內存地址可能存儲著重要數據或者是其他程序運行所占用的,并且使用指針也容易數組越界。

垃圾回收機制:不需要程序員直接控制內存回收,由垃圾回收器在后臺自動回收不再使用的內存。避免程序忘記及時回收,導致內存泄露。避免程序錯誤回收程序核心類庫的內存,導致系統崩潰。

異常處理機制:Java異常機制主要依賴于try、catch、finally、throw、throws五個關鍵字。

強制類型轉換:只有在滿足強制轉換規則的情況下才能強轉成功。

底層的安全性可以從以下方面來說明

Java在字節碼的傳輸過程中使用了公開密鑰加密機制(PKC)。

在運行環境提供了四級安全性保障機制:

字節碼校驗器 -類裝載器 -運行時內存布局 -文件訪問限制

3.Java三大版本

Java2平臺包括標準版(J2SE)、企業版(J2EE)和微縮版(J2ME)三個版本:

Standard Edition(標準版) J2SE 包含那些構成Java語言核心的類。

比如:數據庫連接、接口定義、輸入/輸出、網絡編程

Enterprise Edition(企業版) J2EE 包含J2SE 中的類,并且還包含用于開發企業級應用的類。

比如servlet、JSP、XML、事務控制

Micro Edition(微縮版) J2ME 包含J2SE中一部分類,用于消費類電子產品的軟件開發。

比如:呼機、智能卡、手機、PDA、機頂盒

他們的范圍是:J2SE包含于J2EE中,J2ME包含了J2SE的核心類,但新添加了一些專有類

應用場合,API的覆蓋范圍各不相同。

4.什么是JVM?什么是JDK? 什么是JRE?

JVM :JVM是Java Virtual Machine(Java虛擬機)的縮寫,它是整個java實現跨平臺的最核心的部分,所有的java程序會首先被編譯為.class的類文件,這種類文件可以在虛擬機上執行,也就是說class并不直接與機器的操作系統相對應,而是經過虛擬機間接與操作系統交互,由虛擬機將程序解釋給本地系統執行。JVM是Java平臺的基礎,和實際的機器一樣,它也有自己的指令集,并且在運行時操作不同的內存區域。?JVM通過抽象操作系統和CPU結構,提供了一種與平臺無關的代碼執行方法,即與特殊的實現方法、主機硬件、主機操作系統無關。JVM的主要工作是解釋自己的指令集(即字節碼)到CPU的指令集或對應的系統調用,保護用戶免被惡意程序騷擾。?JVM對上層的Java源文件是不關心的,它關注的只是由源文件生成的類文件(.class文件)。

JRE:JRE是java runtime environment(java運行環境)的縮寫。光有JVM還不能讓class文件執行,因為在解釋class的時候JVM需要調用解釋所需要的類庫lib。在JDK的安裝目錄里你可以找到jre目錄,里面有兩個文件夾bin和lib,在這里可以認為bin里的就是jvm,lib中則是jvm工作所需要的類庫,而jvm和lib和起來就稱為jre。所以,在你寫完java程序編譯成.class之后,你可以把這個.class文件和jre一起打包發給朋友,這樣你的朋友就可以運行你寫程序了(jre里有運行.class的java.exe)。JRE是Sun公司發布的一個更大的系統,它里面就有一個JVM。JRE就與具體的CPU結構和操作系統有關,是運行Java程序必不可少的(除非用其他一些編譯環境編譯成.exe可執行文件……),JRE的地位就象一臺PC機一樣,我們寫好的Win32應用程序需要操作系統幫我們運行,同樣的,我們編寫的Java程序也必須要JRE才能運行。?

JDK:JDK是java development kit(java開發工具包)的縮寫。每個學java的人都會先在機器上裝一個JDK,那 讓我們看一下JDK的安裝目錄。在目錄下面有六個文件夾、一個src類庫源碼壓縮包、和其他幾個聲明文件。其中,真正在運行java時起作用的是以下四個文件夾:bin、include、lib、jre。現在我們可以看出這樣一個關系,JDK包含JRE,而JRE包含JVM。

bin:最主要的是編譯器(javac.exe)

include:java和JVM交互用的頭文件

lib:類庫??????

jre:java運行環境?

(注意:這里的bin、lib文件夾和jre里的bin、lib是不同的)總的來說JDK是用于java程序的開發,而jre則是只能運行class而沒有編譯的功能。eclipse、idea等其他IDE有自己的編譯器而不是用JDK?bin目錄中自帶的,所以在安裝時你會發現他們只要求你選jre路徑就ok了。

JDK,JRE,JVM三者關系概括如下:

jdk是JAVA程序開發時用的開發工具包,其內部也有JRE運行環境JRE。JRE是JAVA程序運行時需要的運行環境,就是說如果你光是運行JAVA程序而不是去搞開發的話,只安裝JRE就能運行已經存在的JAVA程序了。JDk、JRE內部都包含JAVA虛擬機JVM,JAVA虛擬機內部包含許多應用程序的類的解釋器和類加載器等等。

5.Java三種注釋類型

共有單行注釋、多行注釋、文檔注釋3種注釋類型。使用如下:

單行注釋,采用“//”方式.只能注釋一行代碼。如://類成員變量

多行注釋,采用“/*...*/”方式,可注釋多行代碼,其中不允許出現嵌套。如:

/*System.out.println("a");

System.out.println("b");

System.out.println("c");*/

文檔注釋,采用“/**...*/”方式。如:

/**

* 子類 Dog

* @author Administrator

**/

public class Dog extends Animal{}

6.8種基本數據類型及其字節數
數據類型 關鍵字 字節數
數值型 整數型 byte 1
short 2
int 4
long 8
浮點型 float 4
double 8
布爾型 boolean 1(位)
字符型 char 2
7.i++和++i的異同之處

共同點:

1、i++和++i都是變量自增1,都等價于i=i+1

2、如果i++,++i是一條單獨的語句,兩者沒有任何區別

3、i++和++i的使用僅僅針對變量。 5++和++5會報錯,因為5不是變量。

不同點:

如果i++,++i不是一條單獨的語句,他們就有區別i++ :先運算后增1。如:

int x=5;
int y=x++;
System.out.println("x="+x+", y="+y);
    //以上代碼運行后輸出結果為:x=6, y=5

++i : 先增1后運算。如:

int x=5;
int y=++x;
System.out.println("x="+x+", y="+y);
    //以上代碼運行后輸出結果為:x=6, y=6
8.&和&&的區別和聯系,|和||的區別和聯系

&和&&的聯系(共同點):

&和&&都可以用作邏輯與運算符,但是要看使用時的具體條件來決定。

操作數1&操作數2,操作數1&&操作數2,

表達式1&表達式2,表達式1&&表達式2,

情況1:當上述的操作數是boolean類型變量時,&和&&都可以用作邏輯與運算符。

情況2:當上述的表達式結果是boolean類型變量時,&和&&都可以用作邏輯與運算符。

表示邏輯與(and),當運算符兩邊的表達式的結果或操作數都為true時,整個運算結果才為true,否則,只要有一方為false,結果都為false。

&和&&的區別(不同點):

(1)、&邏輯運算符稱為邏輯與運算符,&&邏輯運算符稱為短路與運算符,也可叫邏輯與運算符。

對于&:無論任何情況,&兩邊的操作數或表達式都會參與計算。

對于&&:當&&左邊的操作數為false或左邊表達式結果為false時,&&右邊的操作數或表達式將不參與計算,此時最終結果都為false。

綜上所述,如果邏輯與運算的第一個操作數是false或第一個表達式的結果為false時,對于第二個操作數或表達式是否進行運算,對最終的結果沒有影響,結果肯定是false。推介平時多使用&&,因為它效率更高些。

、&還可以用作位運算符。當&兩邊操作數或兩邊表達式的結果不是boolean類型時,&用于按位與運算符的操作。

|和||的區別和聯系與&和&&的區別和聯系類似

9.用最有效率的方法算出2乘以8等于多少

使用位運算來實現效率最高。位運算符是對操作數以二進制比特位為單位進行操作和運算,操作數和結果都是整型數。對于位運算符“<<”, 是將一個數左移n位,就相當于乘以了2的n次方,那么,一個數乘以8只要將其左移3位即可,位運算cpu直接支持的,效率最高。所以,2乘以8等于幾的最效率的方法是2 << 3

10.基本數據類型的類型轉換規則

基本類型轉換分為自動轉換和強制轉換。

自動轉換規則:容量小的數據類型可以自動轉換成容量大的數據類型,也可

以說低級自動向高級轉換。這兒的容量指的不是字節數,而是指類型表述的范圍。

強制轉換規則:高級變為低級需要強制轉換。

如何轉換:

(1)賦值運算符“=”右邊的轉換,先自動轉換成表達式中級別最高的數據類型,再進行運算。

(2)賦值運算符“=”兩側的轉換,若左邊級別>右邊級別,會自動轉換;若左邊級別 == 右邊級別,不用轉換;若左邊級別 < 右邊級別,需強制轉換。

(3)可以將整型常量直接賦值給byte, short, char等類型變量,而不需要進行強制類型轉換,前提是不超出其表述范圍,否則必須進行強制轉換。

11.if多分支語句和switch多分支語句的異同之處

相同之處:都是分支語句,多超過一種的情況進行判斷處理。

不同之處:

switch更適合用于多分支情況,就是有很多種情況需要判斷處理,判斷條件類型單一,只有一個入口,在分支執行完后(如果沒有break跳出),不加判斷地執行下去;而if—elseif---else多分枝主要適用于分支較少的分支結構,判斷類型不是單一,只要一個分支被執行后,后邊的分支不再執行。switch為等值判斷(不允許比如>= <=),而if為等值和區間都可以,if的使用范圍大。

12.while和do-while循環的區別

while先判斷后執行,第一次判斷為false,循環體一次都不執行

do while先執行 后判斷,最少執行1次。

如果while循環第一次判斷為true, 則兩種循環沒有區別。

13.break和continue的作用

break: 結束當前循環并退出當前循環體。

break還可以退出switch語句

continue: 循環體中后續的語句不執行,但是循環沒有結束,繼續進行循環條件的判斷(for循環還會i++)。continue只是結束本次循環。

14.請使用遞歸算法計算n!
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());
            }
        }
    }
15.遞歸的定義和優缺點

遞歸算法是一種直接或者間接地調用自身算法的過程。在計算機編寫程序中,遞歸算法對解決一大類問題是十分有效的,它往往使算法的描述簡潔而且易于理解。

遞歸算法解決問題的特點:

(1) 遞歸就是在過程或函數里調用自身。

(2) 在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。

(3) 遞歸算法解題通常顯得很簡潔,但運行效率較低。所以一般不提倡用遞歸算法設計程序。

(4) 在遞歸調用的過程當中系統為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等。所以一般不提倡用遞歸算法設計程序。

16.數組的特征

數組是(相同類型數據)的(有序)(集合)

數組會在內存中開辟一塊連續的空間,每個空間相當于之前的一個變量,稱為數組的元素element

元素的表示 數組名[下標或者索引] scores[7] scores[0] scores[9]

索引從0開始

每個數組元素有默認值 double 0.0 boolean false int 0

數組元素有序的,不是大小順序,是索引 的順序

數組中可以存儲基本數據類型,可以存儲引用數據類型;但是對于一個數組而言,數組的類型是固定的,只能是一個

length:數組的長度

數組的長度是固定的,一經定義,不能再發生變化(數組的擴容)

17.請寫出冒泡排序代碼
package com.bjsxt;

public class TestBubbleSort {
public static void sort(int[] a) {
int temp = 0;
// 外層循環,它決定一共走幾趟
for (int i = 0; i <a.length-1; ++i) {
//內層循環,它決定每趟走一次
for (int j = 0; j <a.length-i-1 ; ++j) {
//如果后一個大于前一個
if (a[j + 1] < a[j]) {
//換位
temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;
}
}
}

public static void sort2(int[] a) {
int temp = 0;
for (int i = 0; i <a.length-1; ++i) {
//通過符號位可以減少無謂的比較,如果已經有序了,就退出循環
int flag = 0;
for (int j = 0; j <a.length-1-i ; ++j) {
if (a[j + 1] < a[j]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
flag = 1;
}
}
if(flag == 0){
break;
}
}
}
}
18.請寫出選擇排序的代碼
package com.bjsxt;

public class TestSelectSort {
public static void sort(int arr[]) {
int temp = 0;
for (int i = 0; i < arr.length - 1; i++) {
// 認為目前的數就是最小的, 記錄最小數的下標
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
// 修改最小值的下標
minIndex = j;
}
}
// 當退出for就找到這次的最小值
if (i != minIndex) {
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
}
19.請寫出插入排序的代碼
package com.bjsxt;

public class TestInsertSort {
public static void sort(int arr[]) {
int i, j;
for (i = 1; i < arr.length; i++) {
int temp = arr[i];
for (j = i; j > 0 && temp < arr[j - 1]; j--) {
arr[j] = arr[j - 1];
}
arr[j] = temp;
}
}
}
20.可變參數的作用和特點

總結1:可變參數

1.可變參數的形式 ...

2.可變參數只能是方法的形參

3.可變參數對應的實參可以0,1,2.....個,也可以是一個數組

4.在可變參數的方法中,將可變參數當做數組來處理

5.可變參數最多有一個,只能是最后一個

6.可變參數好處:方便 簡單 減少重載方法的數量

7.如果定義了可變參數的方法,不允許同時定義相同類型數組參數的方法

總結2:數組做形參和可變參數做形參聯系和區別

聯系:

1.實參都可以是數組;2.方法體中,可變參數當做數組來處理

區別:

1.個數不同 可變參數只能有一個數組參數可以多個

2.位置不同 可變參數只能是最后一個 數組參數位置任意

3.實參不同 可變參數實參可以0,1,2.....個,也可以是一個數組,數組的實參只能是數組

21.類和對象的關系

類是對象的抽象,而對象是類的具體實例。類是抽象的,不占用內存,而對象是具體的,占用存儲空間。類是用于創建對象的藍圖,它是一個定義包括在特定類型的對象中的方法和變量的軟件模板。

類和對象好比圖紙和實物的關系,模具和鑄件的關系。

比如人類就是一個概念,人類具有身高,體重等屬性。人類可以做吃飯、說話等方法。

小明就是一個具體的人,也就是實例,他的屬性是具體的身高200cm,體重180kg,他做的方法是具體的吃了一碗白米飯,說了“12345”這樣一句話。

22.面向過程和面向對象的區別

兩者都是軟件開發思想,先有面向過程,后有面向對象。在大型項目中,針對面向過程的不足推出了面向對象開發思想。

比喻

蔣介石和毛澤東分別是面向過程和面向對象的杰出代表,這樣充分說明,在解決復制問題時,面向對象有更大的優越性。

面向過程是蛋炒飯,面向對象是蓋澆飯。蓋澆飯的好處就是“菜”“飯”分離,從而提高了制作蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟件工程的專業術語就是“可維護性”比較好,“飯” 和“菜”的耦合度比較低。

區別

編程思路不同: 面向過程以實現功能的函數開發為主,而面向對象要首先抽象出類、屬性及其方法,然后通過實例化類、執行方法來完成功能。

封裝性:都具有封裝性,但是面向過程是封裝的是功能,而面向對象封裝的是數據和功能。

面向對象具有繼承性和多態性,而面向過程沒有繼承性和多態性,所以面向對象優勢是明顯。

方法重載和方法重寫(覆蓋)的區別

英文 位置不同 作用不同
重載 overload 同一個類中 在一個類里面為一種行為提供多種實現方式并提高可讀性
重寫 override 子類和父類間 父類方法無法滿足子類的要求,子類通過方法重寫滿足要求
修飾符 返回值 方法名 參數 拋出異常
重載 無關 無關 相同 不同 無關
重寫 大于等于 小于等于 相同 相同 小于等于
23.this和super關鍵字的作用

this是對象內部指代自身的引用,同時也是解決成員變量和局部變量同名問題;this可以調用成員變量,不能調用局部變量;this也可以調用成員方法,但是在普通方法中可以省略this,在構造方法中不允許省略,必須是構造方法的第一條語句。,而且在靜態方法當中不允許出現this關鍵字。

super代表對當前對象的直接父類對象的引用,super可以調用直接父類的成員變量(注意權限修飾符的影響,比如不能訪問private成員)

super可以調用直接父類的成員方法(注意權限修飾符的影響,比如不能訪問private成員);super可以調用直接父類的構造方法,只限構造方法中使用,且必須是第一條語句。

24.static關鍵字的作用

static可以修飾變量、方法、代碼塊和內部類

static屬性屬于這個類所有,即由該類創建的所有對象共享同一個static屬性。可以對象創建后通過對象名.屬性名和類名.屬性名兩種方式來訪問。也可以在沒有創建任何對象之前通過類名.屬性名的方式來訪問。

static變量和非static變量的區別(都是成員變量,不是局部變量)

1.在內存中份數不同

不管有多少個對象,static變量只有1份。對于每個對象,實例變量都會有單獨的一份

static變量是屬于整個類的,也稱為類變量。而非靜態變量是屬于對象的,也稱為實例變量

2.在內存中存放的位置不同

2.在內存中存放的位置不同

3.訪問的方式不同

實例變量: 對象名.變量名 stu1.name="小明明";

靜態變量:對象名.變量名 stu1.schoolName="西二旗小學"; 不推薦如此使用

類名.變量名 Student.schoolName="東三旗小學"; 推薦使用

4.在內存中分配空間的時間不同

Student.schoolName="東三旗小學";或者Student stu1 = new Student("小明","男",20,98);

static方法也可以通過對象名.方法名和類名.方法名兩種方式來訪問

static代碼塊。當類被第一次使用時(可能是調用static屬性和方法,或者創建其對象)執行靜態代碼塊,且只被執行一次,主要作用是實現static屬性的初始化。

static內部類:屬于整個外部類,而不是屬于外部類的每個對象。不能訪問外部類的非靜態成員(變量或者方法),.可以訪問外部類的靜態成員

25.final和abstract關鍵字的作用

final和abstract是功能相反的兩個關鍵字,可以對比記憶

abstract可以用來修飾類和方法,不能用來修飾屬性和構造方法;使用abstract修飾的類是抽象類,需要被繼承,使用abstract修飾的方法是抽象方法,需要子類被重寫。

final可以用來修飾類、方法和屬性,不能修飾構造方法。使用final修飾的類不能被繼承,使用final修飾的方法不能被重寫,使用final修飾的變量的值不能被修改,所以就成了常量。

特別注意:final修飾基本類型變量,其值不能改變,由原來的變量變為常量;但是final修飾引用類型變量,棧內存中的引用不能改變,但是所指向的堆內存中的對象的屬性值仍舊可以改變。例如

package com.bjsxt;

class Test {
    public static void main(String[] args) {
        final Dog dog = new Dog("歐歐");
        dog.name = "美美";//正確
        dog = new Dog("亞亞");//錯誤
    }
}
26.final、finally、finalize的區別

final修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承例如:String類、Math類等。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重寫,但是能夠重載。 使用final修飾的對象,對象的引用地址不能變,但是對象的值可以變!

finally在異常處理時提供 finally 塊來執行任何清除操作。如果有finally的話,則不管是否發生異常,finally語句都會被執行。一般情況下,都把關閉物理連接(IO流、數據庫連接、Socket連接)等相關操作,放入到此代碼塊中。

finalize方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要清理工作。finalize() 方法是在垃圾收集器刪除對象之前被調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。 一般情況下,此方法由JVM調用,程序員不要去調用!

27.寫出java.lang.Object類的六個常用方法

(1)public boolean equals(java.lang.Object)

比較對象的地址值是否相等,如果子類重寫,則比較對象的內容是否相等;

(2)public native int hashCode() 獲取哈希碼

(3)public java.lang.String toString() 把數據轉變成字符串

(4)public final native java.lang.Class getClass() 獲取類結構信息

(5)protected void finalize() throws java.lang.Throwable

垃圾回收前執行的方法

(6)protected native Object clone() throws

java.lang.CloneNotSupportedException 克隆

(7)public final void wait() throws java.lang.InterruptedException

多線程中等待功能

(8)public final native void notify() 多線程中喚醒功能

(9)public final native void notifyAll() 多線程中喚醒所有等待線程的功能

28.private/默認/protected/public權限修飾符的區別
同一個類 同一個包 子類 所有類
private *
defailt * *
protected * * *
public * * * *

類的訪問權限只有兩種

public公共的 可被同一項目中所有的類訪問。 (必須與文件名同名)

default默認的 可被同一個包中的類訪問。

成員(成員變量或成員方法)訪問權限共有四種:

public 公共的 可以被項目中所有的類訪問。(項目可見性)

protected 受保護的 可以被這個類本身訪問;同一個包中的所有其他的類訪問;被它的子類(同一個包以及不同包中的子類)訪問。(子類可見性)

default 默認的被這個類本身訪問;被同一個包中的類訪問。(包可見性)

private 私有的 只能被這個類本身訪問。(類可見性)

29.繼承條件下構造方法的執行過程

繼承條件下構造方法的調用規則如下:

情況1:如果子類的構造方法中沒有通過super顯式調用父類的有參構造方法,也沒有通過this顯式調用自身的其他構造方法,則系統會默認先調用父類的無參構造方法。在這種情況下,寫不寫“super();”語句,效果是一樣的。

情況2:如果子類的構造方法中通過super顯式調用父類的有參構造方法,那將執行父類相應構造方法,而不執行父類無參構造方法。

情況3:如果子類的構造方法中通過this顯式調用自身的其他構造方法,在相應構造方法中應用以上兩條規則。

特別注意的是,如果存在多級繼承關系,在創建一個子類對象時,以上規則會多次向更高一級父類應用,一直到執行頂級父類Object類的無參構造方法為止。

30.==和equals的區別和聯系

“==”是關系運算符,equals()是方法,同時他們的結果都返回布爾值;

“==”使用情況如下:

a) 基本類型,比較的是值

b) 引用類型,比較的是地址

c) 不能比較沒有父子關系的兩個對象

equals()方法使用如下:

a) 系統類一般已經覆蓋了equals(),比較的是內容。

b) 用戶自定義類如果沒有覆蓋equals(),將調用父類的equals (比如是Object),而Object的equals的比較是地址(return (this == obj);)

c) 用戶自定義類需要覆蓋父類的equals()

注意:Object的==和equals比較的都是地址,作用相同

31.談談Java的多態

實現多態的三個條件(前提條件,向上轉型、向下轉型)

1、繼承的存在;(繼承是多態的基礎,沒有繼承就沒有多態)

2、子類重寫父類的方法。(多態下會調用子類重寫后的方法)

3、父類引用變量指向子類對象。(涉及子類到父類的類型轉換)

向上轉型 Student person = new Student()

將一個父類的引用指向一個子類對象,成為向上轉型,自動進行類型轉換。此時通過父類引用變量調用的方法是子類覆蓋或繼承父類的方法,而不是父類的方法此時通過父類引用變量無法調用子類特有的方法。

向下轉型 Student stu = (Student)person;

將一個指向子類對象的引用賦給一個子類的引用,成為向下轉型,此時必須進行強制類型轉換。向下轉型必須轉換為父類引用指向的真實子類類型,,否則將出現ClassCastException,不是任意的強制轉換

向下轉型時可以結合使用instanceof運算符進行強制類型轉換,比如出現轉換異常---ClassCastException

32.簡述Java的垃圾回收機制

傳統的C/C++語言,需要程序員負責回收已經分配內存。

顯式回收垃圾回收的缺點:

1)程序忘記及時回收,從而導致內存泄露,降低系統性能。

2)程序錯誤回收程序核心類庫的內存,導致系統崩潰。

Java語言不需要程序員直接控制內存回收,是由JRE在后臺自動回收不再使用的內存,稱為垃圾回收機制,簡稱GC;

1)可以提高編程效率。

2)保護程序的完整性。

3)其開銷影響性能。Java虛擬機必須跟蹤程序中有用的對象,確定哪些是無用的。

垃圾回收機制的 特點

1)垃圾回收機制回收JVM堆內存里的對象空間,不負責回收棧內存數據。

2)對其他物理連接,比如數據庫連接、輸入流輸出流、Socket連接無能為力。

3)垃圾回收發生具有不可預知性,程序無法精確控制垃圾回收機制執行。

4)可以將對象的引用變量設置為null,暗示垃圾回收機制可以回收該對象。

現在的JVM有多種垃圾回收 實現算法,表現各異。

垃圾回收機制回收任何對象之前,總會先調用它的finalize方法(如果覆蓋該方法,讓一個新的引用變量重新引用該對象,則會重新激活對象)。

程序員可以通過System.gc()或者Runtime.getRuntime().gc()來通知系統進行垃圾回收,會有一些效果,但是系統是否進行垃圾回收依然不確定。

永遠不要主動調用某個對象的finalize方法,應該交給垃圾回收機制調用。

33.基本數據類型和包裝類

1) 八個基本數據類型的包裝類

基本數據類型 包裝類
byte Byte
boolean Boolean
short Short
char Character
int Integer
long Long
float Float
double Double

2)為什么為基本類型引入包裝類

2.1基本數據類型有方便之處,簡單、高效。

2.2但是Java中的基本數據類型卻是不面向對象的(沒有屬性、方法),這在實際使用時存在很多的不便(比如集合的元素只能是Object)。

為了解決這個不足,在設計類時為每個基本數據類型設計了一個對應的類進行包裝,這樣八個和基本數據類型對應的類統稱為包裝類(Wrapper Class)。

3) 包裝類和基本數據類型之間的轉換

3.1包裝類------ wrapperInstance.xxxValue() ------>基本數據類型

3.2包裝類-------new WrapperClass(primitive)

3.2包裝類-------new WrapperClass(primitive)

4) 自動裝箱和自動拆箱

JDK1.5提供了自動裝箱(autoboxing)和自動拆箱(autounboxing)功能, 從而實現了包裝類和基本數據類型之間的自動轉換

5) 包裝類還可以實現基本類型變量和字符串之間的轉換

基本類型變量--->String.valueof()--->字符串 基本類型變量<---WrapperClass.parseXxx(string)---字符串

34.Integer與int的區別

int是java提供的8種原始數據類型之一,Java為每個原始類型提供了封裝類,Integer是java為int提供的封裝類。

int是java提供的8種原始數據類型之一,Java為每個原始類型提供了封裝類,Integer是java為int提供的封裝類。

在Hibernate中,如果將OID定義為Integer類型,那么Hibernate就可以根據其值是否為null而判斷一個對象是否是臨時的,如果將OID定義為了int類型,還需要在hbm映射文件中設置其unsaved-value屬性為0。

另外,Integer提供了多個與整數相關的操作方法,例如,將一個字符串轉換成整數,Integer中還定義了表示整數的最大值和最小值的常量。

35.java.sql.Date和java.util.Date