java提问
⑴ java面试提问:什么是OOP
OOP是面向对象编程的英文全称(Object Oriented Programming)的英文的首字母,它表示的是一种计算机编程架构。关于面试中OOP的提问可以从其核心思想封装,继承,多态三方面展开,具体如下:
1.OOP之封装,封装主要是保证组件不会以不可预期的方式改变其他组件的内部状态,而只有在那些提供了内部状态改变方法的组件中得情况下,才可以访问其内部状态。
2.抽象完一个事物后,可能在特定的条件下,其本身的状态需要改变,但是这个改变并允许其他的事物来进行,这样的改变只允许这个事物认同的操作域来进行,可以是该事物本身,也可以是它信任的其他事物。这样我们就能对我们抽象完的每个事物进行自身数据的保护。
3.OOP之继承,继承指的是从已有类得到继承信息创建新类的过程。让抽象出来的事物具有本应该具有的联系。允许在现存的组件基础上创建子类组件,这统一和增强了另外两个特性——多态性和封装性。
4.一般来说就是用类来对组件进行分组,并且还可以定义新类为现存的类的扩展,这样则可将类组织成树形或网状结构,这体现了动作的通用性。
5.OOP之多态,从定义上来说,多态指的是组件的引用和类集会涉及到其它许多不同类型的组件,而且引用组件所产生的结果得依据实际调用的类型。
6.在实际应用体现为用一种解决方案来解决对一类问题,对于不同的事物解决途径和结果不同。在C++中实现多态性有三种方法,分别是:虚函数,函数重载和运算符重载。
(1)java提问扩展阅读:
OOP相对于面向过程编程的优点:
(1)OOP关注对象和角色,也就是事物的本质。
(2)OOP把客观世界中的对象抽象成对应的类; 2)通过类构造实例; 3)通过依赖、继承、实现等形式建立对象间的通信关系。
(3)OOP易于扩展,增加或改变业务的功能,无需大幅改动改变源代码。
(4)OOP易于建模,OOP就是软件架构师在计算机高级语言中对客观世界的抽象和再现,人们可以很好地理解和建立起计算机中的抽象模型。
参考资料来源:网络-OOP
⑵ 如果你是一个 Java 面试官,你会问哪些问题
1、谈谈你对 Java 平台的理解?“Java 是解释执行”,这句话正确吗?
考点分析:对于这类笼统的问题,你需要尽量表现出自己的思维深入并系统化,Java 知识理解得也比较全面,一定要避免让面试官觉得你是个“知其然不知其所以然”的人。毕竟明白基本组成和机制,是日常工作中进行问题诊断或者性能调优等很多事情的基础,相信没有招聘方会不喜欢“热爱学习和思考”的面试者。
回归正题,对于 Java 平台的理解,可以从很多方面简明扼要地谈一下,例如:Java 语言特性,包括泛型、Lambda 等语言特性;基础类库,包括集合、IO/NIO、网络、并发、安全等基础类库。对于我们日常工作应用较多的类库,面试前可以系统化总结一下,有助于临场发挥。
2、对比Hashtable、HashMap、TreeMap有什么不同?
考点分析:上面的回答,只是对一些基本特征的简单总结,针对Map相关可以扩展的问题很多,从各种数据结构、典型应用场景,到程序设计实现的技术考量,尤其是在Java 8里,HashMap本身发生了非常大的变化,这些都是经常考察的方面。
很多朋友向我反馈,面试官似乎钟爱考察HashMap的设计和实现细节,所以今天我会增加相应的源码解读,主要专注于下面几个方面:
理解Map相关类似整体结构,尤其是有序数据结构的一些要点。
从源码去分析HashMap的设计和实现要点,理解容量、负载因子等,为什么需要这些参数,如何影响Map的性能,实践中如何取舍等。
理解树化改造的相关原理和改进原因。
除了典型的代码分析,还有一些有意思的并发相关问题也经常会被提到,如HashMap在并发环境可能出现无限循环占用CPU、size不准确等诡异的问题。
我认为这是一种典型的使用错误,因为HashMap明确声明不是线程安全的数据结构,如果忽略这一点,简单用在多线程场景里,难免会出现问题。
理解导致这种错误的原因,也是深入理解并发程序运行的好办法。对于具体发生了什么,你可以参考这篇很久以前的分析,里面甚至提供了示意图,我就不再重复别人写好的内容了。
3、Java 提供了哪些 IO 方式? NIO 如何实现多路复用?
考点分析:在实际面试中,从传统 IO 到 NIO、NIO 2,其中有很多地方可以扩展开来,考察点涉及方方面面,比如:
基础 API 功能与设计, InputStream/