PreguntasTeoria - ucseiw-team/catedra GitHub Wiki
Aclaración importante: cuando una pregunta tiene "[algo, algo más, otro más]", quiere decir que podríamos preguntar diferentes variantes de esta pregunta, no que se vayan a preguntar todas las cosas juntas.
1.2. Justificación de proyecto
- ¿Qué utilidad tiene definir perfiles de usuarios de ejemplo de nuestro sitio?
- ¿Qué se incluye en la definición de un escenario de uso?
- Items para que una comunidad online sea sustentable:
- Mencione dos y explique.
- Elija una [comunidad online, proyecto de su año] y mencione un ítem que haga bien y otro que haga mal, justificando.
- Elija un item, y mencione dos comunidades online: una que lo haga bien y otra que lo haga mal, justificando.
- Liste todos los items (sin explicar cada uno).
1.3. Arquitectura de la web
- Describa brevemente cuáles son los pasos para que un usuario acceda a un sitio web desde un navegador (desde que el usuario escribe la url, hasta que ve la página resultante).
- Con sus palabras y dando un ejemplo: ¿cuáles son las partes de una url?
- ¿Cuáles son las partes de una request (petición) del protocolo HTTP?
- ¿Cuáles son las partes de una response (respuesta) del protocolo HTTP?
- ¿Cómo resuelven las cookies el problema de falta de estado de HTTP?
- ¿Por qué la IP no es una buena forma de resolver la falta de estado de HTTP? ¿Qué se utiliza en vez?
- ¿Por qué la reescritura de urls no es una buena forma de resolver la falta de estado de HTTP? ¿Qué se utiliza en vez?
1.4. Tecnologías de front end
- ¿Para qué se utilizan HTML, Javascript y CSS?
- ¿Qué partes principales tiene un documento HTML?
- ¿De qué maneras podemos agregar CSS a un documento HTML? ¿Cuál es la ideal?
- ¿De qué maneras podemos agregar Javascript a un documento HTML? ¿Cuál es la ideal?
2.1. Usabilidad
- ¿Por qué es importante tener en cuenta la usabilidad de nuestro sitio?
- ¿Qué es UI (user interface) y qué es UX (user experience)? De un ejemplo de buena o mala UX.
- ¿Qué utilidad tiene definir un flujo de páginas? (pregunta abierta)
- ¿Qué utilidad tiene definir un flujo de estados? (pregunta abierta)
- ¿Tiene sentido que la web/app móvil sea exactamente igual a la de escritorio? ¿Por qué?
- Tecnologías de apps/webs móviles (web responsive, web mobile / pwa, app mobile)
- ¿Qué alternativas tenemos para soportar usuarios móviles?
- Mencione y explique una ventaja y una desventaja de usar [una de las alternativas] para soportar usuarios móviles.
- Mencione las ventajas de usar [una de las alternativas] para soportar usuarios móviles.
- Mencione las desventajas de usar [una de las alternativas] para soportar usuarios móviles.
- ¿Por qué no es suficiente con probar nosotros mismos la web que desarrollamos?
- ¿Cómo debería hacerse una buena prueba de usabilidad?
- ¿Cómo funciona el mecanismo de A/B testing?
3.1 Git flow
- En la metodología "Git flow", para qué se usa la rama [master/main, develop, feature branches, release branches, hotfix branches]?
4.1. Modularidad de software
- ¿Cuáles son las dos opciones que tenemos para separar el código del backend y el código del frontend?
- ¿Qué ventajas y desventajas tiene realizar [server-side, client-side] rendering?
- ¿Qué es un sistema de templates (plantillas) HTML?
- ¿Por qué es importante separar nuestro código en módulos? (pregunta abierta)
- ¿Por qué es importante tener una api clara entre módulos? (pregunta abierta)
- ¿Qué ventajas y desventajas tiene utilizar [microservicios, un monolito] como arquitectura?
- ¿Qué incluye normalmente la documentación de un módulo?
- ¿Qué herramientas se pueden utilizar para almacenar la documentación?
5.1. APIs web y AJAX
- ¿Qué ventajas tiene JSON en comparación a formatos de datos más viejos como XML? Elabore un ejemplo de un document JSON simple con 3 campos.
- Describa brevemente qué propone REST para la realización de APIs web (qué usamos y para qué usamos cada cosa? Por ejemplo: para qué se usa la uri?)
- Describa un ejemplo en el que sea útil consumir una API web, sea propia o de terceros.
- ¿Qué es AJAX? ¿Para qué es útil?
5.3. Redes sociales y Oauth
- Como desarrolladores, ¿por qué nos interesa integrar nuestro sitio con otras redes sociales? (OJO: esto no son las ventajas de Oauth)
- Como usuarios, ¿por qué nos interesa que sitios que usamos se integren con redes sociales que usamos? (OJO: esto no son las ventajas de Oauth)
- Como [usuarios, desarrolladores, el sitio proveedor de identidad / red social], ¿qué ventajas nos otorga la utilización de Oauth?
6.1. DNS
- Explique brevemente el funcionamiento del sistema de resolución de nombres (DNS).
- En el sistema de resolución de nombres (DNS), ¿qué es un servidor de nombres "autoritativo"?
- En el sistema de resolución de nombres (DNS), ¿qué problemas puede generarnos la caché de los diferentes resolvedores?
- ¿Qué problemas de privacidad tiene el sistema de resolución de nombres (DNS)?
- Elija uno de los problemas de privacidad tiene el sistema de resolución de nombres (DNS), explíquelo y mencione cómo puede resolverse o mitigarse parcialmente.
6.2. Unicode y encodings
- ¿Qué es Unicode? ¿Qué es un encoding?
- En el contexto de encodings, ¿qué significan codificar ("encodear") y decodificar?
6.3. Propiedad de la información
- ¿Qué cosas define una licencia de [código, contenido]?
- ¿Cuál es la principal diferencia entre licencias de código abierto y licencias de código cerrado o propietario?
- ¿De qué forma las cookies pueden ser utilizadas para vulnerar la privacidad de los usuarios?
6.4. Seguridad
- ¿Por qué en general es mala idea desarrollar mecanismos de seguridad o criptografía caseros? (pregunta abierta)
- ¿Qué es la seguridad por oscuridad? ¿Por qué no suele ser buena idea?
- Explique brevemente el funcionamiento de la encriptación simétrica y la encriptación asimétrica.
- ¿Qué ventajas tiene la encriptación asimétrica sobre la encriptación simétrica?
- ¿Cómo se deben guardar las contraseñas para garantizar su seguridad?
- ¿Qué es HTTPS? ¿Qué dos problemas graves de seguridad resuelve respecto a HTTP?
- ¿Qué es una inyección de SQL? ¿Cómo se previene? ¿Qué se debe usar?
- ¿Qué es un ataque de XSS (cross-site scripting)? ¿Cómo se previene?
- ¿Qué es un ataque de XSRF (cross-site request forgery)? ¿Cómo se previene?
- ¿Cómo se mitiga el problema de seguridad de utilizar dependencias que pueden tener vulnerabilidades?
- ¿De qué manera se deben almacenar datos secretos de configuración de nuestro sitio, como ser los tokens de redes sociales, la contraseña de la base de datos, etc?
7. Búsqueda
- ¿Qué problemas tiene SQL si intentamos utilizarlo para realizar búsqueda de texto completo?
- ¿Cómo funciona un motor de búsqueda de texto completo?
- ¿Cómo funciona un motor de búsqueda externo, como ser Google, Bing, etc? ¿Qué utilidad tiene definir un robots.txt?
8. Escalabilidad
- Elija y explique un problema de escalabilidad que NO se pueda resolver con más o mejor hardware. Y explique cómo podría intentar resolverlo.
- ¿Cuál es el componente de hardware más importante a la hora de escalar la capa de [persistencia, aplicación, http, encriptación]? ¿Por qué?
- A la hora de escalar la capa de [persistencia, aplicación, http, encriptación], ¿qué es preferible: una máquina más potente o muchas máquinas más baratas? ¿Por qué?
- ¿Qué opciones tenemos para almacenar las sesiones al escalar la capa de aplicación? ¿Cuál es la ideal?
- ¿Qué problemas tiene intentar escalar la capa de persistencia utilizando muchas máquinas?
- ¿Por qué no es una buena idea realizar balanceo de carga por medio de un DNS resolviendo diferentes IPs a diferentes peticiones?
- ¿Cuál es la diferencia entre un contenedor (por ejemplo de Docker) y una máquina virtual tradicional?
- ¿Cuáles son las ventajas de los sistemas de contenedores (por ejemplo de Docker) comparados a las máquinas virtuales tradicionales?
- ¿En un sistema de contenedores como Docker, qué es una imagen y qué es un contenedor? ¿Qué es un Dockerfile?
- ¿Qué es un sistema de orquestación ("orchestration") de contenedores? ¿Para qué se lo utiliza?
9. Unit testing y TDD
- ¿Para que se utiliza la técnica de "mocking" al escribir tests de unidad (unit testing)?
- ¿Qué es TDD? ¿Qué ventajas puede tener?
- ¿Qué puede hacer un sistema de integración continua (CI, Continuous Integration)?
- ¿Qué [ventajas, problemas] puede tener la realización de revisiones de código (code reviews) antes de mergear código?