Preguntas de Pruebas técnicas para móvil
🔹 1. Fundamentos de Programación¶
❓ ¿Cuál es la diferencia entre programación orientada a objetos (POO) y programación funcional?¶
- POO se basa en clases y objetos. Se centra en encapsulación, herencia y polimorfismo.
- Programación funcional se basa en funciones como ciudadanos de primera clase, evita estados mutables y usa conceptos como funciones puras, inmutabilidad y composición.
❓ ¿Qué es SOLID y cómo se aplica en el desarrollo móvil?¶
Es un conjunto de 5 principios para escribir código limpio y mantenible:
- Single Responsibility: Una clase debe tener una sola razón para cambiar.
- Open/Closed: Debe ser abierta a extensión, pero cerrada a modificaciones.
- Liskov Substitution: Un subtipo debe poder reemplazar su supertipo sin alterar el comportamiento.
- Interface Segregation: Evita interfaces grandes, usa interfaces más específicas.
- Dependency Inversion: Depende de abstracciones, no de implementaciones concretas.
🔹 2. Plataforma Específica¶
Android (Kotlin/Java)¶
❓ ¿Cómo funciona el ciclo de vida de una actividad?¶
El ciclo de vida de una Activity tiene los siguientes estados:
onCreate(): Se inicializa la UI.onStart(): La actividad se vuelve visible.onResume(): La actividad está en primer plano y el usuario puede interactuar.onPause(): Otra actividad está en primer plano, pero esta aún es visible.onStop(): La actividad ya no es visible.onDestroy(): Se libera la memoria asociada con la actividad.
❓ ¿Qué es una Coroutine en Kotlin?¶
Las Coroutines son una forma de manejar código asíncrono sin bloquear el hilo principal. Se utilizan con suspend functions y permiten estructurar código de manera más sencilla en comparación con Callbacks o RxJava.
iOS (Swift)¶
❓ Explica el ciclo de vida de un UIViewController.¶
viewDidLoad(): Se inicializa la vista.viewWillAppear(): La vista está a punto de mostrarse.viewDidAppear(): La vista ya es visible.viewWillDisappear(): La vista está a punto de cerrarse.viewDidDisappear(): La vista ya no es visible.
❓ ¿Qué es Combine y cómo se diferencia de RxSwift?¶
Combine es un framework de Apple para manejar programación reactiva, similar a RxSwift, pero integrado en el ecosistema de Swift.
Multiplataforma (Flutter, React Native)¶
❓ ¿Cómo funciona el State Management en Flutter?¶
Flutter permite manejar el estado de varias formas:
- Provider (recomendado por Google)
- Riverpod (mejora de Provider)
- Bloc (arquitectura más estructurada)
- Redux (similar a React Redux)
🔹 3. Arquitectura y Buenas Prácticas¶
❓ Explica la diferencia entre MVC, MVP y MVVM.¶
- MVC (Model-View-Controller): Separación básica donde el controlador maneja la lógica.
- MVP (Model-View-Presenter): Similar a MVC, pero el
Presentermaneja toda la lógica y es independiente de la vista. - MVVM (Model-View-ViewModel): Usa un
ViewModelpara manejar la lógica de presentación y la vista solo observa cambios.
❓ ¿Qué es una arquitectura limpia (Clean Architecture)?¶
Es un enfoque modular donde las capas de la app están bien definidas:
- Capa de dominio (Reglas de negocio)
- Capa de datos (Repositorios, APIs)
- Capa de presentación (UI, ViewModels)
Esto facilita pruebas y mantenimiento.
🔹 4. Optimización y Rendimiento¶
❓ ¿Cómo optimizarías el rendimiento de una aplicación móvil?¶
- Usar Lazy Loading para cargar datos bajo demanda.
- Evitar operaciones en el hilo principal (usar Coroutines o AsyncTasks).
- Optimizar el uso de memoria con estructuras eficientes.
- Minimizar llamadas a la red y utilizar caching.
❓ ¿Cómo manejarías la carga eficiente de imágenes?¶
- Usar librerías como Glide (Android) o SDWebImage (iOS).
- Reducir el tamaño de imágenes con WebP o compresión.
- Usar caching para evitar descargas repetitivas.
🔹 5. Conectividad y Seguridad¶
❓ ¿Cómo manejarías autenticación en una app móvil?¶
- Usar OAuth 2.0 para autenticar con terceros.
- Implementar JWT (JSON Web Token) para sesiones seguras.
- Usar Firebase Authentication si la app es pequeña.
❓ ¿Qué prácticas sigues para garantizar la seguridad en una app móvil?¶
- No almacenar credenciales en texto plano.
- Usar HTTPS y certificados SSL.
- Ofuscar código para evitar ingeniería inversa.
- Habilitar biometría (Face ID, Touch ID).
🔹 6. Pruebas y Despliegue¶
❓ ¿Cómo escribirías pruebas unitarias para una aplicación móvil?¶
- Android: Usar JUnit, Mockito y Espresso para UI.
- iOS: Usar XCTest para unit testing.
- Flutter: Usar flutter_test con mocks.
❓ ¿Qué es CI/CD y cómo lo aplicarías en un proyecto móvil?¶
CI/CD (Integración y Despliegue Continuo) automatiza pruebas y distribución:
- Usar GitHub Actions o Jenkins para pruebas.
- Configurar Fastlane para generar builds y publicarlas.
- Distribuir con Firebase App Distribution o TestFlight.
❓ ¿Cómo publicarías una app en la App Store / Play Store?¶
- Generar un APK (Android) o IPA (iOS) con firmas digitales.
- Configurar permisos y políticas de privacidad.
- Subir la app a Google Play Console o App Store Connect.
- Pasar las revisiones de Google/Apple.