Durante las entrevistas de codificación de pizarra, puedo escribir algoritmos correctos para casos generales, pero no puedo manejar los casos de esquina. ¿Qué tan malo es y cómo lo supero?

Es lo principal que busco si le pido a alguien que escriba el código durante una entrevista.

Es inaceptable en la industria del software tener un algoritmo que funcione correctamente “la mayor parte del tiempo”. En el grupo donde trabajo ahora, la mayoría de los errores que pasan a las pruebas de producción se deben al manejo inadecuado de los casos de esquina. (En el mundo RTOS donde vivo, los casos de esquina a menudo se llaman “condiciones de carrera”, pero el concepto es el mismo. Si algo puede romper su código, eventualmente lo romperá).

Por lo menos, si está codificando en la pizarra, debe señalar los casos de esquina y preguntarle al entrevistador si es necesario manejar los casos de esquina. Si puede señalar los casos de esquina y describir cómo los manejaría, incluso si realmente no escribe el código para hacerlo, todavía está muy por delante de un candidato que escribió un código ajeno a la esquina casos y luego se da vuelta y dice: “Creo que esto funcionará”.

También tenga en cuenta que en el mundo real, es mucho mejor que los casos de esquina bloqueen el programa en lugar de comportarse incorrectamente. (Los bloqueos del programa se notan y se corrigen rápidamente; los datos corruptos a veces no se notan hasta que es demasiado tarde). Como entrevistador, tengo esto en cuenta. Si su función C falla cuando pasa un puntero NULL, estoy de acuerdo con eso. Solo documentalo apropiadamente. Pero si su función C trata silenciosamente el número de entrada 4294967295 como -1, eso podría ser un gran problema.

Los algoritmos no son correctos si los casos de esquina no son correctos. A menudo, y especialmente para los algoritmos inductivos, se requieren los casos de esquina para la terminación del algoritmo.

Por lo tanto, una sugerencia constructiva es: cuando trabaje con el “algoritmo general”, descubra cómo su algoritmo general debe terminar para diferentes entradas. Esos podrían ser algunos de los casos de esquina que te estás perdiendo.

No es muy bueno si ignoras los casos de egde por completo.

Esto me sucedió cuando estaba saltando directamente al código, con una planificación mínima.

Recientemente comencé a usar TDD como una práctica de programación diaria y hay una parte de esto que es muy buena para manejar casos de esquina: primero escriba las pruebas.

Si hace esto antes de sumergirse en el código, su mente estará libre de complicaciones técnicas. Esto le permitirá pensar sobre el problema desde un alto nivel, en cuyo punto puede considerar fácilmente los casos de egde.

La forma en que habría utilizado las pruebas en mi entrevista es esta:

  1. Haría una lista de resultados que produce este método, dadas ciertas entradas. Esta lista incluye las entradas y los resultados para todos los casos que me gustaría manejar. Es un ejercicio de lluvia de ideas, pensar en el dominio del problema en lugar de los detalles de implementación.
  2. Luego ordenaría las pruebas en orden de complejidad técnica ascendente. Esto significa que las pruebas superiores serían las que requieren el código más simple para pasar, mientras que las pruebas inferiores solo pasarían cuando el problema se haya resuelto por completo.
  3. Comenzaría a utilizar el código que hace pasar las pruebas, una a la vez. Esto significa comenzar desde un código simple y avanzar hacia la solución completa, sin olvidar los casos extremos.

Pruébalo en casa! Y para una guía más detallada (no enfocada en la pizarra), eche un vistazo a mi (larga) publicación:

TDD para su entrevista técnica

Espero que esto ayude, ¡házmelo saber en los comentarios! 🙂

More Interesting

¿Cuál es el mejor libro para prepararse para una entrevista de desarrollador junior de Java?

¿Se solicitan estructuras de datos y algoritmos en entrevistas con gigantes tecnológicos como Microsoft, etc. para candidatos que tienen muchos años de experiencia en el campo de TI que no requirieron algoritmos y DS en absoluto en su trabajo anterior?

¿Es posible que un ingeniero sin experiencia en CS obtenga un trabajo en Google, Facebook, Microsoft o Amazon en 6 meses?

Dado un conjunto entero ordenado y un número z, cuente todos los pares (x, y) en el conjunto de modo que x + y <z. ¿Se puede hacer en O (n)?

¿Por qué solo las preguntas relacionadas con algoritmos se hacen principalmente en entrevistas a los grandes?

¿Cómo es estar en una entrevista técnica?

¿Cuáles son las preguntas financieras básicas formuladas en una entrevista?

Como un chico experimentado de más de 3 años en SAP-ABAP, ¿cómo debo prepararme para una entrevista técnica de un gigante en el campo de SAP?

Llevo un tiempo codificando y he desarrollado varias aplicaciones web. No he usado ningún algoritmo o incluso muchas matemáticas. No he hecho ninguna de las cosas complicadas de las que tanto se habla en informática. ¿Por qué?

¿Qué tipo de preguntas se hacen en entrevistas para ingenieros electrónicos?

¿Cómo se convirtieron las preguntas sobre estructuras de datos y algoritmos en la norma para las entrevistas tecnológicas?

¿Hay alguna entrevista simulada de programación en línea organizada por pares?

¿Cuál es la mejor manera de prepararse para una entrevista de PM PM en una empresa de tecnología?

¿Las personas con experiencia se prepararán mucho para las entrevistas? En caso afirmativo, ¿qué tipo de habilidades buscan las empresas en los ingenieros superiores frente a los de primer año?

¿Qué se siente al fallar 15 entrevistas de programación?