??xml version="1.0" encoding="utf-8" standalone="yes"?> ? 从Excel 95?7?000{格式的文g中读取数据; 可以读,但是不能生成公式QQ何类型公式最后的计算值都可以dQ? import java.io.*; 一旦创ZWorkbookQ我们就可以通过它来讉KExcel Sheet(术语Q工作表)。参考下面的代码片段Q? ? WorkbookcL供的Ҏ ? Sheet接口提供的方? 生成新的Excel工作? import java.io.*; 下面是在一个Excel表格中创Z个矩늚单例子: // code run against the jakarta-poi-1.5.0-FINAL-20020506.jar.
Java Excel是一开放源码项目,通过它Java开发h员可以读取Excel文g的内宏V创建新的Excel文g、更新已l存在的Excel文g。用该API非Windows操作pȝ也可以通过UJava应用来处理Excel数据表。因为是使用Java~写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的讉K?现在发布的稳定版本是V2.0Q提供以下功能:
? dExcel公式Q可以读取Excel 97以后的公式)Q?
? 生成Excel数据表(格式为Excel 97Q;
? 支持字体、数字、日期的格式化;
? 支持单元格的阴媄操作Q以及颜色操作;
? 修改已经存在的数据表Q?
? 现在q不支持以下功能Q但不久׃提供了:
? 不能够读取图表信息;
应用CZ
从Excel文gd数据?
Java Excel API既可以从本地文gpȝ的一个文?.xls)Q也可以从输入流中读取Excel数据表。读取Excel数据表的W一步是创徏Workbook(术语Q工作薄)Q下面的代码片段举例说明了应该如何操作:(完整代码见ExcelReading.java)
import jxl.*;
… … … …
try
{
//构徏Workbook对象, 只读Workbook对象
//直接从本地文件创建Workbook
//从输入流创徏Workbook
InputStream is = new FileInputStream(sourcefile);
jxl.Workbook rwb = Workbook.getWorkbook(is);
}
catch (Exception e)
{
e.printStackTrace();
}
//获取W一张Sheet?
Sheet rs = rwb.getSheet(0);
我们既可能通过Sheet的名U来讉K它,也可以通过下标来访问它。如果通过下标来访问的话,要注意的一Ҏ下标?开始,像数组一栗?br />
一旦得CSheetQ我们就可以通过它来讉KExcel Cell(术语Q单元格)。参考下面的代码片段Q?
//获取W一行,W一列的?
Cell c00 = rs.getCell(0, 0);
String strc00 = c00.getContents();
//获取W一行,W二列的?
Cell c10 = rs.getCell(1, 0);
String strc10 = c10.getContents();
//获取W二行,W二列的?
Cell c11 = rs.getCell(1, 1);
String strc11 = c11.getContents();
System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " +
c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " +
c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " +
c11.getType());
如果仅仅是取得Cell的|我们可以方便地通过getContents()ҎQ它可以Q何类型的Cell值都作ؓ一个字W串q回。示例代码中Cell(0, 0)是文本型QCell(1, 0)是数字型QCell(1,1)是日期型Q通过getContents()Q三U类型的q回值都是字W型?
如果有需要知道Cell内容的确切类型,API也提供了一pd的方法。参考下面的代码片段Q?
String strc00 = null;
double strc10 = 0.00;
Date strc11 = null;
Cell c00 = rs.getCell(0, 0);
Cell c10 = rs.getCell(1, 0);
Cell c11 = rs.getCell(1, 1);
if(c00.getType() == CellType.LABEL)
{
LabelCell labelc00 = (LabelCell)c00;
strc00 = labelc00.getString();
}
if(c10.getType() == CellType.NUMBER)
{
NmberCell numc10 = (NumberCell)c10;
strc10 = numc10.getValue();
}
if(c11.getType() == CellType.DATE)
{
DateCell datec11 = (DateCell)c11;
strc11 = datec11.getDate();
}
System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " +
c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " +
c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " +
c11.getType());
在得到Cell对象后,通过getType()Ҏ可以获得该单元格的类型,然后与API提供的基本类型相匚wQ强制{换成相应的类型,最后调用相应的取值方法getXXX()Q就可以得到定cd的倹{API提供了以下基本类型,与Excel的数据格式相对应?br />
每种cd的具体意义,请参见Java Excel API Document?
当你完成对Excel电子表格数据的处理后Q一定要使用close()Ҏ来关闭先前创建的对象Q以释放d数据表的q程中所占用的内存空_在读取大量数据时昑־ؓ重要。参考如下代码片D:
//操作完成Ӟ关闭对象Q释攑֍用的内存I间
rwb.close();
Java Excel API提供了许多访问Excel数据表的ҎQ在q里我只要地介绍几个常用的方法,其它的方法请参考附录中的Java Excel API Document?
1. int getNumberOfSheets()
获得工作薄(WorkbookQ中工作表(SheetQ的个数Q示例:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
int sheets = rwb.getNumberOfSheets();
2. Sheet[] getSheets()
q回工作薄(WorkbookQ中工作表(SheetQ对象数l,CZQ?
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
Sheet[] sheets = rwb.getSheets();
3. String getVersion()
q回正在使用的API的版本号Q好像是没什么太大的作用?
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
String apiVersion = rwb.getVersion();
1. String getName()
获取Sheet的名UͼCZQ?
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
String sheetName = rs.getName();
2. int getColumns()
获取Sheet表中所包含的d敎ͼCZQ?
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
int rsColumns = rs.getColumns();
3. Cell[] getColumn(int column)
获取某一列的所有单元格Q返回的是单元格对象数组Q示例:
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell[] cell = rs.getColumn(0);
4. int getRows()
获取Sheet表中所包含的总行敎ͼCZQ?
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
int rsRows = rs.getRows();
5. Cell[] getRow(int row)
获取某一行的所有单元格Q返回的是单元格对象数组Q示例子Q?
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell[] cell = rs.getRow(0);
6. Cell getCell(int column, int row)
获取指定单元格的对象引用Q需要注意的是它的两个参敎ͼW一个是列数Q第二个是行敎ͼq与通常的行、列l合有些不同?
jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell cell = rs.getCell(0, 0);
下面的代码主要是向大家介l如何生成简单的Excel工作表,在这里单元格的内Ҏ不带M修饰?如:字体Q颜色等{?Q所有的内容都作为字W串写入?完整代码见ExcelWriting.java)
与读取Excel工作表相|首先要用Workbookcȝ工厂Ҏ创徏一个可写入的工作薄(Workbook)对象Q这里要注意的是Q只能通过API提供的工厂方法来创徏WorkbookQ而不能用WritableWorkbook的构造函敎ͼ因ؓcWritableWorkbook的构造函Cؓprotectedcd。示例代码片D如下:
import jxl.*;
import jxl.write.*;
… … … …
try
{
//构徏Workbook对象, 只读Workbook对象
//Method 1Q创建可写入的Excel工作?
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));
//Method 2Q将WritableWorkbook直接写入到输出流
/*
OutputStream os = new FileOutputStream(targetfile);
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os);
*/
}
catch (Exception e)
{
e.printStackTrace();
}
API提供了两U方式来处理可写入的输出,一U是直接生成本地文gQ如果文件名不带全\径的话,~省的文件会定位在当前目录,如果文g名带有全路径的话Q则生成的Excel文g则会定位在相应的目录Q另外一U是Excel对象直接写入到输出流Q例如:用户通过览器来讉KWeb服务器,如果HTTP头设|正的话,览器自动调用客L的Excel应用E序Q来昄动态生成的Excel电子表格?
接下来就是要创徏工作表,创徏工作表的Ҏ与创建工作薄的方法几乎一P同样是通过工厂模式Ҏ获得相应的对象,该方法需要两个参敎ͼ一个是工作表的名称Q另一个是工作表在工作薄中的位|,参考下面的代码片段Q?
file://创徏Excel工作?
jxl.write.WritableSheet ws = wwb.createSheet("Test Sheet 1", 0);
"q锅也支好了Q材料也准备齐全了,可以开始下锅了Q?Q现在要做的只是实例化API所提供的Excel基本数据cdQƈ它们添加到工作表中可以了Q参考下面的代码片段Q?
file://1.dLabel对象
jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell");
ws.addCell(labelC);
//d带有字型Formatting的对?
jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18,
WritableFont.BOLD, true);
jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
jxl.write.Label labelCF = new jxl.write.Label(1, 0, "This is a Label Cell", wcfF);
ws.addCell(labelCF);
//d带有字体颜色Formatting的对?
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10,
WritableFont.NO_BOLD, false,
UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
jxl.write.Label labelCFC = new jxl.write.Label(1, 0, "This is a Label Cell", wcfFC);
ws.addCell(labelCF);
//2.dNumber对象
jxl.write.Number labelN = new jxl.write.Number(0, 1, 3.1415926);
ws.addCell(labelN);
//d带有formatting的Number对象
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);
jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);
ws.addCell(labelNF);
//3.dBoolean对象
jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);
ws.addCell(labelB);
//4.dDateTime对象
jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());
ws.addCell(labelDT);
//d带有formatting的DateFormat对象
jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss");
jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);
jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 3, new java.util.Date(), wcfDF);
ws.addCell(labelDTF);
q里有两点大家要引v大家的注意。第一点,在构造单元格Ӟ单元格在工作表中的位|就已经定了。一旦创建后Q单元格的位|是不能够变更的Q尽单元格的内Ҏ可以改变的。第二点Q单元格的定位是按照下面q样的规?column, row)Q而且下标都是?开始,例如QA1被存储在(0, 0)QB1被存储在(1, 0)?br />
最后,不要忘记关闭打开的Excel工作薄对象,以释攑֍用的内存Q参见下面的代码片段Q?
file://写入Exel工作?
wwb.write();
//关闭Excel工作薄对?
wwb.close();
q可能与dExcel文g的操作有少不同Q在关闭Excel对象之前Q你必须要先调用write()ҎQ因为先前的操作都是存储在缓存中的,所以要通过该方法将操作的内容保存在文g中。如果你先关闭了Excel对象Q那么只能得C张空的工作薄了?
拯、更新Excel工作?
接下来简要介l一下如何更C个已l存在的工作薄,主要是下面二步操作,W一步是构造只ȝExcel工作薄,W二步是利用已经创徏的Excel工作薄创建新的可写入的Excel工作薄,参考下面的代码片段Q?完整代码见ExcelModifying.java)
file://创徏只读的Excel工作薄的对象
jxl.Workbook rw = jxl.Workbook.getWorkbook(new File(sourcefile));
//创徏可写入的Excel工作薄对?
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile), rw);
//dW一张工作表
jxl.write.WritableSheet ws = wwb.getSheet(0);
//获得W一个单元格对象
jxl.write.WritableCell wc = ws.getWritableCell(0, 0);
//判断单元格的cd, 做出相应的{?
if(wc.getType() == CellType.LABEL)
{
Label l = (Label)wc;
l.setString("The value has been modified.");
}
//写入Excel对象
wwb.write();
//关闭可写入的Excel对象
wwb.close();
//关闭只读的Excel对象
rw.close();
之所以用这U方式构建Excel对象Q完全是因ؓ效率的原因,因ؓ上面的示例才是API的主要应用。ؓ了提高性能Q在d工作表时Q与数据相关的一些输Z息,所有的格式信息Q如Q字体、颜色等{,是不被处理的Q因为我们的目的是获得行数据的|既没有了修饎ͼ也不会对行数据的g生什么媄响。唯一的不利之处就是,在内存中会同时保存两个同L工作表,q样当工作表体积比较大时Q会占用相当大的内存Q但现在好像内存的大ƈ不是什么关键因素了?
一旦获得了可写入的工作表对象,我们可以对单元格对象进行更新的操作了,在这里我们不必调用API提供的add()ҎQ因为单元格已经于工作表当中Q所以我们只需要调用相应的setXXX()ҎQ就可以完成更新的操作了?
单元格原有的格式化修饰是不能去掉的Q我们还是可以将新的单元g饰加上去Q以使单元格的内容以不同的Ş式表现?
新生成的工作表对象是可写入的Q我们除了更新原有的单元格外Q还可以d新的单元格到工作表中Q这与示?的操作是完全一L?
最后,不要忘记调用write()ҎQ将更新的内容写入到文g中,然后关闭工作薄对象,q里有两个工作薄对象要关闭,一个是只读的,另外一个是可写入的?
import org.apache.poi.hssf.usermodel.*;
import java.io.FileOutputStream;
public class PoiTest {
static public void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("foo.xls");
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet s = wb.createSheet();
wb.setSheetName(0, "Matrix");
for(short i=0; i<50; i++) {
HSSFRow row = s.createRow(i);
for(short j=0; j<50; j++) {
HSSFCell cell = row.createCell(j);
cell.setCellValue(""+i+","+j);
}
}
wb.write(fos);
fos.close();
}
}
q段代码首先创徏一个WorkbookQ从该Workbook中得C个表根{命名,然后l箋写入一?0x50的矩c最后输出到一个名为foo.xls的Excel文gQ甚臛_Apple MacZ也可以打开?br />
POI目是Java应用的o人兴奋的一步,为用h供了Windows文档集成的新功能Q允许Java开发h员方便地扩展其品的功能?/p>
l果重启后就报错无法使用,从下?点多一直到下班pȝ都无法?
׃pȝ报的错误始终是spring的applicationContext加蝲p|,一直在N|文件的原因,
其中试q原备䆾,切换应用{等好多操作,都没有办?
开始反馈系l出错的电话很多,头脑一直是qQ等C班以后才静下心来扑֎?
后来发现本地试的应用也无法启动,
最后发现是hibernata的tld文g的下载地址失效?原来的那个地址在网l上H然已经无法讉K,
通过其他方式扑ֈTLD文g,打到hibernate 包里?问题解决.
此事的教?
1,TLD文g一定要改ؓ从本地取,不能用默认的从网l读取的;
2,遇事要冷?不要着?慌ؕ,每次都这么说,但每ơ都着?需要改q?
31、EJB包括QSessionBean,EntityBeanQ说Z们的生命周期Q及如何理事务的?
SessionBeanQ?Stateless Session Bean 的生命周期是由容器决定的Q当客户机发求要建立一个Bean的实例时QEJB容器不一定要创徏一个新的Bean的实例供客户用,而是随便找一个现有的实例提供l客h。当客户机第一ơ调用一个Stateful Session Bean Ӟ容器必须立即在服务器中创Z个新的Bean实例Qƈ兌到客h上,以后此客h调用Stateful Session Bean 的方法时容器会把调用分派C此客h相关联的Bean实例?BR>EntityBeanQEntity Beans能存zȝ对较长的旉Qƈ且状态是持箋的。只要数据库中的数据存在QEntity beans׃直存zR而不是按照应用程序或者服务进E来说的。即使EJB容器崩溃了,Entity beans也是存活的。Entity Beans生命周期能够被容器或?Beans自己理?BR>EJB通过以下技术管理实务:对象理l织QOMGQ的对象实务服务QOTSQ,Sun Microsystems的Transaction ServiceQJTSQ、Java Transaction APIQJTAQ,开发组QX/OpenQ的XA接口?BR>32、应用服务器有那些?
BEA WebLogic ServerQIBM WebSphere Application ServerQOracle9i Application ServerQjBossQTomcat
33、给我一个你最常见到的runtime exception?BR>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
34、接口是否可l承接口? 抽象cL否可实现(implements)接口? 抽象cL否可l承实体c?concrete class)?
接口可以l承接口。抽象类可以实现(implements)接口Q抽象类是否可承实体类Q但前提是实体类必须有明的构造函数?BR>35、List, Set, Map是否l承自Collection接口?
ListQSet是,Map不是
36、说出数据连接池的工作机制是什?
J2EE 服务器启动时会徏立一定数量的池连接,q一直维持不于此数目的池连接。客LE序需要连接时Q池驱动E序会返回一个未使用的池q接q将其表Cؓ忙。如果当前没有空闲连接,池驱动程序就新徏一定数量的q接Q新接的数量有配|参数决定。当使用的池q接调用完成后,池驱动程序将此连接表CؓI闲Q其他调用就可以使用q个q接?BR>37、abstract的method是否可同时是static,是否可同时是nativeQ是否可同时是synchronized?
都不?BR>38、数l有没有length()q个Ҏ? String有没有length()q个ҎQ?BR>数组没有length()q个ҎQ有length的属性。String有有length()q个Ҏ?BR>39、Set里的元素是不能重复的Q那么用什么方法来区分重复与否? 是用==q是equals()? 它们有何区别?
Set里的元素是不能重复的Q那么用iterator()Ҏ来区分重复与否。equals()是判M个Set是否相等?BR> equals()?=Ҏ军_引用值是否指向同一对象equals()在类中被覆盖Qؓ的是当两个分ȝ对象的内容和cd盔R的话Q返回真倹{?BR>40、构造器Constructor是否可被override?
构造器Constructor不能被承,因此不能重写OverridingQ但可以被重载Overloading?BR>41、是否可以承Stringc?
StringcLfinalcL不可以ѝ?BR>42、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String?
switchQexpr1Q中Qexpr1是一个整数表辑ּ。因此传递给 switch ?case 语句的参数应该是 int?short?char 或?byte。long,string 都不能作用于swtich?BR>43、try {}里有一个return语句Q那么紧跟在q个try后的finally {}里的code会不会被执行Q什么时候被执行Q在return前还是后?
会执行,在return前执行?BR>44、编E题: 用最有效率的Ҏ出2乘以8{於?
2 << 3
45、两个对象值相?x.equals(y) == true)Q但却可有不同的hash codeQ这句话对不?
不对Q有相同的hash code?BR>46、当一个对象被当作参数传递到一个方法后Q此Ҏ可改变这个对象的属性,q可q回变化后的l果Q那么这里到底是g递还是引用传?
是g递。Java ~程语言只有g递参数。当一个对象实例作Z个参数被传递到Ҏ中时Q参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变Q但对象的引用是永远不会改变的?BR>47、当一个线E进入一个对象的一个synchronizedҎ后,其它U程是否可进入此对象的其它方?
不能Q一个对象的一个synchronizedҎ只能׃个线E访问?BR>48、编E题: 写一个Singleton出来?BR>Singleton模式主要作用是保证在Java应用E序中,一个类Class只有一个实例存在?BR>一般Singleton模式通常有几U种形式:
W一UŞ? 定义一个类Q它的构造函Cؓprivate的,它有一个static的private的该cd量,在类初始化时实例话,通过一个public的getInstanceҎ获取对它的引?l而调用其中的Ҏ?BR>public class Singleton {
private Singleton(){}
//在自己内部定义自׃个实例,是不是很奇怪?
//注意q是private 只供内部调用
private static Singleton instance = new Singleton();
//q里提供了一个供外部讉K本class的静态方法,可以直接讉K
public static Singleton getInstance() {
return instance;
}
}
W二UŞ?
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//q个Ҏ比上面有所改进Q不用每ơ都q行生成对象Q只是第一ơ
//使用时生成实例,提高了效率!
if (instance==null)
instanceQnew Singleton();
return instance; }
}
其他形式:
定义一个类Q它的构造函Cؓprivate的,所有方法ؓstatic的?BR>一般认为第一UŞ式要更加安全?
49、Java的接口和C++的虚cȝ相同和不同处?BR>׃Java不支持多l承Q而有可能某个cL对象要用分别在几个cL对象里面的方法或属性,现有的单l承机制׃能满求。与l承相比Q接口有更高的灵zL,因ؓ接口中没有Q何实C码。当一个类实现了接口以后,该类要实现接口里面所有的Ҏ和属性,q且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是public.一个类可以实现多个接口?BR>50、Java中的异常处理机制的简单原理和应用?BR>当JAVA E序q反了JAVA的语义规则时QJAVA虚拟机就会将发生的错误表CZؓ一个异常。违反语义规则包?U情c一U是JAVAcd内置的语义检查。例如数l下标越?会引发IndexOutOfBoundsException;讉Knull的对象时会引发NullPointerException。另一U情况就是JAVA允许E序员扩展这U语义检查,E序员可以创q异常Qƈ自由选择在何时用throw关键字引发异常。所有的异常都是 java.lang.Thowable的子cR?BR>51、垃圑֛收的优点和原理。ƈ考虑2U回收机制?BR>Java语言中一个显著的特点是引入了垃圑֛收机Ӟ使c++E序员最头疼的内存管理的问题q刃而解Q它使得JavaE序员在~写E序的时候不再需要考虑内存理。由于有个垃圑֛收机Ӟ Java中的对象不再?作用?的概念,只有对象的引用才?作用?。垃圑֛收可以有效的防止内存泄露Q有效的使用可以使用的内存。垃圑֛收器通常是作Z个单独的低别的U程q行Q不可预知的情况下对内存堆中已经M的或者长旉没有使用的对象进行清楚和回收Q程序员不能实时的调用垃圑֛收器Ҏ个对象或所有对象进行垃圑֛收。回收机制有分代复制垃圾回收和标记垃圑֛Ӟ增量垃圾回收?BR>52、请说出你所知道的线E同步的Ҏ?BR>wait():使一个线E处于等待状态,q且释放所持有的对象的lock?BR>sleep():使一个正在运行的U程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常?BR>notify():唤醒一个处于等待状态的U程Q注意的是在调用此方法的时候,q不能确切的唤醒某一个等待状态的U程Q而是由JVM定唤醒哪个U程Q而且不是按优先?BR>Allnotity():唤醒所有处入等待状态的U程Q注意ƈ不是l所有唤醒线E一个对象的锁,而是让它们竞争?BR>53、你所知道的集合类都有哪些Q主要方法?
最常用的集合类?List ?Map?List 的具体实现包?ArrayList ?VectorQ它们是可变大小的列表,比较适合构徏、存储和操作Mcd对象的元素列表?List 适用于按数值烦引访问元素的情Ş?
Map 提供了一个更通用的元素存储方法?Map 集合cȝ于存储元素对Q称????Q,其中每个键映到一个倹{?BR>54、描qC下JVM加蝲class文g的原理机?
JVM中类的装载是由ClassLoader和它的子cL实现?Java ClassLoader 是一个重要的Javaq行时系l组件。它负责在运行时查找和装入类文g的类?BR>55、char型变量中能不能存贮一个中文汉?Z?
能够定义成ؓ一个中文的Q因为java中以unicode~码Q一个char?6个字节,所以放一个中文是没问题的
56、多U程有几U实现方?都是什?同步有几U实现方?都是什?
多线E有两种实现ҎQ分别是l承ThreadcM实现Runnable接口
同步的实现方面有两种Q分别是synchronized,wait与notify
57、JSP的内|对象及Ҏ?BR>request表示HttpServletRequest对象。它包含了有x览器h的信息,q且提供了几个用于获取cookie, header, 和session数据的有用的Ҏ?
response表示HttpServletResponse对象Qƈ提供了几个用于设|送回 览器的响应的方法(如cookies,头信息等Q?
out对象是javax.jsp.JspWriter的一个实例,q提供了几个Ҏ使你能用于向览器回送输出结果?
pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各U范围的名字I间、servlet相关的对象的APIQƈ且包装了通用的servlet相关功能的方法?
session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信?
applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信?
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数?
page表示从该面产生的一个servlet实例
58、线E的基本概念、线E的基本状态以及状态之间的关系
U程指在E序执行q程中,能够执行E序代码的一个执行单位,每个E序臛_都有一个线E,也就是程序本w?BR>Java中的U程有四U状态分别是Q运行、就l、挂赗结束?
59、JSP的常用指?BR><%@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对象)QisELIgnored(是否忽略表达?
<%@include file="filename"%>
<%@taglib prefix="c"uri="http://......"%>
60、什么情况下调用doGet()和doPost()Q?BR>Jsp面中的form标签里的method属性ؓget时调用doGet()Qؓpost时调用doPost()?BR>61、servlet的生命周?BR>web容器加蝲servletQ生命周期开始。通过调用servlet的init()Ҏq行servlet的初始化。通过调用service()Ҏ实现Q根据请求的不同调用不同的do***()Ҏ。结束服务,web容器调用servlet的destroy()Ҏ?BR>62、如何现实servlet的单U程模式
<%@ page isThreadSafe="false"%>
63、页面间对象传递的Ҏ
requestQsessionQapplicationQcookie{?BR>64、JSP和Servlet有哪些相同点和不同点Q他们之间的联系是什么?
JSP 是Servlet技术的扩展Q本质上是Servlet的简易方式,更强调应用的外表表达。JSP~译后是"cservlet"。Servlet和JSP最主要的不同点在于QServlet的应用逻辑是在Java文g中,q且完全从表C层中的HTML里分d来。而JSP的情冉|Java和HTML可以l合成一个扩展名?jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑?BR>65、四U会话跟t技?BR>会话作用域ServletsJSP 面描述
page否是代表与一个页面相关的对象和属性。一个页面由一个编译好?Java servlet c(可以带有M?include 指oQ但是没?include 动作Q表C。这既包?servlet 又包括被~译?servlet ?JSP 面
request是是代表?Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨多个页面,涉及多个 Web lgQ由?forward 指o?include 动作的关p)
session是是代表与用于某?Web 客户机的一个用户体验相关的对象和属性。一?Web 会话可以也经怼跨越多个客户?BR>application是是代表与整?Web 应用E序相关的对象和属性。这实质上是跨越整个 Web 应用E序Q包括多个页面、请求和会话的一个全局作用?BR>66、Request对象的主要方法:
setAttribute(String name,Object)Q设|名字ؓname的request的参数?BR>getAttribute(String name)Q返回由name指定的属性?BR>getAttributeNames()Q返回request对象所有属性的名字集合Q结果是一个枚丄实例
getCookies()Q返回客L的所有Cookie对象Q结果是一个Cookie数组
getCharacterEncoding()Q返回请求中的字W编码方?BR>getContentLength()Q返回请求的Body的长?BR>getHeader(String name)Q获得HTTP协议定义的文件头信息
getHeaders(String name)Q返回指定名字的request Header的所有|l果是一个枚丄实例
getHeaderNames()Q返回所以request Header的名字,l果是一个枚丄实例
getInputStream()Q返回请求的输入,用于获得h中的数据
getMethod()Q获得客L向服务器端传送数据的Ҏ
getParameter(String name)Q获得客L传送给服务器端的有name指定的参数?BR>getParameterNames()Q获得客L传送给服务器端的所有参数的名字Q结果是一个枚丄实例
getParameterValues(String name)Q获得有name指定的参数的所有?BR>getProtocol()Q获取客L向服务器端传送数据所依据的协议名U?BR>getQueryString()Q获得查询字W串
getRequestURI()Q获取发求字W串的客L地址
getRemoteAddr()Q获取客L的IP地址
getRemoteHost()Q获取客L的名?BR>getSession([Boolean create])Q返回和h相关Session
getServerName()Q获取服务器的名?BR>getServletPath()Q获取客L所h的脚本文件的路径
getServerPort()Q获取服务器的端口号
removeAttribute(String name)Q删除请求中的一个属?BR>67、J2EE是技术还是^台还是框Ӟ
J2EE本n是一个标准,一个ؓ企业分布式应用的开发提供的标准q_?BR> J2EE也是一个框Ӟ包括JDBC、JNDI、RMI、JMS、EJB、JTA{技术?BR>68、我们在web应用开发过E中l常遇到输出某种~码的字W,如iso8859-1{,如何输出一个某U编码的字符Ԍ
Public String translate (String str) {
String tempStr = "";
try {
tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
tempStr = tempStr.trim();
}
catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}
69、简q逻辑操作(&,|,^)与条件操?&&,||)的区别?BR>区别主要{两点:a.条g操作只能操作布尔型的,而逻辑操作不仅可以操作布尔?而且可以操作数值型
b.逻辑操作不会产生短\
70、XML文档定义有几UŞ式?它们之间有何本质区别Q解析XML文档有哪几种方式Q?
a: 两种形式 dtd schemaQb: 本质区别:schema本n是xml的,可以被XML解析器解?q也是从DTD上发展schema的根本目?Qc:有DOM,SAX,STAX{?
DOM:处理大型文g时其性能下降的非常厉実뀂这个问题是由DOM的树l构所造成的,q种l构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随?BR>SAX:不现于DOM,SAX是事仉动型的XML解析方式。它序dXML文gQ不需要一ơ全部装载整个文件。当遇到像文件开_文档l束Q或者标{ּ头与标签l束Ӟ它会触发一个事Ӟ用户通过在其回调事g中写入处理代码来处理XML文gQ适合对XML的顺序访?
STAX:Streaming API for XML (StAX)
71、简qsynchronized和java.util.concurrent.locks.Lock的异?Q?BR>主要相同点:Lock能完成synchronized所实现的所有功?BR>主要不同点:Lock有比synchronized更精的U程语义和更好的性能。synchronized会自动释NQ而Lock一定要求程序员手工释放Qƈ且必dfinally从句中释放?BR>72、EJB的角色和三个对象
一个完整的ZEJB的分布式计算l构由六个角色组成,q六个角色可以由不同的开发商提供Q每个角色所作的工作必须遵@Sun公司提供的EJB规范Q以保证彼此之间的兼Ҏ。这六个角色分别是EJBlg开发者(Enterprise Bean ProviderQ?、应用组合者(Application AssemblerQ、部|者(DeployerQ、EJB 服务器提供者(EJB Server ProviderQ、EJB 容器提供者(EJB Container ProviderQ、系l管理员QSystem AdministratorQ?BR>三个对象是RemoteQLocalQ接口、HomeQLocalHomeQ接口,Beanc?BR>73、EJB容器提供的服?BR>主要提供声明周期理、代码生、持l性管理、安全、事务管理、锁和ƈ发行理{服务?BR>74、EJB规范规定EJB中禁止的操作有哪些?
1.不能操作U程和线EAPI(U程API指非U程对象的方法如notify,wait{?Q?.不能操作awtQ?.不能实现服务器功能,4.不能寚w态属生存取,5.不能使用IO操作直接存取文gpȝQ?.不能加蝲本地?Q?.不能this作ؓ变量和返回,8.不能循环调用?BR>75、remote接口和home接口主要作用
remote接口定义了业务方法,用于EJB客户端调用业务方法?BR>home接口是EJB工厂用于创徏和移除查找EJB实例
76、bean 实例的生命周?BR>对于Stateless Session Bean、Entity Bean、Message Driven Bean一般存在缓冲池理Q而对于Entity Bean和Statefull Session Bean存在Cache理Q通常包含创徏实例Q设|上下文、创建EJB ObjectQcreateQ、业务方法调用、remove{过E,对于存在~冲池管理的BeanQ在create之后实例q不从内存清除,而是采用~冲池调度机制不断重用实例,而对于存在Cache理的Bean则通过ȀzdLzL制保持Bean的状态ƈ限制内存中实例数量?BR>77、EJB的激zL?BR>以Stateful Session Bean ZQ其Cache大小军_了内存中可以同时存在的Bean实例的数量,ҎMRU或NRU法Q实例在ȀzdLzȝ态之间迁U,ȀzL制是当客L调用某个EJB实例业务ҎӞ如果对应EJB Object发现自己没有l定对应的Bean实例则从其去ȀzBean存储中(通过序列化机制存储实例)回复Q激z)此实例。状态变q前会调用对应的 ejbActive和ejbPassivateҎ?BR>78、EJB的几U类?BR>会话QSessionQBean Q实体(EntityQBean 消息驱动的(Message DrivenQBean
会话Bean又可分ؓ有状态(StatefulQ和无状态(StatelessQ两U?BR>实体Bean可分为Bean理的持l性(BMPQ和容器理的持l性(CMPQ两U?BR>79、客服端调用EJB对象的几个基本步?BR>讄JNDI服务工厂以及JNDI服务地址pȝ属性,查找Home接口Q从Home接口调用CreateҎ创徏Remote接口Q通过Remote接口调用其业务方法?BR>80、如何给weblogic指定大小的内?
在启动Weblogic的脚本中Q位于所在Domian对应服务器目录下的startServerNameQ,增加set MEM_ARGS=-Xms32m -Xmx200mQ可以调整最内存ؓ32MQ最?00M
81、如何设定的weblogic的热启动模式(开发模?与品发布模?
可以在管理控制台中修改对应服务器的启动模式ؓ开发或产品模式之一。或者修Ҏ务的启动文g或者commenv文gQ增加set PRODUCTION_MODE=true?BR>82、如何启动时不需输入用户名与密码?
修改服务启动文gQ增?WLS_USER和WLS_PWV也可以在boot.properties文g中增加加密过的用户名和密?
83、在weblogic理制台中对一个应用域(或者说是一个网?Domain)q行jms及ejb或连接池{相关信息进行配|后,实际保存在什么文件中?
保存在此Domain的config.xml文g中,它是服务器的核心配置文g?BR>84、说说weblogic中一个Domain的缺省目录结?比如要将一个简单的helloWorld.jsp攑օ何目录下,然的在浏览器上就可打?http://L:端口?/helloword.jsp可以看到运行结果了? 又比如这其中用到了一个自己写的javaBean该如何办?
Domain 目录服务器目录applicationsQ将应用目录攑֜此目录下可以作为应用访问,如果是Web应用Q应用目录需要满Web应用目录要求Qjsp文g可以直接攑֜应用目录中,Javabean需要放在应用目录的WEB-INF目录的classes目录中,讄服务器的~省应用可以实现在览器上无需输入应用名?BR>85、在weblogic中发布ejb需涉及到哪些配|文?BR>不同cd的EJB涉及的配|文件不同,都涉及到的配|文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP实体Bean一般还需要weblogic-cmp-rdbms-jar.xml
86、如何在weblogic中进行ssl配置与客L的认证配|或说说j2ee(标准)q行ssl的配|?BR>~省安装中用DemoIdentity.jks和DemoTrust.jks KeyStore实现SSLQ需要配|服务器使用Enable SSLQ配|其端口Q在产品模式下需要从CA获取U有密钥和数字证书,创徏identity和trust keystoreQ装载获得的密钥和数字证书。可以配|此SSLq接是单向还是双向的?BR>87、如何查看在weblogic中已l发布的EJB?
可以使用理控制収ͼ在它的Deployment中可以查看所有已发布的EJB
88、CORBA是什?用途是什?
CORBA 标准是公共对象请求代理结?Common Object Request Broker Architecture)Q由对象理l织 (Object Management GroupQ羃写ؓ OMG)标准化。它的组成是接口定义语言(IDL), 语言l定(binding:也译~?和允许应用程序间互操作的协议。其目的为:用不同的E序设计语言书写在不同的q程中运行,Z同的操作pȝ开发?BR>89、说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看?BR> Session Facade PatternQ用SessionBean讉KEntityBean
Message Facade PatternQ实现异步调?BR>EJB Command PatternQ用Command JavaBeans取代SessionBeanQ实现轻量讉K
Data Transfer Object FactoryQ通过DTO Factory化EntityBean数据提供Ҏ?BR>Generic Attribute AccessQ通过AttibuteAccess接口化EntityBean数据提供Ҏ?BR>Business InterfaceQ通过q程Q本圎ͼ接口和Beancd现相同接口规范业务逻辑一致?BR>QJQ架构的设计好坏直接媄响系l的性能、可扩展性、可l护性、组件可重用性及开发效率。项目越复杂Q项目队伍越庞大则越能体现良好设计的重要性?BR>90、说说在weblogic中开发消息Bean时的persistent与non-persisten的差?BR>persistent方式的MDB可以保证消息传递的可靠?也就是如果EJB容器出现问题而JMS服务器依然会消息在此MDB可用的时候发送过来,而nonQpersistent方式的消息将被丢弃?BR>91、Servlet执行时一般实现哪几个ҎQ?BR>public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destroy()
92、j2ee常用的设计模式?说明工厂模式?BR> Java中的23U设计模式:
FactoryQ工厂模式)Q?nbsp; BuilderQ徏造模式)Q?nbsp; Factory MethodQ工厂方法模式)Q?BR>PrototypeQ原始模型模式)QSingletonQ单例模式)Q?nbsp; FacadeQ门面模式)Q?BR>AdapterQ适配器模式)Q?nbsp; BridgeQ桥梁模式)Q?nbsp; CompositeQ合成模式)Q?BR>DecoratorQ装饰模式)Q?nbsp; FlyweightQn元模式)Q?nbsp; ProxyQ代理模式)Q?BR>CommandQ命令模式)Q?nbsp; InterpreterQ解释器模式Q, VisitorQ访问者模式)Q?BR>IteratorQP代子模式Q, MediatorQ调停者模式)Q?nbsp; MementoQ备忘录模式Q,
ObserverQ观察者模式)Q?nbsp; StateQ状态模式)Q?nbsp; StrategyQ策略模式)Q?BR>Template MethodQ模板方法模式)Q?Chain Of ResponsibleityQ责任链模式Q?BR>工厂模式Q工厂模式是一U经常被使用到的模式Q根据工厂模式实现的cd以根据提供的数据生成一l类中某一个类的实例,通常q一l类有一个公q抽象父类q且实现了相同的ҎQ但是这些方法针对不同的数据q行了不同的操作。首先需要定义一个基c,该类的子c通过不同的方法实C基类中的Ҏ。然后需要定义一个工厂类Q工厂类可以Ҏ条g生成不同的子cd例。当得到子类的实例后Q开发h员可以调用基cM的方法而不必考虑到底q回的是哪一个子cȝ实例?BR>93、EJB需直接实现它的业务接口或Home接口吗,Lq理由?BR>q程接口和Home接口不需要直接实玎ͼ他们的实C码是由服务器产生的,E序q行中对应实现类会作为对应接口类型的实例被用?BR>94、排序都有哪几种ҎQ请列D。用JAVA实现一个快速排序?BR> 排序的方法有Q插入排序(直接插入排序、希排序)Q交换排序(冒排序、快速排序)Q选择排序Q直接选择排序、堆排序Q,归ƈ排序Q分配排序(排序、基数排序)
快速排序的伪代码?BR>/ /使用快速排序方法对a[ 0 :n- 1 ]排序
从a[ 0 :n- 1 ]中选择一个元素作为m i d d l eQ该元素为支?BR>把余下的元素分割ZDleft 和r i g h tQ得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支?BR>递归C用快速排序方法对left q行排序
递归C用快速排序方法对right q行排序
所得结果ؓl e f t + m i d d l e + r i g h t
95、请对以下在J2EE中常用的名词q行解释(或简单描q?
web 容器Q给处于其中的应用程序组ӞJSPQSERVLETQ提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必x其它pȝ问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE{。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器?BR>EJB容器QEnterprise java bean 容器。更h行业领域特色。他提供l运行在其中的组件EJB各种理功能。只要满J2EE规范的EJB攑օ该容器,马上׃被容器进行高效率的管理。ƈ且可以通过现成的接口来获得pȝU别的服务。例如邮件服务、事务管理?BR>JNDIQ(Java Naming & Directory InterfaceQJAVA命名目录服务。主要提供的功能是:提供一个目录系l,让其它各地的应用E序在其上面留下自己的烦引,从而满_速查扑֒定位分布式应用程序的功能?BR>JMSQ(Java Message ServiceQJAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播?BR>JTAQ(Java Transaction APIQJAVA事务服务。提供各U分布式事务服务。应用程序只需调用其提供的接口卛_?BR>JAFQ(Java Action FrameWorkQJAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部v和自定义实现自己的个性安全控制策略?BR>RMI/IIOP: QRemote Method Invocation /internet对象h中介协议Q他们主要用于通过q程调用服务。例如,q程有一台计机上运行一个程序,它提供股分析服务,我们可以在本地计机上实现对其直接调用。当然这是要通过一定的规范才能在异构的pȝ之间q行通信。RMI是JAVAҎ的?BR>96、JAVA语言如何q行异常处理Q关键字Qthrows,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
Java 通过面向对象的方法进行异常处理,把各U不同的异常q行分类Qƈ提供了良好的接口。在Java中,每个异常都是一个对象,它是ThrowablecL其它子类的实例。当一个方法出现异常后便抛Z个异常对象,该对象中包含有异怿息,调用q个对象的方法可以捕获到q个异常q进行处理。Java的异常处理是通过5个关键词来实现的Qtry、catch、throw、throws和finally。一般情况下是用try来执行一D늨序,如果出现异常Q系l会抛出QthrowsQ一个异常,q时候你可以通过它的cd来捕捉(catchQ它Q或最后(finallyQ由~省处理器来处理?BR>用try来指定一块预防所?异常"的程序。紧跟在tryE序后面Q应包含一个catch子句来指定你惌捕捉?异常"的类型?BR>throw语句用来明确地抛Z?异常"?BR>throws用来标明一个成员函数可能抛出的各种"异常"?BR>Finally为确保一D代码不发生什?异常"都被执行一D代码?BR>可以在一个成员函数调用的外面写一个try语句Q在q个成员函数内部写另一个try语句保护其他代码。每当遇C个try语句Q?异常"的框架就攑ֈ堆栈上面Q直到所有的try语句都完成。如果下一U的try语句没有ҎU?异常"q行处理Q堆栈就会展开Q直到遇到有处理q种"异常"的try语句?BR>97、一?.java"源文件中是否可以包括多个c(不是内部c)Q有什么限Ӟ
可以。必d有一个类名与文g名相同?BR>98、MVC的各个部分都有那些技术来实现?如何实现?
MVC 是ModelQViewQController的简写?Model" 代表的是应用的业务逻辑Q通过JavaBeanQEJBlg实现Q, "View" 是应用的表示面(由JSP面产生Q,"Controller" 是提供应用的处理q程控制Q一般是一个ServletQ,通过q种设计模型把应用逻辑Q处理过E和昄逻辑分成不同的组件实现。这些组件可以进行交互和重用?BR>99、java中有几种Ҏ可以实现一个线E?用什么关键字修饰同步Ҏ? stop()和suspend()ҎZ不推荐用?
有两U实现方法,分别是承ThreadcM实现Runnable接口
用synchronized关键字修饰同步方?BR>反对使用stop()Q是因ؓ它不安全。它会解除由U程获取的所有锁定,而且如果对象处于一U不q诏状态,那么其他U程能在那种状态下查和修改它们。结果很难检查出真正的问题所在。suspend()ҎҎ发生死锁。调用suspend()的时候,目标U程会停下来Q但却仍然持有在q之前获得的锁定。此Ӟ其他MU程都不能访问锁定的资源Q除非被"挂v"的线E恢复运行。对MU程来说Q如果它们想恢复目标U程Q同时又试图使用M一个锁定的资源Q就会造成死锁。所以不应该使用suspend()Q而应在自qThreadcM|入一个标志,指出U程应该zdq是挂v。若标志指出U程应该挂vQ便?wait()命其q入{待状态。若标志指出U程应当恢复Q则用一个notify()重新启动U程?BR>100、java中有几种cd的流QJDK为每U类型的提供了一些抽象类以供l承Q请说出他们分别是哪些类Q?BR>字节,字符。字节流l承于InputStream OutputStreamQ字W流l承于InputStreamReader OutputStreamWriter。在java.io包中q有许多其他的流Q主要是Z提高性能和用方ѝ?BR>101、java中会存在内存泄漏吗,L单描q?BR>会。如Qint i,i2; return (i-i2); //when i够大的正?i2够大的负数。结果会造成溢位Q导致错误?BR>102、java中实现多态的机制是什么?
Ҏ的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父cM子类之间多态性的一U表玎ͼ重蝲Overloading是一个类中多态性的一U表现?BR>103、垃圑֛收器的基本原理是什么?垃圾回收器可以马上回收内存吗Q有什么办法主动通知虚拟行垃圑֛Ӟ
对于GC来说Q当E序员创建对象时QGC开始监控这个对象的地址、大以及用情c通常QGC采用有向囄方式记录和管理堆(heap)中的所有对象。通过q种方式定哪些对象?可达?Q哪些对象是"不可辄"。当GC定一些对象ؓ"不可?ӞGC有责Q回收q些内存I间。可以。程序员可以手动执行System.gc()Q通知GCq行Q但是Java语言规范q不保证GC一定会执行?BR>104、静态变量和实例变量的区别?
static i = 10; //帔R
class A a; a.i =10;//可变
105、什么是java序列化,如何实现java序列化?
序列化就是一U用来处理对象流的机Ӟ所谓对象流也就是将对象的内容进行流化。可以对化后的对象q行d操作Q也可将化后的对象传输于网l之间。序列化是ؓ了解军_对对象流q行d操作时所引发的问题?BR>序列化的实现Q将需要被序列化的cd现Serializable接口Q该接口没有需要实现的ҎQimplements Serializable只是Z标注该对象是可被序列化的Q然后用一个输出流(如:FileOutputStream)来构造一?ObjectOutputStream(对象?对象Q接着Q用ObjectOutputStream对象的writeObject(Object obj)Ҏ可以将参数为obj的对象写?即保存其状?Q要恢复的话则用输入?BR>106、是否可以从一个staticҎ内部发出寚wstaticҎ的调用?
不可?如果其中包含对象的method()Q不能保证对象初始化.
107、写clone()ҎӞ通常都有一行代码,是什么?
Clone 有缺省行为,super.clone();他负责生正大的I间Qƈ逐位复制?BR>108、在JAVA中,如何跛_当前的多重嵌套@环?
用break; return Ҏ?BR>109、List、Map、Set三个接口Q存取元素时Q各有什么特点?
List 以特定次序来持有元素Q可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value|value可多倹{?BR>110、J2EE是什么?
J2EE 是Sun公司提出的多?multi-diered),分布?distributed),Zlg(component-base)的企业应用模型 (enterpriese application model).在这L一个应用系l中Q可按照功能划分Z同的lgQ这些组件又可在不同计算ZQƈ且处于相应的层次(tier)中。所属层ơ包括客户层(clietn tier)lg,web层和lg,Business层和lg,企业信息pȝ(EIS)层?BR>111、UML斚w
标准建模语言UML。用例图,静态图(包括cd、对象图和包?,行ؓ?交互?序?合作?,实现图?BR>112、说Z些常用的c,包,接口Q请各D5?BR>常用的类QBufferedReader BufferedWriter FileReader FileWirter String Integer
常用的包Qjava.lang java.awt java.io java.util java.sql
常用的接口:Remote List Map Document NodeList
113、开发中都用C那些设计模式?用在什么场?
每个模式都描qC一个在我们的环境中不断出现的问题,然后描述了该问题的解x案的核心。通过q种方式Q你可以无数ơ地使用那些已有的解x案,无需在重复相同的工作。主要用CMVC的设计模式。用来开发JSP/Servlet或者J2EE的相兛_用。简单工厂模式等?BR>114、jsp有哪些动?作用分别是什?
JSP 共有以下6U基本动?jsp:includeQ在面被请求的时候引入一个文件?jsp:useBeanQ寻找或者实例化一个JavaBean?jsp:setPropertyQ设|JavaBean的属性?jsp:getPropertyQ输出某个JavaBean的属性?jsp:forwardQ把h转到一个新的页面?jsp:pluginQ根据浏览器cd为Java插g生成OBJECT或EMBED标记?BR>115、Anonymous Inner Class (匿名内部c? 是否可以extends(l承)其它c,是否可以implements(实现)interface(接口)?
可以l承其他cL完成其他接口Q在swing~程中常用此方式?BR>116、应用服务器与WEB SERVER的区别?
应用服务器:Weblogic、Tomcat、Jboss
WEB SERVERQIIS?Apache
117、BS与CS的联pM区别?BR>C/S是Client/Server的羃写。服务器通常采用高性能的PC、工作站或小型机Qƈ采用大型数据库系l,如Oracle、Sybase、Informix?SQL Server。客L需要安装专用的客户端Y件?BR>B/QxBrower/Server的羃写,客户Z只要安装一个浏览器QBrowserQ,如Netscape Navigator或Internet ExplorerQ服务器安装Oracle、Sybase、Informix?SQL Server{数据库。在q种l构下,用户界面完全通过WWW览器实玎ͼ一部分事务逻辑在前端实玎ͼ但是主要事务逻辑在服务器端实现。浏览器通过Qeb Server 同数据库q行数据交互?BR>C/S ?B/S 区别Q?
Q.g环境不同:
C/S 一般徏立在专用的网l上, 范围里的网l环? 局域网之间再通过专门服务器提供连接和数据交换服务.
B/S 建立在广域网之上? 不必是专门的|络g环境,例与电话上网, U用讑֤. 信息自己理. 有比C/S更强的适应范围, 一般只要有操作pȝ和浏览器p
Q.对安全要求不?
C/S 一般面向相对固定的用户? 对信息安全的控制能力很强. 一般高度机密的信息pȝ采用C/S l构适宜. 可以通过B/S发布部分可公开信息.
B/S 建立在广域网之上, 对安全的控制能力相对? 可能面向不可知的用户?BR>Q.对程序架构不?
C/S E序可以更加注重程, 可以Ҏ限多层次校验, 对系l运行速度可以较少考虑.
B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/Sl构的程序架构是发展的趋? 从MS?Netpd的BizTalk 2000 Exchange 2000{? 全面支持|络的构件搭建的pȝ. SUN 和IBM推的JavaBean 构g技术等,?B/S更加成熟.
Q.软g重用不同
C/S E序可以不可避免的整体性考虑, 构g的重用性不如在B/S要求下的构g的重用性好.
B/S 对的多重l构,要求构g相对独立的功? 能够相对较好的重?入买来的餐桌可以再利用,而不是做在墙上的矛_桌子
Q.pȝl护不同
C/S E序׃整体? 必须整体考察, 处理出现的问题以及系l升U? 升? 可能是再做一个全新的pȝ
B/S 构gl成,斚w构g个别的更?实现pȝ的无~升U? pȝl护开销减到最?用户从网上自׃载安装就可以实现升.
Q.处理问题不同
C/S E序可以处理用户面固? q且在相同区? 安全要求高需? 与操作系l相? 应该都是相同的系l?BR> B/S 建立在广域网? 面向不同的用L, 分散地域, q是C/S无法作到? 与操作系l^台关pL?
Q.用户接口不同
C/S 多是建立的Windowq_?表现Ҏ有限,对程序员普遍要求较高
B/S 建立在浏览器? 有更加丰富和生动的表现方式与用户交流. q且大部分难度减?减低开发成?
Q.信息不?
C/S E序一般是典型的中央集权的机械式处? 交互性相对低
B/S 信息向可变? B-B B-C B-G{信息、流向的变化, 更像交易中心?BR>118、LINUX下线E,GDIcȝ解释?BR>LINUX实现的就是基于核心轻量q程?一对一"U程模型Q一个线E实体对应一个核心轻量q程Q而线E之间的理在核外函数库中实现?
GDIcMؓ囑փ讑֤~程接口cd?BR>119、STRUTS的应?如STRUTS架构)
Struts 是采用Java Servlet/JavaServer Pages技术,开发Web应用E序的开放源码的framework。采用Struts能开发出ZMVC(Model-View-Controller)设计模式的应用构架?Struts有如下的主要功能Q一.包含一个controller servletQ能用Lh发送到相应的Action对象。二.JSP自由tag库,q且在controller servlet中提供关联支持,帮助开发员创徏交互式表单应用。三.提供了一pd实用对象QXML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提C和消息?BR>120、Jdo是什?
JDO 是Java对象持久化的新的规范Qؓjava data object的简U?也是一个用于存取某U数据仓库中的对象的标准化API。JDO提供了透明的对象存储,因此对开发h员来_存储数据对象完全不需要额外的代码Q如JDBC API的用)。这些繁琐的例行工作已经转移到JDO产品提供商n上,使开发h员解脱出来,从而集中时间和_֊在业务逻辑上。另外,JDO很灵z,因ؓ它可以在M数据底层上运行。JDBC只是面向关系数据库(RDBMSQJDO更通用Q提供到M数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMSQ等{,使得应用可移植性更强?BR>121、内部类可以引用他包含类的成员吗Q有没有什么限Ӟ
一个内部类对象可以讉K创徏它的外部cd象的内容
122、WEB SERVICE名词解释。JSWDL开发包的介l。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释?
Web ServiceWeb Service是基于网l的、分布式的模块化lgQ它执行特定的Q务,遵守具体的技术规范,q些规范使得Web Service能与其他兼容的组件进行互操作?BR>JAXP(Java API for XML Parsing) 定义了在Java中用DOM, SAX, XSLT的通用的接口。这样在你的E序中你只要使用q些通用的接口,当你需要改变具体的实现时候也不需要修改代码?BR>JAXM(Java API for XML Messaging) 是ؓSOAP通信提供讉KҎ和传输机制的API?BR>WSDL是一U?XML 格式Q用于将|络服务描述Zl端点,q些端点对包含面向文档信息或面向q程信息的消息进行操作。这U格式首先对操作和消息进行抽象描qͼ然后其l定到具体的|络协议和消息格式上以定义端炏V相关的具体端点即组合成为抽象端点(服务Q?BR>SOAP即简单对象访问协?Simple Object Access Protocol)Q它是用于交换XML~码信息的轻量协议?
UDDI 的目的是为电子商务徏立标准;UDDI是一套基于Web的、分布式的、ؓWeb Service提供的、信息注册中心的实现标准规范Q同时也包含一l企业能将自n提供的Web Service注册Q以使别的企业能够发现的讉K协议的实现标准?/P>
JAVA代码查错
1.
abstract class Name {
private String name;
public abstract boolean isStupidName(String name) {}
}
大侠们,q有何错?
{案: 错。abstract method必须以分L,且不带花括号?BR>2.
public class Something {
void doSomething () {
private String s = "";
int l = s.length();
}
}
有错?
{案: 错。局部变量前不能攄M讉K修饰W?(privateQpublicQ和protected)。final可以用来修饰局部变?BR>(final如同abstract和strictfpQ都是非讉K修饰W,strictfp只能修饰class和method而非variable)?BR>3.
abstract class Something {
private abstract String doSomething ();
}
q好像没什么错?
{案: 错。abstract的methods不能以private修饰。abstract的methods是让子cimplement(实现)具体l节的,怎么可以用private把abstract
method锁h? (同理Qabstract method前不能加final)?BR>4.
public class Something {
public int addOne(final int x) {
return ++x;
}
}
q个比较明显?BR>{案: 错。int x被修饰成finalQ意味着x不能在addOne method中被修改?BR>5.
public class Something {
public static void main(String[] args) {
Other o = new Other();
new Something().addOne(o);
}
public void addOne(final Other o) {
o.i++;
}
}
class Other {
public int i;
}
和上面的很相|都是关于final的问题,q有错吗?
{案: 正确。在addOne method中,参数o被修饰成final。如果在addOne method里我们修改了o的reference
(比如: o = new Other();)Q那么如同上例这题也是错的。但q里修改的是o的member vairable
(成员变量)Q而o的referenceq没有改变?BR>6.
class Something {
int i;
public void doSomething() {
System.out.println("i = " + i);
}
}
有什么错? 看不出来啊?BR>{案: 正确。输出的?i = 0"。int i属於instant variable (实例变量Q或叫成员变?。instant variable有default value。int的default value??BR>7.
class Something {
final int i;
public void doSomething() {
System.out.println("i = " + i);
}
}
和上面一题只有一个地方不同,是多了一个final。这N错了吗?
{案: 错。final int i是个final的instant variable (实例变量Q或叫成员变?。final的instant variable没有default valueQ必dconstructor (构造器)l束之前被赋予一个明的倹{可以修改ؓ"final int i = 0;"?BR>8.
public class Something {
public static void main(String[] args) {
Something s = new Something();
System.out.println("s.doSomething() returns " + doSomething());
}
public String doSomething() {
return "Do something ...";
}
}
看上d完美?BR>{案: 错。看上去在main里call doSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。static method不能直接call non-static methods。可Ҏ"System.out.println("s.doSomething() returns " + s.doSomething());"。同理,static method不能讉Knon-static instant variable?BR>9.
此处QSomethingcȝ文g名叫OtherThing.java
class Something {
private static void main(String[] something_to_do) {
System.out.println("Do something ...");
}
}
q个好像很明显?BR>{案: 正确。从来没有h说过Java的Class名字必须和其文g名相同。但public class的名字必d文g名相同?BR>10Q?BR>interface A{
int x = 0;
}
class B{
int x =1;
}
class C extends B implements A {
public void pX(){
System.out.println(x);
}
public static void main(String[] args) {
new C().pX();
}
}
{案Q错误。在~译时会发生错误(错误描述不同的JVM有不同的信息Q意思就是未明确的x调用Q两个x都匹配(p在同时import java.util和java.sql两个包时直接声明Date一P。对于父cȝ变量,可以用super.x来明,而接口的属性默认隐含ؓ public static final.所以可以通过A.x来明?BR>11.
interface Playable {
void play();
}
interface Bounceable {
void play();
}
interface Rollable extends Playable, Bounceable {
Ball ball = new Ball("PingPang");
}
class Ball implements Rollable {
private String name;
public String getName() {
return name;
}
public Ball(String name) {
this.name = name;
}
public void play() {
ball = new Ball("Football");
System.out.println(ball.getName());
}
}
q个错误不容易发现?BR>{案: 错?interface Rollable extends Playable, Bounceable"没有问题。interface可承多个interfacesQ所以这里没错。问题出在interface Rollable里的"Ball ball = new Ball("PingPang");"。Q何在interface里声明的interface variable (接口变量Q也可称成员变量)Q默认ؓpublic static final。也是?Ball ball = new Ball("PingPang");"实际上是"public static final Ball ball = new Ball("PingPang");"。在BallcȝPlay()Ҏ中,"ball = new Ball("Football");"改变了ball的referenceQ而这里的ball来自Rollable interfaceQRollable interface里的ball是public static final的,final的object是不能被改变reference的。因此编译器在"ball = new Ball("Football");"q里昄有错?/P>
JAVA~程?BR>1Q现在输入n个数字,以逗号Q分开Q然后可选择升或者降序排序;按提交键在另一面昄按什么排序,l果为,提供reset
import java.util.*;
public class bycomma{
public static String[] splitStringByComma(String source){
if(source==null||source.trim().equals(""))
return null;
StringTokenizer commaToker = new StringTokenizer(source,",");
String[] result = new String[commaToker.countTokens()];
int i=0;
while(commaToker.hasMoreTokens()){
result[i] = commaToker.nextToken();
i++;
}
return result;
}
public static void main(String args[]){
String[] s = splitStringByComma("5,8,7,4,3,9,1");
int[] ii = new int[s.length];
for(int i = 0;i<s.length;i++){
ii[i] =Integer.parseInt(s[i]);
}
Arrays.sort(ii);
//asc
for(int i=0;i<s.length;i++){
System.out.println(ii[i]);
}
//desc
for(int i=(s.length-1);i>=0;i--){
System.out.println(ii[i]);
}
}
}
2Q金额{换,阿拉伯数字的金额转换成中国传l的形式如:QE1011Q->Q一千零一拾一元整Q输出?BR>package test.format;
import java.text.NumberFormat;
import java.util.HashMap;
public class SimpleMoneyFormat {
public static final String EMPTY = "";
public static final String ZERO = "?;
public static final String ONE = "?;
public static final String TWO = "?;
public static final String THREE = "?;
public static final String FOUR = "?;
public static final String FIVE = "?;
public static final String SIX = "?;
public static final String SEVEN = "?;
public static final String EIGHT = "?;
public static final String NINE = "?;
public static final String TEN = "?;
public static final String HUNDRED = "?;
public static final String THOUSAND = "?;
public static final String TEN_THOUSAND = "?;
public static final String HUNDRED_MILLION = "?;
public static final String YUAN = "?;
public static final String JIAO = "?;
public static final String FEN = "?;
public static final String DOT = ".";
private static SimpleMoneyFormat formatter = null;
private HashMap chineseNumberMap = new HashMap();
private HashMap chineseMoneyPattern = new HashMap();
private NumberFormat numberFormat = NumberFormat.getInstance();
private SimpleMoneyFormat() {
numberFormat.setMaximumFractionDigits(4);
numberFormat.setMinimumFractionDigits(2);
numberFormat.setGroupingUsed(false);
chineseNumberMap.put("0", ZERO);
chineseNumberMap.put("1", ONE);
chineseNumberMap.put("2", TWO);
chineseNumberMap.put("3", THREE);
chineseNumberMap.put("4", FOUR);
chineseNumberMap.put("5", FIVE);
chineseNumberMap.put("6", SIX);
chineseNumberMap.put("7", SEVEN);
chineseNumberMap.put("8", EIGHT);
chineseNumberMap.put("9", NINE);
chineseNumberMap.put(DOT, DOT);
chineseMoneyPattern.put("1", TEN);
chineseMoneyPattern.put("2", HUNDRED);
chineseMoneyPattern.put("3", THOUSAND);
chineseMoneyPattern.put("4", TEN_THOUSAND);
chineseMoneyPattern.put("5", TEN);
chineseMoneyPattern.put("6", HUNDRED);
chineseMoneyPattern.put("7", THOUSAND);
chineseMoneyPattern.put("8", HUNDRED_MILLION);
}
public static SimpleMoneyFormat getInstance() {
if (formatter == null)
formatter = new SimpleMoneyFormat();
return formatter;
}
public String format(String moneyStr) {
checkPrecision(moneyStr);
String result;
result = convertToChineseNumber(moneyStr);
result = addUnitsToChineseMoneyString(result);
return result;
}
public String format(double moneyDouble) {
return format(numberFormat.format(moneyDouble));
}
public String format(int moneyInt) {
return format(numberFormat.format(moneyInt));
}
public String format(long moneyLong) {
return format(numberFormat.format(moneyLong));
}
public String format(Number moneyNum) {
return format(numberFormat.format(moneyNum));
}
private String convertToChineseNumber(String moneyStr) {
String result;
StringBuffer cMoneyStringBuffer = new StringBuffer();
for (int i = 0; i < moneyStr.length(); i++) {
cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i + 1)));
}
//拾䘪仟万亿等都是汉字里面才有的单位,加上它们
int indexOfDot = cMoneyStringBuffer.indexOf(DOT);
int moneyPatternCursor = 1;
for (int i = indexOfDot - 1; i > 0; i--) {
cMoneyStringBuffer.insert(i, chineseMoneyPattern.get(EMPTY + moneyPatternCursor));
moneyPatternCursor = moneyPatternCursor == 8 ? 1 : moneyPatternCursor + 1;
}
String fractionPart = cMoneyStringBuffer.substring(cMoneyStringBuffer.indexOf("."));
cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("."), cMoneyStringBuffer.length());
while (cMoneyStringBuffer.indexOf("零拾") != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零拾"), cMoneyStringBuffer.indexOf("零拾") + 2, ZERO);
}
while (cMoneyStringBuffer.indexOf("零䘪") != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零䘪"), cMoneyStringBuffer.indexOf("零䘪") + 2, ZERO);
}
while (cMoneyStringBuffer.indexOf("零仟") != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零仟"), cMoneyStringBuffer.indexOf("零仟") + 2, ZERO);
}
while (cMoneyStringBuffer.indexOf("零万") != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零万"), cMoneyStringBuffer.indexOf("零万") + 2, TEN_THOUSAND);
}
while (cMoneyStringBuffer.indexOf("零亿") != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零亿"), cMoneyStringBuffer.indexOf("零亿") + 2, HUNDRED_MILLION);
}
while (cMoneyStringBuffer.indexOf("雉") != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("雉"), cMoneyStringBuffer.indexOf("雉") + 2, ZERO);
}
if (cMoneyStringBuffer.lastIndexOf(ZERO) == cMoneyStringBuffer.length() - 1)
cMoneyStringBuffer.delete(cMoneyStringBuffer.length() - 1, cMoneyStringBuffer.length());
cMoneyStringBuffer.append(fractionPart);
result = cMoneyStringBuffer.toString();
return result;
}
private String addUnitsToChineseMoneyString(String moneyStr) {
String result;
StringBuffer cMoneyStringBuffer = new StringBuffer(moneyStr);
int indexOfDot = cMoneyStringBuffer.indexOf(DOT);
cMoneyStringBuffer.replace(indexOfDot, indexOfDot + 1, YUAN);
public class test{
public static void main(String[] args){
try{
String s = "";
while(!s.equals("q")){
System.out.print("input:");
DataInputStream in = new DataInputStream(new BufferedInputStream(System.in));
s = in.readLine();
System.out.println("your input is :"+s);
String check = "^([a-z0-9A-Z]+[-|\\._]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
Pattern regex = Pattern.compile(check);
Matcher matcher = regex.matcher(s);
boolean isMatched = matcher.matches();
if(isMatched){
System.out.println("it's a email");
}else{
System.out.println("it's not a email");
}
}
}catch(Exception e){
System.out.println("error"+e.getMessage());
}
}
}