软件工程师常见面试题
(1)什么是典型的软件三层结构?软件设计为什么要分层?
答:软件三层结构包括数据访问层、业务逻辑层和界面层。数据访问层主要看数据层里面有没有包含逻辑处理,主要完成各个对数据文件的操作。业务逻辑层主要负责对数据层的操作。界面层接收用户的请求以及数据的返回,为客户端提供应用程序的访问。
软件分层能使得代码维护非常方便、设计明确、各层独立,专注各自擅长的领域。
(2)谈谈你对MVC的理解?
答:MVC设计模式是应用观察者模式的框架模式,M(Model))表示模型,操作数据的业务处理层,并独立于视图层。V(View))表示视图,通过客户端数据类型显示数据,并回显模型层的执行结果。C(Controller)表示控制器,也就是视图层和模型层桥梁,控制数据的流向,接收视图层发出的事件,并重绘视图。
(3)类的核心特性有哪些?
答:类具有封装性、继承性和多态性。
封装性:类的封装性为类的成员提供公有、默认、保护和私有等多种访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。
继承性:类的继承性提供从已存在的类创建新类的机制,继承性使一个新类自动拥有被继承类(父类)的全部成员。
多态性:类的多态性提供类中方法执行的多样性,多态性有两种表现形式:重载和覆盖。
(4)请问类与对象有什么区别?
答:类就是某一种事物的一般性的集合体,是相同或相似的各个事物共同特性的一种抽象。在面向对象的概念中,对象是类的实例。对象与类的关系就像变量与数据类型的关系一样。
(5)什么是OOP?OOP相对于面向过程编程有哪些优点?
答:OOP(Object-Oriented Programming),意义为面向对象编程。
OOP不同于面向过程编程:
①OOP关注对象和角色,也就是事物的本质;OOP把客观世界中的对象抽象成对应的类;通过依赖、继承、实现等形式建立对象间的通信关系。
②OOP易于扩展,增加或改变业务的功能,无需大幅改动改变源代码。
③OOP易于建模,OOP就是软件架构师在计算机高级语言中对客观世界的抽象和再现,人们可以很好地理解和建立起计算机中的抽象模型。
(6)请问abstract class和interface有什么区别?
答:abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。在abstract class中可以有自己的数据成员,也可以有非abstract的成员方法,而在interface中,只能够有静态的不能被修改的数据成员。