<em>(Algunos antecedentes: entrevisté a cientos de candidatos para trabajos de ingeniería de software en Facebook y Microsoft. También fallé varias entrevistas de codificación cuando no estaba preparado).</em>
Companies Mentioned
(Algunos antecedentes: entrevisté a cientos de candidatos para trabajos de ingeniería de software en Facebook y Microsoft. También fallé varias entrevistas de codificación cuando no estaba preparado).
Las habilidades de diseño orientado a objetos (OOD) son una gran ventaja para los ingenieros de software. Dan a los entrevistadores una idea sobre lo siguiente:
Si el candidato puede traducir un problema complejo en un conjunto concreto de objetos e identificar interacciones entre esos objetos para resolver el problema en cuestión.
Si el candidato puede identificar patrones durante el diseño y, cuando corresponda, aplicar de manera efectiva soluciones comprobadas en lugar de reinventar la rueda.
Si está buscando un curso completo sobre diseño orientado a objetos para entrevistas, consulte los siguientes recursos:
Las entrevistas de diseño orientado a objetos son esenciales si desea tener éxito como ingeniero de software, pero muchos ingenieros temen las preguntas de la entrevista OOD (¡incluyéndome a mí cuando estaba entrevistando!). Hay algunas razones principales para esto:
Pueden volverse muy abstractos, muy rápidamente. Los problemas OOD requieren la capacidad de "alejarse" de un problema y realmente pensar en las partes componentes en un nivel alto (pero no demasiado abstracto).
Por lo general, no hay una sola respuesta correcta para una pregunta determinada. Los problemas se pueden pensar o resolver de muchas maneras diferentes.
Muchos desarrolladores principiantes aún no han tenido la oportunidad de diseñar un sistema complejo desde cero.
El diseño orientado a objetos generalmente se enseña en las universidades de una manera que lo hace parecer un curso teórico aburrido, porque no se puede apreciar el valor de dicho diseño hasta que el sistema es realmente complejo, y es difícil hacer un seguimiento de todos los objetos e interacciones en su cabeza.
La buena noticia es que en Educative , hemos hablado con cientos de candidatos, y nuestros autores se han asociado con gerentes de contratación de las principales empresas tecnológicas como Google, Amazon, Microsoft y Facebook para abordar en detalle los problemas comunes de las entrevistas.
Además de cubrir algunas de las preguntas de entrevista OOD más populares que estas empresas probablemente hagan, mencionaré cuál debería ser el enfoque general para resolver tales problemas, de modo que también pueda aplicar sus habilidades a otras preguntas.
El enfoque de las preguntas de la entrevista OOD:
En las preguntas de diseño orientado a objetos, los entrevistadores buscan su comprensión de los matices de los problemas complejos y su capacidad para transformar los requisitos en clases comprensibles.
De hecho, las preguntas OOD generalmente seguirán un patrón muy similar. Se le proporcionará un problema vago y un conjunto de restricciones para diseñar un sistema, y muy poco más. Luego, depende de usted, el candidato, determinar el "nivel" de solución que busca el entrevistador, qué tipo de funcionalidad se necesitará y encontrar una solución viable.
Los entrevistadores buscan una cosa principal: encontrar el equilibrio adecuado entre una solución que funcione de inmediato y que también se adapte a los cambios en el futuro.
Para simplificar las cosas, puede adoptar el siguiente enfoque para cualquier pregunta OOD que encuentre:
Aclare los requisitos: asegúrese de comprender las expectativas del entrevistador. Haga preguntas aclaratorias si es necesario; al entrevistador no le importará y probablemente lo apreciará. Por ejemplo, "¿me busca para demostrar la estructura de una solución o para implementarla por completo?" Hacer esto aquí tomará entre 5 y 10 segundos, pero ahorrará una gran cantidad de tiempo más adelante.
Analice los casos de uso primarios: Piense y analice los casos de uso. Asegúrese de comprender todas las diferentes funciones que se espera que tenga su sistema. Hablar de ello en voz alta también puede ayudarte a encontrarte con expectativas o ideas de las que quizás no te hayas dado cuenta si te hubieras metido de lleno.
Identifique objetos clave: ahora, identifique todos los objetos que desempeñarán un papel en su solución. Por ejemplo, si está diseñando un estacionamiento, estos serán elementos como vehículos, lugares de estacionamiento, garajes de estacionamiento, entradas, salidas, operadores de garaje, etc.
Identifique las operaciones compatibles con los objetos: resuelva todos los comportamientos que esperaría que tuviera cada objeto que identificó en el paso anterior. Por ejemplo, un automóvil debe poder moverse, estacionar en un lugar determinado y tener una placa. Un lugar de estacionamiento debe poder acomodar un vehículo de dos ruedas o un vehículo de cuatro ruedas, y así sucesivamente.
Identifique interacciones entre objetos: mapee las relaciones entre los diferentes objetos que necesitarán interactuar entre sí. Aquí es donde todo se une. Por ejemplo, un automóvil debería poder estacionar en un lugar de estacionamiento . Los garajes de estacionamiento deben poder acomodar múltiples lugares de estacionamiento , y así sucesivamente.
Ahora revisaré algunas de las principales preguntas que recomendaría practicar. Para cada una, también compartiré algunos consejos sobre cosas que el entrevistador probablemente buscará en su respuesta a esa pregunta.
Diseño Amazon / Flipkart (una plataforma de compras en línea)
Más allá de la funcionalidad básica (registro, inicio de sesión, etc.), los entrevistadores buscarán lo siguiente:
Visibilidad: ¿Cómo descubrirá el comprador un producto? ¿Cómo aparecerán los resultados de la búsqueda?
Carrito y pago: los usuarios esperan que el carrito y el pago se comporten de cierta manera. ¿Cómo se adherirá el diseño a las mejores prácticas conocidas al mismo tiempo que introduce una semántica de pago innovadora como One-Click-Purchase?
Métodos de pago: los usuarios pueden pagar con tarjetas de crédito, tarjetas de regalo, etc. ¿Cómo funcionará el método de pago con el proceso de compra?
Reseñas y calificaciones de productos: ¿Cuándo puede un usuario publicar una reseña y una calificación? ¿Cómo se rastrean las reseñas útiles y se elimina la prioridad de las reseñas menos útiles?
2. Diseñe un sistema de reserva de entradas para el cine
Los entrevistadores estarán interesados en ver los siguientes puntos en su respuesta:
Duplicación: ¿Cómo maneja los casos, como que el mismo cine tenga varias salas de cine que muestren diferentes películas simultáneamente? ¿O la misma película que se muestra en diferentes momentos en el mismo cine/sala?
Manejo de pagos : ¿Cuál sería el proceso para que un usuario compre un boleto?
Selección: ¿Cómo elegiría un usuario un asiento, asegurándose de que no lo haya reservado otra persona?
Variaciones de precios: ¿Cómo se considerarían los precios con descuento? Por ejemplo, para estudiantes o niños.
3. Diseña un cajero automático
Los entrevistadores querrían verte discutir cosas como:
Sobregiro : ¿Qué harías cuando al cajero automático no le queda efectivo?
Verificación de PIN : ¿Qué sucede si un usuario ingresa un PIN incorrecto varias veces?
Lectura de tarjetas: ¿Cómo detectaría si la tarjeta se ha insertado correctamente o no?
4. Diseñar un Sistema de Gestión de Aerolíneas
Una buena respuesta desde la perspectiva de un entrevistador abordaría:
Complejidad del itinerario : ¿Cómo funcionarían los itinerarios de varios vuelos? ¿Cómo se manejarían varios pasajeros en el mismo itinerario?
Alertas: ¿Cómo se notifica a los clientes si hay un cambio en el estado del vuelo?
Acceso externo: ¿Cómo interactuaría el sistema con otros actores que hacen reservas para los mismos vuelos, como un operador de recepción de una aerolínea?
5. Design Blackjack (un juego de cartas)
Su respuesta idealmente debería considerar lo siguiente:
Puntuación: ¿En qué nivel del sistema se maneja la puntuación? ¿Cuáles son las ventajas y desventajas de esto?
Reglas: ¿Qué tipo de flexibilidad existe para jugar con reglas de la casa ligeramente diferentes si es necesario?
Apuestas: ¿Cómo se manejan los pagos de las apuestas? ¿Cómo se tienen en cuenta las probabilidades?
6. Diseñar un Sistema de Gestión Hotelera
Querrás asegurarte de cubrir:
Complejidad de la habitación: ¿Cómo admitirá el sistema diferentes tipos de habitación dentro del mismo hotel?
Alertas: ¿Cómo recordará el sistema a los usuarios que se acerca su fecha de check-in? ¿Qué otras alertas podrían ser útiles para tener en cuenta?
Personalización: ¿Cómo harían los usuarios solicitudes especiales en su habitación? ¿Qué tipo de solicitudes especiales se admitirían?
Cancelación/Modificación: ¿Cómo trataría el sistema la cancelación de la reserva (dentro del plazo permitido)? ¿Qué pasa con otros cambios? ¿Qué tipos de modificaciones estarían cubiertos?
7. Diseña un estacionamiento
Esta es una de las preguntas de entrevista OOD más comunes y una que debe saber.
El entrevistador querrá escucharlo discutir:
Flexibilidad de pago: ¿Cómo pueden los clientes pagar en diferentes puntos (es decir, en la consola de información del cliente en cada piso o en la salida) y por diferentes métodos (efectivo, crédito, cupón)?
Capacidad: ¿Cómo se considerará la capacidad de estacionamiento de cada lote? ¿Qué sucede cuando un lote se llena?
Tipos de vehículos: ¿Cómo se asignará la capacidad para los diferentes tipos de lugares de estacionamiento, por ejemplo, motocicletas, autos compactos, autos eléctricos, vehículos para discapacitados, etc.?
Precios: ¿Cómo se manejarán los precios? Debe adaptarse a tener diferentes tarifas para cada hora. Por ejemplo, los clientes tienen que pagar $4 por la primera hora, $3.5 por la segunda y tercera hora y $2.5 por todas las horas restantes.
8. Diseñe un Sistema de Corretaje de Bolsa en Línea
Una buena respuesta cubriría estos puntos:
Listas de vigilancia : ¿Cómo manejaría el sistema las listas de vigilancia creadas por el usuario para guardar/monitorear existencias específicas?
Tipos de transacciones: ¿Cómo manejaría el sistema los diferentes tipos de transacciones, por ejemplo, stop loss y stop limit order? ¿Qué tipos serían compatibles?
Lotes de existencias: ¿Cómo diferenciará el sistema entre diferentes 'lotes' de las mismas existencias para fines de generación de informes si un usuario ha comprado las mismas existencias varias veces?
Informes: ¿Cómo generará el sistema informes para actualizaciones mensuales, trimestrales y anuales?
9. Diseña un sistema de alquiler de coches
Los candidatos deben ser capaces de discutir lo siguiente:
Identificación: ¿Cómo se identificará y ubicará de manera única cada vehículo dentro del estacionamiento?
Tarifas: ¿Cómo cobraría el sistema una tarifa por devolución tardía?
Registros: ¿Cómo mantendría el sistema un registro para cada vehículo y para cada miembro?
Personalización: ¿Cómo manejaría el sistema las solicitudes de los miembros de servicios adicionales como asistencia en carretera, seguro completo y GPS?
10. Diseña Facebook, una red social
Su respuesta idealmente debería cubrir:
Visibilidad: ¿Cómo pueden los usuarios buscar los perfiles de otros usuarios?
Seguimiento: ¿Cómo pueden los usuarios seguir/dejar de seguir a otros usuarios sin convertirse en una conexión directa?
Grupos/Páginas: ¿Cómo pueden los miembros crear grupos y páginas además de sus propios perfiles de usuario?
Privacidad: ¿Cómo manejará el sistema las listas de privacidad con cierto contenido que se mostrará solo a conexiones específicas?
Alertas: ¿Cómo se notificará a los usuarios sobre los eventos preseleccionados?
Si está buscando respuestas detalladas a las preguntas anteriores, incluidos diagramas UML reales y fragmentos de código, le recomiendo echar un vistazo a Grokking the Object-Oriented Design Interview .
Si esta publicación te resultó útil, haz clic en elsigno 👏 y sígueme para ver más publicaciones. Si tienes algún comentario, comunícate conmigo enTwitter.