Temario de listas educación Flashcards

1
Q

¿Qué son los principios GRASP?

A

Son un conjunto de pautas generales para asignar responsabilidades a las clases en un diseño de software, con el objetivo de crear sistemas más mantenibles, reutilizables y fáciles de entender.

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

¿Cuál es el objetivo principal de los principios GRASP?

A

Mejorar la cohesión y el acoplamiento de las clases, lo que se traduce en un diseño más robusto y flexible.

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

¿Qué significa el acrónimo GRASP?

A
  • General: Los principios son aplicables a una amplia gama de sistemas de software.
  • Responsibility: Se refiere a la tarea o función que realiza una clase.
  • Assignment: Indica cómo se asignan esas tareas a las clases.
  • Software: Obviamente, se refiere al ámbito del desarrollo de software.
  • Patterns: Son patrones o principios generales que se pueden aplicar repetidamente.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

¿Qué son los principios SOLID?

A

Son cinco principios básicos de la programación orientada a objetos que buscan crear software más mantenible, flexible y extensible

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

¿Cómo se aplican los principios SOLID en un proyecto real?

A

Identificando las responsabilidades de cada clase, creando interfaces claras, utilizando herencia y polimorfismo de manera adecuada, y evitando acoplamientos innecesarios.

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

Principio de Responsabilidad Única (SRP)

A

Un concepto fundamental en la programación orientada a objetos que establece que una clase debe tener una única razón para cambiar. En otras palabras, una clase debe tener una sola responsabilidad bien definida.

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

¿Por qué es importante el SRP?

A
  • Mantenibilidad: Al tener clases con responsabilidades bien delimitadas, es más fácil modificar el código sin afectar otras partes del sistema.
  • Reutilización: Clases con una única responsabilidad son más fáciles de reutilizar en diferentes contextos.
  • Pruebas: Las clases con una sola responsabilidad son más fáciles de probar de forma aislada.
  • Comprensión: Un código más simple y enfocado es más fácil de entender y mantener.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Principio Abierto-Cerrado (OCP)

A

El Principio Abierto-Cerrado (OCP, por sus siglas en inglés) es uno de los cinco principios SOLID de la programación orientada a objetos. Establece que una entidad de software (como una clase o un módulo) debe estar abierta a extensiones pero cerrada a modificaciones.
* Abierta a extensiones: Significa que podemos añadir nuevas funcionalidades a una clase o módulo sin modificar su código existente. Por ejemplo, podemos crear subclases que hereden de una clase base y añadan nuevo comportamiento.
* Cerrada a modificaciones: Significa que una vez que una clase ha sido desarrollada y probada, no deberíamos tener que modificarla para añadir nuevas características.

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

¿Por qué es importante el OCP?

A
  • Mantenibilidad: Al evitar modificar el código existente, se reduce el riesgo de introducir errores y se facilita la evolución del software a largo plazo.
  • Reutilización: Las clases diseñadas siguiendo el OCP son más propensas a ser reutilizadas en diferentes partes de la aplicación.
  • Flexibilidad: Los sistemas diseñados siguiendo el OCP se adaptan mejor a los cambios en los requisitos.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

¿Cómo se aplica el OCP?

A
  • Herencia: Creando clases hijas que heredan de una clase base y añaden nuevo comportamiento.
  • Composición: Utilizando objetos de otras clases para agregar nuevas funcionalidades a una clase.
  • Interfaces: Definiendo interfaces que especifican el comportamiento de un objeto, permitiendo que diferentes clases implementen esa interfaz de manera diferente.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Principio de Sustitución de Liskov (LSP)

A

El LSP es uno de los cinco principios SOLID de la programación orientada a objetos. En términos sencillos, establece que un objeto de una subclase debe poder reemplazar a un objeto de su clase base sin que se altere el correcto funcionamiento del programa.

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

¿Por qué es importante el LSP?

A
  • Mantenibilidad: Facilita la modificación y ampliación del código, ya que permite sustituir objetos de una clase por otros de sus subclases sin la necesidad de grandes refactorizaciones.
  • Reutilización: Fomenta la creación de código más genérico y reutilizable.
  • Corrección: Garantiza que el comportamiento del programa sea predecible y correcto, evitando errores inesperados.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Violaciones del LSP

A

Una violación del LSP ocurre cuando una subclase no puede reemplazar completamente a su clase base sin alterar el comportamiento esperado del programa. Por ejemplo, si agregamos un método nadar() a la clase Canario y no a la clase Ave, estaríamos violando el LSP, ya que no todos los aves pueden nadar.

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

Principio de Segregación de Interfaz (ISP)

A

El Principio de Segregación de Interfaz (ISP) es uno de los cinco principios SOLID de la programación orientada a objetos. Establece que las interfaces deben ser específicas y enfocarse en los requerimientos de los clientes que las utilizan. En otras palabras, las interfaces deben ser lo más pequeñas y cohesivas posible, evitando incluir métodos que no son necesarios para todos los clientes.

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

¿Por qué es importante el ISP?

A
  • Acoplamiento reducido: Al dividir las interfaces en partes más pequeñas, se reduce el acoplamiento entre las clases, lo que facilita los cambios y la mantenibilidad del código.
  • Mayor cohesión: Las interfaces se vuelven más cohesivas, ya que cada una se enfoca en un conjunto específico de responsabilidades.
  • Flexibilidad: Permite que las clases implementen solo las interfaces que realmente necesitan, evitando la implementación de métodos innecesarios.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Beneficios de aplicar el ISP

A
  • Código más limpio y mantenible: Al dividir las interfaces en partes más pequeñas, el código se vuelve más fácil de entender y modificar.
  • Menor riesgo de errores: Al evitar la implementación de métodos innecesarios, se reduce el riesgo de introducir errores en el código.
  • Mayor flexibilidad: Permite agregar nuevas funcionalidades sin afectar a las clases existentes.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Principio de Inversión de Dependencia (DIP)

A

El Principio de Inversión de Dependencia (DIP) es uno de los cinco principios SOLID de la programación orientada a objetos. Establece que:

  • Los módulos de alto nivel no deben depender de módulos de bajo nivel. Ambos deben depender de abstracciones.
  • Las abstracciones no deben depender de detalles. Los detalles (implementaciones concretas) deben depender de abstracciones.

En términos más simples, el DIP sugiere que las clases de alto nivel, que contienen la lógica principal de una aplicación, no deben estar acopladas a las implementaciones concretas de las clases de bajo nivel, que suelen ser detalles de implementación. En su lugar, ambas deben depender de abstracciones como interfaces.

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

¿Por qué es importante el DIP?

A
  • Desacoplamiento: Reduce el acoplamiento entre las diferentes partes de una aplicación, haciendo que sea más fácil de mantener y modificar.
  • Reutilización: Facilita la reutilización de código, ya que las clases de alto nivel no están vinculadas a una implementación específica.
  • Testabilidad: Permite realizar pruebas unitarias de forma más aislada, ya que se pueden inyectar fácilmente implementaciones simuladas de las dependencias.
  • Flexibilidad: Hace que el sistema sea más flexible, ya que se pueden cambiar las implementaciones de las dependencias sin afectar a las clases de alto nivel.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Cómo aplicar el DIP

A
  • Identificar las dependencias: Analiza tu código y encuentra las dependencias entre las clases.
  • Crear abstracciones: Define interfaces o clases abstractas para representar las dependencias.
  • Inyectar dependencias: Utiliza inyección de dependencias para proporcionar las implementaciones concretas a las clases que las necesitan.
    En resumen, el DIP es un principio fundamental para construir sistemas de software más mantenibles, flexibles y testables. Al seguir este principio, se reduce el acoplamiento entre las diferentes partes de una aplicación, lo que facilita la evolución del software a lo largo del tiempo.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

¿Qué significa YAGNI (You Aren’t Gonna Need It)?

A

YAGNI es un acrónimo que significa “You Aren’t Gonna Need It” (en español, “No lo vas a necesitar”). Es un principio de desarrollo de software que sugiere que no se deben implementar características o funcionalidades hasta que sean realmente necesarias.

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

¿Cuál es el objetivo principal de YAGNI?

A

El objetivo principal de YAGNI es evitar la sobre ingeniería y el desarrollo de código innecesario. Al enfocarse solo en las funcionalidades requeridas en el momento presente, se reduce la complejidad del proyecto, se ahorra tiempo y se mejora la mantenibilidad del código.

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

¿Por qué es importante seguir el principio YAGNI?

A
  • Evita la acumulación de código técnico.
  • Reduce el tiempo de desarrollo.
  • Mejora la calidad del código.
  • Facilita la comprensión y el mantenimiento del proyecto.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

¿Cuál es la relación entre YAGNI y otros principios como KISS?

A

YAGNI está estrechamente relacionado con el principio KISS (Keep It Simple, Stupid). Ambos principios promueven la simplicidad y la eliminación de elementos innecesarios. KISS se enfoca en la solución más sencilla posible, mientras que YAGNI se centra en implementar solo lo estrictamente necesario.

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

¿Cómo se aplica YAGNI en la práctica?

A
  • Priorizar las funcionalidades según las necesidades del usuario.
  • Evitar la especulación sobre futuras necesidades.
  • Realizar un análisis exhaustivo de los requisitos antes de comenzar a desarrollar.
  • Revisar regularmente el código para eliminar partes innecesarias.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

¿Qué es el patrón Singleton?

A

El patrón Singleton es un patrón de diseño creacional que garantiza que una clase tenga una única instancia, y proporciona un punto de acceso global a ella.

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

¿Cuál es el objetivo principal del patrón Singleton?

A

El objetivo principal es asegurar que exista un solo objeto de una clase en todo el sistema, evitando la creación de múltiples instancias.

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

¿En qué situaciones es útil el patrón Singleton?

A
  • Necesitas un único punto de acceso a un recurso compartido.
  • Requieres un objeto global que controle el estado de la aplicación.
  • Deseas limitar la creación de objetos costosos.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

¿Cuáles son las ventajas del patrón Singleton?

A
  • Control estricto sobre la creación de objetos.
  • Punto de acceso global a una instancia.
  • Optimización en ciertos escenarios (por ejemplo, conexión a base de datos).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

¿Cuáles son las desventajas del patrón Singleton?

A
  • Violación del principio de responsabilidad única.
  • Dificultad para probar el código.
  • Puede hacer que el código sea menos flexible y más difícil de entender.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

¿Cómo se implementa el patrón Singleton?

A

Generalmente se implementa creando una clase con un constructor privado para evitar la instanciación directa y un método estático para obtener la única instancia.

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

Ejemplos de uso del Singleton

A
  • Gestor de configuración: Un único objeto para almacenar y acceder a la configuración de la aplicación.
  • Conexión a base de datos: Una única conexión a la base de datos para toda la aplicación.
  • Logger: Un único objeto para registrar eventos en la aplicación.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

¿Qué es el patrón Adapter?

A

El patrón Adapter es un patrón de diseño estructural que permite que clases con interfaces incompatibles trabajen juntas. Es como un adaptador que convierte un enchufe de un tipo a otro para que puedas conectar un dispositivo a una fuente de alimentación diferente.

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

¿Cuál es el objetivo principal del patrón Adapter?

A

El objetivo principal es hacer que clases con interfaces diferentes puedan colaborar sin tener que modificar su código original.

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

¿En qué situaciones es útil el patrón Adapter?

A
  • Necesitas utilizar una clase existente que tiene una interfaz diferente a la que necesitas.
  • Quieres utilizar una nueva interfaz con una clase existente.
  • Tienes que integrar componentes de diferentes frameworks o bibliotecas.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

¿Cuáles son las ventajas del patrón Adapter?

A
  • Reutilización de código existente.
  • Aumento de la flexibilidad y extensibilidad del sistema.
  • Mejora la compatibilidad entre diferentes componentes.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
36
Q

¿Cuáles son las desventajas del patrón Adapter?

A
  • Puede añadir complejidad al sistema si se utiliza en exceso.
  • Puede dificultar la comprensión del código si la adaptación es muy compleja.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
37
Q

¿Cómo se implementa el patrón Adapter?

A

Generalmente se crea una nueva clase que implementa la interfaz deseada y delega las llamadas a la clase existente que se quiere adaptar.

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

¿Qué es el patrón Builder?

A

El patrón Builder es un patrón de diseño creacional que te permite construir objetos complejos paso a paso, separando la construcción de un objeto de su representación. Es como construir una casa ladrillo a ladrillo, en lugar de crearla de una sola vez.

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

¿Cuál es el objetivo principal del patrón Builder?

A

El objetivo principal es crear objetos complejos de manera flexible y controlada, permitiendo diferentes representaciones del mismo objeto.

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

¿En qué situaciones es útil el patrón Builder?

A
  • Necesitas crear objetos con muchos parámetros o configuraciones.
  • Quieres separar la construcción de un objeto de su representación.
  • Necesitas crear diferentes representaciones del mismo objeto.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
41
Q

¿Cuáles son las ventajas del patrón Builder?

A
  • Mayor control sobre el proceso de construcción.
  • Mejora la legibilidad del código.
  • Facilita la creación de objetos complejos.
  • Permite crear diferentes representaciones del mismo objeto.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
42
Q

¿Cuáles son las desventajas del patrón Builder?

A
  • Puede añadir complejidad a proyectos sencillos.
  • Requiere más código que crear objetos directamente.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
43
Q

¿Cómo se implementa el patrón Builder?

A

Generalmente se crea una interfaz Builder que define los métodos para construir las diferentes partes del objeto. Luego se crean clases concretas que implementan esta interfaz y se encargan de construir el objeto paso a paso.

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

¿Qué es el patrón Factory?

A

El patrón Factory es un patrón de diseño creacional que proporciona una interfaz para crear objetos, pero deja a las subclases decidir qué clase instanciar. Es como una fábrica que produce diferentes tipos de productos, pero el proceso de producción se delega a las líneas de producción específicas.

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

¿Cuál es el objetivo principal del patrón Factory?

A

El objetivo principal es abstraer la creación de objetos, permitiendo que el código cliente se desacople de las clases concretas que se están instanciando.

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

¿En qué situaciones es útil el patrón Factory?

A
  • Necesitas crear objetos de diferentes clases relacionadas.
  • Quieres centralizar la lógica de creación de objetos.
  • Deseas ocultar la complejidad de la creación de objetos al cliente.
  • Necesitas agregar nuevos tipos de objetos sin modificar el código cliente.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
47
Q

¿Cuáles son las ventajas del patrón Factory?

A
  • Aumenta la flexibilidad del sistema.
  • Mejora la mantenibilidad del código.
  • Facilita la introducción de nuevos tipos de objetos.
  • Oculta la complejidad de la creación de objetos.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
48
Q

¿Cuáles son las desventajas del patrón Factory?

A
  • Puede introducir una capa adicional de abstracción.
  • Puede ser excesivo para casos simples.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
49
Q

¿Cómo se implementa el patrón Factory?

A

Generalmente se crea una clase abstracta o interfaz que define un método para crear objetos. Las subclases de esta clase implementan este método para crear objetos concretos.

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

¿Qué es la encapsulación?

A

La encapsulación es el principio que consiste en ocultar los detalles internos de un objeto, exponiendo solo una interfaz pública para interactuar con él.

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

¿Cuál es su objetivo de la encapsulación?

A

Proteger los datos internos de un objeto de modificaciones no autorizadas y facilitar el mantenimiento del código.

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

¿Qué es la abstracción?

A

La abstracción consiste en identificar las características esenciales de un objeto y omitir los detalles innecesarios.

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

¿Cuál es su objetivo de la abstracción?

A

Simplificar la complejidad de un sistema al modelar objetos del mundo real de manera más sencilla.

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

¿Qué es la herencia?

A

La herencia es un mecanismo que permite a una clase (subclase o clase hija) heredar atributos y métodos de otra clase (superclase o clase padre).

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

¿Cuál es su objetivo de la herencia?

A

Promover la reutilización de código y establecer relaciones jerárquicas entre clases.

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

¿Qué es el polimorfismo?

A

El polimorfismo es la capacidad de que objetos de diferentes clases puedan ser tratados como si fueran de la misma clase.

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

¿Cuál es su objetivo el polimorfismo?

A

Aumentar la flexibilidad y extensibilidad del código, permitiendo que diferentes objetos respondan de manera diferente al mismo mensaje.

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

¿Qué es DevOps?

A

DevOps es una metodología que combina el desarrollo de software (Dev) y las operaciones (Ops) con el objetivo de acortar el ciclo de vida de desarrollo de sistemas y proporcionar una entrega continua de valor al cliente.

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

¿Cuál es la importancia de la colaboración entre desarrolladores y equipos de operaciones en DevOps?

A

La colaboración estrecha y la comunicación efectiva entre equipos son fundamentales para romper silos y garantizar un flujo de trabajo continuo.

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

¿Por qué la automatización es clave en DevOps?

A

La automatización de tareas repetitivas, como la construcción, la prueba y el despliegue, reduce errores humanos, aumenta la velocidad y mejora la eficiencia.

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

¿Qué es la integración continua (CI) y cuál es su papel en DevOps?

A

La CI es la práctica de integrar el código de forma frecuente en un repositorio compartido. Ayuda a detectar errores temprano y a mantener una base de código estable.

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

¿Qué es la entrega continua (CD) y cómo se relaciona con la CI?

A

La CD es la práctica de desplegar automáticamente el software en producción después de cada cambio exitoso. Complementa la CI al garantizar que el software esté siempre listo para ser lanzado.

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

¿Por qué el monitoreo y la retroalimentación son esenciales en DevOps?

A

El monitoreo continuo permite identificar problemas y cuellos de botella en la producción, mientras que la retroalimentación ayuda a mejorar los procesos y tomar decisiones basadas en datos.

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

¿Cómo se fomenta una cultura de mejora continua en DevOps?

A

Fomentando la experimentación, la innovación y la retroalimentación constante, así como creando un ambiente de aprendizaje y colaboración.

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

¿Cuáles son las herramientas más comunes utilizadas en DevOps?

A
  • Control de versiones: Git
  • Automatización: Jenkins, Ansible, Puppet, Chef
  • Contenedores: Docker
  • Orquestación de contenedores: Kubernetes
  • Nube: AWS, Azure, GCP
  • Monitoreo: Prometheus, Grafana
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
66
Q

¿Cuáles son los beneficios de adoptar DevOps?

A

DevOps ofrece numerosos beneficios, como una mayor velocidad de entrega, una mejor calidad de software, una mayor fiabilidad, una mayor eficiencia y una mayor satisfacción del cliente.

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

¿Qué es el testing?

A

El testing es el proceso de evaluar un producto para verificar que cumple con los requisitos especificados y para detectar defectos.

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

¿Cuáles son los tipos de testing más comunes?

A

Unit testing, integración testing, sistema testing, aceptación testing, etc.

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

¿Cuál es la diferencia entre testing manual y automatizado?

A

El testing manual se realiza por un tester humano, mientras que el testing automatizado utiliza herramientas para ejecutar pruebas de forma repetitiva.

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

¿Por qué es importante el testing?

A

Asegura la calidad del software, reduce costos a largo plazo, mejora la satisfacción del cliente y previene fallos en producción.

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

¿Qué es TDD (Desarrollo Guiado por Pruebas)?

A

TDD es una metodología de desarrollo de software donde se escriben las pruebas unitarias antes de escribir el código de producción.

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

¿Cuáles son las tres leyes del TDD?

A
  • No puedes escribir código de producción sin antes hacer un test fallido.
  • No puedes escribir más de un único test unitario, con el suficiente código para hacerlo fallar.
  • Solo puedes escribir código de producción para hacer pasar el único test fallido.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
73
Q

¿Cuáles son las ventajas de TDD?

A

Mejora la calidad del código, facilita el refactoring, aumenta la cobertura de código y promueve un diseño más limpio.

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

¿Cuáles son los desafíos de TDD?

A

Puede aumentar el tiempo inicial de desarrollo, requiere disciplina y práctica, y puede ser difícil de aplicar en proyectos heredados.

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

¿Qué significa CI/CD?

A

CI significa Integración Continua y CD significa Entrega Continua (o Despliegue Continuo). Es un conjunto de prácticas que automatizan el proceso de desarrollo de software, desde la integración de código hasta su despliegue en producción.

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

¿Cuál es el objetivo principal de CI/CD?

A

Acelerar el tiempo de salida al mercado, mejorar la calidad del software, reducir errores y aumentar la frecuencia de despliegues.

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

¿Cuáles son las etapas típicas de un pipeline de CI/CD?

A

Comienza con el commit de código, seguido de la construcción, pruebas unitarias, pruebas de integración, pruebas de despliegue, y finalmente el despliegue en producción.

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

¿Qué papel juega el control de versiones en CI/CD?

A

El control de versiones (como Git) es fundamental para gestionar los cambios en el código y rastrear la historia de desarrollo.

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

¿Qué es un pipeline de CI/CD?

A

Un pipeline de CI/CD es una serie automatizada de pasos que transforma el código desde su commit hasta su despliegue en producción.

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

¿Cuáles son algunas herramientas populares para implementar CI/CD?

A

Jenkins, GitLab CI/CD, CircleCI, GitHub Actions, Bamboo.

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

¿Qué papel juegan los contenedores (Docker) en CI/CD?

A

Los contenedores proporcionan un entorno de ejecución consistente y aislado para las aplicaciones, facilitando la portabilidad y la escalabilidad.

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

¿Qué es la orquestación de contenedores (Kubernetes)?

A

La orquestación gestiona la implementación, escalado y administración de contenedores a gran escala.

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

¿Cuáles son los principales beneficios de adoptar CI/CD?

A

Mayor frecuencia de despliegues, mejor calidad del software, detección temprana de errores, reducción del tiempo de resolución de problemas, y mayor colaboración entre equipos.

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

¿Cuáles son los desafíos comunes al implementar CI/CD?

A

Resistencia al cambio, complejidad de la configuración, necesidad de automatización, gestión de dependencias.

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

¿Cómo se asegura la calidad del software en un entorno CI/CD?

A

A través de pruebas exhaustivas en cada etapa del pipeline, incluyendo pruebas unitarias, de integración, de despliegue y de usuario.

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

¿Qué es la arquitectura hexagonal?

A

La arquitectura hexagonal es un patrón de diseño que busca desacoplar la lógica de negocio de una aplicación de sus tecnologías externas como bases de datos, frameworks, UI, etc. Esto se logra encapsulando la lógica de negocio en un núcleo central y definiendo una interfaz clara (puertos) para interactuar con el mundo exterior.

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

¿Cuáles son los beneficios de usar arquitectura hexagonal?

A

Mayor testabilidad, independencia de tecnologías, mayor flexibilidad para cambios, mejor mantenibilidad y escalabilidad.

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

¿En qué tipo de proyectos es especialmente útil?

A

Es ideal para proyectos grandes y complejos, donde se espera que los requisitos cambien con el tiempo y se requiera una alta adaptabilidad.

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

¿Cuáles son los componentes principales de la arquitectura hexagonal?

A

Núcleo (dominio), puertos, adaptadores, infraestructura.

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

¿Cuál es la función del núcleo de la arquitectura hexagonal?

A

Contiene la lógica de negocio y las reglas de dominio, sin dependencias externas.

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

¿Qué son los puertos y adaptadores?

A

Los puertos definen el contrato que el núcleo expone al mundo exterior, mientras que los adaptadores implementan ese contrato utilizando tecnologías específicas.

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

¿Cuál es el principio fundamental de la inversión de control en la arquitectura hexagonal?

A

El núcleo no debe conocer las implementaciones concretas de los adaptadores, sino que depende de las abstracciones definidas por los puertos.

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

¿Cómo se aplica la inyección de dependencias en este patrón?

A

Se utiliza para inyectar las dependencias del núcleo a través de los puertos, lo que permite cambiar las implementaciones de los adaptadores sin modificar el núcleo.

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

¿Cómo se diferencia la arquitectura hexagonal de la arquitectura en capas?

A

La arquitectura hexagonal invierte las dependencias, haciendo que el núcleo sea independiente de las capas externas, mientras que la arquitectura en capas suele tener dependencias unidireccionales.

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

¿Cuál es la relación entre la arquitectura hexagonal y microservicios?

A

La arquitectura hexagonal puede ser aplicada a cada microservicio, proporcionando una base sólida para su desarrollo.

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

¿Qué son las propiedades ACID?

A

ACID es un acrónimo de Atomicidad, Consistencia, Aislamiento y Durabilidad. Son propiedades fundamentales de las transacciones en bases de datos relacionales que garantizan la integridad y fiabilidad de los datos.

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

¿Cuál es la importancia de las propiedades ACID?

A

Las propiedades ACID aseguran que las transacciones se completen de manera confiable y que los datos se mantengan consistentes, incluso en caso de fallas del sistema.

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

¿Qué significa cada letra de ACID?

A
  • Atomicidad: Una transacción se ejecuta como una unidad indivisible. O se completa toda o ninguna de sus operaciones.
  • Consistencia: Una transacción mueve la base de datos de un estado consistente a otro. Las reglas de integridad se mantienen siempre.
  • Aislamiento: Las transacciones concurrentes no interfieren entre sí. Cada transacción ve una vista consistente de la base de datos.
  • Durabilidad: Una vez que una transacción se ha comprometido, los cambios son permanentes y sobrevivirán a fallos del sistema.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
99
Q

¿Cuáles son algunos ejemplos de cómo se aplican las propiedades ACID en la vida real?

A
  • Atomicidad: Transferencia bancaria: Si se debita dinero de una cuenta, el crédito debe realizarse en otra cuenta simultáneamente.
  • Consistencia: Reservas de vuelos: Al reservar un vuelo, la disponibilidad de los asientos debe actualizarse de forma consistente.
  • Aislamiento: Múltiples usuarios que consultan un saldo bancario al mismo tiempo no deben ver datos inconsistentes.
  • Durabilidad: Los datos de una transacción comprometida no se perderán, incluso si se produce un apagón.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
100
Q

¿Qué ocurre si no se cumplen las propiedades ACID?

A

Si no se cumplen las propiedades ACID, pueden ocurrir problemas como pérdida de datos, inconsistencias en la base de datos y resultados impredecibles en las aplicaciones.

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

¿Cómo garantizan los SGBDR las propiedades ACID?

A

Los SGBDR utilizan diversos mecanismos, como el registro de transacciones, los puntos de control y los bloqueos, para asegurar que las transacciones cumplan con las propiedades ACID.

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

¿Qué es una transacción?

A

Una transacción es una secuencia de operaciones que se ejecutan como una unidad atómica.

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

¿Qué es el modelo relacional?

A

Es un modelo de datos basado en la lógica de predicados y en la teoría de conjuntos. Organiza los datos en tablas relacionadas entre sí, lo que facilita su gestión y consulta.

104
Q

¿Cuáles son los componentes básicos del modelo relacional?

A

Tablas, filas, columnas, claves primarias y foráneas.

105
Q

¿Qué es una tabla en el modelo relacional?

A

Respuesta: Una tabla es una estructura bidimensional que almacena datos en filas (registros) y columnas (atributos).

106
Q

¿Cuál es la diferencia entre una clave primaria y una clave foránea?

A

Una clave primaria identifica de forma única un registro en una tabla, mientras que una clave foránea establece una relación entre dos tablas, haciendo referencia a la clave primaria de otra tabla.

107
Q

¿Qué es el grado y la cardinalidad de una relación?

A

El grado de una relación es el número de entidades involucradas en la relación. La cardinalidad especifica el número de instancias de una entidad que pueden estar asociadas con una instancia de otra entidad (uno a uno, uno a muchos, muchos a muchos).

108
Q

Qué es un diagrama E/R?

A

Es una representación gráfica del modelo relacional, utilizado para visualizar las entidades, atributos y relaciones entre ellas.

109
Q

¿Cuáles son los elementos principales de un diagrama E/R?

A

Entidades (rectángulos), atributos (óvalos), relaciones (rombos) y cardinalidades.

110
Q

¿Cómo se representa una relación uno a uno en un diagrama E/R?

A

Respuesta: Mediante una línea que conecta dos entidades, con una marca de cardinalidad “1” en cada extremo.

111
Q

¿Cómo se representa una relación uno a muchos en un diagrama E/R?

A

Mediante una línea que conecta dos entidades, con una marca de cardinalidad “1” en un extremo y “*” en el otro.

112
Q

¿Cómo se representa una relación muchos a muchos en un diagrama E/R?

A

Mediante una línea que conecta dos entidades, con una marca de cardinalidad “*” en cada extremo, y se introduce una entidad intermedia para representar la relación.

113
Q

¿Qué es la normalización en el modelo relacional?

A

Es el proceso de organizar los datos en una base de datos para reducir la redundancia y las anomalías, mejorando así la integridad de los datos.

114
Q

Cuáles son las formas normales más comunes?

A

Primera forma normal (1NF), segunda forma normal (2NF) y tercera forma normal (3NF).

115
Q

¿Qué es la Primera Forma Normal (1NF)?

A

Una tabla está en 1NF cuando cada celda contiene un solo valor atómico y no hay grupos repetidos de datos dentro de una fila.

116
Q

¿Cuáles son las características principales de una tabla en 1NF?

A

Cada celda contiene un solo valor, no hay columnas con listas de valores y cada fila es única.

117
Q

¿Por qué es importante la 1NF?

A

Es la base para las demás formas normales y evita problemas como la ambigüedad en la interpretación de los datos y la dificultad para realizar consultas.

118
Q

¿Qué es la Segunda Forma Normal (2NF)?

A

Una tabla está en 2NF si cumple con la 1NF y si todos los atributos no clave dependen completamente de la clave primaria.

119
Q

¿Qué significa que un atributo dependa completamente de la clave primaria?

A

Significa que el atributo no puede depender solo de una parte de la clave primaria (clave candidata).

120
Q

¿Cuál es el objetivo de la 2NF?

A

Eliminar las dependencias parciales, es decir, aquellas en las que un atributo no clave depende solo de una parte de la clave primaria.

121
Q

¿Qué es la Tercera Forma Normal (3NF)?

A

Una tabla está en 3NF si cumple con la 2NF y si ningún atributo no clave depende transitivamente de la clave primaria.

122
Q

¿Qué significa dependencia transitiva?

A

Ocurre cuando un atributo no clave depende de otro atributo no clave, y este último depende de la clave primaria.

123
Q

¿Cuál es el objetivo de la 3NF?

A

Eliminar las dependencias transitivas, reduciendo aún más la redundancia y mejorando la integridad de los datos.

124
Q

¿Qué es SQL y para qué se utiliza?

A

SQL (Structured Query Language) es un lenguaje estándar para gestionar bases de datos relacionales. Se utiliza para definir, manipular y consultar datos.

125
Q

¿Cuáles son los principales tipos de sentencias SQL?

A

DDL (Data Definition Language) para definir la estructura de la base de datos, DML (Data Manipulation Language) para manipular los datos y DQL (Data Query Language) para consultar los datos.

126
Q

¿Qué es un procedimiento almacenado?

A

Un procedimiento almacenado es un conjunto de instrucciones SQL precompiladas y almacenadas en la base de datos, que pueden ser ejecutadas como una unidad.

127
Q

¿Cuáles son las ventajas de utilizar procedimientos almacenados?

A

Mejor rendimiento, reutilización de código, seguridad, modularidad y encapsulación de la lógica de negocio.

128
Q

¿Cuál es la diferencia entre un procedimiento almacenado y una función?

A

Un procedimiento almacenado realiza una acción, mientras que una función devuelve un valor.

129
Q

¿Qué es T-SQL?

A

Es la implementación de SQL en SQL Server, que incluye extensiones para el control de flujo, manejo de errores y otras funcionalidades.

130
Q

¿Cómo se crea un procedimiento almacenado en T-SQL?

A

Se utiliza la instrucción CREATE PROCEDURE

131
Q

¿Cuáles son los tipos de parámetros en T-SQL?

A

Entrada, salida y entrada/salida.

132
Q

¿Qué son las variables en T-SQL?

A

Son contenedores que almacenan valores temporalmente dentro de un procedimiento almacenado.

133
Q

¿Qué es PL/SQL?

A

Es la extensión procedimental de SQL para Oracle Database. Permite crear bloques de código más complejos que las simples sentencias SQL.

134
Q

¿Cómo se crea un procedimiento almacenado en PL/SQL?

A

Se utiliza la palabra clave CREATE OR REPLACE PROCEDURE.

135
Q

¿Qué son los bloques PL/SQL?

A

Son unidades de código que contienen declaraciones, sentencias ejecutables y excepciones.

136
Q

¿Cuáles son los tipos de datos en PL/SQL?

A

Escalares (número, varchar2, date), compuestos (registros, tablas anidadas) y referenciales (cursors).

137
Q

¿Cuáles son las características comunes de T-SQL y PL/SQL?

A

Ambos permiten crear procedimientos almacenados, funciones, triggers y paquetes.

138
Q

¿Cuáles son las principales diferencias entre T-SQL y PL/SQL?

A

Sintaxis, tipos de datos, funciones integradas y algunas características específicas de cada plataforma.

139
Q

¿Cuándo es útil utilizar procedimientos almacenados?

A

Para encapsular lógica de negocio compleja, mejorar el rendimiento de consultas repetitivas, implementar reglas de negocio y seguridad.

140
Q

¿Cuáles son algunos ejemplos de tareas que se pueden automatizar con procedimientos almacenados?

A

Cálculos complejos, generación de reportes, carga de datos, validación de datos, etc.

141
Q

¿Qué es el desarrollo frontend?

A

Es la parte de la programación web que se encarga de crear la interfaz de usuario con la que interactúa el usuario final.

142
Q

Cuáles son los lenguajes principales del frontend?

A

HTML, CSS y JavaScript.

143
Q

¿Qué es el modelo de caja en CSS?

A

Es un modelo que explica cómo se organizan los elementos en una página web, considerando el contenido, el padding, el border y el margin.

144
Q

¿Qué es el DOM (Document Object Model)?

A

Es una representación del HTML de una página web en forma de objetos, permitiendo manipular el contenido y la estructura de la página.

145
Q

¿Qué es un framework frontend?

A

Es un conjunto de herramientas y bibliotecas que facilitan el desarrollo de aplicaciones web, proporcionando una estructura y componentes predefinidos.

146
Q

¿Qué es una librería frontend?

A

Es un conjunto de funciones y componentes reutilizables que se pueden agregar a un proyecto para realizar tareas específicas.

147
Q

Qué es un preprocesador CSS?

A
  • Un programa que permite escribir CSS de una manera más eficiente y con más funcionalidades, como variables, mixins y anidamiento.
  • Ejemplos: Sass, Less.
148
Q

¿Qué es un bundler?

A
  • Una herramienta que combina y optimiza los archivos de un proyecto frontend para mejorar el rendimiento.
  • Ejemplo: Webpack.
149
Q

¿Qué es el responsive design?

A

Es el diseño de sitios web que se adaptan automáticamente a diferentes tamaños de pantalla.

150
Q

¿Qué es la accesibilidad web?

A

Es la práctica de hacer que los sitios web sean accesibles para todas las personas, incluidas aquellas con discapacidades.

151
Q

¿Qué es el hoisting en JavaScript?

A

El hoisting es un comportamiento de JavaScript que hace que las declaraciones de variables y funciones sean “elevadas” al principio de su ámbito (global o de función). Esto significa que puedes usar una variable o función antes de declararla, pero su valor será undefined hasta que se llegue a la declaración.
* Hoisting de variables: Las declaraciones de variables se elevan al principio de su ámbito, pero su inicialización no.
* Hoisting de funciones: Las declaraciones de funciones se elevan completamente al principio de su ámbito, incluyendo su cuerpo.

152
Q

¿Cuál es la diferencia entre == y === en JavaScript?

A
  • == (igualdad débil): Realiza una comparación de igualdad, pero realiza conversiones de tipo si es necesario. Por ejemplo, “5” == 5 es verdadero, ya que el string “5” se convierte a número.
  • === (igualdad estricta): Compara tanto el valor como el tipo de los operandos. Si los tipos son diferentes o los valores no son exactamente iguales, el resultado es falso. Por ejemplo, “5” === 5 es falso, ya que uno es un string y el otro un número.
153
Q

¿Qué es una promesa en JavaScript?

A

Una promesa representa el resultado eventual de una operación asíncrona. Puede estar en tres estados:

  • pending: La operación aún no ha terminado.
  • fulfilled: La operación se completó con éxito y tiene un valor.
  • rejected: La operación falló y tiene un motivo.
    Las promesas se utilizan para manejar el código asíncrono de una manera más limpia y evitar el callback hell.
154
Q

¿Qué es el framework de trabajo en equipo más utilizado en frontend?

A

Los frameworks frontend más populares para el trabajo en equipo son:

  • React: Desarrollado por Facebook, es un framework muy popular para crear interfaces de usuario declarativas y eficientes.
  • Angular: Desarrollado por Google, es un framework completo para aplicaciones web de una sola página (SPA).
  • Vue.js: Es un framework progresivo que se adapta a las necesidades de cada proyecto, desde pequeñas aplicaciones hasta grandes SPA.
155
Q

¿Qué es Angular?

A

Angular es un framework de desarrollo web de tipo SPA (Single Page Application) creado y mantenido por Google. Permite construir aplicaciones web de una sola página de forma estructurada y escalable.

156
Q

Cuáles son las principales características de Angular?

A

TypeScript, componentes, módulos, inyección de dependencias, enrutamiento, formularios reactivos, y un ecosistema de herramientas robusto.

157
Q

¿Cuál es la diferencia entre AngularJS y Angular?

A

AngularJS es la primera versión del framework, mientras que Angular es una reescritura completa con una sintaxis y arquitectura diferentes. Angular es más performante y escalable.

158
Q

¿Qué es un componente en Angular?

A

Un componente es una parte independiente de la interfaz de usuario que tiene su propia lógica y plantilla. Los componentes se combinan para formar la aplicación completa.

159
Q

¿Qué es el módulo en Angular?

A

Un módulo es un contenedor para componentes, servicios, directivas y otros módulos. Organiza la aplicación en partes más pequeñas y manejables.

160
Q

¿Qué es el diseño responsivo?

A

Es una técnica de diseño web que permite que un sitio web se adapte automáticamente a diferentes tamaños de pantalla, desde dispositivos móviles hasta pantallas de escritorio.

161
Q

¿Cuáles son los principios clave del diseño responsivo?

A
  • Fluid Grids: Utilizar rejillas flexibles que se ajustan al tamaño de la pantalla.
  • Media Queries: Aplicar estilos diferentes según el tamaño de la pantalla, la orientación del dispositivo y otros factores.
  • Imágenes responsivas: Utilizar imágenes que se ajusten al tamaño del contenedor.
162
Q

¿Qué son las media queries?

A

Son reglas CSS que permiten aplicar estilos diferentes según el tamaño de la pantalla, la orientación del dispositivo y otros factores.

163
Q

¿Por qué es importante el diseño responsivo?

A

Garantiza una buena experiencia de usuario en cualquier dispositivo, mejora el posicionamiento en buscadores y se adapta a las tendencias actuales de consumo de contenido web.

164
Q

¿Qué es la usabilidad?

A

La usabilidad se refiere a la facilidad con la que un usuario puede aprender a utilizar una interfaz y alcanzar sus objetivos.

165
Q

¿Cuáles son los principios de la usabilidad?

A
  • Visibilidad del estado del sistema: El sistema debe siempre informar al usuario sobre lo que está sucediendo.
  • Correspondencia entre el sistema y el mundo real: El sistema debe seguir las convenciones del mundo real y el lenguaje del usuario.
  • Control del usuario: El usuario debe sentirse a cargo del sistema y poder revertir fácilmente las acciones.
  • Coherencia y estándares: El sistema debe seguir reglas consistentes y estándares de la industria.
  • Prevención de errores: El diseño debe minimizar la posibilidad de errores y proporcionar mensajes claros en caso de que ocurran.
  • Reconocimiento antes que recuerdo: El sistema debe reducir la carga de memoria del usuario.
  • Flexibilidad y eficiencia de uso: El sistema debe acomodar a usuarios novatos y expertos.
  • Estética y diseño minimalista: El diseño debe ser atractivo y no distraer al usuario.
  • Ayudar a los usuarios a reconocer, diagnosticar y recuperarse de errores: El sistema debe proporcionar mensajes de error claros y soluciones.
  • Documentación: La documentación debe ser fácil de buscar y entender.
166
Q

¿Qué es la accesibilidad?

A

La accesibilidad garantiza que todos los usuarios, incluyendo personas con discapacidades, puedan acceder y utilizar una aplicación web.

167
Q

¿Cuáles son los principios de la accesibilidad?

A
  • Perceptible: La información y la interfaz de usuario deben ser presentadas de manera que los usuarios puedan percibirlas.
  • Operable: Los componentes y la navegación deben ser operables.
  • Comprensible: La información y la interfaz de usuario deben ser fáciles de entender.
  • Robusta: El contenido debe ser interpretable por una amplia variedad de agentes de usuario, incluyendo tecnologías asistivas.
168
Q

¿Cuáles son los aspectos clave de la accesibilidad web?

A
  • Texto alternativo para imágenes: Proporcionar descripciones textuales de las imágenes.
  • Encabezados semánticos: Utilizar etiquetas de encabezado (h1, h2, etc.) para estructurar el contenido.
  • Contraste de colores: Asegurar un contraste adecuado entre el texto y el fondo.
  • Compatibilidad con tecnologías asistivas: Asegurar que la web funcione con lectores de pantalla, teclados, etc.
  • Focos de teclado: Permitir la navegación a través del teclado.
169
Q

¿Cuáles son las principales herramientas para realizar pruebas de usabilidad y accesibilidad?

A
  • Herramientas de grabación de pantalla: Capturan la interacción del usuario con la web, permitiendo identificar patrones de comportamiento y áreas de mejora. Ejemplos: Loom, Hotjar, UserTesting.
  • Herramientas de análisis de calor: Visualizan las áreas de una página que más atraen la atención del usuario. Ejemplos: Hotjar, Crazy Egg.
  • Herramientas de encuestas y feedback: Permiten recopilar opiniones y sugerencias de los usuarios. Ejemplos: SurveyMonkey, Typeform.
  • Herramientas de auditoría de accesibilidad: Analizan el código HTML y CSS para identificar posibles problemas de accesibilidad. Ejemplos: WAVE Web Accessibility Evaluation Tool, aXe.
170
Q

¿Cómo se implementan los diseños responsivos utilizando frameworks CSS como Bootstrap o Foundation?

A
  • Bootstrap y Foundation: Estos frameworks proporcionan una estructura de rejilla predefinida, componentes prediseñados y clases CSS que facilitan la creación de diseños responsivos.
  • Media Queries: Permiten aplicar estilos diferentes según el tamaño de la pantalla.
  • Flexbox y Grid: Son módulos CSS que ofrecen gran flexibilidad para crear layouts adaptables.
  • Unidades relativas: Utilizar porcentajes, em y rem para que los elementos se ajusten al tamaño de la pantalla.
171
Q

¿Qué son las pautas de contenido accesible (WCAG)?

A

Las WCAG son un conjunto de pautas desarrolladas por el W3C que establecen los requisitos para hacer que el contenido web sea accesible a personas con discapacidades. Los tres principios fundamentales son:

  • Perceptible: La información y la interfaz de usuario deben ser presentadas de manera que los usuarios puedan percibirlas.
  • Operable: Los componentes y la navegación deben ser operables.
  • Comprensible: La información y la interfaz de usuario deben ser fáciles de entender.
  • Robusta: El contenido debe ser interpretable por una amplia variedad de agentes de usuario, incluyendo tecnologías asistivas.
172
Q

¿Cómo se optimiza una página web para dispositivos móviles?

A
  • Diseño responsivo: Adaptar el diseño a diferentes tamaños de pantalla.
  • Velocidad de carga: Minimizar el tamaño de las imágenes, comprimir archivos CSS y JavaScript, utilizar la caché del navegador.
  • Experiencia táctil: Asegurar que los elementos sean lo suficientemente grandes para ser tocados.
  • Orientación: Optimizar el diseño para ambas orientaciones (vertical y horizontal).
173
Q

¿Cuáles son los errores más comunes en el diseño web que afectan la usabilidad y accesibilidad?

A
  • Falta de contraste de colores: Dificulta la lectura para personas con baja visión.
  • Ausencia de texto alternativo para imágenes: Impide que los usuarios de lectores de pantalla comprendan el contenido de las imágenes.
  • Enlaces sin texto descriptivo: No indican claramente a dónde lleva el enlace.
  • Falta de encabezados semánticos: Dificulta la navegación y la comprensión de la estructura de la página.
  • Contenido demasiado denso: Hace que la página sea difícil de leer y navegar.
  • Formularios mal diseñados: No proporcionan suficiente retroalimentación al usuario y pueden ser difíciles de completar.
  • Falta de accesibilidad al teclado: No todos los usuarios pueden utilizar un ratón.
  • Contenido flash: No es accesible para muchos usuarios y dispositivos.
174
Q

¿Qué es código legado?

A
  • Definición: Código fuente que ha sido desarrollado y mantenido durante un período prolongado, a menudo con tecnologías obsoletas o sin una documentación adecuada.
  • Características: Dificultad para entender, mantener y modificar, a menudo con una deuda técnica acumulada.
175
Q

¿Por qué es importante trabajar con código legado?

A
  • Mantenimiento: Muchas aplicaciones críticas dependen de código legado, por lo que es necesario mantenerlo para garantizar su funcionamiento.
  • Evolución: A medida que cambian los requisitos del negocio, es necesario adaptar el código legado para satisfacer las nuevas necesidades.
  • Migración: En algunos casos, es necesario migrar el código legado a una nueva plataforma o tecnología.
176
Q

¿Cuáles son los desafíos de trabajar con código legado?

A
  • Falta de documentación: La documentación puede ser escasa, obsoleta o inexistente.
  • Tecnologías obsoletas: El código puede estar escrito en lenguajes de programación o utilizar frameworks que ya no se mantienen.
  • Dependencias complejas: El código puede tener muchas dependencias con otros sistemas o componentes.
  • Falta de pruebas: Puede no haber pruebas unitarias o de integración para garantizar la calidad del código.
  • Dificultad para entender el código: La estructura del código puede ser compleja y difícil de seguir.
177
Q

¿Cuáles son las estrategias para trabajar con código legado?

A
  • Comprender el código:
    • Leer el código: Analizar el código línea por línea para entender su funcionamiento.
    • Crear diagramas: Visualizar la estructura del código con diagramas de flujo o diagramas de clases.
    • Hacer preguntas: Consultar a los desarrolladores originales o a otros expertos si es posible.
  • Agregar pruebas:
    • Pruebas unitarias: Verificar el funcionamiento de las unidades individuales de código.
    • Pruebas de integración: Verificar la interacción entre diferentes componentes del sistema.
  • Refactorizar el código:
    • Mejorar la estructura: Simplificar el código y hacerlo más legible.
    • Eliminar código duplicado: Reducir la complejidad y mejorar el mantenimiento.
    • Introducir patrones de diseño: Aplicar patrones de diseño para mejorar la organización del código.
  • Migrar gradualmente:
    • Modularizar el código: Dividir el código en módulos más pequeños y fáciles de gestionar.
    • Reemplazar componentes gradualmente: Reemplazar los componentes más problemáticos o obsoletos.
  • Utilizar herramientas:
    • Herramientas de análisis de código: Identificar problemas de calidad en el código.
    • Herramientas de refactorización: Automatizar tareas de refactorización.
178
Q

¿Cuáles son las mejores prácticas para trabajar con código legado?

A
  • Comprometerse con pequeños cambios: Evitar realizar cambios drásticos que puedan introducir nuevos errores.
  • Realizar pruebas exhaustivas: Asegurarse de que los cambios no rompan la funcionalidad existente.
  • Documentar los cambios: Mantener la documentación actualizada para facilitar el mantenimiento futuro.
  • Colaborar con otros desarrolladores: Discutir las decisiones de diseño y obtener feedback.
  • Utilizar un sistema de control de versiones: Facilitar la gestión de los cambios y la colaboración en equipo.
179
Q

¿Qué es la deuda técnica y cómo se relaciona con el código legado?

A

La deuda técnica es como un préstamo que tomamos en el desarrollo de software. Se acumula cuando se prioriza la entrega rápida de funcionalidades sobre la calidad del código. Esta deuda se manifiesta en:

  • Código difícil de mantener: Código mal estructurado, duplicado o con poca documentación.
  • Falta de pruebas: Ausencia de pruebas unitarias o de integración.
  • Tecnologías obsoletas: Uso de tecnologías que ya no se soportan.
  • Diseño pobre: Falta de patrones de diseño o principios SOLID.
    El código legado es un gran contribuyente a la deuda técnica, ya que a menudo se ha escrito sin seguir las mejores prácticas de desarrollo.
180
Q

¿Cuáles son las principales diferencias entre refactorizar y reescribir código legado?

A
  • Refactorizar: Implica mejorar la estructura interna del código sin cambiar su comportamiento externo. Se busca mejorar la legibilidad, mantenibilidad y rendimiento del código.
  • Reescribir: Significa crear una nueva versión del código desde cero, manteniendo la misma funcionalidad pero utilizando tecnologías y arquitecturas más modernas.
    Cuándo refactorizar: Cuando el código es funcional pero difícil de mantener y entender.
    Cuándo reescribir: Cuando el código está tan deteriorado que refactorizar no es viable o cuando se necesita una nueva arquitectura para cumplir con nuevos requisitos.
181
Q

¿Cómo se puede identificar el código candidato para refactorización?

A
  • Código duplicado: Secciones de código que se repiten en diferentes partes del sistema.
  • Funciones demasiado largas: Funciones que realizan demasiadas tareas.
  • Variables con nombres poco claros: Nombres de variables que no reflejan su propósito.
  • Falta de comentarios: Secciones de código sin explicación.
  • Complejidad ciclomática alta: Código con muchas condiciones y bucles anidados.
  • Bajo nivel de cobertura de pruebas: Secciones de código sin pruebas unitarias.
182
Q

¿Qué herramientas son útiles para trabajar con código legado en diferentes lenguajes de programación?

A
  • Herramientas de análisis de código estático: Identifican problemas de calidad en el código, como posibles errores, código duplicado y falta de cobertura de pruebas. Ejemplos: SonarQube, Checkstyle, Pylint.
  • Herramientas de refactorización: Automatizan tareas de refactorización como renombrar variables, extraer métodos y cambiar la firma de métodos. Ejemplos: IntelliJ IDEA, Visual Studio Code.
  • Debuggers: Ayudan a identificar y corregir errores en el código.
    Herramientas de versionamiento: Facilitan la gestión de los cambios en el código. Ejemplos: Git, SVN.
183
Q

¿Cómo se puede mitigar el riesgo de introducir nuevos errores al trabajar con código legado?

A
  • Pruebas exhaustivas: Crear pruebas unitarias y de integración para garantizar que los cambios no rompan la funcionalidad existente.
  • Refactorizar en pequeños pasos: Realizar cambios incrementales y verificar que el código sigue funcionando correctamente después de cada cambio.
  • Utilizar un sistema de control de versiones: Permitir revertir los cambios si es necesario.
    Colaborar con otros desarrolladores: Discutir los cambios con otros miembros del equipo para obtener feedback.
  • Automatizar las pruebas: Ejecutar las pruebas de forma regular para detectar cualquier regresión.
184
Q

¿Qué es Scrum?

A

Es un marco de trabajo ágil que divide el proyecto en iteraciones cortas llamadas sprints, con el objetivo de entregar software funcional de forma incremental.

185
Q

¿Cuáles son los roles principales en Scrum?

A

Product Owner (define el producto), Scrum Master (facilita el proceso) y el Equipo de Desarrollo (desarrolla el producto).

186
Q

¿Qué es un sprint en Scrum?

A

Un período de tiempo fijo (generalmente de 2 a 4 semanas) durante el cual el equipo se compromete a completar un conjunto de trabajo.

187
Q

¿Qué es el backlog de producto y el backlog de sprint en Scrum?

A

El backlog de producto es una lista priorizada de todas las características y funcionalidades que se desean en el producto. El backlog de sprint es una selección de elementos del backlog de producto que se trabajarán en un sprint específico.

188
Q

¿Qué es la reunión diaria Scrum (daily scrum)?

A

Una reunión breve y diaria donde el equipo sincroniza sus esfuerzos, identifica impedimentos y planifica el trabajo del día.

189
Q

¿Qué es el pair programming?

A

Una práctica ágil en la que dos programadores trabajan juntos en una misma estación de trabajo, compartiendo un teclado y un monitor.

190
Q

¿Cuáles son los beneficios del pair programming?

A

Mejora la calidad del código, facilita la transferencia de conocimiento, aumenta la productividad y fomenta la colaboración.

191
Q

¿Cuáles son los roles en pair programming?

A

El conductor (escribe el código) y el navegante (revisa el código y sugiere mejoras).

192
Q

¿Qué es Extreme Programming (XP)?

A

Una metodología ágil que enfatiza la simplicidad, la comunicación, el feedback y el coraje.

193
Q

¿Cuáles son las prácticas clave de XP?

A

Planning game, small releases, simple design, pair programming, test-driven development, refactoring, coding standards, continuous integration, collective ownership, customer involvement, 40-hour week.

194
Q

¿Qué es el test-driven development (TDD)?

A

Una práctica de XP donde las pruebas se escriben antes de escribir el código, guiando el desarrollo.

195
Q

¿Qué es Kanban?

A

Un método visual para gestionar el flujo de trabajo, enfatizando la entrega continua y la mejora continua.

196
Q

¿Cuáles son los elementos clave de Kanban?

A

Tablero Kanban (con columnas como To Do, In Progress, Done), tarjetas (representan las tareas), límites de trabajo en progreso (WIP) y el ciclo de mejora continua.

197
Q

¿Cuál es la diferencia entre Kanban y Scrum?

A

Kanban es más flexible y no tiene iteraciones fijas como los sprints en Scrum. Kanban se enfoca en el flujo de trabajo continuo, mientras que Scrum se enfoca en entregar funcionalidades en intervalos regulares.

198
Q

¿Cuáles son las ventajas y desventajas de cada metodología ágil?

A
  • Scrum:
    • Ventajas: Gran flexibilidad, enfoque en el cliente, mejora continua, entrega rápida de valor.
    • Desventajas: Requiere un compromiso fuerte del equipo, puede ser difícil de escalar a grandes equipos o proyectos complejos.
  • Kanban:
    • Ventajas: Muy flexible, fácil de implementar, visualiza el flujo de trabajo, mejora la eficiencia.
    • Desventajas: Puede carecer de estructura para equipos nuevos, requiere disciplina para mantener el tablero actualizado.
  • XP:
    • Ventajas: Mejora la calidad del código, fomenta la colaboración, promueve la responsabilidad individual.
    • Desventajas: Requiere una alta disciplina del equipo, puede ser difícil de adoptar en entornos corporativos.
199
Q

¿Cómo se elige la metodología ágil adecuada para un proyecto?

A

La elección depende de varios factores:

  • Tamaño del equipo: Scrum es más adecuado para equipos pequeños y medianos, mientras que Kanban puede funcionar mejor para equipos más grandes.
  • Complejidad del proyecto: Proyectos complejos pueden beneficiarse de la estructura de Scrum, mientras que proyectos más simples pueden ser gestionados con Kanban.
  • Cultura organizacional: La metodología debe adaptarse a la cultura y valores de la organización.
  • Necesidades del cliente: Los clientes con requisitos cambiantes pueden preferir la flexibilidad de Kanban.
  • Experiencia del equipo: Si el equipo tiene experiencia en una metodología, puede ser más fácil continuar con ella.
200
Q

¿Qué es el scaling ágil y cuáles son los frameworks más populares?

A

El scaling ágil se refiere a la aplicación de principios ágiles a grandes equipos y organizaciones. Los frameworks más populares son:

  • SAFe (Scaled Agile Framework): Ofrece una estructura detallada para escalar Scrum a gran escala, con roles y responsabilidades claramente definidos.
  • LeSS (Large-Scale Scrum): Propone dos variantes principales (LeSS Basic y LeSS Huge) que se adaptan a diferentes tamaños de equipos y organizaciones.
201
Q

¿Cómo se puede medir el éxito de un proyecto ágil?

A
  • Entrega de valor: ¿Se están entregando las funcionalidades más importantes para el cliente?
  • Satisfacción del cliente: ¿El cliente está satisfecho con el producto?
  • Velocidad del equipo: ¿El equipo está mejorando su velocidad de entrega?
  • Calidad del producto: ¿El producto cumple con los estándares de calidad?
  • Adaptabilidad al cambio: ¿El equipo se adapta rápidamente a los cambios de requisitos?
202
Q

¿Cuáles son las principales herramientas para implementar metodologías ágiles?

A
  • Entrega de valor: ¿Se están entregando las funcionalidades más importantes para el cliente?
  • Satisfacción del cliente: ¿El cliente está satisfecho con el producto?
  • Velocidad del equipo: ¿El equipo está mejorando su velocidad de entrega?
  • Calidad del producto: ¿El producto cumple con los estándares de calidad?
  • Adaptabilidad al cambio: ¿El equipo se adapta rápidamente a los cambios de requisitos?
203
Q

¿Qué es el desarrollo backend?

A

El desarrollo backend se encarga de la lógica de una aplicación web, es decir, de todo lo que ocurre en el servidor. Incluye la gestión de bases de datos, la creación de APIs y la implementación de la lógica empresarial.

204
Q

¿Cuál es la diferencia entre frontend y backend?

A

El frontend es la parte de la aplicación que el usuario ve e interactúa (la interfaz de usuario). El backend es la parte oculta que procesa las solicitudes del usuario y devuelve las respuestas.

205
Q

¿Cuáles son los lenguajes de programación más utilizados en backend?

A

Python (con frameworks como Django y Flask), Java (con Spring), JavaScript (con Node.js), Ruby (con Ruby on Rails), PHP (con Laravel), Go.

206
Q

¿Qué es una API?

A

Una interfaz de programación de aplicaciones que permite que diferentes sistemas se comuniquen entre sí.

207
Q

¿Qué es un ORM?

A

Un ORM (Object-Relational Mapper) es una herramienta que permite a los desarrolladores trabajar con bases de datos relacionales utilizando objetos en el lenguaje de programación.

208
Q

¿Qué es un contenedor?

A

Un entorno aislado que encapsula una aplicación y sus dependencias, permitiendo ejecutarla en cualquier máquina que tenga un motor de contenedores.

209
Q

¿Qué es REST?

A

REST (Representational State Transfer) es un estilo arquitectónico para crear servicios web que se basan en el protocolo HTTP. Se caracteriza por ser simple, escalable y fácil de entender.

210
Q

¿Cuáles son los principios fundamentales de REST?

A

Cliente-servidor, sin estado, cachéable, interfaz uniforme, sistema en capas.

211
Q

¿Qué es un recurso en REST?

A

Un recurso es cualquier entidad o conjunto de entidades que pueden ser identificados y manipulados. En REST, los recursos se representan mediante URIs (Uniform Resource Identifiers).

212
Q

¿Cuáles son los métodos HTTP más utilizados en REST?

A

Respuesta: GET (obtener un recurso), POST (crear un recurso), PUT (actualizar un recurso completamente), DELETE (eliminar un recurso), PATCH (actualizar parcialmente un recurso).

213
Q

¿Cuál es la diferencia entre PUT y PATCH?

A

PUT reemplaza completamente un recurso existente con una nueva representación, mientras que PATCH actualiza solo las partes especificadas de un recurso.

214
Q

¿Cuál es el formato de datos más común en REST?

A

JSON (JavaScript Object Notation) es el formato de datos más utilizado debido a su legibilidad y facilidad de procesamiento.

215
Q

¿Qué es una versión en una API REST?

A

Una versión de una API indica cambios en la estructura de los recursos o en los métodos HTTP disponibles.

216
Q

¿Cómo se gestionan los errores en una API REST?

A

Se utilizan códigos de estado HTTP (por ejemplo, 404 Not Found, 500 Internal Server Error) y cuerpos de respuesta con mensajes de error detallados.

217
Q

¿Qué es la autenticación y autorización en REST?

A

La autenticación verifica la identidad del usuario, mientras que la autorización determina qué acciones puede realizar un usuario autenticado.

218
Q

¿Cuáles son las herramientas más utilizadas para desarrollar APIs REST?

A

Frameworks como Express.js (Node.js), Django REST framework (Python), Spring Boot (Java).

219
Q

¿Qué es Swagger?

A

Una especificación y conjunto de herramientas para diseñar, construir, documentar y consumir APIs REST.

220
Q

¿Cómo se asegura una API REST?

A

Utilizando HTTPS para cifrar la comunicación, implementando mecanismos de autenticación y autorización robustos, protegiéndose contra ataques como inyección SQL y XSS.

221
Q

¿Qué es un token JWT?

A

Un JSON Web Token es un estándar para transmitir información de forma segura entre dos partes como un objeto JSON. Se utiliza comúnmente para la autenticación en APIs REST.

222
Q

¿Qué es HATEOAS?

A

HATEOAS (Hypertext As The Engine Of Application State) es un principio clave en REST que significa que la aplicación del cliente debe descubrir dinámicamente cómo interactuar con el servidor mediante los enlaces (hipervínculos) proporcionados en las respuestas. En otras palabras, la aplicación cliente no necesita tener un conocimiento previo de la estructura de la API, ya que la información sobre las acciones disponibles se incluye en las respuestas del servidor.
Ejemplo: Imagina que estás consultando un recurso “usuario”. En la respuesta, además de los datos del usuario, recibirías enlaces a recursos relacionados, como “pedidos”, “direcciones”, etc. Esto permite que el cliente navegue por la API de forma intuitiva y descubra nuevas funcionalidades a medida que interactúa con el sistema.

223
Q

¿Cuáles son las mejores prácticas para diseñar una API REST?

A
  • Verbos HTTP: Utilizar los verbos HTTP correctamente (GET, POST, PUT, DELETE, PATCH) para representar las acciones sobre los recursos.
  • Recursos bien definidos: Identificar claramente los recursos y utilizar URIs intuitivas para representarlos.
  • Formato de respuesta consistente: Utilizar un formato de respuesta consistente (JSON, XML) y mantener una estructura clara y coherente.
  • Gestión de errores: Implementar una estrategia clara para manejar errores y devolver mensajes de error informativos.
  • Versionado: Implementar un mecanismo de versionado para permitir cambios en la API sin afectar a los clientes existentes.
  • Seguridad: Proteger la API utilizando HTTPS, autenticación y autorización adecuadas, y mitigando vulnerabilidades comunes.
  • Documentación: Proporcionar una documentación clara y completa de la API, utilizando herramientas como Swagger o OpenAPI.
224
Q

¿Cómo se realiza la paginación en una API REST?

A

La paginación es necesaria cuando se tienen grandes conjuntos de datos y se desea evitar sobrecargar al cliente con demasiada información en una sola respuesta. Las formas más comunes de implementar la paginación son:

  • Paginación basada en offset: Se especifica un offset (posición inicial) y un límite (número de elementos).
  • Paginación basada en cursores: Se utiliza un cursor (un valor único que identifica el último elemento de la página anterior) para solicitar la siguiente página.
  • Enlaces de paginación: Se incluyen enlaces a la primera página, última página, página siguiente y página anterior directamente en la respuesta.
225
Q

¿Qué es el caching en una API REST?

A

El caching es una técnica que consiste en almacenar temporalmente los resultados de una solicitud para servirlos a futuras solicitudes idénticas sin necesidad de volver a realizar la misma operación en el servidor. Esto mejora el rendimiento y reduce la carga en el servidor.

Los tipos de caché más comunes son:

  • Cache del navegador: El navegador almacena las respuestas en caché para evitar volver a descargar recursos estáticos (imágenes, CSS, JavaScript).
  • Cache intermedio: Un servidor intermedio (como Varnish) almacena las respuestas de la API para servirlas a múltiples clientes.
  • Cache del lado del servidor: El servidor de la API almacena en caché los resultados de las consultas a la base de datos u otros servicios externos.
226
Q

¿Cómo se gestionan los cambios en una API REST?

A

Los cambios en una API REST deben gestionarse con cuidado para minimizar el impacto en los clientes existentes. Algunas estrategias comunes son:

  • Versionado: Asignar una versión a cada cambio significativo en la API y permitir que los clientes especifiquen la versión que desean utilizar.
  • Deprecación: Marcar los endpoints obsoletos como deprecados y proporcionar información sobre cuándo se eliminarán.
  • Compatibilidad hacia atrás: Mantener la compatibilidad hacia atrás siempre que sea posible, evitando cambios que rompan las aplicaciones existentes.
  • Comunicación: Informar a los desarrolladores sobre los cambios de la API con anticipación y proporcionar documentación detallada.
227
Q

¿Qué son los microservicios?

A

Son una arquitectura de software que descompone una aplicación en pequeños servicios independientes, cada uno con su propia lógica y base de datos. Estos servicios se comunican entre sí a través de APIs bien definidas.

228
Q

¿Cuáles son las ventajas de los microservicios?

A

Mayor escalabilidad, mayor facilidad de desarrollo y despliegue, mayor resiliencia, tecnología heterogénea, equipos autónomos.

229
Q

¿Cuáles son las desventajas de los microservicios?

A

Mayor complejidad, mayor sobrecarga operativa, mayor dificultad en la depuración, consistencia de datos, testing.

230
Q

¿Cómo se descompone una aplicación monolítica en microservicios?

A

Identificando los límites del contexto, descomponiendo por dominios, considerando factores como la autonomía y la escalabilidad.

231
Q

¿Cómo se comunican los microservicios?

A

Principalmente a través de APIs REST, pero también se utilizan protocolos como gRPC, mensajería (Kafka, RabbitMQ) y eventos.

232
Q

¿Qué es un contrato en el contexto de los microservicios?

A

Un acuerdo explícito entre los consumidores y proveedores de un servicio, definiendo la estructura de las solicitudes y respuestas.

233
Q

¿Qué es la orquestación y la coreografía en microservicios?

A

La orquestación centraliza la coordinación de los servicios, mientras que la coreografía distribuye la coordinación entre los servicios.

234
Q

¿Cómo se gestiona la falla en un sistema de microservicios?

A

Circuit breakers, retry logic, bulkheads, degradación de servicios.

235
Q

¿Cómo se escala un sistema de microservicios?

A

Escalando individualmente cada microservicio según su demanda, utilizando contenedores y orquestadores como Kubernetes.

236
Q

¿Cómo se asegura la consistencia de datos en un sistema distribuido?

A

Eventual consistency, sagas, transacciones distribuidas.

237
Q

¿Cuáles son los patrones de diseño comunes en microservicios?

A

Los patrones de diseño en microservicios ayudan a resolver problemas comunes y a mejorar la arquitectura. Algunos de los más comunes son:

  • Circuit Breaker: Evita que un servicio se colapse por llamadas fallidas a otros servicios, implementando un mecanismo de tiempo de espera y fallback.
  • Bulkhead: Aislamiento de componentes críticos para evitar que una falla en un componente afecte a todo el sistema.
  • Rate Limiting: Limita el número de solicitudes a un servicio para evitar sobrecargas.
    API Gateway: Actúa como punto de entrada único para los clientes, simplificando la comunicación y aplicando políticas transversales.
  • Saga: Gestiona transacciones distribuidas que involucran múltiples servicios, garantizando la consistencia de los datos.
238
Q

¿Cómo se realiza el testing en un sistema de microservicios?

A

El testing en microservicios es fundamental para garantizar la calidad y fiabilidad. Los principales tipos de testing son:

  • Unitario: Se enfoca en probar componentes individuales de cada microservicio.
  • Integración: Verifica la interacción entre diferentes microservicios.
  • Contrato: Valida que los contratos entre servicios se cumplan.
  • Extremo a extremo (E2E): Simula el flujo completo de una solicitud a través de múltiples microservicios.
  • Carga: Evalúa el rendimiento del sistema bajo diferentes cargas de trabajo.
    Estrategias y Herramientas:
  • Pirámide de testing: Priorizar tests unitarios, luego integración y finalmente E2E.
  • Automatización: Utilizar herramientas como JUnit, TestNG, Jest, Cypress, Postman para automatizar los tests.
  • Mock y stubs: Simular el comportamiento de otros servicios durante las pruebas.
  • Contenedores: Usar Docker para crear entornos de testing aislados.
  • Orquestadores: Utilizar Kubernetes para gestionar múltiples contenedores y ejecutar tests.
239
Q

¿Qué es el observabilidad en microservicios?

A

La observabilidad es clave para entender el comportamiento de un sistema de microservicios. Se basa en tres pilares:

  • Logs: Registros detallados de eventos y errores.
  • Métricas: Métricas clave sobre el rendimiento y la salud del sistema (latencia, tasa de errores, uso de recursos).
  • Tracing: Seguimiento de las solicitudes a través de múltiples servicios.
    Herramientas:
  • Prometheus: Para recolectar métricas.
  • Grafana: Para visualizar métricas.
  • Jaeger: Para realizar tracing distribuido.
240
Q

¿Cómo se asegura la seguridad en un sistema de microservicios?

A

La seguridad es una preocupación importante. Algunas medidas a considerar son:

  • Autenticación y autorización: Implementar mecanismos robustos para identificar y autorizar a los usuarios.
  • Cifrado: Proteger los datos en tránsito y en reposo.
  • Web Application Firewall (WAF): Proteger contra ataques comunes.
  • Escaneo de vulnerabilidades: Realizar escaneos regulares.
  • Gestión de secretos: Almacenar de forma segura las credenciales.
241
Q

¿Cuáles son los desafíos más comunes al adoptar microservicios?

A
  • Complejidad: Mayor cantidad de servicios y dependencias.
  • Consistencia de datos: Garantizar la consistencia de los datos en un sistema distribuido.
  • Depuración: Identificar y solucionar problemas en un sistema distribuido.
  • Deployment: El despliegue de microservicios requiere herramientas y procesos especializados.
  • Gestión de equipos: Coordinar equipos autónomos trabajando en diferentes servicios.
242
Q

¿Qué es Spring Boot y cuáles son sus principales ventajas?

A

Spring Boot es un framework que simplifica el desarrollo de aplicaciones Java, proporcionando una configuración automática y una rápida puesta en marcha. Sus ventajas incluyen: configuración mínima, integración con muchas tecnologías, desarrollo rápido, y una gran comunidad.

243
Q

¿Cuál es la diferencia entre Spring y Spring Boot?

A

Spring es un framework modular que ofrece una amplia gama de funcionalidades para desarrollar aplicaciones Java empresariales. Spring Boot, por otro lado, es una plataforma basada en Spring que proporciona una forma más rápida y fácil de crear aplicaciones Spring.

244
Q

¿Qué es Maven y para qué se utiliza en proyectos Java?

A

Maven es una herramienta de gestión de proyectos que automatiza la construcción, la documentación y la distribución de proyectos Java. Se utiliza para gestionar dependencias, compilar código, ejecutar pruebas y empaquetar aplicaciones.

245
Q

¿Qué es JPA y cuál es su relación con Hibernate?

A

JPA (Java Persistence API) es una especificación para la persistencia de objetos en bases de datos relacionales. Hibernate es una implementación de referencia de JPA que proporciona una forma fácil de mapear objetos Java a tablas de base de datos.

246
Q

¿Cómo se crea un proyecto Spring Boot?

A

Se puede crear un proyecto Spring Boot utilizando la herramienta Spring Initializr, que genera un proyecto básico con las dependencias necesarias.

247
Q

¿Qué es un controlador en Spring MVC?

A

Un controlador en Spring MVC es una clase anotada con @Controller que maneja las solicitudes HTTP y devuelve una respuesta.

248
Q

¿Qué es un servicio en Spring?

A

Un servicio en Spring es una clase anotada con @Service que contiene la lógica de negocio de la aplicación.

249
Q

¿Cómo se configura una base de datos en Spring Boot?

A

Se configura una base de datos en Spring Boot a través de las propiedades de aplicación o utilizando archivos de configuración externos. Spring Boot proporciona soporte para diversas bases de datos.

250
Q

¿Qué es Spring Data JPA y cómo simplifica el acceso a la base de datos?

A

Spring Data JPA es una abstracción sobre JPA que simplifica el acceso a la base de datos a través de repositorios. Permite realizar operaciones CRUD de forma sencilla y crear consultas personalizadas.

251
Q

¿Cómo se realizan pruebas unitarias en Spring Boot?

A

Se utilizan frameworks de testing como JUnit y Mockito para crear pruebas unitarias que verifiquen la funcionalidad de clases individuales.

252
Q

¿Qué es un perfil en Spring Boot?

A

Un perfil en Spring Boot permite tener diferentes configuraciones para diferentes entornos (desarrollo, pruebas, producción).

253
Q

¿Cómo se despliega una aplicación Spring Boot?

A

Una aplicación Spring Boot se puede desplegar en un servidor de aplicaciones como Tomcat, WildFly o en un contenedor como Docker. También se puede desplegar en la nube utilizando plataformas como AWS, GCP o Azure.

254
Q

¿Qué es Spring Security y para qué se utiliza?

A

Spring Security es un framework de seguridad que proporciona una forma fácil de agregar autenticación y autorización a aplicaciones Spring.

255
Q

¿Qué es Spring Cloud y cuáles son sus principales componentes?

A

Spring Cloud es un conjunto de herramientas que simplifica el desarrollo de aplicaciones distribuidas y basadas en microservicios. Algunos de sus componentes incluyen: Spring Cloud Config, Spring Cloud Netflix, Spring Cloud Gateway.

256
Q

¿Qué es el patrón Repository en Spring Data JPA?

A

El patrón Repository en Spring Data JPA proporciona una interfaz para acceder a los datos en la base de datos. Spring Data JPA genera automáticamente la implementación de estos repositorios a partir de las interfaces definidas.