Proceso de pensamiento general para las preguntas de la entrevista "¿Cómo crearía este sitio web / aplicación?" [cerrado]

14

He recopilado un montón de preguntas de la entrevista como "Describe cómo diseñarías una aplicación de álbum de fotos", "Describe cómo diseñarías esta característica particular de este sitio web en particular" (p. ej., me gusta en Facebook, recomendaciones en Amazon, compras carro, juego de black jack). Entonces, ¿y si hay millones de esto? ¿Qué cambiarías?

Parece que esto está esperando un esquema de base de datos o un conjunto de definiciones de clase (¿o ambas?). Aprendí sobre bases de datos en la escuela, pero en realidad nunca he diseñado una aplicación antes y tengo problemas para saber por dónde empezar, si los diseños que tengo son "buenos" y qué puedo cambiar para hacerlos escalables.

¿Hay un enfoque general o proceso de pensamiento al diseñar estos sistemas? ¿Y los problemas / problemas generales que parecen surgir mucho en el diseño que debería intentar evitar? ¿Alguien podría guiarme a través de uno (o preferiblemente de todos, al comparar las necesidades de cada uno) y explicar:

1) ¿Cómo se te ocurren las entidades que se necesitan? 2) ¿Cómo decides qué relaciones tendrá todo? 3) ¿Cómo incorporas la optimización del rendimiento en tu diseño? 4) ¿Hago esto usando clases o bases de datos? ¿Hace una diferencia (es decir, tendría una clase que no pueda ser traducida a una tabla de base de datos, por ejemplo?)

La razón principal por la que pregunto es porque estaba en "Cracking the Coding Interview" y mis respuestas fueron completamente diferentes a las del autor: tenía ideas muy diferentes sobre qué clases eran importantes.

MI INTENTO: Con la aplicación para compartir fotos, tendría las clases / tablas: Foto y usuario seguro.

Entonces, creo que si intentamos crear un esquema, habría una tabla que vincula la foto y el usuario si asumimos que cada persona en la foto está vinculada a la foto (¿es esta tabla necesaria? Si no, ¿es ¿Sigue siendo una práctica común tener una tabla separada para relaciones de muchos a muchos o no?).

Pero si estamos intentando adoptar un enfoque orientado a objetos, tal vez tendríamos una clase llamada álbum que hace todo el trabajo y tiene toda la información de las otras dos tablas / clases. Esto es algo que noté en el libro: hay un montón de clases y luego una clase que básicamente tiene toda la información y conecta las otras clases. ¿Es esto común? Por ejemplo, en mis ejemplos anteriores, ¿parece que esto se aplicaría?

Solo espero que sigan algunas reglas / pautas generales porque en este momento no tengo idea de cómo decir qué aspecto tiene una buena arquitectura para un sistema grande.

    
pregunta Mastid 26.04.2013 - 06:24

3 respuestas

19

El punto de estas preguntas es evaluar si tienes habilidades del mundo real para escribir una aplicación de software. Has aprendido algo de teoría, pero el conocimiento teórico solo puede llegar muy lejos. La única manera de entender realmente el desarrollo de software es hacerlo.

No hay un atajo para esto, porque no hay respuestas de inventario para preguntas como "¿qué entidades se necesitan?" En su lugar, debe aplicar su experiencia de varias herramientas y paradigmas, y cómo funcionan juntos, para encontrar una solución práctica al problema en cuestión.

Una pregunta como "¿Hago esto usando clases o bases de datos?" sugiere que te falta un conocimiento básico de qué son las cosas y cómo funcionan. Las clases son un paradigma para organizar su código; Las bases de datos son un método de almacenamiento de datos. Son dos conceptos intrínsecamente no relacionados (aunque pueden trabajar juntos). Esto no es una pregunta ni tampoco.

No quiero ser duro, pero creo que necesitas desarrollar tu experiencia de codificación para tener éxito en una entrevista de este tipo. Ciertamente tiene el potencial: su discusión de la aplicación para compartir fotos tiene algunas de las ideas correctas y va en la dirección correcta. Pero necesitas aprender cómo funciona esto de primera mano. La mejor manera de prepararse para su entrevista es crear una aplicación de principio a fin. Una aplicación para compartir fotos sería un proyecto de tamaño adecuado, o usted podría elegir otra cosa. Su conocimiento realmente se expandirá a medida que vea cómo todas las partes pueden trabajar juntas para hacer que una aplicación funcione.

    
respondido por el user82096 26.04.2013 - 07:58
8
  

Parece que esto está esperando un esquema de base de datos o un grupo de   definiciones de clase (o ambas?)

Creo que estás demasiado concentrado en los detalles aquí. Con esa pregunta, el reclutador no espera una descripción completa de todas las clases que escribiría (de lo contrario, le pedirían que la codificara, no hablaría de ello).

Su respuesta primero tiene que ser sobre el panorama general: arquitectura, niveles, capas, incluso el ciclo de vida del proyecto y el proceso de desarrollo que pondría en marcha. No dude en hacer preguntas sobre los requisitos y el entorno en el que se supone que se ejecuta la aplicación para ajustar su respuesta. Como lo señaló dan1111, no existe una receta general para un diseño de aplicación correcto. Todos los diseños dependen del contexto.

Solo si el reclutador comienza a hacer preguntas realmente específicas, debe entrar en detalles sobre qué clases, entidades o tablas de base de datos usaría bajo el capó.

Además, si tiene poca experiencia, es normal que diga "Le mostraré una solución utilizando el tipo de diseño de aplicación que me han enseñado y utilizado hasta ahora. Conozco este y otros enfoques que utilizo. puedo describirlo en general, pero nunca los he aplicado. También estoy abierto a descubrir y aplicar a otros ".

No hay nada de malo en reconocer que solo hay tantas herramientas en tu caja de herramientas que tu experiencia te permite tener; de hecho, es mejor que escupir una respuesta ensayada que no tienes idea de cómo funciona en la práctica.

    
respondido por el guillaume31 26.04.2013 - 13:21
2

Pensé que haría un comentario rápido sobre tu primera pregunta:

  

1) ¿Cómo se te ocurre qué entidades se necesitan?

Lo primero que hago para un nuevo proyecto es, ya sea en una pizarra blanca o en una hoja de papel grande y en blanco, escribir todas las cosas físicas y conceptuales sobre ese proyecto en particular que yo y mi equipo podemos pensar. Es una sesión de lluvia de ideas.

Los sustantivos tienden a ser objetos, los verbos tienden a ser casos de uso o métodos.

Físico: foto (¡obvio!), tipo de pantalla, sistema, archivo de foto, formato de archivo, usuario, fecha ...
Conceptual: agregar, eliminar, guardar / almacenar, recuperar, ordenar, modificar, ver / mostrar fotos ...

Haz conexiones entre sustantivos y verbos. El usuario agrega la foto. (Bueno, ¡hay un caso de uso!)

También sugeriría ver UML y los patrones de diseño y cómo se pueden usar en OOD genérico. (Aviso: no mencioné un idioma ni una base de datos en ningún lugar arriba. No elija un idioma y luego haga su OOD. Haga su OOD de manera que cualquier OOL pueda implementar el diseño.

    
respondido por el Cheldric 22.07.2014 - 20:52

Lea otras preguntas en las etiquetas