java形參 實參各是什麼? 有什麼區別?
形參是定義方法的時候,該方法所攜帶的參數,不如說現在有一個方法 public void printInfo(String info){ System.out.println(info); } 此處info就是一個形參,它是String類型的。 實參是你在調用方法的時候,給這個方法傳遞的參數值,比如說有這麼一個語句: **.printInfo("hello");(此處**表示printInfo方法所在類的一個對象),這裏的"hello"就是一個實參,實現方法調用的時候,系統會吧實參"hello"的值賦予形參info變量,即info就指向了"hello",調用這個方法後,就會在屏幕上打印輸出hello
Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?
回答:Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的
話,返回真值。
35:Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
回答:Math.round(11.5)==12;Math.round(-11.5)==-11;round 方法返回與參數最接近的長整數,參數加1/2後求其floor
36:short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
回答:short s1 = 1; s1 = s1 + 1;有錯,s1是short 型,s1+1是int 型,不能顯式轉化爲short型。可修改爲s1 =(short)(s1 + 1) 。
short s1 = 1; s1 += 1正確。
21:sleep() 和wait() 有什麼區別?
sleep()方法執行後仍然擁有線程,只是延時。而wait方法放棄了線程控制,其它線程可以運行。
回答:sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢復執行。這是因爲在那個時
刻,其它線程可能正在運行而且沒有被調度爲放棄執行,除非(a)“醒來”的線程具有更高的優先級(b)正在運行的線程因爲其
它原因而阻塞。
wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,
直到被喚醒或等待時間到。
4.Thread和Runnable有什麼不同?
JAVA線程控制着程序執行的主路徑。當你用java命令調用JVM時,JVM創建了一個隱式線程來執行main方法。Thread類提供了主線程調用其它線程並行運行的機制。
Runnable接口定義了一個能被Thread運行的類。實現Runnable的類只需要實行run方法。可以很靈活的擴展現在的已經繼承自其它父類的類。而thread則不可以,因爲java只允許繼承一個父類。
5.我可以重載start()方法麼?
因爲Thread類的start()方法並不是final方法,因此可以,但不推薦這樣做。因爲在start()方法裏創建一個新的線程,進行特定的操作。你可以傳遞一個實現了Runnable接口的類到Thread,或者繼承Thread類,重載run()方法。
10、什麼是Java序列化,如何實現Java 序列化?
答:序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操作,
也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操作時所引發的問題。
序列化的實現:將需要被序列化的類實現Serializable接口,該接口沒有需要實現的方法,implements Serializable只是爲
了標註該對象是可被序列化的,然後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,
接着,使用ObjectOutputStream 對象的writeObject(Object obj)方法就可以將參數爲obj 的對象寫出(即保存其狀態),要恢
復的話則用輸入流。
什麼是線程安全? 如果你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。如果每次運行結果和單線程運行的結果是一樣的,而且其他的變量的值也和預期的是一樣的,就是線程安全的。
或者說:一個類或者程序所提供的接口對於線程來說是原子操作或者多個線程之間的切換不會導致該接口的執行結果存在二義性,也就是說我們不用考慮同步的問題。
線程安全問題都是由全局變量及靜態變量引起的。
若每個線程中對全局變量、靜態變量只有讀操作,而無寫操作,一般來說,這個全局變量是線程安全的;若有多個線程同時執行寫操作,一般都需要考慮線程同步,否則就可能影響線程安全。
6.什麼是中間件?
中間件就是程序中可織入的,可重用的,與業務邏輯無關的各種組件。中間件(middleware)是基礎軟件的一大類,屬於可複用軟件的範疇。顧名思義,中間件處於操作系統軟件與用戶的應用軟件的中間。中間件在操作系統、網絡和數據庫之上,應用軟件的下層,總的作用是爲處於自己上層的應用軟件提供運行與開發的環境,幫助用戶靈活、高效地開發和集成複雜的應用軟件。 在衆多關於中間件的定義中,比較普遍被接受的是IDC表述的:中間件是一種獨立的系統軟件或服務程序,分佈式應用軟件藉助這種軟件在不同的技術之間共享資源,中間件位於客戶機服務器的操作系統之上,管理計算資源和網絡通信。分類:數據訪問中間件,遠程調用中間件,消息中間件,交易中間件,對象中間件。舉例: 1,RMI(Remote Method Invocations, 遠程調用) 2,Load Balancing(負載均衡,將訪問負荷分散到各個服務器中) 3,Transparent Fail-over(透明的故障切換) 4,Clustering(集羣,用多個小的服務器代替大型機) 5,Back-end-Integration(後端集成,用現有的、新開發的系統如何去集成遺留的系統) 6,Transaction事務(全局/局部)全局事務(分佈式事務)局部事務(在同一數據庫聯接內的事務) 7,Dynamic Redeployment(動態重新部署,在不停止原系統的情況下,部署新的系統) 8,System Management(系統管理) 9,Threading(多線程處理) 10,Message-oriented Middleware面向消息的中間件(異步的調用編程) 11,Component Life Cycle(組件的生命週期管理) 12,Resource pooling(資源池) 13,Security(安全) 14,Caching(緩存)
7.你對MVC的理解,MVC有什麼優缺點?結合Struts,說明在一個Web應用如何去使用?答: MVC設計模式(應用觀察者模式的框架模式) M: Model(Business process layer),模型,操作數據的業務處理層,並獨立於表現層 (Independent of presentation)。 V: View(Presentation layer),視圖,通過客戶端數據類型顯示數據,並回顯模型層的執行結果。 C: Controller(Control layer),控制器,也就是視圖層和模型層橋樑,控制數據的流向,接受視圖層發出的事件,並重繪視圖 MVC框架的一種實現模型模型二(Servlet-centric): JSP+Servlet+JavaBean,以控制爲核心,JSP只負責顯示和收集數據,Sevlet,連接視圖和模型,將視圖層數據,發送給模型層,JavaBean,分爲業務類和數據實體,業務類處理業務數據,數據實體,承載數據,基本上大多數的項目都是使用這種MVC的實現模式。 StrutsMVC框架(Web application frameworks) Struts是使用MVC的實現模式二來實現的,也就是以控制器爲核心。 Struts提供了一些組件使用MVC開發應用程序: Model:Struts 沒有提供model 類。這個商業邏輯必須由Web 應用程序的開發者以 JavaBean或EJB的形式提供 View:Struts提供了action form創建form bean, 用於在controller和view間傳輸數據。此外,Struts提供了自定義JSP標籤庫,輔助開發者用JSP創建交互式的以表單爲基礎的應用程序,應用程序資源文件保留了一些文本常量和錯誤消息,可轉變爲其它語言,可用於JSP中。 Controller:Struts提供了一個核心的控制器ActionServlet,通過這個核心的控制器來調用其他用戶註冊了的自定義的控制器Action,自定義Action需要符合Struts的自定義Action規範,還需要在struts-config.xml的特定配置文件中進行配置,接收JSP輸入字段形成Action form,然後調用一個Action控制器。Action控制器中提供了model的邏輯接口。
存儲過程就是作爲可執行對象存放在數據庫中的一個或多個SQL命令。
定義總是很抽象。存儲過程其實就是能完成一定操作的一組SQL語句,只不過這組語句是放在數據庫中的(這裏我們只談SQL Server)。如果我們通過創建存儲過程以及在ASP中調用存儲過程,就可以避免將SQL語句同ASP代碼混雜在一起。這樣做的好處至少有三個: 網管網bitsCN.com
第一、大大提高效率。存儲過程本身的執行速度非常快,而且,調用存儲過程可以大大減少同數據庫的交互次數。
第二、提高安全性。假如將SQL語句混合在ASP代碼中,一旦代碼失密,同時也就意味着庫結構失密。
第三、有利於SQL語句的重用。
數據庫事物隔離級別 收藏
這個想必每個程序員都很早就知道了,但是我其實並沒有真正搞清楚。網絡上的很多文章也沒說清楚。以下內容個人覺得還是比較好理解的:
事務隔離級別(transaction isolation levels ):隔離級別就是對對事務併發控制的等級。ANSI / ISO SQL 將其分爲串行化(SERIALIZABLE)、可重複讀(REPEATABLE READ)、讀已提交(READ COMMITED)、讀未提交(READ UNCOMMITED)四個等級。爲了實現隔離級別通常數據庫採用鎖(Lock)。一般在編程的時候只需要設置隔離等級,至於具體採用什麼鎖則由數據庫來設置。首先介紹四種等級,然後舉例解釋後面三個等級(可重複讀、讀已提交、讀未提交)中會出現的併發問題。
串行化(SERIALIZABLE):所有事務都一個接一個地串行執行,這樣可以避免幻讀(phantom reads)。對於基於鎖來實現併發控制的數據庫來說,串行化要求在執行範圍查詢(如選取年齡在10到30之間的用戶)的時候,需要獲取範圍鎖(range lock)。如果不是基於鎖實現併發控制的數據庫,則檢查到有違反串行操作的事務時,需要滾回該事務。
可重複讀(REPEATABLE READ):所有被Select獲取的數據都不能被修改,這樣就可以避免一個事務前後讀取數據不一致的情況。但是卻沒有辦法控制幻讀,因爲這個時候其他事務不能更改所選的數據,但是可以增加數據,因爲前一個事務沒有範圍鎖。
讀已提交(READ COMMITED):被讀取的數據可以被其他事務修改。這樣就可能導致不可重複讀。也就是說,事務的讀取數據的時候獲取讀鎖,但是讀完之後立即釋放(不需要等到事務結束),而寫鎖則是事務提交之後才釋放。釋放讀鎖之後,就可能被其他事物修改數據。該等級也是SQL Server默認的隔離等級。
讀未提交(READ UNCOMMITED):這是最低的隔離等級,允許其他事務看到沒有提交的數據。這種等級會導致髒讀(Dirty Read)。
綜上述,可以等到下面的表格:
隔離等級
髒讀
不可重複讀
幻讀
讀未提交
YES
YES
YES
讀已提交
NO
YES
YES
可重複讀
NO
NO
YES
串行化
NO
NO
NO
注:事物隔離級別是依據一個事物進行查詢(Select,可能是一次或多次)時的數據是否“正確”爲依據而定義的。(理解)
補充:
1、髒讀:事物一讀到了事物二尚未提交的數據(如果事物二失敗回滾的情況下,則事物一讀到的數據則是無效的,或者說垃圾)
產生級別:讀未提交
解決需要級別: 讀已提交
2、不可重複讀:事物一在二次或多次讀取數據時,讀到了不同的數據。原因是事物二在中間修改了其中的數據。
產生級別:讀已提交
解決需要級別: 可重複讀
3、幻讀: 事物一修改了部分數據,事物二添加了新的並且符合事物一的條件的數據。造成事物一發現有新的數據沒有修改,稱幻覺。
產生級別: 可重複讀
解決需要級別:串行化
各大數據庫默認隔離級別:
Oracle:Read Committed
SQL Server:Read Committed
MySql:( InnoDB ) Repeatable Read
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/willfcareer/archive/2010/08/18/5820821.aspx
事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向數據的資源。通過將一組相關操作組合爲一個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程序更加可靠。一個邏輯工作單元要成爲事務,必須滿足所謂的ACID(原子性、一致性、隔離性和持久性)屬性:
· 原子性
事務必須是原子工作單元;對於其數據修改,要麼全都執行,要麼全都不執行。通常,與某個事務關聯的操作具有共同的目標,並且是相互依賴的。如果系統只執行這些操作的一個子集,則可能會破壞事務的總體目標。原子性消除了系統處理操作子集的可能性。
· 一致性
事務在完成時,必須使所有的數據都保持一致狀態。在相關數據庫中,所有規則都必須應用於事務的修改,以保持所有數據的完整性。事務結束時,所有的內部數據結構(如 B 樹索引或雙向鏈表)都必須是正確的。某些維護一致性的責任由應用程序開發人員承擔,他們必須確保應用程序已強制所有已知的完整性約束。例如,當開發用於轉帳的應用程序時,應避免在轉帳過程中任意移動小數點。
· 隔離性
由併發事務所作的修改必須與任何其它併發事務所作的修改隔離。事務查看數據時數據所處的狀態,要麼是另一併發事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不會查看中間狀態的數據。這稱爲可串行性,因爲它能夠重新裝載起始數據,並且重播一系列事務,以使數據結束時的狀態與原始事務執行的狀態相同。當事務可序列化時將獲得最高的隔離級別。在此級別上,從一組可並行執行的事務獲得的結果與通過連續運行每個事務所獲得的結果相同。由於高度隔離會限制可並行執行的事務數,所以一些應用程序降低隔離級別以換取更大的吞吐量。
· 持久性
事務完成之後,它對於系統的影響是永久性的。該修改即使出現致命的系統故障也將一直保持。
DBMS的責任和我們的任務
你可以參考這個網址http://blog.pconline.com.cn/article/105865.html DOM是基於平臺、語言無關的官方W3C標準。基於樹的層次,其優點是可以移植,編程容易,開發人員只需要調用建樹的指令。其缺點是加載大文件不理想。 SAX是基於事件模型的,它在解析 XML 文檔的時候可以觸發一系列的事件,當發現給定的tag的時候,它可以激活一個回調方法,告訴該方法制定的標籤已經找到。類似與流媒體的解析方式,所以在加載大文件時效果不錯。 JDOM是想成爲 Java 特定文檔模型。它簡化與 XML 的交互並且比使用 DOM 實現更快。使用的是具體類不使用接口,運用了大量的COllections類,方便程序員。 DOM4J是一個獨立的開發結果。是一個非常非常優秀的Java XML API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一個開放源代碼的軟件。推薦使用。
15,HashMap和Hashtable的區別。
都屬於Map接口的類,實現了將惟一鍵映射到特定的值上。
HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。
Hashtable 類似於 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因爲它是同步的。
finalize?方法名。Java 技術允許使用 finalize()方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize()方法是在垃圾收集器刪除對象之前對這個對象調用的。
26,Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢?是用==還是equals()? 它們有何區別?
Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值。
第二十二,接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?
接口可以繼承接口。抽象類可以實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
第三十,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏到底是值傳遞還是引用傳遞?
是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例作爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
SAX與DOM之間的區別
SAX與DOM之間有一些顯著區別,包括:
DOM是複雜對象處理的首選,比如當XML比較複雜的時候,或者當你需要隨機處理文檔中數據的時候。SAX從文檔的開始通過每一節點移動,以定位一個特定的節點。
DOM爲載入到內存的文檔節點建立類型描述。最終,這些描述呈現了可容易橫向移動、潛在巨大、樹型結構。如果XML很冗長,DOM就會顯示出無法控制的脹大。例如,一個300KB的XML文檔可以導致RAM或者虛擬內存中的3,000,000KB的DOM樹型結構。通過比較就會發現,一個SAX文檔根本就沒有被解構,它也沒有隱藏在內存空間中(當然當XML流被讀入時,會有部分文檔暫時隱藏在內存中)。SAX就是一種“更輕巧的”技術──它可以給你的系統帶來更輕的負擔。SAX相當於觀看一場馬拉松比賽,而DOM就好比邀請所有的比賽選手到家裏參加晚餐。
所以,你如何選擇SAX和DOM?如果你處理複雜的東西,比如高級XSLT轉換,或者Xpath過濾,請選擇使用DOM。如果你建立或者更改XML文檔,你也可以選擇DOM。
相反,你可以使用SAX來查詢或者閱讀XML文檔。SAX可以快速掃描一個大型的XML文檔,當它找到查詢標準時就會立即停止,然後再處理之。
在某些情況下,在一個方案中,最佳的選擇是使用DOM和SAX處理不同的部分。例如,你可以使用DOM將XML載入到內存並改變它,然後通過從DOM樹中發送一個SAX流而轉移最後的結果。
SAX概念
SAX是Simple API for XML的縮寫,它並不是由W3C官方所提出的標準,可以說是“民間”的事實標準。實際上,它是一種社區性質的討論產物。雖然如此,在XML中對SAX的應用絲毫不比DOM少,幾乎所有的XML解析器都會支持它。
與DOM比較而言,SAX是一種輕量型的方法。我們知道,在處理DOM的時候,我們需要讀入整個的XML文檔,然後在內存中創建DOM樹,生成DOM樹上的每個Node對象。當文檔比較小的時候,這不會造成什麼問題,但是一旦文檔大起來,處理DOM就會變得相當費時費力。特別是其對於內存的需求,也將是成倍的增長,以至於在某些應用中使用DOM是一件很不划算的事(比如在applet中)。這時候,一個較好的替代解決方法就是SAX。
SAX在概念上與DOM完全不同。首先,不同於DOM的文檔驅動,它是事件驅動的,也就是說,它並不需要讀入整個文檔,而文檔的讀入過程也就是SAX的解析過程。所謂事件驅動,是指一種基於回調(callback)機制的程序運行方法。(如果你對Java新的代理事件模型比較清楚的話,就會很容易理解這種機制了)
在XMLReader接受XML文檔,在讀入XML文檔的過程中就進行解析,也就是說讀入文檔的過程和解析的過程是同時進行的,這和DOM區別很大。解析開始之前,需要向XMLReader註冊一個ContentHandler,也就是相當於一個事件監聽器,在ContentHandler中定義了很多方法,比如startDocument(),它定製了當在解析過程中,遇到文檔開始時應該處理的事情。當XMLReader讀到合適的內容,就會拋出相應的事件,並把這個事件的處理權代理給ContentHandler,調用其相應的方法進行響應
The DataSynapse platform is used by leading organizations to configure, activate and manage scalable enterprise-class application services for physical, virtual and cloud infrastructure in real-time environments.
Key Features
1、Heterogeneous platform support – Grid services can be Java, C++, .NET, batch services or executables
2、Universal client support – Grid services can be accessed from rich or thin client applications, application servers, or even Excel spreadsheets
3、Dynamic scaling – Sophisticated scheduling and provisioning of work across resources automatically adapts as policies, priorities, and workloads change
4、Guaranteed service execution even if there are hardware failures – GridServer provides automatic failover and failback of services
5、Centralized command and control GridServer simplifies the configuration and management of running multiple services across widely distributed resources