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?