69 câu hỏi phỏng vấn về Spring (Phần 1)
Java
77
spring
10
White

Hoàng Nguyễn viết ngày 29/01/2016

Trong bài viết này, tôi sẽ tổng hợp lại những kiến thức về Spring Framework, mà có thể các bạn sẽ được hỏi khi đi phỏng vấn. Những chủ đề thường được hỏi sẽ về các vấn đề chính như sau.

  • Spring overview
  • Dependency Injection
  • Spring Beans
  • Spring Annotations
  • Spring Data Access
  • Aspect Oriented Programming (AOP)
  • Spring MVC

Loạt bài này sẽ gồm ba phần, trong phần này, chúng ta sẽ lần lượt đi qua Spring overview, Dependency Injection.

Spring overview

1.Spring là gì?

Spring là một open source framework dành cho Java Enterprise. Core feature của Spring có thể dùng để xây dựng bất cứ Java application nào, các extensions của Spring có thể được sử dụng cho việc xây dựng web application trên nền tảng Java EE. Spring framework cũng hướng tới mục tiêu làm cho việc phát triển các ứng dụng trên nền tảng Java EE dễ dàng hơn và thúc đẩy việc lập trình tốt hơn bằng model POJO-based.

2.Lợi ích mà Spring framework mang lại

Spring framwork mang lại cho chúng ta sự gọn nhẹ (lightweight), sử dụng Inversion of control (IoC) để giúp loose coupling, sử dụng Aspect oriented programming để tách biệt các thành phần business, có container nới quản lý tất cả life cycle và config của các object trong application, phát triển ứng dụng đơn giản với MVC, có transaction management, cung cấp các API tiện lợi cho việc handling exception.

3.Các module của Spring framework

Những module căn bản của Spring gồm có: Core module, Bean module, Context module, Expression Language module, JDBC module, ORM module , OXM module, Java Messaging Service (JMS) module, Transaction module, Web module, Web-Servlet module, Web-Struts module, Web-Portlet module.

4.Core container

Đây là module cơ bản của Spring, cái mà sẽ cung cấp nhưng tính năng cơ bản của Spring framework. BeanFactory chính là trái tim của bất cứ Spring-based application nào, Spring framework được xây dụng trên module này và nó cũng chính là Spring container.

5.BeanFactory

BeanFactory là implementation của factory pattern dùng để apply inversion of control để tách biệt config và dependencies. Thông thường BeanFactory sẽ được implement bằng XmlBeanFactory.

6.XmlBeanFactory

org.springframework.beans.factory.xml.XmlBeanFactory sẽ load file XML chưa định nghĩa các beans. Container này sẽ đọc config từ XML file và sử dụng nó để khởi tạo application.

7.AOP module

AOP module sử dụng để phát triển application theo hướng khía cạnh. Phần lớn được cung cấp bởi AOP Alliance để chắc chắn đảm bảo khả năng tương tác giữa Spring và các AOP framwork khác.

8.JDBC abstraction và DAO module

Với JDBC abstraction và DAO module, chúng ta có thể chắc chắn về việc giữ cho code thao tác với database luôn đơn giản và sạch sẽ, giảm thiểu thao tác manual để maintain connection hay transaction nhằm cũng tránh được các trường hợp fail do close database resources…, ngoài ra nó còn đưa ra một tầng exeption có nghĩa hơn.

9.Object relational mapping (ORM) module

Spring hỗ trợ việc sử dụng ORM thông qua JDBC, ngoài ra cũng support các ORM framework như Hibernate, JPA…

10.Web module

Spring web module được xây dựng dựa trên application context module, cung cấp web-based context. Module này hỗ trợ web-oriented như handling multipart request, binding request parameter với business object…

11.Spring MVC module

Spring MVC module được sinh ra để hỗ trợ xây dựng MVC web application tốt hơn, mặc dù Spring vẫn có thể integrate được với những MVC framework khác. Spring MVC sử dụng IoC để tách biệt logic ra khỏi controller, vào trong business object. Với Spring MVC ta có thể khai báo để bind request parameter với business object một cách dễ dàng.

12.Spring configuration file

Spring configuration file là một file XML. File này sẽ chứa các class information và mô tả làm sao chúng được cài đặt và giao tiếp với những class khác.

13.Spring IoC container

Spring IoC chịu trách nhiệm cho việc tạo ra các object, quản lý chúng với các dependency (dependency injection (DI)), wiring chúng lại với nhau, cài đặt chúng, cũng như quản lý lifecycle của chúng.

14.Lợi ích của IoC

IoC hay dependency injection tối thiểu hóa lương code trong application. Nó giúp cho application dễ test hơn, bởi vì singleton hay JNDI lookup không thể sử dụng trong Unit test. IoC container cũng hỗ trợ eager instantiation và lazy loading.

15.Implement Application context phổ biến

FileSystemXmlApplicationContext, chúng ta phải truyền đường dẫn đầy đủ của file XML vào constructor.

ClassPathXmlApplicationContext, container sẽ tìm file XML từ trong CLASSPATH.

WebXmlApplicationContext, container sẽ tìm file XML từ web application.

16.Điểm khác nhau giữa BeanFactory và Application context

Application context cung cấp phương tiện để giải quyết các text message bằng cách implement MessageSource, ngoài ra nó cũng đưa ra cách thức generic để load file resource (ví dụ như file hình ảnh).

17.Cấu trúc của Spring application

Interface khai báo tất cả các function. Implementation bao gồm các thuộc tính, getter, setter, function… Spring AOP. Spring configuration XML file. Và chương trình sử dụng tất cả các thứ trên

Dependency Injection

18.Dependency Injection trong Spring

Dependency injection là một concept chung, có thể mô tả bằng nhiều cách. Concept này nói rằng bạn sẽ không tạo ra object nhưng bạn sẽ phải mô tả làm sao để chúng được tạo ra. Và bạn cũng không gọi kết nối trực tiếp các component cũng như service với nhau trong code nhưng bạn phải mô tả component nào thì cần service nào trong file config. Sau khi khai báo tất cả thì container cụ thể là IoC container sẽ làm nhiệm vụ hook tất cả lại với nhau. Cụ thể hơn về concept các bạn có thể xem bài AngularJS cho người mới: Dependencies và Services hoặc Dependency Injection và Inversion of Control.

19.Những kiểu khác nhau của IoC

Constructor-based dependency injection: Constructor-based DI được thực hiện khi container invoke một class constructor với một số tham số, mỗi tham số sẽ đại diện cho một dependency đến một class khác.
Setter-based dependency injection: Setter-based DI được thực hiện bởi container bằng cách gọi setter method từ bean sau khi invoke no-argument constructor hay no-argument static factory để khởi tạo bean.

20.Nên sử dụng Constructor-based hay setter-based DI

Có thể sử dụng cả hai. Best practice là sử dụng constructor argument những dependency bắt buộc, và setter cho optional dependency.

Bài gốc: https://codeaholicguy.wordpress.com/2016/01/28/69-cau-hoi-phong-van-ve-spring-phan-1/

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Hoàng Nguyễn

35 bài viết.
400 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
82 34
Nhu cầu về Javascript developer hiện nay trong thị trường IT là rất lớn. Nếu bạn có kiến thức ở mảng này thì cơ hội nghề nghiệp cũng như thu nhập c...
Hoàng Nguyễn viết gần 2 năm trước
82 34
White
51 19
Microservices hiện đang nhận được rất nhiều sự chú ý: các bài viết, các blog, các cuộc thảo luận trên phương tiện truyền thông, trên mạng xã hội, v...
Hoàng Nguyễn viết hơn 2 năm trước
51 19
White
33 2
Chuyện tối ưu code, (Link) là công việc hàng ngày của mỗi lập trình viên, điều đó ai cũng biết. Nhưng liệu code tối ưu có phải là code đẹp, và ngượ...
Hoàng Nguyễn viết 8 tháng trước
33 2
Bài viết liên quan
White
0 0
Trong bài viết này, một số hình ảnh hoặc nọi dung có thể bị thiếu do quá trình chế bản. Vui lòng xem nội dung ở blog gốc sau: (Link) (Link), chúng...
programmerit viết gần 3 năm trước
0 0
Male avatar
9 5
Facade Design Patern Facade Patern thuộc vào họ mô hình cấu trúc (structural patern). Facade patern phát biểu rằng : "just provide a unified an...
DuongVanTien viết gần 2 năm trước
9 5
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
35 bài viết.
400 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!