Angular Section

Temario Angular

¿Qué es Angular y qué diferencias tiene con React?
Angular es un framework para construir aplicaciones web en el lado del cliente, desarrollado por Google. Proporciona una arquitectura basada en componentes, soporte para TypeScript y una amplia variedad de herramientas y bibliotecas integradas. Por otro lado, React es una biblioteca para construir interfaces de usuario, creada por Facebook, que se centra en la creación de componentes reutilizables. La principal diferencia es que Angular es un framework completo que incluye muchas características listas para usar, mientras que React se enfoca más en la vista y requiere bibliotecas adicionales para funcionalidades como el enrutamiento y la gestión del estado.
¿Qué son las promesas y cómo se usan en JavaScript?
Las promesas son un objeto que representa la eventual finalización (o falla) de una operación asíncrona y su valor resultante. Se utilizan en JavaScript para manejar operaciones asíncronas, como solicitudes de red. Se crean con `new Promise()` y se utilizan métodos como `then()` y `catch()` para manejar el resultado o el error. Por ejemplo:
const miPromesa = new Promise((resolve, reject) => {
            // lógica asíncrona
            if (todoBien) {
                resolve('Éxito');
            } else {
                reject('Error');
            }
        });

        miPromesa.then(resultado => {
            console.log(resultado);
        }).catch(error => {
            console.log(error);
        });
        
¿Qué es una API REST y cómo funciona?
Una API REST (Representational State Transfer) es un estilo arquitectónico para diseñar servicios de red. Utiliza HTTP para realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) mediante verbos HTTP (POST, GET, PUT, DELETE). Las APIs REST se centran en recursos, que son representaciones de datos, y pueden ser accedidos a través de URLs. La comunicación se realiza generalmente en formato JSON o XML. Las API REST son escalables y se utilizan comúnmente para desarrollar aplicaciones web y móviles.
¿Cómo manejar el estado en Angular?
En Angular, el estado de la aplicación puede manejarse de varias maneras, dependiendo de la complejidad de la aplicación. Para aplicaciones pequeñas, se puede utilizar el `@Input()` y `@Output()` para la comunicación entre componentes. Para aplicaciones más grandes, se pueden utilizar bibliotecas como NgRx o Akita, que implementan el patrón de gestión de estado basado en Redux, permitiendo manejar el estado global de la aplicación de manera más eficiente y predecible.
¿Cómo se comunican los componentes entre sí en Angular?
Los componentes en Angular pueden comunicarse entre sí de varias maneras:
¿Qué es un componente en Angular?
Un componente en Angular es una pieza fundamental de la arquitectura del framework. Cada componente encapsula una parte de la interfaz de usuario y la lógica asociada, y se compone de tres partes principales: un archivo de TypeScript que define la clase del componente, un archivo HTML que define la vista del componente y un archivo CSS que define el estilo del componente. Los componentes pueden ser reutilizados y anidados, lo que permite crear interfaces de usuario complejas y estructuradas.
Diferencia entre un módulo y un componente en Angular.
Un módulo en Angular es un contenedor para un grupo de componentes, directivas, pipes y servicios que están relacionados. Los módulos permiten organizar la aplicación en partes más manejables. Por otro lado, un componente es una unidad específica que se encarga de una parte de la interfaz de usuario y de la lógica relacionada. Un módulo puede contener múltiples componentes, pero un componente no puede existir sin estar dentro de un módulo.
¿Cómo se utiliza el enrutamiento en Angular?
El enrutamiento en Angular se utiliza para navegar entre diferentes vistas de la aplicación. Se configura en el módulo principal de la aplicación usando el `RouterModule`, donde defines rutas que asocian URL con componentes. Al utilizar el componente ``, Angular puede cargar el componente correspondiente a la ruta activa. También puedes usar servicios como `ActivatedRoute` para acceder a parámetros de ruta y realizar acciones basadas en la ruta actual.
¿Qué se utiliza para poder hacer uso de métodos de interfaces?
Para utilizar métodos de interfaces, una clase debe implementar la interfaz utilizando la palabra clave implements. Esto obliga a la clase a proporcionar implementaciones concretas para todos los métodos abstractos definidos en la interfaz. Además, se pueden utilizar clases abstractas para proporcionar una implementación parcial de la interfaz si es necesario.
¿Qué patrón de diseño conoces? Da ejemplos.
Conozco varios patrones de diseño, algunos ejemplos incluyen:
¿Qué es la programación funcional? Lambdas y Streams.
La programación funcional es un paradigma que enfatiza el uso de funciones como ciudadanos de primera clase y evita el estado mutable. En Java, las expresiones lambda permiten crear funciones anónimas que pueden ser pasadas como argumentos. Los Streams son una herramienta poderosa para trabajar con colecciones de datos, permitiendo operaciones como filtrado, mapeo y reducción de manera más declarativa y legible. Por ejemplo, puedes usar un Stream para filtrar una lista de números y obtener solo aquellos que son pares.
¿Diferencia entre monolito y microservicio?
Un monolito es una arquitectura en la que toda la funcionalidad de la aplicación está contenida en un solo bloque de código. Esto puede hacer que sea más fácil de desarrollar y desplegar, pero puede volverse complicado a medida que la aplicación crece. Los microservicios, por otro lado, dividen la funcionalidad en servicios independientes que se comunican entre sí, permitiendo un desarrollo más ágil y una escalabilidad más fácil. Esta arquitectura es más adecuada para aplicaciones grandes y complejas.
¿Cuál fue el proyecto más desafiante que tuviste?
El proyecto más desafiante que tuve fue el desarrollo de una aplicación de gestión de inventario para una pequeña empresa. El desafío principal fue integrar múltiples fuentes de datos y garantizar la sincronización en tiempo real. Utilicé tecnologías como Spring Boot para el backend y Angular para el frontend, y aprendí mucho sobre la gestión de dependencias y la optimización del rendimiento en el proceso.
¿Cuál fue tu proyecto de mayor relevancia? ¿Por qué? ¿Qué tecnologías usaste?
Mi proyecto de mayor relevancia fue una aplicación de comercio electrónico que desarrollé como parte de mi experiencia laboral. Este proyecto fue significativo porque implicó la colaboración con un equipo multidisciplinario y el aprendizaje de nuevas tecnologías como React para el frontend y Node.js para el backend. Aprendí sobre la importancia de la comunicación efectiva y la planificación en el desarrollo ágil.
¿Te sientes preparado para este puesto?
Sí, me siento preparado para este puesto. He adquirido una sólida comprensión de los conceptos y tecnologías relevantes, así como experiencia práctica en proyectos que me han permitido desarrollar habilidades técnicas y de colaboración. Estoy motivado para seguir aprendiendo y crecer en este rol.
¿Qué te llevó a presentarte a este puesto?
Me presenté a este puesto porque estoy emocionado por la oportunidad de trabajar en un entorno innovador y desafiante. La misión de la empresa resuena conmigo y creo que mi experiencia y habilidades se alinean bien con las necesidades del equipo. Estoy ansioso por contribuir y aprender de mis colegas.
¿Cuál es tu background?
Tengo un background en desarrollo de software, con experiencia en lenguajes como Java y JavaScript. He trabajado en varios proyectos, tanto individuales como en equipo, lo que me ha permitido desarrollar mis habilidades técnicas y de colaboración. Estoy continuamente aprendiendo y adaptándome a nuevas tecnologías para mejorar mi capacidad de contribuir efectivamente a los proyectos.

Angular

¿Trabajaste solo con Angular? ¿Desde qué versión?
He trabajado principalmente con Angular desde la versión 8, pero he actualizado mis conocimientos para incluir las versiones más recientes. Angular me ha permitido desarrollar aplicaciones web de una manera estructurada y eficiente, utilizando componentes y servicios para mantener un código limpio y mantenible.
¿Conoces las diferencias entre las versiones de Angular?
Sí, conozco varias diferencias entre las versiones de Angular. Por ejemplo, Angular 9 introdujo el Ivy renderer, mejorando el rendimiento y la capacidad de depuración. Angular 10 trajo mejoras en la CLI y soporte para nuevos tipos de verificación. Con cada versión, se han mejorado las características y se han agregado nuevas herramientas que facilitan el desarrollo y mejoran la experiencia del desarrollador.
¿Qué es TypeScript y qué ventajas proporciona al desarrollador con respecto a utilizar solamente JavaScript?
TypeScript es un superset de JavaScript que añade tipos estáticos y otros conceptos de programación orientada a objetos. Las ventajas de TypeScript incluyen la detección temprana de errores a través de la tipificación, lo que reduce la cantidad de errores en tiempo de ejecución. También mejora la legibilidad del código, facilita la refactorización y proporciona autocompletado en editores, lo que acelera el desarrollo y mejora la calidad del código.
En cuanto a mantenimiento de código... ¿qué ventajas tiene?
El mantenimiento de código es más sencillo con TypeScript debido a su tipificación estática, lo que permite identificar errores antes de que el código se ejecute. Además, la documentación generada a partir de los tipos mejora la comprensión del código por parte de otros desarrolladores. Esto hace que el proceso de actualización y mantenimiento de proyectos sea más eficiente y menos propenso a errores.
¿Podés definir el concepto de "Two Way Data Binding"?
El "Two Way Data Binding" es un patrón de diseño en Angular que permite que los datos fluyan en ambas direcciones entre el modelo y la vista. Cuando el modelo cambia, la vista se actualiza automáticamente, y viceversa. Esto se logra utilizando el [(ngModel)] en Angular, lo que simplifica la gestión del estado de los datos y mejora la interactividad de las aplicaciones.
¿Qué es un componente en Angular? ¿Qué se puede hacer con ellos?
Un componente en Angular es una unidad básica de la aplicación que encapsula la lógica de presentación y el comportamiento. Cada componente tiene su propio template, estilos y lógica de negocio. Se pueden utilizar para crear elementos reutilizables en la interfaz de usuario, como botones, formularios o tablas. Además, los componentes pueden comunicarse entre sí mediante @Input() y @Output(), permitiendo la creación de aplicaciones interactivas y modulares.
¿Puedo tener un conjunto de componentes dentro de otro componente? Dame ejemplos.
Sí, se pueden tener conjuntos de componentes dentro de otros componentes, lo que se conoce como "composición de componentes". Por ejemplo, puedes tener un componente AppComponent que contenga un componente Navbar, un componente Footer y varios componentes de contenido, como ProductList y ProductDetail. Esta estructura modular permite una mejor organización y reutilización de código.
¿Cómo creás un componente en Angular? ¿De qué archivos generalmente se compone?
Para crear un componente en Angular, se utiliza la CLI de Angular con el comando ng generate component nombre-componente. Esto generará varios archivos, incluyendo:
¿Qué es un servicio en Angular? ¿Qué papel cumple la inyección de dependencias con los servicios?
Un servicio en Angular es una clase que proporciona una funcionalidad específica, como la gestión de datos o la lógica de negocio, y puede ser compartida entre diferentes componentes. La inyección de dependencias permite a los componentes solicitar servicios sin tener que crearlos manualmente, lo que promueve una arquitectura más limpia y escalable. Esto se logra mediante el uso del decorador @Injectable() en la clase de servicio y configurando el módulo para proporcionarlo.
¿Qué es una directiva en Angular? ¿Cuáles son las diferentes categorías de directivas?
Una directiva en Angular es una clase que permite manipular el DOM o modificar el comportamiento de un componente. Hay tres categorías principales de directivas:
¿Qué son las rutas en Angular? ¿Para qué sirven? ¿Cómo se utilizan?
Las rutas en Angular son una forma de manejar la navegación dentro de una aplicación. Permiten que diferentes componentes se muestren en función de la URL actual. Las rutas se definen en el módulo de enrutamiento de Angular y se utilizan en combinación con el RouterModule. Para definir una ruta, se crea un objeto con la propiedad path y el componente asociado. Se pueden configurar rutas hijas, rutas protegidas y rutas dinámicas para una mejor experiencia de usuario.
¿Cómo gestionas el estado de tu aplicación? ¿Usas alguna librería?
Para gestionar el estado de la aplicación, utilizo NgRx, que es una biblioteca de gestión del estado basada en el patrón Redux. NgRx proporciona una forma estructurada de manejar el estado global de la aplicación, facilitando la administración de datos complejos y la comunicación entre componentes. A través de acciones, reducers y efectos, puedo mantener el estado predecible y hacer un seguimiento de los cambios de manera eficiente.
¿Qué es RxJS y cómo se usa en Angular?
RxJS es una biblioteca para la programación reactiva que permite trabajar con flujos de datos asíncronos utilizando observables. En Angular, se utiliza para manejar eventos, llamadas HTTP y cualquier operación asíncrona. Con RxJS, puedo crear cadenas de operadores que transforman, filtran y combinan flujos de datos de manera declarativa, lo que simplifica la gestión de la lógica asíncrona en la aplicación.
¿Qué son las promesas y en qué se diferencian de los observables?
Las promesas son objetos que representan el resultado de una operación asíncrona, resolviéndose en un único valor o error. Por otro lado, los observables representan una colección de valores que pueden emitirse de manera asíncrona en el tiempo. A diferencia de las promesas, los observables son perezosos y pueden cancelar suscripciones, lo que los hace más versátiles en situaciones donde se espera múltiples eventos o valores.
¿Cuál es la diferencia entre un componente y un módulo en Angular?
Un componente es una parte de la interfaz de usuario que define un conjunto de propiedades y comportamientos, así como su plantilla HTML. Un módulo, por otro lado, es un contenedor para agrupar componentes, servicios y otras funcionalidades relacionadas. Los módulos ayudan a organizar la aplicación y permiten la carga diferida de componentes.
¿Qué es el ciclo de vida de un componente en Angular?
El ciclo de vida de un componente en Angular se refiere a la serie de eventos que ocurren desde la creación hasta la destrucción del componente. Incluye varias fases, como ngOnInit (inicialización), ngOnChanges (cambio de propiedades de entrada), ngOnDestroy (limpieza), entre otros. Estos métodos se pueden implementar para manejar lógica específica en cada fase del ciclo de vida.
¿Qué es un servicio en Angular y cómo se crea?
Un servicio en Angular es una clase que encapsula lógica de negocio o funcionalidades que se pueden compartir entre diferentes componentes. Se crea utilizando el decorador @Injectable() y se proporciona en un módulo o componente. Esto permite que los componentes inyecten el servicio y accedan a sus métodos y propiedades.
¿Qué es la inyección de dependencias en Angular?
La inyección de dependencias en Angular es un patrón de diseño que permite que un componente o servicio reciba sus dependencias desde el exterior, en lugar de crearlas internamente. Esto mejora la modularidad y facilita las pruebas. Se logra a través de decoradores y configuraciones en los módulos de Angular.
¿Cómo se implementa la internacionalización (i18n) en Angular?
La internacionalización en Angular se puede implementar utilizando el módulo i18n. Esto implica marcar las cadenas de texto en las plantillas y generar archivos de traducción para diferentes idiomas. Angular proporciona herramientas para extraer cadenas, traducirlas y generar un paquete de construcción para diferentes locales.
¿Qué son los formularios reactivos en Angular y cómo se diferencian de los formularios basados en plantillas?
Los formularios reactivos en Angular son una forma de construir formularios que permite una mayor flexibilidad y control sobre el estado del formulario. Se definen en el código en lugar de en la plantilla, lo que permite el uso de validaciones dinámicas y la reacción a cambios en el estado del formulario. En comparación, los formularios basados en plantillas se construyen principalmente en el HTML, utilizando la directiva ngModel para enlazar datos y manejar la validación.
¿Cómo manejas errores en las solicitudes HTTP en Angular?
Los errores en las solicitudes HTTP en Angular se pueden manejar utilizando el operador catchError de RxJS en el servicio que realiza la llamada. Esto permite interceptar errores y retornar un Observable con un valor predeterminado o lanzar un error personalizado que se puede manejar en el componente.