¿Cómo conseguir un trabajo en Facebook o Google en 6 meses? Necesito un plan de trabajo conciso para construir un conjunto de habilidades lo suficientemente bueno. ¿Debo unirme a alguna otra startup o construir mis propios proyectos / start-ups? ¿Debería concentrarme en practicar estructuras de datos y algoritmos?

Algunas respuestas aquí ya son realmente buenas, pero creo que podría ser valioso contar con la perspectiva de alguien que se capacitó para estas entrevistas recientemente y recibió una oferta de trabajo como resultado directo. Así que responderé su pregunta y le diré cómo puede conseguir un trabajo en Google y Facebook en 1 mes (preparación de 1 mes, eso es). Por cierto, la brevedad no es mi fuerte, así que esta publicación puede que te lleve un tiempo terminar, pero prometo que vale la pena, y haré todo lo posible para responder las preguntas que publiques en los comentarios sobre detalles, porque casi definitivamente me olvidaré de mencionar algunas cosas importantes (yo preparado para las entrevistas hace unos 5 meses, así que esto se basa solo en mi memoria).

Voy a detallar cómo me preparé para las entrevistas técnicas en ~ 1 mes, después de lo cual conseguí un trabajo en Facebook. El proceso de obtener una entrevista hasta obtener una oferta probablemente tomará 1-2 meses extra después de eso. Para mi propia experiencia durante el proceso de entrevista real, vea la respuesta de Jimmy Saade a ¿Cómo es el proceso de entrevista de ingeniería de software en Facebook Londres? Tenga en cuenta que esto es para el puesto general de Ingeniería de Software (en mi caso, nuevo graduado), y nada específico como el desarrollador de Android / iOS, o el Ingeniero de Infraestructura, etc.

Lo bueno y no tan conveniente de las entrevistas tecnológicas es que nunca sabes lo que vas a obtener, por lo que debes estar preparado para una gran variedad de posibles temas, algunos de los cuales tienen más probabilidades de ocurrir que otros. . Tocaré estos a continuación y luego describiré algunos tipos de preguntas muy importantes que pueden surgir y que debe estar preparado para tratar.

Digamos que tu entrevista es en un mes. Así es como planearía dicho mes (suponiendo un horario de tiempo completo). Tenga en cuenta que esto es lo que haría (y lo hice, en realidad), por lo que podría no ser el enfoque óptimo para usted, pero le sugiero que trabaje de manera similar y lo cambie un poco en función de cómo cree que comprendería mejor los conceptos (p. Ej. resolver y codificar en paralelo, a diferencia de lo que hice, que es resolver todo y luego codificar todo …)


Días -∞ a 0: requisitos previos

Supongo que ha tomado un curso de algoritmos y conoce las principales estructuras de datos, incluidos, entre otros: árboles binarios, árboles de búsqueda binaria, tablas hash, montones, pilas, colas, gráficos, listas, intentos … así como todos los algoritmos relacionados con ellos (insertar, eliminar, buscar, encontrar, encontrar máximo, encontrar mínimo …) y la complejidad del tiempo para cada uno de ellos, al menos en un nivel alto. Para los gráficos, debe conocer las búsquedas (BFS y sus propiedades, DFS y sus propiedades, incluida la detección de ciclos y similares) y los algoritmos de ruta más corta (Dijkstra, Bellman-Ford y A *) como mínimo. Si no sabe todo esto, junto con la programación dinámica, necesitará más de un mes. Elija Introducción a los algoritmos (CLRS) y comience a estudiarlos primero. ( Actualización: Publiqué una respuesta aquí: la respuesta de Jimmy Saade a ¿Qué debo saber del libro de la 3ra edición de CLRS si mi objetivo es ingresar a Google? en cuanto a qué partes de CLRS son relevantes para las entrevistas técnicas.) Esta es la parte fácil, ya que es todo académico y se espera que lo sepas todo. La parte que sigue a continuación (Día 1 en adelante) es la parte realmente valiosa que puedo ofrecerle.

También supongo que conoce un lenguaje de programación como C ++ (o Java) y las funciones integradas que realmente lo hacen útil (es decir, STL o sus equivalentes de Java). ( Actualización 2: publiqué información relevante para esto aquí: la respuesta de Jimmy Saade a ¿Cuáles son los conceptos más importantes en C y C ++ que se deben aprender y comprender antes de una entrevista de programación?). Si no conoce STL, dedique tiempo a aprender vectores, mapas, conjuntos, mapas desordenados, conjuntos desordenados, colas, pilas y toda la biblioteca de “algoritmos” (en serio, todo). Estas son esencialmente implementaciones de lo que acaba de aprender en CLRS, por lo que si necesita usar un montón, no comenzará a codificar uno durante una entrevista (solo use un mapa o una cola de prioridad). También necesita saber cómo implementar una lista vinculada, BST y un trie en 5 minutos, lo que es mucho más fácil de lo que parece (solo cree una clase de nodo y una función de inserción y para fines de entrevista, está bien. )

No asumo que sabe algo sobre los siguientes temas: programación paralela, redes de computadoras (HTTP / TCP / IP / Ethernet), sistemas operativos / programación, hilos / procesos / paralelismo / concurrencia, ensamblaje, hardware y lenguajes descriptivos de hardware, o cualquier otra cosa Si bien estos son conceptos valiosos para conocer como informático (como lo son el aprendizaje automático y la inteligencia artificial y otros), las posibilidades de que aparezcan son prácticamente nulas a menos que las establezca como habilidades en su currículum, por lo que su tiempo se gastará mejor en otro lugar (es decir, trabajando en los temas a continuación). Sin embargo, debe tener cierta conciencia de la informática distribuida, así que desplácese hacia abajo hasta la sección Diseño del sistema para eso y asegúrese de leer el documento de MapReduce como mínimo.

Día 1 – El libro

Compre este libro: Elementos de las entrevistas de programación. Uf. Eso fue difícil.
Con toda seriedad, este es el mejor libro sobre el tema en mi opinión, y realmente estoy realmente sorprendido por lo que poca gente lo sabe o lo usa. (No estoy afiliado con este libro). La colección de preguntas es excelente y hasta el punto, es grande (más de 300 problemas, que es lo más que he visto en un libro), se centran en los conceptos correctos (por ejemplo, varios problemas están en la búsqueda binaria, que es muy probable que surja en una entrevista, más que cualquier otro algoritmo), y sus respuestas (y el código proporcionado) son casi todas correctas y excelentes. Digo “casi” porque hay 1 o 2 problemas que tienen soluciones mucho más simples que los detalles del libro, pero no es un problema, especialmente cuando lo comparas con otros libros de entrevistas de programación, que tienen varias respuestas que son francamente incorrectas. Además, la comunidad de soporte en línea es bastante buena, con código Java disponible para todos los problemas (el libro los tiene solo en C ++) y un foro en línea para discusiones en el hogar – Elementos de entrevistas de programación. También renuncian a todas las cosas de “enseñanza” que tienen otros libros donde intentan enseñarte estructuras de notación y datos de gran O, y se centran casi por completo en la parte de los problemas, que es mucho, mucho, mucho, mucho más importante. La notación big-O y las estructuras de datos que debe aprender de CLRS, que es el mejor recurso para ellas, punto. Ningún otro libro, especialmente los libros de entrevistas de programación, se acerca a su calidad en la enseñanza de esas cosas.

También sé (a través de varias fuentes) que varios de estos problemas realmente se preguntan tal como están (o en forma encubierta) durante las entrevistas, lo que muestra cuán puntual es. (Me imagino que una razón para eso puede ser su baja popularidad en comparación con otros libros de entrevistas, ya que las compañías prohíben que las preguntas que están ‘por ahí’ sean formuladas en las entrevistas, por lo que probablemente no verá las preguntas de Cracking the Coding Interview .) Sin embargo, si esto le sucede, le sugiero que se lo diga a su entrevistador, ya que es muy fácil para ellos saber si conoce el problema antes o no, y si simplemente recita la respuesta, no cumple con el propósito de la entrevista. Por suerte para mí, no me preguntaron ninguno de los problemas que había hecho con el libro.

Días 2-14 – Etapa de algoritmos

Repase el libro capítulo por capítulo, un capítulo por día [1], comenzando en el Capítulo 5, terminando en el Capítulo 19. Haga todos los problemas. Todos ellos. (Para ser completamente honesto, podría haber omitido algunos, pero esto fue más por accidente que cualquier otra cosa, y definitivamente me gustaron más del 98% de ellos). No codifique, resuelva solo los problemas (es decir, encuentre el algoritmo ) Dése una fecha límite por problema, dependiendo de cuán difícil sea el problema (por ejemplo, 10 minutos para problemas no ninja [2], 20 minutos para problemas gray-ninja, 30-40 minutos para problemas black-ninja), si No he encontrado la solución para entonces, mira la respuesta y entiéndelo. Si no lo haces, no mejorarás. Es importante pensar en los problemas por su cuenta, porque lo importante es la forma de pensar, ya que no puede ir y recitar el libro el día de la entrevista. Si encontró una solución, asegúrese de que sea correcta y que haya pensado en todos los casos de esquina.

Nota 1: La nueva versión del libro (a la que me vinculé) tiene todos los problemas de los ninjas en un capítulo separado (Capítulo 22). Esto, en mi opinión, es una idea terrible. El libro que tuve tuvo los problemas que actualmente están en Ch. 22 repartidos por el libro, cada uno en su capítulo correspondiente. Le sugiero que revise los problemas ninja relevantes de cada capítulo mientras hace dicho capítulo. Por ejemplo, en el Día 2, haga el Capítulo 5, y los problemas relacionados con el Capítulo 5 en el Capítulo 22. En el Día 3, haga el Capítulo 6, y los problemas relacionados con el Capítulo 6 en el Capítulo 22, y así sucesivamente. Creo que los problemas en el cap. 22 están ordenados en consecuencia (los problemas ninja del Capítulo 5 son lo primero, luego los del Capítulo 6, y así sucesivamente), por lo que esto no debería ser demasiado difícil, pero no estoy 100% seguro porque tengo la copia anterior del libro.
Nota 2: A veces pasaba horas en un solo problema, solo porque pensaba que el problema era realmente interesante e insistía en resolverlo yo mismo. Considero que estos esfuerzos aleatorios son útiles a largo plazo, ya que desarrolla su pensamiento crítico mucho más que los problemas más fáciles, pero también lleva tiempo, por lo que es probable que no pueda hacer esto para cada problema, incluso si lo desea. en absoluto.

Días 14-24 – Etapa de codificación

Repita el libro, esta vez con codificación. Ya conoce las respuestas, por lo que debería poder recordar el algoritmo para cada problema con bastante rapidez (si no lo hace, búsquelo. Ocurre, y puede suceder a veces incluso si previamente había resuelto el problema usted mismo.) Esta es la etapa de codificación, así que no pierda el tiempo derivando algoritmos.

No sugiero que codifique todos los problemas, especialmente si tiene experiencia con ACM-ICPC, TopCoder o Codeforces y similares (y realmente, si está lo suficientemente familiarizado con STL, probablemente tenga un conjunto de habilidades decente). Solo escriba el código para los problemas que considera que tienen algoritmos complejos, una nueva estructura de datos que no ha utilizado antes (por ejemplo, un mapa desordenado para el hash tal vez), problemas con casos de esquina complicados (la búsqueda binaria está en la parte superior de esta lista ya que sus variantes son preguntado a menudo y puede ser mucho más complicado de lo que piensas) o un concepto de programación con el que no te sientes cómodo (esto incluye, pero no se limita a, sobrecarga del operador, comparadores personalizados, funciones hash personalizadas, funciones == personalizadas y mucho más … ) Si un problema le resulta difícil o lo implementó de una manera que considera que no es óptima, consulte las soluciones que ofrece el libro, que son excelentes y limpias, y le enseñará todos los conceptos mencionados anteriormente. Le sugiero que imite un poco su estilo de escritura de código. Algunas notas importantes, si son obvias, son: use nombres de variables descriptivas (ninguna de esas basura de nombre de variable de 1 letra) y sangría correctamente, y no olvide cerrar paréntesis y corchetes.

También le sugiero que codifique todos los problemas del capítulo Algoritmos codiciosos y casi todos los problemas marcados con ninjas. El capítulo de Programación dinámica también es importante si no está familiarizado con DP y puede ser difícil de entender, así que asegúrese de darle su tiempo.

Día 25 – En más preguntas

Entonces, ahora que ha agotado la mejor reserva de preguntas y está lo suficientemente cómodo como para entrar en una entrevista, usted … necesita prepararse aún más. Vaya a Preguntas de la entrevista de Google (Career Cup). Este es un lugar peligroso. Existen algunos problemas muy buenos, pero también hay una clase de problemas que a mi entrenador de ACM le gusta llamar “problemas de Chuck Norris”: problemas escritos donde el OP no tiene idea de lo que está sucediendo y sugiere que el entrevistador requirió tiempo lineal para problemas que claramente no pueden ser hecho en tiempo lineal (como este, que claramente no es tiempo lineal: http://www.careercup.com/questio…), o similar.

Ahora que ha terminado Elementos de las entrevistas de programación, debería poder diferenciar fácilmente entre buenos problemas y problemas terribles. El día 25, revise “todas” (las últimas 20 páginas más o menos) las Preguntas de Google (incluso si se está preparando para Facebook) y haga una lista de las que considere “buenas”, y con “buenas” quiero decir Los problemas que siente podrían haberse planteado en una entrevista de Google. Conoces el estilo de pregunta del libro, por lo que deberías poder decir cuáles son legítimos y cuáles son cuestionables. Supongo que al final debería tener una lista de 80-120 preguntas, algunas simples, otras no tanto.

También tenga en cuenta que muy pocos problemas realmente tienen respuestas correctas publicadas en el sitio, por lo que principalmente tendrá que confiar en su conocimiento para resolverlos y asegurarse de que sean correctos, pero dada su preparación anterior, no encontrará es muy difícil saber cuándo debes estar seguro de tu respuesta y cuándo no. Esto es realmente una preparación valiosa para la entrevista real, que es una experiencia similar.

Días 26-30 – Resolviendo preguntas de la Copa de Carrera

Resuelve todos los problemas que anotaste el día 25. Encuentra el algoritmo. Si siente que es demasiado difícil, busque ayuda. Si cree que es imposible o la mejor solución es el tiempo exponencial, realmente podría ser que el OP se equivocó. Sacúdetelo, pasa a otro problema. Si todavía te apetece, codifica algunos de los problemas más desafiantes.
Varias de las preguntas de Career Cup son similares a las del libro, por lo que no debería tener demasiados problemas con la mayoría de los problemas.

Día 30.5 – Saltar listas (solo Google)

Escuché que Google recientemente se ha acostumbrado a preguntar sobre las listas de omisión (no estoy seguro de por qué). Mira este video:

y entenderlo y conocer el análisis de los tiempos de ejecución esperados. Después de eso, implemente y pruebe su propia Lista de saltos. Hice esto solo para practicar y porque las listas de omisión son interesantes de todos modos.

Para ser sincero, Google puede ser bastante impredecible con sus preguntas a veces, en mi experiencia. Pueden hacer preguntas generales sobre programación orientada a objetos o redes de computadoras, comandos de Linux como grep, cosas teóricas como la prueba del límite inferior de clasificación, preguntas de codificación que se basan en algún concepto matemático que puede haber olvidado resolver, o en profundidad preguntas del lenguaje de programación (por ejemplo, sobrecarga de functores / operadores en C ++). Supongo que depende de su currículum vitae y de lo que usted dice que es competente, por lo que mi consejo es que no ponga nada allí que no sea al menos algo competente. Ayuda tener un título en Ciencias de la Computación o Electricidad e Informática Ingeniería, realmente, solo basada en la gran variedad de posibles preguntas. Sugiero una lectura completa de Obtener ese trabajo en Google (Steve Yegge) y Cinco preguntas esenciales sobre la pantalla del teléfono (Steve Yegge). Probablemente debería conocer la mayoría de los temas tratados aquí (sin embargo, no invertiría mi dinero en cosas como hilos / procesos / paralelismo a menos que lo indique explícitamente en su currículum). La mayoría de las preguntas de codificación en el segundo enlace son creo que es muy fácil llegar a una entrevista, así que no te entusiasmes demasiado y me saltearé la sección “Versión especial de vía rápida”. Es gracioso, pero pensé que era demasiado cínico y fuera de lugar. Su elección del editor de texto, el conocimiento del sistema operativo o el conocimiento de uno o varios idiomas no le harán , en sí mismos, fallar una entrevista.

En una pequeña nota, aunque creo que Google puede hacer muchas preguntas no algorítmicas como la anterior, la mayor parte de la entrevista seguirá siendo estructuras de datos / algoritmos / codificación, por lo que todas las otras cosas mencionadas en el blog de Yegge deberían saberlo, pero No son el foco principal.

Día 31 – Las cosas no técnicas

Bien, entonces estoy engañando un poco agregando el Día 31, pero también deberías tomarte un día más o menos para prepararte para la parte no técnica de las entrevistas, especialmente si estás entrevistando en Facebook, donde hay un programa no técnico entrevista. Primero, prepare las preguntas que desea hacer a sus entrevistadores sobre Facebook y sobre su trabajo y lo que hacen todo el día. Vea mi publicación de Facebook en Londres para obtener más ejemplos sobre esto. En segundo lugar, piense en sus experiencias en la universidad / trabajo / lo que sea: proyectos en los que ha trabajado, equipos con los que ha trabajado o gestionado, conflictos que ha abordado, errores difíciles con los que ha tenido que lidiar, etc. Búsqueda de Google “preguntas de comportamiento” y encontrará miles de posibles preguntas.

Prepare una respuesta no genérica para “Por qué Facebook” (pista: el ritmo rápido y la cultura, el gran talento en la empresa, la misión de conectar el mundo …) y “Por qué Google” (pista: la diversidad de los esfuerzos, el genialidad de búsqueda y Android, la misión de hacer cosas increíbles, la cultura de la empresa …). No me hicieron estas preguntas en ninguna de las dos compañías (para mi desilusión, ya que me apasionaban ambas y no podía esperar para mostrarlas), pero apreté mi interés mientras hacía mis preguntas al entrevistador, así que aproveche esa oportunidad si realmente quieres impartir algo que no tuviste la oportunidad.

Consejos para las entrevistas

Los números 3,4,7,8,9 son los puntos más importantes.

  1. Puede que estés nervioso antes de una entrevista, pero pasará. Estaba nervioso antes de cada entrevista. Una vez que el entrevistador intervino y comenzamos a hablar, generalmente me divertí mucho porque realmente me encantaba hablar con ellos y resolver este tipo de problemas. Haga su mejor esfuerzo para no estar demasiado nervioso: simule entrevistas y cosas por el estilo. También recomiendo programar entrevistas en un orden de prioridad creciente, para que se acostumbre y descubra sus deficiencias cuando llegue a su empresa más buscada.
  2. Practique la codificación sin un compilador / en una pizarra / papel. No lo hice, pero tengo la sintaxis de C ++ memorizada y estoy acostumbrado a codificar en un papel en competiciones de ACM, por lo que es posible que no necesite hacer esto si ya se siente lo suficientemente cómodo con su idioma favorito (solo necesita saber un lenguaje bien, por cierto, siempre que sea razonablemente conocido, como C ++ / Java / Python. Te permiten usar el lenguaje que quieras durante la entrevista).
  3. Las vitrinas pueden matarte. Realmente tienes que practicar para encontrar y lidiar con casos de esquina, y / o reconocer lo que yo llamo “problemas propensos a casos de esquina”. Algunos problemas son muy simples desde el punto de vista algorítmico, pero pueden ser muy difíciles de codificar, y obtuve 2 de estos problemas, una vez en mis entrevistas telefónicas de Google y una vez en mis entrevistas telefónicas de Facebook.
  4. Después de encontrar el algoritmo, deténgase, haga una pausa y piense en cómo codificarlo, antes de hacerlo realmente. Esto es especialmente cierto para los problemas más difíciles, y habría fallado en una de mis entrevistas si no hubiera hecho esto, y como resultado, nunca habría conseguido un trabajo en FB. También podría haber pasado una entrevista en Google que fallé, si hubiera seguido mi consejo en este paso en ese momento.
  5. Piense en voz alta acerca de los algoritmos / ideas a medida que los desarrolla. Está bien hacer una pausa y pensar en silencio por un momento, pero no te quedes ahí por 3 minutos sin decir una palabra. Siempre al menos dé la solución simple, que muy bien podría no tener un excelente tiempo de ejecución, pero no le hará daño. Lo hice en todas mis entrevistas sin importar cuán simple fuera la respuesta, pero las dije directamente y noté que probablemente haya una mejor solución, luego procedí a pensar en eso. (por ejemplo: De acuerdo, para buscar una matriz ordenada, podemos escanearla linealmente, pero esta es una solución O (n) y es probable que haya algo más rápido). Además, no seas arrogante al respecto (pregúntate en voz alta hasta que estés seguro de tu método y tengas una prueba aproximada de que tu método funciona). No discutas con tu entrevistador. 99.99% de las veces, tienen razón, y usted está equivocado. Una posible excepción a esto es si están desafiando su código: o bien le están señalando un error o intentan hacerlo parecer así para ver qué tan seguro está en su código y si está de acuerdo ciegamente o protestar porque su código es realmente correcto (si esto sucede, no se asuste, solo piense bien en su respuesta antes de darla).
  6. No hable a través de su código línea por línea mientras lo escribe. Los entrevistadores saben cómo leer su código y qué son las declaraciones if y los bucles for. Solo hable sobre la estructura general del código (que debería haber mencionado antes de todos modos, según el Consejo # 4) mientras codifica. Sin embargo, mencione lo que está haciendo en intrincadas líneas de código (por ejemplo, si desea probar si ‘x’ es una potencia de 2 a través de “if (x & (x-1)) == 0”, es posible que desee mencionar eso).
  7. Las preguntas a menudo se especifican con poca precisión, y esta es una gran debilidad de los Elementos de las entrevistas de programación: todos los problemas se especifican por completo, por lo que casi no tiene capacitación en esto. Siempre piense en las preguntas que pueda hacer o en las condiciones que pueden hacer que su algoritmo falle si no es cierto. Algunos ejemplos son: ¿Son todos los números positivos? ¿Son distintos? ¿Cuál es el tipo de entrada (entero / doble …)? ¿Puedes volver a visitar una celda de la cuadrícula? El libro tiene preguntas donde estas propiedades se especifican explícitamente en la pregunta: piense en lo que sucedería si estas condiciones no estuvieran allí: la solución a menudo se rompe.
  8. No te rindas si no piensas en la respuesta directamente. En mi última entrevista en Facebook, obtuve el problema más desafiante hasta el momento, y me tomó alrededor de 5 minutos llegar a la respuesta, y terminé contratado. Esa fue posiblemente * la * entrevista que me contrató, y también fue la que más disfruté.
  9. Dos conceptos realmente importantes para conocer bien son la búsqueda binaria (y sus variantes) y la búsqueda en el espacio de estado usando Breadth-First-Search para encontrar la secuencia más corta de ‘movimientos’ (como este problema: Archivo en vivo ACM-ICPC – Kermit the Frog ) Ambos surgen muy a menudo.
  10. La suerte importa. El proceso de la entrevista no es perfecto, y es posible que no lo superes incluso si eres realmente bueno, ya que depende de tus entrevistadores y de las preguntas que recibas (y en qué tipo de preguntas eres fuerte, etc.). mitigue mucho este factor preparando una gran cantidad, pero siempre está ahí, y es importante saberlo. Le sugiero que lea Obtener ese trabajo en Google (blog de Steve Yegge) si desea obtener más detalles sobre este factor.
  11. Ignorar Ch. 20 y 21 en el libro. No son geniales (Tal vez lea el capítulo 21 un poco para tener una idea, pero eso es todo.) Desplácese hacia abajo hasta la sección Diseño del sistema si también tiene que prepararse para una entrevista de diseño del sistema.
  12. Suba menos de lo esperado en su CV (o al menos, no lo venda demasiado), especialmente si lo solicita a través de una referencia. Si escribes ‘experto en C ++’, llamarán a su ingeniero de C ++ más experimentado para que te estrelles y te quemes. Nunca conocí a nadie que tuviera algo relacionado con el subprocesamiento múltiple y el paralelismo en una entrevista para SWE, excepto una persona que lo enumeró como una habilidad. Y he aquí, le preguntaron al respecto, y no le fue tan bien.
  13. A menudo, obtendrás un problema que es una variante de un problema que has visto antes en el libro o en Career Cup, o es el mismo problema pero en una “forma encubierta” (es decir, está redactado de manera diferente pero tiene el mismo o una solución en su mayoría similar.) Tenga cuidado con estas diferencias sutiles; es posible que descubras (o pienses que has descubierto) la solución para el problema porque lo encontraste muy similar a uno que has visto antes, pero una pequeña diferencia en la declaración del problema en realidad significa que su solución es realmente muy diferente. Como ejemplo, consulte la pregunta 17.5Buscar una secuencia en una matriz 2D – en Elementos de entrevistas de programación. Incluye la declaración “Es aceptable visitar una entrada en A más de una vez”. Con él, la solución es DP. Si esa declaración no está incluida (es decir, no es aceptable visitar una entrada más de una vez), la solución es ramificada y no hay ningún DP involucrado en absoluto. Si responde erróneamente a DP en lugar de ramificar y vincular o viceversa, el entrevistador sabrá que ha visto el otro problema antes y cree que acaba de memorizar la solución, por lo que probablemente sea suficiente por sí solo para darle un “no -hire “recomendación de ese entrevistador. (También me atrevería a adivinar que esa declaración no sería declarada por el entrevistador en primer lugar, exactamente por esta razón, y tendría que preguntar si puede visitar una entrada más de una vez, según el consejo # 7. El objetivo es ver si descubrirás o no que hay una gran diferencia en las soluciones dependiendo de la respuesta del entrevistador a esta pregunta).

De nuevo, probablemente olvidé muchas cosas, así que si hay algo específico que quieras saber, deja un comentario. También haré todo lo posible para mantener esta publicación actualizada con cualquier otra cosa importante que recuerde más adelante.

Diseño de sistemas

Aunque yo no tenía uno, me preparé para las entrevistas de Diseño del sistema. Me preparé visitando este sitio: Hired In Tech, que es decente (no excelente) y leyendo varios documentos en este sitio, directamente de Google: Sistemas distribuidos y computación paralela, principalmente el primer documento de MapReduce (casi al final de la página) ) y el papel Chubby. MapReduce es muy importante y realmente te sugiero que lo leas y entiendas cómo funciona. Después de esos pasos, busque bases de datos, específicamente SQL y NoSQL, familiarícese con el teorema CAP, temas de escalabilidad y tal vez lea sobre Hadoop y algunos problemas que puede resolver con él (Hadoop In Practice es un libro decente para estos fines). Pruebe algunas preguntas como la pregunta “Diseñar un acortador de URL” en Hired In Tech, o algo a mayor escala como “Diseñar un motor de búsqueda web” o “Diseñar Google Maps”, todas las preguntas que pueden formularse (consulte también el capítulo 21 del libro para posibles preguntas y una pequeña idea de cómo responderlas, aunque las respuestas del libro no son excelentes.) Pero en general, para la entrevista de diseño del sistema, practicar preguntas es menos significativo que comprender fundamentalmente los conceptos anteriores y saber cómo discuta sobre ellos, ya que la entrevista completa es algo así como una conversación rápida entre usted y el entrevistador, donde él / ella cambiará las especificaciones de las preguntas sobre la marcha para ver cómo maneja los diferentes escenarios.

Consejo final

Entonces, si realmente quieres ese trabajo, tomará algo de tiempo y dedicación, pero espero que sea del tipo agradable. Personalmente disfruté mucho preparando este tipo de preguntas y descubrí que, aparte del trabajo, realmente aprendí mucho y obtuve una gran cantidad de conocimiento de la preparación, y probablemente tú también lo harás.

Mi último consejo es simplemente ir a la entrevista y no estresarse (esto es obviamente más fácil decirlo que hacerlo). Los ingenieros quieren que seas bueno y quieren contratarte; la contratación es un proceso bastante costoso. Algunos pueden ser fáciles y otros pueden ser menos indulgentes, pero en todos los casos, la entrevista es muy similar a una conversación entre dos ingenieros, y eso es exactamente lo que estas empresas se esfuerzan para que sea la entrevista, así que trátelo de esa manera, y si te has preparado bien, se mostrará.

[1] – Un capítulo por día es realmente un poco lento ya que no estás codificando, por lo que para capítulos más cortos como los Capítulos 5, 7, 8, 9, te sugiero que hagas 2 por día, lo cual es factible.
[2] – En Elementos de las entrevistas de programación, los problemas no ninja son problemas estándar, los problemas gris-ninja son algo difíciles y los problemas negro-ninja son difíciles.

Descargo de responsabilidad: esta es mi propia opinión / consejo, y no está respaldada por nadie más de ninguna manera.

Dividamos esto en secciones o pase a mi guía gratuita aquí

Desarrollo de codificación:

  • Desarrolle su conocimiento de Java, Swift y HTML y algoritmos y estructuras de datos
  • Participa en competencias competitivas de codificación para ‘forzar el progreso’
  • Asista a entrevistas en empresas de nivel inferior para obligarse a repasar el código
  • Enviar código a algunos proyectos de código abierto
  • Desarrolle una aplicación o sitio web para un proyecto comercial para un amigo (para que se sienta moralmente obligado) que se encuentre FUERA de su rango de experiencia

Desarrollo Académico:

  • Si estás en la universidad / universidad, apunta a obtener los mejores / más cercanos GPA / resultados en tus cursos como puedas
  • Vale la pena conocer un idioma ‘en demanda’ como el ruso, el urdu o el español

Desarrollo personal:

  • No todos están solicitando puestos de trabajo SDE; entonces vale la pena tener una habilidad externa interesante
  • Si tienes un pasatiempo en el que estás involucrado; perseguirlo más rigurosamente
  • por ejemplo, si haces un ajuste cruzado; participar en una competencia de cross-fit
  • Si corres, participa en 2x 10k carreras
  • Si juegas ajedrez, participa en una competencia competitiva de ajedrez
  • Si NO tienes un pasatiempo. Encuentra uno

Preparación del curriculum vitae:

  • Se aplican 3 millones de personas. 7k consiguen trabajos. Probablemente se entreviste a 20 personas por cada trabajo (conjetura educada)
  • Llegar a la entrevista es difícil. Necesitas un currículum increíble
  • Nick una plantilla de aquí. No cometas estos errores
  • Una vez que esté listo, haga que lo revise un actual / ex-googler / por mí / en Quora. No asumas que es lo suficientemente bueno
  • Preparación de la entrevista:

    • Tengo 60 respuestas en el área de reclutamiento de Google en Quora, donde soy el escritor más visto
    • Empieza a leer
  • Leer cualquier cosa por Gayle Laakmann McDowell
  • Busque programación / preguntas sobre Glassdoor
  • Practica con un amigo
    • Luego practica de nuevo

    Otro:

    • Conozca a alguien en Google para obtener una referencia
    • Revise su progreso a los 1/3/5 meses
    • Sonreír; prueba y disfrútalo 🙂

    Mito: se necesita gente de universidades muy reputadas para conseguir trabajo en Facebook o Google.

    Realidad: lejos de la verdad, estas dos compañías tienen un número considerable de personas que provienen de universidades no tan reputadas. Las personas más inteligentes están en las mejores universidades, por lo tanto, se las ve con más frecuencia.

    Para obtener trabajo en Google e iniciar sesión o registrarse, debe ser realmente el mejor en su campo. Aquí parece que está buscando un trabajo en informática, sea muy claro con la lógica, los conceptos de Oops, las estructuras de datos y la programación dinámica.

    Si puede responder estas preguntas de una sola vez, pasará por cualquier entrevista en el mundo.

    Si todavía siente que es bueno en lógica, intente responder estas preguntas en su compilador C ++ o Java.

    • Encuentra el segundo número más grande en una matriz y ordena la matriz.
    • ¿Escribir un programa Java para imprimir series de Fibonacci hasta 100?
    • ¿Escribir un programa Java para evitar un punto muerto en Java?
    • En una matriz 1-100 exactamente un número está duplicado, ¿cómo lo encuentras?
    • Calcular factorial de un número
    • ¿Cómo se ordena el objeto Java con Comparator?
    • ¿Imprimir todos los nodos de hoja de un árbol binario?
    • ¿Diferencia entre la lista vinculada y la estructura de datos de la matriz?
    • ¿Cómo encuentra el elemento medio de una lista vinculada en una sola pasada?
    • Imprime toda la permutación de String tanto de forma iterativa como recursiva?
    • Escribe una función para encontrar el palíndromo más largo en una cadena dada
    • ¿Cómo verificar si dos cadenas son anagrama?

    Chicos, espero que esto no parezca obtuso, me gustaría compartir con ustedes lo que he aprendido en mis años de empleo. Aunque no he trabajado directamente para Google, anteriormente fui vicepresidente de una empresa de desarrollo de software de mil millones de dólares. Una empresa en la que Andy Rubin estaba muy interesado, creo.

    Si entiendo Google correctamente, y creo que sí he aportado pruebas anecdóticas, no quieren seguidores de opinión, quieren líderes de opinión. El tipo de personas que inventan YouTube. Como comentario aparte, mencionaría que conceptualicé la idea de YouTube en 2000. En ese momento, mi novia pensó que el nombre que le había dado ‘TubeTV’ era divertido …

    En pocas palabras, olvida todo lo que has escuchado en el mundo de los ‘libros de texto’ sobre cómo conseguir un trabajo. Hay demasiadas personas dispuestas a seguir esa vieja línea cansada; Es taaaaa siglo XX. Google piensa fuera de la caja, tú también debes hacerlo. Eso significa; desarrolla tus pasiones, tus instintos y habilidades.

    ¡Sé creativo, sé innovador! ¡Dale a Google una buena razón para quererte!

    Nota al pie: Los mejores pensadores nunca tuvieron que pensar fuera de la caja.
    ¿Por qué? Nunca supieron que existía ‘la caja’; ellos ignoraron las convenciones.

    Ser de una escuela superior es mucho menos importante que haber realizado algunos logros impresionantes o contribuciones a otros proyectos. Cree un producto genial o realice algunos avances sustanciales en un proyecto de código abierto.

    Hacer que un empleado de Google envíe su currículum ayuda mucho a superar la gran cantidad de currículums no solicitados.

    Debe conocer muy bien la informática básica antes de la entrevista. Lea los excelentes consejos de Steve Yegge sobre cómo prepararse para la entrevista en http://steve-yegge.blogspot.com/

    Mire las primeras páginas del libro de Gayle Laakmann para comprender el proceso de entrevistas de Google, http://www.amazon.com/Cracking-C

    mientras que (1)
    {
    APRENDER:
    Programación de preguntas de la entrevista | CareerCup;
    http://www.geeksforgeeks.org
    PRÁCTICA:
    Juez Esfera Online (SPOJ)
    TopCoder, Inc. | Hogar de la comunidad de desarrollo más grande del mundo.
    tratar
    {
    ir a la entrevista;
    si (éxito)
    descanso;
    más
    continuar;
    }
    captura (excepción decepción) {
    // No pierdas la esperanza. Inténtalo de nuevo.
    decepcion.convertToDesire ();
    }
    }

    Esta respuesta es mi viaje desde la persona que tenía miedo de programar entrevistas, hasta mi estado actual de haber descifrado la entrevista de Google y como entrenador de entrevistas de programación.

    Una práctica lenta y constante durante varios meses te ayudará mucho más que una práctica intensa durante unas semanas. 6 meses es mucho tiempo.

    Con decenas de miles de preguntas de programación, cientos de sitios web y docenas de libros, la preparación para entrevistas de programación puede ser intimidante. Así que he creado una lista de verificación de los temas necesarios para preparar entrevistas de programación.

    Temas para prepararse para la entrevista de programación

    • Preguntas basadas en el conocimiento.
    Preguntas sobre el idioma japonés
    oCore preguntas sobre conceptos de informática

    •Estructuras de datos
    o matrices
    o Listas enlazadas
    oHash Tables
    Árboles, intentos y gráficos
    ojaps
    oPilas y colas

    • Algoritmos
    oRecursión
    o programación dinámica
    oTécnicas transversales del árbol
    o Técnicas de búsqueda y clasificación

    • Preguntas de comportamiento (menos importante)

    • Complejidad del código

    • Preguntas de diseño

    o Preguntas de diseño del sistema
    o Preguntas de diseño orientadas a objetos

    • Preguntas populares de entrevistas

    Los detalles sobre esta lista de verificación están aquí:
    Hackear la entrevista de programación – 1 por Ash Murthy en Rants Random

    Una vez que se haya familiarizado con los conceptos básicos, es hora de practicar. Algunos sitios web populares para practicar preguntas de entrevistas son:

    • Programación de preguntas de la entrevista | CareerCup
    • Juez en línea de LeetCode
    • GeeksforGeeks | Un portal informático para geeks
    • La preparación de la entrevista de codificación es fácil

    Practique sin su IDE (use el editor de texto en línea – collabedit o algo similar) para resolver los problemas y luego intente ejecutar su código. Con la práctica, consiga mejorar cada vez más: ¡su código estará casi listo para compilarse y sin errores!

    Pero, por supuesto, las largas horas de resolución de problemas pueden ser frustrantes. Conéctese con otros y resuelva problemas en un entorno grupal, y esto ya no será tan frustrante.

    Y en el último mes más o menos:
    Por último, pregúntale a un amigo o mejor aún, contrata a un profesional para que te ayude con las entrevistas simuladas. Identificar áreas de mejora y trabajar en ellas.

    Si se encuentra en el área de la Bahía de San Francisco, no se pierda la reunión de preparación para la entrevista de programación .

    El grupo se reúne cada dos viernes, y cada reunión se enfoca en un tema específico. Los participantes forman grupos en función de su nivel de habilidad y resuelven preguntas en grupo.

    Al participar en esta reunión, puede resolver problemas en un entorno grupal (que es más efectivo y divertido que la práctica solitaria) y, lo que es más importante, aprender de otros.

    Supongo que te refieres a entrar en Google con un trabajo relacionado con CS.

    Diría que hay 3 formas principales de ingresar a Google.

    1. A través de pasantías . Google recibe a más de 2000 pasantes cada año de una lista de más de 50000 solicitantes de todo el mundo. Deberá tener al menos 3 entrevistas técnicas y un par de entrevistas con el anfitrión, que en su mayoría son de naturaleza informal. Si ingresa, tendrá la oportunidad de una conversión a tiempo completo para obtener ese trabajo en Google.
    2. Como graduado universitario . Estos son estudiantes que acaban de salir de la universidad y están buscando trabajo. Será mucho más difícil hacerlo de esta manera en comparación con la pasantía. Las entrevistas técnicas serán más duras, pero es posible que compita con menos candidatos.
    3. Como un empleado experimentado . Esto le dará una ventaja para ganar algo de experiencia trabajando en algunas startups, aprendiendo nuevas tecnologías, demostrando sus habilidades de liderazgo, ajuste cultural, capacidad para trabajar bien dentro de un equipo, su experiencia en programación, etc. Reclutadores todos para agarrar candidatos tan experimentados. Siempre escuchas historias sobre alguien que trabaja en X y es reclutado por Y.

    Para todas las formas mencionadas anteriormente, también debe tener algunas cualidades básicas.

    1) Tener una sólida comprensión de las estructuras de datos y algoritmos.

    Estoy hablando de listas, árboles binarios, montones, tablas hash, árboles de sufijos, intentos. Nunca puedes decir lo que se te pedirá. Puede que le pregunten a su amigo sobre las tablas hash, pero es posible que le pregunten sobre los árboles de sufijos.

    Comience por comprender la teoría básica detrás de cada una de estas estructuras de datos. Intente comprender cómo funciona la operación de creación, inserción, eliminación y búsqueda en estas estructuras de datos. Intente comprender en términos de análisis asintótico.

    Una vez que los resuelva, intente codificarlos en lenguajes como C en papel. No olvides los casos extremos. Luego codifíquelos en la computadora. Intente romper su programa con entradas válidas. Cuando encuentre uno, intente incorporarlo en su programa.

    Enjuague y repita eso para estructuras de datos comunes. Dirígete a LeetCode Online Judge y comienza a resolver esos problemas. Puede tener dificultades al principio, pero con el tiempo mejorará. Utilice también otros sitios de programación competitivos como TopCoder, SPOJ, Codeforces, CodeChef y HackerRank. Intente leer libros como Cracking the Coding Interview de Gayle Laakmann McDowell, Programming Interviews Exposed, Competitive Programming 2. ¡No los lea, pero codifíquelos!

    2) Contribuciones de código abierto

    Puede que esto no sea muy importante para los candidatos con experiencia, pero sí para los posibles pasantes y contratados graduados. Le muestra a Google cuánta pasión tienes. Además, pueden revisar su código y ver qué tan buen programador es usted.

    Dirígete a GitHub y comienza a buscar proyectos en los que puedas contribuir. Le aconsejaría que elija C ++ o Java, pero Python también puede ser una buena opción. Bifurcarlo, leer el código y comprender su estilo de programación. ¡Intenta descubrir errores, comete y empuja!

    También puedes hacer tus propios proyectos. Intenta pensar en un problema que puedas tener. Si tiene un problema, es probable que otros también tengan lo mismo (si observa cómo nacen las empresas de nueva creación, lo comprenderá). Intenta resolverlo y haz ese proyecto.

    3) pasantías

    Yo diría que esto tendrá un puntaje muy superior a las contribuciones de código abierto si ha realizado una pasantía en una buena empresa de CS (digamos X) con una publicación significativa. Puede enumerar las experiencias obtenidas, las responsabilidades desempeñadas y cómo la empresa se benefició con su pasantía.

    ¿Su código mejoró algunos de los productos de X? ¿Se hizo más rápido, más fácil de usar? ¿Obtuve más ganancias o nombres para X?

    4) Currículums y CV

    Ya se habían escrito demasiadas respuestas sobre este tema en Quora. Puede buscarlo o simplemente visitar: Currículums y CV. ¡Definitivamente un tema que vale la pena seguir!

    5) Startups

    ¿Comenzaste alguna startup y ganaste mucho dinero?
    ¿Comenzaste un inicio y fallaste miserablemente?
    ¿Creó alguna aplicación que se ha descargado más de 10000 veces?
    ¿Comenzó un sitio web que ha sido visitado por más de 10000 visitantes cada mes?

    ¡Pon eso en tu currículum! La gente quiere escuchar tu experiencia.

    Poner en el trabajo duro. Es posible que no lo haga en el primer intento, quizás tampoco en el segundo intento. ¡Esfuérzate y puedes estar en la tercera vez!

    Si bien obtiene 2 años de experiencia profesional, debe aumentar el número de personas que conoce en cada empresa para incluir al menos 1 que lo derivará internamente para un trabajo (además de obtener una buena comprensión de los algoritmos y las estructuras de datos, lo que parece importar para Google) Esa es la única forma de garantizar una entrevista en cada empresa. Una vez que hayas hecho eso, entonces se trata de no fallar en la entrevista (principalmente suerte si has estudiado los conceptos básicos).

    Por lo que escuché, las entrevistas de Facebook son bastante rutinarias, las entrevistas de Google se han vuelto mucho más fáciles (y ahora son casi ridículas), y o bien navegarás, o te estrellarás y te quemarás. Es casi como si decidieran si contratarlo antes de poner un pie en la entrevista, y todo lo demás gira en torno a esa decisión. Para Facebook, debido a que las preguntas no son nada especial, esperarán que las resuelva correctamente la primera vez y sin errores ni contratiempos (pero esto debería ser bastante fácil si ha practicado / preparado bien).

    Además, si bien estas dos compañías todavía tienen aspectos positivos en torno a su marca, están aumentando de tamaño / BS y muchos candidatos calificados están optando por trabajar en otro lugar (… ¿nuevas empresas?). Esto significa menos competencia en general y es una tendencia que será aún más notable / verdadera en 2 años. Entonces, mientras trabaja para mejorar sus habilidades y su red, también debe ampliar su perspectiva lo suficiente como para estar al tanto de otras grandes compañías que surgen, y será menos probable que pierda tiempo y energía tratando de unirse a cualquiera que sea “viejo” noticias “o que ya no son como se anuncian.

    Aplicar a google / FB ahora. Aplica otros lugares también.

    Consigue un trabajo en alguna parte; posiblemente en una startup; posiblemente en su inicio. Si no está en Google o FB, solicite nuevamente en un año si realmente lo desea.

    Puede obtener una línea de base de DS y algoritmos al revisar un libro de preguntas de entrevista o un sitio web en no más de 2 semanas, si ya ha estado expuesto a estos temas antes (lo que debería hacer desde que tiene un título de CS).

    Enfatice sus antecedentes, sus fortalezas y su cartera.

    No permanezca libre durante 6 meses a menos que sepa que producirá algunos proyectos realmente buenos para agregar a su cartera, o a menos que tenga alguna otra razón para no obtener un trabajo durante ese tiempo.

    Si sigue la ruta de inicio, tenga en cuenta que no tiene que ser “real”. Muchas salidas multimillonarias son para startups cuyo producto principal se enlata en el instante en que se adquiere; En retrospectiva, todos estos son proyectos de cartera glorificados. No tenga miedo de llamar a su propio proyecto de cartera glorificado una startup. (Probablemente estoy sonando cínico; no me refiero a eso tampoco, ni estoy descartando el verdadero talento de las startups adquiridas).

    1) Sé perfecto en un idioma.
    2) Refer Bible ( Introducción a los algoritmos es un libro de Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest y Clifford Stein)
    3) aprender conceptos de abordar un problema es una parte, resolver el ejercicio es otra parte.

    Todo lo anterior te hará un fuerte competidor.

    Sepa cómo varía la pregunta para una situación particular al participar en jueces en línea como Sphere Online Judge (SPOJ), uva.onlinejudge.org, Project Euler.

    4) Muestra tu calibre y pasión participando en el mejor programador.
    5) Consulte la teoría de la computación (lo más importante en mi opinión)
    6) juega con el sistema operativo Linux.

    Manténgase actualizado con la última pregunta de la entrevista de GeeksforGeeks: un portal informático para geeks y preguntas de la entrevista de programación | CareerCup

    Y por último, pero no menos importante, intente contribuir al foro en línea, algo así como Stack Overflow. Debido a que la enseñanza a veces aclarará conceptos que también le darán reputación (ser humano).

    ¡No puedo evitar compartir mi experiencia con ustedes porque preparé mis entrevistas en 2 meses ! Como tienes más tiempo, definitivamente puedes hacer un mejor trabajo.

    • Si ya está bastante familiarizado con la estructura de datos y el algoritmo, puede omitir este punto. De lo contrario, dedique suficiente tiempo a esto. No puedo enfatizar más sobre este punto, ya que es lo más fundamental para una entrevista de ingeniero de software. Si no logras comprender bien esas estructuras de datos básicas que aprendiste en la escuela, simplemente fallaste en toda la entrevista. No estoy exagerando, una vez que haya pasado por varias entrevistas técnicas, se dará cuenta de lo importante que es. Los libros sobre la estructura de datos y el algoritmo están en todas partes, asegúrese de tener muy claros los elementos básicos como el árbol binario, la cola, la pila, la lista vinculada, etc.
    • Después del primer punto, espero que le queden al menos 4 meses. Sumérgete en las preguntas de la entrevista real tanto como puedas. Hay toneladas de recursos en línea, como http://www.glassdoor.com, donde puede acceder a innumerables preguntas de entrevistas reales de empresas. Como se dirige a Facebook / Google, dedique la mayor parte de su tiempo a preguntas de entrevistas reales de estas dos compañías. No espere tener la misma pregunta de entrevista que preparó (aunque es posible), pero practicar con preguntas de entrevista reales lo ayudará a ser consciente de la dificultad, el estilo de cada empresa y lo que realmente les importa.
    • Practica escribir código en la pizarra. Esto es lo que la mayoría de la gente ignora. Parece bastante simple a primera vista, ¿verdad? Pero no es una vez que lo intentas. Echarás mucho de menos esos atajos sofisticados en tus editores de texto e IDE favoritos y, lo que es más, es muy inconveniente modificar el código como insertar otra pieza de código en el medio. Pero debe superarlo, ya que la mayoría de las entrevistas reales le pedirán que escriba un código SOLIDO en la pizarra. No necesita ser compilado, pero debería estar casi allí. ¡Sin pseudocódigo! Esto es incluso cierto para la entrevista de Google / Facebook, ya que durante la entrevista en directo estará “encerrado” en una sala de reuniones y seguirá escribiendo el código en la pizarra.
    • Practica con entrevistas simuladas . Es una gran experiencia para ti practicar de una manera en la que no puedes fallar. Puedes hacer esto con tus amigos y volver a entrevistarlos. También obtuve mi entrevista simulada de http://www.gainlo.co cuyos entrevistadores están trabajando en Google, Facebook, etc. y me dieron toneladas de comentarios.

    La entrevista simulada personal es el enfoque más efectivo que he tenido porque tendrás sentimientos totalmente diferentes al pensar y resolver problemas frente a una persona. Estarás nervioso y puedes fallar incluso ante la pregunta más simple.

    Además, los entrevistadores de una entrevista real no le darán ningún comentario auténtico, solo pueden decirle la respuesta oficial, que no es otra que una mierda. Sin embargo, un entrevistador simulado lo ayudará a mejorar en todos los aspectos, especialmente si tiene experiencia.

    En resumen, 6 meses son suficientes para preparar entrevistas de trabajo para Google / Facebook. Dedique suficiente tiempo a la estructura de datos y al algoritmo, que es realmente la base de cada entrevista SWE.

    Trabajé en Google e hice muchas entrevistas, así que creo que puedo darte buenos consejos al respecto, al menos suponiendo que estés buscando un trabajo de ingeniero de software. Hay dos pasos

    1. Obtenga una entrevista
    2. Hazlo muy bien en la entrevista

    Conseguir la entrevista es más fácil. Si su currículum no puede conseguir una entrevista, debe mejorar su currículum. O trabaje en algún proyecto de código abierto o personal, o consiga un trabajo que sea un “paso adelante” de su trabajo actual.

    Hacerlo realmente bien en la entrevista es más difícil. Es útil practicar preguntas de entrevista con personas que son mejores programadores que usted. Encuentra a esas personas, haz que practiquen contigo, y si creen que lo estás logrando, probablemente lo estés haciendo.

    En la práctica, no hay una solución rápida. A la larga, trate de encontrar un trabajo donde trabaje con la gente más inteligente posible, haga un gran trabajo e itere.

    Escribir código Escribe mucho código. Resuelva una serie de problemas académicos, por ejemplo, obtenga uno de los conjuntos de problemas para la programación dinámica, obtenga un libro accesible sobre algoritmos como Sedgewick y HAGA TODOS LOS PROBLEMAS. Incluso si recurres a escribir las respuestas, hazlas. (No es una mala idea tomar la versión para un idioma diferente y traducirla al idioma que elija). Comprenda los algoritmos de clasificación, comprenda el algoritmo de Dijkstra.

    Volverse fluido y cómodo en un idioma. Es extremadamente inusual que el lenguaje de implementación importe en una entrevista, pero decir que sabes decir, por ejemplo, Go, mientras no escribes Go (o Go idiomático) es una mala idea. Si eres el tipo de persona que pasaría un ciclo, eres el tipo de persona que será ágil y capaz de aprender un nuevo idioma.

    En mi bucle en Microsoft (exitoso, hace muchos años), mi peor entrevista fue donde afirmé entender a Lisp y luego no logré encontrar si una lista tenía un bucle. En mi (exitoso, muy reciente) bucle de Google, mi peor entrevista fue cuando el entrevistador me pidió que implementara una sub-técnica para un algoritmo de clasificación que había omitido (humorísticamente recuerdo que pasó por mi mente y lo descarté explícitamente … ) Me puso nervioso y me hundí en ese. (Todavía lo logré, pero cuando paso al entrevistador en los pasillos, me pregunto si se pregunta por qué recibí la oferta …: -})

    Si va a buscar un puesto de investigación, entonces creo que necesita demostrar algunas habilidades serias de teoría de CS, pero soy más del tipo ingeniero / constructor, así que no pasé mucho tiempo allí más que superar mi miedo a la programación dinámica. Esté preparado con el análisis O (n), mucho, estaba más débil de lo que debería haber estado aquí.

    Al final, desea demostrar habilidades de resolución de problemas y fluidez en el espacio de solución. Se habla mucho sobre qué idioma es el mejor, pero en realidad, en gran medida, todos los lenguajes de procedimiento tienen aproximadamente la misma forma, es una cuestión de cuánto repetitivo tienes que escribir, así que solo elige uno y sé excelente. Elegiría C ++ o Java suponiendo que comience desde la zona cero; Ir tampoco es una mala elección, aunque algo arriesgado si su entrevistador aún no lo sabe. Si desea hacer programación front-end, Javascript podría ser una buena opción, aunque la falta de declaraciones formales de estructura hace que sea más difícil registrar sus estructuras de datos en alguna parte.

    Espero que esto ayude.
    Micro

    No se requiere un lenguaje específico para obtener una pasantía. Conocer las estructuras de datos y los algoritmos te ayudará mucho más.

    Por otro lado, una vez que obtenga una pasantía y desee obtener buenos resultados (para obtener una oferta de tiempo completo), conocer un idioma bien definitivamente lo ayudará.

    Para Google, eso significa que debe conocer bien Java o C ++ (para el trabajo de back-end) o Javascript (para el trabajo de FE). Para Facebook y otras compañías, puede variar un poco (Facebook usa PHP, MS usa C #, Apple usa ObjectiveC, etc.)

    Lo que realmente te ayudará es tener experiencia real trabajando en proyectos más grandes. Intenta contribuir al código abierto, crear tu propio proyecto paralelo o ayudar en algo que está sucediendo en tu escuela.

    Gracias por la A2A.

    No puedo garantizar, de buena fe, que obtendrá un trabajo en Facebook, Google o en cualquier otro lugar, dado cualquier consejo que pueda darle en esta respuesta. (Considere el hecho de que otras personas que buscan empleo allí recibirían el mismo consejo, y puede haber más de esas personas que puestos disponibles. Si este es el caso, algunas personas no serían contratadas).

    Sin embargo, sugeriría que haga cosas que impresionen a las personas en Google, Facebook, etc., como trabajar en proyectos de código abierto, atascos de código, etc., donde pueda mostrar sus habilidades. Si puede impresionarlos con cosas que consideran esenciales para su negocio, eso también podría ayudar.

    Para descifrar la entrevista de Google, debe comer, beber, dormir, ducharse, jugar, amar, usar, conducir, hacer pipí, caca y código de vómito, algoritmo y DS (por ejemplo, en C ++, JAVA, C #).

    Este artículo explica información detallada para preparar entrevistas para trabajos de ingeniería de software de Google.

    Versión del año 2015: cómo descifrar la entrevista de Google

    [Respuesta general para las entrevistas técnicas en MS / Google / Amazon / Facebook / Apple, etc.]

    Recuerde: la entrevista técnica depende de varios parámetros, desde el lado del empleador, por ejemplo, título del trabajo, responsabilidad, departamento, tipo de proyecto, tipo de tecnología, tipo de habilidades, años de experiencia, mentalidad de entrevistador / entrevistadores, requisitos inmediatos, decisión firme de contratar-nohire y muchos más. Del lado del candidato, por ejemplo, la forma en que se presentó el CV (currículum), la forma en que el candidato llevó la discusión técnica / no técnica y muchos más)

    Es posible que no sugiera ningún sitio web en particular / o las preguntas más difíciles para prepararse para dicha preparación para la entrevista, sin embargo, la mayoría de las preguntas incluyen el truco, la presencia mental y qué tan bien comprende los conceptos más necesarios de la informática, y el más importante es : Algoritmos y estructuras de datos. Las preguntas pueden ser diferentes, pero todas utilizan los conceptos básicos de DS / Algo para resolver eso)

    Todavía preguntas de muestra (depende de la posición SDET o SDE [Si es SDET, entonces también los casos de prueba))

    [+] Dado un conjunto S de n números reales y otro número real x, determine si existen o no. dos elementos en S cuya suma es exactamente x.

    [+] Dada una lista de números (una lista fija) y otra lista, escriba una función que determine si algún elemento de la segunda lista aparece en la lista fija.

    [+] usa una estructura de datos trie para almacenar palabras. cada nodo contiene una lista de todas las letras (punteros a la misma estructura de nodo) y banderas para cada letra para indicar la longitud de la palabra. Escriba un método para insertar en este tipo de estructura de datos. ¿Qué usarías para almacenar cada nodo?

    Mucho mas….

    ENFOQUE DE EJEMPLO:

    Puede diseñar un enfoque que se adapte mejor a sus habilidades / (y muchos otros) parámetros relacionados

    Ejemplo: alguien puede usar el siguiente enfoque, para un plan de dos meses: alrededor de 250 horas para preparar al ingeniero de software / ingeniero de software en entrevistas de prueba para MS / Google / …

    En realidad, todas estas empresas, por ejemplo, MS, Google, Amazon, Facebook, Apple, siguen un enfoque en el que miden el proceso de pensamiento de un candidato.

    Y usan diferentes medios para evaluar eso, pero sí, la mayoría de ellos usa Algoritmos / Estructuras de datos / Preguntas abiertas (si ha solicitado un trabajo de ingeniería de software) como uno de los enfoques para evaluar el talento. base para desarrollar las tecnologías).

    Para estar acostumbrado a algos / estructura de datos / codificación, debe haber entendido / practicado el mínimo, por ejemplo:

    (Paso 1): debe tener una comprensión práctica de los algoritmos (por ejemplo, cuándo usar BackTracking, cuándo usar Divide and Conquer, ¿por qué se requiere doble hashing ?, ¿dónde se puede aplicar el concepto de fuerza bruta?) ( 50 horas).

    (Paso-2): debe tener una comprensión práctica de las estructuras de datos, por ejemplo (casos de uso prácticos relacionados con: cuándo usar un búfer circular, o cuándo usar una lista adyacente o la combinación de ambos o algo más para resolver el problema).
    (50 horas)

    (Paso 3): debe practicar varios problemas de codificación para implementar las cosas que aprenden del Paso 1 y del Paso 2 (puede hacer lo siguiente para elegir cualquier lenguaje de codificación para elegir el suyo (C, C ++ o Java o Python) o PHP o cualquier otro).
    (50 horas)

    (Paso 4): Resolver el problema no significa solo resolverlo, sino comprender la mejor manera de resolverlo, por ejemplo, el problema técnico dado puede usar varias formas para llegar a una solución, y es posible que desee utilizar la solución óptima. . (Cómo se conecta la solución dada con los recursos informáticos / de memoria, por ejemplo, Memoria / Potencia de procesamiento)
    (50 horas)

    Sin embargo, el más importante.

    Sin embargo, aparte de la programación, es posible que deba comprender que el concepto principal para la entrevista es mantener la entrevista activa y esto requiere algunas acciones de su parte, como las siguientes:

    Necesitas hablar.

    Necesitas explicarlo.

    Necesitas discutirlo.

    Necesitas expresar tus puntos de vista.

    Debe comprender claramente las preguntas que se le hacen.

    Debe comprender la expresión y la mentalidad del entrevistador para comprender esas preguntas.

    Es posible que deba hacer las preguntas adecuadas para comprender la pregunta o cualquier otro elemento de discusión. (50 horas)

    Y también :

    Prepárese: “Cuénteme sobre usted mismo”, “Sus habilidades relacionadas con el interés positivo / negativo adicional”, Conceptos básicos para los conceptos informáticos más necesarios o cualquier cosa que haya presentado en su “CV / Currículum”.
    (10 horas)

    Lo anterior es solo un plan de muestra, puede personalizar la forma que desee (por ejemplo, de 50 a 10 horas o algo más). Haga clic en Amazon para encontrar los mejores libros que pueda necesitar (por ejemplo, algoritmos de Cormen)

    (Aquí Google no significa Google, significa cualquier compañía que sea muy creativa para presentar los productos relacionados con la informática).

    (Suponiendo que pasas 4 horas todos los días)

    ¿Por qué Google no te contratará?

    Aquí Google no se refiere a Google, se refiere a cualquier empresa que sea muy creativa para introducir productos relacionados con la informática, por ejemplo, Google, Microsoft, Apple, Amazon, Facebook, … o cualquier otra que considere adecuada.

    Consulte el ppt adjunto, que proporciona algunos puntos que pueden ser útiles para planificar las cosas que faltan a su alrededor.

    ¿Por qué Google no te contratará?

    Déjame ser práctico y preciso para ayudarte en un ejemplo real:

    Requisito de trabajo en Google en este momento:

    Responsabilidades

    • Dirija el esfuerzo de prueba desde la planificación y la organización hasta la ejecución y entrega. Desarrollar estrategias de prueba efectivas.
    • Escriba o contribuya a planes de prueba y / o casos de prueba en proyectos medianos a grandes de complejidad moderada.
    • Abogar y educar a los equipos de producto / proyecto sobre diseño e implementación de pruebas. Trabaje con esos equipos para evaluar la capacidad de prueba de nuevas funciones / implementaciones.
    • Use su conocimiento de pruebas y capacidad de prueba para influir en un mejor diseño de software, promover las mejores prácticas de ingeniería, estrategias de prevención de errores, capacidad de prueba y otros atributos de calidad en todos los productos.
    • Demuestre intuición y conocimiento sobre cómo romper el software encontrando errores, y aplique este conocimiento con resultados medibles, impactando la calidad del producto.

    Calificaciones

    Calificaciones mínimas:

    • Licenciatura en Informática o experiencia práctica equivalente.
    • 3 años de experiencia desarrollando automatización de pruebas en C ++, Java o Python.
    • Experiencia en redacción de planes de prueba, consultas, creación de casos de prueba y depuración.
    • Experimente las metodologías de prueba y el ciclo de vida de desarrollo de software.

    Calificaciones preferidas:

    • Máster en Informática, Matemáticas o disciplina técnica relacionada.
    • 6 años de trabajo relevante y experiencia en la industria.
    • Experiencia con Selenium / Webdriver.
    • Proyecto probado y habilidades de liderazgo de equipo.

    Fuente:

    Buscar trabajos – Google Careers

    Una vez que vea este anuncio, lo que significa que tiene seis largos años para construirse de las siguientes maneras:

    Aprenda Selenium Webdriver:

    Algunos libros de nivel inicial que puede consultar:

    Una vez aprendido, solicite INTERN en Google:

    Buscar trabajos – Google Careers

    Responsabilidades

    • Las responsabilidades específicas varían según el área del proyecto.

    Calificaciones

    Calificaciones mínimas:

    • Actualmente cursa una licenciatura o maestría en informática o campo técnico relacionado.
    • Debe estar actualmente inscrito en un programa de grado a tiempo completo y volver al programa después de la finalización de la pasantía.

    Calificaciones preferidas:

    • Experiencia en software de sistemas.
    • Fecha de graduación prevista en la primavera / verano de 2018 o finales de otoño / invierno de 2017.
    • Proyectos completos o clases enfocadas en estructuras de datos y algoritmos.
    • Conocimiento del entorno Unix / Linux o Windows, y API.
    • Familiaridad con TCP / IP y programación de red.
    • Habilidades de implementación (C ++, C, Java, Python).

    Una vez que el pasante se haya completado, ¡vaya a otras compañías a trabajar durante 6 años más y regrese a Google como ingeniero sénior!

    ¡VOTA mi respuesta si es práctica!

    Lanzándose a Facebook y Google

    De acuerdo con Wharton School of Business (Director de Participación Estudiantil y Emprendimiento), hay ocho pasos esenciales que debe tomar para lanzarse con éxito;

    1. Desarrollar una estrategia a largo plazo para relacionarse con las empresas.
    2. Desarrollando su propio tono de valor agregado.
    3. Ponerse en contacto con las empresas de manera adecuada.
    4. Seguir las mejores prácticas de correo electrónico.
    5. Preparación adecuada para entrevistas.
    6. Correctos procesos de seguimiento.
    7. Oportunidades para conectarse a través de empresas de capital de riesgo (VC).
    8. Otras mejores prácticas.

    Si quieres aprender los secretos sobre cómo conseguir un trabajo en la puesta en marcha de tus sueños … mira: Pitching Yourself to Startups

    ——————————————————————————-
    El autor ha curado este video y no tiene afiliación con Wharton School.
    “Ahorre tiempo, aprenda más”

    Hay algunas partes en esta respuesta. Solo puedo hablar de mi experiencia en Facebook, aunque dudo que las otras compañías sean muy diferentes.

    – ¿Hay algún criterio para un número mínimo o un conjunto particular de idiomas para saber? Definitivamente no. Lo que importa es su capacidad para resolver problemas y demostrar experiencia con algún idioma.

    – Sin embargo, el trabajo que realiza en su pasantía puede no tener relación con lo que hizo en el pasado. Es posible que se le pida que elija un idioma desconocido, y eso será más fácil si ya tiene algunos en su haber.

    – La única razón por la que puede ser valioso aprender un nuevo idioma fuera de la pura necesidad es si te enseña algo conceptualmente nuevo. Sobre esa base, no hay ninguna razón para aprender Python y Ruby, o java y C #, etc. Son demasiado similares. Si aparece con experiencia en C ++, JavaScript y Haskell, eso es mucho más interesante para mí que Java, C ++ y C #.

    – Concéntrese en hacer proyectos interesantes y desafiantes. Si eso implica nuevos idiomas, mucho mejor.

    – Cuanto más específico sea lo que desea trabajar, más importantes serán los idiomas específicos. Si quieres trabajar en aplicaciones iOS en Apple, me imagino que es útil saber que Objective C es útil.