Khóa Học Java Spring (1 Kèm 1 Online) – Xây Dựng Backend Hoàn Chỉnh Với Spring Boot
Khóa học giúp bạn tự tin xây dựng REST API với Spring Boot, lưu trữ dữ liệu bằng JPA, bảo mật bằng JWT và triển khai ứng dụng lên AWS.
-
Ngày cập nhật 11/2026
-
Học viên 1518
Tại sao bạn học lập trình mãi không tiến bộ?
Học lập trình hơn 1 năm nhưng bạn vẫn không thể tự viết nổi 10 dòng code. Nguyên nhân thật sự do đâu?
Bạn sẽ học được gì?
- Hiểu cách Spring và Spring Boot vận hành, từ IoC, Dependency Injection đến Auto-Configuration.
- Xây dựng REST API đúng chuẩn, có kiểm tra dữ liệu đầu vào và xử lý lỗi tập trung.
- Lưu trữ và truy vấn dữ liệu với Spring Data JPA, Hibernate và MySQL.
- Thiết kế quan hệ giữa các Entity và xử lý các vấn đề hiệu năng như N+1.
- Dùng Transaction để bảo vệ dữ liệu và quản lý thay đổi database bằng Flyway.
- Bảo mật ứng dụng bằng Spring Security, JWT, phân quyền và đăng nhập với Google.
- Dùng AOP để tách phần code lặp lại và dùng cache để giảm truy vấn không cần thiết.
- Viết Unit Test và Integration Test để kiểm tra ứng dụng trước khi đưa lên server.
- Triển khai ứng dụng lên AWS và hoàn thành một dự án backend từ thiết kế đến sản phẩm chạy thật.
Khóa học này bao gồm
- Thời lượng 21 buổi (3 tháng)
- 2-3 buổi/tuần (2.5 tiếng/buổi)
- 70 bài tập thực hành
- Hỗ trợ riêng 1-1
Nội dung khóa học
- Vai trò của Spring: Hiểu vấn đề mà Java thuần gặp phải khi xây backend để biết Spring Framework ra đời nhằm giải quyết điều gì.
- Spring và Spring Boot: Phân biệt Spring Framework với Spring Boot để biết mỗi bên đảm nhận phần việc nào trong một dự án.
- Spring Initializr: Biết cách tạo dự án Spring Boot và mở bằng IntelliJ để bắt đầu một ứng dụng mới trong vài phút.
- Maven: Hiểu cấu trúc thư mục, file
pom.xmlvà cách Maven quản lý thư viện để tự thêm dependency và build dự án. - Starter và Parent: Hiểu cách starter gom sẵn các thư viện đi cùng nhau và cách parent quản lý phiên bản để tránh xung đột thư viện.
- REST endpoint đầu tiên: Xây dựng một API trả về dữ liệu để kiểm tra ứng dụng đã chạy đúng.
@SpringBootApplicationvà Auto-Configuration: Hiểu cách Spring Boot tự cấu hình dựa trên thư viện có trong dự án để biết phần nào đang chạy ngầm và cách ghi đè khi cần.- DevTools: Dùng DevTools để ứng dụng tự khởi động lại khi sửa code, giúp rút ngắn thời gian phát triển.
- Chạy bằng dòng lệnh: Biết cách đóng gói ứng dụng thành file JAR và chạy bằng lệnh
java -jarđể không phụ thuộc vào IDE.
- Tight coupling và loose coupling: Nhận biết code phụ thuộc chặt vào class cụ thể để hiểu vì sao cần tách phụ thuộc qua interface.
- IoC và ApplicationContext: Hiểu cách IoC Container tạo và quản lý Bean để không phải tự khởi tạo object bằng
new. - Bean: Hiểu Bean là object do Spring tạo và quản lý để phân biệt với object tự khởi tạo bằng
new. @Componentvà Component Scanning: Biết cách đánh dấu class và tổ chức package để Spring tự tìm thấy Bean.- Stereotype annotation: Phân biệt
@Service,@Repository,@Controllerđể code thể hiện rõ vai trò của từng lớp. @Configurationvà@Bean: Biết cách khai báo Bean bằng Java Config để đăng ký được cả class của thư viện bên ngoài.@Beanvà@Component: So sánh hai cách tạo Bean để chọn đúng cách cho từng tình huống.- Các kiểu injection: So sánh constructor, setter và field injection để hiểu vì sao constructor injection là lựa chọn mặc định.
@Primaryvà@Qualifier: Xử lý lỗiNoUniqueBeanDefinitionExceptionkhi một interface có nhiều Bean để chỉ định đúng Bean cần dùng.
- Bean Scope: Phân biệt singleton, prototype, request và session để tránh lỗi dùng chung dữ liệu giữa các request.
- Eager và Lazy: Hiểu thời điểm Bean được khởi tạo để chủ động dùng
@Lazykhi có lý do rõ ràng. - Lifecycle hook: Dùng
@PostConstructvà@PreDestroyđể chạy logic khi Bean vừa khởi tạo xong và trước khi bị hủy. application.propertiesvà YAML: Biết cách cấu hình port, logging và các giá trị của ứng dụng mà không cần sửa code.@Valuevà Environment: Biết cách đọc giá trị cấu hình vào code để sử dụng trong Bean.@ConfigurationProperties: Dùng class cấu hình để gom nhóm các giá trị liên quan và có kiểm tra kiểu dữ liệu rõ ràng.- Externalized Configuration: Biết cách truyền cấu hình qua biến môi trường, tham số JVM và tham số dòng lệnh để thông tin bí mật không nằm trong source code.
- Profiles: Tách cấu hình theo môi trường dev, test và prod để một bản build chạy được ở nhiều môi trường.
@Profilevà@Conditional: Điều khiển việc tạo Bean theo môi trường hoặc điều kiện để bật tắt tính năng mà không phải sửa code.
- HTTP và REST: Hiểu cấu trúc request, response, phương thức HTTP và nguyên tắc REST để thiết kế API đúng chuẩn.
- Mã trạng thái HTTP: Chọn đúng status code cho từng tình huống để client biết kết quả xử lý mà không cần đọc nội dung phản hồi.
- Postman: Dùng Postman để gửi request và kiểm tra API khi chưa có giao diện.
- DispatcherServlet: Hiểu đường đi của một request trong Spring MVC để biết request đến controller bằng cách nào.
@RestControllervà các mapping: Xây dựng các endpoint GET, POST, PUT, PATCH, DELETE để thực hiện đầy đủ thao tác trên một tài nguyên.- Nhận dữ liệu từ request: Dùng
@PathVariable,@RequestParam,@RequestHeadervà@RequestBodyđể lấy dữ liệu từ từng phần của request. - JSON và Jackson: Hiểu cách Jackson chuyển đổi giữa JSON và object Java để tùy chỉnh dữ liệu vào ra khi cần.
ResponseEntity: DùngResponseEntityđể chủ động trả về status code, header và nội dung phản hồi.- Thiết kế API: Áp dụng quy tắc đặt tên đường dẫn và tổ chức tài nguyên để API dễ hiểu và nhất quán.
- Validate ở backend: Hiểu vì sao không thể chỉ dựa vào validate ở phía client để bảo vệ dữ liệu của hệ thống.
- Bean Validation: Dùng
@Validcùng các annotation như@NotBlank,@Size,@Emailđể kiểm tra dữ liệu đầu vào. - Custom validator: Biết cách tự viết annotation kiểm tra để xử lý các quy tắc nghiệp vụ mà annotation có sẵn không đáp ứng được.
- Custom exception: Xây dựng các exception riêng như
ResourceNotFoundExceptionđể thể hiện rõ từng loại lỗi nghiệp vụ. @RestControllerAdvice: Xử lý lỗi tập trung ở một nơi để controller gọn hơn và không lặp lại code bắt lỗi.- Định dạng lỗi thống nhất: Dùng
ProblemDetailđể mọi lỗi trả về cùng một cấu trúc, giúp client xử lý dễ dàng.
- JDBC, JPA, Hibernate và Spring Data JPA: Phân biệt vai trò của từng thành phần để hiểu chuyện gì xảy ra khi gọi một repository.
- Cài đặt MySQL: Biết cách cài MySQL, tạo database và khai báo kết nối để ứng dụng có nơi lưu dữ liệu thật.
- Entity: Biết cách ánh xạ class Java với bảng bằng
@Entity,@Table,@Columnđể Hibernate đọc và ghi đúng dữ liệu. - Khóa chính: So sánh các chiến lược sinh giá trị của
@GeneratedValueđể chọn cách phù hợp với database. ddl-auto: Hiểu các chế độ củaddl-autođể biết Hibernate thay đổi bảng thế nào và tránh mất dữ liệu trên production.JpaRepository: Dùng các phương thức có sẵn để thực hiện CRUD mà không phải viết SQL.- Persistence Context và trạng thái Entity: Phân biệt các trạng thái transient, managed, detached và removed để biết khi nào Hibernate đang theo dõi một Entity.
- Dirty Checking: Hiểu cách Hibernate tự phát hiện thay đổi trên Entity đang được quản lý để biết vì sao dữ liệu vẫn được lưu dù không gọi
save(). - Cache cấp 1: Hiểu cách Persistence Context lưu lại Entity đã tải để tránh truy vấn lặp lại trong cùng một transaction.
- Lombok: Dùng các annotation của Lombok để giảm code lặp, đồng thời nhận biết các annotation dễ gây lỗi khi đặt trên Entity.
- Controller, Service, Repository: Xây dựng ứng dụng theo ba lớp để mỗi lớp giữ một trách nhiệm riêng và dễ thay đổi về sau.
- Cấu trúc package: So sánh cách chia package theo lớp và theo tính năng để chọn cách phù hợp với quy mô dự án.
- DTO: Hiểu vì sao không nên trả Entity trực tiếp để tránh lộ dữ liệu nhạy cảm và tránh để thay đổi database ảnh hưởng tới API.
- Java Record: Dùng record để khai báo DTO ngắn gọn và không thể bị thay đổi sau khi tạo.
- MapStruct: Dùng MapStruct để tự sinh code chuyển đổi giữa Entity và DTO thay vì viết tay.
- OpenAPI và Swagger: Dùng SpringDoc để tạo tài liệu API tự động và thử API ngay trên trình duyệt.
- API Versioning: So sánh các chiến lược đánh phiên bản và dùng tính năng có sẵn của Spring để thay đổi API mà không làm hỏng client cũ.
- CORS: Hiểu vì sao trình duyệt chặn request khác origin và biết cách cấu hình để frontend gọi được API.
- Derived Query: Biết cách đặt tên phương thức để Spring Data tự sinh truy vấn cho các điều kiện đơn giản.
- JPQL và
@Query: Viết truy vấn theo Entity để xử lý những trường hợp mà tên phương thức không còn diễn đạt nổi. - Native Query: Dùng SQL thuần khi cần tính năng riêng của database mà JPQL không hỗ trợ.
@Modifying: Viết truy vấn cập nhật và xóa hàng loạt để không phải tải từng Entity lên rồi lưu lại.- Pagination: Dùng
PageablevàPageđể chia dữ liệu thành từng trang và tránh trả về quá nhiều bản ghi. - Sorting: Dùng
Sortđể sắp xếp kết quả theo tham số mà client gửi lên. - Projection: Dùng interface hoặc DTO projection để chỉ lấy các cột cần thiết thay vì tải toàn bộ Entity.
- Specification: Xây dựng truy vấn động để hỗ trợ bộ lọc có nhiều điều kiện tùy chọn.
@OneToOne: Biết cách ánh xạ quan hệ một-một để tách thông tin phụ ra một bảng riêng.@OneToManyvà@ManyToOne: Biết cách ánh xạ quan hệ một-nhiều để mô hình hóa loại quan hệ phổ biến nhất trong dự án.@ManyToMany: Biết cách ánh xạ quan hệ nhiều-nhiều và nhận biết khi nào nên thay bằng một Entity trung gian để lưu thêm thông tin.- Một chiều và hai chiều: Phân biệt quan hệ một chiều, hai chiều và phía sở hữu để dùng
mappedByđúng cách. - Cascade: Dùng các loại cascade để quyết định thao tác trên Entity cha có ảnh hưởng tới Entity con hay không.
orphanRemoval: Phân biệtorphanRemovalvới cascade remove để tự xóa bản ghi con khi nó bị gỡ khỏi Entity cha.- Vòng lặp khi trả JSON: Nhận biết lỗi tham chiếu vòng khi trả Entity có quan hệ và dùng DTO để xử lý tận gốc.
- Eager và Lazy: Hiểu khi nào dữ liệu liên quan được tải để chọn
FetchTypephù hợp cho từng quan hệ. - Xem SQL được sinh ra: Biết cách bật log SQL để kiểm tra Hibernate thực sự chạy bao nhiêu câu lệnh.
LazyInitializationException: Hiểu nguyên nhân của lỗi này để sửa đúng thay vì chuyển mọi quan hệ sang Eager.- Vấn đề N+1: Nhận biết tình huống một danh sách sinh ra hàng trăm câu truy vấn để phát hiện lỗi trước khi lên production.
JOIN FETCHvà@EntityGraph: Dùng hai cách này để tải dữ liệu liên quan trong một truy vấn và loại bỏ N+1.- Batch Fetching: Dùng batch size để gom các truy vấn lẻ, đặc biệt khi cần phân trang trên quan hệ một-nhiều.
- ACID và
@Transactional: Hiểu cách Spring quản lý transaction để nhiều thao tác cùng thành công hoặc cùng được hoàn tác. - Rollback: Hiểu quy tắc rollback với checked exception và runtime exception để không bị lưu dữ liệu sai khi có lỗi.
readOnly: Dùng@Transactional(readOnly = true)để tối ưu các nghiệp vụ chỉ đọc dữ liệu.- Propagation: Hiểu cách transaction lan truyền giữa các phương thức để chọn đúng hành vi khi service gọi lẫn nhau.
- Isolation: So sánh các mức isolation để cân bằng giữa độ chính xác của dữ liệu và hiệu năng.
- Optimistic Locking: Dùng
@Versionđể phát hiện xung đột khi nhiều người cùng sửa một bản ghi. - Lỗi thường gặp với
@Transactional: Nhận biết các trường hợp annotation không có tác dụng, như gọi phương thức trong cùng class, để tránh lỗi khó phát hiện. - Flyway: Dùng Flyway để quản lý thay đổi schema bằng các file có phiên bản, giúp mọi môi trường có cấu trúc database giống nhau.
- JPA Auditing: Dùng
@CreatedDatevà@LastModifiedDateđể tự động ghi lại thời điểm tạo và sửa dữ liệu.
- Authentication và Authorization: Phân biệt xác thực với phân quyền để biết mỗi tính năng bảo mật giải quyết vấn đề nào.
- Security Filter Chain: Hiểu đường đi của request qua các filter để biết cần can thiệp ở đâu và đọc được lỗi bảo mật.
- Cấu hình mặc định: Nhận biết những gì Spring Security tự bật khi thêm thư viện để không bất ngờ khi API bị chặn.
SecurityFilterChain: Biết cách tự viết cấu hình bảo mật để chỉ định API nào công khai và API nào cần đăng nhập.- Basic Auth và Session: Hiểu cách Basic Auth gửi thông tin đăng nhập và cách session duy trì trạng thái đăng nhập để thấy rõ lý do cần chuyển sang token.
- Encoding, Encryption và Hashing: Phân biệt ba khái niệm này để hiểu vì sao mật khẩu phải được băm.
- BCrypt: Dùng
PasswordEncoderđể băm mật khẩu trước khi lưu và tránh lộ mật khẩu khi database bị rò rỉ. - Xác thực bằng database: Xây dựng bảng user, role cùng
UserDetailsServiceđể đăng nhập bằng tài khoản lưu trong database. - API đăng ký: Xây dựng API đăng ký có kiểm tra trùng email và băm mật khẩu để tạo tài khoản mới an toàn.
- CSRF và CORS trong Security: Hiểu cách tấn công CSRF hoạt động để biết khi nào nên tắt, đồng thời cấu hình CORS đúng trong Spring Security.
- Session và token: So sánh hai cách duy trì đăng nhập để hiểu vì sao API stateless thường dùng token.
- Cấu trúc JWT: Hiểu header, payload và chữ ký để biết token được xác minh ra sao và không nên lưu gì trong payload.
- API đăng nhập: Xây dựng API đăng nhập bằng
AuthenticationManagerđể kiểm tra tài khoản và trả về token. - Sinh và kiểm tra token: Xây dựng class tiện ích để tạo token, đọc thông tin và kiểm tra hạn dùng.
- JWT Filter: Xây dựng filter đọc token từ mỗi request và đưa người dùng vào
SecurityContextđể các lớp sau biết ai đang gọi API. AuthenticationEntryPoint: Tùy chỉnh phản hồi khi token sai hoặc hết hạn để client nhận lỗi 401 theo định dạng thống nhất.- Refresh Token: Xây dựng luồng cấp lại access token để người dùng không phải đăng nhập lại thường xuyên.
- Đăng xuất: Biết cách thu hồi refresh token để xử lý đăng xuất dù JWT không thể bị hủy từ phía server.
- Role và Authority: Phân biệt role với authority để thiết kế phân quyền phù hợp với độ phức tạp của hệ thống.
- Phân quyền theo URL: Dùng
requestMatchersvàhasRoleđể giới hạn nhóm API theo vai trò. - Method Security: Dùng
@PreAuthorizeđể kiểm tra quyền ngay trên phương thức khi điều kiện phức tạp hơn đường dẫn. - Kiểm tra quyền sở hữu: Xây dựng logic chỉ cho người dùng sửa dữ liệu của chính họ để tránh lỗ hổng truy cập dữ liệu của người khác.
- Lấy người dùng hiện tại: Biết cách đọc thông tin người đăng nhập từ
SecurityContextđể dùng trong nghiệp vụ. AccessDeniedHandler: Tùy chỉnh phản hồi lỗi 403 để client phân biệt được với lỗi 401.- Ghi lại người thao tác: Dùng
@CreatedByvàAuditorAwaređể tự động lưu người tạo và người sửa dữ liệu. - OAuth2 Login: Hiểu luồng OAuth2 và biết cách tích hợp đăng nhập bằng Google để người dùng không phải tạo mật khẩu mới.
- SLF4J và Logback: Dùng SLF4J để ghi log đúng cách thay cho
System.out.println. - Log level: Chọn đúng mức log và cấu hình theo package để giảm nhiễu mà vẫn đủ thông tin khi điều tra lỗi.
- Khái niệm AOP: Hiểu aspect, advice, pointcut và join point để tách phần code lặp lại ở nhiều nơi khỏi nghiệp vụ.
- Pointcut Expression: Viết biểu thức
execution()và dùng annotation làm pointcut để chọn đúng các phương thức cần áp dụng. - Các loại Advice: Dùng
@Before,@AfterReturning,@AfterThrowingvà@Aroundđể chạy logic tại từng thời điểm của phương thức. - Ứng dụng AOP: Xây dựng aspect ghi log và đo thời gian thực thi để theo dõi hiệu năng mà không sửa code nghiệp vụ.
- Cơ chế Proxy: Hiểu cách Spring dùng proxy để giải thích vì sao gọi phương thức trong cùng class làm
@Transactionalmất tác dụng. - Spring Cache: Dùng
@Cacheable,@CachePutvà@CacheEvictđể giảm truy vấn lặp lại và giữ cache khớp với dữ liệu. - Caffeine và TTL: Cấu hình Caffeine với thời gian hết hạn để tránh trả về dữ liệu cũ.
- Tháp kiểm thử: Phân biệt unit test và integration test để biết nên đầu tư viết loại test nào ở từng lớp.
- JUnit 5: Dùng
@Test, các annotation vòng đời và@DisplayNameđể viết test rõ ràng và dễ đọc. - AssertJ: Dùng các assertion của AssertJ, gồm cả kiểm tra exception, để diễn đạt kết quả mong đợi.
- Parameterized Test: Dùng
@ParameterizedTestđể kiểm tra nhiều bộ dữ liệu mà không viết lặp test. - Mockito: Dùng
@Mock,@InjectMocks, stub vàverifyđể kiểm thử service mà không cần database. @WebMvcTestvà MockMvc: Kiểm thử controller gồm status code, JSON và validation mà không phải khởi động toàn bộ ứng dụng.@MockitoBean: Dùng@MockitoBeanđể thay thế Bean thật bằng mock trong Spring Test Context.- Kiểm thử API có bảo mật: Dùng
@WithMockUserđể kiểm tra các API yêu cầu đăng nhập và phân quyền.
@DataJpaTest: Kiểm thử repository và các câu truy vấn tự viết để phát hiện lỗi JPQL trước khi chạy thật.@SpringBootTest: Khởi động toàn bộ ứng dụng để kiểm tra một luồng đi từ API đến database.- Database riêng cho test: Cấu hình MySQL riêng qua profile test để kiểm thử trên cùng loại database với production mà không ảnh hưởng dữ liệu phát triển.
- Quản lý dữ liệu test: Biết cách chuẩn bị và dọn dữ liệu để các test không ảnh hưởng lẫn nhau.
- Spring Boot Actuator: Dùng Actuator để xem health, metrics, mappings và cấu hình của ứng dụng đang chạy.
- Bảo mật Actuator: Biết cách giới hạn và bảo vệ các endpoint để tránh lộ thông tin nội bộ trên production.
- Chuẩn bị cho production: Rà soát cấu hình, biến môi trường và thông tin bí mật để ứng dụng an toàn trước khi triển khai.
- Đóng gói file JAR: Biết cách build file JAR và chọn profile production để có bản chạy được trên server.
- AWS RDS: Biết cách tạo database trên AWS RDS và kết nối từ ứng dụng để không phải tự vận hành database.
- AWS Elastic Beanstalk: Biết cách triển khai ứng dụng lên Elastic Beanstalk để có một API truy cập được từ internet.
- Quản lý chi phí AWS: Biết cách dọn tài nguyên sau khi dùng để tránh phát sinh chi phí ngoài ý muốn.
- Đề bài: Xây dựng hệ thống backend dựa trên ý tưởng của học viên hoặc do LetDiv quy định.
- Thiết kế: Phân tích yêu cầu, thiết kế database và danh sách API, sau đó tạo schema bằng Flyway.
- Nghiệp vụ: Xây dựng các API có validation, xử lý lỗi, tìm kiếm, phân trang và transaction cho các nghiệp vụ nhiều bước.
- Bảo mật: Triển khai đăng nhập bằng JWT cùng refresh token và phân quyền theo vai trò và quyền sở hữu dữ liệu.
- Kiểm thử: Viết unit test cho service và integration test trên database riêng cho các luồng chính.
- Triển khai: Đóng gói thành file JAR, triển khai lên AWS và trình bày sản phẩm kèm tài liệu Swagger.
Đối tượng học
- Bạn đã biết Java và muốn bước tiếp sang làm backend với framework được dùng phổ biến trong doanh nghiệp.
- Bạn từng làm theo các hướng dẫn Spring Boot nhưng chưa hiểu rõ vì sao code chạy được.
- Bạn đang làm việc với Java và muốn nắm chắc các phần như bảo mật, hiệu năng truy vấn và kiểm thử.
- Bạn là sinh viên muốn có một dự án backend hoàn chỉnh để đưa vào CV.
- Đã có kiến thức cơ bản về Java và SQL. Nếu chưa nắm vững, bạn nên học trước khóa Java và SQL.
Học 1 Kèm 1 - Đảm bảo chất lượng Tốt Nhất
- Bạn sẽ được theo sát và hỗ trợ 1-1 bởi giảng viên. Đảm bảo chất lượng học tập đạt kết quả tốt nhất.
- Nếu HỌC CHẬM bạn không cần lo lắng không theo kịp chương trình, giảng viên sẽ đi chậm để đảm bảo bạn nắm chắc 100% kiến thức.
- Nếu học nhanh, bạn có thể nhanh chóng kết thúc chương trình để đi làm công ty.
Học online - Tiết kiệm thời gian di chuyển
Thay vì phải di chuyển vất vả trên đường giữa dòng người đông đúc. Giờ đây, bạn chỉ cần mở laptop để bắt đầu học ngay tại nhà. Tiết kiệm thời gian, tránh căng thẳng, và tập trung hoàn toàn vào việc học!
Lịch học linh hoạt
- LetDiv sắp xếp lịch học theo ý của bạn. Học đúng thời điểm mà bạn cảm thấy thoải mái nhất.
- Dễ dàng thay đổi lịch học trong khi học nếu bạn có việc bận. Không làm gián đoạn tiến độ học tập của bạn.
- LetDiv có thể sắp xếp thời gian học cho bạn từ 8h đến 23h, kể cả cuối tuần.
Áp dụng Scaffolding Learning
- Học dễ dàng từ cơ bản đến nâng cao qua từng bước nhỏ.
- Cá nhân hóa lộ trình học tập, nắm chắc kiến thức ngay lập tức.
- Tiến bộ vượt bậc nhờ phương pháp sư phạm khoa học hiệu quả.
Trải nghiệm thử buổi học
Bạn có thể tham khảo ngay một buổi học 1 Kèm 1 qua video sau, để hiểu rõ hơn phong cách giảng dạy và quy trình đào tạo của LetDiv sẽ diễn ra như thế nào:
Chính sách hoàn tiền 100%
- Cam kết hoàn tiền 100% nếu bạn không hài lòng với chất lượng đào tạo trong 2 buổi đầu tiên.
- Quá trình hoàn tiền sẽ diễn ra nhanh chóng ngay trong ngày.
Học viên LetDiv đang làm ở đâu?
Đánh giá của học viên

Trước đây mình học Spring ở một trung tâm, lớp gần 30 người nên chỗ nào chưa hiểu cũng ngại hỏi, còn thầy thì phải đi tiếp cho kịp chương trình. Được vài buổi là mình đuổi không kịp, về nhà chỉ biết chép lại code trên bảng mà không hiểu vì sao. Qua đây cả buổi học chỉ có mình với giảng viên, chưa hiểu là mình hỏi luôn, code sai thì giảng viên xem và chỉ đúng chỗ. Đến cuối khóa, mình đã tự viết được một chức năng hoàn chỉnh mà không cần chép theo ai.

Mình từng làm theo nhiều video trên mạng, code chạy được nhưng ai hỏi vì sao thì chịu. Giảng viên hay hỏi ngược lại mình trước khi giải thích, ban đầu hơi áp lực nhưng nhờ thế mình phải nghĩ thật kỹ. Đến giờ mình giải thích được vì sao mình viết code theo cách đó.

Phần đăng nhập và phân quyền là phần mình thấy khó nhất cả khóa. Giảng viên vẽ từng bước một, cho mình tự làm lại nên cuối cùng mình đã hiểu.

Phần dữ liệu liên quan với nhau, như khách hàng và đơn hàng, là chỗ làm mình rối nhất. Giảng viên bảo mình vẽ ra giấy trước rồi mới viết code, sai chỗ nào thì cùng xem lại chỗ đó. Từ các bài sau, mình đã tự thiết kế được phần này mà không cần hỏi nhiều như lúc đầu.

Bài tập rất đa dạng, có bài nhỏ chỉ làm một chức năng, có bài gần với việc thật như đặt hàng phải qua nhiều bước. Bài nào làm chưa tốt, giảng viên cũng xem code và góp ý riêng cho mình.

Mình làm theo ca nên mỗi tuần rảnh một giờ khác nhau. Tuần nào mình cũng báo trước và lịch học được đổi theo, chưa lần nào phải nghỉ dài.

Thú thật là mình từng rất ngại viết kiểm thử vì thấy vừa khó vừa mất thời gian. Giảng viên dạy rất dễ hiểu, đi từ những bài nhỏ rồi mới đến các chức năng thật, và còn xem kỹ từng bài kiểm thử của mình để góp ý. Nhờ khóa học mà giờ mình viết được phần này và thấy yên tâm hơn hẳn mỗi khi sửa code.

Cho dự án cuối khóa, mình chọn làm hệ thống quản lý giải bóng đá của nhóm bạn. Có nhiều chỗ mình tự thiết kế chưa hợp lý, giảng viên góp ý rồi để mình tự sửa. Lúc đưa được lên cloud và gửi đường link cho cả nhóm dùng thử, mình rất vui.
Hoàn tiền 100% nếu không hài lòng 2 buổi đầu tiên
Khóa học này bao gồm
- Thời lượng 21 buổi (3 tháng)
- 2-3 buổi/tuần (2.5 tiếng/buổi)
- 70 bài tập thực hành
- Hỗ trợ riêng 1-1
Hoàn tiền 100% nếu không hài lòng 2 buổi đầu tiên
