Boss让咱们每人找10道Java笔试题

找了若干,觉得这10道还勉强凑合。

1.如果有一个特别大的访问量,到数据库上,怎么做优化 

DB设计,DBIO,SQL优化,Java优化  

2.创建线程有几种不同的方式?你喜欢哪一种?为什么?

有三种方式可以用来创建线程。
继承Thread类
实现Runnable接口
应用程序可以使用Executor框架来创建线程池

实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。

 

3.如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?

  不会,在下一个垃圾回收周期中,这个对象将是可被回收的。

 

4.PreparedStatement比Statement有什么优势?

 PreparedStatements是预编译的,因此,性能会更好。同时,不同的查询参数值,PreparedStatement可以重用。

5. JDK和JRE的区别是什么?

Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包含了执行applet需要的浏览器插件。Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。

 

6.Java虚拟机规范中将Java运行时数据分为六种。

Java虚拟机规范中将Java运行时数据分为六种。

程序计数器:是一个数据结构,用于保存当前正常执行的程序的内存地址。Java虚拟机的多线程就是通过线程轮流切换并分配处理器时间来实现的,为了线程切换后能恢复到正确的位置,每条线程都需要一个独立的程序计数器,互不影响,该区域为“线程私有”。

Java虚拟机栈:线程私有的,与线程生命周期相同,用于存储局部变量表,操作栈,方法返回值。局部变量表放着基本数据类型,还有对象的引用。

本地方法栈:跟虚拟机栈很像,不过它是为虚拟机使用到的Native方法服务。

Java堆:所有线程共享的一块内存区域,对象实例几乎都在这分配内存。

方法区:各个线程共享的区域,储存虚拟机加载的类信息,常量,静态变量,编译后的代码。

运行时常量池:代表运行时每个class文件中的常量表。包括几种常量:编译时的数字常量、方法或者域的引用。

 

7.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?

Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。

与此相对,方法覆盖是说子类重新定义了父类的方法。

方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。

 

8. 快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?

快速失败和安全失败是对迭代器而言的。

快速失败:当你在迭代一个集合的时候,如果有另一个线程正在修改你正在访问的那个集合时,就会抛出一个ConcurrentModification异常。

   在java.util包下的都是快速失败。

安全失败:你在迭代的时候会去底层集合做一个拷贝,所以你在修改上层集合的时候是不会受影响的,不会抛出ConcurrentModification异常。

在java.util.concurrent包下的全是安全失败的。

 

9、MySQL数据库为我们提供的四种隔离级别?

Serializable(串行化):可避免脏读、不可重复读、幻读的发生。

Repeatableread (可重复读):可避免脏读、不可重复读的发生。

Readcommitted (读已提交):可避免脏读的发生。

Readuncommitted (读未提交):最低级别,任何情况都无法保证。

 

10、String类为什么是final的?

答:主要是为了“效率” 和 “安全性” 的缘故。若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所以String被定义成final。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值