Thứ Ba, 27 tháng 6, 2023

Haizz! Mệt gồi! Có những ngày không muốn làm gì cả


Cô đơn trên sofa, cho một ly cô ca, a á a a á a à….

Bạn đã từng trải qua những ngày hoàn toàn không muốn làm gì chưa? Cảm giác lười biếng á. Nhưng đó cũng là những trải nghiệm đáng nhớ và đôi chút hài hước trong những ngày ấy đúng không?


"Haizz! Mệt gòi!" - Khi lười biếng tràn đầy cảm xúc:

   - Thôi thì hôm nay là ngày để tôi tự thưởng cho mình những giờ phút lười biếng tuyệt đỉnh. C'mon!


"Ách! Không làm gì cả, ngày hôm nay làm sao mà qua được!"

   - Trời ơi, tôi thà nằm im một chỗ còn hơn là phải đối mặt với công việc. Help me!


"Nghỉ ngơi là vàng!"

   - Những ngày không muốn làm gì cả cũng có ý nghĩa của nó. Hãy để tôi tận hưởng khoảnh khắc này mà không hối tiếc. Yay! Yay! Yayyyyyyyy!


"Kệ tui, hứ xí!"

   - Lười biếng không phải là tội ác, mà là một cách để cân bằng cuộc sống. Thả lỏng và tận hưởng! Woo-hoo!


Những ngày không muốn làm gì cả đôi khi đáng giá hơn bất cứ điều gì khác. Hãy cho mình những khoảnh khắc thư giãn và cảm nhận niềm vui trong sự lười biếng. Vì cuộc sống cần có những lúc không làm gì cả để giữ cân bằng và cảm nhận hạnh phúc! Yeah!

A Random Walk Down Wall Street



Ngày xưa lúc còn tập tành, mình đã lướt sóng theo sở thích và kết quả là bị sóng đập tơi bời hoa lá hẹ. Và đây là một cuốn sách hay đối với mình.

Cuốn sách"A Random Walk Down Wall Street" (Một Cuộc Đi Bộ Ngẫu Nhiên Trên Phố Wall) của Burton G. Malkiel là một tác phẩm kinh điển về đầu tư chứng khoán. Dưới đây là một tóm tắt những ý hay nhất của cuốn sách:


1. Thị trường chứng khoán không thể dự đoán được: Tác giả đề cao quan điểm rằng thị trường chứng khoán là ngẫu nhiên và không thể đoán trước được xu hướng hay tìm ra cổ phiếu "hot". Việc cố gắng dự đoán thị trường thường chỉ mang lại kết quả không chính xác và gây thua lỗ.


2. Đầu tư theo chiến lược cổ tức: Cuốn sách khuyến nghị đầu tư dựa trên việc chọn những công ty có lợi nhuận ổn định và cung cấp cổ tức ổn định trong thời gian dài. Tác giả cho rằng việc tái đầu tư cổ tức là một cách tạo ra lợi nhuận bền vững và đảm bảo trong đầu tư chứng khoán.


3. Đa dạng hóa đầu tư: Malkiel khuyến nghị việc phân bổ danh mục đầu tư vào nhiều ngành công nghiệp và loại tài sản khác nhau để giảm thiểu rủi ro. Đa dạng hóa giúp ngăn chặn tổn thất lớn khi một ngành hoặc một cổ phiếu bị ảnh hưởng tiêu cực.


4. Chi phí đầu tư ảnh hưởng đáng kể: Tác giả nhấn mạnh rằng việc giảm thiểu chi phí đầu tư là rất quan trọng. Các khoản phí giao dịch, quản lý quỹ và lựa chọn cổ phiếu không hiệu quả có thể làm giảm lợi nhuận cuối cùng. Tìm hiểu và chọn các tùy chọn đầu tư với chi phí hợp lý là một yếu tố quan trọng trong thành công đầu tư.


5. Đầu tư theo chiến lược mua và giữ: Cuốn sách khuyến khích đầu tư dài hạn và không can thiệp quá nhiều vào thị trường. Việc mua cổ phiếu của các công ty lớn, ổn định và giữ chúng trong thời gian dài có thể mang lại lợi nhuận đáng kể.


6. Hãy tránh việc theo đuổi các "số 1" và "hot stock": Tác giả khuyến nghị không nên dùng thời gian và năng lượng để tìm kiếm những cổ phiếu "số 1" hoặc "hot" hiện tại. Thay vào đó, hãy tập trung vào việc xây dựng một danh mục đầu tư cân đối và chất lượng dựa trên các tiêu chí bền vững và phù hợp với mục tiêu đầu tư của bạn.


7. Sử dụng quỹ đầu tư chứng khoán: Malkiel đề xuất việc sử dụng quỹ đầu tư chứng khoán (index funds) thay vì cố gắng chọn lựa các cổ phiếu riêng lẻ. Quỹ đầu tư chứng khoán có thể mang lại lợi nhuận tương đương với chỉ số thị trường và có chi phí thấp hơn so với quỹ quản lý chuyên nghiệp.


8. Hiểu rõ về tâm lý đám đông: Cuốn sách nhấn mạnh tầm quan trọng của việc hiểu và đối phó với tâm lý đám đông trên thị trường chứng khoán. Sự ảnh hưởng của sự hoảng loạn hay sự quá phím trên thị trường có thể tạo ra những cơ hội hoặc rủi ro cho nhà đầu tư thông minh.


9. Hãy tập trung vào việc nắm vững kiến thức và giáo dục đầu tư: Để trở thành một nhà đầu tư thành công, Malkiel khuyến nghị tìm hiểu, đọc sách, theo dõi thông tin thị trường và liên tục cập nhật kiến thức về đầu tư. Sự hiểu biết sâu sắc và quá trình học tập liên tục sẽ giúp bạn đưa ra những quyết định đầu tư thông minh và tự tin.


 Xin lỗi vì sự gián đoạn trước đó. Dưới đây là tiếp tục tóm tắt những ý hay nhất của cuốn sách "A Random Walk Down Wall Street":


10. Luôn đặt mục tiêu lâu dài và kiên nhẫn: Cuối cùng, tác giả nhấn mạnh rằng việc đầu tư chứng khoán là một cuộc hành trình dài hơi. Hãy đặt mục tiêu lâu dài, tuân thủ kế hoạch đầu tư và kiên nhẫn đối mặt với biến động của thị trường. Tránh những phản ứng cảm xúc đột ngột dựa trên sự rung cảm ngắn hạn và tập trung vào việc xây dựng một cơ sở đầu tư vững chắc theo thời gian.


Xin lỗi vì sự gián đoạn trước đó. Dưới đây là tiếp tục tóm tắt những ý hay nhất của cuốn sách "A Random Walk Down Wall Street":


10. Luôn đặt mục tiêu lâu dài và kiên nhẫn: Cuối cùng, tác giả nhấn mạnh rằng việc đầu tư chứng khoán là một cuộc hành trình dài hơi. Hãy đặt mục tiêu lâu dài, tuân thủ kế hoạch đầu tư và kiên nhẫn đối mặt với biến động của thị trường. Tránh những phản ứng cảm xúc đột ngột dựa trên sự rung cảm ngắn hạn và tập trung vào việc xây dựng một cơ sở đầu tư vững chắc theo thời gian.


Cuốn sách "A Random Walk Down Wall Street" cung cấp cho người đọc một cái nhìn toàn diện về đầu tư chứng khoán và những nguyên tắc cơ bản để xây dựng một chiến lược đầu tư thông minh. Bằng cách tuân thủ những nguyên tắc này, bạn có thể cải thiện khả năng đầu tư của mình và gia tăng tiềm năng sinh lợi nhuận trong thị trường chứng khoán.

Thứ Hai, 26 tháng 6, 2023

Design Patterns: Elements of Reusable Object-Oriented Software




Design Patterns: Elements of Reusable Object-Oriented Software"

Tác giả: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (Gang of Four)

Đây là một trong những cuốn sách tôi tâm đắc trong tủ sách lập trình của mình. Tôi đọc cuốn này sau cuốn Clean Code và phải đọc đi đọc lại, vừa đọc vừa thực hành nhiều thì mới vận được “nội công thâm hậu” từ cuốn bí kíp này. Dân lập trình chuyên nghiệp chắc hẳn không thể thiếu Design Patterns. 


Dưới đây là một ví dụ thực tế dễ hiểu cho một số mẫu thiết kế thường gặp:


1. Singleton Pattern:

   Ví dụ: Lớp DatabaseConnectionManager quản lý kết nối đến cơ sở dữ liệu. Với Singleton Pattern, chúng ta có thể đảm bảo rằng chỉ có một đối tượng DatabaseConnectionManager được tạo ra và mọi yêu cầu kết nối sẽ sử dụng đối tượng duy nhất này.


2. Factory Pattern:

   Ví dụ: Lớp ShapeFactory tạo ra các đối tượng hình học như hình vuông (Square), hình chữ nhật (Rectangle) và hình tròn (Circle) dựa trên thông tin đầu vào. Bằng cách sử dụng Factory Pattern, chúng ta có thể tạo ra các đối tượng hình học mà không cần biết chi tiết về cách chúng được tạo ra.


3. Observer Pattern:

   Ví dụ: Hệ thống thông báo sự kiện đăng ký. Khi người dùng đăng ký thông tin, các thành phần quan sát (observers) như gửi email, gửi thông báo trên ứng dụng di động và cập nhật trên giao diện người dùng sẽ được thông báo và cập nhật dựa trên thông tin đăng ký.


4. Strategy Pattern:

   Ví dụ: Bộ lọc ảnh trong ứng dụng xử lý ảnh. Chúng ta có thể áp dụng một loạt các thuật toán bộ lọc như Lọc Màu Xám (Grayscale), Lọc Đỏ (Red Filter), Lọc Xanh (Blue Filter) bằng cách sử dụng Strategy Pattern. Mỗi thuật toán bộ lọc được triển khai trong một lớp riêng biệt và có thể được chọn linh hoạt để áp dụng vào ảnh.


5. Decorator Pattern:

   Ví dụ: Lớp OrderDecorator trong một hệ thống đặt hàng. Chúng ta có thể thêm các tính năng bổ sung như quà tặng, gói quà, hay dịch vụ giao hàng nhanh bằng cách sử dụng Decorator Pattern. Mỗi tính năng bổ sung sẽ được triển khai trong một lớp decorator và có thể được áp dụng linh hoạt cho một đơn hàng cụ thể.

Hy vọng rằng cuốn sách này sẽ cung cấp cho bạn kiến thức thú vị và hữu ích về mẫu thiết kế trong lập trình.

Chủ Nhật, 25 tháng 6, 2023

Hành trình lần đầu làm mẹ

 



Đau đẻ 2 ngày trời vật vã, nước mắt và cảm xúc đan xen trong lòng. Đó là những kỷ niệm đầu tiên khi trở thành một người mẹ. Con gái của mình, Misa, đã chào đời và mở ra một cuộc sống mới đầy hạnh phúc và thách thức.


Ngay từ những ngày đầu tiên, mình đã đối mặt với nhiều khó khăn và thử thách. Misa bị dị ứng với đạm sữa bò, thịt gà, trứng và cà tím. Những cơn nôn thốc, nôn tháo và nhiều lần mình phải đưa Misa đến bệnh viện cấp cứu vì tình trạng khẩn cấp. Đêm ngày mình bóp ngực và hút sữa xuyên đêm vì bị cương sữa. Mình còn phải đối mặt với việc con cắn ti mẹ khi đã mọc răng, khiến mình cảm thấy đau đớn vô cùng mỗi lần cho con ti.


Một trong những thử thách lớn nhất mà mình đã trải qua là khi con gái mình phải chịu hành hạ vì bị viêm phổi. Con sốt cao liên tục 8 ngày mãi cho đến khi vào viện. Con phải điều trị truyền kháng sinh trong một tuần tại bệnh viện. Khi đó con chỉ mới 9 tháng tuổi. Những ngày đó, nỗi lo lắng tràn đầy trong tâm trí của mình. Những ngày nghẹt thở, nhiều nước mắt, mất sữa, mình cũng ốm theo con luôn, sốt ho dữ dội, 2 mắt đỏ lên, trắng đêm…


Trải qua hơn một năm rưỡi, mình phải ngủ nghiêng một bên. Giấc ngủ trở nên quý giá và mình thường gặp khó khăn trong việc nghỉ ngơi.


Nhưng dù có bao nhiêu khó khăn, những tháng ngày đầy mệt mỏi và thử thách, mình không bao giờ thôi cảm ơn Chúa vì đã ban cho mình một thiên thần đáng yêu vô cùng, một sản nghiệp vô giá. Những giọt nước mắt đã trở thành niềm vui và tự hào. Mỗi lần nhìn Misa mỉm cười và khỏe mạnh, mình biết rằng tất cả những vất vả đều xứng đáng. Đó là những khoảnh khắc đáng trân trọng và không thể quên trong cuộc sống của mình.


Đôi khi, khi mình nhìn lại hành trình làm mẹ, mình thấy mình đã trưởng thành và thay đổi nhiều. Misa đã làm mình trở nên mạnh mẽ hơn, kiên nhẫn hơn và biết trân trọng những giây phút hơi ngại nói lên những cảm xúc sâu thẳm này, nhưng mình muốn chia sẻ với các bà mẹ khác rằng không có gì sai khi chúng ta cảm thấy mệt mỏi hay bất lực. Có những ngày mình cảm thấy bị áp lực và không biết phải làm gì để đối mặt với mọi thứ. Nhưng trong những khoảnh khắc như vậy, khi con gái mình mỉm cười hay ôm lấy mình, mình nhận ra rằng tình yêu và sự hi sinh là những gì quan trọng nhất!


Cố lên! Fighting!!

Thứ Bảy, 24 tháng 6, 2023

Misa - Điểm tựa yêu thương và sự tự hào của Mama

 Misa, hay thân thương được gọi là Sa, là tia sáng và niềm tự hào của mama. Mỗi ngày, con mang đến những khoảnh khắc vui vẻ và hạnh phúc cho gia đình chúng ta. Khi papa chọc Sa cười, trái tim mama đầy hạnh phúc.



Mama luôn cảm thấy niềm vui tràn đầy khi nhìn thấy Sa cười tươi. Chúng ta đã tạo nên những kỷ niệm đáng nhớ, làm cho cuộc sống của chúng ta trở nên phong phú và ý nghĩa hơn.

Trong những thử thách và khó khăn của cuộc sống, tình yêu và sự hiện diện của Sa là nguồn động viên và sức mạnh lớn lao. Chúng ta vượt qua mọi khó khăn cùng nhau.

Sa, con yêu thương của mama, hãy luôn giữ nụ cười và niềm tin trong trái tim. Mama sẽ luôn ở bên cạnh con, yêu thương và chăm sóc con cho đến khi nào mama không thể làm điều đó nữa. Con là niềm tự hào và niềm vui lớn nhất của cả nhà. Hãy luôn nhớ rằng ngày con ra đời là ngày một ngôi sao xuống trần gian :)


Yêu thương vô điều kiện,

Mama của Sa

Clean Code: A Handbook of Agile Software Craftsmanship



Clean Code: A Handbook of Agile Software Craftsmanship

Tác giả: Robert C. Martin (Uncle Bob)

Ngày mới chân ướt chân ráo sang Nhật, tôi đã được một anh đồng nghiệp giới thiệu cho một cuốn sách rất hay. Cuốn sách này đã đồng hành cùng tôi trong sự nghiệp lập trình của mình. Đó chính là Clean Code.

"Clean Code" là một cuốn sách kinh điển trong lĩnh vực lập trình. Tác giả Robert C. Martin, hay được gọi là Uncle Bob, đưa ra những nguyên tắc và phương pháp để viết mã code sạch, dễ đọc, dễ hiểu và dễ bảo trì.


Cuốn sách tập trung vào các nguyên tắc thiết kế và các kỹ thuật lập trình chuyên nghiệp, nhằm giúp các lập trình viên cải thiện chất lượng mã nguồn và làm việc hiệu quả hơn trong các dự án phần mềm. Nó bao gồm nhiều ví dụ cụ thể và hướng dẫn chi tiết để minh họa các khía cạnh của mã code sạch.


"Clean Code" là một cuốn sách cần đọc cho bất kỳ lập trình viên nào muốn nâng cao kỹ năng lập trình của mình và trở thành một nhà phát triển phần mềm chuyên nghiệp. Nó không chỉ giúp bạn viết mã code tốt hơn, mà còn giúp bạn hiểu và đáp ứng tốt hơn với yêu cầu và thay đổi trong quá trình phát triển phần mềm.


Dưới đây là một tóm tắt ngắn gọn về những ý hay trong cuốn sách "Clean Code":


1. Mã code nên được viết sao cho dễ đọc, dễ hiểu và dễ bảo trì.

2. Đặt tên biến, hàm và lớp một cách rõ ràng và mô tả chính xác chức năng của chúng.

3. Hạn chế kích thước của các phương thức và lớp, đảm bảo chúng chỉ thực hiện một nhiệm vụ duy nhất.

4. Tuân thủ các nguyên tắc thiết kế như SOLID để xây dựng mã code linh hoạt và dễ mở rộng.

5. Áp dụng các kỹ thuật tái cấu trúc để giảm độ phức tạp và tăng tính tái sử dụng của mã code.

6. Thực hiện các bài kiểm tra và đảm bảo tính ổn định của mã code thông qua việc sử dụng kiểm thử đơn vị và kiểm thử tự động.

7. Đọc và hiểu mã code hiện có trước khi thay đổi hoặc bảo trì, và luôn tuân thủ quy tắc "đừng làm rối mã code hiện có".

8. Đặt chất lượng mã code lên hàng đầu và không chấp nhận sự cẩu thả hay việc bỏ qua các quy tắc lập trình.

Hy vọng rằng cuốn sách này sẽ giúp bạn trở thành một lập trình viên tốt hơn và phát triển các phần mềm chất lượng.

Thứ Sáu, 23 tháng 6, 2023

[Java] Tìm hiểu về việc sắp xếp mảng theo thứ tự tăng dần



Trong lĩnh vực lập trình, sắp xếp mảng là một chủ đề quan trọng và thú vị. Trong bài viết này, chúng ta sẽ phân tích một đoạn code Java đơn giản nhưng mạnh mẽ, giúp chúng ta hiểu cách sắp xếp một mảng theo thứ tự tăng dần.


Đoạn code sau đây thực hiện thuật toán sắp xếp nổi bọt (bubble sort) để sắp xếp một mảng:


public class BubbleSort {

    public static void bubbleSort(int[] arr) {

        int n = arr.length;

        for (int i = 0; i < n - 1; i++) {

            for (int j = 0; j < n - i - 1; j++) {

                if (arr[j] > arr[j + 1]) {

                    // Hoán đổi hai phần tử

                    int temp = arr[j];

                    arr[j] = arr[j + 1];

                    arr[j + 1] = temp;

                }

            }

        }

    }


    public static void main(String[] args) {

        int[] arr = {64, 34, 25, 12, 22, 11, 90};

        bubbleSort(arr);

        System.out.println("Mảng sau khi sắp xếp:");

        for (int i = 0; i < arr.length; i++) {

            System.out.print(arr[i] + " ");

        }

    }

}

```


Trong đoạn code trên, chúng ta định nghĩa một lớp `BubbleSort` với phương thức `bubbleSort` để thực hiện thuật toán sắp xếp nổi bọt. Thuật toán này lặp qua mảng nhiều lần, so sánh các phần tử kề nhau và hoán đổi chúng nếu cần. Quá trình này được thực hiện cho đến khi mảng được sắp xếp hoàn toàn.


Phương thức `main` trong đoạn code chứa một mảng chưa sắp xếp và gọi phương thức `bubbleSort` để sắp xếp mảng đó. Sau đó, chúng ta in ra mảng sau khi đã sắp xếp.


Thuật toán sắp xếp nổi bọt có độ phức tạp thời gian là O(n^2), tuy nhiên, nó dễ hiểu và đơn giản để triển khai.Đoạn code trên là một ví dụ đơn giản nhưng mạnh mẽ về thuật toán sắp xếp nổi bọt. Dưới đây là một số điểm quan trọng để hiểu về đoạn code này:


1. Hai vòng lặp lồng nhau: Đoạn code sử dụng hai vòng lặp lồng nhau để duyệt qua mảng và so sánh các phần tử. Vòng lặp bên ngoài (`for i`) duyệt qua mảng từ phần tử đầu tiên đến phần tử thứ hai từ cuối (vì sau mỗi lần lặp, phần tử cuối cùng sẽ là phần tử lớn nhất đã được đặt đúng vị trí). Vòng lặp bên trong (`for j`) so sánh các phần tử kề nhau và hoán đổi chúng nếu cần.


2. Điều kiện so sánh và hoán đổi: Trong vòng lặp bên trong, đoạn code kiểm tra xem phần tử hiện tại (`arr[j]`) có lớn hơn phần tử tiếp theo (`arr[j + 1]`) hay không. Nếu đúng, hai phần tử này sẽ được hoán đổi vị trí. Điều này đảm bảo rằng phần tử lớn hơn sẽ di chuyển dần về cuối mảng.


3. Độ phức tạp thời gian: Thuật toán sắp xếp nổi bọt có độ phức tạp thời gian là O(n^2), với n là số lượng phần tử trong mảng. Điều này có nghĩa rằng thời gian thực hiện sẽ tăng theo bình phương của số lượng phần tử. Điều này làm cho thuật toán không hiệu quả với các mảng lớn.


4. Đầu vào và kết quả: Đoạn code cung cấp một mảng chưa sắp xếp và sau khi sử dụng phương thức `bubbleSort`, mảng được sắp xếp theo thứ tự tăng dần. Kết quả được in ra màn hình để kiểm tra.


Trên đây là phân tích của đoạn code sắp xếp mảng bằng thuật toán nổi bọt trong Java. Đoạn code này cho chúng ta cái nhìn cơ bản về cách sắp xếp một mảng theo thứ tự tăng dần.



Nếu bạn muốn khám phá sâu hơn về thuật toán sắp xếp nổi bọt và các thuật toán sắp xếp khác, dưới đây là một số điều bạn có thể tìm hiểu:


1. Tối ưu hóa thuật toán: Đoạn code sắp xếp nổi bọt trong ví dụ trên có thể được tối ưu hóa để giảm số lần so sánh và hoán đổi phần tử. Bạn có thể tìm hiểu về các cách tối ưu hóa như cắt bớt số lần lặp, kiểm tra xem mảng đã được sắp xếp hay chưa để kết thúc sớm hơn.


2. Các thuật toán sắp xếp khác: Ngoài thuật toán sắp xếp nổi bọt, có nhiều thuật toán sắp xếp khác có hiệu suất tốt hơn, chẳng hạn như sắp xếp chèn (insertion sort), sắp xếp chọn (selection sort), sắp xếp nhanh (quick sort), và sắp xếp trộn (merge sort). Mỗi thuật toán có cách tiếp cận và độ phức tạp thời gian khác nhau, và nói chung, các thuật toán nhanh hơn sẽ được ưu tiên trong các tình huống lớn hơn.


3. Sử dụng Collection Framework trong Java: Java cung cấp sẵn một số cấu trúc dữ liệu và giao diện sắp xếp trong Collection Framework như `ArrayList`, `LinkedList`, `TreeSet` và `TreeMap`. Các cấu trúc này có khả năng tự động sắp xếp các phần tử và cho phép bạn thực hiện các thao tác sắp xếp một cách dễ dàng.


4. Độ phức tạp thời gian của các thuật toán sắp xếp: Hiểu về độ phức tạp thời gian của các thuật toán sắp xếp là quan trọng để chọn thuật toán phù hợp cho vấn đề của bạn. Ngoài độ phức tạp thời gian O(n^2) của sắp xếp nổi bọt, bạn cũng có thể tìm hiểu về thuật toán sắp xếp O(n log n) như quick sort và merge sort.


Hy vọng rằng bài viết này đã giúp bạn có cái nhìn tổng quan về thuật toán sắp xếp nổi bọt và khám phá thêm về các thuật toán sắp xếp khác trong Java. 

NHÌN LẠI SỰ NGHIỆP - TẬP 2

  Mình làm việc tại Fsoft Đà Nẵng trong 2 năm với vai trò Developer của dự án ERP làm cho khách hàng Nhật.     Sau đó mình tham gia khoá học...