Java EE知识储备(二)

来源:互联网 发布:mac 中国银行 u盾 编辑:程序博客网 时间:2024/04/26 03:40

Java EE知识储备(二)

目录:

1、前台线程和后台线程:

2、Spring:

3、加载驱动的方法:

4、线程的wait和notify方法:

5、线程安全问题:

6、抽象类与接口:

7、final修饰符修饰形式参数:

8、try、catch代码块:

9、方法重写的两大一小原则:

10、数组声明问题:


1、前台线程和后台线程:

答: 主线程main()是一个前台线程,前台线程是程序中必须执行完成的,而后台线程不管线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)后,进程就会自动终止。                                                                                         

前台线程和后台线程的区别和联系:

(1)后台线程不会阻止进程的终止。属于某个进程的所有前台线程都终止后,该进程就会被终止。所有剩余的后台线程都会停止且不会完成。

(2)可以在任何时候将前台线程修改为后台线程,方式是设置Thread.IsBackground 属性。

(3)不管是前台线程还是后台线程,如果线程内出现了异常,都会导致进程的终止。

(4)托管线程池中的线程都是后台线程,使用new Thread方式创建的线程默认都是前台线程。

一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息。而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序,或是定时对某些系统资源进行扫描的程序

 

2、Spring:

答:(1)Spring框架是一个分层架构,由七个定义良好的模块组成。

 

图2.1 Spring七层模块

①Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向切面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

②Spring Web MVC:包含SpringMVC框架相关的所有类。包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

③Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

④SpringContext:向Spring框架提供上下文信息。此外还提供许多企业级服务的支持,有校验、邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持。

⑤Spring Dao:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写 的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

⑥Spring Web:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

⑦Spring Core:Spring的核心工具包。核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

(2)面向切面编程,指通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。Spring通过对AOP的支持,借助log4j等Apache开源组件实现了日志系统。

(3)Spring以一种非侵入式的方式来管理你的代码,Spring提倡“最少侵入”,意味着可以在适当的时候安装或卸载Spring。

 

3、加载驱动的方法:

答:①Class.forName("com.mysql.jdbc.Driver");

②DriverManager.registerDriver(new com.mysql.jdbc.Driver());

③System.setProperty("driverClassName", "com.mysql.jdbc.Driver");

 

4、线程的wait和notify方法:

答:wait()执行后进入线程等待,直到其他线程使用notify方法将其唤醒。notify方法调用后,并不是马上就释放对象锁的,而是在相应的synchronized(){}语句块执行结束,自动释放锁后,JVM会在wait()对象锁的线程中随机选取一个线程,赋予其对象锁,唤醒线程,继续执行。

 

5、线程安全问题:

答:(1)线程安全问题都是由全局变量及静态变量引起的。

(2)若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。

(3)线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

(4)常见的StringBuffer、Vector、Properties、Hashtable类都是线程安全的。

 

6、抽象类与接口:

答:(1)优先选用接口,尽量少用抽象类。

(2)抽象类和接口都不能被实例化。接口没有构造方法,不能被实例化,抽象类可以有构造方法,不过不是用来实例化对象的,是用来初始化的。

(3)抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

(4)抽象类中可以有普通成员变量,接口中没有普通成员变量。

(5)抽象类需要子类继承并覆盖其中的抽象方法。父类是抽象类,其中有抽象方法,那么子类继承父类,并把父类中的所有抽象方法都实现了,子类才有创建对象的实例的能力,否则子类也是抽象类。

 

7、final修饰符修饰形式参数:

答:(1)对于形式参数只能用final修饰符,其他任何修饰符都会引起编译器错误。但是这个修饰符也有一定的限制,就是在方法中不能对参数做任何的修改。不过一般情况下,一个方法的形参不用final修饰。只有在方法内部类使用。一个方法内的内部类如果使用了这个方法的参数或者局部变量的话,这个参数或局部变量应该是final。

(2)一个形式参数可被视为local variable。

 

8、try、catch代码块:

答:程序先执行try块中return之前(包括return语句中的表达式运算)的代码; 再执行finally块,最后执行try块中的return; 而 finally块之后的return语句,若在try块中含有return,则不再执行finally块之后的return语句。如果finally块中有return,则会执行finally块中的return。

 

9、方法重写的两大一小原则:

答:方法名相同,参数类型相同

子类返回类型小于等于父类方法返回类型,

子类抛出异常小于等于父类方法抛出异常,

子类访问权限大于等于父类方法访问权限。

 

10、数组声明问题:

答:在Java中,声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对给定数组长度。


2 0
原创粉丝点击