1. hashmap和treemap的区别
HashMap:数组方式存储key/value,线程非安全,允许null作为key和value,key不可以重复,value允许重复,不保证元素迭代顺序是按照插入时的顺序,key的hash值是先计算key的hashcode值,然后再进行计算,每次容量扩容会重新计算所以key的hash值,会消耗资源,要求key必须重写equals和hashcode方法
默认初始容量16,加载因子0.75,扩容为旧容量乘2,查找元素快,如果key一样则比较value,如果value不一样,则按照链表结构存储value,就是一个key后面有多个value;
TreeMap:基于红黑二叉树的NavigableMap的实现,线程非安全,不允许null,key不可以重复,value允许重复,存入TreeMap的元素应当实现Comparable接口或者实现Comparator接口,会按照排序后的顺序迭代元素,两个相比较的key不得抛出classCastException。主要用于存入元素的时候对元素进行自动排序,迭代输出的时候就按排序顺序输出
2. jsp的生命周期
编译阶段:
servlet容器编译servlet源文件,生成servlet类
初始化阶段:
加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法
执行阶段:
调用与JSP对应的servlet实例的服务方法
销毁阶段:
调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例
3.log4j日志怎么用
导入log4j的架包
创建log4j。properties配置文件
在程序中使用
先导包 import org.apache.log4j.Logger;
Logger log = Logger.getLogger(Testlog4j.class);
log.info("执行了m01...");
log4j 日志的级别
01.off 最高等级,用于关闭所有日志记录。
02.fatal 指出每个严重的错误事件将会导致应用程序的退出。
03.error 指出虽然发生错误事件,但仍然不影响系统的继续运行。
04.warm 表明会出现潜在的错误情形。
05.info 一般和在粗粒度级别上,强调应用程序的运行全程。
06.debug 一般用于细粒度级别上,对调试应用程序非常有帮助。
07.all 最低等级,用于打开所有日志记录。
4.spring的理解
Spring的优点:主要是根据它的IOC和AOP体现的。我感觉他就是把我们以前用到的工厂模式和代理模式进行了一个封装。
IOC就是控制翻转或是依赖注入,是spring的核心思想。 你就认为他是通过spring的bean工厂生产和管理bean的容器就行了,你自己不用去通过new生成你需要的对象。原来需要在调用类中new的东西,现在都是有这个IOC容器进行产生,同时,要是产生的是单例的bean,他还可以给管理bean的生命周期!
spring的IOC有三种注入方式 :
第一种是根据属性注入 也叫set方法注入;
第二种是根据构造方法进行注入;
第三种是根据注解进行注入,这种方式我认为比较好,方便,要是bean多的话,使用前两种方式会使
得配置文件过于臃肿。
aop就是面向切面的编程。比如说你每做一次对数据库操作,都要生成一句日志。如果,你对数据库的操作有很多类, 那你每一类中都要写关于日志的方法。但是如果你用aop,那么你可以写一个方法,在这个方法中有关于数据库操作的方法, 每一次调用这个方法的时候,就加上生成日志的操作。直白点说就是实现调用某个方法之前或/和之后,自动执行一系列自定义的语句
Spring的优点:主要是根据它的IOC和AOP体现的。我感觉他就是把我们以前用到的工厂模式和代理模式进行了一个封装。
简述Spring框架中IOC和AOP
IOC:控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;
第二层是依赖注入:将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系。他们的依赖关系只在使用的时候才建立。
AOP:面向切面,是一种编程思想,OOP的延续。将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。
Spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题。使代码重用度高、易于维护。不过AOP和IOC并不是spring中特有的,只是spring把他们应用的更灵活方便 。
5.struts2的理解
Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能。
Struts2提供了类型转换器,我们可以吧特殊的请求参数转换成需要的类型。
Struts2提供支持多种表现层技术,如JSP,freeMarker,Velocity
Struts2的输入校验可以对指定方法进行校验 提供了全局范围,包范围和Action范围的国际化资源文件实现
Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。
核心控制器 FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻
辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。
基本简要流程如下:
1、客户端浏览器发出HTTP请求。2、根据web.xml配置,该请求被 FilterDispatcher接收。3、根据struts.xml配置,找到需要调用的Action类和方法,
并通过IoC方式,将值注入给Aciton。4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。5、Action执行完毕,根据 struts.xml中的配置找到对应的返回结果result,
并跳转到相应页面。6、返回HTTP响应到客户端浏览器。
6.http的几种请求
HTTP协议是一个广泛应用的Internet协议。在其中有8个不同的请求方法:
GET POST HEAD PUT DELETE OPTIONS TRACE CONNECT
这8个方法中GET和POST最常见
下面是常见的HTTP状态码:
- 200 - 请求成功
- 301 - 资源(网页等)被永久转移到其它URL
- 404 - 请求的资源(网页等)不存在
- 500 - 内部服务器错误
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
7.session 和cookie
1.Cookie技术:
Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器,并保存在客户端浏览器的缓存中。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就
是用户各自的数据了。
2.Session技术:
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session
中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
不同场景下选用不同的域对象
- 在多个动态web资源中共享信息时,想到使用域对象;
- Context:信息是属于每个客户端共享的,例如访问次序;
- Session:信息是属于每个客户端独享的,例如购物车,用户登录;
- request:信息是属于一次性的内容,例如错误信息,项目中优先使用;
8.