Esta publicación estuvo en mi borrador durante bastante tiempo. Finalmente saqué algo de tiempo de mi apretada agenda para refinarlo.
La primera pregunta aparece rápidamente sobre por qué estoy escribiendo esta publicación. Ya hay decenas de cientos de compilaciones similares en la web que hablan de esto.
Bueno, las siguientes razones me obligaron a hacerlo:
- Como moderador de GFG, he recibido muchas requests de lectores a través de varias redes sociales (FB, LinkedIn, Quora, InstaGuide) y varios clientes de correo que solicitan tutoría y orientación sobre cómo prepararse para las principales empresas multinacionales como Microsoft, Amazon, Google, etc.
- Habiendo pasado por un viaje similar y presenciando el éxito de muchos de mis amigos, siento que el conocimiento debe compartirse. Mi experiencia podría ser útil para las nuevas generaciones que persiguen el mismo objetivo que una vez fue el mío.
Tenga en cuenta que este artículo es puramente un reflejo de mis aprendizajes, lo que seguí a lo largo de los años y mi experiencia. Esta NO es la única forma de improvisar sobre lo que se necesita: sus habilidades de codificación, fortalecer DS y algoritmos y aumentar las habilidades para resolver problemas. Repito, esta NO es la única manera. Hay cosas que no pude seguir debido a limitaciones de tiempo o no las seguí porque simplemente no estaba al tanto. Comente si me perdí algo que valga la pena mencionar aquí.
Idioma
El idioma ha sido un tema de debate entre los aspirantes desde hace años. Siempre es bueno dominar un idioma, saber por dentro y por fuera en lugar de saltar de un idioma a otro. ¿Por qué? Porque a veces te puede pasar que cuando tienes un problema, empiezas a preguntarte qué idioma deberías elegir y tu enfoque se ve comprometido. Cuando realmente debería concentrarse en la resolución de problemas, la implementación viene después. Luego, mientras codifica, planea cambiar el idioma en el medio. Esto no te servirá bien en las entrevistas. Si puede resolver un problema en el idioma ‘X’, eventualmente también lo resolverá en el idioma ‘Y’. Aprender un nuevo idioma es solo cuestión de tiempo. Es posible que un idioma no se use tan ampliamente después de 5 años como se usa ahora. Su capacidad para resolver un problema será lo que importa a largo plazo.
Normalmente cambio entre C y C++. Si el tiempo apremia, prefiero usar STL (funciones de biblioteca estándar) en lugar de escribir mi propia versión de Linked List. Si quiero desarrollar un proyecto, una aplicación de Android, por ejemplo, elijo un lenguaje administrado porque es más fácil. Si quiero automatizar algo para ahorrar tiempo, como responder y dar me gusta a mis deseos de cumpleaños, un script de Python es la gracia salvadora. Tienes el punto, ¿verdad? Domina un idioma y aprende otros según los requisitos.
Estructuras de datos y algoritmos
Las estructuras de datos y los algoritmos son muy importantes y sirven como columna vertebral para la resolución de problemas.
Para principiantes, Fundamentals of Data Structures in C de Sahni Horowitz es bueno. Después de leerlo, debería poder comprender las estructuras de datos básicas, cómo se implementan y menos ejemplos en los que se pueden usar. No espere aprender DS avanzado a través de esto. Una vez que sus conceptos básicos estén claros y se sienta cómodo implementándolos en un idioma de su elección, puede trabajar en el aprendizaje de algoritmos y la resolución de problemas.
Muchos sitios (incluido GeeksforGeeks) presentan problemas de una manera muy ad hoc sin orden de nivel de dificultad. Esto dificulta las cosas para los principiantes porque no conocen el nivel de dificultad del problema que están tratando. Estructuras de datos y algoritmos facilitados por Narasimha Karumanchi es una buena lectura después de que se sienta cómodo con los conceptos básicos. Tiene una colección bastante buena de problemas organizados por nivel de dificultad. Solo asegúrese de tratar de resolver los problemas por su cuenta en lugar de apresurarse a encontrar la solución. Una vez que tenga una comprensión justa de DS y tenga cierta confianza para resolver problemas, salte a los portales en línea y comience a resolver problemas del tema que elija. GeeksforGeeks es bueno para empezar.
Para algoritmos, Introducción a los algoritmos de Cormen es una lectura obligada.
Estructuras de datos avanzadas
A veces, el DS básico no sirve para resolver problemas y necesita saber DS avanzado. Los problemas cotidianos, como implementar una búsqueda basada en prefijos para una lista de contactos telefónicos o encontrar la palabra del diccionario a partir de una secuencia desordenada de caracteres, necesitan un tipo especial de DS. Hay muchos de ellos: TST, Trie, Suffix tree, Suffix array, Fibonacci heap, Segment tree, Gap buffer, Rope, Skip list, K Dimensional tree, etc. Si bien es bueno conocer la implementación de estos DS, también sugeriría saber cuándo usar uno.
resolución de problemas
Así que tienes un arma, entiendes cómo usarla, probablemente la hayas usado antes. Si vas a luchar en una guerra, no te gustará confiar en tu experiencia de aficionado. Preferirías practicar duro para salvar tu trasero. Ahora trata de pensarlo desde la perspectiva de la resolución de problemas. Ya sabes lo que son los DS. Pero también necesita saber cuándo usar uno. Bienvenido al mundo de la resolución de problemas. Se le plantea un problema y se le pide que lo resuelva. Ese problema puede ser cualquier cosa, desde un simple rompecabezas hasta la implementación de un escenario de usuario. Debes haber notado el grado de función de conexión en LinkedIn. ¿Cómo lo implementarás? ¿Su enfoque se ocupa de la escalabilidad? ¿Se derrumbará su código cuando la base de usuarios se multiplique por diez? Esta es la habilidad más importante que suelen buscar las principales empresas multinacionales. ¿Cómo abordas un problema? ¿Cómo se divide en módulos? ¿Cómo resuelves cada uno de ellos y luego los combinas?
Programación dinámica
Separé DP porque es un monstruo que es difícil de dominar. No importa cuántos problemas haya resuelto en el pasado, un nuevo problema de DP siempre puede sorprenderlo. Cuanto más practiques, mayores serán las posibilidades de encontrar patrones. Google es peculiar acerca de DP. Debería esperar al menos un problema de DP por ronda de entrevista si se está preparando para Google. Practica la sección de DP de:
Programación Competitiva
La programación competitiva juega un papel muy importante en el impulso de las habilidades de resolución de problemas y la capacidad de desempeñarse bajo presión de tiempo. Participe en varios portales en línea como TopCoder, CodeChef, SPOJ. Aquí hay una publicación sobre Cómo comenzar en el deporte de la programación .
Diseño y pruebas
Así que eres bueno en DS y Algos. Probablemente también seas bueno en la resolución de problemas y propongas diferentes enfoques con diferentes complejidades de tiempo y espacio. El problema que resuelves en Programación Competitiva está bien definido y tiene que funcionar en un entorno que probablemente nadie usará. ¿Qué pasa si se le pide que implemente un escenario de usuario? La declaración del problema suele ser vaga y es necesario discutir mucho para resolver las ambigüedades. Aquí es donde el diseño entra en escena. ¿Cómo diseñará una característica de rehacer-deshacer? ¿Qué estructuras de datos utilizará para almacenar el historial en un navegador web? ¿Cómo implementará la función de autocompletar en la barra de direcciones? Digamos que Amazon quiere crear una función que reanude un video almacenado en la nube desde cualquier dispositivo. ¿Qué estructuras de datos utilizará? ¿Cómo vas a escalar las cosas? ¿Su diseño se ocupa de los problemas de concurrencia? ¿Qué pasa con el rendimiento? ¿Qué sucede si usted y su novia comparten la misma cuenta en la nube y están tratando de reproducir el mismo video desde diferentes dispositivos?
Ahora que ha pensado bien en el diseño, ha ideado diferentes estructuras de datos para usar teniendo en cuenta los pros y los contras. Mientras implementa, debe cuidar los casos de esquina. Debe tener en cuenta el problema del desbordamiento de enteros en el recuento de vistas de videos de Youtube. Durante la implementación, nunca pensaron realmente que el recuento de vistas puede exceder lo que puede contener una variable entera y BOOM, el recuento de vistas volvió a cero.
Antes de que una función se active, debe probarse bien. También es bueno practicar algunas preguntas de prueba. ¿Cómo probará la función Insertar imagen en MS Word? ¿Qué pasa con una función de cortar, copiar y pegar? ¿Cómo probarás el juego Temple Run? Intente escribir todos los casos de prueba posibles y cómo va a manejar esto en su código. Escribir un código robusto es muy importante. Si se ocupa de estas cosas en una etapa anterior, puede evitar errores tontos (y aumentar sus posibilidades de ser seleccionado en las entrevistas).
¿Qué otra cosa?
Tener una sólida comprensión del sistema operativo. El libro de dinosaurios de Galvin es una buena lectura. Sepa cómo funciona la red y tenga conocimientos sobre DBMS.
reanudar la construcción
La primera impresión es la mejor. El currículum es lo primero que utilizará RR.HH. para decidir si llamarlo para una entrevista o no. Y tienen cientos de ellos. Por lo general, lo escanearán durante 20 segundos a 2 minutos. Debe ser limpio, conciso y elegante. Cada palabra mencionada debe valer el espacio que ocupa. La regla general es que si tiene menos de un año de experiencia, el tamaño del currículum no debe exceder una página (con algunas excepciones).
Algunos puntos a tener en cuenta:
- Mantenga un encabezado para que se ajuste a información como nombre, identificación de correo electrónico, dirección y número de contacto
- Mencione el nivel de experiencia correspondiente a cada idioma. Ejemplo: Competente en C y bueno en Java
- Si está mencionando un proyecto, escriba su aprendizaje clave, impacto en el equipo y . Si este proyecto está en línea (una aplicación), no olvide incluir el enlace. Esto mostrará que construiste algo que está siendo utilizado por personas. Adivina qué, esto es lo que hacen las empresas, crear un producto, estabilizarlo según los comentarios de los usuarios, aceptar nuevas requests de funciones, etc.
Aquí hay algunos consejos útiles de Gayle: ¿Cuáles son los errores comunes que cometen los solicitantes al escribir sus currículums para empresas de tecnología?
¿Cómo solicitar Microsoft?
Recibo muchos mensajes pidiéndome un favor para referirlos. Cuando les pregunto qué tan cómodos se sienten con DS y Algos, dicen que es suficiente. Luego reformulo mi pregunta sobre cómo se sienten cuando resuelven experiencias de entrevistas en GeeksforGeeks. O no han oído hablar de GeeksforGeeks o nunca han leído. Esto no es una sorpresa. GeeksforGeeks sigue creciendo. Pero cuando les pregunto un problema en DS ajustando los famosos ya existentes, todo lo que dicen es que no han resuelto este problema antes. Por favor, no hagas eso. Soñar es bueno, pero solo se hará realidad cuando trabajes para hacerlo realidad.
Si no puede aprobar las entrevistas, tendrá que esperar nuevamente entre 6 y 12 meses, según la política de la empresa, antes de poder volver a presentar la solicitud. Ahora, llegando al punto, puede solicitar un puesto en Microsoft a través de la página de Carreras o mediante una referencia. La referencia generalmente aumenta las posibilidades de obtener una llamada de entrevista porque su currículum llega al sistema a través de una persona en la que Microsoft confía para ser un buen ingeniero. ¿Cómo se pide una referencia? Es simple. Reenvía tu currículum a alguien que conozcas trabajando allí. Nadie dirá NO a menos que su currículum esté lleno de algo que no se ajuste a los requisitos de la empresa. La regla general es que creemos en la resolución de problemas y, si eres bueno en eso, nos encantaría verte aquí. Recuerde, todo el mundo quiere trabajar con una persona inteligente. Y esto suele ser cierto para cualquier empresa, no solo para Microsoft.
Normas
- Practica, practica y practica
- Acostúmbrese a escribir código limpio y legible (evite nombres de variables como i, j)
- Asegúrese de manejar todos los casos de esquina
- Usa lápiz y papel para practicar el código. En las entrevistas NO tienes acceso a un compilador
- No asalte las soluciones. Trate de resolver por su cuenta
- Piense en diferentes formas de resolver un problema y pensamientos sobre por qué se debe preferir una sobre la otra.
Recursos
He respondido algunas preguntas relacionadas con la preparación de entrevistas en Quora. Es posible que encuentre algún contenido que falta aquí en el blog y es intencional para evitar la duplicación de esfuerzos. Por favor, lea mis respuestas técnicas aquí .
Recursos (de los que no he hablado):
- Descifrando la entrevista de codificación por Gayle Laakmann: una lectura obligada antes de las entrevistas. Cubre aspectos como lo que los entrevistadores esperan de usted, cómo lidiar con preguntas de comportamiento y algunos problemas interesantes. Cambiará sus pensamientos sobre el diseño y los problemas de prueba para siempre.
- GeeksforGeeks : Una biblia de problemas (con soluciones bien explicadas). Asegúrese de NO apresurarse a buscar soluciones. Intenta resolver los problemas por tu cuenta sin importar cuánto tiempo te tome. Con el tiempo y la práctica honesta, deberías mejorar.
- CareerCup : Una enorme colección de problemas. Aunque no puede confiar en las soluciones, proporciona una rica comunidad para discutir problemas. Me pareció bueno para discutir problemas de diseño.
- Proyecto Euler : Un paraíso para los amantes de las matemáticas. Resuelve los problemas usando algunas fórmulas en papel y luego escribe código para obtener la solución final. Resuelva al menos 40 problemas de este sitio.
Este artículo es una contribución de Aashish Barnwal . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA