架构1.docx
《架构1.docx》由会员分享,可在线阅读,更多相关《架构1.docx(21页珍藏版)》请在冰豆网上搜索。
架构1
118、LINUX下线程,GDI类的解释。
LINUX实现的就是基于核心轻量级进程的"一对一"线程模型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中实现。
GDI类为图像设备编程接口类库。
119、STRUTS的应用(如STRUTS架构)Struts是采用JavaServlet/JavaServerPages技术,开发Web应用程序的开放源码的framework。
采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。
Struts有如下的主要功能:
一.包含一个controllerservlet,能将用户的请求发送到相应的Action对象。
二.JSP自由tag库,并且在controllerservlet中提供关联支持,帮助开发员创建交互式表单应用。
三.提供了一系列实用对象:
XML处理、通过JavareflectionAPIs自动处理JavaBeans属性、国际化的提示和消息。
120、Jdo是什么?
JDO是Java对象持久化的新的规范,为javadataobject的简称,也是一个用于存取某种数据仓库中的对象的标准化API。
JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBCAPI的使用)。
这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。
另外,JDO很灵活,因为它可以在任何数据底层上运行。
JDBC只是面向关系数据库(RDBMS)JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强。
121、内部类可以引用他包含类的成员吗?
有没有什么限制?
一个内部类对象可以访问创建它的外部类对象的内容
122、WEBSERVICE名词解释。
JSWDL开发包的介绍。
JAXP、JAXM的解释。
SOAP、UDDI,WSDL解释。
WebServiceWebService是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得WebService能与其他兼容的组件进行互操作。
JAXP(JavaAPIforXMLParsing)定义了在Java中使用DOM,SAX,XSLT的通用的接口。
这样在你的程序中你只要使用这些通用的接口,当你需要改变具体的实现时候也不需要修改代码。
JAXM(JavaAPIforXMLMessaging)是为SOAP通信提供访问方法和传输机制的API。
WSDL是一种XML格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操作。
这种格式首先对操作和消息进行抽象描述,然后将其绑定到具体的网络协议和消息格式上以定义端点。
相关的具体端点即组合成为抽象端点(服务)。
SOAP即简单对象访问协议(SimpleObjectAccessProtocol),它是用于交换XML编码信息的轻量级协议。
UDDI的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为WebService提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的WebService注册,以使别的企业能够发现的访问协议的实现标准。
JAVA代码查错
abstractclassName{privateStringname;publicabstractbooleanisStupidName(Stringname){}}大侠们,这有何错误?
答案:
错。
abstractmethod必须以分号结尾,且不带花括号。
2.publicclassSomething{voiddoSomething(){ privateStrings=""; intl=s.length();}}有错吗?
答案:
错。
局部变量前不能放置任何访问修饰符(private,public,和protected)。
final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。
3.abstractclassSomething{privateabstractStringdoSomething();}这好像没什么错吧?
答案:
错。
abstract的methods不能以private修饰。
abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstractmethod封锁起来呢?
(同理,abstractmethod前不能加final)。
4.publicclassSomething{publicintaddOne(finalintx){return++x;}}这个比较明显。
答案:
错。
intx被修饰成final,意味着x不能在addOnemethod中被修改。
5.publicclassSomething{publicstaticvoidmain(String[]args){Othero=newOther();newSomething().addOne(o);} publicvoidaddOne(finalOthero){ o.i++;}} classOther{publicinti;}和上面的很相似,都是关于final的问题,这有错吗?
答案:
正确。
在addOnemethod中,参数o被修饰成final。
如果在addOnemethod里我们修改了o的reference,(比如:
o=newOther();),那么如同上例这题也是错的。
但这里修改的是o的membervairable(成员变量),而o的reference并没有改变。
6.classSomething{inti;publicvoiddoSomething(){ System.out.println("i="+i);}}有什么错呢?
看不出来啊。
答案:
正确。
输出的是"i=0"。
inti属於instantvariable(实例变量,或叫成员变量)。
instantvariable有defaultvalue。
int的defaultvalue是0。
7.classSomething{finalinti;publicvoiddoSomething(){System.out.println("i="+i);}}和上面一题只有一个地方不同,就是多了一个final。
这难道就错了吗?
答案:
错。
finalinti是个final的instantvariable(实例变量,或叫成员变量)。
final的instantvariable没有defaultvalue,必须在constructor(构造器)结束之前被赋予一个明确的值。
可以修改为"finalinti=0;"。
8.publicclassSomething{publicstaticvoidmain(String[]args){Somethings=newSomething(); System.out.println("s.doSomething()returns"+doSomething()); } publicStringdoSomething(){ return"Dosomething...";}}看上去很完美。
答案:
错。
看上去在main里calldoSomething没有什么问题,毕竟两个methods都在同一个class里。
但仔细看,main是static的。
staticmethod不能直接callnon-staticmethods。
可改成"System.out.println("s.doSomething()returns"+s.doSomething());"。
同理,staticmethod不能访问non-staticinstantvariable。
9.此处,Something类的文件名叫OtherThing.javaclassSomething{privatestaticvoidmain(String[]something_to_do){ System.out.println("Dosomething...");}}这个好像很明显。
答案:
正确。
从来没有人说过Java的Class名字必须和其文件名相同。
但publicclass的名字必须和文件名相同。
10.interface A{ intx=0;} classB{intx=1;} classCextendsBimplementsA{publicvoidpX(){System.out.println(x);}publicstaticvoidmain(String[]args){newC().pX();}}答案:
错误。
在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时importjava.util和java.sql两个包时直接声明Date一样)。
对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为publicstaticfinal.所以可以通过A.x来明确。
11.interfacePlayable{voidplay();} interfaceBounceable{voidplay();} interfaceRollableextendsPlayable,Bounceable{ Ballball=newBall("PingPang");}classBallimplementsRollable{privateStringname;publicStringgetName(){returnname;}publicBall(Stringname){this.name=name;}publicvoidplay(){ball=newBall("Football");System.out.println(ball.getName());}}这个错误不容易发现。
答案:
错。
"interfaceRollableextendsPlayable,Bounceable"没有问题。
interface可继承多个interfaces,所以这里没错。
问题出在interfaceRollable里的"Ballball=newBall("PingPang");"。
任何在interface里声明的interfacevariable(接口变量,也可称成员变量),默认为publicstaticfinal。
也就是说"Ballball=newBall("PingPang");"实际上是"publicstaticfinalBallball=newBall("PingPang");"。
在Ball类的Play()方法中,"ball=newBall("Football");"改变了ball的reference,而这里的ball来自Rollableinterface,Rollableinterface里的ball是publicstaticfinal的,final的object是不能被改变reference的。
因此编译器将在"ball=newBall("Football");"这里显示有错。
JAVA编程题
1.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
importjava.util.*;
publicclassbycomma{publicstaticString[]splitStringByComma(Stringsource){if(source==null||source.trim().equals("")) returnnull;StringTokenizercommaToker=newStringTokenizer(source,","); String[]result=newString[commaToker.countTokens()];inti=0; while(commaToker.hasMoreTokens()){ result[i]=commaToker.nextToken(); i++;} returnresult;}
publicstaticvoidmain(Stringargs[]){String[]s=splitStringByComma("5,8,7,4,3,9,1");int[]ii=newint[s.length];for(inti=0;i=0;i--){ System.out.println(ii[i]); }}}
2.金额转换,阿拉伯数字的金额转换成中国传统的形式如:
(¥1011)->(一千零一拾一元整)输出。
packagetest.format;importjava.text.NumberFormat;importjava.util.HashMap;publicclassSimpleMoneyFormat{
publicstaticfinalStringEMPTY="";publicstaticfinalStringZERO="零";publicstaticfinalStringONE="壹";publicstaticfinalStringTWO="贰";publicstaticfinalStringTHREE="叁";publicstaticfinalStringFOUR="肆";publicstaticfinalStringFIVE="伍";publicstaticfinalStringSIX="陆";publicstaticfinalStringSEVEN="柒";publicstaticfinalStringEIGHT="捌";publicstaticfinalStringNINE="玖";publicstaticfinalStringTEN="拾";publicstaticfinalStringHUNDRED="佰";publicstaticfinalStringTHOUSAND="仟"; publicstaticfinalStringTEN_THOUSAND="万";publicstaticfinalStringHUNDRED_MILLION="亿";publicstaticfinalStringYUAN="元";publicstaticfinalStringJIAO="角";publicstaticfinalStringFEN="分"; publicstaticfinalStringDOT=".";privatestaticSimpleMoneyFormatformatter=null;privateHashMapchineseNumberMap=newHashMap(); privateHashMapchineseMoneyPattern=newHashMap(); privateNumberFormatnumberFormat=NumberFormat.getInstance(); privateSimpleMoneyFormat(){ 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);}
publicstaticSimpleMoneyFormatgetInstance(){ if(formatter==null) formatter=newSimpleMoneyFormat();returnformatter;}
publicStringformat(StringmoneyStr){ checkPrecision(moneyStr); Stringresult;result=convertToChineseNumber(moneyStr); result=addUnitsToChineseMoneyString(result); returnresult; }publicStringformat(doublemoneyDouble){returnformat(numberFormat.format(moneyDouble));} publicStringformat(intmoneyInt){ returnformat(numberFormat.format(moneyInt));
} publicStringformat(longmoneyLong){ returnformat(numberFormat.format(moneyLong));}
publicStringformat(NumbermoneyNum){ returnformat(numberFormat.format(moneyNum));}
privateStringconvertToChineseNumber(StringmoneyStr){ Stringresult;StringBuffercMoneyStringBuffer=newStringBuffer();for(inti=0;i //拾佰仟万亿等都是汉字里面才有的单位,加上它们intindexOfDot=cMoneyStringBuffer.indexOf(DOT); intmoneyPatternCursor=1; for(inti=indexOfDot-1;i>0;i--){ cMoneyStringBuffer.insert(i,chineseMoneyPattern.get(EMPTY+moneyPatternCursor)); moneyPatternCursor=moneyPatternCursor==8?
1:
moneyPatternCursor+1; } StringfractionPart=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);
}whi