¿Es una mala práctica hacer entrevistas para que los candidatos escriban una implementación de lista vinculada? [cerrado]

43

Al leer este sitio y SO, he visto muchas historias de preguntas y respuestas de entrevistas que dicen que un candidato tuvo que implementar una lista vinculada desde cero. Por lo general, este es un ejercicio "dame" para programar candidatos a roles como escribir FizzBuzz. La idea es que si el candidato no puede hacer esto, no puede programar y debe ser rechazado casi de inmediato.

Sin embargo, no puedo evitar pensar que esto podría ser una mala práctica por las siguientes razones:

  • Los lenguajes modernos de nivel superior como C # y Python usan de forma nativa las listas de manera extensa; escribir su propio objeto de lista vinculada solo sería necesario en circunstancias inusuales e incluso entonces probablemente desaconsejado.
  • Los lenguajes de nivel inferior como C ++ tienen bibliotecas estándar con iteradores / contenedores de listas y objetos.
  • A la luz de los primeros dos puntos, los codificadores pueden pasar años sin siquiera pensar en implementar una lista (vinculada, doblemente vinculada, etc.). Es posible que algunos ni siquiera vean tales cosas desde los días de la universidad.
  • El poder de cálculo tampoco es el factor que era hace años, por lo que la eficiencia a través de punteros no es el problema que solía ser (en general).
  • Una simple búsqueda en la web de algo como "ejemplo de lista enlazada" generaría muchos ejemplos de código que podrían memorizarse y escupirse, sin indicar realmente la verdadera competencia del solicitante.

Debo decir que usar una lista vinculada para conducir a preguntas abiertas / discusiones sobre la capacidad de resolución de problemas / pensamiento crítico de los candidatos es muy probablemente una muy buena práctica de entrevista. De cualquier manera, un entrevistador puede ver realmente cómo es un solicitante y cómo cree que es enormemente beneficioso.

Creo que este enfoque binario de "sin código de lista vinculada, sin trabajo" para los programadores que trabajan en una aplicación de escritorio o web está un poco desactualizado. También podría ser bastante dañino; un candidato que no puede recordar cómo trabajar adecuadamente con el líder de una lista podría ser un codificador y compañero de trabajo excelente y perderse en la mezcla. Pensamientos?

EDITAR : Hay muchos comentarios (buenos) que sugieren que si esta es una pregunta buena o mala, depende del contexto del trabajo. Estoy totalmente de acuerdo, así que permítanme reformular esta pregunta: la implementación de una lista vinculada es una pregunta de entrevista común para una amplia gama de trabajos de codificación, similar a preguntas como FizzBuzz o escribir una función recursiva para calcular factoriales. ¿Esta pregunta tiene suficiente utilidad para ser utilizada comúnmente para evaluar candidatos de programación en todos los ámbitos? ¿O debería considerarse una mala pregunta para hacer excepto para los puestos de "Desarrollador Senior, Equipo de Listas Vinculadas Integradas"?

joshin4colours
fuente
11
¿Para qué posición es esto? ¿Qué tipo de trabajo es este? ¿En qué dominio está?
Thomas Owens
1
Veo tus ediciones, pero aún así, ¿qué tipo de trabajo es este? ¿Es esto una pasantía? ¿Un trabajo de nivel de entrada? ¿Un trabajo intermedio? ¿Estás buscando contratar un programador, un ingeniero o un científico? ¿En qué dominio está esto? ¿Estarían alguna vez en una posición tal que tendrían que desarrollar sus propios algoritmos o estructuras de datos por alguna razón?
Thomas Owens
3
'C # (...) usa las listas de forma nativa extensivamente' y 'la eficiencia a través de punteros no es el problema que solía ser': ¿sabe que estas listas nativas no son listas vinculadas sino más bien listas basadas en matrices? Las matrices tienden a funcionar mejor debido al almacenamiento en caché. De hecho, IIRC el marco .NET ni siquiera tenía listas vinculadas hasta 2.0. Estoy bastante seguro de que la mayoría de los programas de C # no usan listas vinculadas.
Alex ten Brink
1
@AlextenBrink Curiosamente, creo que eso significa que el conocimiento de la lista vinculada es aún menos importante para C #. ¿Por qué implementar una estructura de datos usted mismo (con posibles errores) cuando puedo usar una mejor estructura integrada en el lenguaje?
joshin4colours
La pregunta que tengo en mente es "¿por qué incluso considerar el uso de una estructura de datos que en casi todos los casos es inferior a otra estructura de datos"? La lista vinculada es más lenta para la mayoría de las operaciones que las listas basadas en matrices; Lo único para lo que sirven las listas vinculadas es para eliminarlas en tiempo constante, pero hay muy pocas situaciones en las que sea necesario. Tenga en cuenta que no estoy hablando de si sería una buena estructura de datos para una pregunta de entrevista: los conceptos involucrados podrían ser una buena prueba, no lo sé.
Alex ten Brink

Respuestas:

52

Si responder la pregunta te dice lo que quieres saber sobre un candidato, entonces es una buena pregunta para la entrevista. Si no te dice eso, es una mala pregunta.

Preguntas fáciles como FizzBuzz tienen un propósito específico. Si un candidato no puede codificar FizzBuzz, simplemente no puede codificar y puede finalizar la entrevista antes de tiempo. Calificaría la implementación de una lista vinculada solo un poco más difícil, pero puede iniciar una conversación sobre estructuras de datos en general que revelará mucho.

Solo recuerda que ninguna pregunta de la entrevista te dirá todo lo que quieres saber. Realmente necesita tener un grupo de preguntas listo. Debe hacer preguntas en una secuencia de la más fácil a la más difícil para poder encontrar el límite de lo que sabe el candidato. Si haces una pregunta y la clavan, aún no sabes qué más hacen o no saben.


Con respecto a su edición:

¿Esta pregunta tiene suficiente utilidad para ser utilizada comúnmente para evaluar candidatos de programación en todos los ámbitos? ¿O debería considerarse una mala pregunta para hacer excepto para los puestos de "Desarrollador Senior, Equipo de Listas Vinculadas Integradas"?

Creo que es una buena pregunta de propósito general que podría usarse para evaluar prácticamente cualquier candidato de programación. Solo necesita ser parte de un grupo más grande de preguntas. Sería un buen rompehielos para muchos tipos de posición (incluso si el candidato no puede implementar una lista vinculada desde cero, tal vez pueda explicar cómo han usado una antes y cuáles son las funciones clave), o el comienzo de una larga secuencia de preguntas más avanzadas para el puesto de "Desarrollador sénior, equipo de listas enlazadas integradas".

Bill el lagarto
fuente
19
Tu primer párrafo es la mitad de la historia. La otra mitad es: si al hacer la pregunta, el candidato quiere trabajar para usted, entonces es una buena pregunta para la entrevista. Si hace que el candidato no quiera trabajar para usted, es una mala pregunta.
ruakh
55
No puede encontrar el límite de lo que el candidato sabe de esa manera, porque no tiene forma de afirmar que lo que considera "complicado" y "básico" se aplica en el mismo orden a su candidato. LinkedList es probablemente un programa básico para un programador universitario, pero un programador autodidacta probablemente nunca tuvo que escribir uno. Después de todo, probablemente escribió "LinkedList <string> ..." cuando lo necesitaba. ¿Significa que su conocimiento está vinculado bajo el nivel de "lista enlazada"? Podría ser un experto en temas más complejos y ser capaz de aprender LL en 5 minutos en Google.
Sylverdrag
1
@Sylverdrag Por eso dije que necesita más de una pregunta. Una vez que encuentre el límite de su conocimiento sobre las listas vinculadas, pase a otro tema.
Bill the Lizard
@ruakh Eso definitivamente juega un papel. Si cada pregunta que me hacen en una entrevista es sobre aspectos mundanos de las aplicaciones CRUD (es decir, no creo que pueda aprender nada nuevo en esa compañía), entonces no me entusiasmaría trabajar allí.
Bill the Lizard
34

Me he perdido algunos trabajos simplemente porque mi mente se quedó en blanco en rompecabezas simples como este. También he hecho brillantemente en tales acertijos en otras entrevistas: sé cómo implementar una lista vinculada en un entorno sin presión. Nunca he tenido una queja sobre mis habilidades de alguien con quien he trabajado, así que tal vez no debería pensar que me he perdido mis trabajos, debería pensar que se me han perdido.

Así que sí, creo que es una práctica cuestionable en el mejor de los casos, pero lo entiendo. También he considerado la posibilidad de que no sea culpa de la pregunta sino del interlocutor, por hacerla una situación de alta presión.

Personalmente, prefiero hacer preguntas abiertas sobre un problema que el candidato ya ha resuelto, recientemente, si es posible, y que cubre tanto los problemas de codificación como de proceso. Si pueden traer muestras de código, fantástico.

pdr
fuente
Necesitan preguntar algo, ya sea un rompecabezas o cualquier otra cosa. Cualquier pregunta puede hacer que la persona quede en blanco.
Firmar el
2
@pdr - "Si pueden traer muestras de código, fantástico". Si escribieron los ejemplos de código que trajeron, no tienen precio.
robrambusch
44
Si la mente de alguien se queda en blanco en la implementación de una lista vinculada y no puede resolverla con un pequeño impulso o se frustra fácilmente, creo que sería alguien a quien no me importaría perderme.
Bill K
1
@pdr - "Y si no puedes, ¿por cuánto tiempo crees que tendrás el trabajo?" - Durante el tiempo que sea necesario para dispararlos bajo cualquier régimen de recursos humanos que sufras. Luego está el costo adicional de reiniciar su búsqueda de candidatos. Además, el costo de oportunidad inherente al hecho de que la siguiente persona que habría entrevistado podría haberse convertido en el eje técnico de todo su departamento. Pero, por supuesto, ahora ya no están disponibles debido a que contrató a la persona equivocada y se encontró otro trabajo.
robrambusch
1
@robrambusch: Mostró excelentes habilidades para resolver problemas y habló bien sobre la estructura de la clase. Pero él no escribió el código. Sobre el tema de escribir código en una entrevista, sí, eso puede ser útil, pero mantengo que puedo aprender más sobre usted en una hora de hablar con usted sobre los problemas que ha resuelto que darle un solo problema artificial que requiere hora para resolver.
pdr
25

Uno tiene que definir el tipo de trabajo de programación. Si está en el negocio de desarrollar compiladores y algoritmos, se deben esperar preguntas sobre tales cosas. Si está en aplicaciones de tipo de línea de negocio y espera que el candidato haga aplicaciones CRUD, entonces, puede ser que el conocimiento del concepto (sin escribir un programa) sea suficiente. Hoy en día, el conocimiento de las diferentes tecnologías requeridas para realizar el trabajo especialmente en el tipo de aplicaciones LOB reemplaza la necesidad de algoritmos limpios.

Ninguna posibilidad
fuente
Exactamente. El año pasado escribí un componente de ordenamiento genético de propósito general que también usaba un poco de recocido simulado (para crear horarios de clases) y varias estructuras de datos "avanzadas" para que funcionara. No necesitaba codificar uno solo. Si el marco .Net no tenía lo que necesitaba, usaba C5 o Power Collections.
ElGringoGrande
44
De acuerdo, escribo aplicaciones LOB todo el día, en el pasado he escrito implementaciones de listas vinculadas ... en la universidad ... en COBOL. Podría hacerlo de nuevo, pero ¿por qué? Es probable que muchos desarrolladores de LOB competentes nunca hayan escrito uno y nunca lo necesiten.
CaffGeek
1
De acuerdo en general, pero una lista vinculada no es nada exótica, realmente. Es lo básico, solo un nivel más allá de FizzBuzz.
Francesco De Vittori
1
@FrancescoDeVittori: ¿No es ese el problema a veces? Alguien te da un problema para resolver. Parece bastante simple, pero nunca lo has hecho antes, por lo que tu cerebro comienza a correr, tratando de encontrar los trucos, lo que te costará la entrevista si no piensas en ello. Y no está allí, pero eso te distrae de resolver el problema real.
pdr
@FrancescoDeVittori: ¿Puedes dar un par de ejemplos de preguntas de entrevista no básicas? Necesito esto para la superación personal. Gracias.
Den
9

Mi respuesta es "depende". Haría esta pregunta si un candidato ha incluido C o C ++ en su currículum. Pedir implementar una lista vinculada es una buena prueba para la comprensión de los punteros, que es absolutamente esencial para un programador C o C ++.

Por otro lado, si un candidato no afirma saber C o C ++, no le pediría que implemente una lista vinculada, pero consideraría hacer preguntas al respecto. Explique a alto nivel cómo funciona una lista vinculada. ¿Cuál es la complejidad de agregar un elemento al encabezado de la lista? La cola de la lista? ¿Insertar un elemento en el medio de la lista? ¿Cuándo usarías una lista en lugar de una matriz? Estos son conceptos fundamentales de la estructura de datos que, en mi humilde opinión, todo programador debería saber.

Dima
fuente
7

No lo consideraría una mala pregunta de entrevista. Una gran cantidad de comprensión y programación de la estructura de datos comienza con una muy buena comprensión de las listas enlazadas. Dicho esto, hay algunas advertencias:

1) Es una pregunta tipo fizz-buzz. Simplemente está validando algo muy básico: ¿La persona entiende una lista vinculada? Pregúntalo y sigue adelante.

2) Las listas vinculadas tienen el desafío de que los idiomas que son muy adecuados para mostrar su comprensión de los conceptos de listas vinculadas (por ejemplo, C) pueden no coincidir con el idioma con el que trabajarán en el trabajo. Puede demostrar una comprensión básica en cualquier idioma con estructuras, por supuesto, pero pedirle a un candidato que vuelva a implementar una lista vinculada en Erlang sin usar [] no es el mismo desafío y no le dirá lo mismo sobre la comprensión de un candidato como pedirles que lo hagan en C. Pidiéndoles que lo hagan en C si el trabajo está alrededor de Java, también se pierde un poco el punto.

3) Con eso en mente y los desafíos generales de la "programación de pizarra", al hacer este tipo de preguntas, aceptaría pseudocódigo o diagramas siempre que demuestren comprensión de los principios básicos. No les pido a las personas que escriban código en una pizarra que sea sintáctica y lógicamente perfecta, especialmente si pueden dar la vuelta e identificar cualquier problema lógico cuando se les pide que lo revisen nuevamente. YMMV.

dclements
fuente
6

Cuando daba entrevistas, a menudo me pedían implementaciones de listas vinculadas y algunos algoritmos centrados en listas vinculadas. Resolví la mayoría de ellos, y algunos de ellos me obligaron a ejercitar mis neuronas un poco.

Si alguna vez tomara una entrevista, buscaría algún tipo de implementación de lista enlazada, no para probar qué tan buena es una persona en la codificación, sino para verificar cuánta atención presta una persona a los detalles. Cualquiera puede escribir una lista vinculada, pero es en los casos límite en los que incluso algunos buenos programadores fallan. No le pregunte: Write a code for linked list in C/C++. Pídale que escriba una lista genérica vinculada en C (no C ++), etc.

Cambie el problema y ponga algunas otras condiciones en la lista vinculada, y tendrá una buena pregunta para hacer. Algunas personas están obligadas a cometer errores entonces.

c0da
fuente
2
No existe una lista enlazada genérica en C.
DeadMG
1
¿Seriamente? Pensé que los voidpunteros están ahí solo para eso ... :) El primer enlace que encontré en Google para "lista genérica enlazada en c" fue: daniweb.com/software-development/c/threads/109260 y otro fue una entrevista técnica .com / ... ¡Pensé que todos sabían esto!
c0da
No he probado estos códigos, pero tengo este tipo de lista enlazada anteriormente, y seguro que funcionaba bien ...
c0da
Incluso escribir una lista genérica vinculada en C # tiene una o dos "trampas" (por ejemplo, comparar elementos de tipo T no es obvio; es decir, (T v1, T v2) => {return v1 == v2;} no se compilará a menos que tenga restricciones de clase o use el operador de igualdad predeterminado)
Steven Evers
@ c0da En mi opinión, una lista que utiliza voidpunteros no es genérica, sino general en cualquier momento. Pueden contener cualquier tipo de cosas e incluso mezclarlas todo lo que quieran, y eso exactamente lo hace no genérico para mí. Es como usar el tipo base objecten lenguajes orientados a objetos ...
toque el
5

En mis cerca de 10 años hasta ahora programando profesionalmente (y alrededor de otros diez años como pasatiempo), no creo que alguna vez haya necesitado implementar una lista vinculada. Si alguien me pidió que lo hiciera durante una entrevista, podría responder preguntando si eso es algo que haré regularmente en el trabajo.

Por supuesto, es casi seguro que son puestos de trabajo allí donde se va a necesitar para escribir las implementaciones más o menos-sala limpia de algoritmos conocidos comúnmente - al igual que implementar una lista enlazada desde cero. Pero para la mayoría de los trabajos de programación, ¿qué valor específico tiene para la empresa que un candidato pueda hacerlo durante una entrevista? ¿Es realmente tan importante en un entorno tal que el candidato proporciona una implementación perfecta que maneja los casos límite correctamente, informa fallas de acuerdo con la práctica común en el lenguaje o marco, y así sucesivamente? ¿O puede pasar por alto eso y enfocarse en cómo abordan realmente un problema que quizás no hayan enfrentado en 10-20 años?

Cuando me entrevisté para mi trabajo actual, tenía muy poca experiencia con la pila de tecnología en uso en la empresa. Ahora, unos años después, regularmente tengo colegas que vienen a mí y me hacen preguntas no solo sobre los productos, la implementación de ellos y los estándares implementados por ellos, sino también sobre problemas de programación mucho más generales (justo ayer me preguntaron qué las implicaciones eran de una dependencia circular en una restricción predeterminada en SQL Server en el contexto de una tabla en particular y su uso en nuestro caso, razonando a través de ella, resultó que no había implicaciones en ese caso en particular). Tampoco necesitaba una nueva implementación de la lista vinculada para eso.

Haga preguntas que sean relevantes para el trabajo que probablemente se le asignará al candidatoe intente hacerse una idea de cómo se sienten al adquirir nuevos conocimientos. ¿Cómo iban a averiguar el significado de una sintaxis oscura que nunca han visto? (Si usted es una tienda de C, por ejemplo, entonces podría intentar una pregunta que involucre trigrafos). Para una posición de programación, ¿leen o contribuyen regularmente en foros como Stack Overflow? Si se les pidiera que realizaran alguna tarea en un lenguaje o marco de programación con el que tienen poca o ninguna experiencia (digamos, si usted es principalmente una tienda de Java, ¿qué pasa con Clojure o .NET?), Entonces, ¿cómo abordarían el problema? Tal vez elimine un error real de su rastreador de errores (incluso podría ser uno que se haya resuelto hace mucho tiempo) y pregúnteles cómo se enfrentarían en términos generales para resolverlo, y esté listo para explicar las partes relevantes del producto en cuestión.

Si el candidato puede manejar tipos de problemas relevantes para el caso de negocios y tiene una buena actitud hacia el aprendizaje de cosas nuevas, ese es probablemente un mejor indicador de ajuste para esa posición en particular que ser capaz de proporcionar respuestas enlatadas a preguntas bien conocidas, ya sea las preguntas son sobre FizzBuzz, listas enlazadas u otra cosa Agregue qué tan bien encaja el candidato con el equipo y creo que está en un terreno bastante seguro.

un CVn
fuente
4

Por supuesto, la mayoría de las personas nunca necesitarían implementar una lista vinculada, pero para implementarlas desde cero probablemente necesitará manejar los punteros correctamente. Entonces, la idea es que haber formado un modelo mental consistente para punteros se correlaciona con el dominio del lenguaje, entendiendo lo que sucede en un nivel de máquina (abstracto) y la capacidad de abstraer en general.

No estoy diciendo que esta sea necesariamente la mejor medida, sino solo que hay alguna correlación.

Benjamin Bannier
fuente
4

Empiezas diciendo que son preguntas de 'dame', pero luego señalas que la gente comprensiblemente no podrá hacerlas. Estoy confundido.

Así es como lo pienso:

  • Rara vez es necesario escribir uno, como usted dice, por lo que las personas se habrán olvidado fácilmente.
  • No son increíblemente difíciles de escribir.
  • Los conceptos utilizados para escribirlos pueden considerarse fundamentales.
  • Se usan increíblemente a menudo (incluso si no lo sabes).

Creo que eso los hace buenas preguntas para hacer. Si te preocupa que estudien previamente para la entrevista, entonces envía una lista. Pídales que lo escriban circular y pregunten cuál es el tiempo de ejecución asintótico de su implementación. O haga que escriban otra estructura de datos común y / o rápida ... ¿Un árbol de búsqueda binario? ¿Una cola (FIFO)? ¿Una pila (FILO)? ¿Una ingenua ( O(n)) cola de prioridad? Mucha gente que conozco piensa que un BST es O(log n) solo porque es un árbol .

Si usted está buscando a alguien que va a trabajar el metal, y necesita una muy sólida base en estructuras de datos ... estos pueden incluso ser mucho demasiado trivial para los candidatos que está buscando contratar.

Esto supone, por supuesto, que desea un desarrollador que tenga los fundamentos / fundamentos de las estructuras de datos y su posición se beneficiaría de esos fundamentos. Si quieres a alguien que pueda armar una página asp en segundos, entrevista para eso. El punto no es elegir una pregunta de entrevista porque todos los demás lo hacen, sino elegir una que mida las habilidades que estás buscando. Personalmente, creo que las preguntas sobre estructuras de datos son buenas, lista enlazada o no.

Steven Evers
fuente
No es confuso en la práctica. FizzBuzz es una pregunta aún más fácil y, sin embargo, los solicitantes habitualmente ni siquiera pueden comenzar a responderla. Lo mismo ocurre con las listas vinculadas. Es un misterio del mundo de la programación.
joshin4colours
@ joshin4colours: No, estoy confundido acerca de la pregunta. Al principio, el OP dice que las preguntas de LL son de dame, pero luego enumera los puntos de por qué un desarrollador calificado fallará la pregunta.
Steven Evers
3

¿Esta pregunta tiene suficiente utilidad para ser utilizada comúnmente para evaluar candidatos de programación en todos los ámbitos?

No absolutamente no. Dependiendo de cómo esté redactado, lo que le dirá irá desde "este candidato sabe cómo diseñar una lista vinculada" hasta "este candidato puede programar una lista vinculada en el lenguaje X". Si solicita un pseudocódigo, tenderá más hacia el primero. Si solicita una implementación en un lenguaje en particular, obtendrá más información sobre su comprensión del lenguaje (especialmente con C y C ++, donde puede tratar con punteros, referencias y estructuras).

Incluso iría tan lejos como para decir que no es posible evaluar a todos los candidatos con las mismas preguntas. Debe adaptar sus preguntas de entrevista para evaluar las habilidades que está buscando en el puesto.

Si la persona va a estar en posición de escribir código, pensaría en incluir una pregunta de algoritmo y / o estructura de datos, siempre que sea relevante para la posición. Intentaría elegir algo que podría haber sido discutido o usado antes. También me enfocaría en otras cosas además de la implementación de dichos algoritmos y estructuras de datos, como el tiempo de ejecución y el consumo de memoria (cosas como la notación big-O). Estos conceptos son relevantes no solo para crear la estructura de datos, sino también para elegir qué implementación es la más adecuada (como, por ejemplo, una ArrayListversus LinkedList).

Thomas Owens
fuente
3

No creo que un trabajo de programación regular sea una pregunta que elimine a un candidato. Pero es bueno ver si se trata de un programador realmente senior o alguien que solo ha estado usando códigos de mono durante muchos años. Y aun así, no debería ser un criterio fundamental para elegir un programador. Quizás es un gran programador con mala memoria y no ha leído las palabras "lista vinculada" en años (o no recuerda el nombre), pero aún puede hacer buenas aplicaciones.

Entonces, como algunos dijeron, si va a ser un trabajo que necesita trabajar con una lista vinculada y muchos algoritmos sofisticados, etc., entonces está bien. Si para los datos de entrada habituales en un formulario, validar y mostrar es un poco inútil e injusto.

H27studio
fuente
2

Creo que este es un mal ejemplo de una pregunta de entrevista, pero por una razón diferente. Una lista vinculada es un concepto tan simple que saber qué es es saber cómo implementarla. Si la persona no sabe qué es una lista vinculada, entonces debe explicar cómo funciona y, al hacerlo, da la respuesta sin descubrir nada sobre si sabe o no cómo resolver problemas . Entonces, la pregunta se puede reducir a "¿ya sabe qué es una lista vinculada y cómo funciona?", Lo que no le dice nada útil sobre su idoneidad como programador.

Mason Wheeler
fuente
2
Las preguntas populares también están sujetas a juegos por personas que son buenas para memorizar.
Paul Nathan
1
Si tiene que explicar cómo funciona una lista vinculada a un candidato, entonces probablemente no debería contratarlo para que haga la programación ...
Dima
2

Escribir una implementación de lista enlazada es una buena pregunta para la entrevista, porque revelará mucho sobre la forma de codificación del candidato:

  • ¿Sabe él qué es una API? ¿Puede usar el código de otras personas? ¿Puede escribir código para que otras personas puedan usarlo?

  • ¿Sabe él qué es una lista vinculada? ¿Conoce colecciones, estructuras de datos, algoritmos?

Si ni siquiera sabe qué métodos debe ofrecer una Lista Vinculada, es probable que nunca haya usado uno, o sabe cuándo usar uno.

  • ¿Cómo maneja el problema? ¿Comienza con un análisis primero, una pequeña especificación, algunas pruebas de antemano? ¿O simplemente comienza a hackear felizmente?

  • ¿Maneja casos extremos? ¿Qué pasa con la eliminación del último nodo de la lista vinculada? ¿Qué sucede si alguien intenta agregar una referencia a la propia lista vinculada a la lista vinculada y luego borra todo?

  • ¿Maneja las excepciones? Cada lenguaje de programación tiene sus propias convenciones para manejar excepciones: en Java, esperará que LinkedList arroje una NoSuchElementException cuando haga un getFirst () en una lista vacía. Otros idiomas pueden devolver indefinido, -1 o una constante.

Konerak
fuente
En un ejercicio de codificación de entrevista, a menos que se solicite específicamente, omitiría todo tipo de manejo de casos extremos, manejo de errores, etc., más allá de lo necesario para una prueba de concepto. PERO también dejaría en claro que es una elección que estoy haciendo. Las limitaciones durante una entrevista de una hora o incluso de unas pocas horas son muy diferentes de la situación en la que realmente está trabajando en algo que tendrá un uso real.
un CVn el