阿里巴巴Java方向面试题

一、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配置。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值