JavaRush /Blog Java /Random-VI /Cấp độ 35. Trả lời các câu hỏi phỏng vấn về chủ đề cấp độ...
Afli
Mức độ
Санкт-Петербург

Cấp độ 35. Trả lời các câu hỏi phỏng vấn về chủ đề cấp độ

Xuất bản trong nhóm
Câu hỏi/bổ sung/phê bình đều được chào đón. Cấp độ 35. Trả lời câu hỏi phỏng vấn về chủ đề cấp độ - 1
  1. Bạn biết những hệ thống kiểm soát phiên bản nào?

    Git, SVN, Chợ, Mercurial

  2. SVN và Git khác nhau như thế nào?

    1. GIT là một VCS phân tán, nhưng SVN thì không. Nói cách khác, nếu có một số nhà phát triển làm việc với một kho lưu trữ thì mỗi nhà phát triển sẽ có một bản sao ĐẦY ĐỦ của kho lưu trữ này trên máy cục bộ của họ. Tất nhiên, cũng có một máy trung tâm mà từ đó bạn có thể sao chép kho lưu trữ. Điều này gợi nhớ đến SVN. Ưu điểm chính của Git là nếu đột nhiên bạn không thể truy cập Internet, bạn vẫn có thể làm việc với kho lưu trữ. Sau đó, chỉ cần thực hiện đồng bộ hóa một lần và tất cả các nhà phát triển khác sẽ nhận được toàn bộ lịch sử.

    2. Cửa hàng GIT thay đổi siêu dữ liệu, trong khi SVN lưu trữ toàn bộ tệp. Điều này tiết kiệm không gian và thời gian.

  3. GitHub là gì? Bạn có dự án trên GitHub không?

    GitHub là một dịch vụ lưu trữ dự án dựa trên web sử dụng hệ thống kiểm soát phiên bản git, đồng thời là mạng xã hội dành cho các nhà phát triển. Người dùng có thể tạo số lượng kho lưu trữ không giới hạn, mỗi kho được cung cấp một wiki, một hệ thống theo dõi vấn đề được cung cấp, có thể tiến hành đánh giá mã, v.v. Ngoài Git, dịch vụ hỗ trợ nhận và chỉnh sửa code qua SVN và Mercurial.

  4. Tại sao chúng ta cần hệ thống kiểm soát phiên bản?

    VCS cho phép trả lại các tệp riêng lẻ về dạng trước đó, đưa toàn bộ dự án về trạng thái trước đó, xem các thay đổi xảy ra theo thời gian, xác định ai là người cuối cùng thực hiện các thay đổi đối với mô-đun đột nhiên ngừng hoạt động, ai và khi nào được giới thiệu một số loại lỗi trong mã, v.v.. Nói chung, nếu sử dụng VCS, bạn làm hỏng mọi thứ hoặc mất tập tin thì mọi thứ đều có thể được khôi phục dễ dàng.

  5. Chung chung là gì? Chúng được triển khai như thế nào trong Java?

    Generics là loại tham số. Với sự trợ giúp của họ, bạn có thể khai báo các lớp, giao diện và phương thức, trong đó kiểu dữ liệu được chỉ định làm tham số. Generics đã thêm tính an toàn về loại cho ngôn ngữ.

    Ví dụ thực hiện:

    class MyClass<T>{
      T obj;
      public MyClass(T obj){
        this.obj = obj;
      }
    }
    class MyClass<T>

    Dấu ngoặc nhọn sử dụng T , tên của tham số loại. Tên này được sử dụng làm phần giữ chỗ cho tên của kiểu thực được truyền cho lớp MyClasskhi tạo kiểu thực. Nghĩa là, tham số kiểu Tđược sử dụng trong lớp bất cứ khi nào cần có tham số kiểu. Dấu ngoặc nhọn chỉ ra rằng tham số có thể được khái quát hóa. Bản thân lớp này được gọi là lớp chung hoặc kiểu được tham số hóa.

    Tiếp theo, kiểu này Tđược sử dụng để khai báo một đối tượng theo tên obj:

    T obj;

    Thay vào đó, Tloại thực sẽ được thay thế, loại này sẽ được chỉ định khi tạo đối tượng của lớp MyClass. Đối tượng objsẽ là một đối tượng thuộc loại được truyền trong tham số loại T. Nếu Tbạn chuyển kiểu này làm tham số Stringthì phiên bản objsẽ có kiểu đó String.

    Hãy xem xét hàm tạo MyClass():

    public MyClass(T obj){
      this.obj = obj;
    }

    Параметр obj имеет тип T. Это значит, что реальный тип параметра obj определяется типом, переданным параметром типа T при создании an object класса MyClass.

    Параметр типа T также может быть использован для указания типа возвращаемого значения метода.

    В именах переменных типа принято использовать заглавные буквы. Обычно для коллекций используется буква E, буквами K и V — типы ключей и meaning (Key/Value), а буквой T (и при необходимости буквы S и U) — любой тип.

    Обобщения работают только с an objectми. Поэтому нельзя использовать в качестве параметра elementрные типы вроде int or char.

    *Так же считаю нужным упомянуть generic методы. Это методы вида:

    модификаторы <T, ...> возвращаемыйТип method name(T t, ...)

    Как я понял, если в качестве типа в сигнатуре метода используются параметры, необходимо перед типом возвращаемого значения их перечислить. Верно ли это?

    Более подробную информацию можно посмотреть по следующим linkм:

  6. What такое стирание типов?

    Внутри класса-дженерика не хранится информация о его типе параметре. Это и называется стиранием типов. На стадии компиляции происходит приведение an object класса к типу, который был указан при объявлении.

    Пример:

    Cấp độ 35. Trả lời câu hỏi phỏng vấn về chủ đề cấp độ - 2
  7. What такое wildcard?

    Wildcard — это дженерик вида <?>, что означает, что тип может быть чем угодно. Используется, например, в коллекциях, где для всех коллекций базовым типом является Сollection<?>.

    Полезная link: Теория и практика Java. Эксперименты с generic-методами

  8. Расскажите про extends и super в Generic'ах?

    Whatбы наложить ограничение на wildcard необходимо использовать конструкции типа:

    • ? extends SomeClass — означает, что может быть использован любой класс-наследник SomeClass
    • ? super SomeClass — означает, что может быть использован класс SomeClass, либо класс-родитель (or интерфейс) SomeClass

    Это называется bounded wildcard.

    Для того, чтобы определиться с выбором между extends и super был придуман метод PECS.

    Подробно про это можно прочитать по ссылке ниже: Использование generic wildcards для повышения удобства Java API

  9. Как использовать wildcard?

    Пример использования wildcard:

    List<?> numList = new ArrayList<Integer>();

    Вопрос я не понял, но в принципе использование wildcard’ов рассматривается в материалах по linkм выше.

  10. В чем отличие ArrayList и ArrayList<?>

    Запись вида ArrayList называется raw type (обычный тип). Она эквивалентна записи вида ArrayList<T> и используется для обратной совместимости, т.к. до Java 1.5 не было дженерик коллекций. По возможности такой формы записи следует избегать.

    ArrayList<?> является супертипом для ArrayList.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION