程序員面試之九陰真經html
談談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(繼承) 其它類,但一個內部類能夠做爲一個接口,由另外一個內部類實現。java
&和&&的區別:
&是位運算符。&&是布爾邏輯運算符。ios
HashMap和Hashtable的區別:
都屬於Map接口的類,實現了將唯一鍵映射到特定的值上。
HashMap 類沒有分類或者排序。它容許一個 null 鍵和多個 null 值。
Hashtable 相似於 HashMap,可是不容許 null 鍵和 null 值。它也比 HashMap 慢,由於它是同步的。程序員
Collection 和 Collections的區別:
Collections是個java.util下的類,它包含有各類有關集合操做的靜態方法。
Collection是個java.util下的接口,它是各類集合結構的父接口。web
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。sql
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正確。數據庫
sleep() 和 wait() 有什麼區別:
sleep()方法是使線程中止一段時間的方法。在sleep 時間間隔期滿後,線程不必定當即恢復執行。這是由於在那個時刻,其它線程可能正在運行並且沒有被調度爲放棄執行,除非(a)「醒來」的線程具備更高的優先級
(b)正在運行的線程由於其它緣由而阻塞。
wait()是線程交互時,若是線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。
數組有沒有length()這個方法? String有沒有length()這個方法:
數組沒有length()這個方法,有length的屬性。
String有有length()這個方法。
Overload和Override的區別。Overloaded的方法是否能夠改變返回值的類型:
方法的重寫Overriding和重載Overloading是Java多態性的不一樣表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。若是在子類中定義某方法與其父類有相同的名稱和參數,咱們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被「屏蔽」了。若是在一個類中定義了多個同名的方法,它們或有不一樣的參數個數或有不一樣的參數類型,則稱爲方法的重載(Overloading)。Overloaded的方法是能夠改變返回值的類型。
Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別:
Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象 equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值。
給我一個你最多見到的runtime exception:
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException。
error和exception有什麼區別:
error 表示恢復不是不可能但很困難的狀況下的一種嚴重問題。好比說內存溢出。不可能期望程序能處理這樣的狀況。
exception 表示一種設計或實現問題。也就是說,它表示若是程序運行正常,從不會發生的狀況。
List, Set, Map是否繼承自Collection接口:
List,Set是。
Map不是。
abstract class和interface有什麼區別:
聲明方法的存在而不去實現它的類被叫作抽象類(abstract class),它用於要建立一個體現某些基本行爲的類,併爲該類聲明方法,但不能在該類中實現該類的狀況。不能建立abstract 類的實例。然而能夠建立一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類爲它們父類中的全部抽象方法提供實現,不然它們也是抽象類爲。取而代之,在子類中實現該方法。知道其行爲的其它類能夠在類中實現這些方法。
接口(interface)是抽象類的變體。在接口中,全部方法都是抽象的。多繼承性可經過實現這樣的接口而得到。接口中的全部方法都是抽象的,沒有一個有程序體。接口只能夠定義static final成員變量。接口的實現與子類類似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(即將程序體給予)全部這種接口的方法。而後,它能夠在實現了該接口的類的任何對象上調用接口的方法。因爲有抽象類,它容許使用接口名做爲引用變量的類型。一般的動態聯編將生效。引用能夠轉換到接口類型或從接口類型轉換,instanceof 運算符能夠用來決定某對象的類是否實現了接口。
接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class):
接口能夠繼承接口。抽象類能夠實現(implements)接口,抽象類是可繼承實體類,但前提是實體類必須有明確的構造函數。
啓動一個線程是用run()仍是start():
啓動一個線程是調用start()方法,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。這並不意味着線程就會當即運行。run()方法能夠產生必須退出的標誌來中止一個線程。
構造器Constructor是否可被override:
構造器Constructor不能被繼承,所以不能重寫Overriding,但能夠被重載Overloading。
try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return前仍是後:
會執行,在return前執行。
兩個對象值相同(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不對:
當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏究竟是值傳遞仍是引用傳遞:
是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例做爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容能夠在被調用的方法中改變,但對象的引用是永遠不會改變的。
swtich是否能做用在byte上,是否能做用在long上,是否能做用在String上:
switch(expr1)中,expr1是一個整數表達式。所以傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能做用於swtich。
編程題: 寫一個Singleton出來:
Singleton模式主要做用是保證在Java應用程序中,一個類Class只有一個實例存在。
通常Singleton模式一般有幾種種形式:
第一種形式:定義一個類,它的構造函數爲private的,它有一個static的private的該類變量,在類初始化時實例話,經過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。
public class Singleton {
private Singleton(){}
//在本身內部定義本身一個實例,是否是很奇怪?
//注意這是private 只供內部調用
private static Singleton instance = new Singleton();
//這裏提供了一個供外部訪問本class的靜態方法,能夠直接訪問
public static Singleton getInstance() {
return instance;
}
}
第二種形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提升了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其餘形式:
定義一個類,它的構造函數爲private的,全部方法爲static的。
通常認爲第一種形式要更加安全些。
Hashtable和HashMap的區別:
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現
HashMap容許將null做爲一個entry的key或者value,而Hashtable不容許
還有就是,HashMap把Hashtable的contains方法去掉了,改爲containsvalue和containsKey。由於contains方法容易讓人引發誤解。
最大的不一樣是,Hashtable的方法是Synchronize的,而HashMap不是,在
多個線程訪問Hashtable時,不須要本身爲它的方法實現同步,而HashMap
就必須爲之提供外同步。
Hashtable和HashMap採用的hash/rehash算法都大概同樣,因此性能不會有很大的差別
做用域public,private,protected,以及不寫時的區別:
做用域 當前類 同一package 子孫類 其餘package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不寫時默認爲friendly。
ArrayList和Vector的區別,HashMap和Hashtable的區別:
答:就ArrayList與Vector主要從二方面來講.
一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的
二.數據增加:當須要增加時,Vector默認增加爲原來一培,而ArrayList倒是原來的一半
就HashMap與HashTable主要從三方面來講。
一.歷史緣由:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現
二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的
三.值:只有HashMap可讓你將空值做爲一個表的條目的key或value。
char型變量中能不能存貯一箇中文漢字?爲何:
答:是可以定義成爲一箇中文的,由於java中以unicode編碼,一個char佔16個字節,因此放一箇中文是沒問題的。
介紹JAVA中的Collection FrameWork(包括如何寫本身的數據結構):
答:Collection FrameWork以下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set –hashset-Linkedhashset
-Treeset
Map
treemap
├Hashtable
├HashMap –WeakHashMap
-Linkedhashmap
Collection是最基本的集合接口,一個Collection表明一組Object,即Collection的元素(Elements)
Map提供key到value的映射。
jsp有哪些內置對象?做用分別是什麼:
答:JSP共有如下9種基本內置組件(可與ASP的6種內部組件相對應):
request 用戶端請求,此請求會包含來自GET/POST請求的參數
response 網頁傳回用戶端的迴應
pageContext 網頁的屬性是在這裏管理
session 與請求有關的會話期
application servlet 正在執行的內容
out 用來傳送回應的輸出
config servlet的構架部件
page JSP網頁自己
exception 針對錯誤網頁,未捕捉的例外。
jsp有哪些動做?做用分別是什麼:
答:JSP共有如下6種基本動做
jsp:include:在頁面被請求的時候引入一個文件。
jsp:useBean:尋找或者實例化一個JavaBean。
jsp:setProperty:設置JavaBean的屬性。
jsp:getProperty:輸出某個JavaBean的屬性。
jsp:forward:把請求轉到一個新的頁面。
jsp:plugin:根據瀏覽器類型爲Java插件生成OBJECT或EMBED標記。(embed)
JSP中動態INCLUDE與靜態INCLUDE的區別:
答:動態INCLUDE用jsp:include動做實現
<jsp:include page="included.jsp" flush="true" />它老是會檢查所含文件中的變化,適合用於包含動態頁面,而且能夠帶參數
靜態INCLUDE用include僞碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面 <%@ include file="included.htm" %>。
兩種跳轉方式分別是什麼?有什麼區別:
答:有兩種,分別爲:
<jsp:include page="included.jsp" flush="true">
<jsp:forward page= "nextpage.jsp"/>
前者頁面不會轉向include所指的頁面,只是顯示該頁的結果,主頁面仍是原來的頁面。執行完後還會回來,至關於函數調用。而且能夠帶參數.後者徹底轉向新頁面,不會再回來。至關於go to 語句。
說一說Servlet的生命週期:
答:servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。
JAVA SERVLET API中forward() 與redirect()的區別:
答:前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;後者則是徹底的跳轉,瀏覽器將會獲得跳轉的地址,並從新發送請求連接。這樣,從瀏覽器的地址欄中能夠看到跳轉後的連接地址。因此,前者更加高效,在前者能夠知足須要時,儘可能使用forward()方法,而且,這樣也有助於隱藏實際的連接。在有些狀況下,好比,須要跳轉到一個其它服務器上的資源,則必須使用sendRedirect()方法。
Servlet的基本架構:
public class ServletName extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
}
可能會讓你寫一段Jdbc連Oracle的程序,並實現數據查詢:
答:程序以下:
package hello.ant;
import java.sql.*;
public class jdbc
{
String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String theUser="admin";
String thePw="manager";
Connection c=null;
Statement conn;
ResultSet rs=null;
public jdbc()
{
try{
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
c = DriverManager.getConnection(dbUrl,theUser,thePw);
conn=c.createStatement();
}catch(Exception e){
e.printStackTrace();
}
}
public boolean executeUpdate(String sql)
{
try
{
conn.executeUpdate(sql);
return true;
}
catch (SQLException e)
{
e.printStackTrace();
return false;
}
}
public ResultSet executeQuery(String sql)
{
rs=null;
try
{
rs=conn.executeQuery(sql);
}
catch (SQLException e)
{
e.printStackTrace();
}
return rs;
}
public void close()
{
try
{
conn.close();
c.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
ResultSet rs;
jdbc conn = new jdbc();
rs=conn.executeQuery("select * from test");
try{
while (rs.next())
{
System.out.println(rs.getString("id"));
System.out.println(rs.getString("name"));
}
}catch(Exception e)
{
e.printStackTrace();
}
}
}
Class.forName的做用?爲何要用:
答:調用該訪問返回一個以字符串指定類名的類的對象。
Jdo是什麼:
答:JDO是Java對象持久化的新的規範,爲java data object的簡稱,也是一個用於存取某種數據倉庫中的對象的標準化API。JDO提供了透明的對象存儲,所以對開發人員來講,存儲數據對象徹底不須要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工做已經轉移到JDO產品提供商身上,使開發人員解脫出來,從而集中時間和精力在業務邏輯上。另外,JDO很靈活,由於它能夠在任何數據底層上運行。JDBC只是面向關係數據庫(RDBMS)JDO更通用,提供到任何數據底層的存儲功能,好比關係數據庫、文件、XML以及對象數據庫(ODBMS)等等,使得應用可移植性更強。
xml有哪些解析技術?區別是什麼:
答:有DOM,SAX,STAX等
DOM:處理大型文件時其性能降低的很是厲害。這個問題是由DOM的樹結構所形成的,這種結構佔用的內存較多,並且DOM必須在解析文件以前把整個文檔裝入內存,適合對XML的隨機訪問SAX:不現於DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML文件,不須要一次所有裝載整個文件。當遇到像文件開頭,文檔結束,或者標籤開頭與標籤結束時,它會觸發一個事件,用戶經過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問
STAX:Streaming API for XML (StAX)。
你在項目中用到了xml技術的哪些方面?如何實現的:
答:用到了數據存貯,信息配置兩方面。在作數據交換平臺時,將不能數據源的數據組裝成XML文件,而後將XML文件壓縮打包加密後經過網絡傳送給接收者,接收解密與解壓縮後再同XML文件中還原相關信息進行處理。在作軟件配置時,利用XML能夠很方便的進行,軟件的各類配置參數都存貯在XML文件中。
用jdom解析xml文件時如何解決中文問題?如何解析:
答:看以下代碼,用編碼方式加以解決
package test;
import java.io.*;
public class DOMTest
{
private String inFile = "c:\people.xml";
private String outFile = "c:\people.xml";
public static void main(String args[])
{
new DOMTest();
}
public DOMTest()
{
try
{
javax.xml.parsers.DocumentBuilder builder =
javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();
org.w3c.dom.Document doc = builder.newDocument();
org.w3c.dom.Element root = doc.createElement("老師");
org.w3c.dom.Element wang = doc.createElement("王");
org.w3c.dom.Element liu = doc.createElement("劉");
wang.appendChild(doc.createTextNode("我是王老師"));
root.appendChild(wang);
doc.appendChild(root);
javax.xml.transform.Transformer transformer =
javax.xml.transform.TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "gb2312");
transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes");
transformer.transform(new javax.xml.transform.dom.DOMSource(doc),
new
javax.xml.transform.stream.StreamResult(outFile));
}
catch (Exception e)
{
System.out.println (e.getMessage());
}
}
}
編程用JAVA解析XML的方式:
答:用SAX方式解析XML,XML文件以下:
<?xml version="1.0" encoding="gb2312"?>
<person>
<name>王小明</name>
<college>信息學院</college>
<telephone>6258113</telephone>
<notes>男,1955年生,博士,95年調入海南大學</notes>
</person>
事件回調類SAXHandler.java
import java.io.*;
import java.util.Hashtable;
import org.xml.sax.*;
public class SAXHandler extends HandlerBase
{
private Hashtable table = new Hashtable();
private String currentElement = null;
private String currentValue = null;
public void setTable(Hashtable table)
{
this.table = table;
}
public Hashtable getTable()
{
return table;
}
public void startElement(String tag, AttributeList attrs)
throws SAXException
{
currentElement = tag;
}
public void characters(char[] ch, int start, int length)
throws SAXException
{
currentValue = new String(ch, start, length);
}
public void endElement(String name) throws SAXException
{
if (currentElement.equals(name))
table.put(currentElement, currentValue);
}
}
JSP內容顯示源碼,SaxXml.jsp:
<HTML>
<HEAD>
<TITLE>剖析XML文件people.xml</TITLE>
</HEAD>
<BODY>
<%@ page errorPage="ErrPage.jsp"
contentType="text/html;charset=GB2312" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.Hashtable" %>
<%@ page import="org.w3c.dom.*" %>
<%@ page import="org.xml.sax.*" %>
<%@ page import="javax.xml.parsers.SAXParserFactory" %>
<%@ page import="javax.xml.parsers.SAXParser" %>
<%@ page import="SAXHandler" %>
<%
File file = new File("c:\people.xml");
FileReader reader = new FileReader(file);
Parser parser;
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
SAXHandler handler = new SAXHandler();
sp.parse(new InputSource(reader), handler);
Hashtable hashTable = handler.getTable();
out.println("<TABLE BORDER=2><CAPTION>教師信息表</CAPTION>");
out.println("<TR><TD>姓名</TD>" + "<TD>" +
(String)hashTable.get(new String("name")) + "</TD></TR>");
out.println("<TR><TD>學院</TD>" + "<TD>" +
(String)hashTable.get(new String("college"))+"</TD></TR>");
out.println("<TR><TD>電話</TD>" + "<TD>" +
(String)hashTable.get(new String("telephone")) + "</TD></TR>");
out.println("<TR><TD>備註</TD>" + "<TD>" +
(String)hashTable.get(new String("notes")) + "</TD></TR>");
out.println("</TABLE>");
%>
</BODY>
</HTML>
EJB與JAVA BEAN的區別:
答:Java Bean 是可複用的組件,對Java Bean並無嚴格的規範,理論上講,任何一個Java類均可以是一個Bean。但一般狀況下,因爲Java Bean是被容器所建立(如Tomcat)的,因此Java Bean應具備一個無參的構造器,另外,一般Java Bean還要實現Serializable接口用於實現Bean的持久性。Java Bean實際上至關於微軟COM模型中的本地進程內COM組件,它是不能被跨進程訪問的。Enterprise Java Bean 至關於DCOM,即分佈式組件。它是基於Java的遠程方法調用(RMI)技術的,因此EJB能夠被遠程訪問(跨進程、跨計算機)。但EJB必須被佈署在諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接訪問真正的EJB組件,而是經過其容器訪問。EJB容器是EJB組件的代理,EJB組件由容器所建立和管理。客戶經過容器來訪問真正的EJB組件。
EJB的基本架構:
答:一個EJB包括三個部分:
Remote Interface 接口的代碼
package Beans;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Add extends EJBObject
{
//some method declare
}
Home Interface 接口的代碼
package Beans;
import java.rmi.RemoteException;
import jaax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface AddHome extends EJBHome
{
//some method declare
}
EJB類的代碼
package Beans;
import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javx.ejb.SessionContext;
public class AddBean Implements SessionBean
{
//some method declare
}
MVC的各個部分都有那些技術來實現?如何實現:
答:MVC是Model-View-Controller的簡寫。"Model" 表明的是應用的業務邏輯(經過JavaBean,EJB組件實現), "View" 是應用的表示面(由JSP頁面產生),"Controller" 是提供應用的處理過程控制(通常是一個Servlet),經過這種設計模型把應用邏輯,處理過程和顯示邏輯分紅不一樣的組件實現。這些組件能夠進行交互和重用。
J2EE是什麼:
答:Je22是Sun公司提出的多層(multi-diered),分佈式(distributed),基於組件(component-base)的企業級應用模型(enterpriese application model).在這樣的一個應用系統中,可按照功能劃分爲不一樣的組件,這些組件又可在不一樣計算機上,而且處於相應的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業信息系統(EIS)層。
WEB SERVICE名詞解釋。JSWDL開發包的介紹。JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋:
答:Web Service描述語言WSDL
SOAP即簡單對象訪問協議(Simple Object Access Protocol),它是用於交換XML編碼信息的輕量級協議。
UDDI 的目的是爲電子商務創建標準;UDDI是一套基於Web的、分佈式的、爲Web Service提供的、信息註冊中心的實現標準規範,同時也包含一組使企業能將自身提供的Web Service註冊,以使別的企業可以發現的訪問協議的實現標準。
STRUTS的應用(如STRUTS架構) :
答:Struts是採用Java Servlet/JavaServer Pages技術,開發Web應用程序的開放源碼的framework。 採用Struts能開發出基於MVC(Model-View-Controller)設計模式的應用構架。 Struts有以下的主要功能:
一.包含一個controller servlet,能將用戶的請求發送到相應的Action對象。
二.JSP自由tag庫,而且在controller servlet中提供關聯支持,幫助開發員建立交互式表單應用。
三.提供了一系列實用對象:XML處理、經過Java reflection APIs自動處理JavaBeans屬性、國際化的提示和消息。
開發中都用到了那些設計模式?用在什麼場合:
答:每一個模式都描述了一個在咱們的環境中不斷出現的問題,而後描述了該問題的解決方案的核心。經過這種方式,你能夠無數次地使用那些已有的解決方案,無需在重複相同的工做。主要用到了MVC的設計模式。用來開發JSP/Servlet或者J2EE的相關應用。簡單工廠模式等。
存儲過程和函數的區別:
存儲過程是用戶定義的一系列sql語句的集合,涉及特定表或其它對象的任務,用戶能夠調用存儲過程,而函數一般是數據庫已定義的方法,它接收參數並返回某種類型的值而且不涉及特定用戶表。
事務是什麼:
事務是做爲一個邏輯單元執行的一系列操做,一個邏輯工做單元必須有四個屬性,稱爲 ACID(原子性、一致性、隔離性和持久性)屬性,只有這樣才能成爲一個事務:
原子性:
事務必須是原子工做單元;對於其數據修改,要麼全都執行,要麼全都不執行。
一致性:
事務在完成時,必須使全部的數據都保持一致狀態。在相關數據庫中,全部規則都必須應用於事務的修改,以保持全部數據的完整性。事務結束時,全部的內部數據結構(如 B 樹索引或雙向鏈表)都必須是正確的。
隔離性:
由併發事務所做的修改必須與任何其它併發事務所做的修改隔離。事務查看數據時數據所處的狀態,要麼是另外一併發事務修改它以前的狀態,要麼是另外一事務修改它以後的狀態,事務不會查看中間狀態的數據。這稱爲可串行性,由於它可以從新裝載起始數據,而且重播一系列事務,以使數據結束時的狀態與原始事務執行的狀態相同。
持久性:
事務完成以後,它對於系統的影響是永久性的。該修改即便出現系統故障也將一直保持。
遊標的做用?如何知道遊標已經到了最後:
遊標用於定位結果集的行,經過判斷全局變量@@FETCH_STATUS能夠判斷是否到了最後,一般此變量不等於0表示出錯或到了最後。
觸發器分爲事前觸發和過後觸發,這兩種觸發有和區別。語句級觸發和行級觸發有何區別:
事前觸發器運行於觸發事件發生以前,而過後觸發器運行於觸發事件發生以後。一般事前觸發器能夠獲取事件以前和新的字段值。
語句級觸發器能夠在語句執行前或後執行,而行級觸發在觸發器所影響的每一行觸發一次。
bean 實例的生命週期:
對於Stateless Session Bean、Entity Bean、Message Driven Bean通常存在緩衝池管理,而對於Entity Bean和Statefull Session Bean存在Cache管理,一般包含建立實例,設置上下文、建立EJB Object(create)、業務方法調用、remove等過程,對於存在緩衝池管理的Bean,在create以後實例並不從內存清除,而是採用緩衝池調度機制不斷重用實例,而對於存在Cache管理的Bean則經過激活和去激活機制保持Bean的狀態並限制內存中實例數量。
remote接口和home接口主要做用:
remote接口定義了業務方法,用於EJB客戶端調用業務方法
home接口是EJB工廠用於建立和移除查找EJB實例。
客服端調用EJB對象的幾個基本步驟:
1、 設置JNDI服務工廠以及JNDI服務地址系統屬性。
2、 查找Home接口。
3、 從Home接口調用Create方法建立Remote接口。
4、 經過Remote接口調用其業務方法。
何時用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 標記。還能夠在包的基礎上啓用或者禁用斷言。
能夠在預計正常狀況下不會到達的任何位置上放置斷言。斷言能夠用於驗證傳遞給私有方法的參數。不過,斷言不該該用於驗證傳遞給公有方法的參數,由於無論是否啓用了斷言,公有方法都必須檢查其參數。不過,既能夠在公有方法中,也能夠在非公有方法中利用斷言測試後置條件。另外,斷言不該該以任何方式改變程序的狀態。
是否能夠繼承String類:
String類是final類故不能夠繼承。
面向對象的特徵有哪些方面:
抽象:抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解所有問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。
繼承:繼承是一種聯結類的層次模型,而且容許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類能夠從現有的類中派生,這個過程稱爲類繼承。新類繼承了原始類的特性,新類稱爲原始類的派生類(子類),而原始類稱爲新類的基類(父類)。派生類能夠從它的基類那裏繼承方法和實例變量,而且類能夠修改或增長新的方法使之更適合特殊的須要。
封裝:封裝是把過程和數據包圍起來,對數據的訪問只能經過已定義的界面。面向對象計算始於這個基本概念,即現實世界能夠被描繪成一系列徹底自治、封裝的對象,這些對象經過一個受保護的接口訪問其餘對象。
多態性:多態性是指容許不一樣類的對象對同一消息做出響應。多態性包括參數化多態性和包含多態性。多態性語言具備靈活、抽象、行爲共享、代碼共享的優點,很好的解決了應用程序函數同名問題。
String是最基本的數據類型嗎:
基本數據類型包括byte、int、char、long、float、double、boolean和short。
java.lang.String類是final類型的,所以不能夠繼承這個類、不能修改這個類。爲了提升效率節省空間,咱們應該用StringBuffer類。
String 和StringBuffer的區別:
JAVA平臺提供了兩個類:String和StringBuffer,它們能夠儲存和操做字符串,即包含多個字符的字符數據。這個String類提供了數值不可改變的字符串。而這個StringBuffer類提供的字符串進行修改。當你知道字符數據要改變的時候你就能夠使用StringBuffer。典型地,你能夠使用StringBuffers來動態構造字符數據。
說出ArrayList,Vector, LinkedList的存儲性能和特性:
ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增長和插入元素,它們都容許直接按序號索引元素,可是插入元素要涉及數組元素移動等內存操做,因此索引數據快而插入數據慢,Vector因爲使用了synchronized方法(線程安全),一般性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據須要進行前向或後向遍歷,可是插入數據時只須要記錄本項的先後項便可,因此插入速度較快。
同步和異步有何異同,在什麼狀況下分別使用他們?舉例說明。
若是數據將在線程間共享。例如正在寫的數據之後可能被另外一個線程讀到,或者正在讀的數據可能已經被另外一個線程寫過了,那麼這些數據就是共享數據,必須進行同步存取。當應用程序在對象上調用了一個須要花費很長時間來執行的方法,而且不但願讓程序等待方法的返回時,就應該使用異步編程,在不少狀況下采用異步途徑每每更有效率。
heap和stack有什麼區別:
棧是一種線形集合,其添加和刪除元素的操做應在同一段完成。棧按照後進先出的方式進行處理。堆是棧的一個組成元素。
EJB與JAVA BEAN的區別:
java Bean 是可複用的組件,對Java Bean並無嚴格的規範,理論上講,任何一個Java類均可以是一個Bean。但一般狀況下,因爲Java Bean是被容器所建立(如Tomcat)的,因此Java Bean應具備一個無參的構造器,另外,一般Java Bean還要實現Serializable接口用於實現Bean的持久性。Java Bean實際上至關於微軟COM模型中的本地進程內COM組件,它是不能被跨進程訪問的。Enterprise Java Bean 至關於DCOM,即分佈式組件。它是基於Java的遠程方法調用(RMI)技術的,因此EJB能夠被遠程訪問(跨進程、跨計算機)。但EJB必須被佈署在諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接訪問真正的EJB組件,而是經過其容器訪問。EJB容器是EJB組件的代理,EJB組件由容器所建立和管理。客戶經過容器來訪問真正的EJB組件。
Static Nested Class 和 Inner Class的不一樣:
Static Nested Class是被聲明爲靜態(static)的內部類,它能夠不依賴於外部類實例被實例化。而一般的內部類須要在外部類實例化後才能實例化。
Java的接口和C++的虛類的相同和不一樣處:
因爲Java不支持多繼承,而有可能某個類或對象要使用分別在幾個類或對象裏面的方法或屬性,現有的單繼承機制就不能知足要求。與繼承相比,接口有更高的靈活性,由於接口中沒有任何實現代碼。當一個類實現了接口之後,該類要實現接口裏面全部的方法和屬性,而且接口裏面的屬性在默認狀態下面都是public static,全部方法默認狀況下是public.一個類能夠實現多個接口。
你所知道的集合類都有哪些?主要方法:
最經常使用的集合類是 List 和 Map。 List 的具體實現包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構建、存儲和操做任何類型對象的元素列表。 List 適用於按數值索引訪問元素的情形。 Map 提供了一個更通用的元素存儲方法。 Map 集合類用於存儲元素對(稱做「鍵」和「值」),其中每一個鍵映射到一個值。
JSP的內置對象及方法:
request表示HttpServletRequest對象。它包含了有關瀏覽器請求的信息,而且提供了幾個用於獲取cookie, header, 和session數據的有用的方法,response表示HttpServletResponse對象,並提供了幾個用於設置送回 瀏覽器的響應的方法(如cookies,頭信息等).
out對象是javax.jsp.JspWriter的一個實例,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。 pageContext表示一個javax.servlet.jsp.PageContext對象。它是用於方便存取各類範圍的名字空間、servlet相關的對象的API,而且包裝了通用的servlet相關功能的方法。
session表示一個請求的javax.servlet.http.HttpSession對象。Session能夠存貯用戶的狀態信息 applicaton 表示一個javax.servle.ServletContext對象。這有助於查找有關servlet引擎和servlet環境的信息 config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。 page表示從該頁面產生的一個servlet實例。
線程的基本概念、線程的基本狀態以及狀態之間的關係:
線程指在程序執行過程當中,可以執行程序代碼的一個執行單位,每一個程序至少都有一個線程,也就是程序自己。Java中的線程有四種狀態分別是:運行、就緒、掛起、結束。
JSP的經常使用指令:
<%@page language=」java」 contenType=」text/html;charset=gb2312」 session=」true」 buffer=」64kb」 autoFlush=」true」 isThreadSafe=」true」 info=」text」 errorPage=」error.jsp」 isErrorPage=」true」 isELIgnored=」true」 pageEncoding=」gb2312」 import=」java.sql.*」%>
isErrorPage(是否能使用Exception對象),isELIgnored(是否忽略表達式) <%@include file=」filename」%><%@taglib prefix=」c」uri=」http://……」%>
四種會話跟蹤技術:
cookie,url重寫,session,隱藏域。
簡述邏輯操做(&,|,^)與條件操做(&&,||)的區別:
區別主要答兩點:a.條件操做只能操做布爾型的,而邏輯操做不只能夠操做布爾型,並且能夠操做數值型b.邏輯操做不會產生短路。
Request對象的主要方法:
setAttribute(String name,Object):設置名字爲name的request的參數值
getAttribute(String name):返回由name指定的屬性值
getAttributeNames():返回request對象全部屬性的名字集合,結果是一個枚舉的實例
getCookies():返回客戶端的全部Cookie對象,結果是一個Cookie數組
getCharacterEncoding():返回請求中的字符編碼方式
getContentLength():返回請求的Body的長度
getHeader(String name):得到HTTP協議定義的文件頭信息
getHeaders(String name):返回指定名字的request Header的全部值,結果是一個枚舉的實例
getHeaderNames():返回因此request Header的名字,結果是一個枚舉的實例
getInputStream():返回請求的輸入流,用於得到請求中的數據
getMethod():得到客戶端向服務器端傳送數據的方法
getParameter(String name):得到客戶端傳送給服務器端的有name指定的參數值
getParameterNames():得到客戶端傳送給服務器端的全部參數的名字,結果是一個枚舉的實例
getParameterValues(String name):得到有name指定的參數的全部值
getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱
getQueryString():得到查詢字符串
getRequestURI():獲取發出請求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的名字
getSession([Boolean create]):返回和請求相關Session
getServerName():獲取服務器的名字
getServletPath():獲取客戶端所請求的腳本文件的路徑
getServerPort():獲取服務器的端口號
removeAttribute(String name):刪除請求中的一個屬性
J2EE是技術仍是平臺仍是框架:
J2EE自己是一個標準,一個爲企業分佈式應用的開發提供的標準平臺。
J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術。
編寫 java文件的注意事項:
在記事本中編寫java文件,在保存時必定要把文件名和擴展名用雙引號括起來,不然將默認保存爲文本文件,若是要保存的java 文件名爲Program1.java,則在保存時在文件名文本框中必定要輸入」Program1.java」。
如何編譯java程序:
單擊開始|運行命令,在命令行上輸入cmd,按回車鍵(在 window98中輸入command,按回車鍵),便可打開一個命令窗口,將目錄轉換到編寫java源程序所在的目錄,輸入javac filename.java
如何執行java程序:
一樣在命令窗口中輸入java filename。
簡述synchronized和java.util.concurrent.locks.Lock的異同:
主要相同點:Lock能完成synchronized所實現的全部功能主要不一樣點:Lock有比synchronized更精確的線程語義和更好的性能。synchronized會自動釋放鎖,而Lock必定要求程序員手工釋放,而且必須在finally從句中釋放。
EJB的角色和三個對象:
一個完整的基於EJB的分佈式計算結構由六個角色組成,這六個角色能夠由不一樣的開發商提供,每一個角色所做的工做必須遵循Sun公司提供的EJB規範,以保證彼此之間的兼容性。這六個角色分別是EJB組件開發者(Enterprise Bean Provider) 、應用組合者(Application Assembler)、部署者(Deployer)、EJB 服務器提供者(EJB Server Provider)、EJB 容器提供者(EJB Container Provider)、系統管理員(System Administrator)三個對象是Remote(Local)接口、Home(LocalHome)接口,Bean類
EJB容器提供的服務:
主要提供聲明週期管理、代碼產生、持續性管理、安全、事務管理、鎖和併發行管理等服務。
EJB規範規定EJB中禁止的操做有哪些:
remote接口和home接口主要做用:
remote接口定義了業務方法,用於EJB客戶端調用業務方法。home接口是EJB工廠用於建立和移除查找EJB實例
bean 實例的生命週期對於:
Stateless Session Bean、Entity Bean、Message Driven Bean通常存在緩衝池管理,而對於Entity Bean和Statefull Session Bean存在Cache管理,一般包含建立實例,設置上下文、建立EJB Object(create)、業務方法調用、remove等過程,對於存在緩衝池管理的Bean,在create以後實例並不從內存清除,而是採用緩衝池調度機制不斷重用實例,而對於存在Cache管理的Bean則經過激活和去激活機制保持Bean的狀態並限制內存中實例數量。
EJB的激活機制:
以Stateful Session Bean 爲例:其Cache大小決定了內存中能夠同時存在的Bean實例的數量,根據MRU或NRU算法,實例在激活和去激活狀態之間遷移,激活機制是當客戶端調用某個EJB實例業務方法時,若是對應EJB Object發現本身沒有綁定對應的Bean實例則從其去激活Bean存儲中(經過序列化機制存儲實例)回覆(激活)此實例。狀態變遷前會調用對應的ejbActive和ejbPassivate方法。
EJB的幾種類型:
會話(Session)Bean ,實體(Entity)Bean 消息驅動的(Message Driven)Bean ;
會話Bean又可分爲有狀態(Stateful)和無狀態(Stateless)兩種;
實體Bean可分爲Bean管理的持續性(BMP)和容器管理的持續性(CMP)兩種
如何給weblogic指定大小的內存:
在啓動Weblogic的腳本中(位於所在Domian對應服務器目錄下的startServerName),增長set MEM_ARGS=-Xms32m -Xmx200m,能夠調整最小內存爲32M,最大200M
如何設定的weblogic的熱啓動模式(開發模式)與產品發佈模式:
能夠在管理控制檯中修改對應服務器的啓動模式爲開發或產品模式之一。或者修改服務的啓動文件或者commenv文件,增長set PRODUCTION_MODE=true。
如何啓動時不需輸入用戶名與密碼:
修改服務啓動文件,增長 WLS_USER和WLS_PW項。也能夠在boot.properties文件中增長加密過的用戶名和密碼.
在weblogic管理制臺中對一個應用域(或者說是一個網站,Domain)進行jms及ejb或鏈接池等相關信息進行配置後,實際保存在什麼文件中?保存在此Domain的config.xml文件中,它是服務器的核心配置文件。
說說weblogic中一個Domain的缺省目錄結構?好比要將一個簡單的helloWorld.jsp放入何目錄下,然的在瀏覽器上就可打入http://主機:端口號//helloword.jsp就能夠看到運行結果了? 又好比這其中用到了一個本身寫的javaBean該如何辦:
Domain目錄\服務器目錄\applications,將應用目錄放在此目錄下將能夠做爲應用訪問,若是是Web應用,應用目錄須要知足Web應用目錄要求,jsp文件能夠直接放在應用目錄中,Javabean須要放在應用目錄的WEB-INF目錄的classes目錄中,設置服務器的缺省應用將能夠實如今瀏覽器上無需輸入應用名。
在weblogic中發佈ejb需涉及到哪些配置文件:
不一樣類型的EJB涉及的配置文件不一樣,都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP實體Bean通常還須要weblogic-cmp-rdbms-jar.xml
如何在weblogic中進行ssl配置與客戶端的認證配置或說說j2ee(標準)進行ssl的配置:
缺省安裝中使用DemoIdentity.jks和DemoTrust.jks KeyStore實現SSL,須要配置服務器使用Enable SSL,配置其端口,在產品模式下須要從CA獲取私有密鑰和數字證書,建立identity和trust keystore,裝載得到的密鑰和數字證書。能夠配置此SSL鏈接是單向仍是雙向的。
如何查看在weblogic中已經發布的EJB:
能夠使用管理控制檯,在它的Deployment中能夠查看全部已發佈的EJB
CORBA是什麼?用途是什麼:
CORBA 標準是公共對象請求代理結構(Common Object Request Broker Architecture),由對象管理組織 (Object Management Group,縮寫爲 OMG)標準化。它的組成是接口定義語言(IDL), 語言綁定(binding:也譯爲聯編)和容許應用程序間互操做的協議。 其目的爲:用不一樣的程序設計語言書寫在不一樣的進程中運行,爲不一樣的操做系統開發。
說說你所熟悉或據說過的j2ee中的幾種經常使用模式?及對設計模式的一些見解:
Session Facade Pattern:使用SessionBean訪問EntityBean;Message Facade Pattern:實現異步調用;EJB Command Pattern:使用Command JavaBeans取代SessionBean,實現輕量級訪問;Data Transfer Object Factory:經過DTO Factory簡化EntityBean數據提供特性;Generic Attribute Access:經過AttibuteAccess接口簡化EntityBean數據提供特性;Business Interface:經過遠程(本地)接口和Bean類實現相同接口規範業務邏輯一致性;EJB架構的設計好壞將直接影響系統的性能、可擴展性、可維護性、組件可重用性及開發效率。項目越複雜,項目隊伍越龐大則越能體現良好設計的重要性。
說說在weblogic中開發消息Bean時的persistent與non-persisten的差異:
persistent方式的MDB能夠保證消息傳遞的可靠性,也就是若是EJB容器出現問題而JMS服務器依然會將消息在此MDB可用的時候發送過來,而non-persistent方式的消息將被丟棄。
經常使用的設計模式?說明工廠模式:
Java中的23種設計模式:Factory(工廠模式),Builder(建造模式), Factory Method(工廠方法模式),Prototype(原始模型模式),Singleton(單例模式), Facade(門面模式),Adapter(適配器模式), Bridge(橋樑模式), Composite(合成模式),Decorator(裝飾模式), Flyweight(享元模式), Proxy(代理模式),Command(命令模式), Interpreter(解釋器模式), Visitor(訪問者模式),Iterator(迭代子模式), Mediator(調停者模式), Memento(備忘錄模式),Observer(觀察者模式),State(狀態模式),Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式)。
工廠模式:工廠模式是一種常常被使用到的模式,根據工廠模式實現的類能夠根據提供的數據生成一組類中某一個類的實例,一般這一組類有一個公共的抽象父類而且實現了相同的方法,可是這些方法針對不一樣的數據進行了不一樣的操做。首先須要定義一個基類,該類的子類經過不一樣的方法實現了基類中的方法。而後須要定義一個工廠類,工廠類能夠根據條件生成不一樣的子類實例。當獲得子類的實例後,開發人員能夠調用基類中的方法而沒必要考慮到底返回的是哪個子類的實例。
請對如下在J2EE中經常使用的名詞進行解釋(或簡單描述):
web容器:給處於其中的應用程序組件(JSP,SERVLET)提供一個環境,使JSP,SERVLET直接更容器中的環境變量接口交互,沒必要關注其它系統問題。主要有WEB服務器來實現。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴格遵照J2EE規範中的WEB APPLICATION 標準。咱們把遵照以上標準的WEB服務器就叫作J2EE中的WEB容器。EJB容器:Enterprise java bean 容器。更具備行業領域特點。他提供給運行在其中的組件EJB各類管理功能。只要知足J2EE規範的EJB放入該容器,立刻就會被容器進行高效率的管理。而且能夠經過現成的接口來得到系統級別的服務。例如郵件服務、事務管理。JNDI:(Java Naming & Directory Interface)JAVA命名目錄服務。主要提供的功能是:提供一個目錄系統,讓其它各地的應用程序在其上面留下本身的索引,從而知足快速查找和定位分佈式應用程序的功能。JMS:(Java Message Service)JAVA消息服務。主要實現各個應用程序之間的通信。包括點對點和廣播。JTA:(Java Transaction API)JAVA事務服務。提供各類分佈式事務服務。應用程序只需調用其提供的接口便可。JAF:(Java Action FrameWork)JAVA安全認證框架。提供一些安全控制方面的框架。讓開發者經過各類部署和自定義實現本身的個性安全控制策略。RMI/IIOP:(Remote Method Invocation /internet對象請求中介協議)他們主要用於經過遠程調用服務。例如,遠程有一臺計算機上運行一個程序,它提供股票分析服務,咱們能夠在本地計算機上實現對其直接調用。固然這是要經過必定的規範才能在異構的系統之間進行通訊。RMI是JAVA特有的。
一個「.java」源文件中是否能夠包括多個類(不是內部類)?有什麼限制:
能夠。必須只有一個類名與文件名相同。
MVC的各個部分都有那些技術來實現?如何實現:
MVC是Model-View-Controller的簡寫。"Model" 表明的是應用的業務邏輯(經過JavaBean,EJB組件實現), "View" 是應用的表示面(由JSP頁面產生),"Controller" 是提供應用的處理過程控制(通常是一個Servlet),經過這種設計模型把應用邏輯,處理過程和顯示邏輯分紅不一樣的組件實現。這些組件能夠進行交互和重用。
java中有幾種方法能夠實現一個線程?用什麼關鍵字修飾同步方法? stop()和suspend()方法爲什麼不推薦使用:
有兩種實現方法,分別是繼承Thread類與實現Runnable接口用synchronized關鍵字修飾同步方法反對使用stop(),是由於它不安全。它會解除由線程獲取的全部鎖定,並且若是對象處於一種不連貫狀態,那麼其餘線程能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在。suspend()方法容易發生死鎖。調用suspend()的時候,目標線程會停下來,但卻仍然持有在這以前得到的鎖定。此時,其餘任何線程都不能訪問鎖定的資源,除非被「掛起」的線程恢復運行。對任何線程來講,若是它們想恢復目標線程,同時又試圖使用任何一個鎖定的資源,就會形成死鎖。因此不該該使用suspend(),而應在本身的Thread類中置入一個標誌,指出線程應該活動仍是掛起。若標誌指出線程應該掛起,便用wait()命其進入等待狀態。若標誌指出線程應當恢復,則用一個notify()從新啓動線程。
java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類:
字節流,字符流。字節流繼承於InputStream \ OutputStream,字符流繼承於InputStreamReader \ OutputStreamWriter。在java.io包中還有許多其餘的流,主要是爲了提升性能和使用方便。
java中會存在內存泄漏嗎,請簡單描述:
會。如:int i,i2; return (i-i2); //when i爲足夠大的正數,i2爲足夠大的負數。結果會形成溢位,致使錯誤。
java中實現多態的機制是什麼:
方法的重寫Overriding和重載Overloading是Java多態性的不一樣表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。
垃圾回收器的基本原理是什麼?垃圾回收器能夠立刻回收內存嗎?有什麼辦法主動通知虛擬機進行垃圾回收:
對於GC來講,當程序員建立對象時,GC就開始監控這個對象的地址、大小以及使用狀況。一般,GC採用有向圖的方式記錄和管理堆(heap)中的全部對象。經過這種方式肯定哪些對象是"可達的",哪些對象是"不可達的"。當GC肯定一些對象爲"不可達"時,GC就有責任回收這些內存空間。能夠。程序員能夠手動執行System.gc(),通知GC運行,可是Java語言規範並不保證GC必定會執行。
靜態變量和實例變量的區別:
static i = 10; //靜態變量爲全部該類對象所共享,一改變會影響全部; class A a; a.i =10;//實例變量改變之影響這一個對象。
什麼是java序列化,如何實現java序列化:
序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。能夠對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。序列化的實現:將須要被序列化的類實現Serializable接口,該接口沒有須要實現的方法,implements Serializable只是爲了標註該對象是可被序列化的,而後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就能夠將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。
是否能夠從一個static方法內部發出對非static方法的調用:
不能夠,若是其中包含對象的method();不能保證對象初始化.
寫clone()方法時,一般都有一行代碼,是什麼:
Clone 有缺省行爲,super.clone();他負責產生正確大小的空間,並逐位複製。
在JAVA中,如何跳出當前的多重嵌套循環:
用break; return 方法。
List、Map、Set三個接口,存取元素時,各有什麼特色:
List 以特定次序來持有元素,可有重複元素。Set 沒法擁有重複元素,內部排序。Map 保存key-value值,value可多值。
J2EE是什麼:
J2EE是Sun公司提出的多層(multi-diered),分佈式(distributed),基於組件(component-base)的企業級應用模型(enterpriese application model).在這樣的一個應用系統中,可按照功能劃分爲不一樣的組件,這些組件又可在不一樣計算機上,而且處於相應的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業信息系統(EIS)層。
UML方面:
標準建模語言UML。用例圖,靜態圖(包括類圖、對象圖和包圖),行爲圖,交互圖(順序圖,合做圖),實現圖。
說出一些經常使用的類,包,接口,請各舉5個經常使用的類:
經常使用的類:BufferedReader BufferedWriter FileReader FileWirter String Integer;
經常使用的包:java.lang java.awt java.io java.util java.sql;
經常使用的接口:Remote List Map Document NodeList
開發中都用到了那些設計模式?用在什麼場合:
每一個模式都描述了一個在咱們的環境中不斷出現的問題,而後描述了該問題的解決方案的核心。經過這種方式,你能夠無數次地使用那些已有的解決方案,無需在重複相同的工做。主要用到了MVC的設計模式。用來開發JSP/Servlet或者J2EE的相關應用。簡單工廠模式等。
jsp有哪些動做?做用分別是什麼:
JSP共有如下6種基本動做:
jsp:include:在頁面被請求的時候引入一個文件。
jsp:useBean:尋找或者實例化一個JavaBean。
jsp:setProperty:設置JavaBean的屬性。
jsp:getProperty:輸出某個JavaBean的屬性。
jsp:forward:把請求轉到一個新的頁面。
jsp:plugin:根據瀏覽器類型爲Java插件生成OBJECT或EMBED標記。
Anonymous Inner Class (匿名內部類) 是否能夠extends(繼承)其它類,是否能夠implements(實現)interface(接口):
能夠繼承其餘類或完成其餘接口,在swing編程中經常使用此方式。
應用服務器與WEB SERVER的區別:
應用服務器:Weblogic、Tomcat、Jboss; WEB SERVER:IIS、 Apache
BS與CS的聯繫與區別:
C/S是Client/Server的縮寫。服務器一般採用高性能的PC、工做站或小型機,並採用大型數據庫系統,如Oracle、Sybase、Informix或 SQL Server。客戶端須要安裝專用的客戶端軟件。B/S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器(Browser),如Netscape Navigator或Internet Explorer,服務器安裝Oracle、Sybase、Informix或 SQL Server等數據庫。在這種結構下,用戶界面徹底經過WWW瀏覽器實現,一部分事務邏輯在前端實現,可是主要事務邏輯在服務器端實現。瀏覽器經過Web Server 同數據庫進行數據交互。
C/S 與 B/S 區別:
1.硬件環境不一樣: C/S 通常創建在專用的網絡上, 小範圍裏的網絡環境, 局域網之間再經過專門服務器提供鏈接和數據交換服務; B/S 創建在廣域網之上的, 沒必要是專門的網絡硬件環境,例與電話上網, 租用設備. 信息本身管理. 有比C/S更強的適應範圍, 通常只要有操做系統和瀏覽器就行
2.對安全要求不一樣 :C/S 通常面向相對固定的用戶羣, 對信息安全的控制能力很強. 通常高度機密的信息系統採用C/S 結構適宜. 能夠經過B/S發佈部分可公開信息.B/S 創建在廣域網之上, 對安全的控制能力相對弱, 可能面向不可知的用戶。
3.對程序架構不一樣 : C/S 程序能夠更加註重流程, 能夠對權限多層次校驗, 對系統運行速度能夠較少考慮. B/S 對安全以及訪問速度的多重的考慮, 創建在須要更加優化的基礎之上. 比C/S有更高的要求 B/S結構的程序架構是發展的趨勢, 從MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持網絡的構件搭建的系統. SUN 和IBM推的JavaBean 構件技術等,使 B/S更加成熟.
4.軟件重用不一樣: C/S 程序能夠不可避免的總體性考慮, 構件的重用性不如在B/S要求下的構件的重用性好. B/S 對的多重結構,要求構件相對獨立的功能. 可以相對較好的重用.就入買來的餐桌能夠再利用,而不是作在牆上的石頭桌子 。
5.系統維護不一樣 :C/S 程序因爲總體性, 必須總體考察, 處理出現的問題以及系統升級. 升級難. 多是再作一個全新的系統, B/S 構件組成,方面構件個別的更換,實現系統的無縫升級. 系統維護開銷減到最小.用戶從網上本身下載安裝就能夠實現升級.
6.處理問題不一樣 :C/S 程序能夠處理用戶面固定, 而且在相同區域, 安全要求高需求, 與操做系統相關. 應該都是相同的系統,B/S 創建在廣域網上, 面向不一樣的用戶羣, 分散地域, 這是C/S沒法做到的. 與操做系統平臺關係最小.
7.用戶接口不一樣: C/S 可能是創建的Window平臺上,表現方法有限,對程序員廣泛要求較高,B/S 創建在瀏覽器上, 有更加豐富和生動的表現方式與用戶交流. 而且大部分難度減低,減低開發成本.
8.信息流不一樣 : C/S 程序通常是典型的中央集權的機械式處理, 交互性相對低,B/S 信息流向可變化, B-B B-C B-G等信息、流向的變化, 更像交易中心。
EJB2.0有哪些內容?分別用在什麼場合? EJB2.0和EJB1.1的區別:
答:規範內容包括Bean提供者,應用程序裝配者,EJB容器,EJB配置工具,EJB服務提供者,系統管理員。這裏面,EJB容器是EJB之因此可以運行的核心。EJB容器管理着EJB的建立,撤消,激活,去活,與數據庫的鏈接等等重要的核心工做。JSP,Servlet,EJB,JNDI,JDBC,JMS.....
CORBA是什麼?用途是什麼:
答:CORBA 標準是公共對象請求代理結構(Common Object Request Broker Architecture),由對象管理組織 (Object Management Group,縮寫爲 OMG)標準化。它的組成是接口定義語言(IDL), 語言綁定(binding:也譯爲聯編)和容許應用程序間互操做的協議。 其目的爲: 用不一樣的程序設計語言書寫 在不一樣的進程中運行 爲不一樣的操做系統開發
應該對oracle有所瞭解,對一些數據庫的名詞,應該知道詞的解釋:
分頁一 前提 但願最新的紀錄在開頭給你的表創建查詢: 表:mytable
查詢:create or replace view as mytable_view from mytable order by id desc 其中,最好使用序列號create sequence mytable_sequence 來自動增長你的紀錄id號 二 源程序 <%String sConn="你的鏈接"
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn=DriverManager.getConnection(sConn,"你的用戶名","密碼");
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
Statement stmtcount=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs=stmt.executeQuery("select * from mytable_view"); String sqlcount="select count(*) from mytable_view"; ResultSet rscount=stmtcount.executeQuery(sqlcount); int pageSize=你的每頁顯示紀錄數; int rowCount=0; //總的記錄數 while (rscount int pageCount; //總的頁數 int currPage; //當前頁數
String strPage; strPage=request.getParameter("page"); if (strPage==null){ currPage=1; } else{
currPage=Integer.parseInt(strPage); if (currPage<1) currPage=1; } pageCount=(rowCount+pageSize-1)/pageSize; if (currPage>pageCount) currPage=pageCount; int thepage=(currPage-1)*pageSize;
int n=0; rs.absolute(thepage+1); while (n<(pageSize)&&!rs %> <%rs.close(); rscount.close(); stmt.close(); stmtcount.close(); conn.close(); %> //下面是 第幾頁等
<form name="sinfo" method="post" action="sbinfo_index.jsp?condition=<%=condition%>&type=<%=type%>" onSubmit="return testform(this)"> 第<%=currPage%>頁 共<%=pageCount%>頁 共<%=rowCount%>條
<%if(currPage>1){%><a href="sbinfo_index.jsp?condition=<%=condition%>&type=<%=type%>">首頁</a><%}%>
<%if(currPage>1){%><a href="sbinfo_index.jsp?page=<%=currPage-1%>&condition=<%=condition%>&type=<%=type%>">上一頁</a><%}%> <%if(currPage<pageCount){%><a href="sbinfo_index.jsp?page=<%=currPage+1%>&condition=<%=condition%>&type=<%=type%>">下一頁</a><%}%>
<%if(pageCount>1){%><a href="sbinfo_index.jsp?page=<%=pageCount%>&condition=<%=condition%>&type=<%=type%>">尾頁</a><%}%> 跳到<input type="text" name="page" size="4" style="font-size:9px">頁
<input type="submit" name="submit" size="4" value="GO" style="font-size:9px"> </form> 但願你們喜歡!!!!!!
Java 的通訊編程,編程題(或問答),用JAVA SOCKET編程,讀服務器幾個字符,再寫入本地顯示:
答:Server端程序: package test; import java.net.*; import java.io.*; public class Server { private ServerSocket ss; private Socket socket;
private BufferedReader in; private PrintWriter out; public Server() { try { ss=new ServerSocket(10000); while(true) { socket = ss.accept();
String RemoteIP = socket.getInetAddress().getHostAddress(); String RemotePort = ":"+socket.getLocalPort(); System.out.println("A client come in!IP:"+RemoteIP+RemotePort); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = in.readLine(); System.out.println("Cleint send is :" + line); out = new PrintWriter(socket.getOutputStream(),true); out.println("Your Message Received!"); out.close(); in.close(); socket.close(); } }catch (IOException e) { out.println("wrong"); } } public static void main(String[] args) { new Server(); } }
Client端程序: package test; import java.io.*; import java.net.*; public class Client { Socket socket; BufferedReader in; PrintWriter out; public Client() { try { System.out.println("Try to Connect to 127.0.0.1:10000"); socket = new Socket("127.0.0.1",10000); System.out.println("The Server Connected!"); System.out.println("Please enter some Character:"); BufferedReader line = new BufferedReader(new InputStreamReader(System.in)); out = new PrintWriter(socket.getOutputStream(),true);
Out
文件讀寫的基本類:
答:File Reader 類和FileWriter類分別繼承自Reader類和Writer類。FileReader類用於讀取文件,File Writer類用於將數據寫入文件,這兩各種在使用前,都必需要調用其構造方法建立相應的對象,而後調用相應的read()或 write()方法。
託普集團程序員面試試1、選擇題(每題1分,共20分)
1. 下列那種語言是面向對象的(C)
A. C B. PASCAL C. C++ D. FORTRAN77
2.在 Windows9x 下,能夠進入 MS-D0S 方式。當在 DOS 提示符下鍵入 ( B ) 命令後,系統將退出 MS-DOS方式,返回到 WIndows 方式。A. CLOSE B. EXIT C. QUIT D. RETURN
3.下面哪些是面向對象的基本特性:( ABC)A 多態 B 繼承 C 封裝 D 接口
4.在C++中常常要進行異常處理,下面哪些是異常處理經常使用到的關鍵詞:(ABC)
A try B catch C throw D break E contiue
5.數據庫技術中的「髒數據',是指(C)的數據。A.錯誤B.回返C.未提交D.未提交的隨後又被撤消
6.TCP/IP是一種(A,B)A.標準 B.協議 C.語言 D.算法
7. 下面有關計算機操做系統的敘述中,不正確的是(B )A 操做系統屬於系統軟件 B 操做系統只負責管理內存儲器,而無論理外存儲器 C UNIX 是一種操做系統 D 計算機的處理器、內存等硬件資源也由操做系統管理
8.微機上操做系統的做用是( D) A 解釋執行源程序 B 編譯源程序
C 進行編碼轉換 D 控制和管理系統資源
9.下列存儲器中存取速度最快的是( A)A 內存 B 硬盤 C 光盤 D 軟盤
10.在計算機中,—個字節是由多少個二進制位組成的(B ) A. 4 B. 8 C. 16 D. 24
11. 存儲16×16點陣的一個漢字信息,須要的字節數爲( A )A 32 B 64 C 128 D 256
12. 如下選項中合法的字符常量是(BC)A."B" B. '\010' C. 68 D. D
13. 假定x和y爲double型,則表達式x=2,y=x+3/2的值是(D)A. 3.500000 B. 3 C. 2.000000 D. 3.000000
14. 如下合法的賦值語句是(BCD)//In C++ ,choice D also is correct, but in C language, D is wrong.
A. x=y=100 B. d--; C. x+y; D. c=int(a+b);
15. 設正x、y均爲整型變量,且x=10 y=3,則如下語句pprintf("%d,%d\n",x--,--y); 的輸出結果是(D)
A.10,3 B. 9,3 C. 9,2 D.10,2
16. x、y、z被定義爲int型變量,若從鍵盤給x、y、z輸入數據,正確的輸入語句是(B)
A .INPUT x、y、z; B. scanf("%d%d%d",&x,&y,&z);C. scanf("%d%d%d",x,y,z); D. read("%d%d%d",&x,&y,&z);
17.如下數組定義中不正確的是(D)A) int a[2][3]; B) int b[][3]={0,1,2,3};C) int c[100][100]={0}; D) int d[3][]={{1,2},{1,2,3},{1,2,3,4}};
18. 如下程序的輸出結果是(A)main(){ int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};
printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0];
}A) 0650 B) 1470 C) 5430 D) 輸出值不定
19 如下程序的輸出結果是(B)main(){char st[20]= "hello\0\t\\\";printf(%d %d \n",strlen(st),sizeof(st));
}A) 9 9 B) 5 20 C) 13 20 D) 20 20
20. 當調用Windows API函數InvalidateRect,將會產生什麼消息(A)A:WM_PAINT B:WM_CREATE C:WM_NCHITTEST D:WM_SETFOCUS
2、填空題(每題3分,共30分)
1.請列舉當前一些當前流行的數據庫引擎,SQL SERVER,ORACLE,BDE,Microsoft Jet。
2. 爲了將當前盤當前目錄中的全部文本文件(擴展名爲.TXT)的內容打印輸出,正確的單條DOS命令爲COPY *.TXT PRN。
3. 計算機網絡分爲局域網和廣域網,因特網屬於廣域網。
4. 設y是int型變量,請寫出判斷y爲奇效的關係表達y%2!=0。
5. 設有如下程序:main(){ int n1,n2;scanf("%d",&n2);while(n2!=0){ n1=n2%10;n2=n2/10;printf("%d",n1);}}
程序運行後,若是從鍵盤上輸入1298;則輸出結果爲8921。
6.如下程序運行後的輸出結果是:9876 876
main(){ char s[ ]="9876",*p;for ( p=s ; p<s+2 ; p++) printf("%s\n", p);}
7.如下函數的功能是:求x的y次方,請填空。double fun( double x, int y){ int i;double z;for(i=1, z=x; i<y;i++) z=z* x ;return z;}
8.如下程序段打開文件後,先利用fseek函數將文件位置指針定位在文件末尾,而後調用ftell函數返回當前文件位置指針的具體位置,從而肯定文件長度,請填空。FILE *myf; long f1;myf= fopen ("test.t","rb");
fseek(myf,0,SEEK_END); f1=ftell(myf);fclose(myf);printf("%d\n",f1);
9. 如下程序輸出的最後一個值是120。
int ff(int n){ static int f=l;f=f*n;return f;}main(){ int i;for(I=1;I<=5;I++ printf("%d\n",ff(i));)
10. 如下程序運行後的輸出結果是52 main(){ int i=10, j=0;do{ j=j+i; i--;while(i>2);printf("%d\n",j);}
3、判斷題(每題2分,共20分)
1:動態鏈結庫不能靜態調用。 錯誤
2:UDP是面向無鏈接的網絡鏈接 正確
3:ASP是一種數據庫引擎 錯誤
4:隊列是先進後出。 錯誤
5:Weblogic是分佈式應用服務器。 正確
6:TCP,UDP都是傳輸層的協議。 正確
7: 兩個線程不能共存於同一地址空間 錯誤
8: JAVA是一種跨平臺的開發工具 正確
9.在WINDOWS操做系統中對外設是以文件的方式進行管理 正確
10. 虛擬內存實際是建立在硬盤上的 正確
4、問答題(每題10分,共30分)
1. 寫出從數據庫表Custom中查詢No、Name、Num一、Num2並將Name以姓名顯示、計算出的和以總和顯示的SQL。
SELECT No , Name AS ‘姓名’ ,Num1 ,Num2,(Num1+Num2) AS ‘總和’
FROM Custom
2. 何爲「事務處理」,談談你對它的理解
事務處理是指一個單元的工做,這些工做要麼全作,要麼所有不作。做爲一個邏輯單元,必須具有四個屬性:自動性、一致性、獨立性和持久性。自動性是指事務必須是一個自動的單元工做,要麼執行所有數據的修改,要麼所有數據的修改都不執行。一致性是指當事務完成時,必須使全部數據都具備一致的狀態。在關係型數據庫中,全部的規則必須應用到事務的修改上,以便維護全部數據的完整性。全部的內部數據結構,在事務結束以後,必須保證正確。獨立性是指並行事務的修改必須與其餘並行事務的修改相互獨立。一個事務看到的數據要麼是另一個事務修改這些事務以前的狀態,要麼是第二個事務已經修改完成的數據,可是這個事務不能看到正在修改的數據。
3. 經常使用的數據結構有哪些?請枚舉一些。(很多於5個)
鏈表、堆棧、二叉樹、隊列、圖、堆,集合。
4. 什麼是OOP?什麼是類?請對比類和對象實例之間的關係。
OOP是Object_oriented Programming(面向對象編程)的縮寫。這主要是爲了區別於之前的面向過程的程序設計!指的是用對象的觀點來組織與構建系統,它綜合了功能抽象和數據抽象,這樣能夠減小數據之間的耦合性和代碼的出錯概率。使用面向對象編程技術能夠使得軟件開發者按照現實世界裏人們思考問題的模式編寫代碼,可讓軟件開發者更好地利用代碼直接表達現實中存在的對象,將問題空間直接映射到解空間!類:即class 在面向對象的程序設計中,專門用「類」來表示用戶定義的抽象數據類型(user_defined abstract type)。它將具備相同狀態、操做和訪問機制的多個對象進行了抽象。類具備繼承、數據隱藏和多態三種主要特性。利用類的這三種特性能夠更好地表示現實世界中事物。類是同一類對象實例的共性的抽象,對象是類的實例化。對象一般做爲計算機模擬思惟,表示真實世界的抽象,一個對象就像一個軟件模塊,能夠爲用戶提供一系列的服務---能夠改變對象的狀態、測試、傳遞消息等。類定義了對象的實現細節或數據結構。類是靜態的,對象是動態的,對象能夠看做是運行中的類。類負責產生對象,能夠將類當成生產對象的工廠(Object factory).
5. 有一組數字(3,10,6,8,98,22),請編程排序(升降序皆可),語言不限,算法不限,但須註明是何種算法。//下面使用簡單的冒泡法進行排序!
#include "iostream.h" template<class type> class CBubble{
private: type *pArray; int size;public:CBubble(type a[],int sizeArray);void sort();void display();};
template <class type> CBubble<type>::CBubble(type a[],int sizeArray)
{ pArray=a; size=sizeArray/sizeof(type);}
template<class type>void CBubble<type>::sort(){ type temp; for(int i=0;i<size-1;i++) for(int j=0;j<size-1-i;j++) if(pArray[j]>pArray[j+1])//升序{temp=pArray[j+1];pArray[j+1]=pArray[j];pArray[j]=temp;}}
template<class type>void CBubble<type>::display(){for(int i=0;i<size;i++)cout<<pArray[i]<<endl;}
void main(void){int a[]={3,10,6,8,98,22};CBubble<int> intData(a,sizeof(a));cout<<"The original data are :"<<endl;intData.display();intData.sort();cout<<"After sorting ,the data are:"<<endl;intData.display();
}
http://blog.csdn.net/hbuzhang/archive/2004/12/07/207202.aspx //書
connection connconn.setAuto(false)//表示手動提交conn.commit// 提交conn.rollback();//事務回滾
-內聯接
use pubsselect a.au_fname, a.au_lname, p.pub_name from authors a inner join publishers p on a.city = p.city order by p.pub_name asc, a.au_lname asc, a.au_fname asc
--左外聯接
use pubs select a.au_fname, a.au_lname, p.pub_name from authors a left join publishers p
on a.city = p.city order by p.pub_name asc, a.au_lname asc, a.au_fname asc
-使用子查詢
USE pubs GO SELECT distinct pub_name FROM publishers WHERE pub_id IN (SELECT pub_idFROM titlesWHERE type = 'business') GO
--若是平均價格少於 $30,WHILE 循環就將價格加倍,而後選擇最高價。
--若是最高價少於或等於 $50,WHILE 循環從新啓動並再次將價格加倍。
--該循環不斷地將價格加倍直到最高價格超過 $50
USE pubs GO
WHILE (SELECT AVG(price) FROM titles) < $30
BEGIN
UPDATE titles
SET price = price * 2
SELECT MAX(price) FROM titles
IF (SELECT MAX(price) FROM titles) > $50
BREAK
ELSE
CONTINUE
END
---若是平均價格少於 $30,WHILE 循環就將價格加倍,而後選擇最高價。
--若是最高價少於或等於 $50,WHILE 循環從新啓動並再次將價格加倍。
--該循環不斷地將價格加倍直到最高價格超過 $50
USE pubs
GO
WHILE (SELECT AVG(price) FROM titles) < $30
BEGIN
UPDATE titles
SET price = price * 2
SELECT MAX(price) FROM titles
IF (SELECT MAX(price) FROM titles) > $50
BREAK
ELSE
CONTINUE
END
CREATE PROCEDURE au_info
@lastname varchar(40),
@firstname varchar(20)
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id = ta.au_id INNER JOIN titles t
ON t.title_id = ta.title_id INNER JOIN publishers p
ON t.pub_id = p.pub_id
WHERE au_fname = @firstname
AND au_lname = @lastname
GO
EXECUTE au_info 'Dull', 'Ann'--或者
EXECUTE au_info @lastname = 'Dull', @firstname = 'Ann'
--建立存儲過程
CREATE PROCEDURE titles_sum @TITLE varchar(40),@SUM money OUTPUT
AS
SELECT @SUM = SUM(price)
FROM titles
WHERE title LIKE @TITLE
GO
DECLARE @TOTALCOST money
EXECUTE titles_sum 'The%', @TOTALCOST OUTPUT
select @TOTALCOST
go
CREATE PROCEDURE Oakland_authors
AS
SELECT au_fname, au_lname, address, city, zip
FROM authors
WHERE city = 'Oakland'
and state = 'CA'
ORDER BY au_lname, au_fname
GO
--sp_helptext Oakland_authors
ALTER PROCEDURE Oakland_authors
AS
SELECT au_fname, au_lname, address, city, zip
FROM authors
WHERE state = 'CA'
ORDER BY au_lname, au_fname
GO
--sp_helptext Oakland_authors
--提交事務後,全部書籍支付的版稅增長 10%。
begin transaction MyTransaction
update roysched
set royalty = royalty * 1.10
commit transaction MyTransaction
--rollback transaction MyTransaction
select royalty from roysched
--select @@trancount
--1.建立試驗實驗表
create table temptrigger
( id_temp varchar(2) not null primary key,
temp_name varchar(10) null,
temp_age int null)go
insert temptrigger values('01','張三','10')
insert temptrigger values('02','李四','11')
insert temptrigger values('03','王五','12')
insert temptrigger values('04','趙六','11')
select * from temptrigger go
--2.建立insert , update觸發器
create trigger temptrigger_modify
on temptrigger
for insert,update
as
begin
if (select temp_age from inserted) > 15
begin
rollback transaction
print '年齡不能超過15歲!'
end
end
--insert temptrigger values('04','大朋','17')
--insert temptrigger values('05','大朋','17')
--insert temptrigger values('05','大朋','14')
--update temptrigger set temp_age='18' where id_temp = '01'
--update temptrigger set temp_age='9' where id_temp = '01'
-3.建立delete 觸發器:
drop trigger temptrigger_delete
create trigger temptrigger_delete
on temptrigger
for delete
as
begin
print @@rowcount
if @@rowcount > 1
begin
rollback transaction
print '一次刪除記錄不能多於1條'
end
end
--delete from temptrigger
--delete from temptrigger where id_temp='01'
--建立彙集索引create clustered index clindx_titleid on roysched(title_id)--sp_help roysched
--建立非彙集索引create nonclustered index unclindx_titleid on roysched(title_id)--sp_help roysched
--查看索引統計dbcc show_statistics(roysched,titleidind)
--更新索引統計update statistics authors
--重建索引dbcc dbreindex('roysched',unclindx_titleid)
--刪除索引drop index roysched.unclindx_titleid-sp_help roysched
1--建立ssn(社會保險號)的基於varchar的自定義數據類型。
--用於存儲11位社會保險號(999-99-999)的列。該列不能爲null:
use pubs exec sp_addtype ssn , 'varchar(11)' , 'NOT NULL'
--查看建立的數據類型--sp_help ssn
--使用建立的數據類型create table mytable( myid varchar(2) primary key, myssn ssn)
4-刪除建立的數據類型--drop table mytable--exec sp_droptype ssn
•批是包含一個或多個 Transact-SQL 語句的組,從應用程序一次性地發送到 Microsoft SQL Server 執行。批做爲一個總體執行,以GO命令結束。批處理是客戶端做爲一個單元發出的一個或多個 SQL 語句的集合。每一個批處理編譯爲一個執行計劃。
觸發器:
觸發器是在對錶進行插入、更新或刪除操做時自動執行的存儲過程•觸發器一般用於強制業務規則•觸發器能夠確保數據的完整性和一致性
事務:
是用戶定義的一個操做序列,這些操做要麼全作要麼全不作,是一個不可分割的工做單位(構成單一邏輯工做單元的操做集合)若是某一事務成功,則在該事務中進行的全部數據更改均會提交,成爲數據庫中的永久組成部分。
若是事務遇到錯誤且必須取消或回滾,則全部數據更改均被清除
•鎖 :
是在多用戶環境中對數據訪問的限制封鎖就是事務 T 在對某個數據對象(如表、記錄等)操做以前,先向系統發出請求,對其加鎖。加鎖後事務 T 就對該數據對象有了必定的控制,在事務T釋放它的鎖以前,其它的事務不能更新此數據對象。(鎖蘊含的基本概念是用戶須要對錶的排它訪問)•從程序員的角度看:分爲樂觀鎖和悲觀鎖。樂觀鎖:徹底依靠數據庫來管理鎖的工做。悲觀鎖:程序員本身管理數據或對象上的鎖處理。
子查詢:
一個 SELECT 語句嵌套在另外一個 SELECT 語句中。
索引:
是一個數據庫對象,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單,而後根據指定的排序次序排列這些指針 優勢提升查詢執行的速度。 強制實施數據的惟一性。 提升表之間聯接的速度。 缺點 存儲索引要佔用磁盤空間。數據修改須要更長的時間,由於索引也要更新。
•視圖•:
是一種虛擬表,一般是做爲來自一個或多個表 的行或列的子集建立的。•視圖本質上講,就是保存在數據庫中的select查詢•視圖並非數據庫中存儲的數據值的集合。•對最終用戶的好處– 結果更容易理解– 得到數據更容易
•對開發人員的好處– 限制數據檢索更容易– 維護應用程序更方便
存儲過程:
使用一個名稱存儲的預編譯T-SQL語句和流程控制語句的集合•由數據庫開發人員或數據庫管理員編寫
•用來執行管理任務或應用複雜的業務規則 優勢•執行速度更快•首次運行時,進行優化和編譯獲得執行計劃並將該計劃存儲在系統表中,之後直接運行。•實現多個程序共享應用程序邏輯•組件式編程•可以屏蔽數據庫的結構,實現更高的安全性
•減小網絡流通量
數據庫設計和建模必要性:
好的數據庫結構有利於:-節省數據的存儲空間-可以保證數據的完整性-方便進行數據庫應用系統的開發•設計很差的數據庫結構將致使-數據冗餘、存儲空間浪費-內存空間浪費
無論數據庫的大小和複雜程度如何,能夠用下列基本步驟來設計數據庫:
–收集信息–標識對象–設計數據模型–標識每一個對象 存儲的信息類型–標識對象之間的關係
數據模型:
是一種標識實體類型及其實體間聯繫的模型。典型的數據模型由網狀模型、層次模型和關係模型。
什麼是規範化:
從關係數據庫的表中,除去冗餘數據的過程稱爲規範化。精簡數據庫的結構從表中刪除冗餘的列標識全部依賴於其它數據的數據
三級範式:
第一範式的定義: 若是一個表中沒有重複組(即行與列的交叉點上只有一個值,而不是一組值),則這個表屬於第一範式(常記成1NF)。簡而言之:"每一字段只存儲一個值"。例如:職工號,姓名,電話號碼組成一個表(一我的可能有一個辦公室電話 和一個家裏電話號碼)
第二範式的定義:若是一個表屬於1NF,任何屬性只依賴於關鍵字,則這個表屬於第二範式(常記成2NF )。簡而言之:必須先符合1NF的條件,且每一行都能被惟一的識別。
第三範式的定義:將1NF轉換成2NF的方法是添加主鍵。學號,課程名,成績
第三範式的定義:若是一個表屬於2NF,且不包含傳遞依賴性,則這個表是第三範式(常記成3NF)。知足3NF的表中不包含傳遞依賴。簡而言之:沒有一個非關鍵屬性依賴於另外一個非關鍵屬性。學號,課程號,成績,學分學號,姓名,所在系,系名稱,系地址.
什麼是類與對象:
所謂對象就是真實世界中的實體,對象與實體是一一對應的,也就是說現實世界中每個實體都是一個對象,它是一種具體的概念。
類是具有某些共同特徵的實體的集合,它是一種抽象的概念,用程序設計的語言來講,類是一種抽象的數據類型,它是對所具備相同特徵實體的抽象。
屬性與方法:
不一樣對象具備相同特色,就可能抽象爲必定的類,那麼這些特色基本上能夠分爲兩類,一類是描述對象靜態狀態的,就是對象的屬性,在程序設計中,能夠稱之爲變量;另外一類是描述對象的動做,就是對象的方法,在程序設計中咱們稱之爲函數。屬性和方法是一個對象所具有的兩大基本要素,也是咱們後面編程工做的核心。
什麼是封裝:
只要有足夠的方法,就不必直接去操做對象屬性,只要調用這些方法就能夠實現要完成的任務,這種現象稱爲封裝,它經過對象方法對其屬性的操做把對象屬性封裝在一個對象內部,對象與外界打交道所有經過其自身的方法來實現,有效的把對象屬性隱藏在對象內部。
編寫 java文件的注意事項:
在記事本中編寫java文件,在保存時必定要把文件名和擴展名用雙引號括起來,不然將默認保存爲文本文件,若是要保存的java 文件名爲Program1.java,則在保存時在文件名文本框中必定要輸入」Program1.java」。
如何編譯java程序:
單擊開始|運行命令,在命令行上輸入cmd,按回車鍵(在 window98中輸入command,按回車鍵),便可打開一個命令窗口,將目錄轉換到編寫java源程序所在的目錄,輸入javac filename.java
如何執行java程序:
一樣在命令窗口中輸入java filename,
基本數據類型:
Java的數據類型能夠劃分爲4大類:整數,浮點數,字符型,布爾型。其中整數能夠劃分爲:byte,short,int,long.浮點數能夠劃分爲float,double.