1、Java 面试宝典(高级篇 )1.前端面试经典题目1.说明 HTML 文档中 DTD 的意义和作用(酷讯)DTD,文档类型定义,是一种保证 html 文档格式正确的有效方法,在解析网页时,浏览器将使用 DTD 来检查页面的有效性(是否符合规范,元素和标签使用是否正确)并且采取相应的措施。同时它还会影响浏览器的渲染模式(工作模式)。2.准确的指出以下代码的显示结果(酷讯)a position:relative; height:200px; width:500px; border:solid 1px #000; background:#FFF;#b,#cposition:absolute; wid
2、th:250px; height:90px;#btop:30px; left:50px; background:#FF0000; z-index:1;#cbottom:30px; right:50px; background:#0000FF;结果如图所示:3. 指出以下代码的显示效果adbc4.如何显示没有下划线的超链接?()A. a text-decoration:noneB. a text-decoration:no underlineC. a underline:noneD. a decoration:no underline答案:A5.请问,div 和 span, p 标签三者间的区别
3、 (YG)从语义化的角度来讲,div 和 span 标签对于它们包含的元素是没有意义的,而 p 标签则是一个语义化标签,表示一个段落。所以 div 和 span 一般是用来布局。从显示的角度来讲,span 是内联的,用在一小块的内联 HTML 中,前后不断行,div 元素是块级的,等同于其前后有断行,p 元素是块级的,前后断行,而且还要再隔一行,相当于断两行。6.CSS 中 class 和 id 的区别是?id:每个页 ID 是唯一的不能重复。 class:可以设置多个 class 为同一个值。7.实现框架的标签 举例说明8.写出以下 html 标签的含义:input form script
4、style table b img 标签用于搜集用户信息。根据不同的 type 属性值,输入字段拥有很多种形式。输入字段可以是文本字段、复选框、掩码后的文本控件、单选按钮、按钮等等。标签用于为用户输入创建 HTML 表单。表单能够包含 input 元素,比如文本字段、复选框、单选框、提交按钮等等。标签用于定义客户端脚本,比如 JavaScript。script 元素既可以包含脚本语句,也可以通过 src 属性指向外部脚本文件。标签用于为 HTML 文档定义样式信息。标签定义 HTML 表格。简单的 HTML 表格由 table 元素以及一个或多个 tr、 th 或 td 元素组成。呈现粗体文本
5、效果。元素向网页中嵌入一幅图像。9.CSS 中 link 和import 的区别是?答: (1) link 属于 HTML 标签,而import 是 CSS 提供的; (2) 页面被加载的时,link 会同时被加载,而import 引用的 CSS 会等到页面被加载完再加载; (3) import 只在 IE5 以上才能识别,而 link 是 HTML 标签,无兼容问题; (4) link 方式的样式的权重 高于 import 的权重. 10.用 css、html 编写一个两列布局的网页,右侧固定宽度 200px,左侧自适应 11.看以下代码:文件名称:forward.jsp跳转 如果运行以上
6、jsp 文件,地址栏的内容为A.http:/127.0.0.1:8080/myjsp/forward.jspB.http:/127.0.0.1:8080/myjsp/index.jspC.http:/127.0.0.1:8080/myjsp/index.htmD.http:/127.0.0.1:8080/myjsp/forward.htm答: A12.基于以下 HTML 结构,以下关于 main1.css 和 main2.css 的描述有哪些是正确的?A.main1.css 和 main2.css 同时开始加载,先加载完成的优先解析B.如果 main1.css 和 main2.css 中有相同
7、的选择器规则,那么 main2.css 中的规则将覆盖 main1.css 的规则C.main2.css 只有在 main1.css 加载并解析后,才开始加载D.如果 main1.css 和 main2.css 中有相同的选择器规则,那么 main2.css 中的规则将被忽略答:A13. 下列 html 语义化标签中, 描述存在错误的是A.强调文字,长文本引用B.强调文字,文章栏目标题C.超链接,文章段落D.定义文档中的节,导航E.有序列表。无序列表答: E14.设置文字颜色应使用属性A.font-family B.font-colorC.color D.font答: C15.以下标签,错误的
8、是A.text-left 用于左对齐B.text-center 水平居中对齐C.text-vertical 垂直居中对齐D.text-uppercase 可以将文字全部大写答: C16.有一个元素,需要在 pc 端显示而在手机端隐藏,需要使用的方法是?A.visible-xs-8 hidden-md B.visible-md-8 hidden-xsC.visible-md-8 hidden-sm D.visible-sm-8 hidden-md答: BJavascript1.解释下面语句的意思:document.form“formName“.submit。(百度)答:获取 name 为 for
9、mName 的表单并将该表单数据提交到服务器。但这行代码是不能运行的,有两处错误,一是通过表单名称来获取表单得到时候,应该写成 document.formsformName,提交表单事件使用 submit 方法,需要加上括号.2.简单说一下浏览器本地存储是怎样的答:在较高版本的浏览器中,js 提供了 sessionStorage 和 globalStorage。在HTML5 中提供了 localStorage 来取代 globalStorage。 html5 中的 Web Storage 包括了两种存储方式:sessionStorage 和localStorage。 sessionStorag
10、e 用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage 不是一种持久化的本地存储,仅仅是会话级别的存储。 而 localStorage 用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。 3.javascript 中 document.getElemenById 的返回值的类型为()A.Array B.Object C.String D.Function答:B4.下面给定的代码中, myFunc() 返回什么? var foo=foo; var bar=bar; functio
11、n myFunc() return foo+bar; A.undefined B.foobar C.foo+bar D.NaN答:C5.哪一个是 javascript 中 array 的正确写法?A.var txt = new Array(“tim“,“kim“,“jim“)B.var txt = new Array=“tim“,“kim“,“jim“C.var txt = new Array:1=(“tim“)2=(“kim“)3=(“jim“)D.var txt = new Array(1:“tim“,2:“kim“,3:“jim“)答: A6.下面程序的显示结果是?A.hi B.hi h
12、ello C.hello D.不显示答: A7.请阅读以下代码:问题:span 标签的 width 和 height 分别为多少?A.width = 0px,height = 0pxB.width = 400px,height = 200pxC.width = 100px,height = 50pxD.width = 0px,height = 200px答: D8.JS 表单弹出对话框函数是?获得输入焦点函数是?弹出对话框函数:alert(), prompt(), confirm() 获得输入焦点函数:focus()9.JS 的转向函数是? 怎么引入一个外部 JS 文件?转向使用 window
13、.location.href = “ 引入外部 js 使用 10.有下面语句: 编写代码,当鼠标划过文本框,自动选中文本框中的内容。(百度)11.设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示。(新浪)主窗口:弹出窗口:12.判断以下代码是否正确,如果有错,请指出错误,如果正确,请指出运行结果var arr = new Array(new Array(1,2,3,4),new Array(“abc“, “def“, “xyz“),);for(i = 0; i “18.js 中网页前进和
14、后退的代码前进: history.forward();或者 history.go(1); 后退: history.back (); 或者 history.go(-1);实现点击按钮弹出窗口的代码 (YG)document.getElementById( button ).onclick = function() window.open (page.html);其中,button 是按钮的 id,page.html 是要弹出的窗口页面。JavaScript 包括那些基本数据类型?(小米)JavaScript 中包括 5 种基本数据类型,分别是 Number,String,Boolean,Null
15、 和 Undefined。2.Web1.谈谈对 mvc 的认识由模型(model), 视图(view), 控制器(controller)完成的应用程序由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;MVC 是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用 MVC 应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。视图是用户看到并与之交互的界面。模型表示企业数据和业务规则。控制器接受用户的输入并调用模型和视图去完成用户的需求。MVC 的优点:低耦合性、高重用性和可适用性、较低的生命周期成本、快速的部署、可维护性、可扩展性,有利于软件工程化管理M
16、VC 的缺点:没有明确的定义,完全理解 MVC 并不容易。不适合小型规模的应用程序。2.什么是 JSP 动作(JSP action)?JSP 动作以 XML 语法的结构来控制 Servlet 引擎的行为。当 JSP 页面被请求的时候,JSP 动作会被执行。它们可以被动态的插入到文件中,重用 JavaBean 组件,转发用户到其他的页面,或者是给 Java 插件产生 HTML 代码。下面列出了可用的动作:jsp:include-当 JSP 页面被请求的时候包含一个文件。jsp:useBean-找出或者是初始化 Javabean。jsp:setProperty-设置 JavaBean 的属性。js
17、p:getProperty-获取 JavaBean 的属性。jsp:forward-把请求转发到新的页面。jsp:plugin-产生特定浏览器的代码。3.什么是 JSP 指令(Directive) ?JSP 中有哪些不同类型的指令?Directive 是当 JSP 页面被编译成 Servlet 的时候,JSP 引擎要处理的指令。Directive 用来设置页面级别的指令,从外部文件插入数据,指定自定义的标签库。Directive 是定义在 之间的。下面列出了不同类型的 Directive:包含指令(Include directive):用来包含文件和合并文件内容到当前的页面。页面指令(Page
18、 directive):用来定义 JSP 页面中特定的属性,比如错误页面和缓冲区。Taglib 指令: 用来声明页面中使用的自定义的标签库4.JSP 有什么优点?下面列出了使用 JSP 的优点:JSP 页面是被动态编译成 Servlet 的,因此,开发者可以很容易的更新展现代码。JSP 页面可以被预编译。JSP 页面可以很容易的和静态模板结合,包括:HTML 或者 XML,也可以很容易的和产生动态内容的代码结合起来。开发者可以提供让页面设计者以类 XML 格式来访问的自定义的 JSP 标签库。开发者可以在组件层做逻辑上的改变,而不需要编辑单独使用了应用层逻辑的页面。5.sendRedirect
19、()和 forward()方法有什么区别?sendRedirect()方法会创建一个新的请求,而 forward()方法只是把请求转发到一个新的目标上。重定向(redirect)以后,之前请求作用域范围以内的对象就失效了,因为会产生一个新的请求,而转发(forwarding)以后,之前请求作用域范围以内的对象还是能访问的。一般认为 sendRedirect()比 forward()要慢。6.什么是 cookie?session 和 cookie 有什么区别? cookie 是 Web 服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个 Web 服务器存储 cookie。以后浏览器在给特
20、定的 Web 服务器发请求的时候,同时会发送所有为该服务器存储的 cookie。下面列出了 session 和 cookie 的区别:无论客户端浏览器做怎么样的设置,session 都应该能正常工作。客户端可以选择禁用 cookie,但是,session 仍然是能够工作的,因为客户端无法禁用服务端的session。在存储的数据量方面 session 和 cookies 也是不一样的。session 能够存储任意的 Java 对象,cookie 只能存储 String 类型的对象。7.如何知道是哪一个客户端的机器正在请求你的 Servlet? ServletRequest 类可以找出客户端机器的
21、 IP 地址或者是主机名。getRemoteAddr()方法获取客户端主机的 IP 地址,getRemoteHost()可以获取主机名。8.doGet()方法和 doPost()方法有什么区别? doGet:GET 方法会把名值对追加在请求的 URL 后面。因为 URL 对字符数目有限制,进而限制了用在客户端请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。doPOST:POST 方法通过把请求参数值放在请求体中来克服 GET 方法的限制,因此,可以发送的参数的数目是没有限制的。最后,通过 POST 请求传递的敏感信息对外部客户端是不可见的。9.解释下 Serv
22、let 的生命周期。 对每一个客户端的请求,Servlet 引擎载入 Servlet,调用它的 init()方法,完成Servlet 的初始化。然后, Servlet 对象通过为每一个请求单独调用 service()方法来处理所有随后来自客户端的请求,最后,调用 Servlet(译者注:这里应该是 Servlet 而不是 server)的 destroy()方法把 Servlet 删除掉。10.什么是 Servlet?Servlet 是用来处理客户端请求并产生动态网页内容的 Java 类。Servlet 主要是用来处理或者是存储 HTML 表单提交的数据,产生动态内容,在无状态的 HTTP 协
23、议下管理状态信息。11.jsp 有哪些内置对象?作用分别是什么?(至少三个)1、request 对象 客户端请求,此请求会包含来自 GET/POST 请求的参数通过它才能了解到客户的需求,然后做出响应。2、response 对象 响应客户请求的有关信息3、session 对象 它指的是客户端与服务器的一次会话,从客户端连到服务器的一个 WebApplication 开始,直到客户端与服务 器断开连接为止。4、out 对象 它是 JspWriter 类的实例,是向客户端输出内容常用的对象5、page 对象 它是指向当前 JSP 页面本身,有点象类中的 this 指针,它是 Java.lang.O
24、bject 类的实例6、application 对象 它实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭7、exception 对象 它是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。8、pageContext 对象 它提供了对 JSP 页面内所有的对象及名字空间的访问9、config 对象 它是在一个 Servlet 初始化时,JSP 引擎向它传递信息用的12.谈谈对 XML 的理解?说明 Web 应用中 Web.xml 文件的作用?可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。什么是可扩展标记语言?可
25、扩展标记语言是一种很像超文本标记语言的标记语言。它的设计宗旨是传输数据,而不是显示数据。它的标签没有被预定义。您需要自行定义标签。它被设计为具有自我描述性。它是 W3C 的推荐标准。web.xml 文件是用来配置:欢迎页、servlet、filter 等的。当你的 web 工程没用到这些时,你可以不用 web.xml 文件来配置你的 web 工程。13.什么是注解?定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是 JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释
26、。作用分类:编写文档:通过代码里标识的元数据生成文档【生成文档 doc 文档】 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】14.servlet 中转发和重定向的区别 ?Servlet 中页面的跳转有两种方式:转发和重定向。1、转发和重定向的区别转发是服务器行为,重定向是客户端行为。转发是浏览器发生了一次请求,重定向至少是两次请求。转发地址栏中的 url 不会发生改变,重定向地址栏中的 url 会发生改变。转发因为是一次请求,两次跳转之间传输信息不会丢失,而重定向两次跳转会丢失传输信息。转发只能将请
27、求跳转到同一个 web 应用中的页面,重定向可以指向任何页面,包括同一个 web 应用中的页面,同一个站点中的页面,其他站点的页面。2、传递给 HttpServlet Response.sendRedirect 方法的相对 URL 以“/” 开头,它是相对于整个 WEB 站点的根目录;如果创建 RequestDispatcher 对象时指定的相对 URL 以“/”开头,它是相对于当前 WEB 应用程序的根目录。15.struts2 如何解决重复提交问题 ?token 在 struts 配置文件中增加 token 拦截器。16.struts2 国际化在 struts2 中是使用了拦截器来实现国际
28、化。struts2 的国际化分为三部分:1.Action 范围,这种范围是用 Action 的实现类的类名来作为前缀_语言名称_国家地区名(大写).properties.2.包范围,包范围是用 package 作为前缀_语言名称_国家地区名(大写).properties。3.全局范围,全局范围的前缀默认的是 application,可以通过 xml 配置文件配置常量(使用 constant 标签注册 i18l 拦截器) 来指定前缀,前缀_语言名称_国家地区名(大写).properties。国际化实现的原理:通过 i18n 拦截器获得请求参数 requestlocale 的值(zh 或者是 en
29、)并把当前的值转化为 locale 对象,把 locale 对象存在 ww_trans_i18n_locale 的 session 作用域中,根据 struts2的请求处理流程,拦截器只会在进入 action 的时候才会调用,所有我们一般把对 jsp 的访问转化为对 action 的访问。17.hibernate 延迟加载?延迟加载(lazy load)也叫懒加载,它是 hibernate 为提高程序执行效率而提供的一种机制,即只有真正使用该对象的数据时才会创建。Hibernate 中主要通过代理(proxy)机制来实现延迟加载的。具体过程:Hibernate 从数据库获取某一个对象数据时、获
30、取某一个对象的集合属性值时,或获取某一个对象所关联的另一对象时,由于没有使用该对象的数据(除标识符值外),Hibernate 并不从数据库加载真正的数据,而只是为该对象创建一个代理对象来代表这个对象,这个对象上的所有属性都为默认值;只有在真正需要使用该对象的数据时才创建这个真实对象,真正从数据库中加载它的数据。这样在某些情况下,就可以提高查询效率。Hibernate 中默认采用延迟加载的情况主要由以下几种:(1)当调用 Session 上的 load()方法加载一个实体时,会采用延迟加载。(2)当 Session 加载某个实体时,会对这个实体中的集合属性值采用延迟加载。(3)当 Session
31、 加载某个实体时,会对这个实体所单端关联的另一个实体对象采用延迟加载。18.OGNL 是什么? 你在项目中如何使用它OGNL 是:对象图形导航语言。原 ognl 是单个对象的,在 struts2 的应用是多个对象的,struts2 的类型转换也是通过 ognl 来实现的。Struts2 中默认的表达式语言就是 ognl,struts2 的取值设值都是通过 ognl 来实现的,struts2 要依靠它的标签才可以使用 ognl。相对于 jstl 或者其他表达式语言,它有如下优势:1 能够调用对象实例的方法2 能够调用类的静态方法3 操作集合对象4 访问 Ognl 上下文取值时 ognl 有三个参
32、数:1 表达式,2 ognl 的上下文(map),3 对象实例(值栈)。如果表达式带# 号是从上下文中 (map)拿值,否则是从值栈中拿值。设值时有四个参数:1 表达式,2 ognl 的上下文(map),3 对象实例,4 设入的值如果表达式带# 号是把值设入上下文中 (map),否则是把值设入值栈中。在 struts2 中 ognl 的实现关系:ActionConetxt。ognl 3 个常用的符号 # $ %# 1 构造 map,list 集合。2 取 ognl 上下文的值。3 用来过滤集合。$ 1 在校验框架中取资源文件中的值。2 可以在配置文件中传递参数。% 使用百分号可以进行转义。19
33、.Spring 有哪些优点?轻量级:Spring 在大小和透明性方面绝对属于轻量级的,基础版本的 Spring 框架大约只有 2MB。控制反转(IOC):Spring 使用控制反转技术实现了松耦合。依赖被注入到对象,而不是创建或寻找依赖对象。面向切面编程(AOP) : Spring 支持面向切面编程,同时把应用的业务逻辑与系统的服务分离开来。容器:Spring 包含并管理应用程序对象的配置及生命周期。MVC 框架: Spring 的 web 框架是一个设计优良的 web MVC 框架,很好的取代了一些 web 框架。事务管理:Spring 对下至本地业务上至全局业务(JAT) 提供了统一的事务
34、管理接口。异常处理:Spring 提供一个方便的 API 将特定技术的异常( 由 JDBC, Hibernate, 或 JDO 抛出)转化为一致的、Unchecked 异常。20.Hibernate 中 get 和 load 有什么不同之处? 把 get 和 load 放到一起进行对比是 Hibernate 面试时最常问到的问题,这是因为只有正确理解 get()和 load()这二者后才有可能高效地使用 Hibernate。get 和load 的最大区别是,如果在缓存中没有找到相应的对象, get 将会直接访问数据库并返回一个完全初始化好的对象,而这个过程有可能会涉及到多个数据库调用;而 lo
35、ad方法在缓存中没有发现对象的情况下,只会返回一个代理对象,只有在对象 getId()之外的其它方法被调用时才会真正去访问数据库,这样就能在某些情况下大幅度提高性能。21.什么是 Ajax?Ajax 的原理是什么?Ajax 的核心技术是什么?Ajax 的优缺点是什么?Ajax 是 Asynchronous JavaScript and XML 的缩写,是 JavaScript、XML、CSS、DOM 等多个技术的组合。Ajax 的工作原理是一个页面的指定位置可以加载另一个页面所有的输出内容,这样就实现了一个静态页面也能获取到数据库中的返回数据信息了。所以 Ajax 技术实现了一个静态网页在不刷
36、新整个页面的情况下与服务器通信,减少了用户等待时间,同时也从而降低了网络流量,增强了客户体验的友好程度。Ajax 的核心技术是 XMLHttpRequest,它是 JavaScript 中的一个对象。Ajax 的优点是:(1).减轻了服务器端负担,将一部分以前由服务器负担的工作转移到客户端执行,利用客户端闲置的资源进行处理;(2).在只局部刷新的情况下更新页面,增加了页面反应速度,使用户体验更友好。Ajax 的缺点是不利于 SEO 推广优化,因为搜索引擎无法直接访问到 Ajax 请求的内容。22.ActionContext 是用来干什么的ActionContext 是 Action 的上下文。
37、通过 ActionContext 这个类来可以获得 :request,application,session,Locale、ValueStack,ConversionErrors1 可以获得 servlet 的 api:request,application ,session。2 进行国际化:获得语言环境 Locale。3 收集错误信息:ConversionErrors。4 有个值栈来装 action 实例与创建的模型驱动的实例:ValueStack。5 ActionContext 是线程安全的- 用本地线程实现的。23.如果我的网站用的 utf-8 编码,为防止乱码出现,都需要注意哪些地方?
38、1)数据库中库和表都用 utf8 编码2)java 连接 mysql,指定数据库编码为 utf8 ;3)java 文件指定编码为 utf-84)网站下所有文件的编码为 utf85)html 文 件 指 定 编 码 为 utf-824.hibernate 的三种状态之间如何转换当对象由瞬时状态(Transient)一 save()时,就变成了持久化状态; 当我们在 Session 里存储对象的时候,实际是在 Session 的 Map 里存了一份, 也就是它的缓存里放了一份,然后,又到数据库里存了一份,在缓存里这一份叫持久对象(Persistent) 。 Session 一 Close()了,它
39、的缓存也都关闭了 ,整个 Session 也就失效了,这个时候,这个对象变成了游离状态(Detached),但数据库中还是存在的。 当游离状态(Detached)update()时,又变为了持久状态(Persistent)。 当持久状态(Persistent)delete()时,又变为了瞬时状态(Transient), 此时,数据库中没有与之对应的记录。25.简述 Tcp 协议的三次握手过程。 (亿邮)TCP 是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:第一次握手:建立连接时,客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SEND 状态,等待
40、服务器确认;第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=j+1),同时自己也发送一个 SYN 包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;第三次握手:客户端收到服务器的 SYNACK 包,向服务器发送确认包 ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据。26.什么是拦截器 说说 Struts2 用拦截器来干什么 说出 6 个拦截器来在访问类的某个方法或者属性之前执行,拦截的是 Action 的请求,进行拦截然后在方法的执行前或者之后加
41、入某些操作,如:国际化,权限,效验等与源代码无关的操作。国际化,表单重复提交,类型转换,自动装配,数据封装,异常处理,模型驱动,请求参数,处理类型转换错误,日志拦截器。27.写出你所知道的 XML 解析器 (亿邮)DOM,SAX,SimpleXML,其中前两种是通用的解析器,和具体语言无关,而 SimpleXML 则是 PHP 提供的解析器。28.请你谈谈 SSH 整合:SSH: Struts(表示层)+ Spring(业务层)+ Hibernate(持久层)Struts: Struts 是一个表示层框架,主要作用是界面展示,接收请求,分发请求。在MVC 框架中,S truts 属于 VC 层次,负责界面表现,负责 MVC 关系的分(V iew: 沿 用