【面試】Java全端工程師面試問題 整理
最後更新日期:2024年08月24日
前端
Q: HTML2, HTML3, HTML5 比較
A:
HTML2
發布時間:1995 年
特點:
- HTML2 是第一個被正式標準化的 HTML 版本,由 IETF (Internet Engineering Task Force) 制定。
- 包含了 HTML1 中的所有標籤和屬性,並對其進行了正式規範。
- 主要用於靜態內容的展示,如文本、圖片和簡單的表格。
限制:
- 功能有限,不支持多媒體元素(如音頻、視頻)。
- 不支持樣式表(CSS)和腳本(JavaScript)。
- 不具備現代網頁所需的互動性和多媒體功能。
HTML3
發布時間:1997 年
特點:
- HTML3 是 HTML 的一個草案版本,目的是擴展 HTML2 的功能。
- 引入了一些新標籤和屬性,如
<TABLE>
用於創建表格。 - 增加了對數學公式顯示的支持(如
<MATH>
標籤)。
限制:
- HTML3 最終沒有被廣泛接受和實現,大部分提議的功能沒有進入正式的 HTML 規範。
- 對於網頁開發者來說,缺乏一致性和兼容性的支持。
HTML5
發布時間:2014 年
特點:
- HTML5 是目前最新且廣泛使用的 HTML 版本,由 W3C (World Wide Web Consortium) 和 WHATWG (Web Hypertext Application Technology Working Group) 制定。
- 引入了大量新標籤和 API,支持多媒體、圖形和更複雜的應用開發。
- 新的結構性標籤:
<header>
,<footer>
,<article>
,<section>
,<nav>
等。 - 多媒體標籤:
<audio>
,<video>
,<canvas>
。 - 表單改進:新的輸入類型(如
email
,date
)和屬性(如placeholder
,required
)。 - 新的 API:如 Geolocation API、Web Storage API、Web Workers、WebSockets 等。
- 新的結構性標籤:
優點:
- 大大提高了網頁的互動性和多媒體處理能力。
- 支持語義化標籤,提高了可讀性和可維護性。
- 提供了更強的跨平台支持,適用於桌面和移動設備。
- 獨立於插件,可以直接在瀏覽器中運行音頻、視頻和動畫。
局限:
- 由於 HTML5 引入了許多新特性,舊版本的瀏覽器可能不完全支持這些新功能。
- 對於一些複雜的應用,仍需要結合 CSS3 和 JavaScript。
總結
- HTML2:是最早的正式標準化版本,主要用於靜態內容展示,功能有限。
- HTML3:是擴展 HTML2 的草案版本,但未被廣泛採用,並未成為正式標準。
- HTML5:是最新且功能最豐富的版本,支持多媒體、互動性和現代網頁應用所需的各種功能,並且具有良好的跨平台兼容性。
HTML 隨著時間的推移,不斷演變以滿足網頁開發的需求,從簡單的文本顯示到現在的多媒體和複雜應用支持,每個版本都在提升網頁的能力和用戶體驗。
參考資料: ChatGPT
Q:React/Angular/Vue 框架的差異?
後端
Q:使用Spring Boot的好處?
- 開箱即用、約定大於配置,不用再進行繁瑣的 xml 設定
- 內建Server tomcat
- 快速地使用 Spring 進行開發,例如: Spring IOC、Spring AOP
### 進階
#### 微服務是什麼?
ChatGPT:
微服務(Microservices)是一種軟體架構風格,它將應用程式劃分為一組小型、獨立的服務,每個服務執行單一的業務功能,並且可以獨立部署和擴展。這些微服務通常通過輕量級的通信協議(例如HTTP或消息隊列)相互交互。
以下是微服務架構的一些主要特點:
- 獨立部署:每個微服務可以獨立部署、更新和擴展,無需影響其他服務。
- 模組化設計:將應用劃分為多個獨立的服務,每個服務負責單一的業務功能,提高了系統的模組化程度。
- 技術多樣性:不同的微服務可以使用不同的技術棧,根據具體需求選擇最合適的技術。
- 故障隔離:某個微服務的故障不會直接影響到其他微服務,提高了系統的容錯能力。
- 可擴展性:根據需求,微服務可以單獨擴展,從而提高系統的整體可擴展性。
微服務的優點
- 靈活性:開發和部署過程更靈活,可以快速響應業務需求的變化。
- 可擴展性:可以針對具體服務進行擴展,而不需要擴展整個應用程式。
- 技術創新:允許不同的服務使用不同的技術和工具,促進技術創新。
- 快速部署:小規模變更可以快速部署,減少了傳統單體應用的部署風險。
微服務的挑戰
- 複雜性:管理和協調眾多微服務會增加系統的複雜性。
- 數據一致性:確保跨多個微服務的數據一致性是個挑戰。
- 監控和管理:需要有效的監控和管理工具來追蹤和維護微服務。
- 網絡延遲:服務之間的通信可能帶來額外的網絡延遲和故障風險。
總的來說,微服務架構通過將應用拆分為獨立的小服務來實現高靈活性和可擴展性,但也帶來了一些新的挑戰,需要合適的工具和方法來有效管理。
參考資料
Q:如何預防/處理 SQL Injection?
- 參數化查詢
- 避免拼接SQL查詢語法
- 加強對使用者輸入資料的檢核和驗證
參考資料
資料庫
Q:當遇到資料表的效能問題時,你會怎麼解決?
A:
- 問題分析,查看 log 紀錄看程式碼在哪一段有問題
- 在可能有問題的程式碼加上紀錄時間的程式,計算花費的時間,確認是否合理
- SELECT 子句中勿使用 「*」
- 減少不必要的 JOIN、子查詢
- 加入 Index
- 優化資料表結構,例如:反正規化
Q:你知道加索引的原理嗎?
ChatGPT:
當資料表加入索引後,查詢速度會變快的主要原因是索引的存在能夠加速資料的查找和檢索過程。索引是一種數據結構,通常使用樹狀結構(如B樹或B+樹)來組織資料,這些結構可以快速地定位到符合查詢條件的資料記錄。
以下是索引加速查詢速度的幾個主要原因:
快速定位:索引使得數據庫系統不需要完全掃描整個資料表來查找符合條件的資料。相反,它可以根據索引的結構快速定位到可能包含所需資料的位置,從而大大減少了查詢時間。
排序和篩選:索引可以對資料進行排序,從而使得在查詢中進行排序操作時速度更快。同時,索引也可以幫助系統快速篩選出不符合查詢條件的資料,從而減少了需要處理的資料量。
避免全表掃描:當沒有索引時,數據庫系統可能需要對整個資料表進行完整的掃描以查找符合條件的資料。而有了索引,系統可以直接通過索引定位到可能包含所需資料的位置,從而避免了這種全表掃描的操作,提高了查詢效率。
總的來說,索引的加入使得資料庫系統能夠更快速地找到和檢索資料,從而提高了查詢的效率和速度。然而,需要注意的是,過多的索引可能會增加寫入操作的成本,因為每次對資料表的寫入操作都需要更新索引。因此,在設計資料庫時需要根據應用的需求來平衡索引的數量和性能之間的關係。
Q: view 和 stored procedure 的差異?
A:
view: 儲存 SQL 查詢語法,不可以加入邏輯。
stored procedure: 儲存 SQL 查詢語法,可以加入邏輯。
進階
Q: 資料表 A UNION 資料表 B
UNION 為聯集,返回不同值的資料
資料表 A
Id | Name |
1 | Roy |
2 | Peggy |
3 | Eden |
資料表 B
Id | Name |
1 | Jack |
2 | Peggy |
3 | Eden |
語法
SELECT Name FROM A
UNION
SELECT Name FROM B;
結果
Name |
Roy |
Peggy |
Eden |
Jack |
其他
Q:當遇到效能問題時,請問你會怎麼解決?
A:
我會先看log訊息,去找問題可能發生的地方,
那如果看不出來,我會再可能發生的地方再加上一些log,
來幫助我找到問題發生的原因。
那如果找到的話,我就會看是程式的問題還是資料庫的問題,
如果是程式的問題,我就會進行程式碼的優化,像在ORM框架的SQL語法中改成for-each寫法、減少迴圈次數或一些有效率的寫法,改成用原生的JDBC,
SELECT 子句中勿使用 「*」、減少不必要的 JOIN、子查詢、加入 Index、優化資料表結構,例如:反正規化