Java面试题和解答(二)

时间:2021-10-27 01:07:23

1、字符流和字节流的区别,使用场景是什么,相关类有哪些

http://blog.csdn.net/zj8692286/article/details/12650731
2、线程安全的概念,实现线程安全的几种方法

基本概念:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

实现方法:

synchronized关键字:获得一个锁来防止其他线程在执行此操作的线程完成之前访问同一个方法;

volatile关键字:volatile只能保证多线程的内存可见性,不能保证多线程的执行有序性

基本原子数据类型:在java.util.concurrent.atomic包中提供

3、抽象类和接口的区别,使用场景

1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,即父类和派生类在概念本质上应该是相同的;interface表示的是"like-a"关系,并不要求interface的实现者和interface定义在概念本质上是一致的, 实现者仅仅是实现了interface定义的契约而已。
4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
7.接口中的方法默认都是 public,abstract 类型的。

4、hash算法的实现原理,hashcode的实现原理

http://blog.csdn.net/zj8692286/article/details/12651497

5、error和exception的区别,RuntimeException和非RuntimeException的区别

http://blog.csdn.net/zdwzzu2006/article/details/6568600
6、继承与组合的区别,使用场景

http://blog.csdn.net/iloveyin/article/details/8096428
7、使用静态工厂方法的好处和坏处

http://blog.csdn.net/beidou321/article/details/6488646
8、列出几种排序算法,他们是时间复杂度是多少

http://blog.sina.com.cn/s/blog_771849d301010ta0.html
9、数据库设计原则、范式

1.第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值
2.第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
3.第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

10、数据库常用的编码方式有哪几种

以mysql为例,常用的编码方式有utf8;gbk;gb2312;latin1,对应的Java中的编码为UTF-8;GBK;GB2312;ISO-8859-1;

11、http和https的区别

http是超文本传输协议,明文传输信息,https 则是具有安全性的SSL加密传输协议,要比http协议安全
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443

12、序列化的作用和应用场景

作用:为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来,Java提供这种“序列化”保存对象状态的机制。

使用场景:内存中的对象状态保存到一个文件中或者数据库中时候;用套接字在网络上传送对象的时候;通过RMI传输对象的时候。

13、spring的IOC、AOP的使用场景

http://blog.sina.com.cn/s/blog_624a352c0101fo9j.html
14、ajax是否能跨域请求,解决的办法

ajax不能跨域请求,由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源。解决方式有两种:1 采用JSONP,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问;2 iframe的方式,通过设置document.domain来实现。
15、解析xml的几种方法,他们的原理

1.DOM(Document Object Model)它把整个XML文档当成一个对象加载到内 存,不管文档有多大。它一般处理小文件
2.SAX(Simple API for XML)它的处理过程像流媒体。它不会把整个文档加载到内存,它是读一点处理一点。一般用它处理比较大的文件
3.JDOM包含了前两种方式
4.DOM4J也包含了前两种方式
其中DOM和SAX都是java的标准,也就是java本身就提供标准的API,不需要下载其他包,但是它的API都是一些底层的实现,不是很好用。所以有人在它们的基础上封装了一下,就有了DOM4j和JDOM。DOM4J性能最好,连SUN的JAXM也在用DOM4J.Hibernate也用DOM4J,DOM4J对Xpath也有很好的支持

16、内部跳转和外部跳转的区别,底层实现原理

http://blog.csdn.net/hjjk123/article/details/5311227

17、如果有和其他系统有接口调用,但其他系统还没开发完成,怎么进行单元测试

采用Mock测试,Mock对象也就是真实对象在调试期的替代品。什么时候需要Mock对象:

1.真实对象具有不可确定的行为(产生不可预测的结果,如股票的行情)
2.真实对象很难被创建(比如具体的web容器)
3.真实对象的某些行为很难触发(比如网络错误)
4.真实情况令程序的运行速度很慢
5.真实对象有用户界面
6.测试需要询问真实对象它是如何被调用的(比如测试可能需要验证某个回调函数是否被调用了)
7.真实对象实际上并不存在(当需要和其他开发小组,或者新的硬件系统打交道的时候,这是一个普遍的问题)

http://blog.csdn.net/chjttony/article/details/14522771

18、防止重复提交有哪几种方式

1.禁掉提交按钮。表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了
2.在提交后执行页面重定向
3. 在session中存放一个特殊标志。当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从session中删除它,然后正常处理数据。
如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。

19、数据库连接池的实现原理,请求怎么样去获取连接,关闭连接时,连接池是销毁连接还是回收连接

连接池在初始化的时候,生成多个可用的Connection存放在List中,当DAO获取连接时,关闭连接时,连接被回收

以上题目均收集自互联网,部分答案也来自互联网,版权均属于原作者