Добро пожаловать на интервью по Scala вопросам и ответам. В наши дни большинство компаний в сфере финансов, банковского дела, правительственных учреждений, телекоммуникаций, социальных сетей и т. д. используют Scala, Play и Akka Framework для разработки своих проектов, потому что эти фреймворки поддерживают как ООП, так и ФП функции, а также предоставляют множество преимуществ.
Вопросы на собеседовании по Scala
Я собираюсь поделиться своим опытом интервью и опытом разработки Экосистемы Scala или Fullstack Scala (Scala/Play/Akka) с вами через несколько сообщений. Я собираюсь опубликовать 3 отдельных сообщения. Некоторые вопросы – это просто один вопрос, а некоторые имеют подвопросы. Всего я собираюсь обсудить около 200 вопросов. Я уверен, что если вы знакомы со всеми этими вопросами, то определенно сможете успешно пройти все собеседования на должность Scala Developer. Однако, если вы хотите продолжить карьеру как разработчик Fullstack Scala, вам следует тщательно изучить все эти технологии Fullstack Scala.
Введение
I’m going to deliver Scala/Play/Akka Interview Questions and Answers in three parts:
- Вопросы и ответы на собеседовании по Scala:
Мы обсудим здесь некоторые основные вопросы и ответы на собеседование по Scala, которые могут быть полезны для новичков или Java-разработчиков, желающих перейти к разработке на Scala, а также для разработчиков Scala с опытом работы 1 год и более.2. Вопросы и ответы на собеседование по Scala для промежуточного уровня:-
Мы обсудим некоторые вопросы собеседования, которые могут быть полезны для разработчиков с опытом работы 2 года и более как на Scala, так и на Java.3. Вопросы и ответы на собеседование по Scala для продвинутого уровня:-
Мы обсудим вопросы собеседования, которые могут быть полезны для старших или опытных разработчиков Scala/Java.4. Вопросы и ответы на собеседование по параллелизму и конкурентности Scala/Java:-
Мы обсудим вопросы и ответы на собеседование по параллелизму и конкурентности Scala/Java, которые могут быть полезны для старших или опытных разработчиков Scala/Java.
Мы также обсудим некоторые различия между конструкциями Scala и Java, чтобы пользователи (которые переходят из Java в Scala) могли извлечь пользу из этих сообщений. В этом сообщении мы рассмотрим некоторые основные вопросы собеседования по Scala. Прочитайте мои предстоящие сообщения для остальных двух разделов.
Основные вопросы собеседования по Scala
В этом разделе мы собираемся перечислить все базовые вопросы для собеседования по Scala, а в следующем разделе мы обсудим их подробнее.
- Что такое Scala? Это язык или платформа? Поддерживает ли он ООП или ФП? Кто является отцом Scala?
- Является ли Scala языком со статической типизацией? Что такое язык со статической типизацией и что такое язык с динамической типизацией? В чем разница между языками со статической типизацией и динамической типизацией?
- Является ли Scala чистым объектно-ориентированным языком? Является ли Java чистым объектно-ориентированным языком?
- Поддерживает ли Scala все концепции функционального программирования? Поддерживает ли Java 8 все концепции функционального программирования?
- Каковы основные преимущества языка Scala? Есть ли у языка Scala какие-либо недостатки?
- Каков основной недостаток языка Scala?
- Каково главное намерение языка Scala?
- Какие популярные языки JVM сейчас доступны?
- Как у Java класса java.lang.Object, какой суперкласс всех классов в Scala?
- Каков модификатор доступа по умолчанию в Scala? Есть ли в Scala ключевое слово “public”?
- Что такое “вывод типа” в Scala?
- Разница между типом Int в Scala и классом java.lang.Integer в Java? Какова связь между Int и RichInt в Scala?
- Что такое Nothing в Scala? Что такое Nil в Scala? Какова связь между Nothing и Nil в Scala?
- Что такое Null в Scala? Что такое null в Scala? В чем разница между Null и null в Scala?
- Что такое Unit в Scala? В чем разница между void в Java и Unit в Scala?
- Переменная `val` в Scala – это неизменяемая (immutable) переменная, тогда как `var` – это изменяемая (mutable).
- REPL в Scala – это среда для чтения, оценки и печати выражений. Он полезен для экспериментов, прототипирования и быстрого взаимодействия с кодом.
- Особенности Scala включают в себя статическую типизацию, функциональное программирование, сопоставление с образцом и акторную модель.
- Циклы в Scala могут быть реализованы функционально с использованием рекурсии или функций высшего порядка. Различия между ООП и ФП стилями циклов заключаются в подходах к изменяемости данных.
- “Application” в Scala – это устаревший способ создания точки входа, в то время как “App” предоставляет более удобный синтаксис для создания приложений.
- Scala поддерживает перегрузку операторов, в отличие от Java.
- Выражение возвращает значение, в то время как оператор представляет собой команду. Различия между ними зависят от того, возвращают ли они значение.
- Scala’s “If…Else” более выразителен и возвращает значение, в то время как Java’s более ограничен в этом отношении.
- Scala – это язык, ориентированный на выражения, в то время как Java – на команды.
- Scala не требует точки с запятой, не поддерживает статические члены класса и имеет другие отличия от Java.
- Функция в Scala – это объект, на который можно ссылаться, в то время как метод связан с конкретным объектом.
- В Scala можно определить несколько публичных классов в одном исходном файле.
- Как и в Java, в Scala есть несколько автоматически импортируемых пакетов, таких как `java.lang` и `scala`.
- В Scala меньше операторов, чем в Java, благодаря поддержке функционального программирования.
- Scala не требует ключевых слов, таких как `public` и `static`, из-за своего функционального и объектно-ориентированного подходов.
- `PreDef` в Scala – это объект, предоставляющий множество предопределенных методов и значений.
Перейдите по ссылке на мой предыдущий пост, чтобы узнать больше о Функциональном программировании (Щёлкните эту ссылку, чтобы открыть мой предыдущий пост).
Вопросы и ответы на собеседовании по Scala
В этом разделе мы рассмотрим каждый вопрос из вышеперечисленного списка и обсудим его подробно с подходящими примерами (при необходимости). Если вы хотите более подробно понять эти концепции с примерами, пожалуйста, изучите мои предыдущие посты в разделе учебников по Scala.
Что такое Scala? Это язык или платформа? Поддерживает ли он ООП или ФП? Кто является создателем Scala?
Скала означает SCAлабельный Язык. Мартин Одерски является отцом Скалы. Скала – это многопарадигмальный язык программирования, который поддерживает как объектно-ориентированные, так и функциональные концепции программирования. Он разработан Мартином Одерски. Скала – это типобезопасный объектно-функциональный язык программирования, работающий на JVM (Java Virtual Machine). Скала – это гибридный функциональный (объектно-ориентированный и функциональный) язык программирования JVM. Скала имеет сильную и статическую систему типов. В Скале все типы проверяются на этапе компиляции.
Является ли Скала статически типизированным языком? Что такое статически типизированный язык и что такое динамически типизированный язык? В чем разница между статически типизированными и динамически типизированными языками?
Да, Scala – это язык со статической типизацией. Статическая типизация означает, что проверка типов выполняется на этапе компиляции компилятором, а не на этапе выполнения. Основное преимущество таких языков заключается в том, что разработчик должен следить за написанием правильного кода, чтобы избежать всех ошибок на этапе компиляции. Поскольку компилятор проверяет множество ошибок на этапе компиляции, у нас не возникает множество проблем или ошибок на этапе выполнения. Примеры: – Java, Scala, C, C++, Haskell и т. д. Язык с динамической типизацией означает, что проверка типов выполняется на этапе выполнения, а не на этапе компиляции компилятором. Поскольку компилятор не проверяет типы на этапе компиляции, мы можем ожидать больше проблем или ошибок на этапе выполнения. Пример: – Groovy, JavaScript, Ruby, Python, Smalltalk и т. д.
Scala – это чистый объектно-ориентированный язык? Java – чистый объектно-ориентированный язык?
Чистый объектно-ориентированный язык означает, что всё должно быть объектом. Java не является чистым объектно-ориентированным языком, потому что он поддерживает два не объектно-ориентированных концепта:
- Java поддерживает примитивные типы данных. Они не являются объектами.
- Java поддерживает статические члены. Они не связаны с объектами.
Да, Scala – чистый объектно-ориентированный язык, потому что в Scala всё является объектом и всё является значением. Функции – это значения, и значения – это объекты. В Scala нет примитивных типов данных и также нет статических членов.
Поддерживает ли Scala все концепции функционального программирования? Поддерживает ли Java 8 все концепции функционального программирования?
Да, Scala поддерживает все концепции функционального программирования (FP). Java 8 ввела некоторые конструкции функционального программирования, но НЕ поддерживает все концепции функционального программирования. Например, Java 8 не поддерживает сопоставление с образцом, каррирование функций, неявные функции и т. д.
Каковы основные преимущества языка Scala? Есть ли недостатки языка Scala?
Если мы используем язык Scala для разработки наших приложений, мы можем получить следующие преимущества или преимущества и недостатки:Преимущества языка Scala:-
- Простой и лаконичный код
- Очень выразительный код
- Более читабельный код
- 100% типо-безопасный язык
- Неизменяемость и отсутствие побочных эффектов
- Более повторно используемый код
- Большая модульность
- Делайте больше с меньшим кодом
- Очень гибкий синтаксис
- Поддерживает все возможности ООП
- Поддерживает все возможности ФП. Высокофункциональный
- Менее подверженный ошибкам код
- Лучшее параллельное и конкурентное программирование
- Высокомасштабируемый и поддерживаемый код
- Высокая производительность
- Распределенные приложения
- Полная совместимость с Java
- Мощные DSL на Scala доступны
- REPL для изучения основ Scala
Недостатки языка Scala:-
- Менее читаемый код
- Немного сложно понять код для начинающих
- Сложный синтаксис для изучения
- Менее обратная совместимость
ПРИМЕЧАНИЕ:- Мы можем писать код на Scala более читаемым или менее читаемым способом.
Каков основной недостаток языка Scala?
Кроме множества преимуществ Scala есть один основной недостаток: проблема обратной совместимости. Если мы хотим обновиться до последней версии Scala, то нам нужно позаботиться о изменении некоторых имен пакетов, имен классов, методов или функций и т.д. Например, если вы используете старую версию Scala, и ваш проект использует аннотацию BeanProperty, она была доступна в “scala.reflect” как “scala.reflect.BeanProperty” в старых версиях. Если мы хотим обновиться до новых версий Scala, то нам нужно изменить этот пакет с “scala.reflect” на “scala.beans”.
Какова основная цель языка Scala?
Как и у Java, у Scala есть мотто “Делайте больше с меньшим” или “Делайте больше с меньшим кодом”. “Делайте больше с меньшим” означает, что мы можем разрабатывать более сложные программы или логику с меньшим количеством кода.
Какие популярные языки JVM доступны сейчас?
Java, Scala, Groovy и Closure – самые популярные языки виртуальной машины Java (Java Virtual Machine, JVM). Языки Scala, Groovy и Closure поддерживают как возможности объектно-ориентированного программирования, так и функционального программирования. Java SE 8 поддерживает все возможности объектно-ориентированного программирования, но обладает лишь небольшой поддержкой функционального программирования, такой как лямбда-выражения, функции, вывод типов, функции высшего порядка.
Как в Java класс java.lang.Object, какой является суперклассом всех классов в Scala?
Как и в Java, где суперклассом всех классов (классов API Java или определенных пользователем классов) является класс java.lang.Object, в Scala суперклассом всех классов или трейтов является класс “Any”. Класс Any определен в пакете scala как “scala.Any”.
Каков модификатор доступа по умолчанию в Scala? Имеет ли Scala ключевое слово “public”?
В Scala, если мы не указываем модификатор доступа к методу, функции, трейту, объекту или классу, модификатор доступа по умолчанию — “public”. Даже для полей также “public” является модификатором доступа по умолчанию. Благодаря этой функции по умолчанию, в Scala нет ключевого слова “public”.
Что такое “вывод типов” в Scala?
Типы могут быть выведены компилятором Scala на этапе компиляции. Это известно как “вывод типов”. Типы означают тип данных или тип результата. Мы используем типы во многих местах в программах Scala, таких как типы переменных, типы объектов, типы параметров методов/функций, типы возвращаемых значений методов/функций и т.д. Проще говоря, определение типа переменной, выражения, объекта и т.д. на этапе компиляции компилятором известно как “вывод типов”.
Каковы сходства и различия между типом Int в Scala и java.lang.Integer в Java? Какова связь между Int и RichInt в Scala?
Сходства между типом Int в Scala и java.lang.Integer в Java:
- Оба являются классами.
- Оба используются для представления целых чисел.
- Оба являются 32-битными знаковыми целыми числами.
Различия между классом Int в Scala и классом java.lang.Integer в Java:
- Класс Int в Scala не реализует интерфейс Comparable.
- Класс java.lang.Integer в Java реализует интерфейс Comparable.
Integer в Java является чем-то похожим на Int и RichInt в Scala. RichInt – это конечный класс, определенный в пакете scala.runtime, например «scala.runtime.RichInt». В Scala отношение между Int и RichInt заключается в том, что когда мы используем Int в программе на Scala, он автоматически преобразуется в RichInt для использования всех доступных в этом классе методов. Мы можем сказать, что RichInt является неявным классом Int. (Мы обсудим “Что такое неявные классы и преимущества неявных классов в моей следующей статье).
Что такое Nothing в Scala? Что такое Nil в Scala? Какова связь между Nothing и Nil в Scala?
В Scala Nothing – это тип (конечный класс). Он определен в нижней части системы типов Scala, что означает, что он является подтипом любого типа в Scala. Экземпляров типа Nothing не существует. Сценарии использования Nothing в Scala: Если у Nothing нет экземпляров, то когда мы используем его в приложениях на Scala?
- Nil определяется с использованием Nothing (см. пример ниже).
- None определяется с использованием Nothing.
object None extends Option[Nothing]
- Мы можем использовать Nothing в качестве типа возвращаемого значения методов, которые никогда не возвращаются.
- Мы можем использовать Nothing в качестве типа возвращаемого значения методов, которые завершаются некорректно.
Nil – это объект, который используется для представления пустого списка. Он определен в пакете “scala.collection.immutable”, как показано ниже:
object Nil extends List[Nothing]
Пример:-
scala> Nil
res5: scala.collection.immutable.Nil.type = List()
scala> Nil.length
res6: Int = 0
Что такое Null в Scala? Что такое null в Scala? В чем разница между Null и null в Scala?
Null – это тип (конечный класс) в Scala. Тип Null доступен в пакете “scala” как “scala.Null”. У него есть только один экземпляр, который равен null. В Scala “null” является экземпляром типа scala.Null. Пример:-
scala> val myNullRef : Null = null
myNullRef: Null = null
Мы не можем присваивать другие значения ссылкам типа Null. Они принимают только значение “null”. Null является подтипом всех ссылочных типов. Null находится в самом низу системы типов Scala. Так как он не является подтипом значений, мы можем присваивать “null” любой переменной типа значения. Пример:-
scala> val myInt : Int = null
:10: error: an expression of type Null is ineligible for implicit conversion
val myInt : Int = null
^ Здесь ошибка несоответствия типов. найдено: Null(null), требуется: Int. Неявные преобразования между Null и Int не применимы, так как они неоднозначны.
Что такое Unit в Scala? В чем разница между void в Java и Unit в Scala?
В Scala Unit используется для представления “Нет значения” или “Нет полезного значения”. Unit – это финальный класс, определенный в пакете “scala” как “scala.Unit”. Unit что-то похожее на void в Java, но у них есть несколько различий.
- void в Java не имеет никакого значения. Это ничто.
- В Scala у Unit есть одно значение ()
- (). Это единственное значение типа Unit в Scala. Тем не менее, в Java нет значений типа void.
- void в Java – это ключевое слово. Unit в Scala – это финальный класс.
И тот, и другой используются для представления того, что метод или функция ничего не возвращает.
В чем разница между val и var в Scala?
В Scala и val, и var используются для определения переменных. Тем не менее, у них есть некоторые значительные различия.
- var означает переменную.
- val означает значение.
- Как известно, переменная означает изменяемость, а значение – постоянство.
- var используется для определения изменяемых переменных, что означает, что мы можем переназначать значения после их создания.
- val используется для определения неизменяемых переменных, что означает, что мы не можем переназначать значения после их создания.
- В простом терминологическом понимании Java, var означает “переменную”, а val означает “конечную переменную”.
Что такое REPL в Scala? Каково назначение REPL в Scala? Как получить доступ к REPL Scala из командной строки CMD?
REPL означает цикл чтения-оценки-печати. Мы можем произносить это как “рипл”. В Scala REPL действует как интерпретатор для выполнения кода Scala из командной строки. Поэтому REPL также известен как Scala CLI (интерфейс командной строки Scala) или оболочка командной строки Scala. Основная цель REPL заключается в том, чтобы разрабатывать и тестировать небольшие фрагменты кода Scala для тренировочных целей. Это очень полезно для начинающих в Scala, чтобы практиковать основные программы. Мы можем получить доступ к REPL, используя команду “scala”. Когда мы вводим команду “scala” в командной строке CMD, мы получим оболочку REPL, где мы можем вводить и выполнять код Scala.
D:\> scala
scala>
Какие особенности Scala?
Язык Scala поддерживает следующие функции:
- Поддерживает как стиль ООП (Императивный стиль), так и Функциональный стиль программирования
- Чистый объектно-ориентированный язык программирования
- Поддерживает все функциональные возможности
- Интерпретатор REPL (Read-Evaluate-Print Loop)
- Сильная система типов
- Статически типизированный язык
- Вывод типов
- Поддерживает сопоставление шаблонов
- Поддерживает замыкания
- Поддерживает постоянные структуры данных
- Использует модель акторов для разработки конкурентных приложений
- Совместим с Java
- Доступны все инструменты разработки – IDE, средства сборки, веб-фреймворки, TDD и BDD фреймворки
Как реализовать циклы функционально? В чем разница между циклами в стиле ООП и ФП?
Мы знаем, как реализовать циклы в объектно-ориентированном стиле: используя изменяемые временные переменные, обновляем значение переменной и используем конструкции цикла. Это очень утомительный и небезопасный подход. Это не потокобезопасно. В объектно-ориентированном стиле используются следующие конструкции для реализации циклов:
- Конструкции цикла
- Изменяемость
- Побочные эффекты
Мы можем реализовать одни и те же циклы по-разному в функциональном стиле. Это потокобезопасно. Мы можем использовать следующие две техники для реализации циклов в функциональном стиле:
- Рекурсия
- Хвостовая рекурсия
- Неизменяемость
- Отсутствие побочных эффектов
Что такое “Application” в Scala или что такое Scala Application? Что такое “App” в Scala? Каково использование App в Scala?
Scala Application: В Scala App – это трейт, определенный в пакете scala, например “scala.App”. Он определяет метод main. Если объект или класс расширяет этот трейт, то они автоматически становятся исполняемыми программами Scala, потому что они унаследуют метод main от Application. Основное преимущество использования App заключается в том, что нам не нужно писать метод main. Основным недостатком использования App является то, что мы должны использовать то же имя “args” для ссылки на аргумент командной строки, потому что метод main() scala.App использует это имя. Пример: Без использования Scala App:
object MyApp {
def main( args: Array[String]){
println("Hello World!")
}
}
С использованием Scala App:
object MyApp extends App{
println("Hello World!")
}
Если мы рассмотрим эти два примера, во втором примере мы не определили метод main, потому что мы унаследовали его от Scala App (Application). До версии Scala 2.9 у нас был трейт scala.Application, но его заменил scala.App начиная с версии Scala 2.9.
Поддерживает ли Scala перегрузку операторов? Поддерживает ли Java перегрузку операторов?
Java не поддерживает перегрузку операторов. Scala поддерживает перегрузку операторов. Причина в том, что Java не хочет поддерживать некоторые вводящие в заблуждение имена методов, такие как “+*/”. Scala предоставляет разработчику гибкость выбора имени метода/функции. Когда мы вызываем 2 + 3, это не означает, что ‘+’ – это оператор, это метод, доступный в классе Int (или его неявном типе). Внутренне этот вызов преобразуется в “2.+(3)“.
Что такое выражение? Что такое оператор? В чем разница между выражением и оператором?
Выражение: Выражение – это значение, которое будет оцениваться как Значение. Поскольку выражение возвращает значение, мы можем присвоить его переменной. Пример: условие If в Scala, тернарный оператор в Java. Утверждение: Утверждение определяет одно или несколько действий или операций. Это означает, что утверждение выполняет действия. Поскольку оно не возвращает значение, мы не можем присвоить его переменной. Пример: условие If в Java.
В чем разница между “If…Else” в Java и “If…Else” в Scala?
“If…Else” в Java: В Java “If…Else” является утверждением, а не выражением. Оно не возвращает значение и не может быть присвоено переменной. Пример:
int year;
if( count == 0)
year = 2014;
else
year = 2015;
“If…Else” в Scala: В Scala “If…Else” является выражением. Оно вычисляет значение, т.е. возвращает значение. Мы можем присвоить его переменной.
val year = if( count == 0) 2014 else 2015
**ПРИМЕЧАНИЕ:** “If…Else” в Scala работает как тернарный оператор в Java. Мы можем использовать “If…Else” в Scala, как “If…Else” в Java, как показано ниже:
val year = 0
if( count == 0)
year = 2014
else
year = 2015
Является ли Scala языком, основанным на выражениях, или языком, основанным на операторах? Является ли Java языком, основанным на выражениях, или языком, основанным на операторах?
В Scala всё является значением. Все выражения или операторы оцениваются как значение. Мы можем присвоить выражение, функцию, замыкание, объект и т. д. переменной. Поэтому Scala – это язык, ориентированный на выражения. В Java операторы не являются выражениями или значениями. Мы не можем присваивать их переменной. Поэтому Java не является языком, ориентированным на выражения. Это язык, основанный на операторах.
Назовите некоторые функции, которые поддерживаются Java, но не Scala, и наоборот?
- Java не поддерживает перегрузку операторов, но Scala поддерживает её.
- Java поддерживает операторы ++ и —, но Scala их не поддерживает.
- В Java есть проверяемые и непроверяемые исключения, но в Scala нет проверяемых исключений.
- Scala не поддерживает операторы break и continue, но в Java они используются.
- Scala не имеет явного приведения типов, но Java поддерживает эту функцию.
- Scala поддерживает сопоставление с образцом, но Java – нет.
- Java использует примитивные типы данных, но Scala их не имеет.
- Java поддерживает статические члены, но в Scala нет концепции статических членов.
- Scala поддерживает неявные преобразования и трейты, Java их не поддерживает.
**ПРИМЕЧАНИЕ:** Этот список выходит за рамки одной страницы. Однако это несколько важных моментов, которые следует помнить о различиях в функциях Scala и Java, чтобы успешно пройти интервью по Scala.
В чем разница между функцией и методом в Scala?
Scala поддерживает как функции, так и методы. Мы используем одинаковый синтаксис для определения функций и методов, разницы в синтаксисе нет. Однако у них есть одно небольшое различие:
- Метод можно определить в классе или трейте Scala. Метод связан с объектом (экземпляр класса). Метод можно вызвать, используя экземпляр класса. Метод Scala нельзя использовать напрямую без объекта.
- Функция не связана с классом или трейтом. Она определяется в пакете Scala. Мы можем обращаться к функциям без использования объектов, как в статических методах Java.
ЗАМЕТКА:- Мы обсудим Класс, Трейт, Пакет, Объект и т. д. в моих предстоящих сообщениях.
Сколько публичных классов можно определить в исходном файле Scala?
В Java мы можем определить не более одного публичного класса/интерфейса в исходном файле. В отличие от Java, Scala поддерживает несколько публичных классов в одном и том же исходном файле. Мы можем определить любое количество публичных классов/интерфейсов/трейтов в файле исходного кода Scala.
Как в Java, какие являются импортами по умолчанию в языке Scala?
Мы знаем, что пакет java.lang является пакетом по умолчанию, импортированным во все программы на Java автоматически JVM. Нам не нужно явно импортировать этот пакет. Точно так же во всех программах Scala доступны следующие импорты по умолчанию:
- пакет java.lang
- пакет scala
- scala.PreDef
Сколько операторов существует в Scala и почему?
В отличие от Java и, подобно C++, Scala поддерживает перегрузку операторов. В Scala есть всего один оператор – оператор “=”. Кроме этого, все остальное – это методы. Например, в выражении 2 + 3 здесь “+” не является оператором в Scala. “+” – это метод, доступный в классе Int. Компилятор Scala определяет, что 2 и 3 – целые числа, и пытается найти метод “+” в классе Int. Таким образом, компилятор Scala преобразует выражение “2 + 3” в “2.+(3)” и вызывает метод “+” для объекта целого числа “2”, передавая объект целого числа “3” в качестве параметра для метода “+”. Оба выражения “2 + 3” и “2.+(3)” равны. Это просто синтаксический сахар Scala для написания программ в функциональном стиле.
Укажите несколько ключевых слов, используемых в Java и не требуемых в Scala? Почему Scala не требует их?
Java широко использует следующие ключевые слова:
- Ключевое слово “public” – для определения классов, интерфейсов, переменных и т. д.
- Ключевое слово “static” – для определения статических членов.
Scala не требует этих двух ключевых слов. В Scala нет ключевых слов “public” и “static”.
- В Scala модификатор доступа “public” является значением по умолчанию для классов, трейтов, методов/функций, полей и т. д. Поэтому ключевое слово “public” не требуется.
- Для поддержки принципов ООП, команда Scala избегает ключевого слова “static”. Вот почему Scala является чистым объектно-ориентированным языком. Очень сложно работать с статическими членами в приложениях с параллельностью.
h3>Что такое PreDef в Scala? Какова основная цель PreDef в Scala? В Scala PreDef – это объект, определенный в пакете scala как “scala.PreDef”. Это утилитарный объект. Он определяет множество утилитарных методов, как показано ниже:
- Методы ввода-вывода консоли (print, println и т. д.)
- Методы утилиты коллекций
- Методы утилиты строк
- Методы неявного преобразования
- Методы утилиты утверждений и так далее.
Например, методы print, println, readLine, readInt, require и т. д. определены в объекте PreDef. В Scala PreDef доступен для использования его методов без явного импорта во всех программах Scala, потому что компилятор Scala автоматически импортирует этот объект во все компилируемые единицы, такие как Класс, Объект, Трейт и т. д. Вот и все, что касается “Основные вопросы и ответы на собеседование по Scala”. Мы обсудим некоторые Промежуточные, Продвинутые и Вопросы и ответы по Scala в реальном времени в моих будущих постах. Пожалуйста, оставьте комментарий, если вам понравилась моя статья или есть какие-либо вопросы/предложения.
Source:
https://www.digitalocean.com/community/tutorials/scala-interview-questions-answers