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

Comandos maven para

  1. Limpia el directorio de destino eliminando los archivos generados previamente.
  2. Compila el código fuente del proyecto.
  3. Ejecuta las pruebas unitarias del proyecto.
  4. Empaqueta el código compilado y los recursos en un archivo JAR, WAR u otro formato según la configuración del proyecto.
  5. Instala el paquete en el repositorio local para ser utilizado como dependencia en otros proyectos locales.
  6. Despliega el paquete en un repositorio remoto para compartirlo con otros desarrolladores.
  7. Realiza una limpieza, compilación y instalación en un solo comando.
  8. Realiza una limpieza y empaquetado en un solo comando.
  9. Realiza una limpieza y ejecución de pruebas en un solo comando.
  10. Muestra el árbol de dependencias del proyecto.
  11. Muestra la ayuda y la documentación de Maven.
A

Aquí tienes una lista de comandos de consola típicos de Maven (MVN):

  1. mvn clean: Limpia el directorio de destino eliminando los archivos generados previamente.
  2. mvn compile: Compila el código fuente del proyecto.
  3. mvn test: Ejecuta las pruebas unitarias del proyecto.
  4. mvn package: Empaqueta el código compilado y los recursos en un archivo JAR, WAR u otro formato según la configuración del proyecto.
  5. mvn install: Instala el paquete en el repositorio local para ser utilizado como dependencia en otros proyectos locales.
  6. mvn deploy: Despliega el paquete en un repositorio remoto para compartirlo con otros desarrolladores.
  7. mvn clean install: Realiza una limpieza, compilación y instalación en un solo comando.
  8. mvn clean package: Realiza una limpieza y empaquetado en un solo comando.
  9. mvn clean test: Realiza una limpieza y ejecución de pruebas en un solo comando.
  10. mvn dependency:tree: Muestra el árbol de dependencias del proyecto.
  11. mvn help: Muestra la ayuda y la documentación de Maven.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
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
5
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
6
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
7
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 recogen 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
8
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
9
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
10
Q

Cuál es el método de preparedStatement que se usa cuando la query es una select y cuál cuando la query es un insert, update o delete?

A

.executeQuery() -> devuelve un Resulset
.executeUpdate() -> devuelve el número de filas afeptadas

.execute() -> devuelve ResultSet o número de filas afectadas en función del tipo de sentencia pasada

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
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
12
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 abstracto, y puede tener métodos default (métodos implementados) y métodos estáticos (que se pueden llamar como si fuesen de clase, como un método estático en una clase normal)

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
13
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
14
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
15
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
16
Q

Ver en internet algunos ejemplos o video tutorial de expresiones lambda

A
17
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

18
Q

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

A

ServerSocket y Socket

19
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))

20
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