06 April 2017

Tổng hợp câu hỏi phỏng vấn JAVA - Java Interview Question


Câu hỏi phỏng vấn JAVA
Q: Lập trình hướng đối tượng là gì 

OOP - Object-Oriented Programming 
Lập trình hướng đối tượng là 1 kỹ thuật lập trình, cho phép lập trình viên trừu tượng hóa các đối tượng thực tế thành các đối tượng trong code

Q: Các tính chất của lập trình hướng đối tượng trong Java?
  • Encapsulation Tính đóng gói trong java là kỹ thuật ẩn giấu thông tin không liên quan và hiện thị ra thông liên quan. Mục đích nhằm giảm thiểu mức độ phức tạp phát triển phần mềm.Thành phần chính của tính đống gói là phạm vi truy cập modify access
  • Abstraction Tính trừu tượng là một tiến trình ẩn các cài đặt chi tiết và chỉ hiển thị tính năng tới người dùng.
  • Inheritance Kế thừa trong java là sự liên quan giữa hai class với nhau, trong đó có class cha (superclass) và class con (subclass). Khi kế thừa class con được hưởng tất cả các phương thức và thuộc tính của class cha. Tuy nhiên nó không được phép truy cập đến thành viên private của class cha. Mục đích kế thừa nhằm tăng tính tái sử dụng lại code.
  • Polymorphism Đa hình là chúng ta có thể thực hiện một hành động bằng nhiều cách khác nhau. hay một tên nhưng mang nhiều hình thái khác nhau.
Q: Các kiểu dữ liệu nguyên thủy
  • Kiểu số nguyên: byte (1), short (2), int (4), long (8)
  • Kiểu só thập phân: Float(4),Double(8) 
  • Kiểu ký tự: Char(2), String
  • Kiểu logic: boolean (true/false)
    Q: Autoboxing và Unboxing trong Java là gì?
    • Autoboxing tự chuyển từ kiểu nguyên thuỷ sang kiểu đối tượng.
      Ví dụ - chuyển đổi int sang Integer
    • Unboxing: Chuyển tử đối tượng thành nguyên thủy.
      Ví dụ - chuyển đổi Integer thành int
      Q: Phân biệt List và ArrayList?
      • List là Interface 
      • List extends lại interface Collection
      • ArrayList Impliments Interface List và extends class AbstractList
      • List tạo ra một tập hợp lưu trong chuỗi xác định truy cập bằng chỉ mục
      • ArrayList tạo ra một mảng động có thể phát triển 
      Q: Sự khác nhau giữa Array và ArrayList? 
      Array ArrayList
      1) Kích thước cố định. Kích thước có thể thay đổi được.
      2) Có thể lưu trữ dữ liệu kiểu nguyên thủy và đối tượng. Chỉ có thể lưu trữ dữ liệu kiểu đối tượng. Kể từ Java 5, kiểu nguyên thủy được tự động chuyển đổi trong các đối tượng được gọi là auto-boxing.
      3) Tốc độ lưu trữ và thao tác nhanh hơn. Tốc độ lưu trữ vào thao tác chậm hơn.
      4) Chỉ có thuộc tính length. Có nhiều phương thức để thao tác với dữ liệu.
      ArrayList > Array
      String[] item = arrayList.toArray(new String[arrayList.size()]);
      Array -> ArrayList
      List list = Arrays.asList(item); // import java.util.Arrays;
        Q: Sự khác nhau String và StringBuilder/StringBuffer?
        • Khác biệt đáng kể nhất giữa String và StringBuffer\StringBuilder trong Java đó là đối tượng String là không thể thay đổi (immutable – không thể thay đổi giá trị) trong khi đó các đối tượng StringBuffer\StringBuilder lại có thể thay đổi (mutable – có thể thay đổi giá trị).
        • Việc thay đổi giá trị của đối tượng String được thực hiện bằng cách tạo một đối tượng mới có giá trị mà bạn muốn đổi sang.Vì thế,  việc thay đổi giá trị đối với một đối tượng String sẽ dẫn đến phát sinh hàng loạt các đối tượng String mới trong bộ nhớ, càng tạo ra nhiều đối tượng tạm thì bộ thu dọn rác (Garbage Collection) càng phải làm việc nhiều hơn để xây dựng lại bộ nhớ 
        • StringBuilder và StringBuffer về cơ bản là giống nhau, chúng đều có các phương thức giống nhau để làm việc với chuỗi. Sự khác biệt giữa StringBuilder và StringBuffer nằm ở chổ:
        + StringBuffer : thuộc loại synchronized do đó các phương thức của nó đều là “thread safe” (thích hợp với xử lý đa luồng – multi thread)+ StringBuilder thì ngược lại, không synchronized. Với đặc tính “thread safe”, các phương thức của StringBuffer sẽ chạy chậm hơn so với StringBuilder 

        Q: Sự khác nhau Error và Exception?
        • ERROR chỉ ra các vấn đề nghiêm trọng và điều kiện bất thường mà hầu hết các ứng dụng không nên cố gắng để xử lý. Error xác định những vấn đề mà chương trình không mong đợi. Ví dụ như lỗi bộ nhớ, lỗi phần cứng, lỗi JVM vv 
        • EXCEPTION là điều kiện trong Code. Nhà phát triển có thể xử lý các điều kiện như vậy và thực hiện các hành động khắc phục cần thiết. Vài ví dụ -
        DivideByZero exception
        NullPointerException
        ArithmeticException
        ArrayIndexOutOfBoundsException
        Xử lý ngoại lệ cho phép chúng ta kiểm soát luồng thông thường của chương trình.-Nó ném một ngoại lệ bất cứ khi nào một phương thức gọi gặp một lỗi.-Nó cũng có thể phân biệt giữa các loại lỗi khác nhau bằng cách sử dụng một khối mã riêng biệt. Điều này được thực hiện với sự trợ giúp của các khối Catch.
        Q: Từ khóa Super
        • Sử dụng để tham chiếu  biến Intance của lớp cha gần nhất
        • Sử dụng để triệu hồi Constructor của lớp cha gần nhất.
        • Sử dụng để triệu hồi phương thức của lớp cha gần nhất
        Q: Từ khóa This
        • This tham chiếu biến Intance -> this.id = id;
        • This triệu hồi Constructor lớp hiện tại -> this(id, name);
        • This triệu hồi ngầm method lớp hiện tại -> this.m();
        • This truyền như một tham số -> m(this){ }
        Q: Phân biệt Static và Final
        Static:
        • Static là biến tĩnh
        • Khi tạo biến Static chỉ lấy bộ nhớ một lần
        • Ghi nhận giá trị lần cuối cùng được set và giữ nguyên giá trị đó VD: tạo mới đối tượng lần 1 set giá trị cho static là 2 thì khi tạo mới đối tượng lần 2 và lấy giá trị của static đó vẫn là 2
        • Không cho ghi đè phép kế thừa "extends" 
        VD: Sử dụng thích hợp với khai báo 1 lần sử dụng nhiều lần
        Static string college = "Aptech";
        Final: 
        • Final không thể thay đổi giá trị
        • Không thể ghi đè không thể kế thừa "extends"
        Q: Phân biệt Try Catch - Finally
        • Gặp ngoại lệ trong Try thì tìm tới Catch
        • Ngoại lệ hợp với Catch nào thì thực hiện khối lệnh trong Catch đó và bỏ qua Catch còn lại
        • Finally luôn được thực hiện. Nếu không có Catch nào thì Finally vẫn được thực hiện sau đó Java sẽ báo nếu gặp ngoại lệ nào đó
        Q: Phân biệt Throw và Throws
        • Throw là "quăng ra": Có thể quăng ở bất kỳ dòng nào trong phương thức
        • Throw được sử dụng để cảnh báo một ngoại lệ/lỗi có thể kiểm soát (checked exception)
        • Throws là "ném đi" : Chỉ có phương thức hay class mới sử dụng Throws
        • Throws được dùng để cảnh báo những lỗi/ngoại lệ không có khả năng kiểm soát (unchecked exception).
        Throws ném đi cho phương thức khác xử lý. Phương thức nào gọi phương thức có Throws thì phải xử lý trong Try Catch 
        Q: Pass-by-reference or Pass-by-value là gì ?

        Xem link: pass-by-reference-or-pass-by-value-cach.html

        Q: Có bao nhiêu cách khai báo Synchronized ?

        Xem link: synchronized.html

        Q. Phân biệt Comparator and Comparable?

        Xem link: sortlist-collection-in-java.html

        Q. Làm sao để sử dụng đồng bộ hóa?

        Xem link: how-do-i-use-a-synchronized-block-in-a-static-method.html

        Q: Phân biệt Set - List - Map? 

        Set (Interface)
        • Set nằm trong interface Collection
        • Set là bộ sưu tập Không có thứ tự mà không cho phép các phần tử trùng lặp ( không trùng lặp )
        • Chúng ta có thể lặp lại các giá trị bằng cách gọi phương thức iterator ()
        • Set s = new HashSet ();
        • Iterator iter = s.iterator ();
        List (Interface)
        • List nằm trong interface Collection
        • List là bộ sưu tập Có thứ tự cho phép các phần tử trùng lặp
        • Chúng ta có thể lặp lại các giá trị bằng cách gọi phương thức iterator ()
        • List li = new ArrayList ();
        • Iterator iter = li.iterator ();
        Map (Interface)
        • Map là interface Map
        • Map chúng sử dụng để lưu trữ dữ liệu theo cặp Key và Value, chúng có thể có Value trùng lặp nhưng không có Key trùng lặp
        • Trong Map chúng không có phương thức iterator (), nhưng chúng có thể lấy các Key bằng cách gọi phương thức keySet ()
        Map m; // insert values
        Set s = m.keySet();
        // Get Map keys into the Set and then iterate this Set object normally
        // m.keySet() returns Set object with Map keys
        Iterator iter = s.iterator();
        Q: Có thể khai báo static trong khối non-static không?

        Không thể khai báo. bắt buộc khối non-static phải là static
        20. Final và finally khác nhau ntn?
        Final: 
        • Final không thể thay đổi giá trị
        • Không thể ghi đè không thể kế thừa "extends"
        Finally:
        • Luôn luôn chạy
        • Và đi kèm theo câu lệnh try catch 
        Q: So sánh Arraylist và Vector. trong(interface List)
        • Giống nhau: Arraylist và Vector 
        - Xây dựng trên mảng Object[]
        - Một Vector mặc định tăng gấp đôi kích thước của mảng, trong khi ArrayList tăng kích thước mảng lên 50 phần trăm.
        - Hạn chế khi chèn phần tử vào một chỗ đã có phần tử khác chiếm chỗ bắt buộc phần tử đó và các phần tử khác dịch chuyển để nhường chỗ làm giảm performance
        • Khác nhau: ArrayList và vector
        -ArrayList sẽ cho tốc độ xử lý nhanh hơn Vector
        -Vector sử dụng cơ chế đồng bộ (synchronization) thích hợp xử lý nhiều tương tác trong một thời điểm. ArrayList thì không
        Q: HashMap và Hashtable.
        • HashMap cho phép lưu trữ một khóa null và nhiều giá trị null. eHashTable không cho phép null.
        • HashMap thì không đồng bộ hóa, còn HashTable có đồng bộ hóa (Xử lý chậm hơn).
        • HashMap return iterator, còn HashTable return Enumerator.
        Q: HashMap và TreeSet more
        • HashMap không đồng bộ hóa
        • HashMap không cho Key trùng lặp (Các Value có trùng lặp)
        • HashMap cho phép một khóa null và nhiều giá trị null 
        • HashMap có key và value
        • HashMap không sắp xếp theo bất kỳ loại thứ tự nào.
        • HashMap triển khai interface Map
        • TreeSet không đồng bộ hóa
        • TreeSet không chứa các phần tử trùng lặp
        • TreeSet cho phép null phần tử
        • TreeSet không có key
        • TreeSet được sắp xếp theo thứ tự tăng dần theo mặc định.
        • TreeSet triển khai interface Set
        Q: HashMap và TreeMap.
        • HashMap không đồng bộ hóa
        • HashMap không cho Key trùng lặp (Nó các Value trùng lặp).
        • HashMap cho một Key null (cho nhiều value null)
        • HashMap không theo thứ tự nào.
        • TreeMap không đồng bộ hóa
        • TreeMap không cho Key trùng lặp (Nó các Value trùng lặp).
        • TreeMap không cho Key null (cho nhiều Value null) 
        • TreeMap duy trì thứ tự chèn.(được sắp xếp theo thứ tự tăng dần của các key)
        Q: ArrayList và HashMap
        • ArrayList lưu giá trị trong mảng  HashMap lưu giá trị qua Key => tiêu tốn bộ nhớ hơn ArrayList
        • ArrayList duy trì trật tự chèn HashMap thì không
        • ArrayList cho phép các phần tử trùng lặp HashMap chỉ cho Value trùng lặp Các key không được phép trùng lặp
        • ArrayList cho phép phần tử null HashMap cho phép một Key null và cho phép Value null
        • ArrayList lấy giá trị thông qua các chỉ mục Index HashMap lấy giá trị thông qua Key
        Q: Khi nào sử dụng LinkedList và khi nào sử dụng ArrayList?
        • 1) Nếu có một yêu cầu thường xuyên Insert Delete trong ứng dụng thì LinkedList là một sự lựa chọn tốt nhất.
        • 2) Với bài toán cần Search thì Arraylist sẽ là lựa chọn tốt nhất của bạn.
        Q: ArrayList Vs LinkedList
        • Search: ArrayList nhanh hơn so với LinkedList
        • Lý do: Vì ArrayList sử dụng chỉ mục (Index) cho hiệu suất cao
        • Delete: LinkedList hiệu quả hơn ArrayList 
        • Lý do: mỗi thành phần của LinkedList duy trì hai con trỏ (địa chỉ) chỉ ra hai yếu tố lân cận trong danh sách
        • Insert Performance: LinkedList hiệu quả hơn ArrayList
        • Lý do: giống như đã giải thích phần delete.
        • Memory Overhead: ArrayList tiêu thụ bộ nhớ ít hơn LinkedList
        • Lý do: Dùng chỉ mục Index tốn ít bộ nhớ hơn sử dụng Hai con trỏ
        • Cả hai đêu thực hiện với kiểu Danh Sách
        • Cả hai đều chèn phần tử theo thứ tự và cho ra kết quả giống nhau
        • Cả hai đều non-synchronized có thể đồng bộ hóa bằng Collections.synchronizedList 
        Q: Khi nào sử dụng ArrayList và khi nào sử dụng vector?
        • Nếu có nhu cầu thực hiện hoạt động "thread-safe" thì vector là cách tốt nhất của bạn vì nó đảm bảo rằng chỉ có một thread truy cập vào bộ sưu tập cùng một lúc.
        • Performance: Synchronized Các hoạt động đồng bộ tốn nhiều thời gian hơn so với các kết nối không đồng bộ, do đó nếu không cần thao tác an toàn cho thread, ArrayList là một sự lựa chọn tốt hơn vì hiệu suất sẽ được cải thiện do các quy trình đồng thời.
        • Làm thế nào để làm cho ArrayList đồng bộ? 
        • Như tôi đã nêu ở trên ArrayList phương pháp không đồng bộ nhưng vẫn còn nếu có một nhu cầu bạn có thể làm cho họ đồng bộ như thế này Collections.synchronizedList
        Q: HashSet vs TreeSet
        • HashSet cho hiệu suất tốt hơn (nhanh hơn) TreeSet cho các hoạt động như thêm, loại bỏ, vv HashSet cung cấp chi phí thời gian liên tục trong khi TreeSet cung cấp log (n) chi phí thời gian cho các hoạt động như vậy.
        • HashSet không duy trì bất kỳ thứ tự các phần tử trong khi các phần tử TreeSet được sắp xếp theo thứ tự tăng dần theo mặc định.
        • Cả HashSet và TreeSet không chứa các phần tử trùng lặp
        • Nếu bạn muốn một Set được sắp xếp thì tốt nhất bạn nên thêm các phần tử vào HashSet và sau đó chuyển nó thành TreeSet thay vì tạo một TreeSet và thêm các phần tử vào nó.
        • Cả hai lớp này đều không đồng bộ non-synchronized, có nghĩa là chúng không thích hợp với thread-safe và nên được đồng bộ hóa một cách rõ ràng khi cần các thao tác an toàn cho thread.
        Q: HashSet và HashMap
        Khác nhau:
        HashSet HashMap
        Lớp HashSet thực hiện Interface Set Lớp HashMap thực hiện Interface Map
        Trong HashSet chúng ta lưu trữ các đối tượng các phần tử hoặc giá trị HashMap được sử dụng để lưu trữ cặp khóa và giá trị. Nó không được đồng bộ hoá và cho phép nulls
        HashSet không thể lưu trữ các giá trị trùng lặp HashMap không cho phép trùng lặp Key nhưng nó cho phép Value trùng lặp.
        HashSet cho phép có một giá trị null. HashMap cho phép một Key null và Value bất kỳ Value null.
        Giống nhau:
        • 1) Cả HashMap và HashSet đều không được đồng bộ hóa non- synchronized , có nghĩa là chúng không thích hợp cho thread-safe trừ phi được đồng bộ hóa một cách rõ ràng như ví dụ dưới:
        HashSet:
        Set s = Collections.synchronizedSet(new HashSet(...));
        HashMap:
         Map m = Collections.synchronizedMap(new HashMap(...)); 
        • 2) Cả hai lớp này không đảm bảo rằng thứ tự của các phần tử của chúng sẽ không đổi theo thời gian.
        • 3) Nếu bạn nhìn vào mã nguồn của HashSet thì bạn có thể thấy rằng nó được sao lưu bởi một HashMap. Vì vậy về cơ bản nó nội bộ sử dụng một HashMap cho tất cả các hoạt động của nó.
        • 4) Cả hai đều cung cấp hiệu suất thời gian liên tục cho các hoạt động cơ bản như thêm, gỡ bỏ phần tử vv
        Q: Phân biệt LinkedHashSet?
        HashSet,TreeSet,LinkedHashSet thực hiện Interface Set nó cũng tương tự như HashSet và TreeSet ngoại trừ sự khác biệt được đề cập dưới đây:
        • HashSet Không duy trì thứ tự.
        • TreeSet Phân loại phần tử theo thứ tự tăng dần.
        • LinkedHashSet Duy trì trình tự chèn (insertion order). Các phần tử được sắp xếp theo thứ tự mà chúng đã được thêm.
        Q: Phân biệt LinkedHashMap?
        LinkedHashMap, HashMap và TreeMap là một Hash Table và thực hiện danh sách liên kết của Interface Map ngoại trừ sự khác biệt được đề cập dưới đây:

        • HashMap Không duy trì bất cứ thứ sắp xếp tự nào.
        • TreeMap Sắp xếp các mục theo thứ tự tăng dần của các Key.
        • LinkedHashMap Duy trì trình tự chèn.(insertion order)
        30: Checked exceptions và Unchecked exceptions?
        Checked exceptions: Là các ngoại lệ được kiểm tra tại thời gian biên dịch. Nó có nghĩa là nếu một phương thức ném một ngoại lệ đã được kiểm tra thì nó nên xử lý ngoại lệ bằng cách sử dụng khối try-catch hoặc phải khai báo ngoại lệ bằng cách sử dụng từ khoá throws, nếu không chương trình sẽ tự cung cấp một lỗi biên dịch

        1. SQLException
        2. IOException
        3. DataAccessException
        4. ClassNotFoundException
        5. FileNotFoundException
        6. InvocationTargetException

        Unchecked exceptions: Là các ngoại lệ không được kiểm tra tại thời gian biên dịch. Nó có nghĩa là nếu chương trình của bạn ném một ngoại lệ không được kiểm soát bạn không xử lý / khai báo rằng ngoại lệ, chương trình sẽ không tự động cung cấp cho lỗi biên dịch. 



        1. NullPointerException
        2. ArrayIndexOutOfBoundsException
        3. ArithmeticException
        4. IllegalArgumentException
        Q: Multitasking vs Multithreading vs Multiprocessing vs xử lý song song là gì?
        • Đa nhiệm (Multitasking): Khả năng thực hiện nhiều nhiệm vụ cùng một lúc được gọi là đa tác vụ.
        • Đa luồng (Multithreading): Đó là một quá trình thực hiện nhiều luồng đồng thời. Đa luồng cũng được gọi là Đa nhiệm.
        • Đa xử lý (Multiprocessing): Cũng giống như đa nhiệm, tuy nhiên trong đa xử lý nhiều hơn một CPU có liên quan. Mặt khác, một CPU tham gia đa nhiệm.
        • Xử lý song song (Parallel Processing): Nó đề cập đến việc sử dụng nhiều CPU trong một hệ thống máy tính duy nhất.
        Q: So sánh List và Queue.
        List: 
        là một danh sách có thứ tự của các đối tượng. Thêm một phần tử bất cứ nơi nào, thay đổi một phần tử bất cứ nơi nào, hoặc xóa một phần tử khỏi bất kỳ vị trí nào trong list. 
        Queue: 
        Tất cả các phần tử được chèn vào "cuối" và loại bỏ từ "đầu". Cách sử dụng FIFO (First in First Out)
                Queue queueA = new LinkedList();
                queueA.add("element 0");
                queueA.add("element 1");
                queueA.add("element 2");

                queueA.remove();//remove 0
                for (Object s : queueA) {
                    System.out.println(s.toString());
                }
        Output:
        element 1
        element 2

        Q: Phân biệt HashMap and TreeMap?
        HashMap:- HashMap thuộc interface Map.
        - HashMap không được đồng bộ hoá và nó cho phép null key và các giá trị null
        - Nó được sử dụng trên Key và Value.
        TreeMap: - TreeMap thuộc interface Map tương tự như HashMap.
        - Sự khác biệt chính giữa chúng là HashMap sắp xếp không có thứ tự trong khi TreeMap được sắp xếp theo thứ tự tăng dần của Key.
        - TreeMap không đồng bộ hóa non-synchronized , có nghĩa là nó không thích hợp cho hoạt động của thread-safe.

        Q: Làm thế nào để tạo ra một Hashmap thread-safe?
        Map<String, Integer> threadSafeMap = new Hashtable<String, Integer>();
        threadSafeMap = Collections.synchronizedMap(new HashMap<String, Integer>());
        threadSafeMap = new ConcurrentHashMap<String, Integer>();
        threadSafeMap .put("Key1", 123)
        Map map = Collections.synchronizedMap(new HashMap());
        ...
        //This doesn't need to be in synchronized block
        Set set = map.keySet();
        // Synchronizing on map, not on set
        synchronized (map) {  
              // Iterator must be in synchronized block
              Iterator iterator = set.iterator(); 
              while (iterator.hasNext()){
                  ...
              }
        }

        Q: Loại bỏ các yếu tố nhân đôi trong một danh sách?
        List<String> list = new ArrayList<String>();
        list.add("Krishna");
        list.add("Krishna");
        list.add("Kishan");
        list.add("Krishn");
        list.add("Aryan");
        list.add("Harm");

        HashSet<String> hs = new HashSet<>(list);
        System.out.println(list);
        System.out.println(hs);
        [Krishna, Krishna, Kishan, Krishn, Aryan, Harm]
        [Krishna, Krishn, Harm, Kishan, Aryan]

        Q: Iterator là gì?
        Về cơ bản,bộ duyệt Iterator giúp ta duyệt các phần tử trong 1 cái danh sách, ví dụ mình có cái danh sách các tên:
        - khi khởi tạo Iterator, sẽ có 1 con trỏ được khởi tạo
        - hàm hasNext để kiểm tra xem mình còn duyệt được tiếp nữa không
        - hàm next trả ra phần tử kế tiếp của bộ duyệt

        Chúng ta hoàn toàn có thể làm một class duyệt theo ý mình, ví dụ như thêm vào đó 2 biến là vị trí bắt đầu và chiều duyệt thì hoàn toàn có thể làm được duyệt nhiều kiểu

        Q. Break, continute:
              Break: cham dứt hẳn
              Continute: chấm dứt câu lệnh và quay trở lại vòng lặp

        Q: Các loại biến có thể có của class? 
        Biến local: Biến sẽ được khai báo và khởi tạo bên trong hàm. Bị hủy khi hàm kết thúc
        Instance biến: biến bên trong class nhưng ngoài phương thức. Biến được khởi tạo khi  class được load
        Class biến:  khai báo bên trong class, bên ngoài phương thức với keyword static

        Q: Pattern và Matcher (java.util.regex) 
        Giúp ta xử lý các vấn đến liên quan đến regular expression.
        Pattern là lớp dùng để biên dịch biểu thức, kết quả biên dịch để tạo ra đối tượng thuộc lớp  Matcher để kiểm tra chuổi ký tự có đúng biểu thức đó
        Matcher là lớp được tạo ra từ Pattern và dùng để thực hiện những việc như match, tìm kiếm.

        Q: Regular Expression 
        Hay còn gọi là biểu thức chính quy dùng để chỉ cách thức chúng ta nhận biết, kiểm tra một chuỗi (biểu thức) có đúng như định dạng chúng ta mong muốn hay không.

        Q: Mục đích thu gom rác thải trong Java là gì, và khi nào nó được sử dụng
        Làm sạch những đối tượng không còn tham chiếu bởi bất kỳ chương trình nào để giải phóng bộ nhớ

        Q: phân biệt jdk, jre, file javax.exe là gì?
        Build = javac thì đó là biên dịch ra bytecode nên javac là trình biên dịch. Khi chạy java = java.exe thì thông dịch ra mã máy, đó là trình thông dịch

        JDK (Java Development Kit) là một bộ bao gồm các công cụ cần thiết trong quá trình phát triển các ứng dụng Java + JRE. Các công cụ đó là: javac.exe, java.exe, applet viewer,… vai trò của từng công cụ như sau:
        · javac.exe – giúp biên dịch các file nguồn viết bằng ngôn ngữ Java (*.java) thành mã máy (byte code)
        · java.exe – gọi tới JRE, tải nạp các file mã máy đã được biên dịch và gọi tới method main để thực thi các mã đó.
        · Applet Viewer – để chạy các ứng dụng viết bằng applet.

        JRE là một ứng dụng nền giúp thực thi các file mã máy đã được biên dịch từ file nguồn *.java. Các thành phần của JRE chỉ bao gồm các gói Java và thư viện thực thi ứng dụng (runtime libraries) nên JRE không có khả năng biên dịch file Java thành mã máy chỉ có khả năng thực thi các file byte code sau khi đã được SDK biên dịch

        Q: Phân biệt POST và GET
        GET POST
        Các tham số vẫn còn trong lịch sử trình duyệt vì chúng là một phần của URL Các tham số không được lưu trong lịch sử trình duyệt.
        Có thể được đánh dấu. Không thể đánh dấu trang.
        Yêu cầu GET được thực hiện lại nhưng có thể không được gửi lại cho máy chủ nếu HTML được lưu trữ trong bộ nhớ cache của trình duyệt. Trình duyệt thường cảnh báo người dùng rằng dữ liệu sẽ cần được gửi lại.
        Ứng dụng / x-www-form-urlencoded Multipart / form-data hoặc application / x-www-form-urlencoded Dùng mã hóa nhiều phần cho dữ liệu nhị phân.
        Có thể gửi nhưng dữ liệu tham số được giới hạn trong nội dung chúng tôi có thể đưa vào dòng yêu cầu (URL). An toàn nhất để sử dụng ít hơn 2K các thông số, một số máy chủ xử lý lên đến 64K Có thể gửi các thông số, bao gồm cả tải lên các tập tin, đến máy chủ.
        Dễ dàng hơn để hack cho kiddies kịch bản Khó khăn hơn để hack
        Chỉ cho phép các ký tự ASCII. Không hạn chế. Dữ liệu nhị phân cũng được phép.

        POST an toàn hơn GET vì các tham số không được lưu trữ trong lịch sử trình duyệt hoặc trong các bản ghi của máy chủ web .
        Vì dữ liệu biểu mẫu nằm trong URL và độ dài URL bị hạn chế. Giới hạn độ dài URL an toàn thường là 2048 ký tự Không hạn chế
        Không nên sử dụng phương pháp GET khi gửi mật khẩu hoặc các thông tin nhạy cảm khác. POST phương pháp được sử dụng khi gửi mật khẩu hoặc thông tin nhạy cảm khác.
        Phương thức GET hiển thị cho tất cả mọi người (nó sẽ được hiển thị trong thanh địa chỉ của trình duyệt) và có giới hạn về số lượng thông tin cần gửi.

        Các biến phương thức POST không được hiển thị trong URL.
        Q. Kiểu nguyên thủy và lớp wrapper(loại nào tham biến, loại nào tham trị)
        Với những kiêu nguyên thủy của Java (int, boolean..) chỉ có thể được truyền theo kiểu tham trị, tức là giá trị của x vẫn giữ nguyên sau khi gọi hàm.
        Các đối tượng như String thì có thể truyền tham biến

        Q. Kiểu dữ liệu tham chiếu
        Là các kiểu dữ liệu đối tượng.
        Trong java có 3 kiểu dữ liệu tham chiếu
        - Mảng(Array): Tập hợp các dữ liệu cùng loại
        - Lớp(Class): Tập hợp các biến và phương thức
        - Giao diện(Interface): Là 1 lớp trừu tượng được tạo ra để bổ sung cho các kế thừa đa lớp trong java
          Q: Sự khác nhau giữa && và & ?

          & đánh giá cả hai mặt của hoạt động.
          && đánh giá bên trái của hoạt động, nếu nó là đúng nó sẽ tiếp tục và đánh giá bên phải.

          Q: Làm thế nào để chuyển đổi một mảng của String thành arraylist?
          //String array
          String[] words = {"ace", "boom", "crew", "dog", "eon"};
          //Use Arrays utility class
          List wordList = Arrays.asList(words);
          //Now you can iterate over the list

          Q: equal() trong Java?

          String s1="check";
          String s2="check";
          String s3=new String("check");
          String s4="uncheck";

          s1.equals(s2) //true
          s1.equals(s3) //true
          s1.equals(s4) //false

          Q: compareTo() trong Java?

             String s1="check";
             String s2="check";
             String s3="uncheck";
           
             s1.compareTo(s2) //(s1 == s2) 0
             s1.compareTo(s3) //(s1 < s3) -1
             s3.compareTo(s1) //(s3 > s1 ) 1

          Q: So sánh String với equal() và '==' ?

          == So sánh "địa chỉ bộ nhớ - các tham chiếu", nếu hai đối tượng chuỗi đang tham chiếu đến cùng một chữ trong chuỗi nhóm hoặc cùng một đối tượng chuỗi trong heap thì sẽ trả về true.

          equal() "so sánh các giá trị" so sánh chuỗi char, nếu chúng lưu trữ cùng chuỗi char thì sẽ trả về true.

          Q: hashCode là gì?

          HashCode có thể hiểu là giá trị định danh cho 1 đối tượng, những đối tượng bằng nhau sẽ có hashCode bằng nhau còn hashCode bằng nhau thì chưa chắc 2 đối tượng đó đã bằng nhau.

          Q: Làm thế nào để nối nhiều chuỗi?

          StringBuffer buffer = new StringBuffer();

          buffer.append("select")
          .append("*")
          .append("from")
          .append("employee")
          .append("where")
          .append("id > 0");

          String blogName = buffer.toString();

          System.out.println(blogName); //select * from employee where id > 0

          Q: Tìm các từ trùng lặp trong chuỗi?

          String text = "a r b k c d se f g a d f s s f d s ft gh f ws w f v x s g h d h j j k f sd j e wed a d f";

          List<String> list = Arrays.asList(text.split(" "));

          Set<String> uniqueWords = new HashSet<String>(list);
          for (String word : uniqueWords) {
          System.out.println(word + ": " + Collections.frequency(list, word));
          }

          Q: Loại bỏ khoảng trắng chuỗi?
          String regex = "^\\s+";

          String originalString = "   howtodoinjava.com   ";

          //Cách 1
          String trimmedString = originalString.replaceAll(regex, "");
          System.out.println(trimmedString);

          //Cách 2
          String trimmedString = originalString.trim();

          //Show data
          System.out.println(trimmedString);

          Q: Xóa dấu cách giữa các từ?
          String blogName = "how to   do    in  java   .         com";

          String nameWithProperSpacing = StringUtils.normalizeSpace( blogName );
          System.out.println( nameWithProperSpacing );

          Q. Sự khác nhau cơ bản giữa SOAP và RESTful ?
          SOAP (stands for Simple Object Access Protocol) và RESTful (REpresentational State Transfer) là 2 kiểu thực hiện web service khác nhau.

          - SOAP chỉ trả về dữ liệu dạng XML còn RESful trả về dữ liệu ở nhiều định dạng khác nhau: Plain Text, HTML, XML and JSON…Restful sử dụng bốn hình thái HTTP 1.1 GET, POST, PUT, và DELETE
          - Tốc độ của RESTFul nhanh hơn SOAP
          - SOAP có tính bảo mật và toàn vẹn hơn RESTful
          - SOAP là một kiểu giao thức (protocol) na ná như HTTP, nó cũng có phần header, body… để định nghĩa dữ liệu gửi về còn RESTFul giống như 1 kiểu kiến trúc gửi/ nhận (client gửi request/dữ liệu tới, server trả dữ liệu tương ứng về)

          Q: Phân biệt giữa Struts và Spring?
          – Struts chỉ là web framework , Struts có thể so sánh với SpringMVC.
          – SpringMVC là một thành phần của Spring framework.
          => Có thể nói rằng Sturts có thể là một thành phần của spring framework
          – Thành phần điều khiển trong Struts là Action còn của SpringMVC là Controller, Action trong struts là Astract, còn Controller là Interface
          => Đây là lơi thế của SpringMVC

          Q: Kiến trúc Struts 2 ?
          Mô hình MVC trong Struts 2 được thực hiện với 5 thành phân sau đây:
          - Actions
          - Interceptors
          - Value Stack / OGNL
          - Results / Result types
          - View technologies
          Struts 2 hơi khác so với mô hình MVC truyền thống trong đó Action chiếm vai trò của Model thay vì Controller.
          Controller được thực hiện với bộ lọc servlet Struts2 cũng như các interceptor.
          Model được thực hiện với các hành động.
          View là sự kết hợp các kiểu kết quả và kết quả Stack và OGNL cung cấp thread.

          0 nhận xét:

          Post a Comment

           

          BACK TO TOP

          Xuống cuối trang