標籤:表示 共用 部分 from 執行個體變數 使用者 輸入 目的 lis
1.GC什嗎?為什麼有GC?
GC是垃圾收集的意思(Gabage Collection),記憶體處理是編程人員容易出現問題的地方,忘記或者錯誤的記憶體回收會導致程式或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過範圍從而達到自動回收記憶體的目的,Java語言沒有提供釋放已指派記憶體的顯示操作方法。
2.int a=5;int b=7;如何在不定義第三個變數的情況下實現a、b的值互換?
int a=5;int b=7;
a=a+b;
b=a-b;
a=a-b;
3.MVC的各部分都有哪些技術來實現?如何??
答:MVC是Model-View-Controller的簡寫。Model 代表的是應用的商務邏輯(通過JavaBean,EJB組件實現), View 是應用的表示面(由JSP頁面產生),Controller 是提供應用的處理過程式控制制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行互動和重用。
M(DAO)層,就相當於後台,V(jsp),相當於前台,C(control)層,相當於控制頁面跳轉;
MVC模式的目的就是實現Web系統的職能分工。 Model層實現系統中的商務邏輯,通常可以用JavaBean或EJB來實現。 View層用於與使用者的互動,通常用JSP來實現。 Controller層是Model與View之間溝通的橋樑,它可以指派使用者的請求並選擇恰當的視圖以用於顯示,同時它也可以解釋使用者的輸入並將它們映射為模型層可執行檔操作。
M:hibernate/mybatis/ibatis
C:severlet/struts/spring action
V:jsp/FreeMarker/tails/taglib/EL/Velocity
4.物件導向的特徵有哪些方面?
抽象:
抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算瞭解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是資料抽象。
封裝:
封裝是把過程和資料包圍起來,對資料的訪問只能通過已定義的介面。物件導向計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的介面訪問其他對象。
繼承:
繼承是一種連接類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的衍生類別(子類),而原始類稱為新類的基類(父類)。衍生類別可以從它的基類那裡繼承方法和執行個體變數,並且類可以修改或增加新的方法使之更適合特殊的需要。
多態性:
多態性是指允許不同類的對象對同一訊息作出響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共用、代碼共用的優勢,很好的解決了應用程式函數同名問題。
5.簡述線程的基本概念、線程的基本狀態以及狀態之間的關係?
線程概念
一個線程是進程的一個順序執行流。同類的多個線程共用一塊記憶體空間和一組系統資源,線程本身有一個供程式執行時的堆棧。線程在切換時負荷小,因此,線程也被稱為輕負荷進程。一個進程中可以包含多個線程。
線程狀態
(1)建立
用new語句建立的線程對象處於建立狀態,此時它和其他Java對象一樣,僅被分配了記憶體。
(2)等待
當線程在new之後,並且在調用start方法前,線程處於等待狀態。
(3)就緒
當一個線程對象建立後,其他線程調用它的start()方法,該線程就進入就緒狀態。處於這個狀態的線程位於Java虛擬機器的可運行池中,等待cpu的使用權。
(4)運行狀態
處於這個狀態的線程佔用CPU,執行程式代碼。在並發運行環境中,如果電腦只有一個CPU,那麼任何時刻只會有一個線程處於這個狀態。
只有處於就緒狀態的線程才有機會轉到運行狀態。
(5)阻塞狀態
阻塞狀態是指線程因為某些原因放棄CPU,暫時停止運行。當線程處於阻塞狀態時,Java虛擬機器不會給線程分配CPU,直到線程重新進入就緒狀態,它才會有機會獲得運行狀態。
阻塞狀態分為三種:
a.等待阻塞:啟動並執行線程執行wait()方法,JVM會把該線程放入等待池中。
b.同步阻塞:啟動並執行線程在擷取對象同步鎖時,若該同步鎖被別的線程佔用,則JVM會把線程放入鎖池中。
c.其他阻塞:啟動並執行線程執行Sleep()方法,或者發出I/O請求時,JVM會把線程設為阻塞狀態。當Sleep()狀態逾時、或者I/O處理完畢時,線程重新轉入就緒狀態。
(6)死亡狀態
當線程執行完run()方法中的代碼,或者遇到了未捕獲的異常,就會退出run()方法,此時就進入死亡狀態,該線程結束生命週期。
補充知識:
進程與線程的區別
一個進程至少有一個線程。線程的劃分尺度小於進程,使得多線程程式的並發性高。另外,進程在執行過程中擁有獨立的記憶體單元,而多個線程共用記憶體,從而極大地提高了程式的運行效率。
線程在執行過程中與進程的區別在於每個獨立的線程有一個程式啟動並執行入口、順序執行序列和程式的出口。但是線程不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個線程執行控制。
從邏輯角度來看,多線程的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個線程看做多個獨立的應用來實現進程的調度和管理以及資源分派。
並發原理
多個線程或進程”同時”運行只是我們感官上的一種表現。事實上進程和線程是並發啟動並執行,OS的線程調度機制將時間劃分為很多時間片段(時間片),儘可能均勻分配給正在啟動並執行程式,擷取CPU時間片的線程或進程得以被執行,其他則等待。而CPU則在這些進程或線程上來回切換運行。微觀上所有進程和線程是走走停停的,宏觀上都在運行,這種都啟動並執行現象叫並發,但是不是絕對意義上的“同時發生。
6.float f=3.4;是否正確?
不正確
3.4是雙精確度數,將雙精確度型(double)賦值給浮點型(float)屬於下轉型(down-casting,也稱為窄化)會造成精度損失,因此需要強制類型轉換float f =(float)3.4; 或者寫成float f =3.4F.
7.用js帶啊寫一個Ajax請求(get方式)寫出代碼
var xmlhttp;
if(window.XMLHttpRequest()){
xmlhttp=new XMLhTTPrEQUEST();
}else{
xmlhttp=new ActiveXObject(“MicrosoftXMLHTTP”);
}
xmlhttp.onreadyStateChange=function(){
if(xmlhttp.readyState==4&& xmlhttp.readyState==200){
//局部重新整理代碼
}
xmlhttp.Open(“get”,”statutReadyCheck.aspx?dates=”+encodeURLComponene(dates),true);
xmlhttp.send();
}
8.截取字串abcdefg的efg(寫出代碼)
String str=” abcdefg”;
String newStr = str.substring(4);
9.簡要回答如何解決頁面前端瀏覽器的相容問題
瀏覽器安全色問題一:不同瀏覽器的標籤預設的外補丁和內補丁不同
問題癥狀:隨便寫幾個標籤,不加樣式控制的情況下,各自的margin 和padding差異較大
解決方案:CSS裡 *{margin:0;padding:0;}
備忘:這個是最常見的也是最易解決的一個瀏覽器安全色性問題,幾乎所有的CSS檔案開頭都會用萬用字元*來設定各個標籤的內外補丁是0。
瀏覽器安全色問題二:塊屬性標籤float後,又有橫行的margin情況下,在IE6顯示margin比設定的大
問題癥狀:常見癥狀是IE6中後面的一塊被頂到下一行
解決方案:在float的標籤樣式控制中加入 display:inline;將其轉化為行內屬性
備忘:我們最常用的就是div+CSS布局了,而div就是一個典型的塊屬性標籤,橫向布局的時候我們通常都是用div float實現的,橫向的間距設定如果用margin實現,這就是一個必然會碰到的相容性問題。
瀏覽器安全色問題三:設定較小高度標籤(一般小於10px),在IE6,IE7,遨遊中高度超出自己設定高度
問題癥狀:IE6、7和遨遊裡這個標籤的高度不受控制,超出自己設定的高度
解決方案:給超出高度的標籤設定overflow:hidden;或者設定行高line-height 小於你設定的高度。
備忘:這種情況一般出現在我們設定小圓角背景的標籤裡。出現這個問題的原因是IE8之前的瀏覽器都會給標籤一個最小預設的行高的高度。即使你的標籤是空的,這個標籤的高度還是會達到預設的行高。
瀏覽器安全色問題四:行內屬性標籤,設定display:block後採用float布局,又有橫行的margin的情況,IE6間距bug
問題癥狀:IE6裡的間距比超過設定的間距
解決方案:在display:block;後面加入display:inline;display:table;
備忘:行內屬性標籤,為了設定寬高,我們需要設定display:block;(除了input標籤比較特殊)。在用float布局並有橫向的margin後,在IE6下,他就具有了塊屬性float後的橫向margin的bug。不過因為它本身就是行內屬性標籤,所以我們再加上display:inline的話,它的高寬就不可設了。這時候我們還需要在display:inline後面加入display:talbe。
瀏覽器安全色問題五:圖片預設有間距
問題癥狀:幾個img標籤放在一起的時候,有些瀏覽器會有預設的間距,加了問題一中提到的萬用字元也不起作用。
碰到幾率:20%
解決方案:使用float屬性為img布局
備忘:因為img標籤是行內屬性標籤,所以只要不超出容器寬度,img標籤都會排在一行裡,但是部分瀏覽器的img標籤之間會有個間距。去掉這個間距使用float是正道。(我的一個學生使用負margin,雖然能解決,但負margin本身就是容易引起瀏覽器安全色問題的用法,所以我禁止他們使用)
瀏覽器安全色問題六:標籤最低高度設定min-height不相容
問題癥狀:因為min-height本身就是一個不相容的CSS屬性,所以設定min-height時不能很好的被各個瀏覽器安全色
解決方案:如果我們要設定一個標籤的最小高度200px,需要進行的設定為:{min-height:200px; height:auto !important; height:200px; overflow:visible;}
備忘:在B/S系統前端開時,有很多情況下我們又這種需求。當內容小於一個值(如300px)時。容器的高度為300px;當內容高度大於這個值時,容器高度被撐高,而不是出現捲軸。這時候我們就會面臨這個相容性問題。
瀏覽器安全色問題七:透明度的相容CSS設定
做相容頁面的方法是:每寫一小段代碼(布局中的一行或者一塊)我們都要在不同的瀏覽器中看是否相容,當然熟練到一定的程度就沒這麼麻煩了。建議經常會碰到相容性問題的新手使用。很多相容性問題都是因為瀏覽器對標籤的預設屬性解析不同造成的,只要我們稍加設定都能輕鬆地解決這些相容問題。如果我們熟悉標籤的預設屬性的話,就能很好的理解為什麼會出現相容問題以及怎麼去解決這些相容問題。
/* CSS hack*/
我很少使用hacker的,可能是個人習慣吧,我不喜歡寫的代碼IE不相容,然後用hack來解決。不過hacker還是非常好用的。使用hacker我可以把瀏覽器分為3類:IE6 ;IE7和遨遊;其他(IE8 chrome ff safari opera等)
◆IE6認識的hacker 是底線_ 和星號 *
◆IE7 遨遊認識的hacker是星號 *
比如這樣一個CSS設定:
height:300px;*height:200px;_height:100px;
IE6瀏覽器在讀到height:300px的時候會認為高時300px;繼續往下讀,他也認識*heihgt, 所以當IE6讀到*height:200px的時候會覆蓋掉前一條的相衝突設定,認為高度是200px。繼續往下讀,IE6還認識_height,所以他又會覆蓋掉200px高的設定,把高度設定為100px;
IE7和遨遊也是一樣的從高度300px的設定往下讀。當它們讀到*height200px的時候就停下了,因為它們不認識_height。所以它們會把高度解析為200px,剩下的瀏覽器只認識第一個height:300px;所以他們會把高度解析為300px。因為優先順序相同且想衝突的屬性設定後一個會覆蓋掉前一個,所以書寫的次序是很重要的。
10.寫一條mysql的分頁語句
select * from table limit (pageIndex-1)*pageSize, pageSize;
//pageSize 每頁顯示數量
//pageIndex 顯示第幾頁
11.請編寫sql語句,要求tf_f_user表中隨機查詢5條資料
SQL Server:
SELECT TOP 5 * FROM T_USER ORDER BY NEWID()
ORACLE:
SELECT * FROM (SELECT * FROM T_USER ORDER BY DBMS_RANDOM.RANDOM()) WHERE RONUM <= 5
MySQL:
SELECT * FROM T_USER ORDER BY RAND() LIMIT 5
Access:
SELECT TOP 5* FROM T_USER ORDER BY rnd([一個自動編號欄位])
這條語句在 Access 中的“查詢”中是可以運行並得到隨機結果的,但在 ASP.NET等背景程式代碼中卻無法得到預期的隨機效果。
正確的寫法如下:
以ASP.NET為例:
Random random = new Random(System.Guid.NewGuid().GetHashCode());
int r = random.Next();
string sql = "SELECT TOP 5 * FROM T_USER ORDER BY RND(" + (-r) + "*自動編號欄位)"
12.是否可以繼承String類
不可以
因為String是final修飾的類,不能被其他類繼承。
13.日期時間:(寫出代碼)
-如何取得年月日、小時分鐘秒?
Calendar now = Calendar.getInstance();
System.out.println("年:" + now.get(Calendar.YEAR));
System.out.println("月:" + (now.get(Calendar.MONTH) + 1));
System.out.println("日:" + now.get(Calendar.DAY_OF_MONTH));
System.out.println("時:" + now.get(Calendar.HOUR_OF_DAY));
System.out.println("分:" + now.get(Calendar.MINUTE));
System.out.println("秒:" + now.get(Calendar.SECOND));
-如何讓取得從1970年1月1日0時0分0秒到現在的毫秒數?
//擷取從1970 1 1到當前毫秒數Java中的getTime方法預設的是從//1970 1 1 算起
public class test1{
public static void main(String[] args) {
Calendar.getInstance().getTimeInMillis();
System.currentTimeMillis();
Clock.systemDefaultZone().millis(); // Java 8
}
}
-如何讓取得某月的最後一天?
public static String getLastDayOfMonth(int year, int month) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE));
return new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime());
}
public static String getFirstDayOfMonth(int year, int month) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE));
return new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime());
}
-如何格式化日期?
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("目前時間:" + sdf.format(d));
14、求從10到100中能被3和5整除的數的和(寫出代碼)
public void getSum(){
int sum = 0;// 10到100中能被3和5整除的數的和
for(int i=10;i<=100;i++){
if(i%3==0&&i%5==0){
sum+=i;
}
}
System.out.println(“10到100中能被3和5整除的數的和是:”+sum);
}
15.用最有效率的方法算出3乘以8等於多少?(寫出代碼)
2<<3
java面試題07