¿Cuál es la razón por la cual las compañías gigantes (por ejemplo, Google o Microsoft) hacen preguntas típicas como el árbol de búsqueda binario o el algoritmo tradicional o preguntas como la complejidad del algoritmo? ¿Cuál es el propósito? La mayoría de ellos no se usan en la vida real.

Nadie en este tipo de entrevistas de empresa le hará alguna pregunta que pueda responder directamente de un libro de texto si está entrevistando para el rol de SWE. Le preguntarán problemas del mundo real que los utiliza, como obtener registros entre fechas de un archivo de registro masivo.

Hay una gran diferencia entre usar sort () e implementarlos. ¿Alguna vez se preguntó quién escribe la función de clasificación y de dónde viene? Uno no puede sobrevivir un día sin una comprensión adecuada de O (n) al escribir código que se ejecutaría miles de millones de veces al día. ¿Alguna vez se preguntó cuántas veces se llamaría la función de clasificación implementada en JDK por segundo si considera todos los servidores globales? Un retraso de 1 ms se traduciría en millones de dólares en ahorros y efectos secundarios adicionales, como una menor emisión de CO2.

¿Este negocio de complejidad solo es relevante para un trabajo de tan bajo nivel? Alguna vez se preguntó sobre la diferencia entre

Lista a = nueva Arraylist ();
Lista a = nueva LinkedList ();

Hasta que comprenda O (n) de búsqueda, adición y eliminación de la matriz y la lista enlazada, tendrá dificultades para usar el tipo de lista correcto. Por supuesto, el hardware más rápido enmascara la mayoría de las ineficiencias de software subyacentes, pero si se le da la opción de ahorrar algunos núcleos / ram (dinero), ¿debería / debería uno decir no?

He visto compañías que pierden contratos y abren ofertas porque necesitaban hardware adicional frente a sus competidores. ¿Alguna vez se preguntó cómo un sistema puede utilizar menos recursos para realizar una tarea? En igualdad de condiciones, ¡es la misma O (n) lo que marca la diferencia!

Entonces, el punto es: O (n) es súper útil cuando se trabaja a escala.

Una de las cosas que están haciendo los entrevistadores es tratar de determinar si cada candidato tiene la aptitud para lo que Google llama SRE (Ingeniería de Confiabilidad del Sitio). Ahora, el ingeniero de software promedio no hace mucho trabajo algorítmico … pero los SRE sí, y necesitan entender lo que está sucediendo allí. El peor comportamiento en el peor de los casos es la causa de tantas interrupciones y problemas en los sistemas de producción. A menudo, una “consulta de la muerte” es un problema en el peor de los casos, y cambiar a un algoritmo con mejor comportamiento en el peor de los casos es la respuesta correcta.

El punto es que saber que puede suceder y cómo darse cuenta de que eso es lo que lo atrapó, en medio de la depuración de una emergencia de producción, es algo que sucede en el mundo real, y Google especialmente necesita encontrar a las personas que puedan hacerlo.

Aún mejor es tener una organización de ingeniería de software llena de personas que no cometerán ese error en primer lugar.

No me malinterpretes, no todos los días necesitas ese conocimiento … pero una vez por trimestre, lo necesitas. Pasé un par de meses este marzo-abril haciendo ese tipo de trabajo, para acelerar un sistema hasta el punto en que pudiera manejar limpiamente la carga de trabajo de producción nuevamente.

La respuesta es realmente muy simple. Hago una pregunta típica porque tengo un tiempo limitado para hablar con usted y no quiero gastarla explicando la pregunta. Quiero que pases la mayor parte del tiempo tratando de resolver el problema.

El problema que uso es uno que cualquier estudiante universitario habrá encontrado en una clase de programación temprana. Sin embargo, el candidato generalmente ha olvidado todos los detalles de la solución y deberá volver a resolverla. Por lo general, no explico el problema con el mismo detalle que lo que verías en un libro de texto para poder evaluar otros aspectos de cómo el candidato resuelve el problema. En una entrevista, estoy buscando mucho más que la capacidad de regurgitar una solución a un simple problema de programación.

Otros dos puntos. Primero, la complejidad algorítmica se usa en la programación del mundo real, pero generalmente no al nivel de detalle que se encuentra en una clase de estructuras de datos y algoritmos. Solo estoy buscando para ver si entiendes los conceptos y puedes aumentar la complejidad al mirar el código. Si haces algo increíblemente ineficiente, probablemente haré algunas preguntas y veré si entiendes y puedes hacerlo mejor. De lo contrario, no es realmente algo en lo que pueda profundizar dado el corto tiempo para una entrevista de codificación. Por supuesto, si está entrevistando para algún tipo de posición pesada de análisis de algoritmos, esto será diferente.

En segundo lugar, no estoy tratando de aplicar estrés. La entrevista es lo suficientemente estresante como es. La programación del mundo real no es un frenesí de mecanografía enloquecido y cronometrado. Requiere conocimiento, pensamiento, creatividad, atención al detalle y perseverancia. Aplicar estrés adicional no suele ser propicio para ninguno de estos.

Básicamente, lo que se te enseña en la universidad nunca se aplica en el mundo real. Se lo capacitará adecuadamente y se le dará la exposición al mundo real antes de unirse a un proyecto. Entonces, el objetivo principal de entrevistar a los candidatos es verificar si sus conceptos básicos, sus conceptos fundamentales de programación son sólidos o no. Si su nivel básico es fuerte, puede comprender rápidamente los conceptos complejos que se le enseñarán durante el entrenamiento. Puede haber personas que saben mucho, pero en parches porque su nivel básico es débil. No podrán entregar los resultados correctamente. Entonces estas compañías no buscan estudiantes expertos. Buscan buenos estudiantes que tengan un buen conocimiento de lo que han estudiado y cuán fuerte es su razonamiento analítico.

Esto no es verdad. Si explora algún lenguaje de programación, su funcionamiento interno de las bibliotecas, cómo funciona la base de datos, cómo funciona la indexación en db, cómo distribuye la carga en múltiples servidores, escalado, almacenamiento en caché, etc. Existen infinitas instancias en la aplicación del mundo real donde utiliza todos estos conceptos. . Cuando escribes código en una aplicación del mundo real. Puede haber miles de usuarios accediendo al mismo tiempo o más que eso. Entonces, si intenta analizar el consumo de memoria de su servidor en ejecución, comprenderá por qué juega un papel crucial. Ahora, si no escribe código con buena complejidad de tiempo, seguramente afectará el rendimiento de su aplicación en producción. Entonces diría

“Estructura de datos y algoritmos: esencia de la programación”

No son solo algunos problemas los que debes resolver durante la entrevista, sino que te enseñan mucho a largo plazo. Así que siempre sigue aprendiendo algoritmos. Te enseña a escribir el mejor código para tu aplicación.

En primer lugar, esas son las preguntas de calentamiento.

En segundo lugar, esas cosas se usan ampliamente en el mundo real, por programadores reales, los que escribieron las bibliotecas que está utilizando. Google no necesita el tipo de personas que solo pueden usar bibliotecas. Google quiere el tipo de personas que pueden escribir esas bibliotecas.

Finalmente, si nunca ha necesitado conocer la complejidad del algoritmo, es porque nunca ha trabajado en un problema del tamaño real. A escala de Google, la diferencia entre O (N ^ 2) y O (NlogN) puede ser de cientos de millones de dólares.

Las grandes compañías de software hacen preguntas sobre algoritmos tradicionales porque son importantes para que un buen ingeniero de software las conozca.

La definición de “ingeniero de software” es amplia, pero compañías como Google y Microsoft buscan personas que puedan escribir código complejo que maneje datos y decisiones importantes, y que puedan trabajar eficientemente en términos de velocidad y almacenamiento.

En otras palabras, debe tener un conjunto de herramientas de soluciones para necesidades comunes, como ordenar y buscar datos, y debe comprender cuándo usar usar qué.

A veces, estas decisiones no importan: a nadie le importa cómo clasifica una lista de cinco elementos. Pero, ¿qué pasa si es la biblioteca de música para un usuario con 50,000 canciones y hay 50 formas comunes en que se clasifican y acceden? ¿Qué sucede si necesita poder comprender y acomodar diferentes casos de uso, como escritura y búsqueda y recuperación poco frecuentes, o escritura y recuperación iguales? ¿Qué sucede si necesita mantener las solicitudes ordenadas por alguna combinación de prioridad y tiempo de espera, por lo que siempre está trabajando en la tarea más importante? ¿Qué sucede si necesita representar un gráfico de interés de múltiples usuarios en diferentes géneros de música y artistas, y hacerlos comparables entre los usuarios?

Todos estos elementos de trabajo son problemas reales que los ingenieros reales resuelven en las grandes compañías de software. Y todos requieren un conocimiento práctico de algoritmos comunes, sus complejidades y sus requisitos de recursos. Si alguien acaba de decirle ‘use una tabla hash para esto’ sería una cosa, pero se espera que descubra si necesita una tabla hash, un árbol, una lista simple, una matriz, lo que tiene y las implicaciones de esa decisión. Eso significa que debe saber qué existe para elegir y cuándo elegirlo.

Las grandes empresas no quieren perder el tiempo en sus entrevistas. Están haciendo preguntas que ellos y sus ingenieros han encontrado correlacionados con que alguien es un buen ingeniero. Si no sabe las respuestas a los tipos de preguntas que están haciendo, debe volver a examinar su base de conocimientos.

Para mantener a los viejos. Seriamente. Cubrí esto antes, pero bien podría hacerlo nuevamente.

Este no es un esfuerzo concertado para promover el ageismo (excepto en el caso de Facebook donde las entrevistas bordean lo espeluznante), sino más bien una tormenta perfecta de procesos basados ​​en datos y cultura insular. Los comentarios han demostrado que hacer preguntas al algoritmo es un buen predictor del éxito futuro, por lo que se alienta a esas preguntas.

Pero, ¿por qué son buenos indicadores? La causalidad no es una preocupación para un empirista, solo resultados; entonces al comité de contratación no le importa. En cuanto al resto de nosotros, sospecho que la correlación subyacente es que un sólido conocimiento algorítmico indica un trabajo académico reciente, y dado que esos lugares de trabajo actúan más como campus universitarios (con cafeterías tipo dormitorio), las personas que acaban de llegar de la universidad se sentirán más cómodas. Las personas que vienen del mundo real (es decir, los Viejos) se sentirán menos cómodas y pasarán la mayor parte del tiempo tratando de salir.

Solo para que conste, nunca hice preguntas de complejidad durante mis entrevistas: me centré principalmente en por qué: ¿por qué haríamos eso? ¿Por qué funciona eso? ¿Por qué se cuelga eso? Lo más cerca que llegué a buscar árboles fue cubrir árboles binarios persistentes, y eso fue solo una transición hacia el paralelismo y las operaciones atómicas. Los PBT fueron mi goto para los desarrolladores junior mucho antes de Google y lo serán para el resto de mi carrera porque nadie lee las notas finales en los libros de texto.

Estas compañías tecnológicas gigantes hacen esas preguntas porque quieren contratar ingenieros que puedan trabajar en problemas complejos y puedan desarrollar soluciones ” eficientes ” para esos problemas. Y esta eficiencia es realmente importante cuando millones de usuarios intentan acceder a los datos al mismo tiempo y hay que generar los resultados lo antes posible. en costo mínimo.

¿Alguna vez has pensado cómo Google puede buscar petabytes de datos y darnos los resultados en muy poco tiempo? Eso es la eficiencia.

Ahora viene el uso de estructuras de datos y algoritmos en la vida real.

  • ¿Sabe qué tipo de estructura de datos se utiliza en la autocorrección de su teléfono ? Es trie con alguna coincidencia de patrones.
  • ¿Sabes qué estructura de datos se usa cuando reproduces canciones de tu lista de reproducción ? Es cola
  • ¿Sabe qué estructura de datos se utiliza en la operación Deshacer-Rehacer de su computadora? Es pila
  • ¿Sabes cómo Google Maps encuentra la ruta más corta a tu destino? Utiliza el algoritmo de Dijkstra .
  • ¿Sabes cómo funciona Shazam? Genera la música en códigos alfanuméricos únicos y realiza una búsqueda en su base de datos de 8 millones de canciones utilizando este código único como clave. Esto es Hashing .
  • Existen varios algoritmos gráficos que se utilizan para transferir datos dentro o a través de la red. Estos son Bellmon Ford, Dijkstra, etc.

Por lo tanto, sería un error decir que las estructuras de datos y los algoritmos no se usan en escenarios de la vida real. Entonces, si quieres entrar en un gigante tecnológico, tienes que ser bueno en estas cosas.

Espero eso ayude.

Feliz aprendizaje. 🙂

“La mayoría de ellos no se utilizan en la vida real”

¡Sí! Claro, ahora asuma que está más fresco y un reclutador de Google pregunta:

Si nuestro servidor se cae repentinamente por algún hacker que utiliza el código más sofisticado jamás escrito, ¿cómo lo recuperaría en el menor tiempo posible sin darle al usuario ninguna mala experiencia?
y por favor conteste en 10 segundos.

¡Supongo que la mayoría de nosotros habría llorado a nuestra suerte al escuchar alguna pregunta!

Tuve las mismas consultas en el pasado, luego me hice la pregunta: ¿por qué no deberían?

Estos son los conceptos básicos para alguien con experiencia en informática . Puede ser que él / ella no necesite implementar estas cosas manualmente durante toda su carrera. Pero, uno debe entender estos conceptos básicos y básicos para ser un buen reclutamiento. Conceptos básicos sólidos significan una comprensión más profunda de las cosas , una mejor capacidad para profundizar en los problemas, lo cual es una gran calidad de un empleado potencial de estas gigantes empresas tecnológicas.

Además, se requiere un conocimiento teórico adecuado antes de saltar al trabajo práctico. Estos son los temas y temas comunes que todos aprenden y deben saber. Luego se ponen a trabajar con algo especial, algunas herramientas pueden ser. Y ninguna gran empresa quiere que omita estos conceptos básicos y fundamentales, si desea estar dentro de estos lugares.

Espero que ayude.

“La mayoría de ellos no se utilizan en la vida real”

Eso es una broma.

La complejidad del algoritmo es la razón más importante por la cual las empresas escalan a tal nivel.

Si Google no utilizó la búsqueda binaria, habría sido muy lento desde el día de la creación de la empresa. Si linkedin no usara BFS, la cantidad de conexiones que ve con otro miembro hubiera tomado mucho tiempo.

Para los sitios web que tienen interacción directa con millones de consumidores, la complejidad de los algoritmos importa MUCHO.

PD: No digo que estos sean los algoritmos utilizados, sino solo una retrospectiva. Ciertamente tienen algoritmos que son más complicados.

La única forma en que los problemas que pido en las entrevistas no son “del mundo real” es que se simplifiquen. Caso en cuestión: he pedido a los candidatos que escriban código que evalúe expresiones (como “1 + 2 * 3”). Simplifico el problema porque escribir un evaluador de expresión completa es demasiado complejo para una breve entrevista.

Una vez, un candidato preguntó por qué les pediría que escribieran código para un problema tan poco realista. Um … evaluar expresiones de cadenas (de hecho, mucho más complejas) es una característica importante de las hojas de cálculo, compiladores y muchas otras aplicaciones ampliamente utilizadas.

En general, una entrevista de este tipo trata de calibrarlo como persona y como ingeniero. Se pueden presentar preguntas para aplicar el estrés, reducir el estrés o generar más preguntas. Los detalles de la pregunta no son realmente importantes y su respuesta no es realmente importante … cómo llega a la respuesta y cómo presenta la respuesta que es importante … la mayoría de las veces.

Piense en cualquier pregunta que se le haga como un simple aviso para que demuestre su habilidad, talento y carácter … porque eso es lo que generalmente trata de calibrar más que su capacidad para recordar frases clave o respuestas enlatadas.

¿Qué quiere decir “la mayoría de ellos no se utilizan en la vida real”. Seguramente se usan en bibliotecas. Especialmente si está escribiendo código de bajo nivel para una ubicación de acceso de varios miles de millones por día en un sistema, unos pocos cientos de ciclos de CPU ahorrados significan varias CPU que valen la capacidad del servidor. Quizás las CPU son más baratas cada día, pero la energía no lo es.

Al menos quieren saber si puedes codificar y resolver el problema del mundo real. En segundo lugar, evalúan “el nivel de inteligencia” frente a otros candidatos ‘porque se puede ver, es como un examen regular para que los estudiantes seleccionen genio para participar en IMO o IOI: v, lol

Para eliminar a las personas que no pueden responder estas preguntas 🙂

Solo quieren descubrir al próximo innovador.

La verdadera razón es que quieren saber qué tan bueno eres para resolver problemas. Ver a alguien resolver este tipo de problemas explica mucho sobre su procesamiento de pensamiento y su potencial para convertirse en el próximo innovador. Otro y lo más importante de todo, vas a trabajar con un montón de nerds que pueden resolver esto en sus sueños. Quieren que encajes. De lo contrario, creará más problemas para el equipo.

More Interesting

Dada una lista de enlaces con punteros derechos, cada elemento de la lista tiene un enlace descendente que contiene otra lista de enlaces con punteros descendentes, de modo que cada lista derecha y abajo están ordenadas. ¿Cuál es la forma más rápida de aplanar la lista de enlaces de forma ordenada?

¿Cómo los algoritmos de programación dinámica son mejores que otros algoritmos?

¿Qué algoritmo se debe usar para encontrar que hay una conexión en cada dos vértices en un gráfico dirigido?

Para una computadora, ¿qué tan aleatorio es ser aleatorio?

¿Cuál es un ejemplo de un algoritmo iterativo que se ejecuta en [matemáticas] O (2 ^ n) [/ matemáticas]?

¿Cuál es el algoritmo detrás de la creación de una nueva fuente que solo muestra publicaciones de tus seguidores?

¿Cuál es el significado de 'orden de crecimiento' en el análisis de algoritmos y cómo podemos encontrar el orden de crecimiento de un algoritmo dado?

¿Cuándo podrán los algoritmos de detección de imágenes filtrar imágenes ofensivas de manera confiable?

¿Tiene sentido saltar directamente a las máquinas de vectores de soporte en lugar de probar con otros algoritmos lineales, primero, en el aprendizaje automático?

¿Por qué es Forth el lenguaje de programación para practicar la escritura de algoritmos?

Cómo demostrar que el camino más corto posible entre dos puntos es una línea recta

Cómo resolver la pregunta 'Mango Plantation' en Codechef

¿Qué tipo de algoritmo de procesamiento del lenguaje natural se usaría para replicar los resultados de esta charla TED?

¿En qué se diferencia una tabla hash de una lista vinculada o una matriz?

¿Por qué usar un diagrama de flujo es una mala práctica en la programación?