面試問答
blocking 和 non-blocking 差異 (面試過程問蠻多相關問題)
- **Blocki...
內有面試題目
地點在很熱鬧的地區
一棟舊舊的大樓
進到辦公室,有可能在午休的原因
燈光很暗,不過我走的時候,還是
覺得暗暗的
人數非常少
一開始筆試
面試主管會坐在你的對面
題目有點難度,看不懂可以問對方
面試主管人很好
接著會開始問,經手過的案子
問得蠻深的,很多地方我都答不出來
對方很有耐心的一一講解
體感上很不錯
下面會列出有印象的問題與答案
(有參考另一篇面試趣前輩文章)
面試問答
blocking 和 non-blocking 差異 (面試過程問蠻多相關問題)
- **Blocking(阻塞)**:當一個線程執行某個操作(如 I/O 操作)時,該線程會被阻塞,直到操作完成。例如 `InputStream.read()` 會一直等待數據可用後才返回。
- **Non-blocking(非阻塞)**:線程發起操作後不會等待結果,而是繼續執行其他工作。例如 `NIO`(New Input/Output)中的 `Selector` 可以處理多個通道,而不阻塞當前線程。
在 Spring 框架中,除了使用 @ComponentScan 可以註冊,還有什麼方式?
- `@ComponentScan` 用於自動掃描 `@Component`、`@Service`、`@Repository`、`@Controller` 等類。
- 其他方式:
1. **`@Import`**:可以手動導入 Java 配置類。
2. **`@Bean`**:在 `@Configuration` 類中使用 `@Bean` 方法返回要註冊的 bean。
3. **XML 設定**(較舊): 透過 `applicationContext.xml` 使用 `<bean>` 註冊。
hashMap 是什麼?
- `HashMap` 是 Java 中的一種 **基於哈希表的鍵值對存儲結構**,位於 `java.util` 包。
- 特點:
- 允許 `null` 鍵和 `null` 值。
- **非同步**,多線程環境需要使用 `Collections.synchronizedMap()` 或 `ConcurrentHashMap`。
- 採用 **拉鍊法** 解決哈希衝突(JDK 8 之後當鏈表超過閾值時會轉換為紅黑樹)。
什麼是執行緒安全,怎麼樣可以達到執行緒安全?
- **執行緒安全** 指的是在多線程環境下訪問共享資源時,不會產生競態條件或資料不一致的問題。
- **達到執行緒安全的方法**:
1. **使用 `synchronized`**:保證同一時間只有一個線程訪問共享資源。
2. **使用 `Lock`**:如 `ReentrantLock` 提供更靈活的鎖機制。
3. **使用 `volatile`**:確保變數的可見性,防止指令重排。
4. **使用 `ThreadLocal`**:每個線程都有自己的變數副本。
5. **使用並發工具類**:如 `ConcurrentHashMap`、`CopyOnWriteArrayList` 等。
Spring Boot 2.0 與 3.0 的差異?
1. **Java 版本**:Spring Boot 3.0 需要 **Java 17+**,而 2.x 可支援 Java 8。
2. **Jakarta EE 遷移**:Spring Boot 3.0 從 `javax` 遷移到 `jakarta`,如 `javax.servlet` → `jakarta.servlet`。
3. **GraalVM 原生映像支援**:Spring Boot 3.0 提供更好的 **原生映像(Native Image)** 支援,提升啟動速度與資源占用。
4. **棄用與變更**:
- `spring-boot-starter-validation` 移至 `jakarta.validation`。
- 移除了部分舊的 API,如 `RestTemplate` 建議改用 `WebClient`。
Spring IoC 與 AOP 是什麼?
- **IoC(控制反轉,Inversion of Control)**:
- 由 **Spring 容器** 控制 Bean 的創建與依賴注入,開發者不需要手動管理物件。
- 透過 `@Autowired` 或 `@Bean` 進行 **依賴注入(DI,Dependency Injection)**。
- **AOP(面向切面程式設計,Aspect-Oriented Programming)**:
- 主要用於 **橫切關注點**(如日誌、權限驗證、事務管理)。
- 透過 **`@Aspect`**、**`@Before`**、**`@After`**、**`@Around`** 來定義切面行為。
Spring Boot 中提供什麼 servlet 容器?並提供兩種配置方式?
我只回答了一個Tomcat
解釋 asynchronous 與 synchronous
解釋同步與非同步,這個在面試過程問到的比例很高
面試建議
金融接案,偶爾需要去客戶那邊
問題偏難,主管人很好,很耐心解釋
由於很多問題答不上來
不覺得自己會被錄取
但是,都花時間,請假去面試了
連個感謝信回覆都沒有
有點小扣分
還是蠻推薦去面試看看的
面試過程可以學到很多東西
薪水算是普通,不低也不高
面試主管感覺技術很好
練功的好地方