GWT 面试问题(GWT Interview Questions)
亲爱的读者,这些GWT Interview Questions专门设计用于让您熟悉在面试GWT期间可能遇到的问题的性质。 根据我的经验,很好的面试官在你的面试中几乎不打算问任何特定的问题,通常问题从这个主题的一些基本概念开始,然后他们继续基于进一步的讨论和你回答的问题 -
Google Web Toolkit(GWT)是一个用于构建和优化基于浏览器的复杂应用程序的开发工具包。 Google的许多产品都使用GWT,包括Google AdWords和Orkut。
以下是GWT的特点 -
Google Web Toolkit(GWT)是一个用于创建RICH Internet Application(RIA)的开发工具包。
GWT为开发人员提供了在JAVA中编写客户端应用程序的选项。
GWT将用JAVA编写的代码编译为JavaScript代码。
用GWT编写的应用程序是跨浏览器兼容的。 GWT自动生成适合每个浏览器的javascript代码。
GWT是开源的,完全免费的,并被全球数千名开发人员使用。 它是根据Apache许可证2.0版许可的。
以下是选择GWT用于开发项目的原因 -
基于Java,您可以使用Eclipse等JAVA IDE来开发GWT应用程序。 开发人员可以使用代码自动完成/重构/导航/项目管理以及IDE的所有功能。
GWT提供完整的调试功能。 开发人员可以像Java应用程序一样调试客户端应用程序。
GWT提供与Junit和Maven的轻松集成。
作为基于Java的,GWT对Java开发人员的学习曲线较低。
GWT生成优化的javascript代码,自己生成浏览器的特定javascript代码。
GWT提供的Widgets库提供了应用程序所需的大部分任务。
GWT是可扩展的,可以创建自定义小部件以满足应用程序需求。
最重要的是,GWT应用程序可以在所有主流浏览器和智能手机上运行,包括基于Android和iOS的手机/平板电脑。
以下是GWT的缺点 -
Not indexable − GWT生成的网页不会被搜索引擎索引,因为这些应用程序是动态生成的。
Not degradable −如果您的应用程序用户禁用Javascript,那么用户只会看到基本页面而已。
Not designer's friendly − GWT不适合喜欢使用带有占位符的纯HTML来在以后插入动态内容的网页设计师。
以下是GWT的核心组成部分 -
GWT Java to JavaScript compiler −这是GWT最重要的部分,使其成为构建RIA的强大工具。 GWT编译器用于将用Java编写的所有应用程序代码转换为JavaScript。
JRE Emulation library − Google Web Toolkit包含一个模拟Java运行时库子集的库。 该列表包括java.lang,java.lang.annotation,java.math,java.io,java.sql,java.util和java.util.logging。
GWT UI building library − GWT的这一部分由许多子部分组成,其中包括实际的UI组件,RPC支持,历史记录管理等等。
GWT Hosted Web Browser − GWT托管Web浏览器允许您以托管模式运行和执行GWT应用程序,其中您的代码在Java虚拟机中作为Java运行,而无需编译为JavaScript。
GWT应用程序包含以下四个重要部分,其中最后一部分是可选的,但前三部分是强制性的 -
模块描述符
公共资源
客户端代码
服务器端代码
模块描述符是XML形式的配置文件,用于配置GWT应用程序。 模块描述符文件扩展名为* .gwt.xml,其中*是应用程序的名称,此文件应驻留在项目的根目录中。
这提供了应用程序的名称。
这在应用程序中添加了其他gwt模块,就像java应用程序中的import一样。 可以以这种方式继承任意数量的模块。
这指定将开始加载GWT应用程序的类的名称。
是! 可以添加任意数量的入口点类。
调用onModuleLoad()函数,其行为类似于java应用程序的main方法。
它们按照入口点类在模块文件中出现的顺序依次调用。 因此,当第一个入口点的onModuleLoad()完成时,立即调用下一个入口点。
这指定了GWT编译器将搜索源编译的源文件夹的名称。
公共路径是项目中存储GWT模块引用的静态资源(如CSS或图像)的位置。
默认公共路径是存储模块XML文件的公共子目录。
自动注入位于src指定位置的外部JavaScript文件。
自动注入位于src指定位置的外部CSS文件。
模块入口点是可分配给EntryPoint的任何类,可以在没有参数的情况下构造。 加载模块时,将实例化每个入口点类并调用其EntryPoint.onModuleLoad()方法。
它包含解析延迟绑定配置(例如,浏览器检测)所需的javascript代码,并使用GWT编译器生成的查找表来定位其中一个.cache.html。
它包含GWT应用程序的实际程序。
以下是浏览器加载GWT应用程序时GWT应用程序的引导程序的步骤 -
浏览器加载主机html页面和.nocache.js文件。
浏览器执行.nocache.js文件的javascript代码。
.nocache.js代码解析延迟绑定配置(例如,浏览器检测)并使用GWT编译器生成的查找表来定位其中一个.cache.html。
然后.nocache.js代码创建一个html隐藏的iframe,将iframe插入到主机页面的DOM中,并将.cache.html文件加载到同一个iframe中。
.cache.html包含GWT应用程序的实际程序,一旦加载到iframe中,就会在浏览器中显示GWT应用程序。
每当编译GWT应用程序时,GWT编译器每次都使用相同的名称生成.nocache.js文件。 所以浏览器应该总是下载.nocache.js文件来获取最新的gwt应用程序。 gwt.js代码实际上在文件名的末尾附加了一个唯一的时间戳,以便浏览器始终将其视为新文件,并且永远不应该将其缓存。
最重要的公共资源是主页,用于调用实际的GWT应用程序。 应用程序的典型HTML主机页面可能根本不包含任何可见的HTML正文内容,但总是希望通过标记包含GWT应用程序。
默认情况下,每个组件的类名是gwt- 。 例如,Button小部件的默认样式为gwt-Button,类似的方式TextBox widgest的默认样式为gwt-TextBox。
没有! 默认情况下,浏览器和GWT都不为窗口小部件创建默认的id属性。
此方法将清除任何现有样式,并将窗口小部件样式设置为使用样式提供的新CSS类。
此方法将向窗口小部件添加辅助或从属样式名称。 辅助样式名称是另一个样式名称,因此如果应用了任何先前的样式名称,则会保留它们。
此方法将从窗口小部件中删除给定样式,并保留与窗口小部件关联的任何其他样式
此方法获取所有对象的样式名称,作为以空格分隔的列表。
此方法设置对象的主样式名称并更新所有相关样式名称。
默认情况下,窗口小部件的主要样式名称将是其窗口小部件类的默认样式名称。 例如,按钮小部件的gwt-Button。 当我们使用AddStyleName()方法添加和删除样式名称时,这些样式称为辅助样式。
窗口小部件的最终外观由添加到其中的所有辅助样式的总和以及其主要样式确定。 您可以使用setStylePrimaryName(String)方法设置窗口小部件的主要样式。
有多种方法可以将CSS文件与模块相关联。 现代GWT应用程序通常使用CssResource和UiBinder的组合。
在主机HTML页面中使用标记。
使用模块XML文件中的元素。
使用ClientBundle中包含的CssResource。
在UiBinder模板中使用内联元素。
UIObject类是所有用户界面对象的超类。
UIObject类是所有用户界面对象的超类。 它只是包装一个DOM元素,并且无法接收事件。 它提供直接的子类,如Widget,MenuItem,MenuItemSeparator,TreeItem。
可以使用CSS设置所有UIObject对象的样式。
每个UIObject都有一个主要样式名称,用于标识应始终应用于它的关键CSS样式规则。
通过操纵对象的辅助样式名称可以实现更复杂的样式行为。
类Widget是大多数用户界面对象的基类。 Widget添加了对从浏览器接收事件并直接添加到面板的支持。
此窗口小部件包含文本,不使用
元素解释为HTML,从而使其以块布局显示。此窗口小部件可以包含HTML文本,并使用
元素显示html内容,使其以块布局显示。此小组件显示给定URL的图像。
此小部件表示一个简单的元素。
Button小部件代表标准按钮。
PushButton表示具有自定义样式的普通按钮。
ToggleButton小部件代表一个时尚的有状态按钮,允许用户在向上和向下状态之间切换。
CheckBox小部件表示标准复选框小部件。 该类还充当RadioButton的基类。
RadioButton小部件表示互斥的选择单选按钮小部件。
ListBox小部件表示用户的选项列表,可以是列表框,也可以是下拉列表。
SuggestBox小部件表示文本框或文本区域,显示与用户输入匹配的预配置选择集。 每个SuggestBox都与一个SuggestOracle相关联。 SuggestOracle用于在给定特定查询字符串的情况下提供一组选择。
TextBox小部件表示单行文本框。
PasswordTextBox小部件表示一个文本框,可以直观地屏蔽其输入以防止窃听。
TextArea小部件表示允许输入多行文本的文本框。
RichTextArea小部件表示一个富文本编辑器,允许复杂的样式和格式。
FileUpload小部件包装HTML 元素。
隐藏的小部件在HTML表单中显示隐藏的字段。
树小部件表示标准的分层树小部件。 树包含TreeItem的层次结构,用户可以打开,关闭和选择。
MenuBar小部件表示标准菜单栏小部件。 菜单栏可以包含任意数量的菜单项,每个菜单项可以触发命令或打开级联菜单栏。
DatePicker小部件表示标准GWT日期选择器。
CellTree小部件表示树的视图。 此小部件仅在标准模式下工作,这要求运行它的HTML页面具有明确的声明。
CellList小部件表示单个列的单元格列表。
CellTable小部件表示支持分页和列的表格视图。
CellBrowser窗口小部件表示树的可浏览视图,其中每个级别只能打开一个节点。 此小部件仅在标准模式下工作,这要求运行它的HTML页面具有明确的声明。
布局面板可以包含其他小部件。 这些面板控制在用户界面上显示小部件的方式。 每个Panel小部件都从Panel类继承属性,而Panel类继承Widget类的属性,而后者继承UIObject类的属性。
Panel是所有面板的抽象基类,它们是可以包含其他小部件的小部件。
FlowPanel窗口小部件表示使用默认HTML布局行为格式化其子窗口小部件的面板。
HorizontalPanel小部件表示一个面板,它将所有小部件放在一个水平列中。
VerticalPanel小部件表示一个面板,它将所有小部件放在一个垂直列中。
HorizontalSplitPanel小部件表示一个面板,它在一个水平行中排列两个小部件,并允许用户以交互方式更改专用于两个小部件中每个小部件的宽度比例。 必要时,HorizontalSplitPanel中包含的小部件将使用滚动条自动修饰。
VerticalSplitPanel小部件表示一个A面板,它在一个垂直列中排列两个小部件,并允许用户以交互方式更改专用于两个小部件中每个小部件的高度比例。 VertialSplitPanel中包含的小部件将在必要时使用滚动条自动修饰。
FlexTable小部件表示一个灵活的表,可根据需要创建单元格。 它可以是锯齿状的(也就是说,每行可以包含不同数量的单元格),并且可以将单个单元格设置为跨越多个行或列。
网格窗口小部件表示一个矩形网格,可以在其单元格中包含文本,html或子窗口小部件。 必须将其显式调整为所需的行数和列数。
DeckPanel是一个面板,它在“平台”中显示其所有子窗口小部件,其中一次只能看到一个。 它由TabPanel使用。
此小部件表示一个面板,该面板将其子窗口小部件“停靠”在其外边缘,并允许其最后一个窗口小部件占用其中心的剩余空间。
此窗口小部件表示包含HTML的面板,可以将子窗口小部件附加到该HTML中的已标识元素。
此小组件表示一个面板,该面板表示一组选项卡式页面,每个页面都包含另一个小部件。 当用户选择与其关联的各种选项卡时,将显示其子窗口小部件。 选项卡可以包含任意HTML。
此窗口小部件表示一种窗口小部件,可以包装另一个窗口小部件,隐藏包装窗口小部件的方法。 添加到面板时,复合体的行为就像添加了它包装的窗口小部件一样。
SimplePanel是仅包含一个窗口小部件的面板的基类。
ScrollPanel小部件表示一个简单的面板,它将其内容包装在可滚动区域中。
FocusPanel小部件代表一个简单的面板,使其内容可以聚焦,并增加了捕捉鼠标和键盘事件的能力。
此小组件表示将其内容包装在HTML
元素中的面板。此窗口小部件表示可以弹出其他窗口小部件的面板。 它覆盖了浏览器的客户区(以及任何以前创建的弹出窗口)。
此窗口小部件表示一种弹出窗口,其顶部有一个标题区域,可由用户拖动。 与PopupPanel不同,对PopupPanel.setWidth(String)和PopupPanel.setHeight(String)的调用将设置对话框本身的宽度和高度,即使尚未添加窗口小部件。
GWT提供类似于Java AWT或SWING用户界面框架的事件处理程序模型。
侦听器接口定义窗口小部件调用以宣告事件的一个或多个方法。 GWT提供与各种可能事件对应的接口列表。
希望接收特定类型事件的类实现关联的处理程序接口,然后将对其自身的引用传递给窗口小部件以订阅一组事件。
例如,Button类发布单击事件,因此您必须编写一个类来实现ClickHandler来处理单击事件。
所有GWT事件处理程序都已从EventHandler接口扩展,并且每个处理程序只有一个带有单个参数的方法。 此参数始终是关联事件类型的对象。 每个事件对象都有许多方法来操纵传递的事件对象。
GWT提供了三种创建自定义用户界面元素的方法。 有三种一般策略可供遵循 -
Create a widget by extending Composite Class −这是创建自定义小部件的最常用和最简单的方法。 在这里,您可以使用现有小部件来创建具有自定义属性的复合视图。
Create a widget using GWT DOM API in JAVA −以这种方式创建GWT基本窗口小部件。 仍然是创建自定义小部件的一种非常复杂的方式,应谨慎使用。
Use JavaScript and wrap it in a widget using JSNI −这通常只能作为最后的手段来完成。 考虑到本机方法的跨浏览器含义,它变得非常复杂并且也变得更难以调试。
UiBinder是一个旨在分离功能和用户界面视图的框架。
UiBinder框架允许开发人员将gwt应用程序构建为HTML页面,并在其中配置GWT小部件。
UiBinder框架使与UI设计人员的协作变得更容易,他们比XML源代码更熟悉XML,HTML和CSS。
UIBinder提供了一种定义用户界面的声明方式。
UIBinder从UI中分离出程序逻辑。
UIBinder类似于JSP对Servlets的作用。
RPC,远程过程调用是GWT使用的机制,其中客户端代码可以直接执行服务器端方法。
GWT RPC是基于servlet的。
GWT RPC是异步的,客户端在通信期间从不被阻止。
使用GWT RPC Java对象可以直接在客户端和服务器之间发送(由GWT框架自动序列化)。
服务器端servlet称为服务。
从客户端代码调用服务器端servlet方法的远程过程调用称为调用服务。
以下是GWT RPC通信机制中使用的三个组件 -
在服务器上运行的远程服务(服务器端servlet)。
用于调用该服务的客户端代码。
将在客户端和服务器之间传递的Java数据对象。
GWT客户端和服务器都自动序列化和反序列化数据,因此开发人员不需要序列化/反序列化对象,数据对象可以通过HTTP传输。
一个java数据对象应该实现isSerializable接口,以便它可以通过GWT RPC中的线路传输。
国际化是一种在网站上显示特定于语言环境的信息的方法。 例如,在美国和法国的丹麦语中显示英语网站的内容。
GWT提供了三种方式来实现GWT应用程序的国际化 -
静态字符串国际化。
动态字符串国际化。
可本地化的界面。
这种技术最为普遍,在运行时只需要很少的开销; 是一种非常有效的翻译常量和参数化字符串的技术;最简单的实现。 静态字符串国际化使用标准Java属性文件来存储已翻译的字符串和参数化消息,并创建强类型的Java接口以检索其值。
这种技术非常灵活,但比静态字符串国际化要慢。 主机页面包含本地化字符串,因此,当我们添加新的语言环境时,不需要重新编译应用程序。 如果要将GWT应用程序与现有服务器端本地化系统集成,则应使用此技术。
这种技术是三种技术中最强大的。 实现Localizable允许我们创建自定义类型的本地化版本。 这是一种先进的国际化技术。
extend-property标记,其属性名称设置为语言环境,值设置为特定于语言的语言环境,例如de表示德语语言环境。
为了使用GWT History支持,我们必须首先将以下iframe嵌入到我们的主机HTML页面中。
<iframe src="javascript:''" id="__gwt_historyFrame" style="width:0;height:0;border:0"></iframe>
日志记录框架模拟java.util.logging,因此它使用相同的语法并具有与服务器端日志记录代码相同的行为。
使用.gwt.xml文件配置GWT日志记录。
我们可以配置启用/禁用日志记录; 我们可以启用/禁用特定处理程序,并更改默认日志记录级别。
SystemLogHandler记录到stdout,这些消息只能在DevMode窗口的开发模式中看到。
DevelopmentModeLogHandler通过调用方法GWT.log来记录。 这些消息只能在DevMode窗口的开发模式中看到。
ConsoleLogHandler登录到javascript控制台,由Firebug Lite(用于IE),Safari和Chrome使用。
FirebugLogHandler登录到Firebug控制台。
当启用此处理程序时,PopupLogHandler会记录到位于应用程序左上角的弹出窗口。
此处理程序将日志消息发送到服务器,使用服务器端日志记录机制记录它们。
接下来是什么? (What is Next ?)
此外,您可以查看您对该主题所做的过去作业,并确保您能够自信地说出这些作业。 如果你更新鲜,那么面试官不会指望你会回答非常复杂的问题,而是你必须使你的基本概念非常强大。