Java技术光明顶,这些阿里面试题你了解多少,你的功力有多深厚

Java技术光明顶,这些阿里面试题你了解多少,你的功力有多深厚

Java技术光明顶,这些阿里面试题你了解多少,你的功力有多深厚

 

前言:

我又来了,今天还是给大家分享一些阿里的面试题,为什么最近总是给大家推荐面试题呢,因为希望在金九银十这个跳槽季大家都可以拿到自己心仪的offer。阿里是“Java技术光明顶”,无论是从Java方向的面经数量、质量,还是问题难度上来看,想要拿到阿里Java研发岗位的Offer,都需要面试者拥有对于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的时序图如下所示:

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

以上的三个问题在之前网络相关的知识上更进一步,上升到了Java网络编程的相关知识,这部分意在考察面试者对于Java网络编程相关知识的掌握程度。

十一、谈谈Hibernate的理解,一级和二级缓存的作用,在项目中Hibernate都是怎么使用缓存的?

十二、谈谈Hibernate与iBatis的区别,哪个性能会更高一些

十三、对Spring的理解,项目中都用什么?怎么用的?对IOC、和AOP的理解及实现原理。

十四、描述Struts的工作流程

十五、关于Java内存模型,一个对象(两个属性,四个方法)实例化100次,现在内存中的存储状态,几个对象,几个属性,几个方法。

十六、反射讲一讲,主要是概念,都在哪需要反射机制,反射的性能,如何优化?

十七、线程同步,并发操作怎么控制?

由于篇幅限制,只有一部分带答案,需要领取这些面试题答案的私信我(面试)即可免费领取

Java技术光明顶,这些阿里面试题你了解多少,你的功力有多深厚

 

Java技术光明顶,这些阿里面试题你了解多少,你的功力有多深厚

 

总结:

今天就分享到这里,这些面试题,谁都保证不了全都会把,备战金九银十,高薪在等你,面试题的答案可以免费提供给大家,我都按专题分类做成了pdf,还有很多视频资料,花了我老多老多的时间了,所以老铁们给我点个赞把(图片只是一部分)

领取方式关注我的公众号Java周某人就可以免费领取了哦

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码看起来像是XML格式的,但是缺少了根节点,无法正确解析数据。可以将这段代码放入一个XML文件中,并添加根节点,例如: ``` <users> <user id="02" name="赵敏" password="wuji" address="光明顶" sex="女"/> </users> ``` 然后通过解析XML文件来读取数据。在Java中,可以使用JAXP库来解析XML文件,例如使用DOM Parser: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; public class ReadXMLFile { public static void main(String argv[]) { try { File inputFile = new File("input.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(inputFile); doc.getDocumentElement().normalize(); NodeList nList = doc.getElementsByTagName("user"); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; String id = eElement.getAttribute("id"); String name = eElement.getAttribute("name"); String password = eElement.getAttribute("password"); String address = eElement.getAttribute("address"); String sex = eElement.getAttribute("sex"); System.out.println("User id : " + id); System.out.println("Name : " + name); System.out.println("Password : " + password); System.out.println("Address : " + address); System.out.println("Sex : " + sex); } } } catch (Exception e) { e.printStackTrace(); } } } ``` 这个示例会输出XML文件中的每个用户的id、name、password、address和sex属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值