All posts in Java Programing

10 sai lầm ‘huyền ảo’ khi sử dụng Stream API trong Java 8

Bài gốc: http://blog.jooq.org/2014/06/13/java-8-friday-10-subtle-mistakes-when-using-the-streams-api/

Lambda Expression và Java Stream API là tính năng lớn trong Java 8 (Ngoài ra còn New Date Time API và vài thay đổi khác). Bài viết mình dịch là 10 sai lầm khi sử dụng Stream API, vì vậy các bạn nên biết trước Stream API là gì? Nó hoạt động thế nào? Mình thấy có rất nhiều các bài hướng dẫn sử dụng Stream API trên mạng.

http://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/
http://blog.hartveld.com/2013/03/jdk-8-33-stream-api.html

Nguồn chính mình học Java Stream API là từ cuốn sách Java SE 8 for the Really Impatient. Cuốn sách khá hay, bao quát và chi tiết hầu hết tính năng mới của Java 8. (Lambda Expression, Stream API, New Date Time API …)

Continue reading →

5 tính năng trong Java 9 làm thay đổi cách bạn phát triển phần mềm

Bài gốc: http://blog.takipi.com/5-features-in-java-9-that-will-change-how-you-develop-software-and-2-that-wont/

Các tính năng của Java 8 mình mới chỉ lấy các ví dụ mẫu để thực hành, đọc trên sách là chủ yếu, chưa áp dụng tính năng mới nào của Java 8 vào thực thế vì các dự án thật hiện tại chủ yếu trên Java 7, có cái tận Java 6, vậy mà Java 9 đang trong giai đoạn hoàn thiện, tháng 12 sẽ hoàn thành các tính năng để vào giai đoạn kiểm thử. Đây là lộ trình của Java 9: 

2015-12-10: Feature Complete
2016-02-04: All Tests Run
2016-02-25: Rampdown Start
2016-04-21Zero Bug Bounce
2016-06-16: Rampdown Phase 2
2016-07-21: Final Release Candidate
2016-09-22: General Availability

Công nghệ nó chạy thì mình phải đua theo, không thể khác được :)). Tất cả tính năng mới của Java 9: http://blog.takipi.com/java-9-the-ultimate-feature-list/. Mình dịch bài này vì cái tiêu đề có vẻ … nói hơi quá :v

Rất nhiều thông tin hay trong các đường dẫn có trong bài viết, các bạn nên xem qua.

Continue reading →

Fail-safe và fail-fast

Bài gốc: http://javapapers.com/core-java/fail-fast-vs-fail-safe/

Hệ thống sẽ phản ứng thế nào khi có một thất bại (failure) đặc trưng xảy ra như một hệ thống fail-fast (thất bại nhanh) hay fail-fast (thất bại an toàn). Bài viết này để thảo luận liệu fail-fast hay fail-safe tốt hơn. Nó sẽ phải làm gì với Java.

Fail fast và fail safe – cái nào tốt hơn?

Tuy từ “fail safe” có vẻ tốt hơn, nhưng tôi có cảm giác fail-fast là tốt nhất. Fail-safe không an toàn. Fail safe không có nghĩa là vững mạnh. Chúng ta đang giữ, che giấu những khuyết điểm(defect) trong hệ thống. Sự bền vững của hệ thống fail-safe có thể không được lâu dài. Hệ thống fail-safe cần cho các trường hợp có tính sẵn sàng sử dụng cao. Khi một thất bại (failure) được phát hiện, cách thức làm việc khác sẽ được thay thế và tính sẵn sàng sử dụng của hệ thống vẫn được đảm bảo.

Fail-fast đưa ra các khuyết điểm của hệ thông khi nó bị phát hiện. Lỗi được công khai rộng rãi và hệ thống sẽ tắt. Công việc sẽ bị tắt nghẽn, nhưng chúng ta được cơ hội khắc phục lỗi. Chúng ta sửa lỗi và mang hệ thống trở lại và chạy ngon lành :D. Điều đó làm cho hệ thống thật sự mạnh mẽ, không che giấu tình trạng lỗi của hệ thống. Mặc dù kết quả làm cho tính sẵn sàng của hệ thống bị gián đoạn, qua được khoảng thời gian đó, kết quả là ta sẽ được một hệ thống mạnh mẽ. Fail-fast đảm bảo rằng chúng ta không lái một chiếc xe tào lao và tạo ra những vấn đề không thể phục hồi được. Đừng chờ đợi những thất bại (failures) trong hệ thống một cách tự nhiên, nhưng nó (failure) nên được thiết kế bằng cách mà khi trong trường hợp thật bại không mong muốn thì chương trình nên fail-fast.

Thử tưởng tượng một câu hỏi điên rồ (provoking – kích động), có phải fail-fast tốt hơn cho lò phản ứng hạt nhân? 

Continue reading →

Google Guice

Trong Java, khi nhắc đến IoC (Inversion of Control) và DI (Dependency Injection) hầu hết mọi người sẽ nghĩ ngay đến Spring Framework, một framework khá nổi tiếng và đang rất được yêu thích trong cộng đồng Java. Ngoài Spring, có 2 framework cũng được mọi người hay nhắc đến là PicoContainer và Google Guice. Hiện tại mình đang làm việc trên Magnolia CMS, một CMS đang phát triển và sử dụng Google Guice trong kiến trúc của nó. Magnolia sử dụng Guice cùng với một số các mẫu thiết kế hướng đối tượng (Design Patterns), tạo nên một kiến trúc module hóa rất hay. Khi nào có thời gian rảnh và lối hành văn tốt hơn ? mình sẽ nói về tầng bên dưới của Magnolia CMS.

Hiện tại Guice đang ở phiên bản 3.0, nhưng mình dịch bài user’s guide của nó là 1.0 vì bài viết khá đơn giản và dễ hiểu giúp các bạn mới tiếp xúc với DI framework nắm bắt dễ dàng hơn. Nếu các bạn muốn tìm hiểu về phiên bản hiện tại của Guice thì theo đường dẫn https://github.com/google/guice/wiki/GettingStarted, Guice đã đưa cả source và user’s guide từ Google Code sang Github.

Một số từ khóa nên biết trước: 

IoC (Inversion of Control)

DI (Dependency Injection)

Singleton Pattern

Factory Pattern

Mock – http://www.mockobjects.com/

Trong bài có khác nhiều từ mình không dịch, các bạn tham khảo giúp mình tại đây

http://toando.coffee/terminology/

Bài gốc: http://google.github.io/guice/user-docs/Guice-1.0-Users-Guide.pdf

Continue reading →

115 câu phỏng vấn Java

Bài gốc: http://www.javacodegeeks.com/2014/04/java-interview-questions-and-answers.html

Phỏng vấn vẫn là vấn đề rất nhiều bạn ra trường khá sợ và thiếu tự tin, sợ và thiếu tự tin một phần chủ yếu do thiếu rất nhiều kiến thức nền tảng, chưa sẵn sàng cho những kiến thức mà mình đang có. Đọc qua những câu phỏng vấn về một vấn đề bạn quan tâm cũng là một cách học khá hay, bạn sẽ biết mình đang thiếu mảng kiến thức nào, cần trao dồi thêm mảng nào, để khi phỏng vấn bạn tự tin hơn với lượng kiến thức mình mang theo. Mong rằng bài dịch sẽ mang một lượng kiến thức nhỏ cho các bạn sinh viên đã hoặc sắp ra trường. Mình thấy những câu trả lời ở dưới khá chung chung và chưa có độ sâu nhất định, khi đã đọc xong cả câu hỏi và câu trả lời mà bạn vẫn còn mơ hồ, hãy tìm hiểu thêm thật rõ về vấn đề đó, đừng để mình bị thiếu hay nghĩ sai về một vấn đề, vì nhiều lúc câu dịch của mình không diễn tả đủ ý tác giả muốn truyền đạt.

Trong bài hướng dẫn này, chúng ta sẽ cùng nhau thảo luận về một vài loại câu hỏi thường hay được sử dụng trong phỏng vấn, nhằm giúp các bạn kiểm tra và củng cố lại kiến thức Java của mình, cùng với lập trình hướng đối tượng.

Xuyên suốt bài viết, chúng ta cùng thảo luận về lập trình hướng đối tượng, những câu hỏi tổng quát liên quan đến Java và những chức năng của nó, tập hợp(collections) trong Java, bộ dọn rác (garbage collectors), ngoại lệ (exception handling), Java applets, Swing, JDBC, Remote Method Invocation (RMI), Servlets and JSP …

Mục lục:

  1. Object Oriented Programming (OOP)
  2. General Questions about Java
  3. Java Threads
  4. Java Collections
  5. Garbage Collectors
  6. Exception Handling

Java Applets, Swing, JDBC, Remote Method Invocation (RMI), Servlets, JSP

Continue reading →