JavaRush /Блоги Java /Random-TG /Саволҳои мусоҳибаҳои зуд-зуд додашаванда оид ба синфҳои ҷ...
theGrass
Сатҳи
Саратов

Саволҳои мусоҳибаҳои зуд-зуд додашаванда оид ба синфҳои ҷамъоварӣ дар Java (Қисми 1)

Дар гурӯҳ нашр шудааст
Бешубҳа, коллексияҳо дар Java як соҳаи хеле муҳим мебошанд ва саволҳо дар бораи коллексияҳо дар мусоҳибаҳо барои барномасозони нав ва ботаҷриба дода мешаванд. Мавзӯъ чунон васеъ аст, ки онро пурра фаро гирифтан қариб ғайриимкон аст. Бо вуҷуди ин, дар асоси мусоҳибаҳои қаблии худ, ман кӯшиш мекунам, ки ҳарчи бештар саволҳои ХУБ-ро номбар кунам, ки шумо бояд ба онҳо омода бошед. Саволҳои мусоҳибаҳои зуд-зуд додашаванда оид ба синфҳои ҷамъоварӣ дар Java (Қисми 1) - 1Саволҳо ҳам мураккаб ва ҳам содда хоҳанд буд, аз ин рӯ, агар савол барои шумо хеле оддӣ ба назар расад, фаромӯш накунед, ки он барои як барномасози камтаҷриба комил аст.

Саволҳо дар ин мақола:

Масъалаҳои умумӣ
  1. Маҷмӯаҳо дар Java кадомҳоянд? Бартариҳои онҳоро номбар кунед
  2. Дар бораи иерархияи коллексия ба мо бигӯед
  3. Чаро коллексияҳо интерфейсҳо Cloneableва Serializable.
  4. Чаро Mapинтерфейс интерфейсро мерос намегирад Collection?
Саволҳо дар бораи рӯйхатҳо
  1. Чаро мо рӯйхатҳоро истифода мебарем? Кадом синфҳои асосӣ интерфейсро амалӣ мекунанд List?
  2. Чӣ тавр массиви сатрҳоро ба ArrayList.
  3. Чӣ тавр рӯйхатро бо тартиби баръакс ҷудо кардан мумкин аст?
Саволҳо дар бораи маҷмӯи
  1. Чаро мо маҷмӯаро истифода мебарем? Кадом синфҳои асосӣ интерфейсро амалӣ мекунанд Set?
  2. Дар чӣ гуна элементҳо нигоҳ дошта мешаванд HashSet?
  3. Оё як элементро ба ё nullилова кардан мумкин аст ?TreeSetHashSet
Саволҳо дар бораи луғатҳо
  1. Чаро мо луғатҳоро истифода мебарем? Кадом синфҳои асосӣ интерфейсро амалӣ мекунанд Map?
  2. чист IdentityHashMapва WeakHashMap?
  3. Фаҳмонед, ки он чӣ аст ConcurrentHashMap? Он чӣ гуна кор мекунад?
  4. Луғатҳо чӣ гуна кор мекунанд?
  5. Чӣ тавр калиди хуби луғатро эҷод кардан мумкин аст?
  6. Интерфейс кадом намуди мундариҷаро таъмин мекунад Map?
  7. Онро кай истифода бурдан лозим аст HashMapва кай бояд истифода кард TreeMap?
Саволҳо дар бораи фарқиятҳои байни коллексияҳои гуногун
  1. Фарқи байни Setва чӣ гуна аст List?
  2. Фарқи байни Listва чӣ гуна аст Map?
  3. Фарқи байни HashMapваро номбар кунедHashTable?
  4. Фарқи байни Vectorва чӣ гуна аст ArrayList?
  5. Фарқи байни Iteratorва чӣ гуна аст Enumeration?
  6. Фарқи байни HashMapва чӣ гуна аст HashSet?
  7. Фарқи байни Iteratorва чӣ гуна аст ListIterator?
  8. Фарқи байни TreeSetва чӣ гуна аст SortedSet?
  9. Фарқи байни ArrayListва чӣ гуна аст LinkedList?
Ва саволҳои бештар
  1. Чӣ тавр маҷмӯаро танҳо барои хондан кардан мумкин аст?
  2. Чӣ тавр коллексияи аз ришта бехатар сохтан мумкин аст?
  3. Iterator.add()Чаро усули илова кардани элементҳо ба коллексия вуҷуд надорад ?
  4. Кадом роҳҳо барои такрор кардани элементҳои рӯйхат вуҷуд доранд?
  5. Чӣ тавр шумо хосияти итераторро барои кор мефаҳмед fail-fast?
  6. Фарқи байни fail-fastва чӣ гуна аст fail-safe?
  7. ConcurrentModificationExceptionҲангоми такрор кардани коллексия чӣ гуна пешгирӣ кардан мумкин аст ?
  8. Чӣ гап шудааст UnsupportedOperationException?
  9. Кадом синфҳои коллексия ба ягон элемент дастрасӣ медиҳанд?
  10. Чӣ гап шудааст BlockingQueue?
  11. Навбат ва стек чист, фарқияти байни онҳоро номбар кунед?
  12. Интерфейсҳо чист Comparableва Comparator?
  13. CollectionsДарсҳо ва кадомҳоянд Arrays?
  14. Рӯйхати адабиёти истифодашуда
Бе ягон вақт, биёед ба шарҳҳо оғоз кунем.

Масъалаҳои умумӣ

  1. Маҷмӯаҳо дар Java кадомҳоянд? Бартариҳои онҳоро номбар кунед?

    Мувофиқи таъриф, коллексия an objectест, ки як гурӯҳи an objectҳо мебошад. Тавре ки дар назарияи маҷмӯаҳо маҷмӯа як гурӯҳи an objectҳост. Содда, ҳамин тавр не? Пеш аз JDK 1.2 синфҳо ба монанди Vectorва вуҷуд доштанд HashTable, аммо чаҳорчӯба вуҷуд надошт Collection. Пас аз он тасмим гирифта шуд, ки дастгирии сохторҳои маълумоти такрорӣ илова карда шавад. Ин чаҳорчӯба асосан аз ҷониби Ҷошуа Блок таҳия шудааст ва бори аввал дар JDK 1.2 пайдо шудааст.

    Мо метавонем бартариҳои асосиро номбар кунем:

    • Вақти сарфи навиштани codeро кам мекунад
    • Фаъолиятро тавассути истифодаи алгоритмҳои хеле самаранок ва сохторҳои додаҳо беҳтар мекунад
    • Коллексияҳо як роҳи универсалии нигоҳдорӣ ва интиқоли маълумот мебошанд, ки ҳамкории қисмҳои гуногуни codeро осон мекунад
    • Омӯзиш осон аст, зеро танҳо интерфейсҳои олӣ ва амалиёти дастгирӣшавандаро омӯхтан лозим аст
  2. Дар бораи иерархияи коллексияҳо ба мо бигӯед?

    Саволҳои мусоҳибаҳои зуд-зуд додашаванда оид ба синфҳои ҷамъоварӣ дар Java (Қисми 1) - 2

    Тавре ки дар расм нишон дода шудааст, чаҳорчӯбаи коллексияҳо дорои як интерфейси сатҳи боло мебошад - Collection, ки аз он Set, Listва мерос гирифта шудаанд Queue. Дар зер мо ба бисёр синфҳои дигар, ки дар ин се фorал мавҷуданд, дида мебароем. Унвони интерфейсро дар хотир доред Collection, он ба шумо дар бисёр саволҳо кӯмак хоҳад кард.

    public interface Collection extends Iterable {
    //описание методов
    }

    Чаҳорчӯба инчунин интерфейси Map-ро дар бар мегирад , ки насли Collection. Мо сабаби мерос нагирифтани уро Collectionдар саволи чорум дида мебароем.

  3. Чаро коллексияҳо интерфейсҳо Cloneableва Serializable.

    Хуб, ҷавоби соддатарин ин аст "зеро ин лозим нест." Функсияҳо тавассути интерфейсҳо таъмин карда мешаванд Cloneableва Serializableтанҳо барои коллексияҳо лозим нестанд.

    Сабаби дигар ин аст, ки зеркласс на ҳамеша лозим аст Cloneable, зеро ҳар як амалиёти клонкунӣ хотираи зиёдро сарф мекунад ва барномасозони бетаҷриба метавонанд оқибатҳои онро дарк накарда, онро беҳуда сарф кунанд.

    Ва сабаби охирин он аст, ки клонкунӣ ва сериализатсия амалиёти хеле мушаххас мебошанд ва онҳо бояд танҳо дар ҳолати зарурӣ амалӣ карда шаванд. Бисёре аз синфҳои коллексия ин интерфейсҳоро амалӣ мекунанд, аммо барои татбиқи онҳо барои ҳама коллексияҳо комилан лозим нест. Агар ба шумо клонкунӣ ва сериализатсия лозим бошад, танҳо он синфҳоро истифода баред, агар не, синфҳои боқимондаро истифода баред.

  4. Чаро Mapинтерфейс интерфейсро мерос намегирад Collection?

    Ҷавоби хуб ба ин савол ин аст, ки "зеро онҳо номувофиқанд". Интерфейс Collectionусулро тавсиф мекунад add(Object o).

    Луғатҳо ин усулро дар бар гирифта наметавонанд, зеро онҳо бо ҷуфтҳои калид/арзиш кор мекунанд. Инчунин, луғатҳо намояндагӣ доранд keySet, ки valueSet,дар маҷмӯаҳо нестанд.

    В связи с этими различиями, интерфейс Map не может наследовать интерфейс Collection, и представляет собой отдельную ветвь иерархии.

Вопросы про списки

  1. Почему мы используем списки? Какие основные классы реализуют интерфейс List?

    Списки в Java это упорядоченная коллекция элементов. Каждый элемент имеет индекс, начинающийся с нуля. Все индексы уникальны. Кроме методов описанных в интерфейсе Collection, списки имеют свои собственные методы, в основном для работы с elementми коллекциями по их индексу. Можно разделить эти методы на 3 группы — поиск element, получение конкретного element, перебор коллекции и выборка подгруппы. Все эти операции могут производиться по индексу element.

    Основные классы, реализующие интерфейс List это Stack, Vector, ArrayList и LinkedList. За более подробной информацией по ним, обратитесь к documentации.

  2. Как преобразовать массив строк в ArrayList?

    Вопрос этот несколько глубже чем просто по программированию, How это видится новичкам. Цель его — проверить знание кандидатом служебных классов фреймворка Collection. Рассмотрим два таких класса, наиболее востребованных на собеседованиях — Collections и Arrays.

    Класс Collections предоставляет статические методы для операций над коллекциями. Соответственно Arrays предоставляет статические методы для операций над массивами.

    String[] words = {"аз", "буки", "веди", "глагол", "добро"};
    //Как вы можете обратить внимание, у нас есть массив строк String[] words.
    //В котором у нас лежат 5 строк.
    List wordList = Arrays.asList(words);
    //легким движением руки, а точнее вызовом Arrays.asList() мы превратor наш
    //массив строк в список List wordList.

    Также хотелось бы отметить, что этот метод способен обрабатывать не только строки, он создаст список элементов любого типа, которого был массив.

    Integer[] nums = {1, 2, 3, 4};
    List numList = Arrays.asList(nums);
  3. Как отсортировать список в обратном порядке?

    Как и предыдущий, этот вопрос проверяет ваше знание служебных классов Collection

    List reversedList = Collections.reverse(list);

Вопросы про множества

  1. Почему мы используем множества? Какие основные классы реализуют интерфейс Set?

    Он моделирует математическое множество, из теории множеств. Интерфейс Set похож на List, но имеет некоторые отличия. Первое — это не упорядоченная коллекция. Следовательно, добавление/удаление элементов не требует их сортировки. Главная особенность множеств - уникальность элементов, то есть один и тот же элемент не может содержаться в множестве дважды.

    Очень важными для функционирования множеств являются методы equals() и hashCode(), они позволяют сравнивать множества разных классов. Два множества являются идентичными только если они содержат одни и те же элементы.

    Как следует из вышеизложенного, множества не поддерживают операций основанных на индексе element, How списки. Множества имеют только те методы которые описаны в интерфейсе Collection

    Основными классами, реализующими интерфейс Set, являются EnumSet, HashSet, LinkedHashSet и TreeSet. Если хотите узнать больше — почитайте соответствующие разделы documentации Java.

  2. Как хранятся элементы в HashSet?

    Как вы уже в курсе, HashMap хранит пары ключ/meaning, и ключи должны быть уникальны. HashSet использует эту особенность HashMap для обеспечения уникальности своих элементов. В классе HashSet, словарь описан следующим образом:

    private transient HashMap<E, Object> map;
    private static final Object PRESENT = new Object();

    Итак, когда вы сохраняете элемент в множестве, оно кладет данный элемент в качестве ключа в словарь, а meaningм идет an object PRESENT, How это описано ниже:

    public boolean add(E e) {
      return map.put(e, PRESENT) == null;
    }

    Я настоятельно рекомендую вам прочесть эту статью, это поможет вам с легкостью ответить на все связанные с HashMap вопросы.

  3. Может ли элемент null быть добавлен в TreeSet or HashSet?

    Как видно из предыдущего ответа, в методе add() нет проверки на null. Также, HashMap позволяет один ключ null, следовательно, один элемент null может быть добавлен в HashSet.

    TreeSet работает по тому же принципу что и HashSet, но использует NavigableMap для хранения элементов

    private transient NavigableMap<E,Object> m;
    private static final Object PRESENT = new Object();

    NavigableMap это класс-наследник SortedMap, а SortedMap не позволяет использование ключей null. Следовательно, и TreeMap не поддерживает хранение элементов типа null. Если вы попробуете добавить null в TreeSet, получите исключение NullPointerException.

Вопросы про словари

  1. Почему мы используем словари (Map)? Какие основные классы реализуют интерфейс Map?

    Словари — специальный тип коллекции, которая используется для хранения пар ключ/meaning. По этой причине он не является наследником интерфейса Collection. Словарь предоставляет методы для добавления пар ключ/meaning, удаления, поиска и перебора по предоставляемым словарем представлениям данных.

    Основные классы реализующие интерфейс Map: HashMap, Hashtable, EnumMap, IdentityHashMap, LinkedHashMap и Properties.

  2. What такое IdentityHashMap и WeakHashMap?

    IdentityHashMap похож на HashMap за одним исключением — для сравнения an objectов используется сравнение указателей на an objectы, если указатели не равны (указывают на an objectы лежащие по разным addressм), значит an objectы считаются различными.

    IdentityHashMap является довольно редко используемым. Хотя он реализует интерфейс Map, он нарушает один из основных принципов устройства Map, который требует использования метода equals() для сравнения an objectов.

    IdentityHashMap используется только в тех случаях, когда требуется сравнение an objectов по их addressм.

    WeakHashMap это реализация интерфейса Map, которая содержит слабые ссылки на элементы. То есть, если за пределами WeakHashMap не осталось ни одной ссылки на его элемент, этот элемент удаляется сборщиком мусора. Класс предназначен для использования с an objectми, у которых метод equals() проверяет идентичность an objectов с помощью оператора ==. После того How элемент будет удален сборщиком мусора, он уже не может быть восстановлен, и к большому удивлению программиста найти его в словаре больше не получится.

  3. Объясните что такое ConcurrentHashMap? Как оно работает?

    Взято с официальной documentации:
    Реализация словаря fully поддерживающая многопоточное добавление/удаление/поиск элементов. Данный класс следует тем же спецификациям что и Hashtable, и содержит методы соответствующие методам Hashtable. Однако, хотя все операции являются потокобезопасными, операция по выборке элементов не блокирует таблицу, и вообще нет возможности запретить весь доступ к таблице. Этот класс совместим с Hashtable во всем кроме вопросов многопоточной синхронизации.

  4. Как работает hashmap?

    Самый важный вопрос, который скорее всего будет задан на собеседовании программисту любого уровня. Вы должны хорошо разбираться в этой теме, и не только потому что это самый задаваемый вопрос, но и потому что понимание устройства hashmap позволяет вам легче разобраться в других особенностях работы коллекций.

    Ответ на этот вопрос очень обширный, и fully его можно прочесть в этой статье — How работает hashmap. А на данный момент просто запомните что HashMap работает на основе хэширования. Словарь, по определению, это an object который связывает ключи и значения. Для хранения таких структур, он использует внутренний класс Entry.

    static class Entry implements Map.Entry
    {
    final K key;
    V value;
    Entry next;
    final int hash;
    ...//Еще много codeа тут
    }

    Переменные key и value служат для хранения ключа и значения. А сами an objectы Entry лежат в массиве.

    /**
    * Размер таблицы меняется по необходимости,
    * и обязательно должен быть equals степени двойки
    */
    transient Entry[] table;

    Индекс нужного element в массиве вычисляется по хэш-codeу ключа. Больше информации можете получить по ссылке в начале ответа.

  5. Как создать хороший ключ для словаря?

    Следующий хороший вопрос, который обычно задают следом за вопросом о функционировании HashMap. Итак, главное ограничение — ключ должен быть таким, чтобы потом по нему можно было получить из словаря meaning. Иначе в его использовании просто нет смысла. Если вы понимаете How функционирует hashmap, вы знаете что его работа сильно зависит от методов hashCode() и equals() an objectов-ключей.

    Как следует из вышеизложенного, хороший ключ должен давать один и тот же hashCode снова и снова, независимо от того сколько раз он запрашивается. А также, одинаковые ключи, при вызове метода equals() должны возвращать true, а разные — false.

    Из чего следует, что лучшими кандидатами на роль ключа являются неизменяемые классы.

    Можете почитать еще по addressу.

  6. Какие представления содержимого предоставляет интерфейс Map?

    Интерфейс Map предоставляет три представления хранящихся данных:

    • множество всех ключей
    • множество всех значений
    • множество an objectов Entry, содержащих в себе и ключ и meaning

    Перемещаться по ним можно с помощью итераторов.

  7. Когда нужно использовать HashMap, а когда TreeMap?

    HashMap это очень широко используемый класс, и вы это знаете. Так что, я ограничусь тем, что скажу что в нем хранятся пары ключ/meaning и он позволяет проводить над ними многие операции.

    TreeMapин навъи махсус аст HashMap. Фарк дар он аст, ки калидхо TreeMapбо тартиб нигох дошта мешаванд. Тарзи пешфарз "таъминкунии табиӣ" аст. Шумо метавонед бо пешниҳоди як мисоли синф Comparator, ки усули compareон барои ҷудо кардани калидҳо истифода мешавад, ба навъбандӣ гузоред.

    Лутфан таваҷҷӯҳ намоед, ки ҳамаи калидҳои ба луғат иловашуда бояд интерфейсро иҷро кунанд Comparable(ин барои ҷудокунӣ зарур аст). Гузашта аз ин, ҳамаи калидҳо бояд ба ҳамдигар мувофиқ бошанд: k1.compareTo(k2)набояд ClassCastExceptionягон чизро даъват кунад k1ва k2дар луғат нигоҳ дошта шавад. Агар корбар кӯшиш кунад, ки калидеро ба луғат гузорад, ки ин шартро вайрон мекунад (масалан, калиди сатрӣ ба луғате, ки дар он ҳама калидҳо дар намуди Integer) ҳастанд, усул put(Object key, Object value)бояд ClassCastException.

Мақолаи аслӣ
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION