一、String、StringBuffer、StringBuilder的区别是什么,String为什么是不可以改变的?
1、String是字符串常量,StringBuffer和StringBuilder都是字符串变量。后两者的字符内容可变,而前者创建后内容不可变。
2、String不可变是因为JDK中String类被声明为一个final类。
3、StringBuffer是线程安全的,而StringBuilder是非线程安全的。
补充说明:线程安全会带来额外的系统开销,所以StringBuffer的效率比StringBuffer高。如果对系统中的线程是否安全很掌握,可用StringBuffer,在线程不安全处加上关键字Synchronize。
二、Vector、ArrayList、LinkedList的区别是什么?
1、Vector、ArrayList都是类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储。
2、List中的元素有序、允许有重复的元素,Set中的元素无序,不允许有重复元素。
3、Vector线程同步,ArrayList、LinkedList线程不同步。
4、LinkedList适合指定位置插入、删除操作,不适合查找;ArrayList适合查找,不适合指定位置的插入、删除操作。
5、ArrayList在元素填满容器时会自动扩充容器大小的约50%,而Vector则时100%,因此ArrayList更节省空间。
三、HashTable,HashMap,TreeMap的区别是什么?
1、HashTable线程同步,HashMap非线程同步。
2、HashTable不允许<键,,值>有空值,HashMap使用Iteractor。
3、HashTable使用Enumeration,HashMap使用Iteractor。
4、HashTable中hash数组的默认大小是11,增加方式为old*2+1,HashMap中hash数组的默认大小是16,增长方式一定是2的指数倍。
5、TreeMap能够把它保存的记录根据键排列,默认是按升序排序。
四、Tomcat,Apache,JBoss的区别?
1、Apache是HTTP服务器,tomcat是web服务器,JBoss是应用服务器。
2、Apache解析静态的HTML文件,Tomcat可接续jsp动态页面,也可充当容器
五、Get,post请求之间的区别?
基础知识:http的请求格式如下:
主要包含三个信息:1、请求的类型(get或者post);2、言访问的资源(如resimge.jif)3、http版本(http/1.0)
1、get是从服务器段获取数据,post则是向服务器发送数据。
2、在客户端,get方式通过url提交数据,在url地址栏可以看到请求消息,该消息被编码过;post数据则是放在html header内提交。
3、对于get方式,服务器端用request.QueryString获取变量的值;对于post方式服务器端用request.form获取提交的数据值。
4、get方式提交的数据最多1024字节,而psot则没有限制。
5、get方式提交的参数及参数值在地址栏显示,不安全;post不会,比较安全。
六、Session、Cookie的区别是什么?
1、Session由应用服务器维护的一个服务器端的存储空间;Cookie是客户端的存储空间,由浏览器维护。
2、用户可以通过浏览器设置决定是否保存Cookie,而不能决定是否保存Session,因为Session是由服务器维护的。
3、Session中保存的是对象,Cookie保存的字符串。
4、Session和Cookie不能跨窗口使用,每打开一个浏览器系统会赋予一个SessionID,此时的SessionID不同,若要完成跨浏览器访问数据,可以使用application。
5、Session、Cookie都有失效时间,过期后自动删除,减少系统开销。
七、HTTP报文包含内容
主要包含四个部分:
1、request line
2、Header line
3、Black line
4、request body
八、servlet的生命周期
大致分为4步:servlet类加载->实例化->服务->销毁
其中 对个方法说明了servlet的生命周期:
1、init():负责初始化serlvet对象
2、service():负责响应客户端请求。
3、destroy():servlet对象推出时,负责释放占用资源。
九、statement与preparedStatement的区别,什么是SQL注入,如何防止注入?
1、preparedStatement支持动态设置参数,statement不支持。
2、preparedStatement可避免如 类似单引号的编码麻烦,statement不可以。
3、preparedStatement支持预编译,statement不支持。
4、在SQL语句出错时preparedStatement不宜检查,而statement则更便于查错。
5、preparedStatement可防止SQL注入,更加安全,而statement不行。
SQL注入:通过SQL语句的拼接达到不参查询数据库目的的方法。
防治对策:可以采用preparedStatement来避免SQL注入,在服务器端接收参数数据后,进行验证,此时preparedStatement会自动检测,而statement不行,需要手动检测。
十、对spring的理解,项目中都有什么,怎么用,对IOC和AOP的理解及实现原理
spring是一个开源框架,处于MVC模式中的控制层,它能应对需求快速的变化,其主要原因它有一种面向切面编程(AOP)的优势,汽车他提升了系统性能,因为通过依赖导致机制(IOC),系统中用到的对象不是在系统加载时就全部实例化,而是在调用到这个类时才会实例化该类的对象,从而提升了系统性能。这两个优秀的性能使得spring受到J2EE公司的青睐。
优点:
1、降低组件之间的耦合性,实现了软件按各层之间的解耦。
2、可以使用容易提供的众多服务,如事务管理、消息服务、日志记录等。
3、容器提供了AOP技术,利用它很容易实现如 期权拦截,运行期监控等功能。
AOP技术:动态代理模式,只需要实现JDK提供的动态代理接口InvocationHandler,所有被代理对象的方法都由InvocationHandler接管实际的处理任务。
IOC技术:java的反射机制来实现的。所谓的注入依赖,注入即组件之间的依赖关系有容器在运行期决定。两者依赖注入方法:1、构造函数;2、set方法
springBoot所具备的特征有:
1、可以创建按独立的审批人那个应用程序,并且给予期maven火gradle插件,可以创建按可执行的JARs和WARs;
2、内嵌Tomcat火Jetty等servlet容器;
3、提供自动配置的“starter”项目对象模型(POMS)以简化maven配置;
4、尽可能自动配置spring容器;
5、提供准备好的特性,如指标、健康检查和外部化配置;
6、绝对没有代码生成,不需要xml配置。