Pila de tecnología Java
www.javastack.cn
Siga para leer más artículos de calidad
Autor: javinpaul
Original: https://hackernoon.com/50-data-structure-and-algorithms-interview-questions-for-programmers-b4b1ac61f5b0
Este artículo se reimprime con la autorización del corazón de la máquina (cuenta pública de WeChat: almosthuman2014) y se prohíbe la reimpresión secundaria.
Muchos graduados y programadores en ciencias de la computación van a Uber, empresas unicornio como Toutiao o gigantes tecnológicos como Amazon, Microsoft y Google para postularse para puestos de programación y desarrollo de software. Cuando solicite estos trabajos, debe preguntarse qué preguntas hará el entrevistador.
En este artículo, el autor compartirá algunas preguntas comunes de entrevistas de programación, estas preguntas provienen de la entrevista para programadores de diferentes niveles de experiencia, desde recién graduados hasta programadores con uno o dos años de experiencia.
Las preguntas de la entrevista de programación suelen contener preguntas basadas en algoritmos y estructura de datos, así como algunas preguntas lógicas, como: ¿Cómo intercambiar dos números enteros sin utilizar variables temporales?
Para mayor claridad, las preguntas de la entrevista de programación deben dividirse en diferentes temas. Las áreas que vemos a menudo en las entrevistas son matrices, listas enlazadas, cadenas, árboles binarios y problemas relacionados con algoritmos (como algoritmos de cadenas, ordenación rápida o ordenación por base y otros algoritmos de ordenación). Este artículo los presentará.
Aunque este artículo no puede cubrir todas las preguntas que enfrentará en la entrevista, puede proporcionarle suficientes ideas para prepararse para varios desafíos durante la entrevista.
Una vez resueltos estos problemas, podrá afrontar cualquier entrevista telefónica o in situ con confianza.
Por supuesto, si no tiene suficiente conocimiento de las estructuras y algoritmos de datos básicos, el contacto directo con las siguientes preguntas no lo ayudará.
Preguntas de entrevistas de programación y algoritmos TOP 48
Sin más preámbulos, aquí hay una "lista de las preguntas más comunes en las entrevistas de programación":
1. Preguntas de la entrevista sobre programación de matrices
Array es la estructura de datos más básica, almacena elementos en un espacio de memoria continuo. Las matrices son también uno de los temas favoritos de los entrevistadores. Puede escuchar muchas preguntas sobre matrices en cualquier entrevista de programación, como invertir matrices, ordenar matrices o buscar elementos de matriz.
La principal ventaja de la estructura de datos de la matriz es que si se proporciona un índice, proporcionará una búsqueda de complejidad O (1), que es muy rápida. Pero agregar o eliminar elementos de la matriz es lento, porque una vez que se crea la matriz, es difícil cambiar su tamaño. Si necesitamos una matriz más larga o más corta, necesitamos recrear la nueva matriz y copiar todos los elementos de la matriz anterior a la nueva matriz.
La clave para resolver el problema de la matriz es tener una comprensión más profunda de la estructura de datos de la matriz. Al mismo tiempo, también es necesario comprender las estructuras de programación comunes, como bucles, recursividad y operadores básicos. A continuación, se muestran algunas preguntas comunes de entrevistas sobre programación de matrices:
1. ¿Cómo buscar elementos faltantes en una matriz de enteros con elementos del 1 al 100?
Solución: http://javarevisited.blogspot.com/2014/11/how-to-find-missing-number-on-integer-array-java.html
2. Dada una matriz, ¿cómo buscar elementos duplicados?
Solución: http://javarevisited.blogspot.com/2014/01/how-to-remove-duplicates-from-array-java-without-collection-API.html
3. Dada una matriz desordenada, ¿cómo buscar los elementos más grandes y más pequeños?
Solución: http://java67.blogspot.com/2014/02/how-to-find-largest-and-smallest-number-array-in-java.html
4. Dado un valor, ¿cómo buscar los elementos emparejados en una matriz de enteros cuya suma es el valor?
Solución: http://javarevisited.blogspot.com/2014/08/how-to-find-all-pairs-in-array-of-integers-whose-sum-equal-given-number-java.html
5. Si la matriz contiene varios valores duplicados, ¿cómo buscar todos los valores duplicados?
Solución: http://javarevisited.blogspot.com/2014/03/3-ways-to-find-first-non-repeated-character-String-programming-problem.html
6. Dada una matriz, ¿cómo eliminar elementos duplicados en Java? ¿Cómo eliminar elementos duplicados en una matriz sin usar la biblioteca?
Solución: http://javarevisited.blogspot.com/2014/01/how-to-remove-duplicates-from-array-java-without-collection-API.html
7. ¿Cómo ordenar una matriz de números enteros usando el algoritmo de ordenación rápida?
Solución: http://javarevisited.blogspot.com/2014/08/quicksort-sorting-algorithm-in-java-in-place-example.html
8. ¿Cómo invertir una matriz usando Java?
Solución: http://javarevisited.blogspot.com/2013/03/how-to-reverse-array-in-java-int-String-array-example.html
Estos problemas no solo nos ayudan a mejorar nuestra capacidad para resolver problemas, sino que también mejoran nuestra comprensión de las estructuras de datos de matrices.
Si necesita obtener más información sobre problemas en profundidad basados en matrices, puede encontrar más cursos y materiales sobre estructuras de datos en GitHub o Coursera. Por ejemplo, hay muchos materiales de aprendizaje sobre matrices en GitHub. A continuación, presentamos uno Una versión china de los materiales de entrevistas de Google, tiene más de 60.000 colecciones en GitHub.
Dirección del proyecto: https://github.com/jwasham/coding-interview-university/blob/master/translations/README-cn.md
2. Preguntas de la entrevista de programación de listas vinculadas
Las listas enlazadas son otra estructura de datos común que complementa la estructura de datos de la matriz. Similar a una matriz, también es una estructura de datos lineal, que almacena elementos de manera lineal.
Sin embargo, a diferencia de una matriz, no almacena elementos en ubicaciones consecutivas, sino que los almacena dispersos en la memoria y conectados entre sí a través de nodos. La lista vinculada es una lista de nodos, donde cada nodo contiene el valor almacenado y la dirección del siguiente nodo.
Debido a esta estructura, agregar o eliminar elementos en la lista vinculada se vuelve muy simple, porque solo necesita cambiar el enlace en lugar de crear una matriz, pero esto dificultará la búsqueda y, a menudo, requiere una complejidad de tiempo O (n). Un elemento se encuentra en una única lista vinculada.
Este artículo (https://javarevisited.blogspot.com/2013/07/difference-between-array-and-linked-list-java.html) proporciona más información sobre las diferencias entre matrices y estructuras de datos de listas vinculadas.
También hay muchas variantes de listas enlazadas, como las listas enlazadas individualmente, que le permiten atravesar en una dirección (adelante o atrás); las listas enlazadas dobles le permiten atravesar en dos direcciones (adelante o atrás); la última son listas enlazadas circulares, Forma un bucle.
Para resolver problemas sobre listas vinculadas, es importante dominar el conocimiento recursivo, porque las listas vinculadas son estructuras de datos recursivas.
Si toma un nodo de la lista vinculada, la estructura de datos restante sigue siendo una lista vinculada, por lo que la solución recursiva de muchos problemas de lista vinculada es más simple que las soluciones iterativas.
A continuación, se muestran algunos problemas y soluciones comunes acerca de las listas vinculadas:
9. ¿Cómo encontrar el elemento intermedio de la lista enlazada individualmente en una sola pasada?
Solución: http://javarevisited.blogspot.sg/2012/12/how-to-find-middle-element-of-linked-list-one-pass.html
10. ¿Cómo comprobar si una determinada lista enlazada contiene ciclos? ¿Cómo encontrar el nodo inicial del bucle?
Solución: http://javarevisited.blogspot.sg/2013/05/find-if-linked-list-contains-loops-cycle-cyclic-circular-check.html
11. ¿Cómo revertir una lista enlazada?
Solución: http://www.java67.com/2016/07/how-to-reverse-singly-linked-list-in-java-example.html
12. ¿Cómo revertir una lista enlazada individualmente sin recursividad?
Solución: http://javarevisited.blogspot.sg/2017/03/how-to-reverse-linked-list-in-java-using-iteration-and-recursion.html
13. ¿Cómo eliminar nodos duplicados en la lista enlazada desordenada?
Solución: https://www.geeksforgeeks.org/remove-duplicates-from-an-unsorted-linked-list/
14. ¿Cómo medir la longitud de una lista enlazada individualmente?
Solución: http://javarevisited.blogspot.sg/2016/05/how-do-you-find-length-of-singly-linked.html
15. ¿Cómo encontrar el tercer nodo del final de la lista enlazada individualmente?
Solución: http://javarevisited.blogspot.sg/2016/07/how-to-find-3rd-element-from-end-in-linked-list-java.html
16. ¿Cómo usar la pila para calcular la suma de dos listas enlazadas?
Solución: https://www.geeksforgeeks.org/sum-of-two-linked-lists/
Estas preguntas le ayudarán a desarrollar habilidades para resolver problemas y mejorar su comprensión de las estructuras de datos de listas vinculadas. Hay muchos recursos disponibles para ayudarnos a comprender las listas vinculadas. Por ejemplo, en una práctica de codificación interactiva en GitHub, utiliza Jupyter Notebook para proporcionar varios ejercicios sobre estructuras de datos y algoritmos, incluidos muchos problemas y prácticas de listas vinculadas.
Dirección del proyecto: https://github.com/donnemartin/interactive-coding-challenges
3. Preguntas de la entrevista de codificación de cadenas
Además de las matrices y las estructuras de datos de listas vinculadas, las cadenas son otro tema candente en la programación de entrevistas de trabajo. La mayoría de las entrevistas de codificación en las que participé han hecho preguntas sobre cadenas. 5 preguntas complicadas de la entrevista de String , te recomiendo que las leas.
Si comprende las matrices, puede resolver fácilmente problemas basados en cadenas, porque una cadena es una matriz de caracteres. Por lo tanto, todas las habilidades que aprenda al resolver problemas de programación de matrices también se pueden utilizar para resolver problemas de programación de cadenas.
La siguiente es una lista de preguntas de programación de cadenas que se hacen con frecuencia en entrevistas de trabajo de programación:
17. ¿Cómo imprimir caracteres repetidos en una cadena?
Solución: http://java67.blogspot.sg/2014/03/how-to-find-duplicate-characters-in-String-Java-program.html
18. ¿Cómo comprobar si dos cadenas están en orden inverso?
Solución: http://javarevisited.blogspot.sg/2013/03/Anagram-how-to-check-if-two-string-are-anagrams-example-tutorial.html
19. ¿Cómo imprimir el primer carácter no repetido de una cadena?
Solución: http://javarevisited.blogspot.sg/2014/03/3-ways-to-find-first-non-repeated-character-String-programming-problem.html
20. ¿Cómo revertir una cadena dada usando recursividad?
Solución: http://javarevisited.blogspot.sg/2012/01/how-to-reverse-string-in-java-using.html
21. ¿Cómo comprobar si una cadena contiene solo números?
Solución: http://javarevisited.blogspot.sg/2012/10/regular-expression-example-in-java-to-check-String-number.html
22. ¿Cómo buscar caracteres repetidos en una cadena?
Solución: http://java67.blogspot.sg/2014/03/how-to-find-duplicate-characters-in-String-Java-program.html
23. Dada una cadena, ¿cómo contar el número de vocales y consonantes?
Solución: http://java67.blogspot.sg/2013/11/how-to-count-vowels-and-consonants-in-Java-String-word.html
24. Dado un carácter, ¿como contar el número de veces que aparece en una cadena?
Solución: http://javarevisited.blogspot.sg/2012/12/how-to-count-occurrence-of-character-in-String.html
25. ¿Cómo buscar todas las permutaciones de una cadena?
Solución: http://javarevisited.blogspot.com/2015/08/how-to-find-all-permutations-of-string-java-example.html
26. ¿Cómo invertir las palabras en una oración dada sin usar ninguna biblioteca?
Solución: http://java67.blogspot.com/2015/06/how-to-reverse-words-in-string-java.html
27. ¿Cómo comprobar si dos cadenas son rotaciones?
Solución: http://www.java67.com/2017/07/string-rotation-in-java-write-program.html
28. Dada una cuerda, ¿cómo comprobar si es un palíndromo?
Solución: http://java67.blogspot.com/2015/06/how-to-check-is-string-is-palindrome-in.html
Estas preguntas pueden mejorar su comprensión de las estructuras de datos de cadenas. Si puede resolver todos estos problemas de cuerdas de forma independiente, está en buena forma.
Si desea obtener más información sobre problemas más complejos, le recomiendo que lea el "Manual de diseño de algoritmos" de Steven Skiena, este libro contiene los problemas de algoritmos más difíciles.
La versión PDF del libro también está disponible en línea, dirección de descarga: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.471.4772&rep=rep1&type=pdf
Si necesita más práctica, aquí hay otras 20 preguntas sobre la programación de cadenas:
http://javarevisited.blogspot.sg/2015/01/top-20-string-coding-interview-question-programming-interview.html
4. Preguntas de la entrevista sobre programación de árbol binario
Ahora solo entendemos el problema de la estructura de datos lineal, pero toda la información del mundo real no puede ser totalmente lineal, lo que requiere una estructura de datos de árbol.
La estructura de datos de árbol permite que los datos se almacenen de forma jerárquica. Según la forma de almacenar los datos, existen muchos tipos de árboles, como los árboles binarios.
Al igual que su pariente cercano, el árbol de búsqueda binario, también es una de las estructuras de datos de árbol más populares. Por lo tanto, verá muchas preguntas relacionadas e interesantes. Por ejemplo, cómo atravesar el árbol, contar el número de nodos, averiguar la profundidad y verificar el equilibrio.
La clave para resolver el problema del árbol binario radica en un conocimiento teórico profundo, como el tamaño o la profundidad del árbol binario, qué es un nodo hoja, qué es un nodo y comprender los algoritmos transversales populares.
Las siguientes son las preguntas de programación relacionadas con árboles binarios comunes en las entrevistas de trabajo de ingeniero de software o desarrollo:
29. ¿Cómo implementar un árbol de búsqueda binario?
Solución: http://javarevisited.blogspot.sg/2015/10/how-to-implement-binary-search-tree-in-java-example.html#axzz4wnEtnNB3
30. ¿Cómo realizar un recorrido de preorden en un árbol binario dado?
Solución: http://javarevisited.blogspot.sg/2016/07/binary-tree-preorder-traversal-in-java-using-recursion-iteration-example.html#axzz5ArdIFI7y
31. ¿Cómo realizar un recorrido de preorden en un árbol binario dado sin recursividad?
Solución: http://www.java67.com/2016/07/binary-tree-preorder-traversal-in-java-without-recursion.html
32. ¿Cómo realizar un recorrido en orden de un árbol binario dado?
Solución: http://www.java67.com/2016/08/binary-tree-inorder-traversal-in-java.html
33. ¿Cómo imprimir todos los nodos realizando un recorrido en orden en un árbol binario dado sin recursividad?
Solución: http://www.java67.com/2016/08/binary-tree-inorder-traversal-in-java.html
34. ¿Cómo implementar el algoritmo de recorrido posterior al pedido?
Solución: http://www.java67.com/2016/10/binary-tree-post-order-traversal-in.html
35. ¿Cómo realizar un recorrido posterior al pedido en un árbol binario determinado sin recursividad?
Solución: http://www.java67.com/2017/05/binary-tree-post-order-traversal-in-java-without-recursion.html
36. ¿Cómo imprimir todos los nodos hoja de un árbol de búsqueda binario?
Solución: http://www.java67.com/2016/09/how-to-print-all-leaf-nodes-of-binary-tree-in-java.html
37. ¿Cómo calcular el número de nodos hoja en un árbol binario dado?
Solución: http://javarevisited.blogspot.sg/2016/12/how-to-count-number-of-leaf-nodes-in-java-recursive-iterative-algorithm.html
38. ¿Cómo realizar una búsqueda binaria en una matriz dada?
Solución: http://javarevisited.blogspot.sg/2015/10/how-to-implement-binary-search-tree-in-java-example.html#axzz4wnEtnNB3
Si cree que tiene un conocimiento insuficiente de la programación de árboles binarios para resolver estos problemas, le sugiero que primero domine el conocimiento de la estructura de datos y los algoritmos, por ejemplo, puede tomar este curso "De 0 a 1: Estructuras de datos y algoritmos en Java". Del mismo modo, también puede consultar un conjunto completo de manuales para prepararse para las entrevistas de Google. Este conjunto de manuales de GitHub se ha presentado antes, pero en realidad tiene muchos casos y tutoriales sobre estructuras de datos como árboles binarios.
Dirección del proyecto: https://github.com/jwasham/coding-interview-university
Si necesita más recomendaciones, puede consultar:
http://javarevisited.blogspot.sg/2015/07/5-data-structure-and-algorithm-books-best-must-read.html
http://javarevisited.blogspot.sg/2018/01/top-5-free-data-structure-and-algorithm-courses-java—c-programmers.html
5. Otras preguntas de la entrevista de programación
Además de las preguntas sobre la estructura de datos, la mayoría de las entrevistas de trabajo de programación también harán preguntas sobre algoritmos, diseño, operaciones de bits y lógica general. Prestar atención a la pila de tecnología Java de la cuenta pública de WeChat también puede obtener los tutoriales sobre el algoritmo N y la estructura de datos que he compilado, todos los cuales son productos secos.
Los ejercicios específicos son importantes porque a veces pueden ser un poco difíciles de entender en entrevistas reales. Practicar de antemano no solo lo familiarizará con estas preguntas, sino que también lo hará más seguro al explicar las respuestas al entrevistador.
39. ¿Cómo realizar el algoritmo de clasificación de burbujas (algoritmo de clasificación de burbujas)?
Solución: http://javarevisited.blogspot.sg/2014/08/bubble-sort-algorithm-in-java-with.html#axzz5ArdIFI7y
40. ¿Cómo implementar el algoritmo iterativo de clasificación rápida?
Solución: http://javarevisited.blogspot.sg/2016/09/iterative-quicksort-example-in-java-without-recursion.html#axzz5ArdIFI7y
41. ¿Cómo implementar el algoritmo de ordenación por inserción (algoritmo de ordenación por inserción)?
Solución: http://www.java67.com/2014/09/insertion-sort-in-java-with-example.html
42. ¿Cómo implementar el algoritmo de clasificación por fusión (algoritmo de clasificación por fusión)?
Solución: http://www.java67.com/2018/03/mergesort-in-java-algorithm-example-and.html
43. ¿Cómo implementar el algoritmo de clasificación de cubos (algoritmo de clasificación de cubos)?
Solución: http://javarevisited.blogspot.sg/2017/01/bucket-sort-in-java-with-example.html
44. ¿Cómo implementar el algoritmo de clasificación de conteo (algoritmo de clasificación de conteo)?
Solución: http://www.java67.com/2017/06/counting-sort-in-java-example.html
45. ¿Cómo implementar el algoritmo de ordenación por radix?
Solución: http://www.java67.com/2018/03/how-to-implement-radix-sort-in-java.html
46. ¿Cómo intercambiar dos números sin usar la tercera variable?
Solución: http://www.java67.com/2015/08/how-to-swap-two-integers-without-using.html
47. ¿Cómo confirmar si dos rectángulos se superponen?
Solución: http://javarevisited.blogspot.sg/2016/10/how-to-check-if-two-rectangle-overlap-in-java-algorithm.html
48. ¿Cómo diseñar una máquina expendedora?
Solución: http://javarevisited.blogspot.sg/2016/06/design-vending-machine-in-java.html
Si desea ver más preguntas de programación de este tipo, puede leer este libro "Cómo descifrar la entrevista de codificación: 189 preguntas y soluciones de programación", que es adecuado para prepararse para una entrevista de trabajo de programación en poco tiempo.
Enlace de descarga: http://lib1.org/_ads/fcb49f53d5e943ce8acdc4469f63dc5d
Cuantas más preguntas practique, más preparado estará. Por lo tanto, si cree que 48 preguntas no son suficientes, puede verificar:
https://javarevisited.blogspot.com/2015/02/50-programmer-phone-interview-questions-answers.html
http://javarevisited.blogspot.sg/2016/06/top-5-books-for-programming-coding-interviews-best.html
http://javarevisited.blogspot.sg/2018/02/10-courses-to-prepare-for-programming-job-interviews.html
Ahora estás listo para la entrevista.
Esta parte presentará algunos problemas comunes además de las estructuras de datos y los algoritmos, que pueden ayudarlo a lograr un mejor desempeño en la entrevista.
Hay muchas preguntas de este tipo en mi blog, consulte: http://www.java67.com/
Estos problemas comunes de programación, estructura de datos y algoritmos son los que debe conocer cuando acude a cualquier empresa para una entrevista, ya sea una empresa grande o una empresa pequeña, independientemente del puesto de la entrevista.
Si está buscando trabajo de programación o desarrollo de software, puede usar estas preguntas de programación para comenzar. Esta lista proporciona algunos buenos temas para la preparación de entrevistas que pueden ayudarlo a evaluar si la preparación de su entrevista es adecuada.
La competencia en la estructura de datos y el conocimiento de algoritmos es la clave para una entrevista de trabajo de programación exitosa, debe prestar más atención a estos problemas.
Preste atención a la pila de tecnología Java para ver más productos secos
¡Haga clic en el texto original para obtener más beneficios!