0% encontró este documento útil (0 votos)
22 vistas12 páginas

Examen

El documento proporciona una guía completa sobre Git, explicando comandos esenciales para la gestión de repositorios, así como los principios SOLID en el diseño de software y su importancia. También se abordan patrones de diseño y el marco de trabajo Scrum, destacando roles y prácticas clave. En conjunto, el contenido ofrece un recurso valioso para desarrolladores que buscan mejorar sus habilidades en control de versiones, diseño de software y gestión de proyectos ágiles.

Cargado por

Fernando Fuentes
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
22 vistas12 páginas

Examen

El documento proporciona una guía completa sobre Git, explicando comandos esenciales para la gestión de repositorios, así como los principios SOLID en el diseño de software y su importancia. También se abordan patrones de diseño y el marco de trabajo Scrum, destacando roles y prácticas clave. En conjunto, el contenido ofrece un recurso valioso para desarrolladores que buscan mejorar sus habilidades en control de versiones, diseño de software y gestión de proyectos ágiles.

Cargado por

Fernando Fuentes
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

1. ¿Qué es Git?

Respuesta: Git es un sistema de control de versiones distribuido que permite gestionar proyectos y el historial de cambios de los
archivos. Es especialmente útil para colaborar en proyectos de desarrollo de software.

2. ¿Cómo se crea un nuevo repositorio en Git?


Respuesta:

bash
Copiar
git init

Este comando inicializa un nuevo repositorio Git vacío en el directorio actual.

3. ¿Cómo se clona un repositorio existente?


Respuesta:

bash
Copiar
git clone <url-del-repositorio>

Este comando crea una copia local de un repositorio remoto.

4. ¿Cómo ver el estado de los archivos en un repositorio?


Respuesta:

bash
Copiar
git status

Este comando muestra el estado de los archivos en el repositorio, indicando si hay archivos modificados, sin seguimiento o listos para
hacer commit.

5. ¿Cómo agregar cambios al área de preparación (staging area)?


Respuesta:

bash
Copiar
git add <archivo>

O para agregar todos los archivos modificados:

bash
Copiar
git add .

Este comando coloca los archivos modificados en el área de preparación para hacer un commit.

6. ¿Cómo hacer un commit con un mensaje?


Respuesta:

bash
Copiar
git commit -m "Mensaje del commit"

Este comando guarda los cambios agregados al área de preparación en el historial del repositorio, junto con un mensaje descriptivo.
7. ¿Cómo ver el historial de commits?
Respuesta:

bash
Copiar
git log

Este comando muestra una lista de todos los commits realizados en el repositorio, con detalles como el autor, la fecha y el mensaje del
commit.

8. ¿Cómo ver las diferencias entre los cambios?


Respuesta:

bash
Copiar
git diff

Este comando muestra las diferencias entre los archivos modificados y el último commit.

9. ¿Cómo hacer un pull para obtener los cambios del repositorio remoto?
Respuesta:

bash
Copiar
git pull

Este comando descarga y fusiona los cambios del repositorio remoto al repositorio local.

10. ¿Cómo hacer un push para subir los cambios al repositorio remoto?
Respuesta:

bash
Copiar
git push

Este comando envía los commits locales a un repositorio remoto.

11. ¿Cómo crear una nueva rama en Git?


Respuesta:

bash
Copiar
git branch <nombre-de-la-rama>

Este comando crea una nueva rama en el repositorio local.

12. ¿Cómo cambiar de rama?


Respuesta:

bash
Copiar
git checkout <nombre-de-la-rama>

Este comando te permite cambiar a la rama especificada.

13. ¿Cómo fusionar una rama con la rama principal (master o main)?
Respuesta:
bash
Copiar
git checkout main
git merge <nombre-de-la-rama>

Primero cambias a la rama principal (main o master) y luego fusionas la rama especificada en ella.

14. ¿Cómo eliminar una rama?


Respuesta:

bash
Copiar
git branch -d <nombre-de-la-rama>

Este comando elimina la rama especificada de manera local. Para forzar la eliminación de una rama no fusionada, puedes usar:

bash
Copiar
git branch -D <nombre-de-la-rama>

15. ¿Cómo descartar los cambios en un archivo no comprometido?


Respuesta:

bash
Copiar
git checkout -- <archivo>

Este comando descarta los cambios locales en el archivo especificado y lo deja como estaba en el último commit.

16. ¿Cómo ver las ramas disponibles en el repositorio?


Respuesta:

bash
Copiar
git branch

Este comando lista todas las ramas en el repositorio local.

17. ¿Cómo ver los archivos que han sido modificados desde el último commit?
Respuesta:

bash
Copiar
git diff

Este comando muestra las diferencias entre los archivos modificados y el último commit.

18. ¿Cómo agregar un archivo a un repositorio remoto?


Respuesta: Primero, agrega el archivo al área de preparación:

bash
Copiar
git add <archivo>

Luego, haz un commit:

bash
Copiar
git commit -m "Agregado archivo <archivo>"

Finalmente, haz un push para subir los cambios al repositorio remoto:

bash
Copiar
git push

19. ¿Cómo trabajar con un repositorio remoto?


Respuesta: Puedes agregar un repositorio remoto con:

bash
Copiar
git remote add origin <url-del-repositorio>

Este comando configura una dirección remota para que puedas realizar operaciones como git push y git pull.

20. ¿Cómo ver las diferencias entre ramas?


Respuesta:

bash
Copiar
git diff <rama1> <rama2>

Este comando muestra las diferencias entre dos ramas especificadas.

21. ¿Cómo ver la configuración de usuario de Git?


Respuesta:

bash
Copiar
git config --list

Este comando muestra todas las configuraciones de Git actuales, como el nombre de usuario y el correo electrónico.

2. ¿Cómo configurar tu nombre de usuario y correo electrónico en Git?


Respuesta:

bash
Copiar
git config --global user.name "Tu Nombre"
git config --global user.email "[email protected]"

Estos comandos configuran tu nombre y correo electrónico globalmente para todos los repositorios. Si deseas hacerlo solo para un
repositorio específico, omite la opción --global.

23. ¿Cómo ver las diferencias entre el repositorio local y el remoto?


Respuesta:

bash
Copiar
git fetch
git diff origin/main

Este comando descarga los cambios desde el repositorio remoto (git fetch) y luego muestra las diferencias entre tu rama local y la
remota (git diff origin/main).
24. ¿Cómo ver el historial de cambios en un archivo específico?
Respuesta:

bash
Copiar
git log <archivo>

Este comando muestra el historial de commits de un archivo específico.

25. ¿Cómo revertir un commit (hacerlo retroceder)?


Respuesta:

bash
Copiar
git revert <hash-del-commit>

Este comando crea un nuevo commit que deshace los cambios realizados en el commit especificado.

26. ¿Cómo deshacer un commit pero mantener los cambios localmente?


Respuesta:

bash
Copiar
git reset --soft HEAD~1

Este comando deshace el último commit pero mantiene los cambios en tu área de trabajo (sin borrarlos).

27. ¿Cómo deshacer un commit y los cambios realizados?


Respuesta:

bash
Copiar
git reset --hard HEAD~1

Este comando deshace el último commit y elimina los cambios realizados, dejando el repositorio como estaba antes.

28. ¿Cómo ver las ramas remotas?


Respuesta:

bash
Copiar
git branch -r

Este comando muestra las ramas que están disponibles en el repositorio remoto.

29. ¿Cómo ver la información sobre el repositorio remoto?


Respuesta:

bash
Copiar
git remote -v

Este comando muestra las URL de los repositorios remotos configurados.

30. ¿Cómo renombrar una rama?


Respuesta:
bash
Copiar
git branch -m <nombre-antiguo> <nombre-nuevo>

Este comando renombra la rama especificada.

31. ¿Cómo crear una etiqueta (tag) en Git?


Respuesta:

bash
Copiar
git tag <nombre-de-la-etiqueta>

Este comando crea una nueva etiqueta en el último commit. Puedes añadir un mensaje con la opción -a:

bash
Copiar
git tag -a <nombre-de-la-etiqueta> -m "Mensaje de la etiqueta"

32. ¿Cómo ver las etiquetas (tags) en Git?


Respuesta:

bash
Copiar
git tag

Este comando lista todas las etiquetas en el repositorio.

33. ¿Cómo eliminar una etiqueta (tag)?


Respuesta:

bash
Copiar
git tag -d <nombre-de-la-etiqueta>

Este comando elimina una etiqueta localmente. Si también quieres eliminarla en el repositorio remoto:

bash
Copiar
git push --delete origin <nombre-de-la-etiqueta>

34. ¿Cómo hacer un stash (guardar cambios temporalmente)?


Respuesta:

bash
Copiar
git stash

Este comando guarda los cambios no comprometidos en un "stash" (almacenamiento temporal). Para aplicar los cambios guardados:

bash
Copiar
git stash apply

Y para eliminar los cambios guardados en el stash:

bash
Copiar
git stash drop
5. ¿Cómo crear un archivo de parche (diff) de tus cambios?
Respuesta:

bash
Copiar
git diff > cambios.patch

Este comando guarda las diferencias entre tus archivos y el último commit en un archivo .patch.

36. ¿Cómo buscar un commit específico por mensaje?


Respuesta:

bash
Copiar
git log --grep="mensaje"

Este comando busca en el historial de commits los que contengan el texto especificado en el mensaje de commit.

7. ¿Cómo hacer un "cherry-pick" de un commit (aplicar un commit específico de otra rama)?


Respuesta:

bash
Copiar
git cherry-pick <hash-del-commit>

Este comando aplica un commit específico desde otra rama en la rama actual.

38. ¿Cómo obtener un archivo de un commit anterior?


Respuesta:

bash
Copiar
git checkout <hash-del-commit> -- <archivo>

Este comando te permite obtener un archivo específico de un commit anterior sin afectar el resto del repositorio.

39. ¿Cómo obtener más información sobre un commit específico?


Respuesta:

bash
Copiar
git show <hash-del-commit>

Este comando muestra detalles de un commit específico, incluyendo los cambios realizados.

40. ¿Cómo comparar dos ramas?


Respuesta:

bash
Copiar
git diff <rama1>..<rama2>

Este comando muestra las diferencias entre dos ramas especificadas.

41. ¿Cómo descartar los cambios no guardados en un archivo?


Respuesta:
bash
Copiar
git checkout -- <archivo>

Este comando restaura el archivo al estado del último commit, descartando los cambios no guardados.

SOLID

1. ¿Qué significa SOLID?


SOLID es un acrónimo que representa cinco principios de diseño de software:

• S: Single Responsibility Principle (Principio de Responsabilidad Única)


• O: Open/Closed Principle (Principio de Abierto/Cerrado)
• L: Liskov Substitution Principle (Principio de Sustitución de Liskov)
• I: Interface Segregation Principle (Principio de Segregación de Interfaces)
• D: Dependency Inversion Principle (Principio de Inversión de Dependencias)

2. ¿Qué es el Principio de Responsabilidad Única (SRP)?


El Principio de Responsabilidad Única establece que una clase debe tener una única razón para cambiar, lo que implica que debe tener
solo una responsabilidad. Si una clase tiene más de una responsabilidad, se vuelve más difícil de modificar y mantener.

Ejemplo:

• Una clase que maneja tanto la lógica de negocio como la persistencia de datos podría violar este principio. En lugar de eso,
deberíamos tener clases separadas: una para la lógica de negocio y otra para la persistencia.

3. ¿Qué es el Principio de Abierto/Cerrado (OCP)?


El Principio de Abierto/Cerrado establece que una clase debe estar abierta para la extensión pero cerrada para la modificación. Esto
significa que debemos poder agregar nuevas funcionalidades a una clase sin modificar su código original.

Ejemplo:

• En lugar de cambiar una clase cada vez que necesitamos agregar una nueva funcionalidad, podemos extenderla mediante
herencia o composición, o usar interfaces y clases abstractas para agregar nuevas implementaciones sin modificar el código
existente.

4. ¿Qué es el Principio de Sustitución de Liskov (LSP)?


El Principio de Sustitución de Liskov afirma que los objetos de una clase derivada deben poder reemplazar a los objetos de la clase base
sin alterar el comportamiento del sistema. Es decir, si una clase A es una clase base y B es una subclase de A, deberíamos poder usar
objetos de la clase B en lugar de A sin que se rompa el comportamiento esperado.

Ejemplo:

• Si tienes una clase Animal con un método hacerSonido(), una subclase Perro debería poder sustituir a Animal sin que
la aplicación deje de funcionar correctamente. Si Perro modifica el comportamiento de hacerSonido() de forma que no se
espera, violaría el LSP.

5. ¿Qué es el Principio de Segregación de Interfaces (ISP)?


El Principio de Segregación de Interfaces establece que una clase no debe verse obligada a implementar interfaces que no utiliza. En
lugar de tener interfaces grandes y monolíticas, es mejor tener interfaces más pequeñas y específicas.

Ejemplo:

• Si tienes una interfaz Empleado con métodos como trabajar(), vacaciones(), leerEmails(), y un Gerente
necesita implementar todos esos métodos, podríamos tener una interfaz más pequeña para cada conjunto de tareas. Un
Desarrollador podría implementar solo trabajar() y no leerEmails().
6. ¿Qué es el Principio de Inversión de Dependencias (DIP)?
El Principio de Inversión de Dependencias establece que las clases de alto nivel no deben depender de las clases de bajo nivel. Ambas
deben depender de abstracciones (interfaces o clases abstractas). Además, las abstracciones no deben depender de los detalles, sino que
los detalles deben depender de las abstracciones.

Ejemplo:

• Si una clase Factura depende directamente de una clase BaseDeDatos, estaríamos violando el DIP. Deberíamos abstraer la
interacción con la base de datos mediante una interfaz, y luego implementar la base de datos en una clase separada. Así,
Factura dependería de la interfaz y no de la implementación concreta.

7. ¿Por qué es importante aplicar los principios SOLID?


Aplicar los principios SOLID ayuda a:

• Mejorar la legibilidad y comprensión del código.


• Facilitar el mantenimiento y las modificaciones, ya que cada clase tiene una única responsabilidad.
• Promover la reutilización del código, especialmente a través de la extensibilidad sin necesidad de modificar clases existentes.
• Evitar dependencias rígidas entre clases, lo que facilita la introducción de nuevas funcionalidades sin afectar el sistema global.

8. ¿Cuáles son los beneficios de seguir el principio de Open/Closed?


El beneficio principal del principio Open/Closed es que puedes agregar nuevas funcionalidades a tu sistema sin afectar el
comportamiento ya existente. Esto reduce el riesgo de introducir errores y mejora la estabilidad del código base, ya que se minimiza la
necesidad de modificar clases que ya funcionan correctamente.

9. ¿Cuáles son algunos ejemplos comunes de violación de SOLID?


Algunos ejemplos comunes de violación de los principios SOLID incluyen:

• SRP: Una clase que maneja tanto la lógica de negocio como la persistencia de datos.
• OCP: Modificar una clase existente cada vez que se necesita agregar una nueva funcionalidad, en lugar de extenderla.
• LSP: Una subclase que no mantiene el comportamiento esperado de su clase base.
• ISP: Una clase que implementa métodos de interfaces que no necesita.
• DIP: Dependencia directa de clases de bajo nivel en lugar de interfaces o abstracciones.

10. ¿Cómo empezar a aplicar SOLID en un proyecto?


Para aplicar SOLID en un proyecto, se recomienda:

• Revisar la arquitectura del sistema y buscar áreas donde los principios SOLID puedan ser aplicados.
• Dividir las clases grandes y complejas en unidades más pequeñas con una única responsabilidad.
• Usar interfaces y clases abstractas para aplicar el principio de inversión de dependencias y mejorar la extensibilidad.
• Hacer pruebas regulares para asegurarse de que los cambios no rompan el sistema y que los principios SOLID se sigan
respetando.

PATRONES DE DISEÑO

Patrones creacionales: Se encargan de la creación de objetos de manera flexible y eficiente. Ejemplos incluyen:

• Singleton: Asegura que una clase tenga solo una instancia y proporciona un punto de acceso global a esa instancia.
• Factory Method: Permite a las subclases decidir qué clase de objeto crear.
• Abstract Factory: Proporciona una interfaz para crear familias de objetos relacionados sin especificar sus clases
concretas.
2. Patrones estructurales: Se centran en la composición de clases y objetos para formar estructuras más grandes. Ejemplos
incluyen:
• Adapter: Permite que dos interfaces incompatibles trabajen juntas.
• Composite: Permite tratar objetos individuales y composiciones de objetos de manera uniforme.
• Facade: Proporciona una interfaz simplificada a un conjunto complejo de interfaces.
3. Patrones de comportamiento: Se ocupan de la interacción entre objetos. Ejemplos incluyen:

• Observer: Permite que un objeto notifique a otros objetos sobre cambios de estado.
• Strategy: Permite elegir un algoritmo de manera dinámica durante la ejecución.
• Command: Encapsula una solicitud como un objeto, lo que permite parametrizar los clientes con diferentes
solicitudes.

SCRUM

1. ué es Scrum?
Respuesta: Scrum es un marco de trabajo ágil utilizado para gestionar proyectos complejos, principalmente en el desarrollo de software.
Scrum se basa en la colaboración, la mejora continua y la entrega de productos de valor de manera incremental. Es uno de los marcos más
populares dentro de las metodologías ágiles.

2. ¿Cuáles son los roles en Scrum?


Respuesta: Scrum tiene tres roles principales:

• Product Owner (Propietario del Producto): Es responsable de definir y priorizar las características del producto.
• Scrum Master: Ayuda al equipo a seguir los principios de Scrum, elimina obstáculos y facilita las reuniones.
• Equipo de Desarrollo: Son los profesionales encargados de crear el producto entregable. Trabajan de forma autónoma y
autoorganizada.

3. ¿Qué es un Sprint en Scrum?


Respuesta: Un Sprint es un ciclo de trabajo de duración fija, generalmente de 2 a 4 semanas, donde se desarrolla una parte del producto.
Al final de cada Sprint, se debe tener un incremento del producto listo para ser revisado o entregado.

4. ¿Qué es el Product Backlog?


Respuesta: El Product Backlog es una lista priorizada de todas las características, mejoras, correcciones y requisitos del producto. Es
gestionado por el Product Owner y se va actualizando constantemente.

5. ¿Qué es el Sprint Backlog?


Respuesta: El Sprint Backlog es una lista de las tareas que el equipo de desarrollo se compromete a completar durante el Sprint. Se
deriva del Product Backlog, pero con un enfoque específico para el Sprint actual.

6. ¿Qué es la Daily Scrum (Reunión diaria)?


Respuesta: La Daily Scrum es una reunión breve (generalmente de 15 minutos) en la que el equipo de desarrollo se reúne para
sincronizar el trabajo. Cada miembro responde tres preguntas:

• ¿Qué hice ayer?


• ¿Qué voy a hacer hoy?
• ¿Hay algún impedimento en mi camino?

7. ¿Qué es la Sprint Review (Revisión del Sprint)?


Respuesta: La Sprint Review es una reunión al final de cada Sprint donde se presenta el trabajo completado (incremento) al Product
Owner y a otras partes interesadas. El objetivo es recibir retroalimentación y ajustar el Product Backlog si es necesario.

8. ¿Qué es la Sprint Retrospective (Retrospectiva del Sprint)?


Respuesta: La Sprint Retrospective es una reunión donde el equipo de Scrum reflexiona sobre cómo funcionó el Sprint. El objetivo es
identificar áreas de mejora y ajustar procesos para ser más efectivos en el próximo Sprint.
9. ¿Qué es un Incremento en Scrum?
Respuesta: Un Incremento es la suma de todas las tareas completadas durante el Sprint que son funcionales y potencialmente
entregables. Al final de cada Sprint, se espera que el incremento sea un producto que agregue valor al cliente.

10. ¿Cómo se mide el progreso en Scrum?


Respuesta: En Scrum, se mide el progreso mediante la Burndown Chart, que muestra cómo se va completando el trabajo a lo largo del
Sprint. También se pueden usar otras métricas como la velocidad (el número de unidades de trabajo completadas por Sprint) para estimar
el rendimiento del equipo.

11. ¿Cuáles son los beneficios de Scrum?


Respuesta: Algunos de los principales beneficios de Scrum son:

• Incremento de la transparencia.
• Mejora de la comunicación entre los miembros del equipo.
• Flexibilidad para adaptarse a cambios.
• Entregas frecuentes y regulares de valor.
• Fomento de la autoorganización y la autonomía en el equipo.

12. ¿Qué es un Impedimento en Scrum?


Respuesta: Un Impedimento es cualquier obstáculo que dificulte o impida el progreso del equipo. El Scrum Master es responsable de
identificar y eliminar estos impedimentos.

13. ¿Qué es el Definition of Done (Definición de Hecho)?


Respuesta: El Definition of Done (DoD) es un acuerdo entre el equipo de Scrum sobre los criterios que debe cumplir una tarea o
incremento para considerarse "completada". Esto puede incluir pruebas, documentación, revisiones y otros aspectos necesarios.

14. ¿Qué significa ser un equipo autoorganizado?


Respuesta: Un equipo autoorganizado es aquel que tiene la capacidad de tomar decisiones sobre cómo abordar el trabajo sin depender
de instrucciones externas. Los miembros del equipo colaboran, gestionan su propio trabajo y resuelven problemas de manera
independiente.

15. ¿Qué es el Timebox en Scrum?


Respuesta: Un Timebox es un período de tiempo fijo durante el cual se debe completar una actividad. En Scrum, las reuniones como la
Daily Scrum, la Sprint Planning, la Sprint Review y la Sprint Retrospective tienen un Timebox definido para asegurar que se mantengan
breves y enfocadas.

JAVA

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

// El valor base fijo

double valorBase = 231231.132;

double valorExtra = 56.34;

// Solicitar al usuario que ingrese una cantidad de dinero


System.out.print("Ingresa una cantidad de dinero: ");

double dineroUsuario = scanner.nextDouble();

// Sumar el dinero ingresado con el valor base

double sumaTotal = dineroUsuario + valorBase;

System.out.println("La suma de tu dinero con el valor base es: " + sumaTotal);

// Calcular el porcentaje de la suma total respecto al valor base

double porcentajeSumaTotal = (sumaTotal / valorBase) * 100;

System.out.println("El porcentaje de la suma con respecto al valor base es: " + porcentajeSumaTotal + "%");

// Opción 1: Calcular el porcentaje con el valor extra (56.34)

System.out.println("¿Quieres calcular el porcentaje con el valor extra de " + valorExtra + "? (s/n)");

char opcion = scanner.next().charAt(0);

if (opcion == 's' || opcion == 'S') {

double sumaConExtra = sumaTotal + valorExtra;

double porcentajeConExtra = (sumaConExtra / valorBase) * 100;

System.out.println("La nueva suma con el valor extra es: " + sumaConExtra);

System.out.println("El porcentaje con respecto al valor base es: " + porcentajeConExtra + "%");

// Opción 2: Mostrar el total de dinero después de las dos opciones anteriores

System.out.println("¿Quieres saber el total acumulado con ambos valores? (s/n)");

opcion = scanner.next().charAt(0);

if (opcion == 's' || opcion == 'S') {

double totalAcumulado = sumaTotal + valorExtra;

System.out.println("El total acumulado después de ambas opciones es: " + totalAcumulado);

scanner.close();

También podría gustarte