¿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. ¿Debería unirme a algún otro inicio o construir mis propios proyectos / inicio? ¿Debería centrarme en practicar estructuras de datos y algoritmos?

Algunas respuestas aquí ya son realmente buenas, pero creo que podría ser valioso tener la perspectiva de alguien que se capacitó para estas entrevistas muy recientemente y obtener una oferta de trabajo como resultado directo. Así que voy a responder tu pregunta y decirte cómo puedes conseguir un trabajo en Google y Facebook en 1 mes (es decir, 1 mes de preparación). Por cierto, la brevedad no es mi fuerte, así que esta publicación podría tardar un poco en llegar, pero prometo que vale la pena, y haré todo lo posible para responder las preguntas que publique en los comentarios sobre detalles específicos, porque casi definitivamente voy a olvidar mencionar algunas cosas importantes (I 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 aproximadamente 1 mes, después de lo cual conseguí un trabajo en Facebook. El proceso de obtener una entrevista hasta llegar a una oferta probablemente tomará 1-2 meses adicionales 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 la posición general de Ingeniería de software (en mi caso, nuevo graduado), y nada específico como desarrollador de Android / iOS, o ingeniero de infraestructura, etc.

Lo interesante y no tan conveniente de las entrevistas con tecnología es que nunca se sabe lo que va a obtener, por lo que debe estar preparado para una gran variedad de temas posibles, algunos de los cuales es más probable que ocurran más que otros. . Abordaré estos puntos a continuación y luego delinearé algunos tipos de preguntas muy importantes que pueden surgir y que debería estar preparado para enfrentar.

Así que digamos que su entrevista es en un mes. Así es como planearía dicho mes (asumiendo un horario de tiempo completo). Tenga en cuenta que esto es lo que yo haría (y lo hice, en realidad), por lo que puede que no sea el enfoque óptimo para usted, pero le sugiero que trabaje de manera similar y lo cambie un poco en función de cómo crea que entendería mejor los conceptos (por ejemplo, Resolver y codificar en paralelo, a diferencia de lo que hice, que es resolver todo y luego codificar todo …)


Días -∞ a 0 – Prerrequisitos

Supongo que ha tomado un curso de algoritmos y conoce las principales estructuras de datos, incluidos, entre otros, árboles binarios, árboles binarios de búsqueda, tablas hash, montones, pilas, colas, gráficos, listas, intentos … así como todos los algoritmos relacionados con ellos (insertar, eliminar, buscar, encontrar, encontrar max, encontrar min …) y la complejidad del tiempo para cada uno de ellos, al menos en un nivel alto. Para los gráficos que necesita 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 tercera edición de CLRS si mi objetivo es ingresar a Google? con respecto 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 usted lo sepa todo. La parte que sigue a continuación (Día 1 en adelante) es la parte realmente valiosa que puedo ofrecerle.

También asumo que conoces un lenguaje de programación como C ++ (o Java) y las funciones integradas que lo hacen realmente útil (es decir, STL o sus equivalentes de Java). ( Actualización 2: publiqué información relevante a esto aquí: la respuesta de Jimmy Saade a ¿Cuáles son los conceptos más importantes en C y C ++ que deben aprenderse y entenderse antes de una entrevista de programación?). Si no sabe STL, dedique tiempo a aprender vectores, mapas, conjuntos, mapas desordenados, conjuntos no ordenados, colas, pilas y toda la biblioteca de “algoritmos” (en serio, todo). Estas son esencialmente implementaciones de lo que acaba de aprender en CLRS, de modo 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 enlazada, BST y un trie en 5 minutos, lo cual es mucho más fácil de lo que parece (solo construya una clase de Nodo y una función de inserción y, para propósitos de entrevista, está bien. )

No asumo que sepa algo sobre los siguientes temas: programación paralela, redes de computadoras (HTTP / TCP / IP / Ethernet), sistemas operativos / programación, subprocesos / procesos / paralelismo / concurrencia, ensamblaje, hardware y lenguajes descriptivos de hardware, o cualquier otra cosa. Si bien estos son todos conceptos valiosos que debe conocer como científico informático (como lo son el aprendizaje automático y la inteligencia artificial y otros), las probabilidades de que surjan son casi nulas a menos que las indique como habilidades en su currículum, por lo que es mejor dedicar su tiempo a otra parte (es decir, trabajando en los temas a continuación). Sin embargo, debe tener cierta conciencia de la computación distribuida, así que desplácese 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 en realidad estoy realmente sorprendido de que la gente tan pequeña lo sepa o lo use. (No tengo ninguna afiliación con este libro). La colección de preguntas es excelente y al 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 programación de entrevistas, que tienen varias respuestas que son totalmente incorrectas. Además, la comunidad de asistencia en línea es bastante buena, con el código Java disponible para todos los problemas (el libro los tiene solo en C ++) y un foro en línea para discusiones en Inicio – Elementos de entrevistas de programación. También renuncian a todas las cosas de ‘enseñanza’ que otros libros tienen donde intentan enseñarte la notación de gran O y las estructuras de datos, y se enfocan casi completamente en la parte de problemas, que es mucho, mucho, mucho, mucho más importante. La notación de la gran O y las estructuras de datos que debe aprender de CLRS, que es el mejor recurso para ellos, punto. Ningún otro libro, especialmente no los libros de programación de entrevistas, 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 en realidad se preguntan como están (o de forma encubierta) durante las entrevistas, lo que muestra qué tan bien está. (Me imagino que una razón 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 “ahí fuera” se pregunten en las entrevistas, por lo que es probable que no vea las preguntas de Cracking the Coding Interview .) Sin embargo, si esto le sucede a usted, 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 acaba de recitar la respuesta, esto anula 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 los algoritmos.

Revise el libro capítulo por capítulo, un capítulo por día [1], comenzando en el Capítulo 5 y terminando en el Capítulo 19. Resuelva todos los problemas. Todos ellos. (Para ser completamente honesto, podría haber omitido algunos, pero esto fue más por accidente que por cualquier otra cosa, y definitivamente me gustó más del 98% de ellos). No codifique, resuelva los problemas solo (es decir, encuentre el algoritmo ). Concédase una fecha límite por problema, dependiendo de lo difícil que sea el problema (por ejemplo, 10 minutos para problemas no ninja [2], 20 minutos para problemas de ninja gris, 30-40 minutos para problemas de ninja negro) – si No he encontrado la solución para entonces, mire la respuesta y entiéndala. Si no lo haces no mejorarás. Es importante pensar en los problemas por su cuenta, porque lo que importa 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 he vinculado) tiene todos los problemas de ninja en un capítulo aparte (Capítulo 22). Esto, en mi opinión, es una idea terrible. El libro que había tenido los problemas que se encuentran actualmente en el cap. 22 repartidos por todo el libro, cada uno en su capítulo correspondiente. Le sugiero que revise los problemas de 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 se ordenan en consecuencia (los problemas de ninja de Ch. 5 son lo primero, luego los de Ch. 6, etc.), así que esto no debería ser demasiado difícil, pero no estoy 100% seguro ya que tengo la copia más antigua del libro.
Nota 2: a veces pasaba horas en un solo problema, solo porque pensaba que el problema era realmente interesante e insistí en solucionarlo 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 requiere tiempo, por lo que es probable que no pueda hacer esto para todos los problemas, si es que desea hacerlo. en absoluto.

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

Repite 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 resolvió el problema a ti mismo.) Esta es la etapa de codificación, así que no pierdas el tiempo volviendo a derivar algoritmos.

No sugiero que codifiques todos los problemas, especialmente si tienes experiencia con ACM-ICPC, TopCoder o Codeforces y similares (y realmente, si estás lo suficientemente familiarizado con STL, probablemente tengas un conjunto de habilidades decente). Solo escriba el código para los problemas que considere que tienen algoritmos complejos, una nueva estructura de datos que no ha usado antes (p. Ej., Un mapa desordenado para el hashing), problemas con casos complicados en las esquinas (la búsqueda binaria está en la parte superior de esta lista, ya que sus variantes son se le pregunta a menudo y puede ser mucho más complicado de lo que piensa) o un concepto de programación con el que no se sienta cómodo (esto incluye, pero no se limita a, sobrecarga de operadores, comparadores personalizados, funciones hash personalizadas, funciones personalizadas == y mucho más … ) Si un problema resulta complicado para usted, o si lo implementó de una manera que cree que no es óptima, mire las soluciones que ofrece el libro, que son excelentes y limpias, y le enseñarán todos los conceptos mencionados anteriormente. Te sugiero que imites un poco su estilo de escritura de código. Algunas notas importantes si son obvias son: use nombres de variables descriptivas (ninguna de esa mierda de nombre de variable de 1 letra) y guarde correctamente, y no se olvide de cerrar paréntesis y corchetes.

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

Día 25 – Sobre más preguntas.

Así que ahora que ha agotado la mejor reserva de preguntas y se siente lo suficientemente cómodo como para ingresar a una entrevista, usted … necesita preparar aún más. Ir a preguntas de la entrevista de Google (Copa de carrera). Este es un lugar peligroso. Existen algunos problemas muy buenos, pero también hay una clase de problemas que a mi capacitador de ACM le gusta llamar “problemas de Chuck Norris”: problemas escritos en los que el OP no tiene idea de lo que está pasando y sugiere que el entrevistador requería un tiempo lineal para los 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 entrevistas de programación, debería poder diferenciar fácilmente entre problemas buenos y problemas terribles. En el día 25, revise “todas” (las últimas 20 páginas) las preguntas de Google (incluso si se está preparando para Facebook) y haga una lista de las que considere “buenas”, y por “buenas” quiero decir Los problemas que usted siente podrían haber sido preguntados 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 cuestionables. Supongo que debería tener una lista de algo así como 80-120 preguntas al final, algunas simples, otras no tanto.

También tenga en cuenta que muy pocos problemas tienen respuestas correctas publicadas en el sitio, así 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 demasiado 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 en el Día 25. Encuentra el algoritmo. Si sientes que es demasiado difícil, busca ayuda. Si sientes que es imposible o que la mejor solución es el tiempo exponencial, realmente podría ser que el OP se haya equivocado. Sacúdalo, pase a otro problema. Si aún te apetece, codifica algunos de los problemas más desafiantes.
Varias de las preguntas de la Copa de Carrera 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 para Google)

He escuchado que Google recientemente ha adquirido el hábito de 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, implementa y prueba tu propia Lista de Saltos. Hice esto solo para practicar y porque las Listas de Saltos son interesantes de todos modos.

Para ser honesto, Google puede ser bastante impredecible con sus preguntas a veces, en mi experiencia. Podrían 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 se haya olvidado de resolver, o en profundidad Preguntas sobre el lenguaje de programación (por ejemplo, sobrecarga de funtores / operadores en C ++). Supongo que depende de su currículum y de lo que dice ser competente, así que mi consejo es que no ponga nada allí en el que no sea al menos algo competente. Ayuda tener un título en Informática o Electricidad e Informática. Ingeniería, realmente, solo basada en la gran variedad en las posibles preguntas. Sugiero una lectura de Get that job en Google (Steve Yegge) y Five Essential Phone Screen Questions (Steve Yegge). Probablemente debería conocer la mayoría de los temas que se tratan aquí (no pondría mi dinero en temas como subprocesos / procesos / paralelismo a menos que lo indique explícitamente en su currículum, sin embargo). La mayoría de las preguntas de codificación en el segundo enlace son Creo que es demasiado fácil subir en una entrevista, así que no te emociones demasiado con ellos, y me saltearía la sección “Versión especial de vía rápida”. Es humorístico, pero pensé que era demasiado cínico y fuera de lugar. La elección del editor de texto, el conocimiento del sistema operativo o el conocimiento de uno contra varios idiomas no le harán fallar una entrevista, por sí solos.

En una pequeña nota, aunque creo que Google puede hacer muchas preguntas no algorítmicas como anteriormente, 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 saber, pero No son el foco principal.

Día 31 – Las cosas no técnicas

Bueno, estoy haciendo trampa un poco al agregar el Día 31, pero también deberías tomarte un día o más para prepararte para la parte no técnica de las entrevistas, especialmente si estás entrevistando en Facebook, donde hay una no técnica. entrevista. Primero, prepare las preguntas que quiera hacerles 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 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 solucionado, bugs difíciles con los que ha tenido que lidiar, etc. Búsqueda de Google “Preguntas de comportamiento” y encontrarás miles de preguntas posibles.

Prepare una respuesta no genérica para “Por qué Facebook” (sugerencia: ritmo acelerado y cultura, el gran talento de la empresa, la misión de conectar al mundo …) y “Por qué Google” (sugerencia: la diversidad de los esfuerzos, la 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 decepción, ya que me apasionaban ambas cosas y no podía esperar para demostrarlo), pero exprimí mi interés al hacer mis preguntas al entrevistador, así que aproveche esa oportunidad si realmente quieres impartir algo que no tuviste la oportunidad de hacer.

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 nerviosa antes de cada entrevista. Una vez que el entrevistador intervino y comenzamos a hablar, en general me divertí porque realmente me encantaba hablar con ellos y resolver este tipo de problemas. Haz tu mejor esfuerzo para no estar demasiado nervioso: haz entrevistas simuladas y cosas por el estilo. También recomiendo programar entrevistas en un orden de prioridad creciente, para que se acostumbre a ellas y descubra sus deficiencias en el momento en que llegue a su empresa más buscada.
  2. Practicar la codificación sin un compilador / en una pizarra / papel. No hice ninguno de los dos, pero tengo la sintaxis de C ++ memorizada y estoy acostumbrado a codificar en un artículo en competiciones de ACM, por lo que es posible que no tenga que hacer esto si ya está lo suficientemente cómodo con su idioma favorito (solo necesita saber un buen idioma, por cierto, siempre que sea razonablemente conocido, como C ++ / Java / Python. Le permiten usar el idioma que desee durante la entrevista.)
  3. Los casos de esquina pueden matarte. Realmente tienes que practicar para encontrar y tratar casos de esquina y / o reconocer lo que yo llamo “problemas propensos a los casos de esquina”. Algunos problemas son muy simples de forma algorítmica, pero pueden ser muy difíciles de codificar, y tuve 2 de estos problemas, una 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 cómo codificarlo, antes de hacerlo. 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 hubiera 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. Piensa en voz alta acerca de los algoritmos / ideas a medida que los creas. Está bien hacer una pausa y pensar en silencio por un momento, pero no te quedes allí durante 3 minutos sin decir una palabra. Siempre, al menos, dé la solución simple, que muy bien puede no tener un gran tiempo de ejecución, pero no le hará daño. Lo hice en todas mis entrevistas, no importa cuán simple sea la respuesta, pero las dije directamente y noté que probablemente haya una mejor solución, y luego pensé en eso. (Por ejemplo: está bien, para buscar una matriz ordenada, podemos escanearla de forma lineal, pero esta es una solución O (n) y probablemente haya algo más rápido). Además, no sea arrogante al respecto (pregúntese en voz alta hasta que esté seguro de su método y tenga una prueba aproximada de que su método funciona). No discutas con tu entrevistador. 99.99% del tiempo, tienen razón, y usted está equivocado. Una posible excepción a esto es si están desafiando tu código: o bien te están señalando un error o intentan hacer que parezca que es así para ver cuánta confianza tienes en tu código y si estás de acuerdo ciegamente o proteste de que 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 la punta # 4) mientras codifica. Sin embargo, menciona lo que estás haciendo en intrincadas líneas de código (por ejemplo, si quieres probar si ‘x’ es una potencia de 2 mediante “if (x & (x-1)) == 0”, es posible que desee mencionar eso.)
  7. Las preguntas son a menudo subespecificadas, y esta es una gran debilidad de los Elementos de las entrevistas de programación: todos los problemas se especifican completamente, por lo que casi no hay capacitación sobre esto. Siempre piense en las preguntas que podría hacer o en las condiciones que podrían hacer que su algoritmo falle si no es cierto. Algunos ejemplos son: ¿Todos los números son positivos? ¿Son distintos? ¿Cuál es el tipo de entrada (entero / doble …)? ¿Puedes volver a visitar una celda de cuadrícula? El libro tiene preguntas donde estas propiedades se especifican explícitamente en la pregunta: piense qué pasaría si estas condiciones no estuvieran allí: la solución a menudo se descompone.
  8. No te rindas si no piensas en la respuesta directamente. En mi última entrevista en Facebook, tuve el problema más difícil hasta el momento, y tardé unos 5 minutos en llegar a la respuesta, y terminé contratado. Esa fue en realidad 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 estados utilizando la Búsqueda en primer lugar para encontrar una secuencia más corta de “movimientos” (como este problema: ACM-ICPC Live Archive – Kermit the Frog ). Ambos salen muy a menudo.
  10. La suerte importa. El proceso de la entrevista no es perfecto, y es posible que no lo apruebes, incluso si eres realmente bueno, ya que depende de tus entrevistadores y de las preguntas que recibas (y del tipo de preguntas en las que estás convencido, etc.) mitigue mucho este factor preparando una gran cantidad, pero siempre está ahí, y es importante saberlo. Te sugiero que leas Get that job at Google (blog de Steve Yegge) si quieres más detalles sobre este factor.
  11. Ignorar ch. 20 y 21 en el libro. No son grandes (Tal vez lea el Capítulo 21 un poco para tener una idea, pero eso es todo.) Desplácese hacia abajo a la sección Diseño del sistema si también tiene que prepararse para una entrevista de diseño del sistema.
  12. Pónganse de relieve en su CV (o al menos, no se exageren), especialmente si lo solicitan a través de una referencia. Si escribe ‘experto en C ++’, llamarán a su ingeniero de C ++ más avanzado para que usted se caiga y se queme. Nunca he conocido a nadie que haya obtenido algo relacionado con multihilo y paralelismo en una entrevista para SWE, excepto una persona que lo mencionó como una habilidad. Y he aquí, se le preguntó al respecto y no le fue tan bien.
  13. A menudo, obtendrá un problema que es una variante de un problema que ha 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 aspecto). o una solución mayormente similar.) Tenga cuidado con estas diferencias sutiles; puede descubrir (o pensar que ya ha encontrado) la solución para el problema porque la encontró muy similar a una que ha visto antes, pero una pequeña diferencia en la declaración del problema significa que su solución es realmente 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 ello, 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 de bifurcación y no hay DP en absoluto involucrado. Si responde erróneamente a DP en lugar de derivar y viceversa o viceversa, el entrevistador sabrá que ha visto el otro problema antes y pensará que acaba de memorizar la solución, por lo que probablemente sea suficiente por sí solo para darle un “no “Contrato” por parte de ese entrevistador. (También me atrevería a suponer que el entrevistador no declararía esa afirmación en absoluto, exactamente por esta razón, y tendría que preguntar si puede visitar una entrada más de una vez, según la sugerencia). # 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.

Una vez más, 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 de Sistemas. Preparé visitando este sitio: Hired In Tech, que es decente (no excelente) y leyendo varios artículos 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 gordito. 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 de CAP, los temas de escalabilidad, y quizás lea sobre Hadoop y algunos problemas que puede resolver con él (Hadoop In Practice es un libro decente para estos propósitos). Pruebe algunas preguntas como la pregunta “Diseñar un acortador de URL” en Hired In Tech, o una escala mayor como “Diseñar un motor de búsqueda web” o “Diseñar Google Maps”, todas las preguntas que se pueden hacer (también consulte 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 muy buenas. Pero en general, para la entrevista de diseño de sistemas, practicar sobre preguntas es menos significativo que comprender los conceptos anteriores y saber cómo hacerlo. discútalas, ya que toda la entrevista es algo así como una conversación rápida entre usted y el entrevistador, donde cambiará las especificaciones de las preguntas sobre la marcha para ver cómo lidiar con diferentes escenarios.

Consejo final

Entonces, si realmente quieres ese trabajo, va a 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 bastante conocimiento de la preparación, y es probable que usted también lo haga.

Mi último consejo es simplemente ir a la entrevista y no estresarme (esto es obviamente más fácil decirlo que hacerlo). Los ingenieros quieren que seas bueno y que te contraten, la contratación es un proceso bastante costoso. Algunos pueden ser tranquilos, y otros pueden ser menos tolerantes, pero en todos los casos, la entrevista es muy similar a una conversación entre dos ingenieros, y eso es exactamente lo que estas compañías se esfuerzan por lograr en la entrevista, así que simplemente trátenla de esa manera. Si te has preparado bien, se mostrará.

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

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

Recluto gente para Facebook, así que, desde una perspectiva de reclutamiento, compartiré algunos consejos y trucos para que personas como yo nos conozcan.

Recientemente escribí cómo conseguir un trabajo en facebook aquí y consejos para hacerlo a través de la entrevista aquí. Esta publicación comparte gran parte de esa información con algunos detalles.

Al final de esta publicación, también hay algunos recursos adicionales para ayudarlo a obtener el trabajo y prepararse.

Áreas técnicas para enfocar

Hay 3 áreas en las que realmente me enfocaré en hacerlo realmente bien. Estos 3 te ayudan a convertirte en un ingeniero de extremo a extremo; Alguien que conoce tanto el software como los sistemas de cómo funciona algo. Debería enfocarse en lo que es la “respuesta” pero, lo que es más importante, mostrar que puede pensar que está superando el problema.

  1. Sistemas – Más específicamente, solución de problemas y depuración de Linux. Entender cosas como la memoria, io, cpu, shell, memoria, etc. sería muy útil. Saber cómo escribir realmente un shell de Unix también sería una buena idea. ¿Qué herramientas podrías usar para depurar algo? En otra nota, esta entrevista probablemente ampliará tus límites de lo que sabes (y cómo implementarlo).
  2. Diseño / Arquitectura : esta entrevista tiene que ver con tomar una pregunta ambigua sobre cómo puede construir un sistema y dejar que lo guíe. Su entrevistador agregará restricciones cuando sea necesario y la idea es obtener una solución simple y viable en la pizarra. Cosas como la carga y el monitoreo son cosas que podrías considerar. Lo que consideras es tan importante como lo que no. Entonces haga preguntas aclaratorias y reúna los requisitos cuando sea apropiado.
  3. Codificación : el objetivo final son los algoritmos, las estructuras de datos y el código de producción limpia. Los árboles binarios y las listas de enlaces pueden ser temas para revisar y usted es libre de usar el idioma que desee.

Práctica. Luego practica de nuevo.

Hace un mundo de diferencia. Especialmente con la presión de una entrevista. Practique con un amigo en una pizarra con una restricción de tiempo de 45 a 60 minutos. Luego pida una respuesta directa. Incluso lo grabaría, lo vería más tarde y vería cómo discutías ciertas cosas. Luego invierte los roles. A veces, aprenderás más siendo el entrevistador. No lo lleves a los extremos, pero considera enseñárselo a un amigo o dos. Esto es a menudo cómo absorbe información a una velocidad más rápida.

Tener una presencia online

Usamos una gran cantidad de herramientas, tanto internas como de otras, para encontrar personas que puedan ser adecuadas para los roles que estamos contratando. Algunos de estos incluyen cosas como Linkedin, por ejemplo, o buscar en Github (si eres técnico). Por lo menos, recomiendo tener un perfil de Linkedin completamente vaciado y actualizado, especialmente si está buscando activamente. Un sitio web personal también ayudaría.

Tener una presencia fuera de línea.

Organizamos eventos en todo el mundo que buscan reunirse y conectarse con otros, específicamente para ingeniería. En muchos casos, publicaremos sobre esto o le enviaremos una invitación si pensamos que podría estar interesado. También asistimos a muchas conferencias para retribuir y compartir nuestro conocimiento con la comunidad, pero también para conocer a personas que puedan estar interesadas en unirse a Facebook.

Contribuye a la comunidad de código abierto (si eres técnico)

Hablando de conferencias, somos grandes defensores del código abierto.

Aquí hay un par de enlaces dependiendo de lo que sea más relevante para usted. Android, iOS, web, backend y hardware. Si está trabajando en algún proyecto de código abierto, agréguelos a su Github, Linkedin, cartera o cualquier otro sitio en línea que pueda tener y mencionelos en su currículum.

Red a tu manera en

La red es, con mucho, una de las mejores maneras de conseguir un trabajo en Facebook. Si conoce a alguien directamente que pueda responder por usted, las recomendaciones le ayudarán a conseguir su pie en la puerta. Si no lo hace, comience a conectarse con otros en su industria, incluidos aquellos que trabajan en Facebook. Es probable que alguien que conozcas pueda presentarte directamente o que conozca a alguien que pueda. De hecho, un colega mío me remitió a mi reclutador, lo que aceleró mi entrevista y en una semana tuve 4 ofertas, incluido Facebook. Una de las mejores decisiones que he tomado también. Puedes leer más acerca de por qué aquí. La creación de redes es una de esas habilidades que nunca pasarán de moda y seguirán dando sus frutos.

Optimiza tu currículum

Técnicamente no hay una forma correcta o incorrecta de formatear un currículum, pero después de todo somos humanos. Aquí hay algunas cosas a considerar.

  • Manténgalo en 1–2 páginas (y no super abarrotado). Debe ser fácil de leer.
  • Enfócate en el impacto en tu experiencia pasada.
  • Resalte las cosas que lo ayudan a destacar, ya sea su educación, sus proyectos, su experiencia pasada o cualquier contribución a la comunidad de la que forma parte.
  • Manténgalo actualizado en cualquier lugar donde lo haya publicado en línea.
  • No use palabras de moda por el simple hecho de usar palabras de moda. Sí, los reclutadores realizan búsquedas por palabras, pero también somos conscientes de ver cada palabra de moda en la industria en su declaración objetiva (que por cierto, no es totalmente necesaria). Si tiene sentido usar la palabra, úsala.
  • Mire el currículum de otras personas que tienen el trabajo que desea, especialmente en Facebook. Si no puedes encontrarlo en línea, mira su Linkedin. ¿Puedes aprender algo de ello? ¿Existen puntos en común específicos? Si la hay, deberías considerarlo. No me malinterpretes No estoy diciendo copiar la experiencia de alguien más. Esto podría darle algunas ideas sobre en qué enfocarse.
  • Se veraz No solo coloque algo en su currículum que no sea exacto, ya que es probable que le preguntemos al respecto o que surja una conversación. Si no puedes respaldarlo, déjalo apagado.
  • Más consejos aquí

Envíe un correo electrónico frío a un reclutador (y no a cualquier reclutador)

Puede comunicarse directamente con un reclutador que se enfoque en su área de especialización, con énfasis en el área de especialización. La mayoría de los reclutadores identificarán para qué áreas de ingeniería o roles no técnicos contratarán. Sé estratégico en a quién te diriges y sé personal. Nos encanta conocer a personas que podrían estar buscando activamente y dentro de nuestro alcance específico de reclutamiento. Literalmente, hace nuestro trabajo mucho más fácil. Si conoces a alguien que fue reclutado en Facebook pero no los conoces lo suficiente, incluso puedes pedirles una introducción a su reclutador de Facebook. Tal vez estén dispuestos a ayudar.

Aplica online

No hace falta decir que probablemente no esté de más solo aplicar en línea. Tenemos un equipo fantástico que analiza las aplicaciones entrantes y las remite al reclutador adecuado, siempre y cuando tenga sentido.

Construye tu marca

Interactúa con tu tribu (ya sea tecnología o no tecnología) y comienza a construir tu marca. Este es el único consejo que desearía haber aprendido antes. Si eres conocido en tu industria, publica contenido, habla en conferencias, escribe un libro, blog y comparte tu contribución al mundo. Todos consumimos contenido, pero necesitamos más personas para crearlo.

Comience a preparar ahora

No esperes más para comenzar a preparar tu entrevista. Cada día es un nuevo día para mejorar sus habilidades, adquirir nuevas y continuar mejorando en lo que sea que haga, donde sea que lo haga. Cuando llegue ese día, querrás estar lo más preparado posible. Aquí hay algunos consejos para hacerlo a través del proceso de entrevista en Facebook.

También es importante tener en cuenta que si no funciona la primera vez, no es el final de la línea. Muchas personas no reciben ofertas en su primera o segunda entrevista y le invitamos a continuar la entrevista para los mismos o diferentes roles, generalmente en aproximadamente un año (aunque algunos roles / equipos podrían ser diferentes).

Más recursos

  • Cómo hacerlo a través del proceso de entrevista en Facebook.
  • Cómo su entrevista es diferente por nivel
  • Consejos para pasantías y roles de graduación recientes.
  • ¿Por qué Facebook es un gran lugar para trabajar?

Rompamos esto en secciones o pasemos a mi guía gratuita aquí

Desarrollo de codificación:

  • Aumente sus conocimientos de Java, Swift y HTML, así como de algoritmos y estructuras de datos.
  • Entra en competiciones de codificación competitivas 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 (de modo 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 resultados / GPA más cercanos a tus cursos como puedas
  • Vale la pena conocer un idioma “en demanda” como el ruso, el urdu o el español.

Desarrollo personal:

  • No todo el mundo está solicitando trabajos en SDE; así que 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 cross-fit; entrar en una competición de cross-fit
  • Si corres, entra en 2x carreras de 10k
  • Si juegas ajedrez, participa en una competición de ajedrez competitiva.
  • Si no tienes un hobby. Encuentra uno

Preparación del curriculum vitae

  • Se aplican 3 millones de personas. 7k conseguir trabajos. Probablemente se entrevistó a 20 personas por cada trabajo (conjetura educada)
  • Llegar a la entrevista es difícil. Necesitas un currículum increíble
  • Nick una plantilla desde aquí. No cometas ESTOS errores
  • Una vez que esté listo, hágalo revisar por un / 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 Google Recruiting en Quora, donde soy el escritor más visto.
    • Obtener lectura
  • Lee cualquier cosa por Gayle Laakmann McDowell
  • Buscar programación / de lo contrario preguntas en Glassdoor
  • Practica con un amigo
    • Entonces practica de nuevo

    Otro:

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

    Hice una pasantía en Google en el verano de 2016. Aunque el proceso de selección para pasantías es mucho más simple que para un puesto de tiempo completo, me preparé durante aproximadamente una semana para mis entrevistas. Aquí hay algunas pautas para la preparación después de recibir una llamada para una entrevista.

    En general, se lo entrevistará sobre algoritmos / estructuras de datos (y habilidades analíticas), programación y diseño de sistemas. Aquí hay una descripción general de cómo puede mejorar en estas habilidades:

    • Paso 1: Algoritmos : obtenga este libro – Diseño de algoritmos: Kleinberg / Tardos. Por alguna razón, este libro no es tan popular como los otros algoritmos de libros, pero está muy bien organizado. El conjunto completo de algoritmos se divide claramente en unos pocos capítulos: Teoría de gráficos, Algoritmos codiciosos, Dividir y conquistar, Programación dinámica , Flujo de redes y algunos otros temas misceláneos sobre algoritmos. Debes pasar algunas semanas en cada uno de los temas anteriores en negrita: estudia el capítulo en unos días y resuelve los 50 o más problemas al final. Debido a que solo hay un número manejable de problemas en cada capítulo, puede resolver la mayoría de los problemas en un tiempo razonable. Es posible que desee omitir entre el 20 y el 30% de los problemas que son relativamente difíciles, pero debería poder resolver entre el 70 y el 80% de los problemas, solo o con poca ayuda.
    • Paso 2: Estructuras de datos y programación : para este paso, elija un idioma cuando comience y practique el uso de ese idioma solamente. Considero que Java es el mejor en cuanto a entrevistas: orientado a objetos, que ayuda a escribir códigos modulares con mayor facilidad, tiene verificación de tipos, lo que facilita el razonamiento sobre la corrección del código (a diferencia de Python) y tiene buenas bibliotecas para estructuras de datos y para manejo de cadenas (a diferencia de C ++). Encontré que Cracking the Coding Interview es bastante bueno. Nuevamente, hay capítulos sobre cada tema importante (aunque más detallados que en el libro anterior). Para cada capítulo, hay un conjunto de alrededor de 10 problemas. Normalmente omito los más fáciles y solo elijo los 1 o 2 problemas más difíciles del conjunto. Dependiendo de su nivel y del tiempo que tenga, es posible que desee hacer lo mismo o intentar todos los problemas. Para cada problema que resuelva, escriba el código desde cero sin un IDE . Y luego escribir casos de prueba. (De hecho, deje de usar IDE en la medida de lo posible en su trabajo diario. Será una buena práctica para aprender el idioma en el que está trabajando). Al momento de escribir el código, piense en la legibilidad, modularidad y eficiencia de su código. Finalmente, lea las soluciones provistas.
    • Paso 3: Diseño del sistema : Nuevamente, la Interpretación de la Entrevista de Codificación tiene algunos problemas en esta área. Practícalos
    • Paso 4: preguntas de la entrevista : en esta etapa, querrá consultar los recursos en línea, como GeeksforGeeks y CareerCup.

    Luego, en función de su autoanálisis, es posible que desee volver a uno o más de estos pasos y continuar trabajando en habilidades / temas específicos.

    Es casi sobre las habilidades que traes a la mesa. Céntrese primero en desarrollar sus habilidades, luego muéstrelas de la mejor manera posible y finalmente permita que las compañías se comuniquen con usted. Las empresas que le alcancen deben ser el paso final.

    1. Desarrollo de habilidades: si puede mostrar sus habilidades más allá de su grado, sus posibilidades aumentan aún más. Los siguientes son algunos ejemplos de maneras de hacer eso.
    1. Cree algunas aplicaciones / proyectos útiles y muéstrelos en GitHub. Participa en Hackathons. Haga un trabajo increíble en un nicho particular, como CNN, sistemas distribuidos, Kernel, etc.
    2. Contribuir al código abierto.
    3. Estructuras de datos maestros y algoritmos. En cualquier caso, necesita aclarar sus entrevistas, lo que hace hincapié en estos. Recursos útiles: descifrar la entrevista de codificación, InterviewBit, CareerCup, Topcoder, Codeforces, Codechef, etc.
    4. Aprenda tecnologías, software, idiomas utilizados o construidos por la empresa específica. Por ejemplo, para Google, use y aprenda Go, AngularJS, Firebase, BigTable, etc. Para Facebook, PHP, Hack, etc.
    5. Participe en competiciones organizadas o patrocinadas por Google, como Kickstart, CodeJam, SRM patrocinados en TopCoder u otros sitios, Google CTF, GSoC, etc. Para Facebook, SRM patrocinados, Hackercup, etc.
    6. Solicite los programas relevantes de Google bajo Google for Education. Google for Education: una solución diseñada para docentes y estudiantes, Google for Education: Programs, Students – Google Careers, Google for Education: Student Scholarships.
    7. Siempre puedes consultar la guía técnica para estudiantes por Google. Estudiantes – Guía para el Desarrollo Técnico – Google Carreras
    8. Encuentre un error en el software de estas empresas o reclame las recompensas de errores.
    9. Blog sobre tu trabajo, lecturas y proyectos.
  • La presentación también es muy importante cuando se solicita para empresas de ensueño como Google / Facebook, donde la barra y la competencia son demasiado altas. El propio Google presenta una guía aquí. Estudiantes: Solicitando a Google – Carreras de Google. Realice una búsqueda rápida en Google y encontrará muchas formas de mejorar su currículum. LMGTFY
  • Solicitud : otra acción útil debe ser contactar a los empleados de Google para obtener referencias o reclutadores que busquen candidatos como usted. Si tiene algunas referencias, quién puede responder por su solicitud, sus aplicaciones se vuelven más creíbles. Si encuentras un reclutador, aún mejor. Respuesta detallada: la respuesta de Quora a ¿Cómo solicito pasantías en Google si soy un estudiante universitario en la India?
  • (Gracias por A2A, Praveen Gowda)

    Hay algunas respuestas realmente muy buenas aquí. Gran lectura

    He respondido una pregunta similar en otra parte, lo que puede darte una buena idea para pensar: la respuesta de Soham Mehta a la que planeo dejar mi trabajo y estudiar algoritmos a tiempo completo durante un año. Mi objetivo es entrenar mi habilidad de algoritmos para preparar una entrevista de Google. ¿Alguien me puede dar un consejo?

    Si bien muchos entrevistadores de Google se preocupan por el idioma que elija para programar (Python, C ++ o Java), eso no es lo que más les importa. Se preocupan por los fundamentos de CS y, lo que es más importante, por su fluidez en esos fundamentos.

    Cualquiera que sea el plan que haga y siga, lo más importante, en mi humilde opinión, es hacer su preparación en el orden “primero en amplitud” y medirse continuamente después de cada ronda. Eso te ayudará a saber cuándo parar y expondrá tus fortalezas y debilidades más rápidamente.

    Buena suerte.

    1) Aprender el proceso de la entrevista, averiguar el tipo de entrevistas. Según mi conocimiento hay 3 tipos
    a. Entrevista de programación / programación
    segundo. Entrevista de diseño del sistema
    do. Entrevista de comportamiento

    2) Entrevista de codificación – relativamente fácil.
    a. Estudio de estructura de datos y algoritmos.
    segundo. Escribir código en papel es la clave. Si tiene un año, por lo menos debe escribir / resolver 1 programa en su idioma favorito todos los días. Primero escribe el código en papel y luego escríbelo y compílalo. Asegúrese de que su programa en papel se ejecuta sin modificaciones. Eso será al menos 365 programas en total :).
    do. No olvides 2.b 😉

    3) Entrevista de diseño del sistema: estas son las entrevistas difíciles / difíciles.
    a. A medida que tenga tiempo, aprenda la programación orientada a objetos, un poco sobre los patrones de diseño.
    segundo. Busque preguntas, respuestas en Internet y resuelva la mayor cantidad posible. Resuelva / practique las preguntas de diseño del sistema simulando el mismo entorno de entrevista. Practica con tus amigos.

    4) entrevista de comportamiento
    a. Revise sus proyectos anteriores y aprenda / sepa todo lo que escribe en su currículum.
    segundo. Aprenda / practique para entablar una conversación relacionada con uno de sus proyectos con los siguientes puntos en su mente: consideraciones de diseño, qué / qué / por qué se tomaron las decisiones, los errores más difíciles, la interacción con el colega, el gerente, etc.

    5) Recursos –
    a. Mire otras publicaciones de Quora relacionadas con la preparación de entrevistas similares a Google, entrevistas de diseño de sistemas. Prepare una lista de estos recursos y use / practique tanto como sea posible.

    6) ¿Cómo practicar? – La mejor manera de practicar es ir a entrevistas. Hay muchas empresas que hacen preguntas de entrevista tipo Google. Trate de programar la pantalla del teléfono y las entrevistas de 1 día con tantas compañías como sea posible (por ejemplo, al menos 1 por mes (así que sume por lo menos de 12 a 15 entrevistas)).

    7) Construye tu propio proyecto / sistema –
    a. Intente proponer una idea o use una idea existente y cree su propio sistema. Por ejemplo, un sitio web o un marco de Map-reduce etc.
    segundo. Participar en concursos de programación, etc.

    8) Enfoque: no pierdas el foco. Sigue trabajando en tu objetivo.

    9) ¡Buena suerte!

    Esto puede ser mejor respondido por personas que realmente trabajan en estas compañías.

    Por lo tanto, estoy compartiendo algunas ideas basadas en lo que algunos de los Mentores (que trabajan en Facebook, Google, Microsoft, etc.) en nuestra Plataforma de Mentores En realidad he dicho.

    • La mayoría de las entrevistas se centran en estructuras de datos y algoritmos, además de las preguntas generales de codificación. Sumérjase en la “Introducción a los algoritmos” de CLRS (Cormen, Leiserson, Rivest, Stein) y aprenda a pensar en términos de algoritmos y complejidades, cuando se trata de construir una solución.

    • Lo que la mayoría de los empleadores principales buscan, más que nada, son las excepcionales habilidades de resolución de problemas y la capacidad de optimizar la solución. Y lo más importante en lo que lo evaluarán es, de hecho, su enfoque del problema.
    • Por lo tanto, siga adelante y comience a aprender cómo diseñar un algoritmo y diviértase resolviendo un problema difícil utilizando ese algoritmo, implementándolo en el idioma que elija. Para poder aprender de manera efectiva, debe aplicar cada nuevo concepto para resolver problemas y comprender la esencia de cada estructura de datos.
    • Elija cualquier idioma, desde C, C ++ o quizás Java, y comience a usar la codificación competitiva en: TopCoder, CodeForces, Spoj, CodeChef, Hacekerrank, HackerEarth, Google Codejam, etc.
    • Para empezar, comience con metas simples pero concretas; resuelva un problema Div 2 A en Codeforces o Div 2 250 en Top Coder, todos los días, durante un mes. Luego avanza gradualmente hacia 500 punteros, 1000 punteros en Div II.
  • Elabore el currículum perfecto y tenga una fuerte presencia en línea :

    ¿Y cómo se hace uno para crear el curriculum vitae perfecto?
    No solo liste sus proyectos / pasantías. Comience por enfatizar los resultados y cuantificar sus logros ; arroje números para darle al reclutador una prueba tangible de sus habilidades y demuestre cómo puede agregar valor a la posición solicitada.

    • Finalmente, llévelos a otras fuentes de información sobre usted mediante el enlace a su propio sitio web, perfil de LinkedIn, perfil de GitHub, etc.
    • Lea los detalles sobre cómo maximizar sus posibilidades a través de su perfil de GitHub, perfil de LinkedIn, sitio web personal, etc. en el artículo .
  • Pasantías y proyectos propios; Esta es la parte más crucial:
    • Debe justificar las reclamaciones en su currículum con pasantías y proyectos relevantes. Debería quedar claro en tus proyectos que realmente disfrutas construyendo cosas; demuestre su valía construyendo proyectos alrededor de ideas que le interesan, ya sea para startups, aplicaciones para su universidad y organizaciones estudiantiles, o contribuyendo a bibliotecas de código abierto.
    • Puede postularse a nuevas empresas a través de AngelList y encontrar fácilmente pasantías / posiciones abiertas. También puede dirigirse a personas como Internshala, Let’s Intern, Twenty19, etc. para encontrar pasantías.
  • Mejore sus habilidades más allá de su currículo universitario para abordar las necesidades del mercado laboral actual con algunos MOOC buenos.
    La mejor parte es que generalmente son gratis , aunque algunos tienen una tarifa razonable para calificar y completar los certificados de los cursos.
    Los sitios web más recomendados para los MOOC son Coursera , Udacity , Edx , MIT Open Courseware , Udemy , Open University ( lea el artículo para ver los enlaces a los cursos más recomendados para habilidades en caliente ).
  • Además, ponga en sus manos lo que a menudo se llama la biblia de la preparación para las entrevistas tecnológicas; Rompiendo la entrevista de codificación.
    • Sumérgete en preguntas de entrevista reales con CareerCup , Glassdoor , LeetCode , InterviewBit y GeekforGeeks , ya que tienen un flujo continuo de nuevas preguntas que provienen principalmente de entrevistas reales.
      Sin embargo, no se limite a prepararse, concéntrese en el aprendizaje real.
    • En lugar de simplemente pasar por la codificación específica, diseñe las preguntas, comience a entenderlas realmente.
    • Específicamente para Google, consulte la excelente guía provista por ellos sobre cómo desarrollar sus habilidades técnicas a través de un aprendizaje práctico y a su propio ritmo. Guía para el desarrollo técnico .
      También puede marcar los videos que han sido preparados por los propios reclutadores de Google en Consejos técnicos para entrevistas y Consejos no técnicos para entrevistas.
  • Encuentre un mentor: encuentre y conéctese con las personas adecuadas, EN las compañías de sus sueños, para buscar orientación y obtener la ayuda que necesita.
    Puede encontrar Mentores de sus universidades y compañías objetivo en la Plataforma de Mentores Libres de WisTree.
  • ( Para profundizar más, lea el artículo completo, que es una guía detallada de 7 pasos, que contiene enlaces a todos los recursos de aprendizaje importantes, así como más información de los incondicionales de la industria )

    ¡Todo lo mejor!

    Sólo voy a sacudir algunos consejos de google

    Habilidades técnicas

    1. Habilidades Básicas en Informática: Con suerte, cualquier ingeniero de software tendrá estas habilidades y más. Las habilidades de investigación, la comprensión de lectura, la capacidad de saber cómo usar las funciones de la biblioteca y la comprensión de los problemas informáticos, los patrones de diseño y los marcos son otras habilidades que son valiosas. Una gran clase involucra a los estudiantes y los ayuda a desarrollar habilidades de pensamiento lógico, resolución creativa de problemas y comunicación. Las clases que incorporan un enfoque de equipo, que requieren una comunicación clara entre los miembros a medida que resuelven un problema y explican su solución a los demás, les permiten a los graduados trabajar de esta manera en sus trabajos.
    2. Pasión por el código: la programación no es para los que no están interesados. Debes tener una pasión por el código, desarrollándolo desde una habilidad puramente científica hasta un oficio o un arte. El código de construcción es muy parecido a desarrollar una pintura, una escultura o una sinfonía. Con la popularidad de Open Source, no tiene que estar solo en la creación de código, la posibilidad de trabajar con ingenieros de software y desarrolladores de todo el mundo es posiblemente a través de Internet.
    3. Refactorización sin miedo: Refactorizar es la capacidad de mejorar el código sin cambiar lo que hace. La capacidad de darse cuenta de que nadie debe ser esclavo del código original es clave aquí, ya que el código antiguo puede volverse inestable e incompatible con el tiempo. La refactorización permite al desarrollador poseer el código, en lugar del código que te posee.
    4. Desarrolla la calidad: en una época anterior, los ingenieros pensaban que las pruebas estaban por debajo de ellos. Hoy en día, los ingenieros experimentados conocen y comprenden el valor de las pruebas, porque su objetivo es crear un sistema que funcione. Exponer errores y eliminarlos es la mejor manera de desarrollar código estelar. Pero un buen ingeniero también sabe que no debe perder tiempo escribiendo pruebas triviales o redundantes, en lugar de concentrarse en probar las partes esenciales de cada componente.
    5. Dispuesto a aprovechar el código existente: ¿Por qué inventar la rueda cuando ya está funcionando? La vida es demasiado corta para inventar continuamente nuevos códigos y bibliotecas. La reutilización de la infraestructura interna, el uso de bibliotecas de terceros y el aprovechamiento de servicios a escala web, como los que ofrece Amazon, son marcas de un genio del software.
    6. Enfoque en el código utilizable y mantenible: el software siempre funciona mejor, está bien diseñado y está centrado en el usuario. Los buenos ingenieros trabajan duro para hacer que el sistema sea simple y utilizable. Piensan en los clientes todo el tiempo y no intentan inventar cosas complicadas que solo los geeks puedan entender y apreciar. Un ingeniero disciplinado también piensa en la capacidad de mantenimiento y la evolución del código desde su primera línea. Los nombres expresivos para métodos y variables pueden hacer que el código se explique por sí mismo.
    7. Puede codificar en varios idiomas: escribir FORTRAN en cualquier idioma es solo la punta del iceberg. Al igual que una persona que puede hablar varios idiomas, un ingeniero que no está atado a un lenguaje de código puede pensar fuera de la caja y es un empleado más deseable. La voluntad de aprender nuevos idiomas, nuevas bibliotecas y nuevas formas de construir sistemas contribuye en gran medida a la creación de un gran ingeniero de software.

    Espero que haya ayudado 🙂

    Si estuviera en tus zapatos, este es el camino que tomaría:

    1. Ir para un grado asociado en su universidad desconocida; De esta manera, sus horas de crédito serán transferibles a otro colegio o universidad después de dos años; de lo contrario, muchos de ellos te harán repetir los cursos que ya has tomado y te dirán que los cursos “no cuentan para transferir créditos”.
    2. Supongo que estás en la universidad desconocida por razones financieras. Haz absolutamente fantástico en tu universidad desconocida. Sea excelente, si es posible, como al tratar de hacer la lista de decanos, trate de mantener un promedio de A, y haga proyectos. Esto hará que sea mucho más probable que pueda recibir una beca de un colegio o universidad conocida.
    3. Contrate con un consejero de la facultad en su departamento. Ellos le ayudarán a trazar sus cursos para el mejor efecto.
    4. Consigue un mentor; idealmente, será alguien a quien pueda molestar por un corto tiempo todos los días durante una semana, si es absolutamente necesario, pero si tiene que hacerlo, es probable que esté haciendo algo mal. Un mentor también tiene que sacar algo de la relación, y uno debe gustarse el uno al otro. Si no hace clic, entonces no tiene un mentor, tiene un asesor. Además, lo ideal es que sean personas que ya saben lo que quieres aprender y necesitan estar cerca. Puntos, si pueden conseguirle una pasantía entre su primer año y segundo año, y más puntos si no lo arruina.
    5. Realice pasantías, especialmente en Google, pero posiblemente también en otras compañías que Google respeta, como Apple, Facebook, Microsoft, etc., si no puede obtener una pasantía en Google. Haga esto todos los años después de su primer año en la universidad; No espere hasta entre los años 3 y 4, como la mayoría de las personas. Esto tiene la ventaja adicional de rellenar su currículum con experiencia laboral real.
    6. Haz un excelente trabajo en tus pasantías; obtenga el asesor principal y cualquier otra persona con la que haya trabajado para más del 40% de la pasantía para que le escriba cartas de recomendación cuando se vaya y tenga permiso para usarlas. Esto hace un par de cosas:
    1. En primer lugar, recuerdan el trabajo que hiciste cuando es bastante reciente, y su memoria no va a ser tan buena después de 4 años.
    2. Es posible que se pueda usar como referencia (también puede que no, si la ha rellenado …).
    3. Con la carta en la mano, puedes controlar el mensaje en una referencia; es menos probable que se llame a alguien que escriba una carta de recomendación para una referencia, y si es una carta mala, puede elegir no mostrarla a nadie.
    4. Puede usarlos cuando solicite admisión en otros colegios o universidades y para becas.
  • DESPUÉS de que las personas en su pasantía escriban la carta de recomendación, pídales que escriban una evaluación de desempeño de usted, como lo harían con un empleado normal. Esto también hace varias cosas:
    1. Cuando lo haces por separado de esta manera, no mancha tu carta de recomendación; una carta de recomendación está destinada a que lo contraten, o al menos a otra pasantía más adelante, y si les gusta, es probable que exageren en su favor.
    2. Obtendrá una lista de cosas en las que necesita trabajar para su próxima pasantía; No seas idiota: trabaja en ellos.
    3. (Esto es potencialmente riesgoso, dependiendo de lo que digan …) Al ingresar a su próxima pasantía, es posible que desee revelar la evaluación de desempeño anterior como cosas en las que le gustaría trabajar en su nueva pasantía; esto será particularmente cierto si es con la misma compañía, lo que conlleva menos riesgos con la divulgación. Puede o no ser algo en lo que desee trabajar en la nueva pasantía, especialmente si no cree que pueda mostrar una mejora en las áreas de “mejora de necesidades” en el marco de tiempo.
    4. Dadas varias de estas evaluaciones a lo largo del tiempo, podría demostrarle a un posible empleador que puede recibir comentarios, actuar en consecuencia y mejorar. A empresas como Google les gusta eso, y si es así, le da un historial.
    5. Usted querrá compartirlo con su asesor de la facultad y / o mentor y obtener recomendaciones de cursos.
  • Ser un contribuyente sustancial a un proyecto de código abierto; cuanta más gente haya en el proyecto, mejor: si usted es el principal contribuyente a un proyecto de dos personas, cuenta mucho menos que si es un importante contribuyente a Linux o OpenLDAP o Samba, o cualquier otra cosa que Google utilice. internamente. Esto también le dará reconocimiento entre las personas importantes que están en esos proyectos, algunos de los cuales trabajan en Google (por ejemplo, Jeremy Allison de Samba trabaja en Google).
  • Aprender algoritmos. Todos saben lo que es un btree o una lista enlazada o una tabla hash. ¿Sabes lo que es un trie? ¿Qué tal un árbol extendido? ¿O un árbol radix? ¿Qué pasa con las cadenas de Markov? Bayesiano? Fusionar clases? ¿Clases de inserción? Omitir listas? Hay mucho que aprender. Los algoritmos de Knuth son un buen comienzo; Robert Sedgewick también tiene algunos buenos libros.
  • Aprenda “notación Big-O”; Aquí hay un manual muy simple sobre el tiempo de finalización para algoritmos en N elementos, donde N = 100:
    1. O (Log (N)) == 10 ^ -7 segundos
    2. O (N) == 10 ^ -6 segundos
    3. O (N * Log (N)) == 10 ^ -5 segundos
    4. O (N ^ 2) == 10 ^ -4 segundos
    5. O (N ^ 6) == 3 minutos
    6. O (2 ^ N) == 10 ^ 14 años
    7. O (N!) == 10 ^ 142 años
  • Toma una clase de lógica de tu departamento de Filosofía. Haz esto tan pronto como sea posible; querrá saber acerca de Hegel y Wittgenstein y las pruebas y construcciones lógicas formales; en particular, mucha gente llega a la universidad sin saber:
    1. SI A implica B y
    2. B implica C ENTONCES
    3. A implica C
  • Sé bueno en matemáticas. Algunas personas dicen que nunca usas las matemáticas en tu carrera después de aprenderlas; Si entras en un campo STEM como CS … estas personas están mintiendo. Usarás las matemáticas diariamente.
  • Aprende a pensar acerca de la resolución de problemas; Mi mejor consejo sobre esto es tomar las clases de física dura, pero cada uno tiene su propio enfoque. Aprendí a pensar en los problemas al nivel más profundo que soy capaz de hacer en las clases de física, porque implican la aplicación de conceptos a problemas reales. La óptica es buena; La mecánica analítica es buena; otros dependen del maestro. Mi profesor de electrodinámica cuántica odiaba con vehemencia el producto de una integración que terminaba con “+ C”; en su clase, aprendí cómo determinar el color visible real de los compuestos químicos, matemáticamente, a partir de su representación mecánica cuántica. Sin embargo, es probable que no obtengas un profesor tan bueno para esa clase.
  • Considere una clase de electrónica digital; Saber qué hace el hardware cuando le envía las instrucciones es de gran ayuda. También puede utilizar una serie de algoritmos electrónicos para la lógica digital para implementar algoritmos informáticos. Por ejemplo, si tiene un conjunto de afirmaciones IF … THEN … ELSE … ¿podría ahora simplificarlas en mucho menos desorden, y obtener el número mínimo de comparaciones, utilizando un mapa de Karnaugh ? Esto tiende a sorprender a muchos informáticos.
  • Aprende a comunicarte; nunca serás un líder de equipo en nada, o se te pedirá que presentes a un grupo (de hecho, los pasantes de Google están obligados a hacer una presentación del trabajo que hicieron a un grupo; otras compañías tienen políticas similares) si puedes No se comunique de forma clara y efectiva. La redacción trabaja para lograrlo, pero si tiene problemas para hablar en público, únase a un grupo como el equipo de debate, o de manera menos formal, Toastmasters, ahora, no más tarde . Esto también lo ayudará con cualquier entrevista para las pasantías o empleadores.
  • Aprende a hacer la tarea, incluso si no es necesario. Personalmente no aprendí a hacer la tarea hasta mi tercer año en la universidad, ya que siempre podía terminar mi tarea anterior durante la conferencia y todos hasta ese momento habían pedido que la tarea se entregara al final de la clase. Así que nunca aprendí buenos hábitos de estudio. Es una historia un poco divertida; La segunda semana en Mecánica Analítica (el Dr. Tripp dirigía la clase), estaba preparado para comenzar a hacer mi tarea durante la conferencia y el Dr. Tripp interrumpió mis preparativos. Dijo: “Lambert, número 4, arriba en el tablero”. Después de eso, hice la tarea antes de la clase.
  • Esa es mi lista de los 16 mejores.

    De manera informal, agregaré: la mayoría de las universidades en estos días no tienen clases de lenguaje de programación. Nunca serás un buen artesano si nunca aprendes cómo usar tus herramientas de manera efectiva.

    Si estás en un colegio o universidad que ofrece una clase de lenguaje de programación, tómalo. Si ofrecen C o lenguaje ensamblador, eso es lo mejor, pero C ++ o algún otro lenguaje que permita el uso de punteros también es bueno. Usted querrá saber cómo usar los punteros, y cómo se ponen las cosas en la memoria. Java es bueno y todo, pero no lo cortará, en comparación con tener que hacer su propia gestión de memoria explícita.

    Si no está en un colegio o universidad que tiene un programa “más difícil” que incluye esas cosas, probablemente quiera “intercambiar” una vez que obtenga sus asociados, especialmente si puede obtener una beca; Las universidades con excelentes programas en esto se pueden contar con solo dos manos, pero mis principales elecciones son: Rice, Brown, Georgia Tech, Stanford, MIT, Ohio State y un par de otras.

    Debe investigar esto usted mismo, y tenga en cuenta que no todos los contratos de grado requerirán las clases que querrá tomar para ser bueno en el uso de sus herramientas; los que lo hacen generalmente ofrecen múltiples opciones, y no todas incluyen eso; estarás tomando las opciones “más difíciles” si lo haces.

    Las personas realmente pueden aprender a ser muy buenos en CS en cualquier lugar, pero a menos que se las presione o se empujen a sí mismas, generalmente no lo hacen. Si quieres trabajar en Google como persona de CS, deberás ser bueno.

    No creo que estas empresas contraten a un desarrollador de Front-End. Si tiene un buen conocimiento sobre cómo interactúa el front-end / lado del cliente con los datos de back-end / lado del servidor, es más probable que obtenga un trabajo de front-end en estas compañías. Siempre están buscando personas excepcionales, quienes son mejores o diferentes a los demás, diferentes a los empleados que trabajan para ellos en este momento. Es posible que desee responder a una pregunta: “¿Por qué lo elegirían a usted en lugar de a otras miles de personas que solicitaron el mismo puesto?” Esperan que usted también se sienta cómodo con el lado del servidor.

    Si desea trabajar para una gran empresa, sea google o facebook, debe tener una cartera muy agradable y atractiva que incluya todos sus proyectos del mundo real. Debe tener al menos más de 10 proyectos en su cartera. Si no trabajó en ningún proyecto, intente trabajar en algunos de ellos. Ayudan al entrevistador a comprender cuánto te apasiona la programación.

    También debe vincular su perfil de Github en su cartera. Intenta contribuir al código abierto tanto como puedas. Aprendes mucho mientras ayudas a los demás, esa es una verdad universal.

    Si no sabe qué hacer, qué tipo de proyectos debe mencionar en su cartera, incluso si aún no ha realizado ninguno, le ayudaré a hacerlo.

    Aquí hay una manera de lograr eso:

    Aprender a codificar y ayudar a organizaciones sin fines de lucro es una plataforma donde aprendes a codificar, ayudar a otros, crear proyectos, ayudar a organizaciones sin fines de lucro y construir tu red de programación. En primer lugar, intente comenzar desde el principio, complete todos los cursos HTML / CSS / Bootstrap / Javascript / jQuery. También pondrá en orden sus conocimientos previos. Después de eso, completa todos esos algoritmos / hogueras, ¡son realmente emocionantes y divertidos!

    Cuando haya terminado, puede pasar a proyectos de nivel principiante, luego intermediarse y finalmente a proyectos avanzados de front-end. Los proyectos avanzados incluyen una calculadora de Javascript, Pomodoro Clock, Simon-Game, Tic-Tac-Toe. Oh, ¿es eso suficiente para la cartera? Tal vez no, no te preocupes, hay más proyectos en FreeCodeCamp.

    Si buscas trabajar en Facebook, AngularJS no te ayudará, no usan angular. Intenta aprender ReactJS. Reaccionar es asombroso y su popularidad se está disparando cada día. Hay muchos recursos para aprender ReactJS en línea y muchos videos útiles. Freecodecamp no tiene desafíos de reacción todavía, pero estarán disponibles pronto.

    Entonces, cuando haya terminado de reaccionar, vuelva a freecodecamp, y hay muchos proyectos de reacción. Esos proyectos incluyen:

    1. Markdown Previewer
    2. Juego de vida
    3. Juego de mazmorras como Rogue

    y muchos otros. Después de esto, tendrá un portafolio saludable y listo para la entrevista. Pero no hay ninguna razón para ser un desarrollador de aplicaciones para usuarios de aplicaciones para el usuario, debe tratar de envolver su cerebro alrededor del servicio de asistencia también.

    Debe estar familiarizado con las herramientas de administración de dependencias, como el paquete web, y el conocimiento de los precompiladores como SASS / LESS es una ventaja.

    Si tus habilidades de comunicación no son buenas, te recomendaría mejorarlas. Si habla inglés con fluidez, siempre hará que su entrevistador esté más interesado en usted. Si no es así, hay muchos recursos en línea para hacerlo, pero la mejor manera de hacerlo es tratar de hablar con alguien y conversar en inglés todo el tiempo. La forma en que lo hice fue jugar Dota 2 en servidores americanos / europeos y hablar con compañeros de equipo, lo que ha mejorado mucho mis habilidades para hablar. Pídale a su hermano o un amigo que lo entreviste, le ayudará. Intente escribir soluciones de código en la pizarra.

    Eso es todo lo que debe saber para obtener un trabajo no solo en las empresas mencionadas anteriormente, sino en cualquier otra empresa.

    Aquí hay una lista de compañías adquiridas por Facebook desde su inicio:

    Aquí hay una lista adicional de compañías cuyo valor de adquisición no se hace público.

    También podríamos encontrar una lista similar para Google también. Todos los fundadores y empleados de las empresas adquiridas podrán trabajar en Google y Facebook.

    Puedes leer sus testimonios aquí:

    ¿Cómo es ser adquirido por Google?

    ¿Cómo es ser adquirido por Google?

    Una cosa que muchos de ellos admiten es que si no fuera por la adquisición, nunca hubieran podido borrar la entrevista. Incluso Brian Acton, cofundador de WhatsApp fue rechazado por FB. No perdió la esperanza, fundó WhatsApp, se convirtió en una amenaza para FB, la vendió por $ 19 mil millones y el resto es historia.

    Fuente

    Respuesta corta: Comience a trabajar en 3 pasos:

    1. Cree una empresa lo suficientemente valiosa: podría ser una gran adición de valor para Google / Facebook o una amenaza potencial para su negocio.
    2. Adquirir, retirarse como una persona rica. O
    3. Consigue empleo allí.

    Fuente: Listado de fusiones y adquisiciones por Facebook.

    Listado de fusiones y adquisiciones de Google.

    Esta respuesta es mi viaje de la persona que tenía miedo de las entrevistas de programación, a mi estado actual por haber roto la Entrevista de Google y como entrenador de entrevistas de programación.

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

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

    Temas a preparar para la entrevista de programación

    • Preguntas basadas en el conocimiento.
    ojava preguntas de lenguaje
    oCore preguntas de concepto de informática

    •Estructuras de datos
    oArrays
    Listas enlazadas
    ohash mesas
    Tríos, Tries y Gráficos
    oHeaps
    oStacks y colas

    • Algoritmos
    oRecursion
    Programación dinámica
    oTree tecnicas de recorrido
    o Técnicas de búsqueda y clasificación.

    • Preguntas de comportamiento (menos importantes)

    • Código de complejidad

    • Preguntas de diseño

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

    • Preguntas populares de la entrevista.

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

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

    • Programación de preguntas de la entrevista | CareerCup
    • LeetCode Juez en línea
    • GeeksforGeeks | Un portal informático para geeks.
    • Codificación de la preparación de la entrevista hecha 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, vete a ti mismo mejorando cada vez más: ¡tu código estará casi listo para compilar y sin errores!

    Pero, por supuesto, las largas horas de resolución de problemas pueden ser frustrantes. Póngase en red con otros y resuelva problemas en un entorno de grupo, y esto ya no se sentirá 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 el Meetup Interview Interview Prep .

    El grupo se reúne cada 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 de grupo (que es más efectivo y divertido que la práctica solitaria) y, lo que es más importante, aprender de otros.

    Ya que estás en tu segundo año, es el mejor momento para comenzar. La codificación en línea es el requisito previo para todo. Comience ahora mismo. Tienes un mes Haga todo lo que pueda de codechef o spoj (también hay otros, pero estos son los dos más populares). Después de este mes, intente sostenerlo probando algunas preguntas cada semana.

    Junto con eso es imperativo hacer proyectos también. Debe haber un equilibrio entre los proyectos y la codificación, pero su inclinación debe ser mucho más hacia la codificación. Y no solo codifique para obtener buenas ubicaciones. Sólo ir para la codificación si te apasiona. Es bastante agotador y requiere mucha paciencia. Diré que la paciencia es mucho más necesaria que tu perseverancia.

    Si su objetivo es una buena colocación, enfóquese en los dos temas: – ESTRUCTURAS DE DATOS y SISTEMAS OPERATIVOS mucho. Estos formarán el quid de la mayoría de sus algoritmos. Y revise los tutoriales en TopCoder para obtener una idea de todo lo que necesita saber antes de convertirse en el mejor programador.

    Espero que esto responda a su pregunta.

    Al obtener 2 años de experiencia profesional, debe aumentar el número de personas que conoce en cada compañía para incluir al menos 1 que lo remitirá internamente para un trabajo (además de obtener un buen conocimiento de los algoritmos y las estructuras de datos, lo que parece ser importante para Google). Esa es la única forma de garantizar una entrevista en cada empresa. Una vez que hayas hecho eso, entonces todo se trata de no fallar en la entrevista (sobre todo suerte si has estudiado lo básico).

    Por lo que he escuchado, las entrevistas de Facebook son bastante rutinarias, las entrevistas de Google se han vuelto mucho más fáciles (y ahora son casi de risa), y las navegará, o se estrellará y quemará. Es casi como si decidieran contratarte 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 resuelvas correctamente la primera vez y sin errores ni inconvenientes (pero esto debería ser bastante fácil si lo has practicado / preparado bien).

    Además, si bien estas dos compañías aún tienen aspectos positivos con respecto a su marca, están ganando en tamaño / BS y muchos candidatos calificados están eligiendo trabajar en otro lugar (… ¿startups?). Esto significa menos competencia en general y es una tendencia que será aún más notable / real en 2 años. Entonces, mientras trabaja para mejorar sus habilidades y su red, también debe ampliar su perspectiva lo suficiente como para ser consciente de otras grandes compañías que se presenten, y será menos probable que pierda tiempo y energía tratando de unirse a las que son antiguas. noticias “o que ya no son como lo anuncian.

    1) Aprender el proceso de la entrevista, averiguar el tipo de entrevistas. Según mi conocimiento hay 3 tipos
    a. Entrevista de programación / programación
    segundo. Entrevista de diseño del sistema
    do. Entrevista de comportamiento

    2) Entrevista de codificación – relativamente fácil.
    a. Estudio de estructura de datos y algoritmos.
    segundo. Escribir código en papel es la clave. Si tiene un año, por lo menos debe escribir / resolver 1 programa en su idioma favorito todos los días. Primero escribe el código en papel y luego escríbelo y compílalo. Asegúrese de que su programa en papel se ejecuta sin modificaciones. Eso será al menos 365 programas en total :).
    do. No olvides 2.b 😉

    3) Entrevista de diseño del sistema: estas son las entrevistas difíciles / difíciles.
    a. A medida que tenga tiempo, aprenda la programación orientada a objetos, un poco sobre los patrones de diseño.
    segundo. Busque preguntas, respuestas en Internet y resuelva la mayor cantidad posible. Resuelva / practique las preguntas de diseño del sistema simulando el mismo entorno de entrevista. Practica con tus amigos.

    4) entrevista de comportamiento
    a. Revise sus proyectos anteriores y aprenda / sepa todo lo que escribe en su currículum.
    segundo. Aprenda / practique para entablar una conversación relacionada con uno de sus proyectos con los siguientes puntos en su mente: consideraciones de diseño, qué / qué / por qué se tomaron las decisiones, los errores más difíciles, la interacción con el colega, el gerente, etc.

    5) Recursos –
    a. Mire otras publicaciones de Quora relacionadas con la preparación de entrevistas similares a Google, entrevistas de diseño de sistemas. Prepare una lista de estos recursos y use / practique tanto como sea posible.

    6) ¿Cómo practicar? – La mejor manera de practicar es ir a entrevistas. Hay muchas empresas que hacen preguntas de entrevista tipo Google. Trate de programar la pantalla del teléfono y las entrevistas de 1 día con tantas compañías como sea posible (por ejemplo, al menos 1 por mes (así que sume por lo menos de 12 a 15 entrevistas)).

    7) Construye tu propio proyecto / sistema –
    a. Intente proponer una idea o use una idea existente y cree su propio sistema. Por ejemplo, un sitio web o un marco de Map-reduce etc.
    segundo. Participar en concursos de programación, etc.

    8) Enfoque: no pierdas el foco. Sigue trabajando en tu objetivo.

    1) Ser perfecto en un idioma.
    2) Referir a la Biblia ( Introduction to Algorithms es un libro de Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest y Clifford Stein)
    3) aprender los conceptos de abordar un problema es una parte, resolver el ejercicio es otra parte.

    Todo lo anterior te hará un fuerte contendiente.

    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) Muestre su calibre y pasión participando en el codificador superior.
    5) Consulte la teoría de la computación (lo más importante en mi opinión)
    6) jugar con Linux SO de sabor.

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

    Y por último, pero no menos importante, intente contribuir a un foro en línea como Stack Overflow. Debido a que la enseñanza a veces dejará en claro los conceptos que también le darán reputación (siendo humanos).

    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 saber un número mínimo o un conjunto particular de idiomas? Definitivamente no. Lo que importa es su capacidad para resolver problemas y demostrar experiencia con un poco de lenguaje.

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

    – La única razón por la que podría ser valioso aprender un nuevo idioma fuera de la necesidad pura 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 #.

    – Enfocarse en hacer proyectos interesantes y desafiantes. Si eso pasa a involucrar nuevos idiomas, tanto mejor.

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

    Codificación:

    • Conozca sus estructuras de datos y algoritmos.
    • Comprenda el tiempo de ejecución de cada estructura de datos y cuándo se utiliza.
    • Practica, practica y practica. Recomiendo usar el libro Cracking the Coding Interview para practicar.

    Proyectos:

    • Trabaja en proyectos personales o grupales que están fuera de las clases de tu escuela.
    • Ve a hackathons e intenta crear una aplicación con tus amigos.
    • Mira muchos videos de khanacademy y youtube.

    Currículum:

    • Asegúrese de que su currículum esté lleno de palabras de la industria: así es como filtran su aplicación
    • Ponga solo las habilidades y experiencias relevantes en la parte superior, y los proyectos personales y los logros escolares en la parte inferior.
    • Asegúrese de que su currículum es de una página y en formato PDF.

    Destacar:

    • Iniciar una pequeña empresa o una startup. Hay muchas habilidades y conocimientos transferibles allí.
    • Como se indicó anteriormente, haga una solicitud!
    • Ve a buscar un editor y escribe un libro sobre algo genial.
    • Comience o únase a una organización sin fines de lucro y realice trabajo voluntario.

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

    Consigue un trabajo en alguna parte; posiblemente en un inicio; 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 haciendo blitz a través de un libro de preguntas o sitio web de entrevista en no más de 2 semanas, si ha estado expuesto a estos temas anteriormente (lo que debería ya que tiene un título de CS).

    Enfatice sus antecedentes, sus fortalezas y su cartera.

    No se quede libre por 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 vas por la ruta de inicio, ten en cuenta que no tiene que ser “real”. Muchas salidas multimillonarias son para nuevas empresas cuyo producto principal se conserva en el instante en que se adquieren; En retrospectiva, estos son solo proyectos de portafolio glorificados. No tenga miedo de llamar a su propio proyecto de cartera glorificada un inicio. (Probablemente estoy sonando cínico; no me refiero también, ni tampoco estoy descartando el verdadero talento de las nuevas empresas contratadas).