Sun River
Topics about Java SE, Servlet/JSP, JDBC, MultiThread, UML, Design Pattern, CSS, JavaScript, Maven, JBoss, Tomcat, ...
posts - 78,comments - 0,trackbacks - 0
    只有注册用户登录后才能阅读该文。阅读全文
posted @ 2009-03-10 11:42 Sun River| 编辑 收藏

 What are JavaScript types? - Number, String, Boolean, Function, Object, Null, Undefined.

  1. How do you convert numbers between different bases in JavaScript? - Use the parseInt() function, that takes a string as the first parameter, and the base as a second parameter. So to convert hexadecimal 3F to decimal, use parseInt ("3F", 16);
  2. What does isNaN function do? - Return true if the argument is not a number.
  3. What is negative infinity? - It’s a number in JavaScript, derived by dividing negative number by zero.

  4. What boolean operators does JavaScript support? - &&, || and !
  5. What does "1"+2+4 evaluate to? - Since 1 is a string, everything is a string, so the result is 124.
  6. How about 2+5+"8"? - Since 2 and 5 are integers, this is number arithmetic, since 8 is a string, it’s concatenation, so 78 is the result.
  7. What looping structures are there in JavaScript? - for, while, do-while loops, but no foreach.
  8. How do you create a new object in JavaScript? - var obj = new Object(); or var obj = {};
  9. How do you assign object properties? - obj["age"] = 17 or obj.age = 17.
  10. What’s a way to append a value to an array? - arr[arr.length] = value;
  11. What is this keyword? - It refers to the current object.
posted @ 2009-03-10 11:37 Sun River| 编辑 收藏
     摘要:   阅读全文
posted @ 2009-03-10 11:36 Sun River| 编辑 收藏

(1)假设在helloapp应用中有一个hello.jsp,它的文件路径如下:
%CATALINA_HOME%/webapps/helloapp/hello/hello.jsp    
那么在浏览器端访问hello.jsp的URL是什么? (单选)
选项:
(A) http://localhost:8080/hello.jsp
(B) http://localhost:8080/helloapp/hello.jsp
(C) http://localhost:8080/helloapp/hello/hello.jsp

(2)假设在helloapp应用中有一个HelloServlet类,它位于org.javathinker包下,那么这个类的class文件应该放

在什么目录下? (单选)
选项:
(A) helloapp/HelloServlet.class
(B) helloapp/WEB-INF/HelloServlet.class
(C) helloapp/WEB-INF/classes/HelloServlet.class
(D) helloapp/WEB-INF/classes/org/javathinker/HelloServlet.class

(3)假设在helloapp应用中有一个HelloServlet类,它在web.xml文件中的配置如下:
<servlet>
  <servlet-name> HelloServlet </servlet-name>
  <servlet-class>org.javathinker.HelloServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name> HelloServlet </servlet-name>
  <url-pattern>/hello</url-pattern>
</servlet-mapping>
那么在浏览器端访问HelloServlet的URL是什么? (单选)
选项:
(A) http://localhost:8080/HelloServlet
(B) http://localhost:8080/helloapp/HelloServlet
(C) http://localhost:8080/helloapp/org/javathinker/hello
(D) http://localhost:8080/helloapp/hello


(4)客户请求访问HTML页面与访问Servlet有什么异同?(多选)
选项:
(A)相同:都使用HTTP协议
(B)区别:前者Web服务器直接返回HTML页面,后者Web服务器调用Servlet的方法,由Servlet动态生成HTML页面
(C)相同:前者Web服务器直接返回HTML页面,后者Web服务器直接返回Servlet的源代码。
(D)区别:后者需要在web.xml中配置URL路径。
(E)区别:前者使用HTTP协议,后者使用RMI协议。


(5)HttpServletRequest对象是由谁创建的?(单选)
选项:
(A)由Servlet容器负责创建,对于每个HTTP请求, Servlet容器都会创建一个HttpServletRequest对象
(B)由JavaWeb应用的Servlet或JSP组件负责创建,当Servlet或JSP组件响应HTTP请求时,先创建

HttpServletRequest对象


(6)从HTTP请求中,获得请求参数,应该调用哪个方法? (单选)
选项:
(A)调用HttpServletRequest对象的getAttribute()方法
(B)调用ServletContext对象的getAttribute()方法
(C)调用HttpServletRequest对象的getParameter()方法

(7)ServletContext对象是由谁创建的?(单选)
选项:
(A)由Servlet容器负责创建,对于每个HTTP请求, Servlet容器都会创建一个ServletContext对象
(B)由JavaWeb应用本身负责为自己创建一个ServletContext对象
(C)由Servlet容器负责创建,对于每个JavaWeb应用,在启动时,Servlet容器都会创建一个ServletContext对象


(8)jspForward1.jsp要把请求转发给jspForward2.jsp,应该在jspForward1.jsp中如何实现? (单选)
选项:
(A) <a href=“jspForward2.jsp”>jspForward2.jsp </a>
(B) <jsp:forward page=“jspForward2.jsp”>

(9)当浏览器第二次访问以下JSP网页时的输出结果是什么?(单选)

<!% int a=0;     %>
<%
     int b=0;
     a++;
     b++;
%>

a:<%= a %> <br>
b:<%= b %>
  
选项:
(A)  a=0  b=0
(B) a=1  b=1
(c) a=2  b=1

(10)下面哪个说法是正确的? (单选)
选项:
(A) 对于每个要求访问maillogin.jsp的HTTP请求,Servlet容器都会创建一个HttpSession对象
(B)每个HttpSession对象都有惟一的ID。
(C)JavaWeb应用程序必须负责为HttpSession分配惟一的ID

(11)如果不希望JSP网页支持Session,应该如何办? (单选)
选项:
(A) 调用HttpSession的invalidate()方法
(B) <%@ page session= “false\">


(12)在标签处理类中,如何访问session范围内的共享数据? (多选)
选项:
(A)在TagSupport类中定义了session成员变量,直接调用它的getAttribute()方法即可。
(B)在标签处理类TagSupport类中定义了pageContext成员变量,先通过它的getSession()方法获得当前的

HttpSession对象,再调用HttpSession对象的getAttribute()方法。
(C)pageContext.getAttribute(“attributename”,PageContext.SESSION_SCOPE)


(13)在下面的选项中,哪些是TagSupport类的doStartTag()方法的有效返回值? (多选)
选项:
(A) Tag.SKIP_BODY
(B) Tag.SKIY_PAGE
(C) Tag.EVAL_BODY_INCLUDE
(D) Tag.EVAL_PAGE


(14)以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果?(单选)
request.setAttribute(\"count\",new Integer(0));
Integer count = request.getAttribute(\"count\");
选项:
A)不能编译通过  B)能编译通过,并正常运行  
C) 编译通过,但运行时抛出ClassCastException

答案:
(1)C (2)D  (3)D  (4)A,B,D  (5)A  (6)C  (7)C  (8)B  (9)C   (10)B
(11)B  (12)B,C  (13)A,C  (14)A

判断题:(其它试题请下载)

1 . Java 程序里 , 创建新的类对象用关键字 new ,回收无用的类对象使用关键字 free 。

2 .对象可以赋值,只要使用赋值号(等号)即可,相当于生成了一个各属性与赋值对象相同的新对象。

3 .有的类定义时可以不定义构造函数,所以构造函数不是必需的。

4 .类及其属性、方法可以同时有一个以上的修饰符来修饰。

5 . Java 的屏幕坐标是以像素为单位,容器的左下角被确定为坐标的起点

6 .抽象方法必须在抽象类中,所以抽象类中的方法都必须是抽象方法。

7 . Final 类中的属性和方法都必须被 final 修饰符修饰。

8 .最终类不能派生子类,最终方法不能被覆盖。

9 .子类要调用父类的方法,必须使用 super 关键字。

10 .一个 Java 类可以有多个父类。

11 .如果 p 是父类 Parent 的对象,而 c 是子类 Child 的对象,则语句 c = p 是正确的。

12 .一个类如果实现了某个接口,那么它必须重载该接口中的所有方法。

13 .当一个方法在运行过程中产生一个异常,则这个方法会终止,但是整个程序不一定终止运行。

14 .接口是特殊的类,所以接口也可以继承,子接口将继承父接口的所有常量和抽象方法。

15 .用“ + ”可以实现字符串的拼接,用 - 可以从一个字符串中去除一个字符子串。

16 .使用方法 length( ) 可以获得字符串或数组的长度。

17 .设 String 对象 s=”Hello ” ,运行语句 System.out.println(s.concat(“World!”)); 后 String 对象 s 的内容为 ”Hello world!” ,所以语句输出为

Hello world!

18 .创建 Vector 对象时构造函数给定的是其中可以包容的元素个数,使用中应注意不能超越这个数值。

19 .所有的鼠标事件都由 MouseListener 监听接口的监听者来处理。

20 .一个容器中可以混合使用多种布局策略。

21 . Java 中,并非每个事件类都只对应一个事件。

22 .一个线程对象的具体操作是由 run() 方法的内容确定的,但是 Thread 类的 run() 方法是空的 , 其中没有内容 ; 所以用户程序要么派生一个 Thread 的子类并在子类里重新定义 run() 方法 , 要么使一个类实现 Runnable 接口并书写其中 run() 方法的方法体。

23 . Java 的源代码中定义几个类,编译结果就生成几个以 .class 为后缀的字节码文件。

24 . Java Applet 是由独立的解释器程序来运行的。

25 . Java Applet 只能在图形界面下工作。

26 . Java 的字符类型采用的是 ASCII 编码。

27 . Java 的各种数据类型占用固定长度,与具体的软硬件平台环境无关

28 . Applet 是一种特殊的 Panel ,它是 Java Applet 程序的最外层容器。

29 .子类的域和方法的数目一定大于等于父类的域和方法的数目。

30 . System 类不能实例化,即不能创建 System 类的对象。

31 .用户自定义的图形界面元素也可以响应用户的动作,具有交互功能

32 . Java 中数组的元素可以是简单数据类型的量,也可以是某一类的对象。

33 . Vector 类中的对象不能是简单数据类型。

34 . Java 中的 String 类的对象既可以是字符串常量,也可以是字符串变量。

35 .容器是用来组织其他界面成分和元素的单元,它不能嵌套其他容器。

posted @ 2007-02-22 11:59 Sun River| 编辑 收藏
     摘要: Part I. XSLT Programming   1)   What is the exac...  阅读全文
posted @ 2006-11-27 08:00 Sun River| 编辑 收藏
     摘要:   阅读全文
posted @ 2006-10-28 15:15 Sun River| 编辑 收藏
     摘要:   阅读全文
posted @ 2006-09-18 11:51 Sun River| 编辑 收藏

Question How do you delete a Cookie within a JSP? (JSP)

Answer

Cookie mycook = new Cookie("name","value");

response.addCookie(mycook);

Cookie killmycook = new Cookie("mycook","value");

killmycook.setMaxAge(0);

killmycook.setPath("/");

killmycook.addCookie(killmycook);

Question How many types of protocol implementations does RMI have? (RMI)

Answer RMI has at least three protocol implementations: Java

Remote Method Protocol(JRMP), Internet Inter ORB Protocol(IIOP),

and Jini Extensible Remote Invocation(JERI). These are alternatives,

not part of the same thing, All three are indeed layer 6 protocols for

those who are still speaking OSI reference model.

Question What are the different identifier states of a Thread?

(Core Java)

Answer The different identifiers of a Thread are:

R - Running or runnable thread

S - Suspended thread

CW - Thread waiting on a condition variable

MW - Thread waiting on a monitor lock

MS - Thread suspended waiting on a monitor lock


Question What is the fastest type of JDBC driver? (JDBC)

Answer JDBC driver performance will depend on a number of

issues:

(a) the quality of the driver code,

(b) the size of the driver code,

(c) the database server and its load,

(d) network topology,

(e) the number of times your request is translated to a different API.

In general, all things being equal, you can assume that the more your

request and response change hands, the slower it will be. This

means that Type 1 and Type 3 drivers will be slower than Type 2

drivers (the database calls are make at least three translations versus

two), and Type 4 drivers are the fastest (only one translation).

Question Request parameter How to find whether a parameter

exists in the request object? (Servlets)

Answer 1.boolean hasFoo = !(request.getParameter("foo") ==

null || request.getParameter("foo").equals(""));

2. boolean hasParameter =

request.getParameterMap().contains(theParameter);

(which works in Servlet 2.3+)


Question How can I send user authentication information while

makingURLConnection? (Servlets)

Answer You’ll want to use

HttpURLConnection.setRequestProperty and set all the appropriate

headers to HTTP authorization.

Question How do I convert a numeric IP address like 192.18.97.39

into a hostname like java.sun.com? (Networking)

Answer

Question How many methods do u implement if implement the

Serializable Interface? (Core Java)

Answer The Serializable interface is just a "marker" interface,

with no methods of its own to implement. Other ’marker’ interfaces

are

java.rmi.Remote

java.util.EventListener

String hostname =InetAddress.getByName("192.18.97.39").getHostName();

posted @ 2010-10-25 17:08 Sun River| 编辑 收藏
1.

Question What is the query used to display all tables names in

SQL Server (Query analyzer)? (JDBC)

Answer select * from information_schema.tables

Question What is Externalizable? (Core Java)

Answer Externalizable is an Interface that extends Serializable

Interface. And sends data into Streams in Compressed Format. It has

two methods, writeExternal(ObjectOuput out) and

readExternal(ObjectInput in).

Question What modifiers are allowed for methods in an Interface?

Answer Only public and abstract modifiers are allowed for

methods in interfaces.

Question How many types of JDBC Drivers are present and what

are they? (JDBC)

Answer There are 4 types of JDBC Drivers

Type 1: JDBC-ODBC Bridge Driver

Type 2: Native API Partly Java Driver

Type 3: Network protocol Driver

Type 4: JDBC Net pure Java Driver

Question What is the difference between ServletContext and

PageContext? (JSP)

Answer ServletContext: Gives the information about the container

PageContext: Gives the information about the Request.

Question How to pass information from JSP to included JSP?

Answer Using <%jsp:param> tag.

posted @ 2010-10-25 16:07 Sun River| 编辑 收藏

 

tomcat6配置双向认证

1
、生成服务器端证书

keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore server.jks -storepass password -validity 3650


2
、生成客户端证书

keytool -genkey -keyalg RSA -dname "cn=sango,ou=sango,o=none,l=china,st=beijing,c=cn" -alias custom -storetype PKCS12 -keypass password -keystore custom.p12 -storepass password -validity 3650


客户端的CN可以是任意值。
3
、由于是双向SSL认证,服务器必须要信任客户端证书,因此,必须把客户端证书添加为服务器的信任认证。由于不能直接将PKCS12格式的证书库导入,我们必须先把客户端证书导出为一个单独的CER文件,使用如下命令,先把客户端证书导出为一个单独的cer文件:

keytool -export -alias custom -file custom.cer -keystore custom.p12 -storepass password -storetype PKCS12 -rfc


然后,添加客户端证书到服务器中(将已签名数字证书导入密钥库)

keytool -import -v -alias custom -file custom.cer -keystore server.jks -storepass password


4
、查看证书内容

keytool -list -v -keystore server.jks -storepass password


5
、配置tomcat service.xml文件

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
    maxThreads="150" scheme="https" secure="true"
    clientAuth="true" sslProtocol="TLS"
    keystoreFile="D:/server.jks" keystorePass="password"
    truststoreFile="D:/server.jks" truststorePass="password"
/>


clientAuth="true"
表示双向认证
6
、导入客户端证书到浏览器
双向认证需要强制验证客户端证书。双击“custom.p12”即可将证书导入至IE

tomcat6
配置单向认证

1
、生成服务器端证书

keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore server.jks -storepass password -validity 3650


2
、由于是单向认证,没有必要生成客户端的证书,直接进入配置tomcat service.xml文件

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
    maxThreads="150" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS"
    keystoreFile="D:/server.jks" keystorePass="password"    
/>


clientAuth="false"
表示单向认证,同时去掉truststoreFile="D:/server.jks" truststorePass="password"2

posted @ 2010-05-11 12:12 Sun River| 编辑 收藏
 

---The key thing to know is that IDs identify a specific element and therefore must be unique on the page – you can only use a specific ID once per document. Many browsers do not enforce this rule but it is a basic rule of HTML/XHTML and should be observed. Classes mark elements as members of a group and can be used multiple times, so if you want to define a style which will be applied to multiple elements you should use a class instead.

 Notice that an ID's CSS is an HTML element, followed by a "#", and finally ID's name. The end result looks something like "element#idname". Also, be sure to absorb the fact that when an ID is used in HTML, we must use "id=name" instead of "class=name" to reference it!

Why Did They Choose Those Names??

       ID = A person's Identification (ID) is unique to one person.

       Class = There are many people in a class.

ID for Layout and Uniqueness

Standards specify that any given ID name can only be referenced once within a page or document. From our experience, IDs are most commonly used correctly in CSS layouts. This makes sense because there are usually only one menu per page, one banner, and usually only one content pane.

In Tizag.com CSS Layout Examples we have used IDs for the unique items mentioned above. View the CSS Code for our first layout example. Below are the unique IDs in our code.

*       Menu - div#menuPane

*       Content - div#content

Answer: Classes vs IDs

Use IDs when there is only one occurence per page. Use classes when there are one or more occurences per page.

posted @ 2010-03-16 10:14 Sun River| 编辑 收藏
--Spring的singleton是容器级的,我们一般说的singleton模式是JVM级的。所以singleton模式中,singleton的class在整个JVM中只有一个instance,Spring的Bean,你可以一个class配置多个Bean,这个class就有了多个instance。这个singleton是指在spring容器中,这个Bean是单实例的,是线程共享的。所以要求这些类都是线程安全的。也就是说,不能出现修改Bean属性的方法,当然除了设值得那些setter。只要满足线程安全,这些bean都可以用singleton。而且我们在绝大多数使用上,也是这样用的,包括dao,service。
Beanfactory是Spring初始以静态方式载入的,Spring的单例IOC是基于容器级的,所以这你都不用担心与考虑.

--应用中对象有两种,行为对象和数据对象,行为对象都要求是线程安全的!也就是允许单例的, 不管是dao 还是 service 对象,都是行为对象,行为对象不应该引用非线程安全的对象做成员量,同时在应用外部的资源(如文件,数据库连接,session)时,要先保证对这些东西的访问是做了并发控制的!
  对于spring来讲,<bean scope="singleton"/>或<bean singleton="true"/>都是保证对同一sesionfactory bean是单例的,也就是所谓 sessionfactory 范围的.

--这是一个真实的案例,我们在项目中使用Spring和ACEGI,我之所以选择ACEGI,除了它对权限的良好控制外,
我还看好它的SecurityContextHolder,通过代码
代码
  1. Authentication auth = SecurityContextHolder.getContext().getAuthentication();   
<script>render_code();</script>
我可以很容易在系统任意一层得到用户的信息,而不用把用户信息在参数里传来传去,(这也是struts的缺点之一)
但是我在每一次要得到用户信息的时候都写上面的一段代码,未免有些麻烦,所以我在BaseService, BaseDao里都提供了如下方法:
代码
  1.  /**  
  2.  * get current login user info  
  3.  * @return UserInfo  
  4.  */  
  5. protected UserInfo getUserInfo()   
  6. {   
  7.     return getUserContext().getUserInfo();   
  8. }   
  9.   
  10. /**  
  11.  * get current login user context  
  12.  * @return UserContext  
  13.  */  
  14. protected UserContext getUserContext()   
  15. {   
  16.     Authentication auth = SecurityContextHolder.getContext().getAuthentication();   
  17.     return (UserContext) auth.getPrincipal();   
  18. }   
<script>render_code();</script>
这样在其他的Service和Dao类里可以通过
代码
  1. super.getUserContext(), super.getUserInfo()   
<script>render_code();</script>
来得到用户的信息,这也为问题的产生提供了温床。请看如下代码:
代码
  1. public class SomeServece extends BaseService implements SomeInterFace     
  2. {   
  3.     private UserInfo user = super.getUserInfo();   
  4.        
  5.     public someMethod()   
  6.     {   
  7.        int userID = this.user.getUserID();   
  8.        String userName = this.user.getUserName();   
  9.        //bla bla do something user userID and userNaem   
  10.     }   
  11. }       
<script>render_code();</script>

 

这段代码在单元测试的时候不会用任何问题,但是在多用户测试的情况下,你会发现任何调用SomeService里someMethod()方法
的userID和userName都是同一个人,也就是第一个登陆的人的信息。Why?

其根本原因是Spring的Bean在默认情况下是Singleton的,Bean SomeServece的实例只会生成一份,也就是所SomeServece实例的user
对象只会被初始化一次,就是第一次登陆人的信息,以后不会变了。所以BaseService想为开发提供方便,却给开发带来了风险

正确的用法应该是这样的

代码
  1. public class SomeServece extends BaseService implements SomeInterFace     
  2. {   
  3.        
  4.        
  5.     public someMethod()   
  6.     {   
  7.        int userID = super.getUserInfo().getUserID();   
  8.        String userName = super.getUserInfo().getUserName();   
  9.        //bla bla do something user userID and userNaem   
  10.     }   
posted @ 2009-04-08 12:12 Sun River| 编辑 收藏

Architect (Java) Interview Questions

General and general terms questions

Architect interview is slightly different from all other interview types. Interviewer is looking for ability of the candidate to think independently on top of pure technical knowledge. Most of the questions are open-ended, prompting the interviewee to discussion about different aspects of Java development. Other side of the interview is general questions about position of the architect within the organization. Some questions do not have clear, direct or single answer and require discussion with the interviewer. On top of questions mentioned here you may be asked generic OO questions (what is class, what is polymorphism etc.)
  1. What distinguishes "good architecture" from "bad architecture"?
    This is an open-ended question. There are few aspects of "good" architecture:
    1. Shall address functional product requirements
    2. Shall address non-functional product requirements, such as performance, scalability, reliability, fault tolerance, availability, maintainability, extensibility
    3. Shall be simple and comprehendible (to support maintainability and extensibility)
    4. Shall be well structured (support multiple tiers, parallel development etc.)
    5. Shall be detailed enough to share with different levels of organizational structure (marketing, sales, development, management)
    "Bad" architecture is basically opposite to "good" architecture.
  2. How much experience do you have with Enterprise applications? Another variant of this questions is: "Tell me about projects where you worked with J2EE?" Yet another version: "What, when and how made using EJB?"
    Interviewer is looking for your experience with designing J2EE applications and your experience with J2EE technologies and general terms. This is often start of the discussion and bridge to the technical section of the questions.
  3. What is scalability?
  4. What is high-availability? How is it different from scalability?
  5. What is the fault tolerance?
  6. What resources are used to keep up to date with J2EE technology?
    You may mention design pattern books, such as "Core EJB Patterns" and web sites, such as http://www.theserverside.com

Specific technical questions

  1. What modeling tools you are familiar with? What version of TogetherJ (Rational Rose etc.) have you used?
  2. If stateless session bean more scalable than stateful session beans?
    This is very popular questions that leads to some confusion. According to the second edition of "Core J2EE Patterns" and contrary to popular belief, stateful session beans are not less scalable than stateless session bean. The reason for that is life cycle of either type is controlled by Application Server and control of life cycle is what defines the scalability of the application
  3. What's the difference between EJB 1.1 and EJB 2.0?
    There are many differences. Some key points you want to mention are:
    1. New CMP model
    2. EJB Query Language
    3. Local interfaces
    4. EJBHome methods
    5. Message Driven Beans (MDB) support
  4. What transaction isolation levels do you know?
    none, repeatable read, read committed, read uncommitted, serializable
  5. What transaction attributes do you know?
    requires new, required, supports, not supported, mandatory, never
  6. What is the difference between optimistic lock and pessimistic lock?
    Optimistic lock is an implicit lock that tries to make best assumption about locking strategy and minimize time spent in lock of resource. Optimistic lock is usually implemented with some kind of timestamp strategy. Pessimistic lock is an explicit lock that set by client.
  7. What are entity beans. Are there any issues with them?
    Typical reaction to this question is very expressive answer that entity beans should not be used. There are many performancy implications with entity beans if used incorrectly. One of the famous problems are "n+1 call problem" Inter-entity bean call is very expensive operation and should be avoided.
  8. What core design patterns do you know?
    Architect must know at least some basic design patters used in J2EE development, e.g. Business Delegate, Session Facade, VO, List Handler, DTO, Composite Entity, etc.
  9. Where business logic should reside?
    Typical answer is "in business tier" This usually opens series of questions like: What is business logic, how to determine business logic, how business logic is different from persistent logic etc.
  10. What is JDO?
    JDO is Java Data Object - persistent framework that is alternative to idea of entity beans
  11. What is the difference between JSP and servlet? When to use what?
    JSP is compiled into servlet. JSP are better suit to view of information, while servlets are better for controlling stuff.
  12. Does the J2EE platform support nested transactions?
    No.
  13. Can you use synchronization primitives in my enterprise beans?
    No.
  14. Why all major application server vendors provide custom class loaders in addition to system jvm class loader?
    System one does not support hot deployment.

Performance questions

  1. What are performance problems in J2EE and how to solve them?
  2. What are Entity beans performance pitfalls?
  3. What performance pattern do you know?

Design Pattern questions

  1. Can you use singleton in EJB?
    Yes, but should not (explain why)
  2. What is MVC pattern and why M, V and C need to be separated?
  3. Describe Business Delegate pattern (or any other pattern)
  4. How to prevent double submission of the form from JSP page? (or describe Synchronizer Token pattern)
posted @ 2009-03-17 11:51 Sun River| 编辑 收藏

Interview Questions on UML and Design Patterns

Why to use design patterns?
Give examples of design patterns?
What is UML?
What are advantages of using UML?
What is the need for modelling?
Is it requiste to use UML in software projects?
What are use cases? How did you capture use cases in your project?
Explain the different types of UML diagrams ? sequence diagram , colloboration diagram etc
What is the sequence of UML diagrams in project?
What tools did you use for UML in your project?
What is the difference between activity and sequence diagrams?
What are deployment diagrams?
What are the different object relationships ?
What is the difference between composition and aggregation?
Wheel acting as a part of car ? Is this composition or aggregation?

posted @ 2009-03-17 11:43 Sun River| 编辑 收藏
 

spring与自动调度任务()

面是自己自动调度的一些学习。
这里只采用jdk自带的timer进行的,准备在下篇文章中用Quartz调度器。
首先建立你自己要运行的类。

package com.duduli.li;

public class Display {

    
public void disp(){
        System.out.println("
自动控制测试");
    }
}

一个简单的java bean,其中在这里你可以替换自己的任务。
然后就是编写调度程序,这里要继承jdk中的TimerTask类,复写他的run方法。

package com.duduli.li;

import java.util.TimerTask;

public class AutoRan extends TimerTask {
    
//set方法是springDI
    private Display display;
    
    
public void setDisplay(Display display) {
        
this.display = display;
    }
    @Override
    
public void run() {
        display.disp();
    }
}

然后就是重要的一步,编写applicationsContext.xml了。

<?xml version="1.0" encoding="UTF-8"?>
<beans
    
xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    
    
<bean id="display"
        class
="com.duduli.li.Display">
    
</bean>
    
<bean id="atuoRun"
        class
="com.duduli.li.AutoRan">
        
<property name="display" ref="display"></property>
    
</bean>
    
    
<bean id="aR"
    class
="org.springframework.scheduling.timer.ScheduledTimerTask">
        
<property name="timerTask" ref="atuoRun"></property>
<!--
period
多长时间运行一次,delay表示允许你当任务第一次运行前应该等待多久
-->

        
<property name="period" value="5000"></property>
        
<property name="delay" value="2000"></property>    
    
</bean>
    
    
<bean id="test"
    class
="org.springframework.scheduling.timer.TimerFactoryBean">
        
<property name="scheduledTimerTasks">
            
<list>
<!--
这里使用list,可以调度多个bean
-->

                
<ref bean="aR"/>
            
</list>
        
</property>
    
</bean>
</beans>


再来就是客户端调度了。

package com.duduli.li;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Client {

    
public static void main(String[] args) {
        BeanFactory factory = 
new ClassPathXmlApplicationContext("applicationContext.xml");
        factory.getBean("test");
    }
}

spring与自动调度任务()

使用quartzspring自动调度。
具体实现bean

package com.duduli.li.quartz;

import java.util.Date;

public class Display {

    @SuppressWarnings("deprecation")
    
public void disp(){
        System.out.println(
new Date().getSeconds());
        System.out.println("
自动控制测试");
    }
}

继承quartzjobbean类:这个类和继承Timer类类似

package com.duduli.li.quartz;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class AutoRun extends QuartzJobBean{

    
private Display  display;
    
    
public void setDisplay(Display display) {
        
this.display = display;
    }

    @Override
    
protected void executeInternal(JobExecutionContext arg0)
            
throws JobExecutionException {
        display.disp();
    }
}

spring配置文件:

                    <!-- quartz进行自动调度 -->
<!-- 具体实现类 -->
    
<bean id="display2"    class="com.duduli.li.quartz.Display"></bean>
    
<!-- springquartz的支持,Auto类实现quartzjob接口的类,jobDataAsMap是将实现类注入其中 -->
    
<bean id="quartz" class="org.springframework.scheduling.quartz.JobDetailBean">
        
<property name="jobClass" value="com.duduli.li.quartz.AutoRun"/>
        
<property name="jobDataAsMap">
            
<map>
                
<entry key="display" value-ref="display2"></entry>
            
</map>
        
</property>
    
</bean>
    
<!-- springquartz的支持,对其值的设定 -->
    
<bean id="simpleTask" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        
<property name="jobDetail" ref="quartz"></property>
        
<property name="startDelay" value="2000"></property>
        
<property name="repeatInterval" value="2000"></property>
    
</bean>
    
<!-- 启动自动调度 -->
    
<bean id="quartzTest" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        
<property name="triggers">
            
<list>
                
<ref bean="simpleTask"/>
            
</list>
        
</property>
    
</bean>

client调用:

package com.duduli.li.quartz;


import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Client {

    
public static void main(String[] args) {
            BeanFactory factory = 
new ClassPathXmlApplicationContext("applicationContext.xml");
            factory.getBean("quartzTest");
        }
}

posted @ 2009-03-12 12:42 Sun River| 编辑 收藏

Java implements a very efficient interprocess communication which reduces the CPU’s idle time to a very great extent. It is been implemented through wait ( ), notify ( ) and notifyAll ( ) methods. Since these methods are implemented as final methods they are present in all the classes.

The basic functionality of each one of them is as under:


wait( ) acts as a intimation to the calling thread to give up the monitor and go to sleep until some other thread enters the same monitor and calls notify( ).

notify( ) is used as intimator to wake up the first thread that called wait( ) on the same object.

notifyAll( ) as the term states wakes up all the threads that called wait( ) on the same object. The highest priority thread will run first.


public class WaitNotifyAllExample {
 
public static void main(String[] args) {
 
try {
Object o = new Object();
Thread thread1 = new Thread(new MyOwnRunnable("A", o));
Thread thread2 = new Thread(new MyOwnRunnable("B", o));
Thread thread3 = new Thread(new MyOwnRunnable("C", o));
 
// synchronized keyword acquires lock on the object.
synchronized (o) {
thread1.start();
// wait till the first thread completes execution.
// thread should acquire the lock on the object
// before calling wait method on it. Otherwise it will
// throw java.lang.IllegalMonitorStateException 
o.wait();
thread2.start();
// wait till the second thread completes execution
o.wait();
thread3.start();
}
 
}
catch (InterruptedException e) {
e.printStackTrace();
}
 
}
}
 
class MyOwnRunnable implements Runnable {
 
private String threadName;
 
private Object o;
 
public MyOwnRunnable(String name, Object o) {
threadName = name;
this.o = o;
}
 
public void run() {
 
 
synchronized (o) {
for (int i = 0; i < 1000; i++) {
System.out.println("Thread " + threadName + " Count : " + i);
}
// notify all threads waiting for the object o.
// thread should acquire the lock on the object
// before calling notify or notifyAll method on it. 
// Otherwise it will throw java.lang.IllegalMonitorStateException 
o.notifyAll();
}
}
}
posted @ 2009-03-12 12:09 Sun River| 编辑 收藏
    只有注册用户登录后才能阅读该文。阅读全文
posted @ 2009-03-10 11:42 Sun River| 编辑 收藏
仅列出标题  下一页