笔试测试二

问题:

  1. 请描述下 Servlet 的声明周期?
  2. JSP 的内置对象有几个,请分别介绍?
  3. JavaWeb 中请求转发和重定向的区别?
  4. 说一下你对 MVC 模式的理解?
  5. Get 和 post 两种提交方式的区别有哪些?
  6. Session 和 Cookie 的区别?
  7. 什么是 Servlet?
  8. 说一下您对 IOC 和 AOP 的理解?
  9. String、StringBuffer、StringBuilder 有什么区别?
  10. Java 中的修饰符有哪些?
  11. final、fianlly、finalize 的区别?
  12. List、Set、Map 三个集合的区别?
  13. HashSet 如何检测重复?
  14. HashMap 底层存储机制是什么?
  15. 什么是序列化与反序列化?

答案

1.请描述下servlet的声明周期?

  1. 加载和实例化:Servlet容器加载Servlet类,并调用该类的无参构造器进行Servlet实例化。
  2. 初始化:Servlet容器准备ServletConfig对象,该对象可以从web.xml文件中获取Servlet配置信息。Servlet容器调用Servlet对象的init()方法(调用且仅调用一次),该方法接收ServletConfig对象,获取Servlet配置信息并进行初始化
  3. 请求处理:调用Servlet对象的service()方法对请求进行处理。在service方法中,ServletRequest对象得到客户端发来的请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。
  4. 服务终止:容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法,以便让该实例可以释放它所使用的资源,保存数据到持久存储设备中。当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。

2.JSP 的内置对象有几个,请分别介绍?

  1. request对象:HttpServletRequest对象。客户端请求,此请求会包含来自GET/POST 请求的参数通过它才能了解客户的需求,然后做出响应。对象内部是使用map集合实现。
  2. response对象:HttpServletResponse对象。响应客户请求的有关信息;
  3. session对象:它指的是客户端与服务器的一次会话,从客户端连到服务器的一个 WebApplication 开始,直到客户端与服务器断开连接为止;
  4. application对象:它实现了用户键数据的共享,可存放全局变量,它开始于服务器的启动,知道服务器的关闭
  5. page对象:jsp页面网页本身
  6. pageContext对象:它提供了对 JSP 页面内所有的对象及名字空间的访问;
  7. out对象:向浏览器回送输出结果
  8. config对象:它是一个Servlet 初始化时,JSP 引擎向它传递信息用的。
  9. exception对象:它是一个例外对象,当一个页面在运行过程中发生了意外,就产生这个对象;

3.JavaWeb 中请求转发和重定向的区别?

  1. 转发在服务器端完成,重定向在客户端完成
  2. 转发的速度快,重定向的速度慢
  3. 转发是一次请求,重定向是两次请求
  4. 转发的地址栏没有变化,重定向的地址栏有变化
  5. 转发必须在同一个服务器上,重定向可以是两个不同的服务器
  6. 转发使用request.getRequestDispatcher().forward(request,response),重定向使用response.sendRedirect()

4.说一下你对 MVC 模式的理解?

  1. MVC 是 Model — View — Controler 的简称,它是一种架构模式,它分离了表现与交互.它被分为三个核心部件:模型、视图、控制器.
  2. Model(模型):是程序的主体部分,主要包含业务数据和业务逻辑.在模型层,还会涉及到用户发布的服务,在服务中会根据不同的业务需求,更新业务模型中的数据.
  3. View(视图):是程序呈现给用户的部分,是用户和程序交互的接口,用户会根据具体的业务需求,在 View 视图层输入自己特定的业务数据,并通过界面的事件交互,将对应的输入参数提交给后台控制器进行处理.
  4. Controller(控制器):Controller 是用来处理用户输入数据,以及更新业务模型的部分.控制器中接收了用户与界面交互时传递过来的数据,并根据数据业务逻辑来执行服务的调用和更新业务模型的数据和状态.

5.Get 和 post 两种提交方式的区别有哪些?

  1. get方式会把参数暴露在url地址中,因此我们的数据不会得到保障,不安全;post方式是通过request boby传递重要参数,不会暴露在URL链接上,因此是安全的。
  2. get方式传递的数据有大小限制,post也有只不过比get传输的数据量要大;因此数据量小的时候使用get,数据量大的使用post方式。
  3. get响应比post快。GET产生一个TCP数据包;POST产生两个TCP数据包。(并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。)

6.Session 和 Cookie的区别?

  1. session存储在服务器端,cookie存储在客户端
  2. session比cookie安全,cookie是在浏览器存储,可以被伪造和修改
  3. cookie有容量限制,每个站点下的cookie也有个数限制
  4. session可以存储在redis中,数据库中,应用程序中,cookie只能存储在客户端
    补充:说一说session的工作原理?

客户端登录完成之后,服务器会创建对应的session,session创建完之后,会把对应的sessionID发送给客户端,客户端再存储在浏览器中。这样客户端每次访问服务器时,都会带着sessionID,服务器拿到sessionID之后,在内存中找到与之对应的session就可以正常工作了。

7.什么是 Servlet?

Servlet是运行在服务器端的一个java类。该类的功能是:获取客户端的请求并向客户端响应,它并不负责业务处理。

8.说一下您对 IOC 和 AOP 的理解?

  1. IOC(控制反转),将对象的创建及对象之间的依赖关系的维护权由对象自身交给外部容器(Spring容器)管理,这种管理权的转移我们称为控制反转。IOC的实现依赖DI(依赖注入)。通俗易通就是之前我们创建对象都需要new对象,现在我们通过XML或注解方式,Spring会为我们自动创建管理。
  2. AOP(面向切面编程),是一种编程思想。将系统中多处都要使用的通用功能(非核心业务),从各个部分分离出来,单独开发和维护,不再各个部分代码中调用。而是在系统运行中由外部容器将这些功能嵌入到各部分代码中。

9.String、StringBuffer、StringBuilder 有什么区别?

  1. 可变性分析:
    ①String被final修饰,因此是不可变的。
    ②StringBuffer、StringBuilder都继承AbstractStringBuilder类,底层使用char[] values存储,但没有final修饰,因此是可变的。
  2. 性能分析:
    ①每次对String类型进行修改时,都会生成一个新的String对象,性能和内存开销较大。
    ②StringBuffer、StringBuilder的操作时直接改变字符串对象本身的数据,不会创建新的对象,性能开销小
  3. 线程安全性:
    ①String不可变,是一个常量,因此是线程安全的。
    ②StringBuffer对其中的方法加了Synchronized同步锁或对调用的方法加了同步锁,因此线程安全。
    ③StringBuilder没有同步锁,线程不安全。

10.Java中的修饰符有哪些?

  1. 1.访问控制修饰符有public、private、protected、默认default 。可以修饰方法和变量

    2.抽象修饰符:abstract,可以修饰类和方法

    3.静态修饰符:static,修饰静态内部类、静态方法、静态属性、静态代码块

    4.最终修饰符:final,修饰的类不能被继承、修饰的方法不能被重写、修饰的变量不能更改

    5.可见性修饰符:voliate 可以防止指令重排

    6.瞬时修饰符:transient,修饰属性。表示在对象进行序列化时该属性不进行序列化,数据不存储

    7.线程同步修饰符:Synchronized,可以修饰方法和代码块

    8.本地方法修饰符:native,不由程序实现,通过本地方法库获取,一班有C、C++实现。

11.final、fianlly、finalize 的区别.?

  1. final是修饰符,修饰的类不能被继承、修饰的方法不能被重写、修饰的变量不能更改(基本数据不更改内容,引用类型不再分配内存空间)。
  2. finally是异常处理中的代码块,不论程序是否有异常,finally中的代码逻辑最终都会被执行。
  3. finalize是Object类的方法,在垃圾回收器回收对象时,会先调用被回收对象的finalize方法,以便垃圾收集时执行其他资源回收等操作。

12. List、Set、Map 三个集合的区别.?

  1. List集合是有序的,可重复的集合。实现类有ArrayList、LinkedList
  2. Set集合是无序,不能重复的集合。实现类有HashSet、TreeSet
  3. Map集合采用key-value形式存储数据,key不可以重复,但是value可以重复。实现类有HashMap、TreeMap

13.HashSet 如何检测重复.?

  1. 当对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,如果该位置没有元素,代表不重复
  2. 如果该位置有元素,判断该位置链表内的其他元素的hashcode值,如果没有相同的,代表不重复
  3. 如果存在相同的,会继续调用equals方法进行判断,如果相等,代表重复,否则不重复

14.HashMap 底层存储机制是什么.?

HashMap采用:数组+链表+红黑树作为存储结构,原理如下:

  1. HashMap中的每个元素都会被封装成一个Entry对象,该对象存有key value next hash
  2. HashMap底层是默认长度为16的数组,在数组中存储Entry对象
  3. 每次存储元素时,根据使用key值进行hash后计算hash值,通过(n-1)&hash得到这个元素在数组中的下标,如果该位置上存在其他元素(产生哈希冲突),那么在这个位置上的元素将以链表的形式存在,使用next指向新加的元素,形成链表
  4. JDK1.8开始,在解决冲突时有了较大的变化,当链表长度大于阈值(8)并且数组长度大于64,将链表转换为红黑树,以减少搜索时间。

15.什么是序列化与反序列化.?

  1. 序列化是将对象转换为字节流的过程
  2. 反序列化是将字节流转换为对象的过程
  3. 被序列化的对象需要实现Serializable序列化接口,该接口是标志性接口
  4. 为保证序列化和反序列化的稳定进行,建议在类上添加序列化版本号
  5. 可以使用transient关键字,指定成员变量不被序列化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值