一、String, StringBuffer, StringBuilder的区别是什么?String为什么是不可变的?1、String是字符串常量,StringBuffer和StringBuilder都是字符串变量。后两者的字符内容可变,而前者创建后内容不可变。 补充说明:线程安全会带来额外的系统开销,所以StringBuilder的效率比StringBuffer高。如果对系统中的线程是否安全很掌握,可用StringBuffer,在线程不安全处加上关键字Synchronize。 二、Vector, ArrayList, LinkedList的区别是什么?1、Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储。 三、HashTable, HashMap, TreeMap的区别是什么?1、HashTable线程同步,HashMap非线程同步。 面小易说:以上三个问题所涉及的都是Java语言中的一些比较高级的数据结构,从字符串相关到容器再到哈希表和树等数据结构,因此我们在学习Java语言的时候,也需要更加深入地去对比比较类似的数据结构的使用场景以及其优缺点。 四、Tomcat,Apache,JBoss的区别?1、Apache是HTTP服务器,Tomcat是Web服务器,JBoss是应用服务器。 面小易说:对于服务器而言,在面试中可能并不会过多涉及,相对而言,面小易认为像是Liunx、Tomcat这些背后的原理可能更受面试官的青睐。 五、GET,POST请求之间的区别?基础知识:HTTP的请求格式如下。 区别: 六、Session, Cookie的区别是什么?1、Session由应用服务器维护的一个服务器端的存储空间;Cookie是客户端的存储空间,由浏览器维护。 七、HTTP 报文包含内容主要包含四部分: 面小易说:上面的三个问题是网络编程的基础知识问题,作为Java工程师也需要掌握HTTP的知识,而如今HTTPS同样也成为了标准,也需要大家进一步了解。此外,相对于大家在课本或者课堂中所学习的HTTP 1.0/1.1这些协议而言,很多公司已经迈入了HTTP 2.0时代,因此两者之间的差别也需要我们进一步了解。 八、Servlet的生命周期大致分为4部:Servlet类加载–>实例化–>服务–>销毁 Tomcat中Servlet的时序图如下所示: 1、Web Client向Servlet容器(Tomcat)发出HTTP请求。 其中的3个方法说明了Servlet的生命周期: 九、Statement与PreparedStatement的区别,什么是SQL注入,如何防止SQL注入?1、PreparedStatement支持动态设置参数,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的响应内容读取过来,然后再将这些内容返回给浏览器,浏览器根本不知道服务器发送的这些内容是从哪来的,所以地址栏还是原来的地址。 面小易说:以上的三个问题在之前网络相关的知识上更进一步,上升到了Java网络编程的相关知识,这部分意在考察面试者对于Java网络编程相关知识的掌握程度。 十一、谈谈Hibernate的理解,一级和二级缓存的作用,在项目中Hibernate都是怎么使用缓存的?Hibernate是一个开发的对象关系映射框架(ORM)。它对JDBC进行了非常对象封装,Hibernate允许程序员采用面向对象的方式来操作关系数据库。 Hibernate的优点: Hibernate的缺点: Hibernate有四种查询方式: Hibernate工作原理: Hibernate中的状态转移: 补充说明-Java是如何进入临时状态的:1、通过new语句创建一个对象时。2、刚调用Session的delete()方法时,从Session缓存中删除一个对象时。 持久化状态(Persisted) 补充说明-Java如何进入持久化状态:1、Session的save()方法。2、Session的load().get()方法返回的对象。3、Session的find()方法返回的list集合中存放的对象。4、Session的update().save()方法。 流离状态(Detached) 补充说明-Java如何进入流离状态:1、Session的close()。2、 Session的evict()方法,从缓存中删除一个对象。 具体如下图所示: Hibernate中的缓存主要有Session缓存(一级缓存)和SessionFactory缓存(二级缓存,一般由第三方提供)。 十二、谈谈Hibernate与iBatis的区别,哪个性能会更高一些1、Hibernate偏向于对象的操作达到数据库相关操作的目的;而iBatis更偏向于SQL语句的优化。 性能方面: 十三、对Spring的理解,项目中都用什么?怎么用的?对IOC、和AOP的理解及实现原理。Spring是一个开源框架,处于MVC模式中的控制层,它能应对需求快速的变化,其主要原因它有一种面向切面编程(AOP)的优势,其次它提升了系统性能,因为通过依赖倒置机制(IOC),系统中用到的对象不是在系统加载时就全部实例化,而是在调用到这个类时才会实例化该类的对象,从而提升了系统性能。这两个优秀的性能使得Spring受到许多J2EE公司的青睐,如阿里中使用最多的也是Spring相关技术。 Spring的优点: 十四、描述Struts的工作流程1、在web应用启动时,加载并初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,将它们存放到各个配置对象中。 面小易说:以上部分的相关问题考察面试者在实际软件开发中所使用的Java语言相关框架以及对于框架原理的了解程度,这一部分我们需要注意一些常见的框架,不仅需要知道它们是干什么的,还需要知道它们背后的原理,常会问到的框架有Spring Boot/Spring Cloud全家桶、Hibernate、MyBaits、Netty、Kafka等,最重要的还有阿里巴巴开源的Apache Dubbo框架。 十五、关于Java内存模型,一个对象(两个属性,四个方法)实例化100次,现在内存中的存储状态,几个对象,几个属性,几个方法。由于Java中new出来的对象都是放在堆中,所以如果要实例化100次,将在堆中产生100个对象,一般对象与其中的属性、方法都属于一个整体,但如果 属性和方法是静态的,就是用static关键字声明的,那么属于类的属性和方法永远只在内存中存在一份。十六、反射讲一讲,主要是概念,都在哪需要反射机制,反射的性能,如何优化?反射机制的定义: 反射的作用: 十七、线程同步,并发操作怎么控制?Java中可在方法名前加关键字syschronized来处理当有多个线程同时访问共享资源时候的问题。syschronized相当于一把锁,当有申请者申请该资源时,如果该资源没有被占用,那么将资源交付给这个申请者使用,在此期间,其他申请者只能申请而不能使用该资源,当该资源被使用完成后将释放该资源上的锁,其他申请者可申请使用。并发控制主要是为了多线程操作时带来的资源读写问题。如果不加以空间可能会出现死锁,读脏数据、不可重复读、丢失更新等异常。 并发操作可以通过加锁的方式进行控制,锁又可分为乐观锁和悲观锁。 悲观锁: 乐观锁: |
|
来自: 昵称QvKmxOqV > 《文件夹1》