软件工程师面试技巧
【篇一:软件工程师面试题(含答案)】
一、你对mvc的理解,mvc有什么优缺点?结合struts,说明在一个web应用如何去使用?
答:
mvc设计模式(应用观察者模式的框架模式)
m: model(business process layer),模型,操作数据的业务处理层,并独立于表现层(independent of presentation)。
v: view(presentation layer),视图,通过客户端数据类型显示数据,并回显模型层的执行结果。 c: controller(control layer),控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图
  mvc框架的一种实现模型
模型二(servlet-centric):
jsp+servlet+javabean,以控制为核心,jsp只负责显示和收集数据,sevlet,连接视图和模型,将视图层数据,发送给模型层,javabean,分为业务类和数据实体,业务类处理业务数据,数据实体,承载数据,基本上大多数的项目都是使用这种mvc的实现模式。
strutsmvc框架(web application frameworks)
  struts是使用mvc的实现模式二来实现的,也就是以控制器为核心。
  struts提供了一些组件使用mvc开发应用程序:
model:struts没有提供model类。这个商业逻辑必须由web应用程序的开发者以javabean或ejb的形式提供
  view:struts提供了action form创建form bean, 用于在controller和view间传输数据。此外,struts提供了自定义jsp标签库,辅助开发者用jsp创建交互式的以表单为基础的应用程序,应用程序资源文件保留了一些文本常量和错误消息,可转变为其它语言,可用于jsp中。
controller:struts提供了一个核心的控制器actionservlet,通过这个核心的控制器来调用其他用户注册了的自定义的控制器action,自定义action需要符合struts的自定义action规范,还需要在l的特定配置文件中进行配置,接收jsp输入字段形成action form,然后调用一个action控制器。action控制器中提供了model的逻辑接口。
二、什么是webservice?
答:
webservice是一个soa(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过internet进行基于http协议的网络应用间的交互。
webservice实现不同语言间的调用,是依托于一个标准,webservice是需要遵守wsdl(web服务定义语言)/soap(简单请求协议)规范的。
webservice=wsdl+soap+uddi(webservice的注册)
soap是由soap的part和0个或多个附件组成,一般只有part,在part中有envelope和body。
web service是通过提供标准的协议和接口,可以让不同的程序集成的一种soa架构。
web service的优点
(1) 可以让异构的程序相互访问(跨平台)
(2) 松耦合
(3) 基于标准协议(通用语言,允许其他程序访问)
web service的基本原理
(1) service provider采用wsdl描述服务
(2) service provider 采用uddi将服务的描述文件发布到uddi服务器(register server)
(3) service requestor在uddi服务器上查询并 获取wsdl文件
(4) service requestor将请求绑定到soap,并访问相应的服务。
  三、什么是中间件?
中间件就是程序中可织入的,可重用的,与业务逻辑无关的各种组件。
中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统软件与用户的应用软件的中间。中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。
在众多关于中间件的定义中,比较普遍被接受的是idc表述的:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。
分类:数据访问中间件,远程调用中间件,消息中间件,交易中间件,对象中间件。 举例:
1,rmi(remote method invocations, 远程调用)
2,load balancing(负载均衡,将访问负荷分散到各个服务器中)
3,transparent fail-over(透明的故障切换)
4,clustering(集,用多个小的服务器代替大型机)
5,back-end-integration(后端集成,用现有的、新开发的系统如何去集成遗留的系统) 6,transaction事务(全局/局部)全局事务(分布式事务)局部事务(在同一数据库联接内的事务)
7,dynamic redeployment(动态重新部署,在不停止原系统的情况下,部署新的系统) 8,system management(系统管理)
9,threading(多线程处理)
10,message-oriented middleware面向消息的中间件(异步的调用编程)
jsp定义 11,component life cycle(组件的生命周期管理)
12,resource pooling(资源池)
13,security(安全)
14,caching(缓存)
  四、什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处? 答:(1) presentation layer(表示层)
(1) 表示逻辑(生成界面代码)
(2) 接收请求
(3) 处理业务层抛出的异常
(4) 负责规则验证(数据格式,数据非空等)
(5) 流程控制
(2) service layer(服务层/业务层)
(1) 封装业务逻辑处理,并且对外暴露接口
(2) 负责事务,安全等服务
(3) persistence layer(持久层)
(1) 封装数据访问的逻辑,暴露接口
(2) 提供方便的数据访问的方案(查询语言,api,映射机制等)
domain layer(域层)
(1) 业务对象以及业务关系的表示
(2) 处理简单的业务逻辑
(3) 域层的对象可以穿越表示层,业务层,持久层
软件分层结构使得代码维护非常方便,设计明确,各层独立,专注自己擅长的领域。
五、什么是oop?oop相对于面向过程编程有哪些优点?
oop,object-oriented programming,面向对象编程不同于面向过程编程:
(1)oop关注对象和角,也就是事物的本质
1)oop把客观世界中的对象抽象成对应的类;
2)通过类构造实例;
3)通过依赖、继承、实现等形式建立对象间的通信关系
(2)oop易于扩展,增加或改变业务的功能,无需大幅改动改变源代码
(3)oop易于建模,oop就是软件架构师在计算机高级语言中对客观世界的抽象和再现,人们可以很好地理解和建立起计算机中的抽象模型
  六、谈谈overload和override的区别。
答:
方法的重写overriding和重载overloading是java多态性的不同表现。重写overriding是父类与子类之间多态性的一种表现,重载overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(overloading)。overloaded的方法是可以改变返回值的类型。
  七、谈谈hashmap和hashtable的区别。
答:  hashmap是轻量级的(线程不安全的,效率高的)集合,hashtable是重量级的(线程安全的,效率低的)集合。
都属于map接口的类,实现了将惟一键映射到特定的值上。
hashmap 类没有分类或者排序。它允许一个 null 键和多个 null 值。
hashtable 类似于 hashmap,但是不允许 null 键和 null 值。它也比 hashmap 慢,因为它是同步的。
  八、请问abstract class和interface有什么区别?
答:
1) 接口没有任何的实现,而抽象类它可以有部分的实现也可以没有;
2) 如果需要复用或者共享部分代码,应该用抽象类而不是接口;
3) 继承无法解决类型的转换问题,接口就是为了解决这一问题而产生的(java的单继
承是接口产生的根本原因) 接口是一种抽象的第三方规范,跟对象没什么直接关系。
九、请问软件开发中的设计模式你会使用哪些?
答:我熟悉的设计模式有单例模式,dao模式,模板方法,工厂模式,委托代理模式,mvc模式等。
singleton模式主要作用是保证在java应用程序中,一个类class只有一个实例存在。 singleton模式一般形式:
定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getinstance方法获取对它的引用,继而调用其中的方法。
十、类的核心特性有哪些?
类具有封装性、继承性和多态性。
封装性:
类的封装性为类的成员提供公有、缺省、保护和私有等多级访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。
继承性:
类的继承性提供从已存在的类创建新类的机制,继承(inheritance)使一个新类自动拥有被继承类(父类)的全部成员。
多态性:
类的多态性提供类中方法执行的多样性,多态性有两种表现形式:重载和覆盖。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。