Resumen de las preguntas de la entrevista de procesamiento de big data

Resumido de varios libros en línea.
Lo siguiente es de La belleza de las estructuras de datos y los algoritmos:

  1. Supongamos que tenemos 100.000 registros de acceso a URL, ¿cómo ordenar las URL según el número de visitas?
    Recorra 100,000 piezas de datos, use la URL como clave y el número de visitas como valor, guárdelo en la tabla hash y registre el número máximo de visitas K al mismo tiempo, y la complejidad del tiempo es O (N ).
    Nota: la clave es la URL y el resultado de hash (clave) es el subíndice de la ubicación de almacenamiento del valor en la matriz hash, pero puede haber conflictos, luego busque la siguiente ubicación adecuada de acuerdo con la sonda o la lista vinculada método. Después de encontrar el hash (clave) y resolver el conflicto, coloque el valor en esta posición.
    Si K no es muy grande, se puede usar la clasificación de cubetas y la complejidad de tiempo es O(N). Si K es muy grande (por ejemplo, mayor que 100 000), utilice la ordenación rápida y la complejidad es O(NlogN).
  2. Hay dos matrices de cadenas, cada matriz contiene alrededor de 100,000 cadenas, ¿cómo encontrar rápidamente las mismas cadenas en las dos matrices?
    Cree una tabla hash con la primera matriz de cadenas, la clave es una cadena y el valor es el número de ocurrencias. Luego itere a través de la segunda matriz de cadenas y use la cadena como clave para buscar en la tabla hash.Si el valor es mayor que cero, significa que existe la misma cadena. Complejidad temporal O(N).
  3. Supongamos que hay 100 000 headhunters en Liepin.com, cada headhunter puede acumular puntos realizando tareas (como publicar trabajos) y luego usar los puntos para descargar currículos. Suponiendo que es un ingeniero en Liepin, ¿cómo almacena las 100 000 identificaciones de cazatalentos y la información de puntos en la memoria para que pueda admitir las siguientes operaciones?
  1. Busque, elimine y actualice rápidamente la información de puntos del cazatalentos de acuerdo con la ID del cazatalentos;
  2. Encuentre la lista de identificaciones de cazatalentos cuyos puntos se encuentran en un cierto intervalo;
  3. Encuentre la lista de identificaciones de cazatalentos clasificadas entre xth y yth en orden ascendente de puntos.

1) => ID está en la tabla hash, por lo que el headhunter se puede encontrar en O(1);
2) => Los puntos se almacenan en una tabla de salto, que admite consultas de intervalo;
3) => TBD. ¿Es necesario usar heap, árbol de segmentos o árbol indexado por bits?

  1. ¿Cómo contar el número de apariciones de "palabras clave de búsqueda"?
    Supongamos que tenemos un archivo de registro 1T, que registra las palabras clave de búsqueda del usuario, y queremos contar rápidamente la cantidad de veces que se busca cada palabra clave, ¿qué debemos hacer?
    Vamos a analizarlo. Hay dos dificultades en este problema: la primera es que el registro de búsqueda es demasiado grande para ser almacenado en la memoria de una máquina. La segunda dificultad es que si se utiliza una sola máquina para procesar una cantidad tan grande de datos, el tiempo de procesamiento será muy largo.
    Para abordar estas dos dificultades, primero podemos fragmentar los datos y luego usar varias máquinas para procesarlos y mejorar la velocidad de procesamiento. La idea específica es esta: para mejorar la velocidad de procesamiento, usamos n máquinas para procesar en paralelo. Leemos cada palabra clave de búsqueda a su vez del archivo de registro del registro de búsqueda, y calculamos el valor hash a través de la función hash, y luego tomamos el módulo con n, y el valor final es el número de máquina que debe asignarse.
    De esta forma, las palabras clave de búsqueda con el mismo valor hash se asignan a la misma máquina. Es decir, la misma palabra clave de búsqueda se asignará a la misma máquina. Cada máquina contará el número de ocurrencias de palabras clave por separado y finalmente las combinará para obtener el resultado final.
    De hecho, el procesamiento aquí también es la idea de diseño básica de MapReduce.

5. ¿Cómo determinar rápidamente si una imagen está en la galería?
¿Cómo determinar rápidamente si una imagen está en la galería? Hablamos de este ejemplo en la última sección, ¿lo recuerdas? En ese momento, introduje un método, es decir, tomar un identificador único (o resumen de información) para cada imagen y luego crear una tabla hash.
Asumiendo que ahora tenemos 100 millones de imágenes en nuestra galería, es obvio que construir una tabla hash en una sola máquina no funcionará. Porque la memoria de una sola máquina es limitada, y la construcción de una tabla hash con 100 millones de imágenes obviamente supera con creces el límite superior de la memoria de una sola máquina.
También podemos fragmentar los datos y luego usar el procesamiento de varias máquinas. Preparamos n máquinas, de modo que cada máquina solo mantenga la tabla hash correspondiente a una determinada parte de la imagen. Cada vez que leemos una imagen de la galería, calculamos el identificador único y luego tomamos el módulo con el número de máquinas n, el valor obtenido corresponde al número de máquina que se asignará, y luego enviamos el identificador único y la ruta de la imagen del imagen a la correspondiente La máquina construye la tabla hash.
Cuando queremos juzgar si una imagen está en la galería, usamos el mismo algoritmo hash para calcular el identificador único de la imagen y luego tomamos el módulo con el número n de máquinas. Suponiendo que el valor obtenido es k, búsquelo en la tabla hash construida por la máquina numerada k.
Ahora, calculemos cuántas máquinas se necesitan para construir una tabla hash para estos 100 millones de imágenes.
Cada unidad de datos en la tabla hash contiene dos piezas de información, el valor hash y la ruta del archivo de imagen. Supongamos que calculamos el valor hash a través de MD5, la longitud es de 128 bits, que son 16 bytes. El límite superior de la longitud de la ruta del archivo es de 256 bytes y podemos asumir que la longitud promedio es de 128 bytes. Si usamos el método de lista enlazada para resolver conflictos, también necesitamos almacenar punteros, que solo ocupan 8 bytes. Por lo tanto, cada unidad de datos en la tabla hash ocupa 152 bytes (esto es solo una estimación, no precisa).
Suponiendo que el tamaño de la memoria de una máquina es de 2 GB y el factor de carga de la tabla hash es 0,75, esa máquina puede construir una tabla hash para aproximadamente 10 millones (2 GB * 0,75/152) imágenes. Entonces, si desea indexar 100 millones de imágenes, necesita alrededor de una docena de máquinas. En ingeniería, este tipo de estimación sigue siendo muy importante, ya que nos permite tener una comprensión general de los recursos y fondos que deben invertirse por adelantado y evaluar mejor la viabilidad de la solución.
De hecho, podemos usar el procesamiento distribuido de múltiples máquinas para manejar datos tan masivos. Con la ayuda de esta idea de fragmentación, puede superar las limitaciones de memoria, CPU y otros recursos de una sola máquina.

Supongo que te gusta

Origin blog.csdn.net/roufoo/article/details/131279087
Recomendado
Clasificación