1、static的使用
public class HashTest { static int i = 1000; public static void main(String[] args) { HashTest t1, t2; int a, b; t1 = new HashTest(); t1.i++; t2 = new HashTest(); t2.i++; HashTest.i++; System.out.println(i); } }
运行结果为:1003。
2、for Loop的使用
作用:跳出循环
int x; int y=5; Loop: for(x=0;x+y<10;x++,y++){ if(x==3) continue Loop; }
当x为3时跳出循环。
3、servlet的生命周期
servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
- Servlet 通过调用 init () 方法进行初始化。
- Servlet 调用 service() 方法来处理客户端的请求。
- Servlet 通过调用 destroy() 方法终止(结束)。
- 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
4、spring IOC AOP
(摘自网友)
解释spring的IOC
IOC:Inversion of Control控制反转,也叫(Dependency Injection)依赖注入, dao接口的实现不再是业务逻辑层调用工厂类去获取,而是通过容器(spring)来自动的为我们的业务层设置Dao的实现类,这样整个过程就反过来,以前是我们业务层主动去获取dao,而现在是dao主动被设置到业务逻辑层中来了,这个也就是反转控制的由来。通过IOC,我们就可以在不修改任何代码的情况下,无缝地实现数据库的换库迁移。
就是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是通过容器生成,同时,要是产生的是单例的bean,他还可以给管理bean的生命周期。
解释Spring AOP
AOP面向切面编程将程序中的交叉业务逻辑(比如安全,日志,事务),封装成一个切面,然后注入到目标业务逻辑中去。
比如:很多方法都可能会抛异常,你要记录这个异常到日志中去,可以写个拦截器,在这个类中记录日志,在spring.xml中配置一个记录这些日志的方法的拦截器,在这个方法执行后调用这个拦截器,记录日志。这样就不用每次抛异常都要手动记录日志。
spring的事务管理用到的就是AOP这样也可以提高程序的内聚性。
Spring中有哪三种依赖注入的方式?
spring有三种注入方式:
1)根据属性注入也叫set方法注入
2)根据构造方法注入
3)根据注解进行注入(推荐)
Spring框架的优点?
Spring的AOP和IOC都是为了解决系统代码耦合度过高的问题,使代码重用度高,易于维护。
AOP是解决切面之间的耦合度问题,Ioc是解决内部核心对象(对象创建)的耦合度问题。
5、JVM生成class文件的原理
(摘自网友)
当我们使用命令来执行某一个Java程序(比如Test.class)的时候:java Test
(1) java.exe 会帮助我们找到 JRE ,接着找到位于 JRE 内部的 jvm.dll ,这才是真正的 Java 虚拟机器 , 最后加载动态库,激活 Java 虚拟机器。
(2) 虚拟机器激活以后,会先做一些初始化的动作,比如说读取系统参数等。一旦初始化动作完成之后,就会产生第一个类装载器 ―― Bootstrap Loader(启动类装载器 ) 。
(3) Bootstrap Loader 所做的初始工作中,除了一些基本的初始化动作之外,最重要的就是加载 Launcher.java 之中的 ExtClassLoader(扩展类装载器) ,并设定其 Parent 为 null ,代表其父加载器为 BootstrapLoader 。
(4) 然后 Bootstrap Loader 再要求加载 Launcher.java 之中的 AppClassLoader(用户自定义类装载器 ) ,并设定其 Parent 为之前产生的 ExtClassLoader 实体。这两个加载器都是以静态类的形式存在的。
这里要请大家注意的是, Launcher$ExtClassLoader.class 与 Launcher$AppClassLoader.class 都是由 Bootstrap Loader 所加载,所以 Parent 和由哪个类加载器加载没有关系。
6、io流的分类
输入流、输出流
7、线程
线程的实现方式:
1、继承Thread类
2、实现Runnable接口
3、使用ExecutorService、Callable、Future实现有返回结果的多线程。
其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。
线程的4状态:
1、创建状态new
2、就绪状态start
2、运行状态run
3、不可运行状态(认为调用wait()方法、sleep()方法、线程输入/输出阻塞(使用IO流))
4、消亡状态
(1) run方法正常退出而自然死亡,
2) 一个未捕获的异常终止了run方法而使线程猝死。
线程的同步方式:
synchronized,wait与notify
死锁:
不出现异常、不出现提示,只是所有进程都处于阻塞状态
解决方法:线程的通信。
同步机制:
两个或多个线程视图同时访问同一个有限资源时,在县城使用一个资源时为其加锁。
sleep()方法:以毫秒为单位,处于睡眠状态的线程在制定的时间过去后
wait()方法:线程在等待某一条,另一个对象必须通过,使用notify()或notifyAll()通知等待线程条件的改变
输入\输出状态:输入输出阻塞后,等待输入输出的完成。
8、jsp内置对象(9个)
内置对象 | 作用域 |
rasponse | page(当前页面) |
request | request |
out | page |
session | session |
application | application |
config | page |
page | page |
exception | page |
pageContext | page |