Está en la página 1de 6

Evaluación de Desarrollador Java

Nombre: Richard Adrián Suárez Jácome

Fecha: 22/03/2023

Lea detenidamente las preguntas, la prueba tiene que ser completada en un tiempo máximo
de 10 minutos.

a) Dado el siguiente fragmento de código:

¿Qué fragmento de código, tiene que insertarse en Línea n1, para que imprima JavaSE?

b) BiFunction<String, String, String> sf = (s1, n1) -> s1.concat(n1);


c) BiFunction<String, String> sf = (s1, n1) -> s1.concat(n1);
d) Function<String, String> sf = (s1, n1) -> s1.concat(n1);
e) Function<String, String, String> sf = (s1, n1) -> s1.concat(n1);

1. Dado el siguiente fragmento de código:

¿Cuál es el resultado?

a) Fred Jim Sheila


f) Fred Jim
g) Fred
h) Compilation fails.
2. Dado el siguiente código de fragmento:

¿Cuál es el resultado?

i) try r2 r1 catch java.io.IOException


j) try r2 r1 catch
k) try r1 r2 catch
l) La compilación falla
3. Dado el siguiente fragmento de código:

Asumiendo que la sentencia SQL se ejecuta apropiadamente, ¿cuál es el resultado?

m) true
n) false
o) 1
p) 0

4. Dado el siguiente fragmento de código:

¿Qué fragmento de código tiene que ser insertado en Línea n1 para que el código
imprima 2 4?

q) nums.peek(n -> n%2 == 0) .forEach( s -> System.out.print(" "+s));


r) nums.filter(n -> n%2 == 0) .forEach( s -> System.out.print(" "+s));
s) nums.map(n -> n%2 == 0) .forEach( s -> System.out.print(" "+s));
t) nums.stream() .filter(n -> n%2 == 0) .forEach( s -> System.out.print(" "+s));
Evaluación de Desarrollador de Microservicios - Teórico

Nombre: Richard Adrián Suárez Jácome

Fecha: 22/03/2023

Lea detenidamente las preguntas, la prueba tiene que ser completada en un tiempo máximo
de 10 minutos.

1. ¿Es una buena idea compartir una base de datos común a través de múltiples
microservicios? Explique las opciones que existen y su criterio acerca de las mismas.
La decisión de compartir o no una base de datos común entre múltiples microservicios
depende del caso de uso específico y de las necesidades del proyecto en cuestión.En
cuanto a las opciones que existen, se pueden considerar las siguientes:

1. Base de datos compartida: Todos los microservicios acceden a la misma base de datos
compartida. Esta opción puede tener ventajas en términos de simplicidad y
consistencia de datos, ya que todos los servicios trabajan con los mismos datos.
2. Base de datos por microservicio: Cada microservicio tiene su propia base de datos
independiente. Esta opción puede tener ventajas en términos de escalabilidad y
flexibilidad, ya que cada microservicio puede manejar sus propios datos y la carga de
trabajo sin afectar a otros servicios.
3. Combinación de bases de datos: Se pueden utilizar diferentes tipos de bases de datos
según las necesidades de cada microservicio. Por ejemplo, se pueden utilizar bases de
datos SQL para microservicios que manejan transacciones y bases de datos NoSQL
para microservicios que requieren escalabilidad y flexibilidad.

En cuanto a mi criterio personal, creo que la opción más adecuada dependerá del caso
de uso específico y de los requisitos y objetivos del sistema en cuestión. En general, la
opción de base de datos por microservicio puede ser una buena opción en términos de
escalabilidad y flexibilidad, pero puede requerir más esfuerzo en la implementación y
gestión de datos. La opción de base de datos compartida puede ser más simple, pero
puede tener limitaciones en términos de escalabilidad y rendimiento. En cualquier
caso, es importante tener en cuenta los pros y contras de cada opción y elegir la que
mejor se adapte a las necesidades del proyecto.

2. ¿En qué consiste el patrón “circuit breaker”? Explique escenarios de uso y los estados
manejados en este patrón.
El patrón de diseño "Circuit Breaker" es una técnica de control de fallas utilizada en
sistemas distribuidos para evitar la propagación de fallas entre los componentes. El
objetivo principal de este patrón es evitar que una falla en un componente provoque la
falla en otros componentes del sistema, lo que puede llevar a una falla en cascada.
Un escenario común de uso es el acceso a bases de datos o servicios web. Si una base de
datos o servicio web no responde correctamente, el circuit breaker interrumpe la
comunicación con el componente y devuelve una respuesta de error inmediatamente. Esto
evita que se acumulen solicitudes fallidas en la cola, lo que puede llevar a una falla en
cascada y provocar un tiempo de inactividad prolongado.
Los tres estados principales del circuit breaker son cerrado, abierto y semiabierto, y se
utilizan para controlar el flujo de solicitudes entrantes en función del estado del
componente de destino.
3. ¿Defina en sus propias palabras que es gRPC?
gRPC es un framework de comunicación remota de alta velocidad, desarrollado por
Google, que permite la comunicación entre diferentes sistemas distribuidos.
4. ¿Qué es un arquetipo?
Un arquetipo es una plantilla predefinida que puede ser utilizada para crear proyectos en
un lenguaje de programación o tecnología específica.
5. ¿Cuáles son los verbos que puedo utilizar para exponer endpoint en mis microservicios
de tipo RestFull?
Los principales son GET,POST,PUT,DELETE

Evaluación de Desarrollador Java - Algoritmos

Nombre: Richard Adrián Suárez Jácome

Fecha: 22/03/2023

Lea detenidamente la pregunta, indique el código de respuesta usando Java y explique la


solución. La prueba tiene que ser completada en un tiempo máximo de 40 minutos.

1. Dado el arreglo de enteros en desorden nums, encuentre el menor número entero


positivo que hace falta.

Ejemplo 1:

Entrada: nums = [3,1,2,0]

Salida: 4

Ejemplo 2:

Entrada: nums = [5,2,-2,1]

Salida: 3

Ejemplo 3:

Entrada: nums = [6,7,8,10,11]

Salida: 1

Restricciones:

 El arreglo puede tener hasta 300 items


 Implemente un algoritmo que se ejecute en tiempo O(n)

Respuesta – Código
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Function;

public class App {


public static void main(String[]args) {
int[] nums = {3,1,2,0};
System.out.println(busquedaPositivoFaltante(nums));

int[] nums2 = {5,2,-2,1};


System.out.println(busquedaPositivoFaltante(nums2));

int[] nums3 = {6,7,8,10,11};


System.out.println(busquedaPositivoFaltante(nums3));
}

public static int busquedaPositivoFaltante(int[] nums) {


int n = nums.length;
int[] count = new int[n + 1];
// contar el número de ocurrencias de cada entero positivo
for (int i = 0; i < n; i++) {
if (1 <= nums[i] && nums[i] <= n) {
count[nums[i]]++;
}
}
// buscar el primer entero positivo que no aparece en el arreglo
for (int i = 1; i <= n; i++) {
if (count[i] == 0) {
return i;
}
}

// si todos los enteros de 1 a n aparecen en el arreglo, el


siguiente entero positivo es n+1
return n + 1;
}}

Respuesta – Explicación

Este algoritmo(Ordenación por conteo) también tiene un tiempo de ejecución de O(n), ya que
se recorre el arreglo nums una vez para contar las ocurrencias, y luego se recorre el arreglo
count para buscar el primer entero positivo que no aparece.

También podría gustarte