简介: 从前几篇分享中能够看出,阿里不愧是“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的时序图如下所示:

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是服务器端根据逻辑,发送一个状态码,告诉浏览器重新去请求的那个地址,浏览器会用刚才的所有参数重新发送新的请求。

java http get_「面小易-面经12」阿里巴巴Java方向面试题汇总(含答案)相关推荐

  1. Java面试题汇总含答案(2022最新版)

    Java常见面试题及答案,每道都是认真筛选出的高频面试题,助力大家能找到满意的工作! 下载链接:全部面试题及答案PDF 1.什么是 Class 文件? Class 文件主要的信息结构有哪些? Clas ...

  2. Java面试题汇总及答案2021最新(序列化含答案)

    Java面试题汇总及答案2021最新(序列化含答案) 为大家整理了2021最新的Java面试题及答案下载,这套Java面试题总汇已经汇总了Java基础面试到高级Java面试题,几乎涵盖了作为一个Jav ...

  3. 用友公司Java面试题(含答案)

    为什么80%的码农都做不了架构师?>>>    用友公司Java面试题(含答案) 1.Hashtable和HashMap有什么区别?   a.Hashtable是继承自陈旧的Dict ...

  4. Java面试题汇总及答案2021最新(ioNio)

    Java面试题汇总及答案2021最新(io&Nio) 最近给大家整理了一批Java关于io和nio的面试题一共15题,是20201最新时间整理的,并且都含答案打包下载. 适宜阅读人群 需要面试 ...

  5. java面笔试_java笔试手写算法面试题大全含答案

    java笔试手写算法面试题大全含答案 1.统计一篇英文文章单词个数. public class WordCounting { public static void main(String[] args ...

  6. JAVA高级面试题汇总及答案

    JAVA高级面试题汇总及答案 1.hashaMap原理源码 2.synchronize关键字1.6之后的优化,(偏向轻量级锁,重量级锁) 3.双亲委派是什么 4.类加载过程中可以动态改字节码吗? 5. ...

  7. 阿里巴巴历年经典面试题汇总:Java岗

    这个系列计划收集几百份朋友和读者的面经,作者合集方便查看,各位有面经屯着可以联系我哦 本系列历史文章: 学姐百度实习面经 学姐,来挑战字节最牛部门 最强阿里巴巴历年经典面试题汇总:C++研发岗 关于我 ...

  8. JAVA面试题和笔试题总汇(含答案)-联想lenovo

    ·         JAVA面试题和笔试题总汇(含答案)-联想lenovo · 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关 ...

  9. Java校招极大几率出的面试题(含答案)----汇总

    博主不才,专业电子信息,在一所普通一本里,在大二开始了自己的自学Java之路,然后图书馆成了我最喜欢待的地方,那里充满了很多自己的回忆.这三年,没有抱团,一个人,踩的坑自己填,好处可能就是什么问题都得 ...

最新文章

  1. Nginx深入了解-基础(一)
  2. 一文读懂全系列树莓派!
  3. oracle 10g rac数据库,oracle 10g rac安装报错集锦
  4. JavaScript玩转机器学习:张量(Tensors) 和 操作(operations)
  5. 简单php修改mysql数据类型_MySQL入门很简单—MySQL数据类型
  6. 功能强大的云打印组件-开始使用
  7. 算法(一):智能小车速度控制(PID模糊控制)
  8. AnyLogic学习
  9. 通达信与飞狐不同函数的替代
  10. 软件测试基本技术-XMind思维导图(全)
  11. 详解去中心化代币发行机制IDO:七大平台的特性与现状 |链捕手
  12. [OpenCV实战]1 基于深度学习识别人脸性别和年龄
  13. r语言进行自然语言处理_开始进行自然语言处理
  14. android蓝牙查看电池容量_Android查看电池电量的方法(基于BroadcastReceiver)
  15. 电脑多久重装一次系统?这几点不注意亏大了!
  16. 深入理解SHA系列加密算法
  17. WiFI Display介绍
  18. python123创意绘画_Turtle 创意绘画
  19. 下周发布三维声呐Coda EchoScope的第四部视频
  20. 一天一点raknet_一日一点RakNet(8)--第三方支持

热门文章

  1. CUDA学习(九十四)
  2. 创建生成级联上级字符的函数
  3. 算法导论-15.5-4
  4. 企业呼吁更多关注网络安全
  5. 为英文的windows 7打上简体中文语言包
  6. 如何隐藏scroll-Y纵向滚动条,并不影响内容滚动的方法
  7. 洛谷——P1657 选书
  8. easy-excel导入导出excel(待完善)
  9. Hive与数据库的异同
  10. 无core文件根据系统日志查找 程序core信息