Menu

Java: Singleton Pattern và kết nối với cơ sở dữ liệu trong các ứng dụng Java

Singleton pattern
Bài viết này mình sẽ nói đến hai phần i)thứ nhất là Singleton Pattern và ii) thứ hai là kết nối với cơ sở dữ liệu trong các ứng dụng Java đơn giản. Cuối cùng, mình trình bày lý do tại sao mình lại áp dụng Singleton Pattern vào việc kết nối với cơ sở dữ liệu trong các ứng dụng Java.

Liferay: So sánh giữa Liferay MVC va Spring MVC

Liferay MVC vs Spring MVC
So sánh giữa Liferay MVC và Spring MVC là một chủ đề nóng nhất trong cộng động phát triển ứng dụng Liferay. Lập trình viên luôn bối rối khi chọn một trong hai framework này. Trong bài viết này tôi sẽ so sánh giữa hai framework để tạo portlet trong Liferay.
Trước khi thảo luận chi tiết hơn, bạn có thể tham khảo ở các blog sau Liferay MVC PortletSpring MVC Portlet để hiểu các khái niệm cơ bản. Để hiểu được sự giống và khác nhau giữa Liferay MVC và Spring MVC, ta sẽ đi so sánh các đặc trưng giữa hai framework này.

Liferay: Tải tệp tin (upload file) trong portlet

Tải tệp tin lên là một hoạt động thường xuyên. Bạn có thể sử dụng nó để tải các tệp tin tài liệu (ví dụ: doc, docx, pdf, png...) hoặc các tệp tin dữ liệu (ví dụ: csv, xls, xlsx, odt,..). Có rất nhiều cách để tải một file nên. Tôi sẽ chỉ cho bạn một cách trong bài viết này.



Liferay 6.2: Upload file in portlet


Vietnamese version
The uploading file is an activity frequently. You can use this activity to upload document files (for examples: doc, docx, pdf, png...) or data files (for examples: csv, xls, xlsx, odt,..). There are many ways to upload a file, I will show you my way in this post.


Alogrithm: Sắp xếp vun đống (heap sort)

Thực hiện vun đống
Trước hết ta hãy hình dung nếu chúng ta có một danh sách các đồ vật và mỗi đồ vật thì có một giá trị cân nặng cụ thể. Làm thế nào để chúng ta có thể sắp xếp lại chúng theo chiều cân nặng tăng dần chẳng hạn.
Rất may mắn có một người bạn giúp ta làm một việc như sau: người bạn đó sẽ sắp xếp số đồ vật của chúng ta thành một đống mà phần tử ở trên bao giờ cũng nhẹ hơn phần tử ở dưới. Như vậy, ta lấy được đồ vật nhỏ nhất và bỏ ra ngoài. Người bạn lại tiếp tục sắp lại đống đồ vật trên và ta lại chọn phần tử ở trên cao nhất - là phần tử nhẹ nhất trong đống nhưng nhẹ thứ hai trong danh sách các đồ vật. Cứ thế đến cuối cùng thì các phần tử được ta nhặt ra từ đống sẽ được sắp xếp.
Ngay lập tức ta thấy có một câu hỏi đặt ra là việc xếp lại cái đống đồ vật để cho ta chọn đồ vật nhẹ nhất có phức tạp và khó khăn hay không? Rất may nó lại khá đơn giản, post này sẽ giải thích kỹ hơn cho bạn.

Algorithm: Thuật toán sắp xếp nhanh (quick sort)

Hình động cảu thuật toán sắp xếp nhanh
Các thuật toán như sắp xếp nổi bọt, chènchọn đều có độ phức tạp trung bình về thời gian là O(n2). Với thuật toán sắp xếp nhanh trong trường hợp xuất nhất (khi danh sách đầu vào đã được sắp xếp rồi) thì độ phức tạp về thời gian sẽ là O(n2còn trong trường hợp trung bình thì độ phức tạp về thời gian của nó là O(nlogn). Như vậy, trong các tình huống sắp xếp thông thường ta sẽ chọn thuật toán sắp xếp nhanh để cài đặt cho bài toán sắp xếp của mình. Quick sort cũng là một thuật toán đặc trưng của tư tưởng chia để trị.

Algorithm: Thuật toán sắp xếp chèn (insertion sort)

Sắp xếp chèn (insertion sort)
Khác hoàn toàn với thuật toán sắp xếp chọn (tại một vị trí ta đi chọn phần tử phù hợp), thuật toán chèn làm ngược lại là xét các phần tử với từng phần tử ta sẽ chèn nó vào vị trí đúng thứ tự của sắp xếp.

Liferay 6.2: Kết hợp search container và cơ sở dữ liệu

Trong hai post trước đây (service buildersearch container) cho phép chúng ta tương tác với dữ liệu và tương tác với giao diện. Trong post này mình sẽ kết hợp cả hai công việc riêng rẽ ở hai post trên vào thành một. Có nghĩa là ứng dụng của chúng ta sẽ lấy dữ liệu từ cơ sở dữ liệu hiển thị lên màn hình nhờ search container và chúng ta có thể dùng các tham số của search container để lọc các bản ghi phù hợp. Bây giờ các ứng dụng ta viết ra sát với thực tế rồi đấy.

Algorithm: Thuật toán sắp xếp chọn (selection sort)

Hình động sắp xếp chọn
Từ cái tên của thuật toán ta có thể đoán ngay được ý tưởng của thuật toán. Thật đúng như vậy, giả sử chúng ta muốn sắp xếp một danh sách (mảng) theo chiều tăng dần thì rõ ràng phần tử đầu tiên của danh sách sẽ là phần tử nhỏ nhất, phần tử tiếp theo là phần tử nhỏ thứ 2, tiếp nữa là phần tử nhỏ thứ 3,... đến hết. Như vậy, ta xét từng vị trí và chọn phần tử tương ứng với vị trí đó.

Algorithm: Thuật toán sắp xếp nổi bọt (bubble sort)

Minh họa

Sắp xếp nổi bọt là thuật toán sắp xếp đơn giản nhất và dễ hình dung nhất. Ý tưởng của thuật toán như sau: có một danh sách các phần tử để sắp xếp được danh sách này ta sẽ chuyển dần các phần tử "nhẹ" lên trên và các phần tử nặng "xuống" dưới. Ok, bây giờ chúng ta sẽ xem thuật toán được triển khai như thế nào trong ngôn ngữ lập trình nhé.