JavaRush /Java 博客 /Random-ZH /第 35 级。有关该级别主题的面试问题的答案
Afli
第 41 级
Санкт-Петербург

第 35 级。有关该级别主题的面试问题的答案

已在 Random-ZH 群组中发布
欢迎提问/补充/批评。 第 35 级。关于第 1 级主题的面试问题的答案
  1. 你知道哪些版本控制系统?

    Git、SVN、Bazaar、Mercurial

  2. SVN 和 Git 有什么不同?

    1. GIT 是分布式 VCS,但 SVN 不是。换句话说,如果有多个开发人员使用某个存储库,则每个开发人员都将在其本地计算机上拥有该存储库的完整副本。当然,还有一台中央机器,您可以从中克隆存储库。这让人想起SVN。Git 的主要优点是,如果您突然无法访问互联网,您仍然可以使用存储库。然后只需进行一次同步,所有其他开发人员都将收到完整的历史记录。

    2. GIT 存储更改元数据,而 SVN 存储整个文件。这节省了空间和时间。

  3. 什么是 GitHub?你在 GitHub 上有项目吗?

    GitHub 是一个使用 git 版本控制系统的基于 Web 的项目托管服务,也是开发人员的社交网络。用户可以创建无限数量的存储库,每个存储库都提供一个 wiki、一个问题跟踪系统、可以进行代码审查等。除了 Git 之外,该服务还支持通过 SVN 和 Mercurial 接收和编辑代码。

  4. 为什么我们需要版本控制系统?

    VCS 可以将单个文件返回到之前的形式,将整个项目返回到之前的状态,查看随着时间的推移发生的更改,确定谁是最后一个对突然停止工作的模块进行更改的人,谁以及何时引入某种类型代码中的错误等...一般来说,如果使用 VCS,您破坏了所有内容或丢失了文件,则可以轻松恢复所有内容。

  5. 什么是通用的?它们在 Java 中是如何实现的?

    泛型是参数化类型。在它们的帮助下,您可以声明类、接口和方法,其中数据类型被指定为参数。泛型为语言添加了类型安全性。

    实施示例:

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

    尖括号使用T,即类型参数的名称。该名称用作MyClass创建实际类型时传递给类的实际类型名称的占位符。也就是说,T每当需要类型参数时,就会在类中使用该类型参数。尖括号表示该参数可以概括。该类本身称为泛型类或参数化类型。

    接下来,该类型T用于按名称声明对象obj

    T obj;

    实际类型将被替换T,该类型将在创建该类的对象时指定MyClass。该对象obj将是类型参数中传递的类型的对象T。如果T将类型作为参数传递String,则实例obj将具有该类型String

    考虑构造函数MyClass()

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

    该参数obj的类型为T。这意味着参数的真实类型由创建类对象时obj类型参数传递的类型决定。TMyClass

    类型参数T还可用于指定方法的返回类型。

    通常在类型变量名称中使用大写字母。通常,对于集合,使用字母E,字母K和用于V键类型和值(键/值),并且字母T(如果需要,还可以使用字母SU)是任何类型。

    泛型仅适用于对象。int因此,您不能使用像或 这样的基本类型作为参数char

    *我还认为有必要提及通用方法。这些方法如下:

    修饰符 <T, ...> returnTypeMethodname(T t, ...)

    据我了解,如果参数用作方法签名中的类型,则有必要将它们列出在返回值类型之前。这是真的?

    更详细的信息可以在以下链接中找到:

  6. 什么是类型擦除?

    有关其类型参数的信息不存储在泛型类中。这称为类型擦除。在编译阶段,类对象被转换为声明时指定的类型。

    例子:

    第 35 级。关于第 2 级主题的面试问题的答案
  7. 什么是通配符?

    通配符是 <?> 形式的泛型,这意味着类型可以是任何类型。例如,用于所有集合的基类型为 Collection<?> 的集合中。

    有用的链接:Java 理论与实践。尝试通用方法

  8. 给我们介绍一下泛型中的 extends 和 super 吗?

    要对通配符施加限制,您必须使用如下结构:

    • ? 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.

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION