Java面试题

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
posted on 2017-07-18 18:11  GraceW  阅读(151)  评论(0编辑  收藏  举报