Análisis de la asistencia a clubes de fitness Trabajas como analista en una cadena de clubes de fitness. Tienes información sobre las visitas de los usuarios y las membresías que compran. Es necesario analizar la efectividad del uso de las membresías. Calcula para cada tipo de membresía: • el número total de usuarios que usaron ese tipo de membresía. Considera solo usuarios únicos user_id; • el número total de visitas con esa membresía. Considera todas las visitas de los usuarios con esa membresía; • la proporción de usuarios de esa membresía en porcentaje respecto al total de usuarios (redondeado a un decimal). Para calcular la proporción, usa la relación entre el número de usuarios con esa membresía y el total de usuarios únicos. Cada usuario puede tener solo una membresía. Ordena el resultado por tipo de membresía en orden alfabético. Formato de entrada Tabla memberships: • membership_id (int) — identificador único de la membresía • user_id (int) — identificador único del usuario • membership_type (text) — tipo de membresía Tabla visits: • visit_id (int) — identificador único de la visita • user_id (int) — identificador del usuario • visit_date (timestamp) — fecha y hora de la visita Los datos no contienen valores faltantes o incorrectos. Formato de salida La consulta debe devolver una tabla con los siguientes campos en este orden: • membership_type (text) — tipo de membresía • users_count (int) — número de usuarios únicos con ese tipo de membresía • total_visits (int) — número total de visitas de usuarios con esa membresía • user_share (numeric) — proporción de usuarios en porcentaje con esa membresía respecto al total (redondeado a 1 decimal) El resultado se ordena por tipo de membresía en orden alfabético.
Data Engineer
¿Está familiarizado con la metodología Domain Driven Design (DDD)? Si es así, comparta ejemplos de su aplicación en sus proyectos.
¿Cómo eliminar un submódulo y sus archivos asociados del proyecto? git submodule remove <ruta-al-submódulo> git rm --cached <ruta-al-submódulo>; eliminar la sección de .gitmodules; git commit git clean --submodules <ruta> git submodule delete <ruta> git remove submodule <ruta>
En el proceso de trabajar con git bisect, te encontraste con un commit que no se puede verificar debido a la falta del entorno necesario. ¿Qué debes hacer en esta situación? - Repetir el comando git bisect start con otros hashes - Saltar este commit con el comando git bisect skip - Restablecer bisect con el comando git bisect reset - Marcar el commit como bueno con el comando git bisect good - Marcar el commit como malo con el comando git bisect bad
¿Qué expresión en el lugar de [...] automáticamente conducirá a la creación de un índice? En la plataforma móvil hay un desplazamiento horizontal del código create table some_table( col_name [...] ); unique references other_table(col_name) not null serial integer check (col_name > 0)
Explique cómo funciona técnicamente Git LFS y qué ventajas ofrece en comparación con Git estándar al trabajar con archivos grandes.
¿Por qué la siguiente consulta no utilizará el índice si en la tabla records (id) se ha creado un índice B-tree normal en id? select * from records where id % 2 = 0 - Para id se necesita un índice tipo GIN - Los índices no funcionan con expresiones en WHERE - % es una operación de comparación, no de filtrado - limit y offset son obligatorios para la optimización con índice - La consulta accede a un campo numérico, no a uno de texto
Informe para la empresa logística Eres un analista de una empresa logística que lleva el registro de operaciones en los almacenes. Necesitas elaborar un informe sobre la eficiencia de cada almacén. Para cada almacén, calcula: • cantidad total de operaciones (count_operations); • cantidad total de productos procesados en el almacén (sum_quantity); • tiempo medio de procesamiento de la operación (avg_processing_time), considerando solo operaciones con tiempo especificado (no NULL), redondeado al número entero más cercano; • cantidad máxima y mínima de productos procesados en una sola operación (max_quantity, min_quantity); • cantidad de operaciones de cada tipo («entrega», «envío», «traslado») en columnas separadas: supply_operations, shipment_operations, transfer_operations. Filtra los almacenes cuya cantidad total de operaciones sea mayor a 2 y el tiempo medio de procesamiento no supere los 60 minutos. Ordena el resultado por ID del almacén en orden ascendente. Formato de entrada Tabla operations: • operation_id (int) — identificador único de la operación • warehouse_id (int) — identificador del almacén • operation_type (text) — tipo de operación: «entrega», «envío», «traslado» • quantity (int) — cantidad de unidades del producto en la operación • operation_date (timestamp) — fecha y hora de la operación • processing_time (int) — tiempo de procesamiento de la operación La columna processing_time puede contener valores nulos. Formato de salida La consulta debe devolver una tabla con los campos en el siguiente orden: • warehouse_id (int) — identificador único del almacén • count_operations (int) — cantidad total de operaciones realizadas en el almacén • sum_quantity (int) — cantidad total de productos procesados en el almacén • avg_processing_time (numeric) — tiempo medio de procesamiento de la operación (en minutos), considerando solo operaciones con tiempo no nulo, redondeado al entero más cercano • max_quantity (int) — cantidad máxima de productos procesados en una sola operación • min_quantity (int) — cantidad mínima de productos procesados en una sola operación • supply_operations (int) — cantidad de operaciones de tipo «entrega» • shipment_operations (int) — cantidad de operaciones de tipo «envío» • transfer_operations (int) — cantidad de operaciones de tipo «traslado»
Se creó una secuencia especial que genera solo números pares, llamada even_sequence. ¿Qué se debe poner en lugar de [...], para que en caso de que no se indique un valor para even_column al insertar, se tome el valor de even_sequence? create table some_table( even_column [...] ); integer computed as nextval('even_sequence') integer generated always as identity (start with 2 increment by 2) integer default nextval('even_sequence') integer unique default nextval('even_sequence') integer generated by even_sequence’
¿Qué te gustaría hacer en nuestro equipo?
¿Tiene experiencia trabajando con la biblioteca Langchain? ¿Qué tareas ha resuelto con su ayuda?
¿Qué tipo de unión se debe usar para que la consulta incluya tanto a los usuarios como a sus últimos pedidos, incluso si no tienen pedidos? Tablas: users(id, name) y orders(id, user_id, created_at). CROSS JOIN RIGHT JOIN INNER JOIN FULL JOIN LEFT JOIN
¿Cómo recomienda Git Flow que se formalice una nueva versión de la aplicación? - Creando una nueva rama issue - Creando una rama hotfix desde master - Creando una rama release separada desde develop - Cometiendo directamente en la rama master - Fusionando la rama master directamente en develop
¿Cuál de las siguientes afirmaciones refleja las consecuencias de estas acciones desde la perspectiva de la metodología Git Flow extendida y la gestión del historial de cambios?
¿Estás trabajando en una nueva función en la rama dev? De repente, surge la necesidad de cambiar rápidamente a la rama main para corregir un error tipográfico en el archivo README.md. Tienes algunos cambios no confirmados: en src/feature.js (sin indexar) y styles/main.css (con indexación). Quieres guardar temporalmente todos estos cambios para volver a ellos más tarde en la rama dev. ¿Qué secuencia de comandos deberías usar para esto? git stash save "WIP on feature" && git checkout main && [fix] && git checkout dev && git stash pop git stash push -m "WIP on feature" && git checkout main && [fix] && git checkout dev && git stash pop git stash && git checkout main && [fix] && git checkout dev && git stash apply git add . && git stash && git checkout main && [fix] && git checkout dev && git stash drop git commit -m "Temp commit" && git checkout main && [fix] && git checkout dev && git reset HEAD^
Análisis de ventas por categorías de productos en una tienda minorista Trabajas como analista en una tienda minorista. Tu tarea es crear un informe de ventas por categorías de productos con los siguientes cálculos: • cantidad total de unidades vendidas en la categoría (total_units_sold); • ingresos totales por categoría, considerando descuentos, donde el descuento se calcula como unit_price × units_sold × (1 − discount/100). Si no hay descuento (NULL), se considera un 0%. Redondear a dos decimales; • promedio de unidades vendidas por venta (avg_units_per_sale), redondeado a dos decimales; • proporción de ventas sin descuento (no_discount_share) — número de ventas con NULL o 0% de descuento, dividido por el total de ventas en la categoría, redondeado a tres decimales. Primero, ordena los resultados por ingresos totales (total_revenue) en orden descendente, luego por promedio de unidades por venta (avg_units_per_sale) en orden ascendente, y finalmente por nombre de categoría en orden alfabético. Formato de entrada Tabla sales: • sale_id (int) — identificador único de la venta • product_id (int) — identificador del producto • category (text) — categoría del producto • sale_date (timestamp) — fecha y hora de la venta • units_sold (int) — unidades vendidas • unit_price (numeric) — precio por unidad • discount (numeric) — descuento en porcentaje, puede ser NULL La columna discount puede contener valores nulos. Formato de salida La consulta debe devolver una tabla con los siguientes campos en este orden: • category (text) — categoría del producto • total_units_sold (int) — cantidad total de unidades vendidas en la categoría • total_revenue (numeric) — ingresos totales en la categoría, redondeados a dos decimales • avg_units_per_sale (numeric) — promedio de unidades por venta, redondeado a dos decimales • no_discount_share (numeric) — proporción de ventas sin descuentos (valor entre 0 y 1), redondeado a tres decimales El resultado se ordena primero por total_revenue en orden descendente, luego por avg_units_per_sale en orden ascendente, y finalmente por categoría en orden alfabético.
Has descubierto que en la historia del repositorio principal de Git hay commits que contienen datos confidenciales críticos. Estos datos deben eliminarse completamente de toda la historia del repositorio. Evalúa qué tan correcto y seguro sería usar la siguiente estrategia: crear un nuevo commit que elimine los datos confidenciales de la versión actual de los archivos y enviarlo a main. - Correcto, pero no óptimo. Es mejor usar git revert para deshacer commits - Condicionalmente correcto. Es una solución temporal hasta que se encuentre un medio más radical para eliminar los datos - Incorrecto y no seguro. Los datos serán eliminados de la versión actual, pero permanecerán accesibles en la historia del repositorio - Incorrecto. Este commit puede causar nuevos conflictos al fusionar con otras ramas - Correcto y seguro. Este método garantiza que los datos serán eliminados y no volverán a aparecer en el repositorio
¿Tiene experiencia trabajando con el marco web Gin? Cuéntenos en más detalle qué tareas resolvió con su ayuda.
En PostgreSQL, es necesario optimizar el rendimiento de las transacciones mediante un nivel de aislamiento mínimo, en el cual: • las transacciones paralelas pueden ver cambios no finalizados entre sí; • son posibles las "lecturas sucias" (dirty read). ¿Qué nivel de aislamiento se debe especificar para la transacción para lograr este objetivo? la lectura sucia no es posible en PostgreSQL lectura repetible lectura no confirmada lectura confirmada serializable
Porcentaje de tráfico de bots El equipo de antifraude ha desarrollado un mecanismo para detectar tráfico de bots en el sitio de la tienda: cuando un bot ingresa al sitio, se añade la subcadena "bot" (sin distinguir mayúsculas o minúsculas) a los parámetros de su URL. Si el user_id fue identificado como bot al menos una vez en diciembre, siempre debe ser considerado como bot. Estudie el conjunto de datos con las visitas de los usuarios al sitio y calcule la proporción de bots respecto al total de usuarios en diciembre de 2024 (redondee a un decimal). Formato de entrada Tabla visits: - event_date (date) — fecha de la visita - user_id (int) — identificador único del usuario - url (string) — enlace por el que se realizó la visita Los datos no contienen valores faltantes o incorrectos. Formato de salida La consulta debe devolver una tabla con los campos: - share (float) — proporción de bots respecto al total de usuarios en diciembre, redondeada a un decimal.