Quiz
JAVERITO
Create a free account to finish this quiz
Save your progress and see your final score.
Already have an account? Sign in
Questions in this quiz (83)
1JVM/JRE/JDK
- AJDK es el Kit de desarrollo de Java.
JRE es el Java Runtime Environment: contiene una JVM, entre otras cosas, y es lo que necesita para ejecutar un programa Java.
JVM es la máquina virtual Java: en realidad ejecuta Java ByteCode - Bno
- AJDK es el Kit de desarrollo de Java.
2Inmutabilidad
- AUna clase inmutable es simplemente aquella cuyas instancias no pueden ser modificadas una vez que su información ha sido definida. No habrá ninguna modificación a la misma durante su ciclo de vida. Un ejemplo de clase inmutable en Java es la clase String
- Bno
3Autoboxing/Unboxing
- AEl autoboxing/unboxing simplifica y agiliza en gran medida el código que debe convertir los tipos primitivos en objetos, y viceversa
- Bno
4Modificadores de Acceso
- ALos modificadores de acceso en Java ayudan a restringir el alcance de una clase, constructor, variable, método o miembro de datos. Hay cuatro tipos de modificadores de acceso disponibles en Java:
Default (No se requiere palabra clave), Private, Protected, Public - Bno
- ALos modificadores de acceso en Java ayudan a restringir el alcance de una clase, constructor, variable, método o miembro de datos. Hay cuatro tipos de modificadores de acceso disponibles en Java:
5Estructuras de Datos
- AUna estructura de datos es un arreglo de datos en la memoria de una computadora, y en algunas ocasiones en un disco. Las estructuras de datos incluyen arreglos, listas enlazadas, pilas, arboles binarios, y tablas de dispersion entre otros.
- Bno
6Error vs Excepción (Checked/Unchecked)
- ATodas las excepciones en Java heredan de Throwable subdividiéndose en Error y Exception, las primeras son condiciones de error del sistema y las segundas condiciones de error del programa.
- Bno
7Algoritmos de Búsqueda
- AImplica ir a buscar algunos datos almacenados en estructuras de datos como Arrays, List, Map, etc.
Estrategias de búsqueda:
Busqueda lineal, binaria, de interpolación, exponencial, API de colecciones de Java. - Bno
- AImplica ir a buscar algunos datos almacenados en estructuras de datos como Arrays, List, Map, etc.
8Algoritmos de Ordenamiento
- APara poder ordenar una cantidad determinada de números almacenadas en un vector o matriz.
Métodos de ordenamiento:
Burbuja, Inserción, Selección, Shellsort. - Bno
- APara poder ordenar una cantidad determinada de números almacenadas en un vector o matriz.
9Reflection vs Introspection
- AConsiste en inspeccionar y cambiar el comportamiento de un programa en tiempo de ejecución.
Java Reflection API se usa para ese propósito donde permite inspeccionar clases, interfaces, campos y métodos en tiempo de ejecución, sin saber sus nombres en el momento de la compilación. - Bno
- AConsiste en inspeccionar y cambiar el comportamiento de un programa en tiempo de ejecución.
10Overloading/Overriding
- ALa reescritura de métodos (Overriding) y la sobrecarga (Overloading) son diferentes manifestaciones del polimorfismo de Java.
La reescritura (Overriding) es una manifestación de polimorfismo entre la clase principal y la clase secundaria.
La sobrecarga (Oveloading) puede entenderse como una manifestación concreta de polimorfismo. - Bno
- ALa reescritura de métodos (Overriding) y la sobrecarga (Overloading) son diferentes manifestaciones del polimorfismo de Java.
11Uso de Herencia
- AEs el mecanismo por el cual una clase permite heredar las características (atributos y métodos) de otra clase
- Bno
12Uso de Encapsulación
- AConsiste en ocultar atributos de un objeto de manera que solo se pueda cambiar mediante operaciones definidas en ese objeto. Está estrechamente relacionado con la visibilidad.
- Bno
13Uso de Polimorfismo
- AEs la capacidad que tienen los objetos de comportarse de forma diferente, aunque conserven su mismo nombre.
Debido a que el comportamiento de un objeto está relacionado con los métodos que se le definen, generalmente la capacidad polimórfica de una clase se establece al crear métodos con el mismo nombre, pero con diferentes comportamientos. - Bno
- AEs la capacidad que tienen los objetos de comportarse de forma diferente, aunque conserven su mismo nombre.
14Uso de Abstracción
- AEs el proceso de mostrar solo la información requerida al usuario ocultando otros detalles.
En Java, la abstracción se logra usando clases abstractas e interfaces. - Bno
- AEs el proceso de mostrar solo la información requerida al usuario ocultando otros detalles.
15Uso de Generics<T>
- AEl término genéricos significa tipos parametrizados. Los tipos parametrizados son importantes porque le permiten crear clases, interfaces y métodos en los que el tipo de datos sobre los que operan se especifica como parámetro. Una clase, interfaz o método que funciona con un tipo de parámetro se denomina genérico, como una clase genérica o método genérico.
- Bno
16Anonymous Inner Classes
Static Nested Class
Local Inner Classes- AEs una clase interna sin nombre y para la que solo se crea un objeto. Una clase interna anónima puede ser útil cuando se crea una instancia de un objeto con ciertos "extras" como los métodos de sobrecarga de una clase o interfaz
- Bno
17Single Responsibility Principle
- ALo que nos pide este principio es que cada clase debe tener una unica responsabilidad, por lo que si estamos programando una clase que se ocupa de diferentes cosas es conveniente partirla en 2 o más clases.
- Bno
18Open/Closed Principle (OCP)
- ALa idea de este principio es que las clases están abiertas a la extensión pero cerradas a la modificación, lo que significa que ante peticiones de cambio en nuestro programa, hay que ser capaces de añadir funcionalidad sin modificar la existente.
- Bno
19Liskov’s Substitution Principle
- ACada clase que hereda de otra puede usarse como su padre sin necesidad de conocer las diferencias entre ellas.
- Bno
20Interface Segregation Principle
- ANos ayuda a no obligar a ninguna clase a implementar métodos que no utiliza.
- Bno
21Dependency Inversion Principle
- ALo que se pretende es que no exista la necesidad de que los módulos dependan unos de otros, sino que dependan de abstracciones. De esta forma, nuestros módulos pueden ser más fácilmente reutilizables
- Bno
22Patrón de diseño fábrica
- AEs un patrón de diseño creacional que proporciona una interfaz para crear objetos en una superclase, mientras permite a las subclases alterar el tipo de objetos que se crearán.
- Bno
23Patrón de diseño fachada
- AEs un patrón de diseño estructural que proporciona una interfaz simplificada a una biblioteca, un framework o cualquier otro grupo complejo de clases
- Bno
24Patrón de diseño singleton
- AEs un patrón de diseño creacional que nos permite asegurarnos de que una clase tenga una única instancia, a la vez que proporciona un punto de acceso global a dicha instancia
- Bno
25Patrón de diseño mvc
- AEste patrón permite separar una aplicación en 3 capas, una forma de organizar y de hacer escalable un proyecto.
- Bno
26Patrón de diseño DI
- ANos permite inyectar dependencias a otras clases cuando sea necesario en lugar de inicializar las dependencias dentro de la clase receptora.
- Bno
27Patrón de diseño DAO
- APropone separar por completo la lógica de negocio de la lógica para acceder a los datos
- Bno
28Patrón de diseño Repository
- AEste patrón hace referencia a como persistir un objeto en una base de datos. Para ello el patrón de diseño se encarga de agrupar todas las operaciones en una única clase que las gestiona
- Bno
29Patrón de diseño Strategy
- AAyuda a definir diferentes comportamientos o funcionalidades que pueden ser cambiadas en tiempo de ejecución
- Bno
30Default Method in Interface
- Ainterface TestInterface
{
// abstract method
public void square(int a);
// default method
default void show()
{
System.out.println("Default Method Executed");
}
} - Bclass TestClass implements TestInterface
{
// implementation of square abstract method
public void square(int a)
{
System.out.println(a*a);
}
public static void main(String args[])
{
TestClass d = new TestClass();
d.square(4);
// default method executed
d.show();
}
}
- Ainterface TestInterface
31Static Method in Interface
- Ainterface TestInterface
{
// abstract method
public void square (int a);
// static method
static void show()
{
System.out.println("Static Method Executed");
}
} - Bclass TestClass implements TestInterface
{
// Implementation of square abstract method
public void square (int a)
{
System.out.println(a*a);
}
public static void main(String args[])
{
TestClass d = new TestClass();
d.square(4);
// Static method executed
TestInterface.show();
}
}
- Ainterface TestInterface
32Functional Interface
- A@FunctionalInterface
interface Matematicas {
public double operacion(double x, double y);
} - Bpublic class Principal {
public static void main(String[] args) {
Matematicas o = (x, y) -> x + y;
System.out.println(o.operacion(2, 3));
}
}
- A@FunctionalInterface
33Lambda Expressions
- ALas expresiones lambda son funciones anónimas, es decir, funciones que no necesitan una clase.
Las expresiones lambda puede clasificarse de la siguiente manera: Consumidores, Proveedores,
Funciones (Operadores Unarios, Operadores Binarios),
Predicados. - B1. z -> z + 2
2. () -> System.out.println("Mensaje 1")
3. (int longitud, int altura) -> { return altura * longitud; }
- ALas expresiones lambda son funciones anónimas, es decir, funciones que no necesitan una clase.
34Predicate
- ASe trata de expresiones que aceptan un parámetro y devuelven un valor lógico.
- BString message -> message.length > 50
35Function
- AAquellas expresiones que aceptan un argumento y devuelven un valor como resultado y cuyos tipos no tienen porque ser iguales
- BOrder persistedOrder -> persistedOrder.getIdientifier();
36Consumer
- ASe trata de aquellas expresiones lambda que aceptan un solo valor y no devuelven valor alguno.
- BString message -> System.out.println(message);
37Supplier
- AEn este caso se trata de expresiones que no tienen parámetros pero devuelven un resultado.
- B() -> return createRandomInteger()
38Method References
- APermite hacer referencia a los métodos y constructores por medio de una interface funcional.
Tipos de métodos referenciados:
• Referencia a un método estático
• Referencia a un método de un objeto
• Referencia a un método de un objeto arbitrario
• Referencia a un constructor - Bno
- APermite hacer referencia a los métodos y constructores por medio de una interface funcional.
39Stream API
- ALos Streams son una secuencia de elementos que soportan operaciones de agregación secuencial y paralela.
- Bno
40Clase Optional
- AUn Optional es una clase que puede o no contener un valor, es decir, que se comporta como un wrapper para cualquier tipo de objeto que pueda o no ser nulo.
Si el valor es presente, isPresent() devuelve true y get() retorna el valor. - Bno
- AUn Optional es una clase que puede o no contener un valor, es decir, que se comporta como un wrapper para cualquier tipo de objeto que pueda o no ser nulo.
41JPA (SQL/NoSQL)
- ARevisar el documento de notaciones de Spring
- Bno
42Futures & Promises
- AEl concepto de Futuro es el de un objeto que, en algún momento, contendrá el resultado de un método. Cuando llamemos a ese método, devolverá inmediatamente el resultado (un objeto Futuro), y se irá ejecutando de manera asincrona, mientras nuestro método «llamante» continua.
- Bno
43Load Balancing
- AEl objetivo es consumir un servicio de forma balanceada entre varias instancias desplegadas del mismo. La idea es que en un escalado elástico el consumo balanceado sea transparente para nosotros
- Bno
44Service Discovery
- AEste patrón nos permite ejecutar un servicio determinado sin conocer la dirección física del servicio, para esto, utilizamos un balanceador de cargas que se apoyará del Service Registry para conocer la ubicación real del servicio
- Bno
45Fault Tolerance
- AEs la propiedad que permite a un sistema continuar en estado operativo aún cuando alguno de sus componentes falle.
- Bno
46Api Gateway
- AEl patrón API gateway permite implementar una solución para centralizar y enrutar todas las peticiones desde el exterior hacia cada microservicio, actúa como un proxy o punto único que enruta una petición que llega hacia los microservicios correspondientes
- Bno
47Uso de Eventos
Síncronos/Asíncronos- AUna llamada asíncrona puede iniciarse desde un hilo, pero no es un requisito. Además, las llamadas asíncronas no impiden que el programa acceda a la ejecución del código. Cuando una llamada asíncrona regresa de un evento, la llamada vuelve a la función de devolución de llamada.
Una llamada asíncrona puede iniciarse desde un hilo, pero no es un requisito. Además, las llamadas asíncronas no impiden que el programa acceda a la ejecución del código. Cuando una llamada asíncrona regresa de un evento, la llamada vuelve a la función de devolución de llamada - Bno
- AUna llamada asíncrona puede iniciarse desde un hilo, pero no es un requisito. Además, las llamadas asíncronas no impiden que el programa acceda a la ejecución del código. Cuando una llamada asíncrona regresa de un evento, la llamada vuelve a la función de devolución de llamada.
48Escalabilidad
- ACon los microservicios, es posible escalar únicamente los servicios con mayor carga de trabajo. Es decir, puedes trabajar en el microservicio que quieras en cada momento e invertir mayores esfuerzos en los que más te interesen
- Bno
49Config Server
- ANos permitirá centralizar y delegar en un servicio la provisión de la configuración de todos nuestros microservicios.
- Bno
50Distributed Tracing
- AEs un método utilizado para comprender y monitorear cómo se comportan las aplicaciones, especialmente las que se construyeron utilizando arquitecturas de microservicios
- Bno
51Orquestación/Coreografía
- AOrquestacion: Colaborar con la interacción de servicios internos y externos a través de un proceso ejecutable. A través del proceso central para controlar el objetivo general, las operaciones involucradas, la secuencia de invocación del servicio.
Coreografía: controla la interacción de varias partes de los recursos a través de la secuencia de interacción de mensajes. Los recursos que participan en la interacción son todos iguales, sin control centralizado - Bno
- AOrquestacion: Colaborar con la interacción de servicios internos y externos a través de un proceso ejecutable. A través del proceso central para controlar el objetivo general, las operaciones involucradas, la secuencia de invocación del servicio.
52Semántica y taxonomía de Apis
- ALas Apis comparten caracteristicas comunes:
Caracteristicas de diseño, formato de datos. Clasificación basada en características técnicas, relacionadas al negocio: Aprovisionamiento, estilo de diseño, protocolo y formato de datos. - BTIPOS
TIPO DE API POR APROVISIONAMIENTO:
*Api Publica, *API de socios, *API privadas
TIPOS DE API POR ESTILO DE DISEÑO: El tipo más popular de API es REST, Los consumidores envían solicitudes GET para acceder a un recurso y solicitudes PUT, POST y DELETE para modificarlo.
TIPOS DE API POR PROTOCOLO:
*HTTP, *MQTT, AMQP y CoAP, *SOAP
TIPOS DE API POR FORMATO DE DATOS:
* XML, *JSON
- ALas Apis comparten caracteristicas comunes:
53Diseño Dirigido por Dominio (DDD)
- ADomain Driven Design representa distintas claves, terminología y patrones utilizados para desarrollar software donde el dominio es lo más central e importante de una determinada organización:
*Colocar los modelos y reglas de negocio de la organización, en el core de la aplicación
*Basar nuestro dominio complejo, en un modelo de software.
*Se utiliza para tener una mejor perspectiva a nivel de colaboración entre expertos del dominio y los desarrolladores, para concebir un software con los objetivos bien claros. - BENTITIES:son objetos del modelo que se caracterizan por tener identidad en el sistema (son conceptos: se los llama en sustantivo
VALUE OBJETCTS: describen características. Pueden ser String o Integer
SERVICES: Los servicios representan operaciones, acciones o actividades que no pertenecen conceptualmente a ningún objeto de dominio concreto. Los servicios no tienen ni estado propio ni un significado más allá que la acción que los definen.
Utilización de UML para modelado
- ADomain Driven Design representa distintas claves, terminología y patrones utilizados para desarrollar software donde el dominio es lo más central e importante de una determinada organización:
54Patrón CQRS
- ACQRS son las siglas de Command Query Responsibility Segregation. Como sugiere el nombre, dividimos la aplicación en dos partes: Command-Side y Query-Side.
• Los comandos cambian el estado del objeto o entidad, también llamados modificadores o mutadores.
• Las consultas devuelven el estado de la entidad y no cambian nada. Otro término para ellos es "accesores". - BPlataformas:
Eventuate es uno de esos ejemplos. Es una plataforma de aplicación que consta de dos productos, uno de los cuales es Eventuate ES, un marco de microservicios que implementa un modelo de persistencia y programación basado en el abastecimiento de eventos.
Lagom es un marco de microservicio de código abierto construido sobre los marcos Akka y Play. Lagom Persistence utiliza Event Sourcing y CQRS para ayudar a lograr una arquitectura desacoplada.
- ACQRS son las siglas de Command Query Responsibility Segregation. Como sugiere el nombre, dividimos la aplicación en dos partes: Command-Side y Query-Side.
55Patrón SAGA
- AEl problema de cómo tratar con transacciones que dependen de otros servicios dentro de una arquitectura. Podríamos definir Saga como una secuencia de transacciones locales, en la que cada transacción local actualiza mediante algún tipo de evento la siguiente transacción que se debe realizar. Si se da el caso en el que una transacción falla, entonces la saga tiene que ejecutar una serie de transacciones para poder deshacer los cambios que fueron realizados y dejar todas la información de forma consistente, es decir, debe realizar una compensación.
- BPodríamos encontrar Sagas en dos diseños de microservicios:
Orquestación.
Podríamos definir una orquestación en microservicios, como aquella arquitectura en la que un coordinador gestiona las transacciones a realizar.
Coreografía
A diferencia de una orquestación, aquí no tendremos una pieza central en la que se «orquestará» la siguiente acción o paso a realizar, sino que se enviarán eventos, que en este caso serán procesados por ejemplo kafka. Controlar los eventos como si fueran mensajes.
56Nivel de madurez de ApiREST
- ALos niveles de madurez de REST son la aplicación de la semántica del protocolo HTTP y la web a los servicios web. Cada uno de estos niveles incluye una aplicación del protocolo HTTP y la web que el servicio REST debe seguir.
- BNivel 0:
Basada en XML (POX= Plain Old XML) . En este tipo de arquitecturas disponemos de URLS con SOAP.
Nivel 1 (Recursos)
La idea es identificar los recursos a través de un URI
La URI http://www.misitio.com/personas/1 representa a una persona
Nivel 2 (Verbos Http)
GET: POST: PUT: DELETE:
Nivel 3 (HATEOAS)
El nivel 3 de HATEOAS. Es el último a nivel de arquitecturas REST. En esta caso los Recursos pueden estar relacionados entre ellos a través del uso de links .
57ApiSOAP vs ApiREST
- ASOAP Web Services
SOAP (Simple Object Access Protocol), es un protocolo que nos permitirá realizar servicios web sin estado, a través de TCP y con un formato XML. Los servicios SOAP funcionan por lo general por el protocolo HTTP que es lo más común cuando invocamos un Web Services, sin embargo, SOAP no está limitado a este protocolo, si no que puede ser enviado por FTP, POP3, TCP, Colas de mensajería (JMS, MQ, etc).
·SMTP,HTTP POST, MQ
·Tipado fuerte, XML Schema
·Sincrono y Asincrono
·WS SECURITY
·Comunicación origen a destino seguro
. (WSDL): - BREST: transferencia de estado representacional
Cuando se envía una solicitud de datos a una API de REST, se suele hacer a través de HTTP. Una vez que reciben la solicitud, las API diseñadas para REST pueden devolver mensajes en distintos formatos: HTML, XML, texto sin formato y JSON.
·Se centra en la escalabilidad y rendimiento a gran escala para sistemas distribuidos hipermedia
·HTTP GET, HTTP POST, HTTP PUT, HTTP DEL
·XML auto descriptivo
·Síncrono
·HTTPS, ·Comunicación punto a punto y segura
- ASOAP Web Services
58Seguridad en Apis
- AAutenticación: La autenticación es el proceso de identificar si las credenciales pasadas juntos con la solicitud son válidas o no, aquí las credenciales se pueden pasar como ID de usuario y contraseña on un token asignado para la sesión de usuario.
Autorización: La autorización es el proceso de identificar si la solicitud recibida puede acceder al punto final o método solicitado. - B"Autenticación básica: Authorization: Basic base64(userid:password) el usuario debe enviar el ID del usuario y la contraseña en el formato userid:password codificado en formato base64. Este método se puede seleccionar sobre el protocolo https.
La autenticación de token del portador (Authorization Bearer) - Framework OAuth2.0
también se conoce como autenticación basada en Token. Cuando el usuario inicia sesión en una aplicación utilizando las credenciales, el servidor de Autorización genera un token criptográfico para identificar al usuario de forma exclusiva. Las aplicaciones pueden usar el token para identificar al usuario después de un inicio de sesión exitoso, es decir, la aplicación debe enviar ese token al acceder a recursos protegidos.
"
- AAutenticación: La autenticación es el proceso de identificar si las credenciales pasadas juntos con la solicitud son válidas o no, aquí las credenciales se pueden pasar como ID de usuario y contraseña on un token asignado para la sesión de usuario.
59Patrón Circuit Breaker:
- A"El patrón Circuit Breaker evita que una aplicación intente de manera reiterada una operación que con probabilidad vaya a fallar, permitiendo que esta continúe con su ejecución sin malgastar recursos mientras el problema no se resuelva. Además este patrón puede detectar cuando se ha resuelto el problema permitiendo de esta manera volver a ejecutar la operación comprometida. Podemos entender este patrón como un proxy entre nuestra aplicación y el servicio remoto que se implementa como si fuera una máquina de estados que imita el comportamiento de un interruptor de un circuito eléctrico.
" - B".@Service
public class ClientGreetingService {
@HystrixCommand(fallbackMethod = ""greetingDefault"")
public Greeting greeting (String name) {
return restTemplate.getForObject(serviceUrl + ""/greeting/{name}"",Greeting.class, name);
}
public Greeting greetingDefault(String name) {
return new Greeting(""Hello World thanks to Circuit Breaker (Hystrix)"");
}
}
"
- A"El patrón Circuit Breaker evita que una aplicación intente de manera reiterada una operación que con probabilidad vaya a fallar, permitiendo que esta continúe con su ejecución sin malgastar recursos mientras el problema no se resuelva. Además este patrón puede detectar cuando se ha resuelto el problema permitiendo de esta manera volver a ejecutar la operación comprometida. Podemos entender este patrón como un proxy entre nuestra aplicación y el servicio remoto que se implementa como si fuera una máquina de estados que imita el comportamiento de un interruptor de un circuito eléctrico.
60Patrón sub/pub
- A"Patrón de publicación-suscripción (Publish–Subscribe)
Este patrón yace en la capacidad de los subscriptores en conocer el estado del sujeto registrándose para ello a un publicador para recibir notificaciones cuando algún evento en este último suceda. Un objeto llame a los métodos de otro objeto directamente, ellos se subscriben a un evento en particular de ese otro objeto, recibiendo los mensajes de notificación cuando dicho evento ocurra.
Una aplicación publish/subscribe es aquella en la que un servidor da una serie de servicios, a los usuarios, para gestionar, almacenar y presentar todo tipo de información, y otros usuarios se suscriben a ella para ser avisados de nuevas actualizaciones o informaciones.
" - B" Kafka
Es un sistema distribuido y horizontalmente escalable.
Su funcionamiento es similar al de cualquier sistema de mensajería. Por un lado tenemos los Productores que envía un mensaje a un nodo de Kafka (broker); y por otro lado dicho mensaje es procesado por otra aplicación que es la consumidora. Estos mensajes
Los mensajes son almacenado en un topic al que el consumidor esta suscrito y puede escuchar esos mensajes.
"
- A"Patrón de publicación-suscripción (Publish–Subscribe)
61Manifiesto reactivo
- A"Caracteristicas
Dirigidas por eventos
Aplicaciones que reaccionan a los eventos son aplicaciones que ofrecen flexibilidad y ayudan a reducir los costes de mantenimiento
Escalables
Una aplicación escalable tiene la capacidad de expandirse de acuerdo con su utilización. Esto se hace añadiendo “elasticidad” a la misma.
Resilientes
Que nuestra aplicación esté inactiva puede ser un problema importante para nuestro negocio. En el momento que el sistema simplemente deja de funcionar, ganamos clientes descontentos y mala reputación.
Responsivas
Responsivo es algo que “responde y reacciona apropiadamente.”" - B"RxJava 2
Esta librería, y su versión 1.x fueron las pioneras en el desarrollo reactivo Java. Se encuentran completamente integradas en frameworks como Spring MVC, Spring Cloud y Netflix OSS.
Project Reactor
Fue concebida con la implicación del equipo responsable de RxJava 2 por lo que comparten gran parte de la base arquitectónica. Su principal ventaja es que al ser parte de Pivotal ha sido la elegida como fundación del futuro Spring 5 WebFlux Framework.
Este API introduce los tipos Flux y Mono como implementaciones de Publisher, los cuales generan series de 0…N y 0…1 elementos respectivamente.
"
- A"Caracteristicas
62RxJava
- A"ReactiveX es una API que facilita el manejo de flujos de datos y eventos, a partir de una combinación de el patrón Observer, el patrón Iterator, y características de la Programación Funcional. ReactiveX (mediante el uso de Observables y operadores) nos ofrece una API flexible para crear y actuar sobre los flujos de datos.
Observable una fuente de datos, con un tratamiento: el cliente necesita q se entrega de una forma
Single
Observable
y Subscriber
Clases principales: Observable y Subscriber.
" - B"Funcionamiento
Un (objeto de la clase) Observable emite 1 o más elementos, y luego se completa (con éxito o con algún error).
Un Observable puede tener varios Subscribers, y cada elemento emitido por el Observable, será enviado al método Subscriber.onNext() para ser ""usado en lo que se requiera"".
Una vez que un Observable ha terminado de emitir elementos, invocará al método Subscriber.onCompleted(). O en caso que haya ocurrido algún error, el Observable invocará el método Subscriber.onError().
"
- A"ReactiveX es una API que facilita el manejo de flujos de datos y eventos, a partir de una combinación de el patrón Observer, el patrón Iterator, y características de la Programación Funcional. ReactiveX (mediante el uso de Observables y operadores) nos ofrece una API flexible para crear y actuar sobre los flujos de datos.
63Reactor
- A"Spring Reactor y manejo de transformaciones
Spring Reactor es el framework de programación reactiva de Spring y poco a poco tendremos que aprender a utilizarlo . Los conceptos fundamentales que el Framework soporta son las clases Flux y Mono de las cuales ya hablé en algún artículo anterior. La programación reactiva esta fuertemente basada en la programación funcional . Vamos a ver un ejemplo sencillo.
" - B"public class Principal2 {
public static void main(String[] args) {
Flux<Integer> flux1 = Flux.just(2, 3, 4, 5, 6, 1, 7);
flux1.filter(e -> e >= 5).map(e -> e + 1).subscribe(System.out::println);
Flux<Integer> flux2 = Flux.just(3, 3, 3, 4, 5, 8, 9);
flux2.filter(e -> e >= 5).map(e -> e + 1).subscribe(System.out::println);
}
}
"
- A"Spring Reactor y manejo de transformaciones
64Spring Initializer
- A"Iniciar Proyectos
En principio para esto ya existen herramientas como el plugin archetype de Maven o su equivalencia en Gradle. Sin embargo en el primer caso la gente de Spring parece que no da soporte ya a esa plantilla, que apunta a versiones muy antiguas. En el caso de Gradle no existe siquiera un init type para Spring Boot.
Initializr desde la web
La forma más sencilla de utilizar Spring Initializr es desde la propia web. Una vez dentro nos recibe una sencilla interfaz en la que podemos introducir algunos valores típicos para configurar un proyecto de maven o gradle.
" - B"Name: Va a parar al campo name de nuestro archivo pom.xml. efecto.
Package Name: Nombre del paquete base de las clases de la aplicación en caso de que sea diferente a nuestro campo Group.
Packaging: Empaquetado de nuestro artefacto: jar o war. Esto afecta a los plugins de construcción que se especifican en el descriptor de la aplicación (pom.xml o build.gradle) y a la estructura de archivos que se crea.
Java Version: Versión de java que vamos a especificar para nuestro artefacto.
Language: En el momento de escribir el tutorial da a escoger entre Java, Groovy y Kotlin.
Dependencies: Lo mismo que en la versión simple
"
- A"Iniciar Proyectos
65Swagger/OpenApi
- A"Documentar un API REST con Swagger y Spring Boot
Podrá observar el clásico servicio CRUD de usuarios, donde tenemos un servicio para consultar todos los usuarios (GET), crear nuevos (POST), actualizarlos (PUT) y finalmente eliminarlos (DELETE).
" - B".@Tag(name = ""message"", description = ""the message API"")
@RequestMapping(""/message"")
public interface MesssageApi {
@Operation(summary = ""Get all messages"", description = ""Returns all messages"", responses = {
@ApiResponse(responseCode = ""200"", description = ""Successful operation"", content = @Content(schema = @Schema(implementation = Message.class))) }
)
@GetMapping(value = """", produces = { ""application/json"" })
ResponseEntity<List<Message>> getAll();
"
- A"Documentar un API REST con Swagger y Spring Boot
66Spring Data
- ASpring Data es uno de los frameworks que se encuentra dentro de la plataforma de Spring. Su objetivo es simplificar al desarrollador la persistencia de datos contra distintos repositorios de información .
- B"
public interface UserRepository extends JpaRepository<User, String>{
public List<User> findByEmail(String email);
public List<User> findByNameAndEmail(String name,String email);
}"
67Spring Security
- A"Contextos front y apirest
el cliente se conecta con inicio de sesion e inicia petición post, al api login, el servidor valida con spring security, con el autorization server del api Oauth2, si falla va a retornar errores en las credencial en el passaword, usuario no autorizado. 401 no autorizado
Si se lleva a cabo, va a enviar un JWT con el secreto código 200 ok. El front guardar el json web token en el local storage, o sesión storage del navegador.
Ya esta almacenado el JWT, navegar a paginas que están protegidas, se puede tener acceso al servidor , nuevamente envia una petición al servidor GEt, put , y en la cabecera enviar http el token, dentro del autorization del header http, el servidor recibe el token, valida si esta correcto, si esta invalido 403 prohibido, si esta todo bien es un json valido, obtiene el los datos del clliente, del usuario los claim, los username y los roles
" - B"El jwt esta compuesto por 3 partes
Rojo: header contiene inoformacion del algoritmo y tipo JWT
Morado: Informacion del payload sub=nombre de usuario, mail, nombre, apellido / fecha creación
Azul: permisos y roles
La parte de seguridad: en el backend, va a ver un código secreto, se genera y luego se valida, a través de la firma, una aplicación cliente jamás va a tener acceso a la verificación no se puede cambiar.
La firma: Header + Payload + Clave secreta va a hacer la firma, el jwt de forma segura
"
- A"Contextos front y apirest
68Spring Boot
- ASe utiliza para crear aplicaciones web spring independientes. Spring Boot maneja las configuraciones automáticamente con su función de configuración automática. Dado que el tiempo de desarrollo es menor, la productividad aumenta.
- Bno
69Manejo de trazas con Logback
- AUso de Logging por defecto con Logback. Spring Boot usa Commons Logging y tiene configurado Logback como el logging por defecto que usa Spring
- Bno
70Spring Cloud
- ASpring Cloud es un proyecto paraguas que consta de proyectos independientes con, en principio, diferentes cadencias de lanzamiento. Para administrar la cartera, se publica una lista de materiales (BOM) con un conjunto seleccionado de dependencias del proyecto individual
- BSpring Cloud es una nueva pieza de Spring que nos ayuda a desplegar nuestro artefacto (WAR o JAR) a las plataformas en la nube
71Docker
- ADocker empaqueta software en “contenedores” que incluyen en ellos todo lo necesario para que dicho software se ejecute, incluidas librerías. Con Docker se puede implementar y ajustar la escala de aplicaciones de una forma rápida en cualquier entorno con la garantía de que el código se ejecutará.
- B"Comandos:
Correr un contenedor: docker run hello-world
Descargar una imagen: docker pull hello-world
Ver imágenes: docker images
Inspeccionar una imagen: docker inspect hello-world
Borrar una imagen: docker rmi hello-world:latest
Ver los procesos de Docker: docker ps -a
Borrar un contenedor: docker rm nombre_o_id_del_contenedor
Ejecutar un comando en un contenedor corriendo:
docker exec -it nombre_del_contenedor bash
Exponer un contenedor al exterior: docker run -d --name servidorNginx -p 8080:80 nginx"
72Kubernetes
- A"Kubernetes es una plataforma portable y extensible de código abierto para administrar cargas de trabajo y servicios. Kubernetes facilita la automatización y la configuración declarativa. Tiene un ecosistema grande y en rápido crecimiento. El soporte, las herramientas y los servicios para Kubernetes están ampliamente disponibles.
Kubernetes ofrece un entorno de administración centrado en contenedores. Kubernetes orquesta la infraestructura de cómputo, redes y almacenamiento para que las cargas de trabajo de los usuarios no tengan que hacerlo. Esto ofrece la simplicidad de las Plataformas como Servicio (PaaS) con la flexibilidad de la Infraestructura como Servicio (IaaS) y permite la portabilidad entre proveedores de infraestructura" - B"Describir un Objeto de Kubernetes: Yaml
apiVersion: apps/v1 # Usa apps/v1beta2 para versiones anteriores a 1.9.0
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # indica al controlador que ejecute 2 pods
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80"
- A"Kubernetes es una plataforma portable y extensible de código abierto para administrar cargas de trabajo y servicios. Kubernetes facilita la automatización y la configuración declarativa. Tiene un ecosistema grande y en rápido crecimiento. El soporte, las herramientas y los servicios para Kubernetes están ampliamente disponibles.
73Uso de tópicos con Kafka/RabbitMQ
- A"Kafka:
Apache Kafka es un sistema de intermediación de mensajes. Es un sistema de mensajería basado en el modelo publicador/subscriptor en el que varios productores y subscriptores pueden leer y escribir
Componentes:
Topics
Particiones
Replicación
Productores
Consumidores
Zookeeper
" - B"Topicos:
Los Topics en Kafka son las categorías en las que se clasifican los mensajes. Así, podemos entender cada topic como si fuera un flujo de datos , es una entidad .
Productores
Se denominan productores a los clientes conectados a Kafka encargados de publicar mensajes en un broker. Son los responsables de serializar, particionar, comprimir y repartir la carga entre los brokers en función de las particiones.
Consumidores:
Los consumidores de Kafka son los clientes conectados suscritos a los topics que consumen los mensajes. Cada consumidor tiene asociado un grupo de consumidores. Kafka garantiza que cada mensaje sólo es leído por un consumidor de cada grupo.
"
- A"Kafka:
74Uso de Cache Redis/Hazelcast
- ARedis es una excelente opción para implementar una caché en memoria de alta disponibilidad a fin de reducir la latencia de acceso a los datos, incrementar la capacidad de procesamiento y aliviar la carga de la aplicación y de la base de datos relacional o NoSQL.
- B"Usos:
Chat, mensajería y colas
Almacén de sesiones
Análisis en tiempo real"
75Configurando y desplegando en cloud (PaaS)
- A"Ejemplo: AWS Elastic Beanstalk:
Si usa Docker con Elastic Beanstalk, tendrá una infraestructura que administrará todos los detalles de aprovisionamiento de la capacidad, el balanceo de carga, el escalado y la supervisión del estado de las aplicaciones. Puede administrar fácilmente su aplicación web en un entorno que admita el conjunto de servicios integrados con Elastic Beanstalk. Estos entornos incluyen, entre otros, VPC, RDS e IAM. " - B"Amazon ECS
es un servicio de orquestación de contenedores altamente escalable y de alto rendimiento para ejecutar contenedores Docker en la nube de AWS."
- A"Ejemplo: AWS Elastic Beanstalk:
76"Conectando nuestros microservicios
(gitflow, Groovy, GitHub Actions)"- A"Ramas principales
Todo proyecto, por defecto, debería tener al menos dos ramas infinitas para su desarrollo.
master
develop
feature
release
hotfix
Ramas feature
Estas ramas tienen que surgir de la rama develop. Cada una de estas ramas almacenan código de desarrollo con nuevas características." - B"Git flow:
git flow init
Con ello nos iniciará un proceso guiado con preguntas relacionadas con las convenciones de nombres para las ramas. debemos dejar los valores por defecto, sin introducir nada."
- A"Ramas principales
77Configurando y ejecutando Serverless (FaaS)
- A"Serverless:
En un entorno informático tradicional la aplicación del servidor central gestiona todos los flujos, controles y la seguridad.
En esta nueva versión sin servidor, sin embargo, ninguna autoridad central equilibra estas ramas. En lugar de la orquestación, los entornos sin servidor enfatizan la coreografía. Los componentes individuales tienen una función más consciente de la arquitectura, no muy diferente a la de los microservicios, que pueden hacer que la aplicación sea más flexible y susceptible de cambiar, un beneficio clave para muchas de las empresas actuales." - B"FaaS
es una forma de implementar la informática sin servidor: los desarrolladores escriben la lógica empresarial que luego se ejecuta en los contenedores de Linux totalmente gestionados por una plataforma."
- A"Serverless:
78Uso de herramientas de tracing y monitoring
- AVaya a la página del servicio Azure Spring Apps en Azure Portal. · En Monitoring (Supervisión), seleccione Distributed Tracing (Seguimiento
- BSpring-boot-actuator **y S**pring-boot-admin
ATENEA WORK Y LIVE
79Uso de lombok
- A"Lombok, una solución que nos permite evitar tener que escribir una y otra vez ese código repetitivo, que tantas veces tenemos que implementar en nuestras clases. Getters y Setters se reducen a una única línea de código.
Elimina código repetitivo y nos facilita generar código
Inyecta código sobre el código que hemos desarrollado
@Data. Getter, setter, toString, constructor
" - B"Lombok también nos permite implementar el patrón Builder de forma efectiva en nuestro código, únicamente debemos anotar la clase con @Builder, y automáticamente nos creará el método público build y el objeto estático Builder con todos sus atributos y métodos.
Person.builder()
.name(""Adam Savage"")
.city(""San Francisco"")
.job(""Mythbusters"")
.job(""Unchained Reaction"")
.build();"
- A"Lombok, una solución que nos permite evitar tener que escribir una y otra vez ese código repetitivo, que tantas veces tenemos que implementar en nuestras clases. Getters y Setters se reducen a una única línea de código.
80Librerías de pruebas unitarias (JUnit 5, Mockito, MockWebServer)
- A"jUnit
Anotaciones:
@Test: contiene es un test: expected y timeout.
@Before: antes de cada test.
@After: ejecuta el método después de cada test.
@Ignore: evita la ejecución del tests.
Las condiciones de aceptación del test se implementa con los asserts:
assertTrue/assertFalse (condición a testear): Comprueba que la condición es cierta o falsa.
assertEquals/assertNotEquals (valor esperado, valor obtenido). Es importante el orden de los valores esperado y obtenido.
assertNull/assertNotNull (object): Comprueba que el objeto obtenido es nulo o no.
assertSame/assertNotSame(object1, object2): Comprueba si dos objetos son iguales o no.
fail(): Fuerza que el test termine con fallo. Se puede indicar un mensaje.
" - B"Mockito
Para poder crear un buen conjunto de pruebas unitarias, es necasario que nos centremos exclusivamente en la clase a testear, simulando el funcionamiento de las capas inferiores
Ejemplo: Si necesitamos que varios mock necesiten llevar un orden específico en las llamadas lo podemos realizar de la siguiente manera:
List firstMock = mock(List.class);
List secondMock = mock(List.class);
//usando mocks
firstMock.add(""was called first"");
secondMock.add(""was called second"");
//creamos un objeto inOrder, pasando los mocks que necesitan verificarse en orden
InOrder inOrder = inOrder(firstMock, secondMock);
//verficamos que firstMock ha sido invocado antes que secondMock
inOrder.verify(firstMock).add(""was called first"");
inOrder.verify(secondMock).add(""was called second"");"
- A"jUnit
81"Manejo de pruebas unitarias reactivas:
Webtestclient, StepVerifier"- Ahttps://docs.spring.io/spring-security/site/docs/5.2.11.RELEASE/reference/html/test-webflux.html
- B@RunWith(SpringRunner.class)
@ContextConfiguration(classes = HelloWebfluxMethodApplication.class)
public class HelloWorldMessageServiceTests {
@Autowired
HelloWorldMessageService messages;
@Test
public void messagesWhenNotAuthenticatedThenDenied() {
StepVerifier.create(this.messages.findMessage())
.expectError(AccessDeniedException.class)
.verify();
}
@Test
@WithMockUser
public void messagesWhenUserThenDenied() {
StepVerifier.create(this.messages.findMessage())
.expectError(AccessDeniedException.class)
.verify();
}
@Test
@WithMockUser(roles = "ADMIN")
public void messagesWhenAdminThenOk() {
StepVerifier.create(this.messages.findMessage())
.expectNext("Hello World!")
.verifyComplete();
}
} - C@RunWith(SpringRunner.class)
@ContextConfiguration(classes = HelloWebfluxMethodApplication.class)
public class HelloWebfluxMethodApplicationTests {
@Autowired
ApplicationContext context;
WebTestClient rest;
@Before
public void setup() {
this.rest = WebTestClient
.bindToApplicationContext(this.context)
// add Spring Security test Support
.apply(springSecurity())
.configureClient()
.filter(basicAuthentication())
.build();
}
// ...
}
82"Implementación de métricas de
calidad con SonarQube"- Ann
- Bnnx
83Cobertura y análisis de pruebas unitarias (JaCoCo/Checkstyle/Spotbugs)
- A"Jacoco
JaCoCo es un plugin de maven que se utiliza para realizar reportes con base en la métrica de code coverage.
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.2</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>" - B"Test:
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ArithmeticOperationsTest {
@Test
public void testAdd()
{
ArithmeticOperations operations = new ArithmeticOperations();
Integer actual = operations.add(2, 6);
Integer expected = 8;
assertEquals(expected, actual);
}
"
- A"Jacoco
Information
- Description
- Quiz on JAVERITO, created by Rainier Carbajal on 15/09/2022.
- Author
- Rainier Carbajal
- Language
- Español
- Views
- 3
- Tags
- Rating
- No ratings yet Rate this quiz