2018最新Java面试题大全

本文聚焦Java面试中的关键知识点,包括数据结构、设计模式、Spring MVC、多线程和GC等,深入讲解如hashCode方法、垃圾收集、数据库事务处理,并提供解决大数据量分页查询的策略。同时,介绍了MySQL的基本数据类型和HashMap的工作原理。通过对SpringMvc、Struts1和Struts2核心入口类的对比,帮助读者巩固基础。
摘要由CSDN通过智能技术生成

                                    补漏知识点

前言:补充了数据结构和算法、设计模式、spring MVC等内容并对很多知识点进行了深入的剖析,例如hashCode方法的设计、垃圾收集、并发编程、数据库事务等。

 

1

数据类型:Java中的基本数据类型只有8个:byte(8)、short(16)、int(32)、long(64)、float(32)、double(64)、

char(16,2字节,可放一个中文汉字)、boolean(64);除了基本类型(primitive type)和枚举类型

(enumeration type),剩下的都是引用类型(reference type)。

注:eg1:  float f=3.4,错误。双精度转单精度,下转型,需强转。float f =(float)3.4; 或者写成float f =3.4F;

eg2:       short s1 = 1; s1 = s1 + 1。错误,理由同上。short s1 = 1; s1 += 1。正确,因为s1+= 1;

相当于s1 = (short)(s1 + 1),其中有隐含的强制类型转换。


eg3:     long w=12345678901。错误。超出了int类型的取值范围。

 

eg4:    Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;

           System.out.println(f1 == f2);

           System.out.println(f3 == f4);

        注意上面的变量都是Integer引用,查阅Integer的内部类IntegerCache可知,如果整型字面量的值在-128

到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象,所以上面的面试题中

f1==f2的结果是true,而f3==f4的结果是false。

2

goto和const都是保留字

3

Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后

进行下取整。

4

用最有效率的方法计算2乘以8:2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)

5

(x.equals(y) == true),但却可有不同的hash code?  错误。如果两个对象相同,hashcode值一定要相同。

6

String 类是final类,不可以被继承。所有的包装类都是final修饰的类,都不能被继承。

7

Java中非静态内部类对象的创建要依赖其外部类对象(this.new 内部类 ; new 外部类.new 内部类).

8

Java 中会存在内存泄漏吗?

理论上Java因为有垃圾回收机制(GC)不会存在内存泄露问题。开发中,可能会存在无用但可达的对象,这些

对象不能被GC回收,因此也会导致内存泄露的发生。例如hibernate的Session(一级缓存)中的对象属于持久

态,垃圾回收器是不会回收这些对象的,然而这些对象中可能存在无用的垃圾对象,如果不及时关闭(close)

或清空(flush)一级缓存就可能导致内存泄露。

9

EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI(远程方法调用,详解:http://blog.csdn.net/a19881029/article/details/946566)、JAT(Java基础框架)等技术实现。

SessionBean和EntityBean的区别:对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上

运行的业务逻辑,可细分为Stateful Session Bean 与 Stateless Session Bean ; EntityBean是一种持久性对象,

它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。

StatefulBean和StatelessBean的区别:Stateful Session Bean 可以记录呼叫者的状态,每个使用者对应一个

实体,消耗 J2EE Server 较多的内存,可以维持使用者的状态;Stateless Session Bean不负责记录使用者状

态,可能数个使用者对应一个 Bean 的 Instance 在执行。

EJB与JAVA BEAN的区别:Java Bean 是可复用的组件,被容器所创建,Java Bean应具有一个无参的

构造器,还要实现Serializable接口用于实现Bean的持久性,不能被跨进程访问的;Enterprise Java Bean相当

于分布式组件。基于Java的远程方法调用(RMI)技术的,EJB容器是EJB组件的代理, EJB组件由容器所

创建和管理。客户通过容器来访问真正的EJB组件。

 

10

HashMap和Hashtable的区别:两者皆采用哈希算法。HashMap允许空键值,非线程安全。HashMap

Hashtable的contains方法去掉了,改成containsvalue和containsKey;Hashtable不允许空键值,线程安全。

11

sleep() 和 wait() 有什么区别:sleep()是Thread的方法,导致线程暂停执行指定时间,给执行机会给其他线程,

监控状态依然保持。调用sleep不会释放对象锁。

wait()是Object的方法,线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法

(或notifyAll)后本线程才进入对象锁定池,准备获得对象锁进入运行状态。

12

Heap [堆]和stack [栈]有什么区别:堆是栈的一个组成元素。栈是一种线形集合,其添加和删除元素的操作应

在同一段完成。栈按照后进先出的方式进行处理。

13.

forward 和redirect的区别:forward是服务器请求资源,服务器直接访问目标地址的URL。浏览器不知道发送

内容从哪来,地址栏不变 ;

redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址。地址栏改变。

 

14

JSP中动态INCLUDE与静态INCLUDE的区别:动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中

的变化,适合用于包含动态页面,并且可以带参数

静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面

15

什么时候用assert (断言)常用的调试方式。对程序的一条语句进行检查,保证其为true。若为false,说明程序

处于不正确状态,系统将给出警告或退出。assertion检查通常在开发和测试时开启。为了提高性能, 在软件

发布后,assertion检查通常是关闭的。

16

GC是什么? 为什么要有GC?   GC可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言

没有提供释放已分配内存的显示操作方法。对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收

调用下面的方法之一:System.gc() 或Runtime.getRuntime().gc() ,但JVM可以屏蔽掉显示的垃圾回收调用。

17

数据连接池的工作机制:J2EE 服务器启动时会建立一定数量的连接置于连接池中,需要时直接从连接池获取,

使用结束时归还连接池而不必关闭连接,从而避免频繁创建和释放连接所造成的开销。浪费了空间存储连接,

但节省了创建和释放连接的时间


为什么需要连接池: 由于创建连接和释放连接都有很大的开销(尤其是数据库服务器不在本地时,每次建立

连接都需要进行TCP的三次握手,释放连接需要进行TCP四次握手,造成的开销是不可忽视的)

18

SpringMVC执行原理:

1.用户向前端控制器(DispatherServlet)发起请求

2.前端控制器(DispatherServlet)解析URL,请求处理映射器(HandlerMapping)。

3.处理映射器(HandlerMapping)返回Handler配置的所有相关对象

4.前端控制器(DispatherServlet)根据获得的Handler,选择一个合适的HandlerAdapter

附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)。   

5.开始执行Handler(Controller),业务逻辑处理。

6.Handler处理完业务逻辑,返回ModelAndView对象给前端控制器(DispatherServlet)

7.视图解析器(ViewResolver)返回真正的视图对象(View),前端控制器根据模型数据和视图对象,进行

视图渲染。

8.最后将渲染的试图以(html/json/xml)的形式响应用户。

19

Struts2执行原理:

 

1.客户端初始化一个指向Servlet容器的请求(HttpServletRequest请求)

2.请求经过一系列过滤器(最先执行ActionContextCleanUp、最后执行FilterDispatcher)

3.FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet Request)请求,如果

ActionMapper决定需要调用某个ActionFilterDispatcher把请求的处理交给ActionProxy

4.ActionProxy通过Configuration Managerstruts.xml)询问框架的配置文件,找到需要调用的Action类。

5.ActionProxy创建一个ActionInvocation实例。ActionInvocation会根据配置加载相关的拦截器(Interceptor),并

通过代理模式调用Action。

6.Action执行完毕后,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result

20

 日期和时间:

1.得年月日、小时分钟秒 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值