「面小易-面经12」阿里巴巴Java方向面试题汇总(含答案)

简介: 从前几篇分享中能够看出,阿里不愧是“Java技术光明顶”,无论是从Java方向的面经数量、质量,还是问题难度上来看,想要拿到阿里Java研发岗位的Offer,都需要面试者拥有对于Java相关基础知识的深厚“内功”。本文中为大家汇总了部分阿里巴巴Java方向面试中的常见问题,希望能够帮助大家查漏补缺。

“我是面小易,机智又聪明。面试不眨眼,Offer不手软。”

我面小易又来啦,今天要和大家一起分享的是阿里巴巴Java方向面试中的一些常见问题,涉及了从Java内置的基础数据结构、常用的服务器知识、Java网络编程相关的知识,再到Java的内存模型、Java常用编程框架等各个方面的内容,希望能够帮助大家回顾Java的基础内容,进而查漏补缺,完善自身的知识体系。

(因为内容较多,进行了文章删减,阅读全文可以通过点击底部的“了解更多”直接完整浏览)

文章摘自:阿里云开发者社区


以下为正文

一、String, StringBuffer, StringBuilder的区别是什么?String为什么是不可变的?

1、String是字符串常量,StringBuffer和StringBuilder都是字符串变量。后两者的字符内容可变,而前者创建后内容不可变。

2、String不可变是因为在JDK中String类被声明为一个final类。

3、StringBuffer是线程安全的,而StringBuilder是非线程安全的。

补充说明:线程安全会带来额外的系统开销,所以StringBuilder的效率比StringBuffer高。如果对系统中的线程是否安全很掌握,可用StringBuffer,在线程不安全处加上关键字Synchronize。

二、Vector, ArrayList, LinkedList的区别是什么?

1、Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储。

2、List中的元素有序、允许有重复的元素,Set中的元素无序、不允许有重复元素。

3、Vector线程同步,ArrayList、LinkedList线程不同步。

4、LinkedList适合指定位置插入、删除操作,不适合查找;ArrayList、Vector适合查找,不适合指定位置的插入、删除操作。

5、ArrayList在元素填满容器时会自动扩充容器大小的约50%,而Vector则是100%,因此ArrayList更节省空间。

三、HashTable, HashMap, TreeMap的区别是什么?

1、HashTable线程同步,HashMap非线程同步。

2、HashTable不允许<键,值>有空值,HashMap允许<键,值>有空值。

3、HashTable使用Enumeration,HashMap使用Iterator。

4、HashTable中hash数组的默认大小是11,增加方式的old*2+1,HashMap中hash数组的默认大小是16,增长方式一定是2的指数倍。

5、TreeMap能够把它保存的记录根据键排序,默认是按升序排序。

面小易说:以上三个问题所涉及的都是Java语言中的一些比较高级的数据结构,从字符串相关到容器再到哈希表和树等数据结构,因此我们在学习Java语言的时候,也需要更加深入地去对比比较类似的数据结构的使用场景以及其优缺点。

四、Tomcat,Apache,JBoss的区别?

1、Apache是HTTP服务器,Tomcat是Web服务器,JBoss是应用服务器。

2、Apache解析静态的Html文件;Tomcat可解析jsp动态页面、也可充当

容器。

面小易说:对于服务器而言,在面试中可能并不会过多涉及,相对而言,面小易认为像是Liunx、Tomcat这些背后的原理可能更受面试官的青睐。

五、GET,POST请求之间的区别?

基础知识:HTTP的请求格式如下。

主要包含三个信息:1、请求的类型(GET或POST),2、要访问的资源(如resimga.jif),3、HTTP版本(http/1.1)

区别:

1、Get是从服务器端获取数据,Post则是向服务器端发送数据。

2、在客户端,Get方式通过URL提交数据,在URL地址栏可以看到请求消息,该消息被编码过;Post数据则是放在Html header内提交。

3、对于Get方式,服务器端用Request.QueryString获取变量的值;对用Post方式,服务器端用Request.Form获取提交的数据值。

4、Get方式提交的数据最多1024字节,而Post则没有限制。

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、blank line

4、request body

面小易说:上面的三个问题是网络编程的基础知识问题,作为Java工程师也需要掌握HTTP的知识,而如今HTTPS同样也成为了标准,也需要大家进一步了解。此外,相对于大家在课本或者课堂中所学习的HTTP 1.0/1.1这些协议而言,很多公司已经迈入了HTTP 2.0时代,因此两者之间的差别也需要我们进一步了解。

八、Servlet的生命周期

大致分为4部:Servlet类加载–>实例化–>服务–>销毁

Tomcat中Servlet的时序图如下所示:

「面小易-面经12」阿里巴巴Java方向面试题汇总(含答案)

1、Web Client向Servlet容器(Tomcat)发出HTTP请求。

2、Servlet容器接收Client端的请求。

3、Servlet容器创建一个HttpRequest对象,将Client的请求信息封装到这个对象中。

4、Servlet创建一个HttpResponse对象。

5、Servlet调用HttpServlet对象的service方法,把HttpRequest对象和HttpResponse对象作为参数传递给HttpServlet对象中。

6、HttpServlet调用HttpRequest对象的方法,获取Http请求,并进行相应处理。

7、处理完成HttpServlet调用HttpResponse对象的方法,返回响应数据。

8、Servlet容器把HttpServlet的响应结果传回客户端。

其中的3个方法说明了Servlet的生命周期:

1、init():负责初始化Servlet对象。

2、service():负责响应客户端请求。

3、destroy():当Servlet对象推出时,负责释放占用资源。

九、Statement与PreparedStatement的区别,什么是SQL注入,如何防止SQL注入?

1、PreparedStatement支持动态设置参数,Statement不支持。

2、PreparedStatement可避免如类似 单引号 的编码麻烦,Statement不可以。

3、PreparedStatement支持预编译,Statement不支持。

4、在SQL语句出错时PreparedStatement不易检查,而Statement则更便于查错。

5、PreparedStatement可防止SQL助于,更加安全,而Statement不行。

补充说明-什么是SQL注入以及应对策略: 通过SQL语句的拼接达到无参数查询数据库数据目的的方法。如将要执行的SQL语句为 select * from table where name = “+appName+”,利用appName参数值的输入,来生成恶意的SQL语句,如将[‘or’1’=‘1’] 传入可在数据库中执行。因此可以采用PrepareStatement来避免SQL注入,在服务器端接收参数数据后,进行验证,此时PrepareStatement会自动检测,而Statement不行,需要手工检测。

十、sendRedirect, foward区别

1、foward是服务器端控制页面转向,在客户端的浏览器地址中不会显示转向后的地址;sendRedirect则是完全的跳转,浏览器中会显示跳转的地址并重新发送请求链接。原理:forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后再将这些内容返回给浏览器,浏览器根本不知道服务器发送的这些内容是从哪来的,所以地址栏还是原来的地址。

2、redirect是服务器端根据逻辑,发送一个状态码,告诉浏览器重新去请求的那个地址,浏览器会用刚才的所有参数重新发送新的请求。

本文永久链接:https://www.16175.com/17236.html

发表评论

登录后才能评论