GWT - 面試問題



尊敬的讀者,這些GWT 面試問題是專門為幫助您瞭解在GWT面試中可能遇到的問題型別而設計的。根據我的經驗,優秀的面試官在面試時很少會預先計劃好要問哪些具體問題,通常會從主題的一些基本概念開始提問,然後根據後續的討論和您的回答繼續深入−

Google Web Toolkit (GWT) 是一個用於構建和最佳化複雜基於瀏覽器的應用程式的開發工具包。GWT 被 Google 的許多產品使用,包括 Google AdWords 和 Orkut。

以下是 GWT 的特性−

  • Google Web Toolkit (GWT) 是一個用於建立富網際網路應用程式 (RIA) 的開發工具包。

  • GWT 為開發人員提供了使用 JAVA 編寫客戶端應用程式的選項。

  • GWT 將用 JAVA 編寫的程式碼編譯成 JavaScript 程式碼。

  • 用 GWT 編寫的應用程式與跨瀏覽器相容。GWT 自動生成適合每個瀏覽器的 javascript 程式碼。

  • GWT 是開源的,完全免費的,並且被全球數千名開發人員使用。它根據 Apache License 版本 2.0 許可。

以下是選擇 GWT 進行開發專案的理由−

  • 基於 Java,您可以使用 Eclipse 等 Java IDE 開發 GWT 應用程式。開發人員可以使用程式碼自動完成功能/重構/導航/專案管理以及 IDE 的所有功能。

  • GWT 提供了完整的除錯功能。開發人員可以像除錯 Java 應用程式一樣除錯客戶端應用程式。

  • GWT 易於與 Junit 和 Maven 整合。

  • 同樣基於 Java,GWT 對 Java 開發人員來說學習曲線較低。

  • GWT 生成最佳化的 javascript 程式碼,自動生成特定瀏覽器的 javascript 程式碼。

  • GWT 提供的部件庫提供了應用程式中所需的大多數任務。

  • GWT 是可擴充套件的,可以建立自定義部件來滿足應用程式需求。

  • 最重要的是,GWT 應用程式可以在所有主要的瀏覽器和智慧手機上執行,包括基於 Android 和 iOS 的手機/平板電腦。

以下是 GWT 的缺點−

  • 不可索引− 由 GWT 生成的網頁不會被搜尋引擎索引,因為這些應用程式是動態生成的。

  • 不可降級− 如果您的應用程式使用者停用了 Javascript,則使用者只會看到基本頁面,而不會看到更多內容。

  • 對設計師不友好− GWT 不適合那些喜歡使用純 HTML 併為以後插入動態內容預留佔位符的網頁設計師。

以下是 GWT 的核心元件−

  • GWT Java 到 JavaScript 編譯器− 這是 GWT 最重要的部分,它使 GWT 成為構建 RIA 的強大工具。GWT 編譯器用於將用 Java 編寫的全部應用程式程式碼轉換為 JavaScript。

  • JRE 模擬庫− Google Web Toolkit 包含一個模擬 Java 執行時庫子集的庫。列表包括 java.lang、java.lang.annotation、java.math、java.io、java.sql、java.util 和 java.util.logging。

  • GWT UI 構建庫− GWT 的這部分包含許多子部分,包括實際的 UI 元件、RPC 支援、歷史管理等等。

  • GWT 託管 Web 瀏覽器− GWT 託管 Web 瀏覽器允許您在託管模式下執行和執行 GWT 應用程式,在託管模式下,您的程式碼在 Java 虛擬機器中以 Java 形式執行,無需編譯成 JavaScript。

一個 GWT 應用程式由以下四個重要部分組成,其中最後一個部分是可選的,但前三個部分是必須的−

  • 模組描述符

  • 公共資源

  • 客戶端程式碼

  • 伺服器端程式碼

模組描述符是以 XML 形式存在的配置檔案,用於配置 GWT 應用程式。模組描述符副檔名為 *.gwt.xml,其中 * 是應用程式的名稱,此檔案應位於專案的根目錄中。

它提供應用程式的名稱。

它將其他 gwt 模組新增到應用程式中,就像 java 應用程式中的 import 一樣。可以以這種方式繼承任意數量的模組。

它指定將開始載入 GWT 應用程式的類的名稱。

是的!可以新增任意數量的入口點類。

onModuleLoad() 函式會被呼叫,其作用類似於 java 應用程式的主方法。

它們按入口點類在模組檔案中出現的順序依次呼叫。因此,當第一個入口點的 onModuleLoad() 完成後,下一個入口點會立即被呼叫。

它指定 GWT 編譯器將搜尋原始碼編譯的原始檔夾名稱。

公共路徑是您專案中儲存 GWT 模組引用的靜態資源(如 CSS 或影像)的位置。

預設公共路徑是儲存模組 XML 檔案的目錄下的 public 子目錄。

自動注入位於 src 指定位置的外部 JavaScript 檔案。

自動注入位於 src 指定位置的外部 CSS 檔案。

模組入口點是任何可分配給 EntryPoint 且無需引數即可構造的類。載入模組時,會例項化每個入口點類,並呼叫其 EntryPoint.onModuleLoad() 方法。

它包含解決延遲繫結配置(例如,瀏覽器檢測)和使用 GWT 編譯器生成的查詢表來定位 .cache.html 之一的 javascript 程式碼。

它包含 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 程式碼實際上在檔名末尾附加了一個唯一的 timestamp,以便瀏覽器始終將其視為一個新檔案,並且永遠不應該快取它。

最重要的公共資源是主機頁面,它用於呼叫實際的 GWT 應用程式。應用程式的典型 HTML 主機頁面可能根本不包含任何可見的 HTML body 內容,但始終希望透過 <script.../> 標籤包含 GWT 應用程式。

預設情況下,每個元件的類名稱為 gwt-<classname>。例如,Button 部件的預設樣式為 gwt-Button,類似地 TextBox 部件的預設樣式為 gwt-TextBox。

不會!預設情況下,瀏覽器和 GWT 都不會為部件建立預設 id 屬性。

此方法將清除任何現有的樣式,並將部件樣式設定為使用 style 提供的新 CSS 類。

此方法將為小部件新增一個輔助或從屬樣式名稱。輔助樣式名稱是一個額外的樣式名稱,如果之前應用了任何樣式名稱,則會保留它們。

此方法將刪除小部件中給定的樣式,並保留與小部件關聯的任何其他樣式。

此方法獲取物件的所有樣式名稱,以空格分隔的列表形式。

此方法設定物件的 primary 樣式名稱並更新所有從屬樣式名稱。

預設情況下,小部件的主樣式名稱將是其小部件類預設樣式名稱。例如,Button 小部件的 gwt-Button。當我們使用 AddStyleName() 方法新增和刪除樣式名稱時,這些樣式稱為輔助樣式。

小部件的最終外觀由新增到它的所有輔助樣式以及其主樣式的總和決定。您可以使用 setStylePrimaryName(String) 方法設定小部件的主樣式。

有多種方法可以將 CSS 檔案與您的模組關聯。現代 GWT 應用程式通常使用 CssResource 和 UiBinder 的組合。

  • 在宿主 HTML 頁面中使用 標籤。

  • 在模組 XML 檔案中使用 元素。

  • 使用 ClientBundle 中包含的 CssResource。

  • 在 UiBinder 模板中使用內聯 元素。

UIObject 類是所有使用者介面物件的超類。

  • UIObject 類是所有使用者介面物件的超類。它只是包裝了一個 DOM 元素,並且不能接收事件。它為像 Widget、MenuItem、MenuItemSeparator、TreeItem 這樣的直接子類提供了支援。

  • 所有 UIObject 物件都可以使用 CSS 進行樣式設定。

  • 每個 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 元素。

Hidden 小部件表示 HTML 表單中的隱藏欄位。

Tree 小部件表示一個標準的分層樹小部件。樹包含使用者可以開啟、關閉和選擇的 TreeItem 層次結構。

MenuBar 小部件表示一個標準的選單欄小部件。選單欄可以包含任意數量的選單項,每個選單項可以觸發命令或開啟級聯選單欄。

DatePicker 小部件表示標準的 GWT 日期選擇器。

CellTree 小部件表示樹的檢視。此小部件僅在標準模式下工作,這要求執行它的 HTML 頁面具有顯式的 宣告。

CellList 小部件表示單元格的單列列表。

CellTable 小部件表示支援分頁和列的表格檢視。

CellBrowser 小部件表示樹的可瀏覽檢視,其中同一級別上一次只能開啟一個節點。此小部件僅在標準模式下工作,這要求執行它的 HTML 頁面具有顯式的 宣告。

佈局面板可以包含其他小部件。這些面板控制小部件在使用者介面上的顯示方式。每個 Panel 小部件都繼承了 Panel 類的屬性,Panel 類又繼承了 Widget 類的屬性,Widget 類又繼承了 UIObject 類的屬性。

Panel 是所有面板的抽象基類,面板是可以包含其他小部件的小部件。

FlowPanel 小部件表示使用預設 HTML 佈局行為格式化其子小部件的面板。

HorizontalPanel 小部件表示將所有小部件水平排列成單列的面板。

VerticalPanel 小部件表示將所有小部件垂直排列成單列的面板。

HorizontalSplitPanel 小部件表示一個面板,該面板將兩個小部件水平排列成一行,並允許使用者互動式地更改分配給這兩個小部件的寬度比例。包含在 HorizontalSplitPanel 中的小部件在必要時將自動裝飾捲軸。

VerticalSplitPanel 小部件表示一個面板,該面板將兩個小部件垂直排列成一列,並允許使用者互動式地更改分配給這兩個小部件的高度比例。包含在 VertialSplitPanel 中的小部件在必要時將自動裝飾捲軸。

FlexTable 小部件表示一個靈活的表格,可以按需建立單元格。它可以是鋸齒狀的(即,每一行可以包含不同數量的單元格),並且可以將各個單元格設定為跨越多行或多列。

Grid 小部件表示一個矩形網格,可以在其單元格中包含文字、html 或子 Widget。必須將其顯式調整為所需的行列數。

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 提供三種建立自定義使用者介面元素的方法。有三種通用的策略可供遵循:

  • 透過擴充套件 Composite 類建立小部件 這是建立自定義小部件最常見也是最簡單的方法。在這裡,您可以使用現有的小部件來建立具有自定義屬性的複合檢視。

  • 使用 GWT DOM API 在 JAVA 中建立小部件 GWT 基本小部件就是以這種方式建立的。但這仍然是一種建立自定義小部件非常複雜的方法,應謹慎使用。

  • 使用 JavaScript 並使用 JSNI 將其包裝在小部件中 通常應僅在萬不得已時才使用此方法。考慮到原生方法的跨瀏覽器影響,它變得非常複雜,並且也變得更難以除錯。

  • UiBinder 是一個旨在分離使用者介面功能和檢視的框架。

  • UiBinder 框架允許開發人員將 GWT 應用程式構建為 HTML 頁面,並在其中配置 GWT 小部件。

  • UiBinder 框架使與 UI 設計師的協作更加容易,因為 UI 設計師對 XML、HTML 和 CSS 比對 Java 原始碼更熟悉。

  • UIBinder 提供了一種宣告式的方式來定義使用者介面。

  • UIBinder 將程式邏輯與 UI 分離。

  • UIBinder 類似於 JSP 與 Servlet 的關係。

  • 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 應用程式的方法:

  • 靜態字串國際化。

  • 動態字串國際化。

  • Localizable 介面。

此技術最為普遍,在執行時需要很少的開銷;對於翻譯常量字串和引數化字串都是一種非常有效的技術;最易於實現。靜態字串國際化使用標準的 Java 屬性檔案來儲存翻譯後的字串和引數化訊息,並建立強型別 Java 介面來檢索其值。

此技術非常靈活,但比靜態字串國際化慢。主機頁面包含本地化字串,因此當我們新增新的語言環境時,不需要重新編譯應用程式。如果要將 GWT 應用程式與現有的伺服器端本地化系統整合,則應使用此技術。

此技術是三種技術中最強大的。實現 Localizable 允許我們建立自定義型別的本地化版本。這是一種高階的國際化技術。

extend-property 標籤,其屬性名稱設定為 locale,值設定為特定於語言的語言環境,例如 de 代表德語語言環境。

為了使用 GWT 歷史記錄支援,我們必須首先將以下 iframe 嵌入到我們的主機 HTML 頁面中。

<iframe src="javascript:''" id="__gwt_historyFrame" style="width:0;height:0;border:0"></iframe>

日誌框架模擬 java.util.logging,因此它使用與伺服器端日誌記錄程式碼相同的語法並具有相同的行為。

GWT 日誌記錄是使用 .gwt.xml 檔案配置的。

我們可以配置日誌記錄以啟用/停用;我們可以啟用/停用特定處理程式,並更改預設日誌記錄級別。

SystemLogHandler 將日誌記錄到標準輸出,並且這些訊息只能在 DevMode 視窗的開發模式下看到。

DevelopmentModeLogHandler 透過呼叫方法 GWT.log 進行日誌記錄。這些訊息只能在 DevMode 視窗的開發模式下看到。

ConsoleLogHandler 將日誌記錄到 javascript 控制檯,該控制檯由 Firebug Lite(用於 IE)、Safari 和 Chrome 使用。

FirebugLogHandler 將日誌記錄到 Firebug 控制檯。

PopupLogHandler 將日誌記錄到應用程式左上角的彈出視窗,當啟用此處理程式時,該彈出視窗將顯示。

此處理程式將日誌訊息傳送到伺服器,伺服器將使用伺服器端日誌記錄機制記錄這些訊息。

接下來是什麼?

接下來,您可以回顧一下您之前完成的與該主題相關的作業,並確保您能夠自信地談論它們。如果您是應屆畢業生,面試官不會期望您回答非常複雜的問題,而是您必須使自己的基礎概念非常牢固。

其次,如果您無法回答一些問題,實際上並不重要,重要的是,無論您回答了什麼,都必須充滿自信地回答。因此,在面試過程中要保持自信。我們在 tutorialspoint 祝您面試順利,並祝您未來的事業一切順利。乾杯 :-)

廣告