Java面试题

Java面试题

首先推荐一篇个人觉得还不错的Java面试题的博客——Java面试题全集[上]。其次由于有些题目是选择题内容,只进行了简单拓展,有些是借用了别人的解析,如有觉得不足者,请自行百度。再者,因为是笔者自己在笔试以及面试中遇到的一些题目整理,由于记忆比较零碎和本人比较懒,所以有心情想到之后便更新。

慢慢来,慢慢来,不急不急……嘘!

1、Servlet的生命周期

Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过Javax.servlet.Servlet接口中的init()、service()、destory()方法来表示。Servlet的生命周期包含四个阶段:1.加载和实例化。2.初始化。3.请求处理。4.服务终止。

2、关于泛型

1、创建泛型对象的时候,一定要指出类型变量T的具体类型。争取让编译器检查出错误,而不是留给JVM运行的时候抛出类不匹配的异常。
2、JVM如何理解泛型概念 —— 类型擦除。事实上,JVM并不知道泛型,所有的泛型在编译阶段就已经被处理成了普通类和方法。处理方法很简单,我们叫做类型变量T的擦除(erased) 。
3、总结:泛型代码与JVM ① 虚拟机中没有泛型,只有普通类和方法。 ② 在编译阶段,所有泛型类的类型参数都会被Object或者它们的限定边界来替换。(类型擦除) ③ 在继承泛型类型的时候,桥方法的合成是为了避免类型变量擦除所带来的多态灾难。 无论我们如何定义一个泛型类型,相应的都会有一个原始类型被自动提供。原始类型的名字就是擦除类型参数的泛型类型的名字。

3、关于异常关键字解释

Java语言中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。
-throw用于抛出异常。
-throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。
-try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。
-cacth用于捕获从try中抛出的异常并作出处理。
-finally语句块是不管有没有出现异常都要执行的内容。

4、关于volatile

一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:
1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
2)禁止进行指令重排序。
volatile只提供了保证访问该变量时,每次都是从内存中读取最新值,并不会使用寄存器缓存该值——每次都会从内存中读取。而对该变量的修改,volatile并不提供原子性的保证。由于及时更新,很可能导致另一线程访问最新变量值,无法跳出循环的情况,多线程下计数器必须使用锁保护。

5、谈谈Java集合

这个还是自行百度吧,不做误导,内容实在是有点多,改天有空整理单独一篇。简单也说不全面,并且还引出了一些其他问题,比如区别,优缺点,性能问题,HashMap存储结构、存储过程以及容量不足导致扩容问题、如何扩容,是否是线程安全等。怎么说呢,反正有空的话还是可以研究一下源码的,理解比较深刻,丫的,这特么不是废话么。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值