Tuesday

Sử dụng biểu thức chính quy cho validate chuỗi


Trong phát triển phần mềm, sử dụng biểu thức quy tắc là cách đơn giản nhất dùng để kiểm tra một chuỗi.
Trong bài này giới thiệu một số quy tắc đơn giản cho việc kiểm tra chuỗi:

Một chuỗi gồm 3 ký tự:

  • [a-g]{3}

Một chuỗi với số ký ttrong khoan 1-3
  • [a-g]{1,3}


Định nghĩa một mẫu gồm 8 số.

  • ^[0-9]{8}$

  • Mộ chuỗi 3 ký tự không phân biệt, và dãy gồm 7 chữ s.

    • ^[a-zA-Z]{3}[0-9]{7}$

    * Kiểm tra một mẫu địa chtrang web
    • ^www[.][a-z]{1,15}[.](com|net|org)$

  • Kiểm tra địa chỉ mail

    • ^[a-zA-Z0-9]{1,10}@[a-zA-Z]{1,10}.(com|net|org)$

    Monday

    Giới thiệu vể biểu thức quy tắc (Regular Expression)


    1. Khái niệm:
    Một biểu thức quy tắc là một mẫu để mô tả một chuỗi các ký tự chia sẻ chung mẫu đó.
    Ví dụ: một mẫu mô tả email (lưu ý mẫu ví dụ ở đây không được định nghĩa theo biểu thức quy tắc):
                                            string + @ + string + '.' + string
              Các chuỗi ứng với mẫu này:
                                            jbohn@gmail.com
                                            java@hotmail.com
                                            bohn@oracle.net
                                            .....
    2. Cú pháp mô tả một biểu thức quy tắc (mẫu)
    Một số các phần tử thay thế được sử dụng để mô tả một biể thức quy tắc:
    . Bất kỳ ký tự nào.
    ? Không (0) hoặc một (1) của ký tự đứng trước.
    * Không (0) hoặc lớn hơn của ký tự đứng trước.
    + Một (1) hoặc lớn hơn của ký tự đứng trước.
    [] Một dải các ký tự hay chữ số. Ví dụ: [0-9], [a-z]
    ^ Không phải cái tiếp sau (tức là, "không phải <cái gì đó>").
    \d Bất kỳ số nào (tùy chọn, [0-9]).
    \D Bất kỳ cái gì không là số (tùy chọn, [^0-9]).
    \s Bất kỳ khoảng trống nào (tùy chọn, [ \n\t\f\r]).
    \S Không có bất kỳ khoảng trống nào (tùy chọn, [^ \n\t\f\r]).
    \w Bất kỳ từ nào (tùy chọn, [a-zA-Z_0-9]).
    \W Không có bất kỳ từ nào (tùy chọn, [^\w]).
    Một số phần tử đầu tiên ở đây được gọi là các lượng tử ((quantifiers), bởi vì chúng xác định số lượng cái đứng trước chúng. Các cấu kiện như là \d là các lớp ký tự được định nghĩa trước. Bất kỳ ký tự nào mà không có ý nghĩa đặc biệt trong một mẫu sẽ là một trực kiện và chỉ khớp với chính nó.

    Ví dụ:
    Giả sử có chuỗi ký tự sau:
    Here is a WikiWord followed by AnotherWikiWord, then YetAnotherWikiWord.
    

    Bạn có thể tìm kiếm các từ wiki trong chuỗi này với mẫu biểu thức chính quy như sau:
    [A-Z][a-z]*([A-Z][a-z]*)+
     
     
                                  http://jbohn.blogspot.com 

    Sunday

    Bộ nhớ heap của Java


    Làm quen với Java lâu nhưng ít người để ý bộ nhớ heap của Java trong khi nó đóng vai trò rất quan trọng trong việc bảo đảm hiệu suất làm việc của Java.
    Bộ nhớ heap là gì?
    Bộ nhớ heap chính là bộ nhớ dùng để lưu trữ các đối tượng được tạo ra trong 1 chương trình Java. Như vậy nếu kích thước bộ nhớ quá nhỏ trong khi số lượng đối tượng được tạo ra lớn hơn dẫn đến tràn bộ nhớ.
    Ví dụ cụ thể, bộ nhớ heap mặc định của Java là 64MB. 1 chương trình Java có 1 đối tượng với khoảng 10 thuộc tính kiểu String với độ dài trung bình là 50 ký tự, 1 ký tự 2 bytes như vậy khoảng 100 bytes. Nhân với 10 thuộc tính là 1MB. Nếu chương trình khởi tạo 1 danh sách khoảng 100 đối tượng như vậy lượng bộ nhớ cần dùng là 100MB, chương trình sẽ lập tức bị tràn bộ nhớ.
    Có thể thấy khả năng dẫn đến tràn bộ nhớ là rất cao, đặc biệt đối với các chương trình Java lớn.

    Cách khắc phục
    Giải pháp là tăng bộ nhớ heap. Nói tuy đơn giản nhưng để thực hiện khá phức tạp vì mỗi 1 chương trình Java có cách thiết lập kích thước bộ nhớ heap khác nhau. Có ít nhất 3 cách chỉnh kích thước heap:
    - Trong biến môi trường, tạo mới hoặc hiệu chỉnh giá trị của biến có tên JAVA_OPTS. Ví dụ, JAVA_OPTS = -Xms256m -Xmx256m
    Xms256m: kích thước khởi tạo của heap là 256 Mb
    Xmx256m: kích thước cực đại của heap là 256Mb
    - Trong control panel, mở Java Control panel và hiệu chỉnh Runtime Java Environment theo thông số -Xmx256m
    - Đối với file jar: java -Xms256m -Xmx256m your_program.jar
    - Đối với jetty: vào bin mở file jetty-service.conf và chỉnh như sau:
    wrapper.java.initmemory=1024m
    wrapper.java.maxmemory= 1024m
     

    Từ khóa Static trong java


    1. Khi chỉ muốn có một vùng lưu trữ cho một loại dữ liệu thôi, không phụ thuộc vào số object được tạo ra, 2. Khi muốn có những method không gắn liền với object cụ thể nào cả, method mà có thể gọi ngay khi chưa tạo ra object nào cả. Để làm điều này ta sử dụng từ khóa static:
     
    Để làm cho một field hay method trở thành static, chỉ đơn giản đặt từ khóa static lên trước khai báo của nó.
    Ví dụ:

    class StaticTest 
    {
      static int i = 47;
    }
    Bây giờ, nếu bạn tạo ra 2 object s1, s2 thuộc class trên thì nó vẫn chia sẻ chung một vùng lưu trữ  i. Tức là s1.i và s2.i là cùng 1 giá trị.
    Để chỉ một biến static, có thể thông qua object như thông thường hoặc thông qua chính class.
    Với static method cũng như vậy. Ví dụ:

    class StaticFun 
    {
      static void incr() { StaticTest.i++; }
    }
    Ta có thể gọi hàm incr() từ object thuộc class StaticFun, hoặc từ chính class StaticFun.