b3t6 - LAB Java avanzado Flashcards

1
Q

Cuáles son los directorios por defecto que usa Maven, y para qué sirven?

A
  • src/main/java : donde guardaremos nuestras clases java fuente. Debajo de esta carpeta situaremos nuestras clases en distintos paquetes.
  • src/main/resources : aquí almacenaremos los recursos (ficheros xml, ficheros de propiedades, imagenes, …) que pueda necesitar las clases java de nuestro proyecto. Igualmente aquí tienen que ir los ficheros de configuración de Spring o Hibernate por ejemplo.
  • src/test/java : en dicha carpeta se guardan las clases de test que se encargarán de probar el correcto funcionamiento de nuestra aplicación. Aquí por ejemplo podemos guardar nuestros test unitarios de JUnit.
  • src/test/resources : en esta carpeta guardamos los recursos que usan los recursos.
  • target: donde deja los compilados
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Qué partes tiene principalmente el pom.xml de Maven? Qué campos importantes tiene cada una?

A
  • Información básica de maven -> tiene la ruta del proyecto, el id del proyecto, la versión del proyecto y el tipo de empaquetado principalmente
    – modelVersion -> versión de maven
    – groupId -> rutal del proyecto
    – artifactId -> id del proyecto
    version -> versión del proyecto
    packaging -> tipo de empaquetado para build del proyecto
  • Lista de dependencias -> en una lista “dependencies/dependecy/”
    – groupId -> grupo de la dependencia en los repositorios maven
    – artifactId -> id de la dependencia
    – version -> versión de la dependencia
    – scope -> El ámbito de aplicación de las dependencias, incluida la compilación, la provisión, el tiempo de ejecución, la prueba, el sistema y las exclusiones
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

El el campo scope de una dependecia del pom.xml de maven, qué opciones hay y qué son cada una?

A
  • Compile -> Es la que se usa por defecto si no se pone. Dependencias necesarias para la construcción , por lo que estarán el el classpath de construcción
  • Provided -> Dependencias que no aportamos en nuestro proyecto, porque ya están donde se vaya a desplegar el proyecto, por ejemplo en un contenedor web que ya tiene esas librerías
  • Runtime -> Para las dependencias que se necesitan en tiempo de ejecución pero no antes, por ejemplo un driver jdbc. Por lo que estarán en el classpath de runtime
  • Test -> Depencias que solo se usan en el runtime de los test, no de la aplicación
  • System -> Parecido a provided. Deprecado
  • Import -> para importar otros pom.xml
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Qué fases tiene el ciclo de vida “default” de maven?

A

1.- validate
2.- compile
3.- test (segun los casos de prueba del directorio src/test/java)
4.- package (jar, war, ear, …)
5.- verify
6.- install (local repository)
7.- deploy (remote repository)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Cuál es el comando para usar la herramienta maven por consola?

A

mvn

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Si hablamos de reflexión en java, cómo se usa en pocas palabras?
qué clases se usarían para manejar los aspectos principales?

A

Consiste en hacer código muy genérico, declarando métodos que recojen Object, para poder pasarle lo que sea, y luego dentro, obteniendo el nombre de la clase del objeto y el nombre de sus campos, poder hacer cosas con ellos.

objetc.getClass() –> devuelve un Class
clase.getSimpleName() -> devuelve un string con el nombre de la clase
clase.getDeclaredFlieds() -> devuelve un array de Fields, que son los atributos de la clase
atributo.getName() -> devuelve el nombre del Field (atrbuto)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Qué diferencias hay entre los siguientes conceptos de JDBC?
Driver
DriverManager
DataSource

A

Driver -> es específico del fabricante del SGBD
DriverManager -> Capa de más alto nivel para hacerle peticiones al Driver
DataSource -> Como el DriverManager pero para aplicaciones multiusuario, que internamente le pide al Driver y gestiona un pool de conexiones

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Qué pasos usaríamos en JDBC para hacer consultas a una BBDD?

A
  1. Cargar en memoria el driver del fabricante -> Class.forName(“com.mysql.jdbc.Driver”
  2. Pedirle una conexión al Driver (o mediante el Datasource). Para ello se ha de especificar la URL de la BBDD, usuario y contraseña -> Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
    Ejemplos de URLs de distintos SGDB
    // jdbc:oracle:thin:user/password@localhost:1521:SID
    // jdbc:mysql://localhost/BD
    // jdbc:postgresql://localhost/BD
    // jdbc:sqlserver://localhost;instance=SQLEXPRESS;databaseName=BD
    // jdbc:mariadb://localhost/BD
    // jdbc:h2:mem:BD
    // jdbc:hsqldb:mem:BD
  3. Establecer la sentencia a ejecutar con Statement, PreparedStatement (precompiladas y configurable), o CallableStatement (Procedimientos almacenados) -> Statement stmt = conn.createStatement();
  4. Ejecutar la sentencia -> ResultSet rs = stmt.executeQuery(QUERY);)
  5. Recorrer el resultado con ResultSet
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Qué son los modules en Java9 y en qué fichero se configuran?

A

Un module permite generar un jar pero sin todas las clases de los paquetes incluídos, evitando tener que incluir todas

Se configura en el fichero module-info.java donde se especifica lo que se exportará en el jar del module -> “export”, y las dependencias del module -> “requires

module ModuloA {
exports com.arquitecturajava.core;
exports com.arquitecturajava.utils;
requires es.tai.modulo.user;
requires es.tai.modulo.bbdd;
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

En la programación funcional en java, qué anotación se ha inventado y para qué sirve?

A

La anotación @FunctionalInterface
Es una interfaz de un sólo método
Se usan para expresiones lambda, aplicando estas funciones sobre streams de objetos, encadenándolas
Se han creado varias especializaciones, como la clase Function

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

En java8, qué es la palabra default al declarar un método?
default public void g(){}

A

Se usa en clases abstractas o interfaces, para poder implementar el método a ese nivel, ya que por defecto no se puede en los métodos abstractos

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Para qué se usan las siguientes especializaciones de @FunctionalInterface

// Consumer<T> --> metodo accept(T)
// Supplier<T> --> metodo get()
// Predicate<T>
// metodo and(Predicate) --> composicion
// metodo test(T) --> boolean
// Function<T,R>
// metodo apply(T) --> R
// metodo andThen(Function) --> composicion</T></T></T>

A

// Consumer<T> --> metodo accept(T) --> Función que no devuelve parámetros
// Supplier<T> --> metodo get() -> Función que no acepta parámetros, sólo devuelve
// Predicate<T> -> Función para hacer filtros en base a una condición
// metodo and(Predicate) --> composicion
// metodo test(T) --> boolean
// Function<T,R> -> Función normal
// metodo apply(T) --> R
// metodo andThen(Function) --> composicion</T></T></T>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Para qué sirven los siguientes métodos importantes de la interfaz Stream, que trabajan pasándole objetos funcionales (@FunctionalInterface o sus especializaciones)

//	filter(Predicate) --> Stream
//	map(Function) --> Stream
//  reduce(BinaryOperator) -> T
//  forEach(Consumer) --> void
A

Convertir un List a stream -> nombres.stream()
// filter(Predicate) –> Stream -> Filtrar por una condición
// map(Function) –> Stream -> Mapear dos valores
// reduce(BinaryOperator) -> T -> Aplicar alguna fórmula
// forEach(Consumer) –> void

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

En qué consiste el patrón Optional?

A

Cuando un método devuelve un objeto Optional

// Otra clase (patron de diseño) es Optional (para tratar con los null). Algunos metodos importantes:
//
// of(T) -> Optional (construir el optional)
// get() –> T
// orElse(T) –> T
// orElseGet(Supplier) –> T
// ifPresent(Consumer) –> void

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Con qué clases podemos poner en escucha un puerto para conexiones http?

A

ServerSocket y Socket

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Qué es necesario para usar objetos java remotos con RMI?

A

En servidor:
- Acordar una interfaz con el cliente. Mi clase implementará esa interfaz.
- Arrancar el registro de nombres (en consola -> rmiregistry)
- Herdar el objeto a exponer de UnicastRemoteObject
- Generar clases automáticas para comunicaciones (en consola -> rmic miClase)

En cliente:
- Generar clases automáticas para comunicaciones (en consola -> rmic miClase)
- Pedir al registro de nombres el objeto, casteándolo a la interfaz acordada (Naming.lookup(URL acordada))

17
Q

Qué son los modulos a partir de Java 9?

A

Un módulo agrupa código y recursos como los JARs tradicionales, pero añade además un descriptor que restringe el acceso a sus paquetes, y describe sus dependencias.

El descriptor de módulo es la meta-información sobre el módulo.
Los descriptores se escriben en un fichero module-info.java

18
Q

Ver en internet algunos ejemplos o video tutorial de expresiones lambda

A