Programadores: ¿Cuál es su trabajo particular y qué estructuras de datos y / o algoritmos utiliza más para ello?

Trabajo en Microsoft en un equipo que trabaja con texto, principalmente PNL, mis tareas incluyen conjuntos de datos de texto de minería que son una mezcla entre NLP y minería de datos.

Aquí hay una lista de las cosas más importantes que siempre uso:

  1. Diccionario y hashset, es decir, tablas hash en todas sus formas. La estructura de datos más importante conocida.
  2. Patrón de diseño de iterador, en mi opinión, este es uno de los patrones de diseño más importantes, ya que presenta una solución muy fácil para problemas de memoria. Si tiene que leer y procesar archivos 1M desde el disco y no puede leerlos todos en la memoria, debe iterar sobre ellos uno por uno manteniendo solo 1 elemento en la memoria, entonces puede introducir el paralelismo en sus Algoritmos fácilmente.
  3. Expresiones regulares (expresiones regulares), sea cual sea su trabajo, las necesitará, pero el problema con las expresiones regulares es que si no las conoce, no sabrá que las necesita, ya que siempre puede encontrar una solución. Un día estaba trabajando en sistemas automotrices y solía confiar en ellos para buscar cualquier cosa en la base del código.
  4. Algoritmos de muestreo (esto puede ser muy específico para mi trabajo), especialmente generando un conjunto aleatorio a partir de una secuencia. Supongamos que queremos seleccionar 10 archivos al azar de los archivos 1M.

Creo que estas son las cosas más importantes que uso a diario.

Trabajo en MuleSoft como ingeniero: he entregado software en nuestras herramientas de edición RAML de código abierto. Diseñé partes de la pila de datos para nuestras soluciones de administración de API. Actualmente estoy trabajando en nuestra plataforma de análisis, que involucra servicios de ingestión, transformación, persistencia, agregación, análisis y análisis de datos de muy alto volumen.

Como todos los demás, utilizamos muchísimo las transmisiones, las listas y los mapas. Los gráficos acíclicos dirigidos aparecen todo el tiempo, por supuesto, al igual que las estructuras de gráficos más estándar. Tenemos una infraestructura de almacenamiento en caché personalizada que hace un uso inteligente de las listas doblemente vinculadas y analizadores de lenguaje que utilizan árboles de sintaxis abstracta, así como analizadores en tiempo real que hacen un uso intensivo de la evaluación y el almacenamiento en caché.

Hacemos uso de la distribución de números aleatorios y la generación de identificación única a nivel mundial para garantizar la idempotencia y suavizar la carga en sistemas distribuidos. Una gran cantidad de álgebra y matemáticas básicas entran en juego cuando se escribe a mano la agregación de datos de alta velocidad y el código de agrupación.

Okay. Dicho todo esto, si quieres algo divertido, desafiante e interesante para estudiar, te sugiero que te sumerjas en Spark , que te ayudará a comprender el tipo de cosas con las que las compañías como la mía tratan diariamente. Especialmente la transmisión de chispas y el aprendizaje automático además de la chispa.

HTH