¿Qué tan común es que se le pida que implemente la correspondencia de expresiones regulares en la entrevista?

Es prácticamente imposible implementar un comparador de expresiones regulares completo en un escenario típico de entrevista y nunca he oído hablar de una pregunta así a alguien que conozco. Pero he escuchado que tal pregunta se hace pocas veces en entrevistas para una sintaxis de expresión regular restringida. Vea Coincidencia de expresiones regulares para un ejemplo de este tipo, una pregunta más simple es olvidar que el carácter comodín también construye un emparejador de expresiones regulares con soporte para * es decir, patrones como ab * caade * f * g. Este tipo de restricciones permiten atacar el problema incluso sin el conocimiento de la teoría del lenguaje formal.

Cuando se enfrenta a tal escenario, es mejor informarle al entrevistador que tiene contacto con los autómatas por cualquier razón que intentar reformular la teoría de autómatas a partir de las reglas básicas en una entrevista. Probablemente el entrevistador pueda darle una pista de que el problema puede resolverse sin el conocimiento del mismo.
Si realmente requiere el conocimiento de los autómatas, idealmente, el entrevistador debe pasar a una pregunta diferente, ya que no tiene sentido elegir los puntos débiles de un candidato y probarlos a menos que el entrevistador (o su empresa) sienta que es un área demasiado central para la cual La ignorancia de los candidatos no se puede permitir.

Personalmente, creo que el autómata finito es algo que todos los graduados de CS deben conocer, probablemente la percepción cambiará después de pasar unos años más en la industria. Si tuviera que hacer una pregunta basada en ella en una entrevista, nunca haría algo que necesite un conocimiento teórico más profundo, como clases de equivalencia y otras cosas. Preguntaría algo que explote el funcionamiento básico de un autómata e incluso ayudaría a alguien que ha perdido el contacto con el campo a recordar cómo funciona un autómata para que sea lo suficientemente justo para ellos.

Me han pedido que implemente un comparador de expresiones regulares para una subclase de expresiones regulares (que implica los símbolos especiales ^, $,. Y *).

No es necesario usar autómatas para esto. Consulte el siguiente artículo para obtener una solución breve en C: Página sobre Princeton

De cualquier manera, sin embargo, esta es definitivamente una pregunta contundente para una breve entrevista de 45 minutos. No hay duda al respecto.

Se me pidió que implementara una función simple de coincidencia de expresiones regulares que solo admite ‘*’, ‘+’ y ‘.’ cuantificadores: como la primera de dos preguntas en una entrevista de 45 minutos en Google (la cuarta entrevista en una serie de cinco).

No pude proporcionar una solución dentro de los 20 minutos que me dieron. En realidad, me tomó un par de horas resolver esto, e incluso eso, solo después de leer algunos antecedentes.

La pregunta no es común, pero sé que se hace también en Microsoft y Facebook. Si está a punto de ser entrevistado en una de las compañías de software más deseadas, será mejor que practique su solución.

No me han pedido que implemente un comparador de expresiones regulares en una entrevista, pero el concepto de una máquina de estado ha surgido varias veces. El ejemplo más común es la implementación de una biblioteca de comunicación HTTP en un navegador. Muchos protocolos y diseños de tecnologías web tienen una máquina de estado como componente.

Creo que es justo hacer esta pregunta porque la mayoría de los desarrolladores han usado expresiones regulares en algún momento y es natural preguntarse cómo se podría implementar una función de coincidencia de expresiones regulares. Si el entrevistador restringe las capacidades de expresión regular a un conjunto pequeño, es posible implementar una función de correspondencia sin conocer la teoría de los autómatas. Aunque, la teoría de los autómatas es ciertamente un juego justo considerando que es parte del plan de estudios para la mayoría de los informáticos.

Si alguien está interesado, aquí está mi implementación rápida y sucia de un analizador y analizador de expresiones regulares:
https://github.com/milkbikis/min

Recibí esta pregunta en una entrevista telefónica de Facebook. Lamentablemente no pude resolverlo. Comencé a implementar un algoritmo iterativo, pero pasé unos 20 minutos haciéndolo hasta que el entrevistador señaló que es necesario un algoritmo recursivo (para tratar el caso *). A partir de ahí, siguió bajando.

Nunca me han pedido que implemente la coincidencia de expresiones regulares, aunque he usado expresiones regulares para responder algunas preguntas de la entrevista.

Sin embargo, creo que el entrevistador estaba buscando experiencia de compiladores con esta pregunta. Todos los lenguajes regulares en la jerarquía de Chomsky se pueden representar como expresiones regulares, y en el curso de la clase de un compilador típicamente implementará un lexer usando un autómata de estado finito.

Si es una pregunta justa o no depende de la empresa y / o equipo.

Si, complicado.

Es particularmente complicado ya que puedo implementar un emparejador de expresiones regulares en media docena de líneas de código que manejarán secuencias de caracteres, clases de caracteres, opcionalidad, cero o uno, uno o más, cero o más y expresiones entre paréntesis, pero la implementación funcionará horriblemente exactamente de la manera descrita La coincidencia de expresiones regulares puede ser simple y rápida

Implementar una versión mejor no es trivial y no me gustaría hacerlo en condiciones de entrevista

Típicamente simplificado en la entrevista. Dfs o dp pueden ser lo suficientemente buenos.

More Interesting

¿Cómo puedo equilibrar los paréntesis en una cadena usando un número mínimo de ediciones?

Quiero prepararme para trabajos de programador / desarrollador para enero o febrero de 2017. ¿Cómo debo asignar tiempo eficientemente si actualmente trabajo a tiempo completo?

Cómo encontrar de manera óptima la suma máxima de un par de números en una matriz, módulo k

En una entrevista de ingeniería de software, ¿qué debo esperar durante un panel par?

Cómo hacer un seguimiento de mis preparativos para la entrevista de programación

¿Cómo podemos cubrir un área MxN con un costo mínimo, a partir de un conjunto de mosaicos que tienen diferentes dimensiones y diferentes costos?

¿Cuáles son algunas preguntas típicas de entrevistas de diseño para ingenieros de software?

Se le da una lista de N intervalos. ¿Encuentra la longitud del subconjunto más grande de intervalos de modo que no haya tres intervalos en el subconjunto que compartan un punto común?

¿Cuáles son las preguntas más comunes que se hacen en las entrevistas para IAS?

Cómo diferenciar entre Declaración y Definición de una variable

¿Puedo prepararme para las preguntas de la entrevista de diseño del sistema en 10 días?

¿Cuáles son algunas de las preguntas importantes de la entrevista técnica que utiliza la estructura de datos matriciales?

¿Por qué las empresas te asignan tareas de tipo universitario en una entrevista de trabajo para un programador?

¿Cuáles son algunas de las preguntas de programación de computadoras que la gente ha encontrado en entrevistas para trabajos de nivel inicial y pasantías?

¿Qué es una biblioteca de entrada / salida?