Специализация
Python Backend Developer
Java Backend Developer
Node.js Backend Developer
Golang Backend Developer
React Frontend Developer
Выберите навыки
React
JavaScript
Git
Redux
Webpack
Сложность
1-3
4-6
7-8
9-10
Рейтинг вопросов
1
2
3
4
5
Подпишись на React Developer в телеграм
Что такое generics в TypeScript?
Generics позволяют создавать компоненты, которые работают с разными типами данных. Это полезно для создания более универсальных и гибких функций или классов.
Что такое обобщения (generics) в Rust?
Обобщения дают возможность создавать код, который работает с любым типом, указанным при его вызове. При этом можно задавать ограничения (трейты), которые тип должен соблюдать. Это делает код более гибким и повторно используемым.
Какие есть средства обобщённого программирования (generics) в Go?
Начиная с Go 1.18, в языке появились type parameters для функций и типов. Объявляют обобщённую функцию func Map[T any](… ) и обобщённый тип type List[T any] struct { … }. Для ограничения типов используют constraints из пакета golang.org/x/exp/constraints или собственные интерфейсы. Это позволяет писать один код для разных типов.
Есть ли generics в PHP?
В PHP нет встроенной поддержки generics (обобщенных типов) как в Java или C#. Однако есть несколько способов достичь похожего поведения. Можно использовать док-блоки с аннотациями для подсказок IDE, создавать конкретные классы-обертки для разных типов, или применять union types и mixed типы. В PHP 8.0 добавлены union types, которые частично решают проблему множественных типов. Также существуют сторонние библиотеки, которые эмулируют поведение generics.
Почему в runtime невозможно получить точный тип generic-параметра?
В runtime невозможно получить точный тип generic-параметра из-за type erasure. Во время компиляции generic-типы стираются и заменяются на Object или на верхнюю границу. JVM не хранит информацию о конкретных параметрах типа. Поэтому List<String> и List<Integer> в runtime выглядят одинаково. Это осознанное архитектурное решение Java.
Как generics реализованы в Java на уровне байткода?
Сохраняется ли информация о generic-типах во время выполнения?
Как ObjectMapper десериализует коллекции с generic-типами?
Что такое wildcard (?) в generics?
В чём разница между extends и super в generics?
Рейтинг:
4
Сложность:
7
На уровне байткода generics реализованы через стирание типов и приведение типов. Компилятор добавляет cast там, где это необходимо. JVM не знает о generics и работает с обычными типами. Дополнительная информация о generics хранится только в metadata класса. Типовая безопасность обеспечивается на этапе компиляции.
Рейтинг:
5
Сложность:
6
Нет, информация о generic-типах в основном не сохраняется во время выполнения.
Во время компиляции происходит стирание типов.
В runtime JVM работает с «сырыми» типами.
Некоторая информация может быть доступна через reflection.
Это накладывает ограничения на использование generics.
Рейтинг:
5
Сложность:
7
ObjectMapper не может сам определить generic-типы во время выполнения.
Из-за type erasure информация о параметрах типов теряется.
Поэтому тип нужно передавать явно.
Для этого используются специальные конструкции Jackson.
Без этого десериализация приведёт к сырым типам или ошибкам.
Рейтинг:
4
Сложность:
6
Wildcard (?) в generics используется, когда точный тип параметра неизвестен или не важен. Он позволяет писать более гибкий и универсальный код, который работает с разными параметризованными типами. Чаще всего wildcard применяется при работе с коллекциями. С его помощью можно ограничить допустимые типы сверху или снизу. Это помогает избежать ошибок компиляции и лишних приведений типов.
Рейтинг:
5
Сложность:
7
extends используется, когда нужно читать данные из обобщённого типа.super используется, когда нужно записывать данные в обобщённый тип.extends ограничивает тип сверху, super — снизу.
Оба механизма помогают писать безопасный и универсальный код.
Главное правило — PECS: Producer Extends, Consumer Super.
Рейтинг:
5
Сложность:
5
Рейтинг:
3
Сложность:
7
Рейтинг:
2
Сложность:
5
Рейтинг:
4
Сложность:
6
Рейтинг:
5
Сложность:
6