Voy a continuar con los post donde pongo algunas preguntas que se puede realizar en una entrevista de Trabajo. Ahora voy a poner unas preguntas sobre Scala.

  • ¿Qué es Scala?

Scala viene porque es un lenguaje escalable. Es Un lenguaje multi paradigma porque soporta Orientación a Objetos y programación funcional. Se ejecuta bajo el paraguas de la JVM.

 

  • ¿Cuales son las ventajas y desventajas de Scala?
    • Ventajas:
      1. Es altamente Escalable.
      2. Tiene una sintaxis flexible.
      3. Es altamente Testeable.
      4. Es altamente Mantenible y productivo.
      5. Facilita la programación concurrente.
      6. Todo es un objeto.
      7. Es Orientado a Objetos y Funcional.
      8. Los Objetos Singlenton son mejores que los static.
      9. Los Arrays usan genéricos regulares.
    • Desventajas:
      1. Tienes que pensar de manera funcional y no de forma imperativa.
      2. Tiene una curva de aprendizaje bastante alta.
      3. Es difícil encontrar programadores de Scala
  • ¿Me puedes decir algunas ventajas de la programación funcional?

    1. El código es menos verboso
    2. Las funciones puras son más fáciles de leer y entender.
    3. Son más sencillas de testar.
    4. Los programas están escritos a alto nivel y son más sencillos de comprender.
    5. La concurrencia y el paralelismo es más sencillo de programar.
    6. Usan evaluación perezosa.
  • ¿Cual es la superclase de todas las clases de Scala?

“Any” class es la superclase de todas las clases de Scala.

 

  • ¿Cual es el modificador por defecto de Scala?

Public.

 

  • ¿Cual es la similitud entre un Integer de Scala y de Java?

Ambos son para gestionar tipos enteros y tienen el mismo tamaño, 32 bit. (4.294.967.296).

 

  • ¿Que es un unit en Scala?

En Scala lo usamos para representar un “no value” o “No un valor útil”.

 

  • Me puedes hablar de las colecciones en Scala y sus diferencias.

 

    • Scala tiene tres tipos de colecciones: Listas, Sets y Mapas.
    • Las Listas contienen objetos de varios tipos y estos objetos pueden estar repetidos.
    • Los Sets pueden contener objetos de varios tipos pero estos no pueden estar repetidos.
    • Los Mapas son colecciones del tipo clave, valor.
    • Por defecto todas estas colecciones son Inmutables.
  • Que es un If..else in Scala.

Un If..else es una expressión a diferencia de Java que en un statement. En un If..else se puede retornar un valor.

 

  • Que es un Trait en Scala.

Son usados para definir tipos de objetos al especificar el comportamiento mediante los métodos provistos.

 

  • ¿Cuales son las variables de Scala?

Scala maneja dos tipos de variables: Var se usa para las variables mutables y Val lo usamos para variables Inmutables.

 

  • ¿Qué es la función de curry en Scala?

El currying es la técnica de transformar una función que toma múltiples argumentos en una función que toma un solo argumento. Estos son útiles para trabajar con funciones de orden superior. Con esto, también podemos completar solo los argumentos que tenemos todavía.

 

  • ¿Qué son los parámetros implícitos en Scala?

Parámetro implícito es la forma en que permite que los parámetros de un método sean “encontrados”. Es similar a los parámetros predeterminados, pero tiene un mecanismo diferente para encontrar el valor “predeterminado”. El parámetro implícito es un parámetro para el método o constructor que está marcado como implícito. Esto significa que si no se menciona un valor de parámetro, el compilador buscará un valor “implícito” definido dentro de un alcance.

  • ¿Qué es la mónada en Scala?

Básicamente una monada es un objeto que envuelve otro objeto. Una Monada es algo a lo que podemos pasar funciones y manipular los datos del objeto subyacente. No necesitamos manipular el objeto directamente.

 

  • ¿Qué es la función anónima de Scala?

En un código fuente, las funciones anónimas se denominan “funciones literales” y, en el tiempo de ejecución, las funciones literales se instancian en objetos llamados valores de función. Scala proporciona una sintaxis relativamente fácil para definir funciones anónimas.

 

  • ¿Explica las funciones de ‘Scala de orden superior’?

Scala permite la definición de funciones de orden superior. Estas son funciones que toman otras funciones como parámetros o cuyo resultado es una función. En el siguiente ejemplo, la función apply () toma otra función “f” y un valor “v” y aplica la función a v.

 

  • ¿Cuáles son las Options, Some y None en Scala?

Una Option de Scala es una especie de contenedor. Puede contener cero o un elemento de un tipo. Cuando tiene un valor, tiene Some, de lo contrario, contiene un objeto None. 

 

  • ¿En qué se diferencian los términos “Null”, “Nil”, “None” y “Nothing” en Scala?

Si bien parecen similares, los términos mencionados son ligeramente diferentes en sus comportamientos. Así es cómo:

    1. Null representa la ausencia de valor. Representa la ausencia de información de tipo para los tipos complejos heredados de AnyRef.
    2. Nil denota el final de una lista.
    3. None es el valor de una Opción sin valor en ella.
    4. Nothing es el tipo más bajo en todo el sistema de tipos. Todos los valores bajo AnyVal y AnyRef caen bajo esto. Un método que lanza una excepción usa Nothing como un tipo de retorno.
  • ¿Qué es un cierre en Scala?

Un cierre en Scala es una función cuyo valor depende de las variables declaradas fuera de ella. Tomemos un ejemplo:

scala> var c=5
c: Int = 5
scala> val mul2=(a:Int,b:Int)=>(a+b)*c
mul2: (Int, Int) => Int = $Lambda$1533/239864031@6d90e705
scala> mul2(2,3)
res45: Int = 25

scala> c=7
c: Int = 7
scala> mul2(2,3)
res46: Int = 35

En este ejemplo, mul2 lee el nuevo valor de “c” cuando lo llamamos por segunda vez.

 

  • Explicar los diferentes tipos de identificadores en Scala.

Tenemos cuatro tipos de identificadores en Scala:

    1. Identificadores alfanuméricos: Estos contienen letras, guiones bajos y dígitos, pero solo comienzan con una letra o con un guión bajo. La nomenclatura que se usa es camelCase.
    2. Identificadores del operadorEstos:  contienen caracteres de operador, excepto estos- () [] {}.
    3. Identificadores mixtos Estos contienen un identificador alfanumérico, un guión bajo y también un identificador de operador.
    4. Identificadores literales: Estos contienen una cadena arbitraria encerrada en backticks (`). 

Actualizado 22 de Marzo:

  • Os dejo una pregunta que me hicieron ayer en una entrevista:

¿De que tipo es result? Result es del tipo AnyVal por que a la hora de realizar la evaluación, result no sabe si será Integer o String.

val n = 0

val result = if (n == 0) {
    1
} else {
   "1"
}

 

¿Os parecen adecuadas estas preguntas? ¿Añadirías alguna más?

Bibliografía:

https://stackoverflow.com/questions/128057/what-are-the-benefits-of-functional-programming

https://career.guru99.com/top-25-interview-questions-on-scala/

Last modified: 08/08/2020