• Barajar
    Activar
    Desactivar
  • Alphabetizar
    Activar
    Desactivar
  • Frente Primero
    Activar
    Desactivar
  • Ambos lados
    Activar
    Desactivar
  • Leer
    Activar
    Desactivar
Leyendo...
Frente

Cómo estudiar sus tarjetas

Teclas de Derecha/Izquierda: Navegar entre tarjetas.tecla derechatecla izquierda

Teclas Arriba/Abajo: Colvea la carta entre frente y dorso.tecla abajotecla arriba

Tecla H: Muestra pista (3er lado).tecla h

Tecla N: Lea el texto en voz.tecla n

image

Boton play

image

Boton play

image

Progreso

1/91

Click para voltear

91 Cartas en este set

  • Frente
  • Atrás
Concurrencia

Que es un thread?
Son un conjunto de instrucciones que se ejecutan dentro de un proceso
Concurrencia

¿Qué diferencias hay entre extender de Thread e implementar Runnable y cuál
considera que es la mejor opción?
- Runnable es una interfaz que pide implementar el metodo run(). Thread implementa Runnable por el cual pide sobreescribir el metodo. Cuando se ejecuta el metodo start() del thread se ejecuta el metodo run(). Se puede implementar solamente Runnable sin extender de thread, pero cuando se necesite ejecutar el paralelismo, se necesita crear un thread que reciba el Runnable creado.
- Es mejor solamente implementar Runnable y crear un thread al momento de necesitar paralelismo debido a que si extendes de Thread no podes extender de ninguna otra clase
Concurrencia

¿Qué es un ThreadPoolExecutor? ¿Cómo se instancia? ¿Cuáles son los parámetros
básicos de la configuración de un ThreadPoolExecutor? Cuando se termina la app,
¿qué habría que tener en cuenta respecto al threadpool?
Es una implementacion de ExecutorService, nos -
- Brinda un conjunto de threads preinicializados que se usan para ejecutar tareas. Como es costoso crear un thread cada vez que la app lo necesita es recomentable usar un pool, para que cuando se termina una tarea el thread vuela al pool y quede disponible para otra
- Se instancia con los parametros basicos o con factorys method de la clase Excecutor que ya preconfigura el ThreadPool
- Los parametros basicos son la cantidad de pool que siempre estaran activos a pesar de que no esten en uso. La cantidad maxima de threads, es decir cuando threads se pueden agregar en caso de que los minimos esten ocupados, El tiempo de vida de los threads que no son los minimos una vez libres y una cola que agrupara las tareas a realizar
- Las los metodos que brindan un threadpool preconfigurado son newCachedThreadPool(), newFixedThreadPool(n), newSingleThreadPool()
Concurrencia

¿Qué es un ThreadLocal?
Es una clase que nos permite guardar u obtener informacion del thread actual y solo en ese thread, es decir que otros threads no pisan la variable
Concurrencia

Que es un CompletableFuture?
- Es una mejora introducida en Java 8 de los Future, surgio para contemplar el manejo de excepciones y la combinacion de Futures
- Se puede lanzar un proceso sin esperar el resultado con runAsycn() o si queremos esperar con supplyAsycn()
- Usa un Executor por default, pero podemos pasarle uno al ejecutar los metodos
Concurrencia

Que es un Future?
- Es una interfaz que representa el resultado futuro luego de ejecutar un proceso asincrono
- Se obtiene luego de ejecutar el metodo submit() de un Executor
- Es una interfaz que usa Generics, debido a que el resultado puede ser de cualquier tipo
Concurrencia

¿Qué es un lock? ¿Qué es un deadlock? ¿Qué es un livelock? ¿Qué es starvation?
- Un lock es cuando un proceso toma o bloquea un recurso
- Un deadLock se da un un problema circular. Donde un proceso A esta bloqueando un recurso que necesita un Proceso B, y viceversa
- Un livelock sucede cuando dos procesos de bloquean entre si pero realizando una tarea repetitivamente. Un ejemplo es un saludo cortes, donde ambos hilos esperan que el otro pase primero por un pasillo
- Starvation o inanicion sucede cuando un proceso nunca puede obtener los recursos que necesita debido a que se le da prioridad a otros procesos bajo un determinado criterio
Concurrencia

Diferencia entre Optimistic lock y Pessimistic lock
- Optimistic lock asume que no habra problemas de concurrencia y permite que todos los hilos modifiquen los recursos compartidos. Cada hilo antes de realizar la modificacion se fija si la version actual es la misma que cuando leyo
- Pessimistic lock si es excluyente bloquea el recursos para lectura y escritura, si es compartido bloquea para escritura y permite a los demas hilos leer
Concurrencia

¿Qué pros y que contras tiene el uso de multithreading?
- Los pros son que mejoras el rendimiento paralelizando tareas y velocidad de respuesta, explotas mejor los recursos de hardware
- Las contras son que podrias tener problemas de concurrencia, deadlock o debes sincronizar hilos. La depuracion es mas compleja
Concurrencia

Diferencia entre Runnable y Callable
- Runnable es una interfaz que se usa para ejecutar codigo en un thread y no esperar una respuesta
- Callable es una interfaz que se usa para ejecutar codigo en un thread pero si esperando una respuesta que se envuelve en un Future
Concurrencia

Nombrar las colecciones threadsafe que conozcas
Por default las colecciones no son thread-safe, pero podemos convertirlas usando los metodos de la clase Colecction, como synchronizedList, synchronizedSet, sinchronizedMap
Concurrencia

¿Qué mecanismos de control de la concurrencia conocés? ¿Dónde usarías uno u
otro?
- Synchronized: Palabra clave que permite sincroniza un bloques de codigo
- ReentrantLock: Es una clase que da mayor flexibilidad que synchronized para lockeos.
- ReadWriteLock: Permite separar la manera de lockeos en lectura y escritura. Por ejemplo no lockear la lectura pero si la escritura
- Semaphore: Son semaforos, permiten sincronizar thread pero a diferencia de Reentrantlock, especificar la cantidad de Thread a sincronizar
- AtomicInteger y AtomicLong: Son thread-safe
Concurrencia

¿Que es una condición de carrera?
- Sucede cuando mas de un hilo o proceso compite por obtener un recurso compartido
- Se pueden generar situaciones de inconsistencia de datos en lectura/escritura por actuar al mismo sin sincronizacion
Concurrencia

Diferencia entre asincronismo, concurrencia, paralelismo y distribucion. ¿Qué estrategia de
paralelismo conoce?
- El asincronismo es ejecutar una tarea independientemente sin afectar el hilo principal
- En la concurrencia, se puede manejar varios procesos y se ejecuta cada uno en un pequeño intervalo de tiempo dando la sensación de paralelismo
- En el paralelismo, efectivamente se ejecutan varios procesos simultáneamente, sucede cuando hay varios núcleos
- La distribucion se produce cuando las tareas se realizan en procesadores separados geograficamente o diferente hardware
- Las estrategias que conozco son separar las tareas en hilos o usar un pool de thread
Concurrencia

Que modelos de concurrencia conoce (shared memory, actor model, csp)
- Por memoria compartida: Los threads usan variables compartidas que van modificando, pero si no se sincronizan pueden causar condiciones de carrera
- Por actores: Los actores poseen un estado interno y se comunican con otros por medios de mensajes. Ejemplo Akka
- Por canales: Los threads se envian mensajes por medios de canales que se encargan de la sincronizacion. Ej Gorutinas o Corrutinas
Concurrencia

Que es un context switch y como afecta nuestra aplicación
Es un cambio de contexto y sucede cuando el procesador deja de ejecutar un proceso y comienza a ejecutar otro que lo trae de la memoria ram o que estaba bloqueado. Y a nivel procesador tiene el costo de guardar el estado el proceso antes de cambiar a otro
Concurrencia

¿Conoce el concepto de CPU / IO Bound? Si tengo una app CPU Bound, ¿cómo
conviene configurar el threadpool? Y si es IO Bound?
- CPU Bound es cuando el sistema realiza muchas mas operaciones con el CPU que de entrada/salida
- IO Bound es cuando el sistema realiza muchas mas operaciones de entrada/salida que de CPU, como ir a disco, comunicarse con bases de datos o solicitudes de red
- En el caso de IO bound se recomienda agregar mas threads al pool que si es CPU bound, debido a que las operaciones de entrada/salida se bloquean a la espera del resultado
Concurrencia

Dado un productor y un consumidor, si el productor produce inesperadamente a mayor ritmo que el consumidor, ¿qué problema podría surgir? ¿Cómo puedo evitarlo?
- Podria causar un problema de memoria en el consumidor
- Se puede buscar una estrategia para limitar la cantidad de producciones del productor, o velocidad con la que lo hace
- Otra estrategia usar algun tipo de buffer o cola de donde el consumidor pueda ir consumiendo a medida que puede los mensajes
Concurrencia

¿Conoce el concepto de circuit breaker?
- Es un patron de diseño que permite dejar dejar enviar mensajes o consumir un servicio que esta con fallas
- Se implementa una estrategia de monitorización de la salud del servicio, si se detectan muchos errores se deja de interactuar o se redirige a un camino alternativo
Concurrencia

¿Que es un Stream? ¿Qué ventaja tiene y cuándo lo usaría? ¿Si lo usó, que sería
un Source, un Flow y un Sink? ¿Que sería un graph?
- Es una secuencia de elementos que podemos procesar. En java tenemos el metodo .streams() que aplican a las colecciones
- Source: es la fuentes de datos, como puede ser un lista
- Flow: Son operaciones intermedias como filter, map
- Sink: Son operaciones finales como un reduce para sumar los elementos de una lista de enteros
Concurrencia

¿Conoce el ForkJoinPool? ¿Qué ventaja tiene frente a otros Pools? ¿Cuándo lo
utilizaría?
- Es un pool que trabaja con la clase ForkJoinTask que nos permite dividir tareas en sub-tareas paralelizables si estas son independientes y funcionan muy bien para la recursividad
- Lo usaria en casos donde haya muchas tareas a paralelizar, ya que para simplemente 2 o 3 casos no tiene sentido
- Como ejemplo tenemos el algoritmo mergeSort que divide un array en subarray y hace llamadas reursivas, tiene sentido para una lista de 50 elementos o mas
- Tambien es usada cuando se usa el metodo ParallelStream
Memoria

¿Cómo se divide la memoria de la JVM?
La memoria de la JVM se divide en varias áreas principales: heap, stack, method area
- La heap: Es donde se almacenan los objetos, es compartido por todos los hilos y administrado por el GC
- El stack: Cada hilo tiene un stack donde guarda referencia a variables, resultados parciales, datos locales. Cada vez que se llama a un metodo se crea un nuevo "frame" dentro de la pila
- Method Area: Tiene las estructuras de datos que representas las clases, metodos, atributos estaticos y no estaticos
Memoria

Espacios del heap
- Young Generation (Generación Joven):
- Es la parte del heap donde se crean los objetos recientemente. Esta generación se divide a su vez en tres áreas: el área Eden (Edén) y dos áreas Survivor (S0 y S1).
- Cuando se crea un nuevo objeto, se coloca en el área Eden. Después de un ciclo de recolección de basura, los objetos que han sobrevivido se mueven a una de las áreas Survivor
- Old Generation (Generación Mayor):
- Los objetos que persisten después de muchas recolecciones de basura en la generación joven se mueven a la generación mayor.
- La recolección de basura en esta generación es menos frecuente.
Memoria

¿Conoce que significa committed memory y por qué lo necesita la jvm?
Es la memoria comprometida o reservada, La jvm la necesita porque es el espacio donde maneja los objetos, datos e hilos del sistema en ejecucion
Memoria

¿Qué es el garbage collector? ¿Cómo funciona en cada espacio de memoria?
- Es parte fundamental de la jvm y Se encarga de liberar la memoria ocupada por objetos que ya no se usan
- Mueve del espacio de objetos nuevos al espacio de objetos viejos
- En el espacio de objetos viejos, elimina los que ya no se usan
Memoria

Tipos de GC
- Serial GC = Trabaja con un solo thread
- Parallel GC = Trabaja con multiples threads
- G1 = Tambien trabaja con multiples threads pero esta preparado para maquinas que tienen mucha memoria
- Z GC = Introducido en java 11 y permite tener baja latencia
Memoria

¿Qué herramienta usás para monitorear el uso de memoria de la JVM?
Java VisualVM u otras herramientas como NR, Grafana, AWS
Memoria

¿Qué es un memory leak? ¿Cómo lo detectás?
- Es cuando la jvm no esta liberando la memoria correctamente, por eso se dice que hay una fuga de memoria. Esto puede llegar a quedarse sin memoria
- Con herramientas de monitorizacion
Memoria

¿Qué es una pausa y cómo afecta nuestra app cuando ocurre?
- Se refiere a la suspension de la ejecucion de la aplicacion
- Puede ser negativo si es por un tiempo prolongado
- Sucede por ejemplo cuando se bloquean hilos, o hay operaciones de entrada salida, o cuando el garbage collector libera memoria
Memoria

¿Con qué parámetros se configura la JVM?
Los mas comunes son para asignar un rango de memoria al heap (Xmx y Xms), al permgen/metaspace o seleccionar el tipo de garbage collector
Memoria

Algoritmos de GC, ¿cuándo usaría uno u otro (throughput o latencia)?
Hay muchos algoritmos, estos fueron variando a lo largo del tiempo.
Algunos estan orientados al throughput y otros a la latencia
- Los de throughput intentan maximizar el redimientos porque estan orientados a mucho procesamiento. Por ejemplo una app que se use para procesamiento batch
- Los de latencia buscan minimizar pausar para tener una rapida respuesta, como podria ser una app que maneje datos en tiempo real
Memoria

Off heap, conoce el término y para que lo usaría?
Se usa para manejar datos u objetos fuera del heap de la JVM. Se usa en casos donde los datos son muy grande
Comunicacion entre apps

¿Qué protocolos de comunicación conoce? (TCP / UDP, etc), características de cada
uno, ejemplos
TCP: Es un protocolo de comunicacion que garantiza el orden y primero establece una conexion antes de enviar los mensajes, realiza reintentos si no recibe los ack
UDP: En cambio no garantiza orden, no establece conexion antes de enviar mensajes, no realiza reintentos
HTTP: Esta basado en TCP, es una capa mas alta en el modelo OSI
- Ademas hay otro tipo de protocolos, las bases de datos manejan sus protocolos, los message brokers, etc
Comunicacion entre apps

¿Qué es un socket? ¿Conoces algún problema relacionado con sockets?
- Es una interfaz de programacion que nos permite enviar mensajes entre un cliente y servidor. Utiliza protocolos bidireccionales como TCP
- BindException: Es una exepcion que se genera cuando no se puede establecer la conexion a una direccion y puerto
- SocketTimeoutException: Sucede cuando el socket no recibe datos en un tiempo especificado
Monitoreo

¿Qué herramientas usas para monitorear tu app/server en producción?
(Herramientas)
NR
Grafana
DataDog
Aws CloudWatch
Monitoreo

¿Qué métricas miramos de una app?
- Throughput: la cantidad de solicitudes o transacciones que una aplicación puede manejar por unidad de tiempo.
- Latencia: el tiempo que tarda una solicitud en ser procesada desde el inicio hasta la finalización.
- Errores: el número de errores o excepciones que ocurren en la aplicación.
Monitoreo

¿Qué métricas miramos de un host?
- Load: la carga del sistema, que indica la cantidad de trabajo que se está realizando en el host.
- Memoria (mem): la cantidad de memoria utilizada por el host.
- CPU: el uso de la CPU por parte del host.
Monitoreo

¿Sirve usar promedios en latencia? ¿Sirve usar promedios en Throughput?
- En ambos casos tenemos la informacion del promedio
- Pero es importante tener en cuenta que en el caso de la latencia nos puede interesar mas analizar los picos de latencia para saber los casos donde tardamos mucho
- En el caso de throughput nos puede interesar mas saber el promedio de cantidad de request. Pero obvio podemos tambien querer analizar si hay picos
Monitoreo

¿Si tuviera un problema de tiempos dentro de su aplicación, que harías para
encontrar el problema? ¿Conoce alguna herramienta de profiling?
- Analizaria la trazabilidad de las request, para detectar en que momento hay mayor latencia, para ver si es por una api que consumo, o si son llamadas a la DB. Tambien veria como esta reaccionando la JVM
- NewRelic, Java VisualVM, CloudWatch, Grafana
Monitoreo

Si tuvieras un sistema compuesto por muchas aplicaciones, y cada una tiene su
propio log, como harías para ver que pasó con un request a medida que fue
pasando por los distintos sistemas? ¿Se te ocurre alguna forma?
- Implementaria alguna estrategia de traza distribuida. La idea es tener como un ID de trasaccion desde el primer momento de contacto con el usuario que viaje por todas las aplicaciones involucradas como el OW-ID de Despegar
Monitoreo

¿Que es la run queue? ¿Cómo haces para verla en un host? (vmstat)
- La run queue es una métrica que indica la cantidad de procesos en espera de ejecución en un sistema operativo.
- Se puede utilizar el comando vmstat en sistemas Unix/Linux para ver la run queue y obtener información sobre la carga del sistema.
Monitoreo

Uso de netstat y lsof
- netstat: Se utiliza para mostrar información sobre los procesos del sistema opertativo sean tcp, udp o ip
- lsof (list open files): Muestra los archivos abiertos por los procesos en el sistema
Docker

¿Qué es un container? ¿qué ventajas/desventajas tiene?
- Es una virtualizacion de un software junto con sus dependencias
- Es un entorno aislado y portable
- Como desventaja podriamos decir el peso que algunos contenedores pueden llegar a ocupar y que puede afectar el rendimiento de SO
Docker

Para qué sirve un Dockerfile ¿Qué instrucciones puede contener?
- Es un archivo de texto que permite construir imagenes, que luego se pueden ejecutar para correr un container
- Los comandos mas comunes son from, add, copy, arg, env, run, entrypoint, cmd, expose, volume
Docker

Diferencia entre run y entrypoint
- Run permite ejecutar comandos mientras se crea la imagen, por ejemplo descargar alguna dependencia, actualizar paquetes
- Entrypoint ejecuta comandos cuando se inicia el container, por ejemplo ejecutar un .jar
Docker

Diferencia entre EntryPoint y CMD
CMD y Entrypoint ejecutan comandos al iniciar el contenedor, pero los de CMD se pueden modificar al ejecutar docker run, en cambio Entrypoint no
Docker

Diferencia entre ARG y ENV
ARG se utiliza en tiempo de compilacion, es decir se puede enviar argumentos al construir la imagen con docker build.
ENV se utiliza en tiempo de ejecucion es decir cuando utilizamos dokcer run
Docker

Por qué se suelen agrupar varios comandos dentro de un RUN en un Dockerfile
Para evitar tener mas capas en el dockerfile
Docker

Que es Docker-compose y swarm
- Docker compose es un archivo yaml que nos permite administrar varios contenedores. Por ejemplos si queremos virtualizar una app java, junto con su base de datos y un kafka
- Swarm nos permite administrar clusters de contenedores
Errores

Difenrencia entre Chechked y Unchecked. Cuando usar una checked exception?
- Las Checked se verifican en tiempo de compilacion, se verifica que la firma del metodo indique que se puede lanzar, o que se trate con un try/catch. Las Unchecked se no necesitan verificacion ya que se lanzan en tiempo de ejecucion
- Cuando queremos explicitamente que quien invoka el metodo, trate la posible excepcion que puede llegar a lanzarse porque no queremos que se propage hasta el cliente
Errores

Que es una Excepcion, Throwable y un Error
- Throwable es la clase padre, todos los throwables se pueden lanzar y catchear, aunque en el caso de los errores no es recomendable
- Los errores son situaciones excepcionales, pero graves que generalmente no se pueden recuperar. Ejemplo OutOfMemoryError
- Una excepcion es una situacion excepcional, es decir que no respeta el flujo normal de codigo que prestablecimos
Errores

¿Cuándo catchear y cuándo no?
- Se deben catchear cuando se necesita manejar la excepcion, recuperarla, o mapear es decir transformarla en otra
- No se debe catchear cuando nos interesa que se propage
Errores

Si tiene varios request concurrentes, ¿cómo haría para loguear un error?
Utilizaria una libreria que loguee el thread. Esto es util cuando hay que verificar los logs y seguir una traza
Errores

Escribir log a disco, tiene algún costo para la aplicación? Y loguear el stack trace?
Loguear a disco siempre tiene un impacto, pero todo siempre depende de la cantidad de eventos y cantidad de veces que se loguee
Por ejemplo log4j por decir una libreria, loguea a disco cada vez que invocamos el metodo
Si quisieramos mejorar el rendimiento podriamos configurarlo para que use un buffer, o para crear un archivo de log distinto por dia o por tamanio
POO

Que es y Para que usaria default methods en java?
- Son metodo de una interfaz que pueden tener comportamiento a diferencia de los metodos abstractos de siempre de las interfaces
- Lo usaria en caso de que haya comportamiento comun entre todas aquellas clases que implementen la interfaz para evitar repeticion de codigo
Seguridad

¿Qué es un SQL Injection? ¿Cómo lo evitas?
- Es poner codigo sql malicioso en input o backs que no esten sanitizados
- Se evita validando que no haya caracteres que se usan en sql inyection, tambien parametrizando los datos que formaran la consulta o usando algun framework que contruye la consulta por nosotros en base a un objeto
Seguridad

¿Qué factores tenés en cuenta para la seguridad de tus aplicaciones?
Autenticacion, Autorizacion, Encryptacion de contrasenias, Auditoria
Seguridad

¿Qué es un ataque DOS? ¿y DDOS? ¿Se puede evitar? ¿Cómo?
Denegación de servicio, intento de bloquear el acceso a un sistema. Ataque DDOS: múltiples fuentes realizan ataques DOS simultáneamente. Pueden mitigarse mediante firewalls, límites de tráfico y servicios de mitigación de DDOS
POO

¿Que es un objeto Singleton? ¿Cómo lo diseñaría?
- Es una clase que tiene una unica instancia
- A la clase le pones el constructor en privado para que no se generen mas instancias, le agregas un atributo del tipo de la clase y un metodo getInstance que le asigna al atributo una instancia solo la primera vez que es cuando el atributo es nulo
POO

Code smell
- Una clase no implemente todos los metodos de una interfaz
- Que una clase sea muy grande, se puede segregar
- Que un metodo tenga muchos parametros, se puede transformar en un objeto o dividir en metodos
- Que una clase sea pasamanos y no procese nada
- Lanzar excepciones como parte del flujo normal
- If anidados
POO

Diferencia entre statement y expression
- Un statement ejecuta una accion y no devuelve un valor. Por ejemplo mostrar algo por consola o asignar un valor
- Una expresion si retorna un valor, por ejemplo una suma o la llamada a un metodo que retorna un valor
POO

¿Cuál es la relación entre equals y hashcode? ¿Cuáles de las siguientes
combinaciones son válidas?
- El metodo equals se usa verificar si un objeto es igual a otro comparando sus contenidos. El metodo HashCode genera un hash en base a ese equals. Por ende dos objetos que tienen el mismo contenido tienen el mismo hash-code
- El hash-code se usa en objetos como HashMap o HashSet
POO

¿Qué es un Comparator? ¿Dónde los usaría? ¿Cuál es la diferencia entre y
Comparable? dar ejemplos
- Comparable es una interfaz que nos hace implementar el metodo compareTo para definir un ordenamiento default o natural para la clase
- En cambio la interfaz Comparable nos hace implementar el metodo compare para definir ordenamientos alternativos al default
- Por ejemplo, si usamos el ordenamiento natural podemos hacer lista.sort, pero si queremos usar odenamientos alternativos pordemos hacer Colecctions.sort(lista, comparator)
Bases de datos

¿Qué ventajas y desventajas tiene el uso de índices en una base de datos
relacional?
- Los indices aportan mayor velocidad a la hora de buscar un dato
- La desventaja es que ocupan espacio extra en disco y que no son tan performantes para las modificaciones o inserciones debido a que hay que mantener el indice
Funcional

Cual es la diferencia entre aplicacion parcial y currificacion
Generalmente es un concepto que se suele confundir
- La aplicacion parcial sucede al momento que una funcion de por ejemplo dos parametros, le pasamos solo uno y recibimos una funcion a la cual hay que pasarle un solo parametro
- El concepto de currificacion esta ligado a la logica que escribimos para que luego pueda suceder una aplicacion parcial
Funcional

Que es una Lambda
- Es una expresion anonima de una funcion
- En java por ejemplo suele usarse para remplazar la instanciacion de Functional Interfeces
Funcional

Que es una Functional Interface?
- Son interfaces que tienen un solo metodo a implementar
- Pueden ser remplazadas por Lambdas
- Ejemplos en java son Suppliers, Predicates, Consumer, Function de interfaces funciones
Funcional

Que es una monada?
- Es una estructura que nos permite envolver un dato y nos provee funciones para trabajar con el como filter, map, flatmap sin preocuparnos por el valor envuelto
- Tenemos como ejemplo Option, Try, Either, Mono, Flux
Funcional

Que es patter matching?
- Es una tecnica que permite ejecutar acciones en base a la estructura de datos u objetos, o condicionales que se aplican
- En kotlin podemos usar When y en Scala Match
Funcional

Que es un Algebraic Data Type
- Es un concepto que permite definir estructura de datos mas complejas en base a datos simples
- data Persona = String Int
- data color = rojo | verde | amarillo
- datas recursivas como una lista "data list a = empty | const a (list a)"
- data maybe = Nothing | Just a
POO

Tipos de poliforfismo
- De subtipos: Cuando tenes una clase abtracta que tiene subtipos y le enviamos mensajes sin importar cual sea la instancia concreta en es momento
- De inclusion: Igual pero con interfaces
- Parametrico: Cuando enviamos el mismo mensaje, pero usamos generics. Ejemplo del repositorio
- Ad hoc: Sobre carga de metodos. Metodo sumar con enteros y con doubles
Funcional

Si la programación funcional propone no tener efecto de lado, como resuelve el
problema de la interacción con un sistema? Conoce lo que son los effects?
- Para evitar el efecto de lado, podemos crear siempre nuevos objetos. En kotlin y scala tenemos metodos para hacer copy, tenemos funciones que no tienen efecto de lado
- A su vez podemos guardar datos en las bases
- Y cuando invokamos servicios externos podemos usar Monadas como Try o Either para contemplar casos de error
- Los effectos son aquellos efectos que se producen ademas de lo que retornamos en la funcion
Funcional

Si la programación funcional propone no tener efecto de lado, como resuelve el
problema de la interacción con un sistema? Conoce lo que son los effects? Cómo
diferenciar entre un “efecto” y una función pura con solo ver la firma?
Si el metodo es void, o Unit, es decir que no retorna nada es porque tiene efecto de lado
Funcional

¿Cómo garantiza la programación funcional que no haya efecto de lado dentro de
una función?
Con inmutabilidad
Funcional

Que es una funcion pura?
Es una funcion que siempre produce el mismo resultado, ante los mismo parametros. Sumado a que no produce efecto de lado
Poo

como usa un HashMap la funcion hashCode?
La usa para determinar su posicion en la tabla hash. Toma el valor de retorno del metodo hashCode() y lo pasa por una funcion de hash
Poo

Como trata HashMap las colisiones
- Una colision sucede cuando dos elementos diferentes tienen el mismo valor de hash
- Si hay dos elementos que estan en la misma posicion, en esa posicion se crea una lista enlazada para los dos elementos
Bases de datos

¿Como podes optimizar una query lenta en una BDD relacional?
- Se pueden usar indices
- Se puede verificar si se aplican los suficientes filtros para no traer tantos datos. Ejemplo Where, group by, having
- Podemos desnormalizar para reducir la cantidad de join y tener una tabla con datos repetidos que son los mas frecuentes
Bases de datos

¿Conoce que es un split brain?
Si es un particionamiento de red donde un grupo de nodos quedan de un lado y el resto del otro
Bases de datos

Diferente entre Isolations y Propagation
- Los isolation level, indica el nivel de aislamiento entre las transacciones, es decir, como unas pueden interactuar con los cambios que hacen las otras. Un ejemplo es si una trasaccion puede leer datos que otra aun no commiteo
- El nivel de propagacion establece como se comporta la trasaccion cuando interactua con metodos o componentes de la aplicacion. Por ejemplo, si un servicio tiene un metodo que genera una transaccion y este metodo llama a otro metodo que tambien tiene configurado que al invocarse cree una transaccion. Ahi podemos configurar o que el metodo b se una a la transaccion del metodo A o que cree una una nueva
Front

Explicar prototype chain. Dar un ejemplo simple
- Es un mecanismo que permite la herencia de propiedades y métodos entre objetos. Cada objeto en JavaScript tiene una propiedad interna llamada [[Prototype]] (también conocida como __proto__), que apunta a otro objeto (su prototipo). Si una propiedad o método no se encuentra en un objeto, JavaScript busca en la cadena de prototipos hasta encontrarlo
- En ECMAscript 2015 se agrego al lenguaje clases y formas de entender de ellas
Front

¿En qué consiste la métrica DOMContentLoad y Load?
- DOMContentLoad: Momento en el que se ha cargado el contenido HTML y se puede acceder al DOM.
- Load: Momento en el que se han cargado todos los recursos de la página, incluyendo imágenes y scripts externos.
Front

¿Qué herramientas de test de performance conocés?
- Jmeter y Selenium
- Lighthouse: Proporciona una puntuación, metricas y recomendaciones para mejorar el rendimiento de una página web
Front

¿Qué es ajax?
Técnica que permite realizar solicitudes asíncronas al servidor desde el navegador sin tener que recargar la página completa
Front

¿Qué diferencia un request Ajax de un request convencional en un browser?
Los request Ajax se realizan en segundo plano, sin recargar la página completa. En un request convencional, cuando por ejemplo se envía un formulario o se hace clic en un enlace, el navegador realiza una solicitud al servidor y la página se recarga por completo con la respuesta del servidor
Front

¿Cómo funciona el event loop de javascript?
Es un mecanismo de JS que trabaja como una cola de tareas que se va ejecutando de a ciclos, su objetivo es ejecutar tareas de forma asincrona para no afectar la fluidez de la UI
Front

¿Qué es polling? ¿Para qué lo usarías?
Técnica en la que se realiza una solicitud repetitiva al servidor en intervalos de tiempo predefinidos para obtener información actualizada. Se usa, por ejemplo, para mostrar notificaciones en tiempo real.
Front

¿Qué es un long request? ¿Para qué lo usarías?
Es una solicitud que permanece abierta durante un período prolongado para recibir actualizaciones continuas del servidor. Se utiliza para transmitir datos en tiempo real, como chats o transmisiones en vivo
Front

¿Qué es una promesa?
- Representa un valor futuro que puede estar disponible de forma asíncrona
- Mas adelante se remplazo por una forma mas legible como es Asycn/await
Front

¿Qué diferencia hay entre una página “tradicional” y una SPA? ¿Y una WPA?
- Página tradicional: Recarga la página completa al navegar entre diferentes secciones.
- SPA (Single-Page Application): Carga una única página inicial y actualiza el contenido dinámicamente sin recargar la página completa.
- WPA (Web Progressive App): Aplicación web que se puede instalar en el dispositivo y funciona incluso sin conexión a internet.
Front

Pros y cons de SSR and CSR
- SSR: Ventajas: Tiempos de carga iniciales más rápidos. Desventajas: Mayor carga en el servidor, interactividad limitada en la carga inicial.
- CSR: Ventajas: Interactividad rica, menos carga en el servidor. Desventajas: tiempos de carga iniciales más lentos.