{"id":1308,"date":"2026-03-21T12:46:57","date_gmt":"2026-03-21T15:46:57","guid":{"rendered":"https:\/\/maurobernal.com.ar\/blog\/?p=1308"},"modified":"2026-03-24T12:20:48","modified_gmt":"2026-03-24T15:20:48","slug":"24-preguntas-de-entrevista-para-net-microservicios-con-respuestas","status":"publish","type":"post","link":"https:\/\/maurobernal.com.ar\/blog\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\/","title":{"rendered":"24 Preguntas de Entrevista para .NET Microservicios (con respuestas)"},"content":{"rendered":"\n<p>Si est\u00e1s preparando una entrevista t\u00e9cnica para un rol de desarrollador .NET con foco en microservicios, estas 24 preguntas cubren los temas que m\u00e1s aparecen en procesos de selecci\u00f3n. Las respondo con el nivel de detalle que se espera en una entrevista senior.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Comunicaci\u00f3n entre servicios<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. \u00bfCu\u00e1l es la diferencia entre comunicaci\u00f3n sincr\u00f3nica y asincr\u00f3nica? \u00bfCu\u00e1ndo elegir\u00edas una sobre la otra?<\/h3>\n\n\n\n<p><strong>Sincr\u00f3nica:<\/strong> el servicio que llama espera la respuesta antes de continuar. El acoplamiento es temporal: si el servicio destino est\u00e1 ca\u00eddo, la operaci\u00f3n falla. Ejemplo: REST o gRPC donde el cliente hace la request y bloquea hasta recibir la respuesta.<\/p>\n\n\n\n<p><strong>Asincr\u00f3nica:<\/strong> el servicio emisor publica un mensaje y sigue su ejecuci\u00f3n sin esperar. El receptor procesa cuando puede. Ejemplo: RabbitMQ, Azure Service Bus, Kafka.<\/p>\n\n\n\n<p><strong>\u00bfCu\u00e1ndo usar cada una?<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Sincr\u00f3nica \u2192 cuando necesit\u00e1s la respuesta para continuar (consulta de stock antes de confirmar una compra), latencia baja es prioritaria, o es una operaci\u00f3n de lectura simple.<\/li><li>Asincr\u00f3nica \u2192 cuando el procesamiento puede diferirse (env\u00edo de email, generaci\u00f3n de reportes), necesit\u00e1s desacoplar servicios para mayor resiliencia, o quer\u00e9s escalar consumidores independientemente.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. \u00bfEn qu\u00e9 escenarios usar\u00edas REST vs gRPC para comunicaci\u00f3n entre servicios?<\/h3>\n\n\n\n<p><strong>REST<\/strong> es la opci\u00f3n por defecto cuando:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Los consumidores son variados (apps m\u00f3viles, browsers, terceros).<\/li><li>La interoperabilidad importa m\u00e1s que la performance.<\/li><li>Necesit\u00e1s que sea f\u00e1cil de explorar con herramientas como Swagger\/Postman.<\/li><\/ul>\n\n\n\n<p><strong>gRPC<\/strong> brilla cuando:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>La comunicaci\u00f3n es interna entre microservicios (backend-to-backend).<\/li><li>El volumen de datos es alto y el rendimiento es cr\u00edtico (Protocol Buffers son mucho m\u00e1s compactos que JSON).<\/li><li>Necesit\u00e1s streaming bidireccional.<\/li><li>Quer\u00e9s contratos fuertes y tipados (el <code>.proto<\/code> es el contrato).<\/li><\/ul>\n\n\n\n<p>En .NET 8, <code>Grpc.AspNetCore<\/code> tiene soporte de primera clase y es muy f\u00e1cil de configurar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. \u00bfQu\u00e9 librer\u00edas de mensajer\u00eda .NET has usado en proyectos de producci\u00f3n?<\/h3>\n\n\n\n<p>Las m\u00e1s comunes en el ecosistema .NET:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>MassTransit<\/strong>: abstracci\u00f3n sobre RabbitMQ, Azure Service Bus, Amazon SQS. Maneja reintentos, sagas, outbox pattern. Es el est\u00e1ndar de facto en proyectos .NET complejos.<\/li><li><strong>NServiceBus<\/strong>: m\u00e1s enterprise, con licencia comercial. Muy robusto para flujos complejos.<\/li><li><strong>Azure Service Bus SDK<\/strong>: cuando el stack es 100% Azure.<\/li><li><strong>Confluent Kafka .NET Client<\/strong>: para escenarios de event streaming de alto volumen.<\/li><li><strong>Rebus<\/strong>: alternativa liviana a MassTransit.<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Patrones de mensajer\u00eda<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">4. \u00bfQu\u00e9 es el patr\u00f3n Outbox y c\u00f3mo lo implementar\u00edas en .NET?<\/h3>\n\n\n\n<p>El <strong>Outbox pattern<\/strong> resuelve el problema de la doble escritura: \u00bfc\u00f3mo garantiz\u00e1s que guardaste en la base de datos <em>y<\/em> publicaste el evento, sin riesgo de que uno falle y el otro no?<\/p>\n\n\n\n<p><strong>La idea:<\/strong> en la misma transacci\u00f3n de base de datos que actualiz\u00e1s tu entidad, escrib\u00eds el mensaje en una tabla <code>OutboxMessages<\/code>. Un proceso separado (poller) lee esa tabla y publica los mensajes al broker. Una vez publicado, marca el mensaje como procesado.<\/p>\n\n\n\n<p><strong>Implementaci\u00f3n en .NET:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>MassTransit Outbox<\/strong>: soporte nativo con EF Core. Solo configur\u00e1s <code>.AddEntityFrameworkOutbox()<\/code> y se encarga de todo.<\/li><li><strong>Manual con EF Core + Hosted Service<\/strong>: tabla <code>OutboxMessages<\/code>, un <code>IHostedService<\/code> que pollea cada N segundos y publica con tu broker.<\/li><li><strong>CAP (DotNetCore.CAP)<\/strong>: librer\u00eda open source que implementa outbox + inbox patterns con soporte para m\u00faltiples bases de datos y brokers.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5. \u00bfQu\u00e9 es el patr\u00f3n Inbox y c\u00f3mo lo implementar\u00edas en .NET?<\/h3>\n\n\n\n<p>El <strong>Inbox pattern<\/strong> es la contraparte del Outbox, pero del lado del consumidor. Garantiza idempotencia: si el mismo mensaje llega dos veces (por reintentos del broker), solo se procesa una vez.<\/p>\n\n\n\n<p><strong>La idea:<\/strong> cuando llega un mensaje, primero verific\u00e1s si su ID ya existe en la tabla <code>InboxMessages<\/code>. Si existe, lo descart\u00e1s. Si no, lo insert\u00e1s y proces\u00e1s en la misma transacci\u00f3n.<\/p>\n\n\n\n<p><strong>En .NET:<\/strong> MassTransit con <code>UseInMemoryInbox()<\/code> o EF Inbox, y CAP tambi\u00e9n lo implementa nativamente. Para implementaci\u00f3n manual, basta con una tabla con la clave del mensaje y un <code>UNIQUE INDEX<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">11. \u00bfCu\u00e1l es la diferencia entre mensajer\u00eda point-to-point y publish-subscribe?<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Point-to-point (cola):<\/strong> un productor env\u00eda un mensaje a una cola. Un solo consumidor lo recibe y procesa. Si hay m\u00faltiples consumidores escuchando la misma cola, solo uno recibe cada mensaje. Ideal para distribuir trabajo.<\/li><li><strong>Publish-Subscribe (topic\/exchange):<\/strong> el productor publica en un topic. Todos los suscriptores registrados reciben una copia del mensaje. Ideal para notificar eventos a m\u00faltiples servicios interesados.<\/li><\/ul>\n\n\n\n<p>En RabbitMQ: queue = P2P, fanout\/topic exchange = pub\/sub. En Azure: Storage Queue = P2P, Service Bus Topic = pub\/sub.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">12. \u00bfCu\u00e1l es la diferencia entre una queue, un topic y un exchange en RabbitMQ?<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Queue:<\/strong> buffer donde se almacenan los mensajes. Los consumidores consumen de ac\u00e1.<\/li><li><strong>Exchange:<\/strong> recibe los mensajes de los productores y los enruta a las queues seg\u00fan su tipo (direct, fanout, topic, headers). Es el router.<\/li><li><strong>Topic (tipo de exchange):<\/strong> enruta mensajes a queues seg\u00fan un patr\u00f3n de routing key con wildcards (<code>*<\/code> = una palabra, <code>#<\/code> = cero o m\u00e1s palabras). Ej: <code>pedidos.#<\/code> captura <code>pedidos.creado<\/code>, <code>pedidos.cancelado.urgente<\/code>, etc.<\/li><\/ul>\n\n\n\n<p>El flujo es: Productor \u2192 Exchange \u2192 (binding) \u2192 Queue \u2192 Consumidor.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Resiliencia<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">6. \u00bfC\u00f3mo configurar\u00edas pol\u00edticas de retry para comunicaci\u00f3n REST entre servicios en .NET?<\/h3>\n\n\n\n<p>Con <strong>Polly<\/strong> (o <strong>Microsoft.Extensions.Http.Resilience<\/strong> en .NET 8+):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp\">\/\/ .NET 8 - nuevo approach con Microsoft.Extensions.Http.Resilience\nbuilder.Services.AddHttpClient&lt;IProductoService, ProductoService&gt;()\n    .AddStandardResilienceHandler(options =>\n    {\n        options.Retry.MaxRetryAttempts = 3;\n        options.Retry.Delay = TimeSpan.FromSeconds(1);\n        options.Retry.BackoffType = DelayBackoffType.Exponential;\n    });\n\n\/\/ Approach cl\u00e1sico con Polly\nbuilder.Services.AddHttpClient&lt;IProductoService, ProductoService&gt;()\n    .AddPolicyHandler(HttpPolicyExtensions\n        .HandleTransientHttpError()\n        .WaitAndRetryAsync(3, retryAttempt =>\n            TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))));<\/code><\/pre>\n\n\n\n<p>Importante: us\u00e1 <strong>exponential backoff con jitter<\/strong> para evitar que todos los servicios reintenten al mismo tiempo (thundering herd problem).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7. Explic\u00e1 el patr\u00f3n Circuit Breaker. \u00bfCu\u00e1ndo deber\u00eda aplicarse?<\/h3>\n\n\n\n<p>El Circuit Breaker es como un fusible el\u00e9ctrico para llamadas entre servicios. Tiene tres estados:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Closed (normal):<\/strong> las llamadas pasan. Se cuentan los fallos.<\/li><li><strong>Open (disparado):<\/strong> cuando los fallos superan un umbral, el circuito se abre. Las llamadas fallan inmediatamente sin intentar llegar al servicio (fail fast). Esto evita sobrecargar un servicio ya ca\u00eddo.<\/li><li><strong>Half-Open:<\/strong> despu\u00e9s de un tiempo, se permite una llamada de prueba. Si funciona, vuelve a Closed. Si falla, regresa a Open.<\/li><\/ul>\n\n\n\n<p><strong>\u00bfCu\u00e1ndo aplicarlo?<\/strong> Cuando un servicio externo es propenso a fallos temporales y quer\u00e9s evitar que una cascada de errores derribe toda tu arquitectura. Con Polly: <code>.AddCircuitBreaker()<\/code>. En .NET 8, el <code>StandardResilienceHandler<\/code> incluye circuit breaker por defecto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">8. \u00bfQu\u00e9 patrones de resiliencia en comunicaci\u00f3n conoc\u00e9s? Explic\u00e1 cada uno.<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Retry:<\/strong> reintenta la operaci\u00f3n fallida N veces, idealmente con backoff exponencial.<\/li><li><strong>Circuit Breaker:<\/strong> corta el circuito tras demasiados fallos para proteger al servicio ca\u00eddo.<\/li><li><strong>Timeout:<\/strong> limita cu\u00e1nto tiempo espera una llamada. Sin timeout, un hilo puede quedar bloqueado indefinidamente.<\/li><li><strong>Bulkhead:<\/strong> a\u00edsla los recursos usados por cada operaci\u00f3n. Si el servicio A se cuelga, no consume todos los threads del pool impactando al servicio B.<\/li><li><strong>Fallback:<\/strong> cuando falla, retorna un valor por defecto o una respuesta alternativa.<\/li><li><strong>Hedge (nuevo en .NET 8):<\/strong> lanza m\u00faltiples requests en paralelo y usa la primera respuesta exitosa. Reduce la latencia del percentil 99.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">9 y 10. \u00bfC\u00f3mo configurar\u00edas pol\u00edticas de resiliencia para clientes gRPC en .NET?<\/h3>\n\n\n\n<p>gRPC en .NET usa <code>HttpClient<\/code> internamente, as\u00ed que Polly aplica igual. Pero gRPC tambi\u00e9n tiene su propio mecanismo nativo de retry:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp\">\/\/ Retry nativo de gRPC (service config)\nvar defaultMethodConfig = new MethodConfig\n{\n    Names = { MethodName.Default },\n    RetryPolicy = new RetryPolicy\n    {\n        MaxAttempts = 4,\n        InitialBackoff = TimeSpan.FromSeconds(1),\n        MaxBackoff = TimeSpan.FromSeconds(5),\n        BackoffMultiplier = 1.5,\n        RetryableStatusCodes = { StatusCode.Unavailable }\n    }\n};\n\nvar channel = GrpcChannel.ForAddress(\"https:\/\/localhost:5001\", new GrpcChannelOptions\n{\n    ServiceConfig = new ServiceConfig { MethodConfigs = { defaultMethodConfig } }\n});<\/code><\/pre>\n\n\n\n<p>Para circuit breaker y pol\u00edticas m\u00e1s complejas, combin\u00e1 con Polly como en REST.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Eventos<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">13. \u00bfCu\u00e1ndo usar\u00edas thin events vs thick events? \u00bfQu\u00e9 patrones aplic\u00e1s para recuperar datos faltantes?<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Thin event:<\/strong> el evento solo contiene el ID y el tipo. Ej: <code>{ \"tipo\": \"PedidoCreado\", \"pedidoId\": \"abc-123\" }<\/code>. El consumidor debe consultar al servicio origen para obtener los datos completos.<\/li><li><strong>Thick event:<\/strong> el evento incluye todos los datos relevantes. Ej: <code>{ \"tipo\": \"PedidoCreado\", \"pedidoId\": \"abc-123\", \"monto\": 500, \"cliente\": {...} }<\/code>. El consumidor es aut\u00f3nomo.<\/li><\/ul>\n\n\n\n<p><strong>Thin es mejor cuando:<\/strong> los datos cambian frecuentemente, los payloads son grandes, o el consumidor puede no necesitar todos los campos.<br><strong>Thick es mejor cuando:<\/strong> la autonom\u00eda del consumidor es prioritaria, quer\u00e9s evitar llamadas adicionales, o el servicio origen podr\u00eda no estar disponible.<\/p>\n\n\n\n<p><strong>Patr\u00f3n para recuperar datos con thin events:<\/strong> <em>Event-Carried State Transfer<\/em> \u2014 el consumidor llama al servicio origen via API para obtener el estado actual. Si el servicio no est\u00e1 disponible, el mensaje se reencola (retry policy).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">14. Si los thin events dependen de callbacks a un servicio, \u00bfc\u00f3mo evit\u00e1s que ese servicio se convierta en un cuello de botella?<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Cach\u00e9 local:<\/strong> el consumidor cachea los datos del servicio origen por un tiempo razonable.<\/li><li><strong>Read replicas:<\/strong> exponer r\u00e9plicas de lectura del servicio origen.<\/li><li><strong>CQRS + proyecciones locales:<\/strong> el consumidor mantiene una proyecci\u00f3n local de los datos que necesita, sincronizada via eventos.<\/li><li><strong>Rate limiting del consumidor:<\/strong> controlar cu\u00e1ntas consultas hace por segundo.<\/li><li><strong>Async enrichment:<\/strong> procesar el evento en dos pasos \u2014 primero guard\u00e1s el evento thin, luego un proceso separado enriquece los datos en background.<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Sagas y transacciones distribuidas<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">15. Explic\u00e1 el patr\u00f3n Saga. \u00bfCu\u00e1les son las dos estrategias de coordinaci\u00f3n y c\u00f3mo las implementar\u00edas en .NET?<\/h3>\n\n\n\n<p>Una <strong>Saga<\/strong> es una secuencia de transacciones locales coordinadas entre m\u00faltiples servicios. No hay transacci\u00f3n distribuida cl\u00e1sica (2PC); en cambio, cada servicio hace su transacci\u00f3n local y emite un evento. Si algo falla, se ejecutan pasos compensatorios.<\/p>\n\n\n\n<p><strong>Choreography (Coreograf\u00eda):<\/strong> no hay coordinador central. Cada servicio escucha eventos y reacciona emitiendo sus propios eventos. Desacoplado, pero dif\u00edcil de rastrear el flujo completo.<\/p>\n\n\n\n<p><strong>Orchestration (Orquestaci\u00f3n):<\/strong> un servicio central (el orquestador) dirige el flujo, le dice a cada servicio qu\u00e9 hacer y maneja los errores. M\u00e1s f\u00e1cil de entender y debuggear.<\/p>\n\n\n\n<p><strong>En .NET:<\/strong> MassTransit tiene soporte nativo de Sagas con <em>State Machine<\/em> (orquestaci\u00f3n), usando EF Core o Redis para persistir el estado. Es la implementaci\u00f3n m\u00e1s completa del ecosistema.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">16. \u00bfC\u00f3mo funcionan los pasos compensatorios en Sagas de Orchestration y Choreography?<\/h3>\n\n\n\n<p><strong>En Orchestration:<\/strong> el orquestador sabe exactamente qu\u00e9 pasos se ejecutaron. Si el paso 3 falla, llama expl\u00edcitamente a las acciones compensatorias del paso 2 y paso 1 en orden inverso. Centralizado y predecible.<\/p>\n\n\n\n<p><strong>En Choreography:<\/strong> cada servicio escucha el evento de fallo y ejecuta su propia compensaci\u00f3n. Ej: si <code>PagoFallido<\/code> se emite, el servicio de inventario escucha ese evento y libera el stock reservado. M\u00e1s complejo de coordinar porque no hay vista global del estado.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Infraestructura y arquitectura<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">17. \u00bfCon qu\u00e9 API Gateways has trabajado? \u00bfC\u00f3mo configurar\u00edas routing entre m\u00faltiples instancias de un mismo servicio?<\/h3>\n\n\n\n<p>Opciones populares en el ecosistema .NET:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>YARP (Yet Another Reverse Proxy):<\/strong> de Microsoft, integraci\u00f3n nativa con .NET, altamente configurable.<\/li><li><strong>Ocelot:<\/strong> API Gateway open source para .NET, f\u00e1cil de configurar con JSON.<\/li><li><strong>Kong, NGINX, Traefik:<\/strong> opciones agn\u00f3sticas al lenguaje.<\/li><li><strong>Azure API Management \/ AWS API Gateway:<\/strong> opciones managed cloud.<\/li><\/ul>\n\n\n\n<p><strong>Load balancing entre instancias:<\/strong> el gateway descubre las instancias via service discovery (Consul, Kubernetes Service DNS) y distribuye con round-robin, least connections, u otras estrategias. En Kubernetes, el Service abstrae esto autom\u00e1ticamente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">18. \u00bfQu\u00e9 es service discovery y qu\u00e9 librer\u00edas o herramientas has usado en .NET?<\/h3>\n\n\n\n<p><strong>Service Discovery<\/strong> es el mecanismo por el cual un servicio encuentra la direcci\u00f3n de red de otro servicio, sin hardcodearla.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Client-side discovery:<\/strong> el cliente consulta al registro (Consul, Eureka) y elige una instancia.<\/li><li><strong>Server-side discovery:<\/strong> el cliente hace la request al gateway\/load balancer, que resuelve internamente (Kubernetes Services).<\/li><\/ul>\n\n\n\n<p><strong>En .NET:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Consul + Steeltoe o Consul.Net:<\/strong> registro y descubrimiento program\u00e1tico.<\/li><li><strong>Microsoft.Extensions.ServiceDiscovery (.NET 8+):<\/strong> nuevo package oficial con integraci\u00f3n a Aspire y Kubernetes DNS.<\/li><li><strong>Kubernetes:<\/strong> DNS interno (<code>http:\/\/servicio-nombre<\/code>) es la forma m\u00e1s com\u00fan en producci\u00f3n.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">19. Explic\u00e1 el patr\u00f3n Sidecar y describ\u00ed casos de uso pr\u00e1cticos en microservicios.<\/h3>\n\n\n\n<p>El <strong>Sidecar<\/strong> es un contenedor auxiliar que corre junto al servicio principal (en el mismo pod en Kubernetes) y agrega funcionalidades sin modificar el c\u00f3digo del servicio.<\/p>\n\n\n\n<p><strong>Casos de uso:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Service Mesh (Envoy\/Istio):<\/strong> el sidecar proxy intercepta todo el tr\u00e1fico de red para implementar mTLS, circuit breaking, observabilidad y retry sin que el servicio sepa nada.<\/li><li><strong>Log shipping:<\/strong> Fluentd o Filebeat como sidecar leen los logs del contenedor principal y los env\u00edan a Elasticsearch.<\/li><li><strong>Configuraci\u00f3n din\u00e1mica:<\/strong> un sidecar sincroniza config desde Consul\/Vault al filesystem del servicio principal.<\/li><li><strong>Rotaci\u00f3n de secretos:<\/strong> Vault Agent como sidecar renueva tokens y certificados autom\u00e1ticamente.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">20. Explic\u00e1 el patr\u00f3n Anti-Corruption Layer. \u00bfCu\u00e1ndo es m\u00e1s valioso?<\/h3>\n\n\n\n<p>El <strong>Anti-Corruption Layer (ACL)<\/strong> es una capa de traducci\u00f3n que a\u00edsla tu modelo de dominio del modelo de un sistema externo o legacy. En lugar de contaminar tu c\u00f3digo con las estructuras del sistema externo, el ACL traduce entre ambos mundos.<\/p>\n\n\n\n<p><strong>Es m\u00e1s valioso cuando:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Integr\u00e1s con un sistema legacy con un modelo de datos confuso o inconsistente.<\/li><li>Consum\u00eds una API de terceros cuyo contrato puede cambiar.<\/li><li>Est\u00e1s migrando un monolito a microservicios progresivamente (strangler fig pattern).<\/li><li>El bounded context externo usa terminolog\u00eda diferente al tuyo.<\/li><\/ul>\n\n\n\n<p>En .NET: el ACL suele ser un servicio o capa de mappers\/adapters. AutoMapper puede ayudar, pero muchas veces el mapeo es suficientemente complejo para justificar mappers expl\u00edcitos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Migraci\u00f3n, hosting y dise\u00f1o<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">21. \u00bfC\u00f3mo migrar\u00edas una aplicaci\u00f3n monol\u00edtica ASP.NET a microservicios? \u00bfCu\u00e1les son los pasos clave?<\/h3>\n\n\n\n<p>La estrategia m\u00e1s probada es el <strong>Strangler Fig Pattern<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>Identificar bounded contexts:<\/strong> analiz\u00e1 el monolito y encontr\u00e1 los dominios naturales (pedidos, inventario, usuarios). Domain-Driven Design ayuda ac\u00e1.<\/li><li><strong>Extraer un servicio a la vez:<\/strong> empez\u00e1 por los m\u00f3dulos m\u00e1s independientes y con menos acoplamiento.<\/li><li><strong>Usar un API Gateway\/Proxy:<\/strong> el gateway enruta parte del tr\u00e1fico al nuevo microservicio y el resto sigue al monolito.<\/li><li><strong>Separar la base de datos:<\/strong> cada servicio debe tener su propia DB. Si el monolito tiene una DB compartida, la migraci\u00f3n de datos es el paso m\u00e1s cr\u00edtico.<\/li><li><strong>Introducir mensajer\u00eda gradualmente:<\/strong> reemplaz\u00e1 llamadas directas internas por eventos as\u00edncronos.<\/li><li><strong>Monitoreo desde el d\u00eda 1:<\/strong> distributed tracing (OpenTelemetry), logs centralizados.<\/li><\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">22. \u00bfC\u00f3mo decid\u00eds entre contenedores y serverless para hostear microservicios?<\/h3>\n\n\n\n<p><strong>Contenedores (Docker + Kubernetes):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Servicios que corren continuamente con tr\u00e1fico constante.<\/li><li>Necesit\u00e1s control total sobre el runtime, puertos, recursos.<\/li><li>Latencias bajas y predecibles (sin cold start).<\/li><li>Servicios con estado o conexiones persistentes (WebSockets, gRPC streaming).<\/li><\/ul>\n\n\n\n<p><strong>Serverless (Azure Functions, AWS Lambda):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Tr\u00e1fico muy espor\u00e1dico o con picos muy variables.<\/li><li>Funciones peque\u00f1as y bien definidas (procesamiento de eventos, webhooks).<\/li><li>Quer\u00e9s pagar solo por ejecuci\u00f3n, no por tiempo idle.<\/li><li>No quer\u00e9s gestionar infraestructura.<\/li><\/ul>\n\n\n\n<p>En la pr\u00e1ctica, muchas arquitecturas usan ambos: servicios core en contenedores y tareas auxiliares en serverless.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">23. \u00bfCu\u00e1les son los trade-offs entre monorepo y multi-repo para microservicios?<\/h3>\n\n\n\n<p><strong>Monorepo (un repositorio para todos los servicios):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>&#x2705; Refactoring at\u00f3mico cross-service, visibilidad total del c\u00f3digo, CI\/CD simplificado para cambios coordinados.<\/li><li>&#x274c; El repo crece mucho, los pipelines de CI pueden volverse lentos sin optimizaci\u00f3n (build incremental), los equipos pueden pisarse entre s\u00ed.<\/li><\/ul>\n\n\n\n<p><strong>Multi-repo (un repo por servicio):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>&#x2705; Autonom\u00eda de equipos, pipelines independientes, encapsulaci\u00f3n real.<\/li><li>&#x274c; Coordinar cambios cross-servicio es m\u00e1s complejo, gesti\u00f3n de versiones de contratos\/paquetes compartidos, m\u00e1s overhead operativo.<\/li><\/ul>\n\n\n\n<p>No hay una respuesta correcta universal. Amazon y Google usan monorepos. Netflix usa multi-repo. La clave es la madurez del equipo y las herramientas de CI\/CD disponibles.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">24. \u00bfC\u00f3mo usar\u00edas Domain-Driven Design en .NET para definir los l\u00edmites de los servicios?<\/h3>\n\n\n\n<p>DDD es probablemente la herramienta m\u00e1s poderosa para definir microservicios bien acotados:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Bounded Contexts:<\/strong> cada contexto delimitado se convierte en un microservicio candidato. Un <em>Pedido<\/em> en el contexto de Ventas tiene atributos distintos a un <em>Pedido<\/em> en el contexto de Log\u00edstica.<\/li><li><strong>Ubiquitous Language:<\/strong> cada servicio tiene su propio vocabulario. Documentarlo en c\u00f3digo (nombres de clases, m\u00e9todos, eventos) evita la confusi\u00f3n.<\/li><li><strong>Aggregates:<\/strong> definen los l\u00edmites de consistencia. Un aggregate se guarda entero en una transacci\u00f3n. Si dos aggregates necesitan actualizarse juntos frecuentemente, quiz\u00e1s deber\u00edan estar en el mismo servicio.<\/li><li><strong>Domain Events:<\/strong> los eventos entre bounded contexts definen las interfaces entre microservicios.<\/li><li><strong>Context Map:<\/strong> diagram\u00e1 las relaciones entre bounded contexts (upstream\/downstream, ACL, shared kernel) antes de empezar a codear.<\/li><\/ul>\n\n\n\n<p>En .NET, librer\u00edas como <strong>Ardalis.Specification<\/strong>, <strong>MediatR<\/strong> y el <em>Clean Architecture template<\/em> de Ardalis son buenos puntos de partida para estructurar el c\u00f3digo siguiendo DDD.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p>Estas 24 preguntas no son trivia \u2014 reflejan problemas reales que aparecen cuando quer\u00e9s escalar una arquitectura de microservicios en producci\u00f3n. Conocer los patrones (Outbox, Saga, Circuit Breaker, Sidecar, ACL) y poder relacionarlos con implementaciones concretas en .NET es lo que separa a un candidato promedio de uno s\u00f3lido.<\/p>\n\n\n\n<p><strong>\u00bfHay alguna de estas preguntas que te gener\u00f3 dudas? Dejala en los comentarios.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Las 24 preguntas m\u00e1s frecuentes en entrevistas t\u00e9cnicas sobre microservicios en .NET, con respuestas detalladas: comunicaci\u00f3n, resiliencia, Saga, Outbox, Sidecar, DDD y m\u00e1s.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[38,267,39,18,266,356],"class_list":["post-1308","post","type-post","status-publish","format-standard","hentry","category-blog","tag-net","tag-arquitectura-software","tag-c","tag-dotnet","tag-microservicios","tag-sistemas-distribuidos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>24 Preguntas de Entrevista para .NET Microservicios (con respuestas) &#183; devops Mauro Bernal<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/maurobernal.com.ar\/blog\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"24 Preguntas de Entrevista para .NET Microservicios (con respuestas) &#183; devops Mauro Bernal\" \/>\n<meta property=\"og:description\" content=\"Las 24 preguntas m\u00e1s frecuentes en entrevistas t\u00e9cnicas sobre microservicios en .NET, con respuestas detalladas: comunicaci\u00f3n, resiliencia, Saga, Outbox, Sidecar, DDD y m\u00e1s.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/maurobernal.com.ar\/blog\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\/\" \/>\n<meta property=\"og:site_name\" content=\"devops Mauro Bernal\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-21T15:46:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-24T15:20:48+00:00\" \/>\n<meta name=\"author\" content=\"Mauro Bernal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:site\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mauro Bernal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\\\/\"},\"author\":{\"name\":\"Mauro Bernal\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"headline\":\"24 Preguntas de Entrevista para .NET Microservicios (con respuestas)\",\"datePublished\":\"2026-03-21T15:46:57+00:00\",\"dateModified\":\"2026-03-24T15:20:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\\\/\"},\"wordCount\":2738,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"keywords\":[\".NET\",\"arquitectura-software\",\"c#\",\"dotnet\",\"microservicios\",\"Sistemas Distribuidos\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\\\/\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\\\/\",\"name\":\"24 Preguntas de Entrevista para .NET Microservicios (con respuestas) &#183; devops Mauro Bernal\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\"},\"datePublished\":\"2026-03-21T15:46:57+00:00\",\"dateModified\":\"2026-03-24T15:20:48+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"24 Preguntas de Entrevista para .NET Microservicios (con respuestas)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\",\"name\":\"devops Mauro Bernal\",\"description\":\"Cuando tu trabajo es hacer que las cosas funcionen bien...\",\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\",\"name\":\"Mauro Bernal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"width\":1740,\"height\":1740,\"caption\":\"Mauro Bernal\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\"},\"description\":\"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman\",\"sameAs\":[\"https:\\\/\\\/maurobernal.com.ar\",\"https:\\\/\\\/x.com\\\/_maurobernal\",\"https:\\\/\\\/youtube.com\\\/maurobernal\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"24 Preguntas de Entrevista para .NET Microservicios (con respuestas) &#183; devops Mauro Bernal","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/maurobernal.com.ar\/blog\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\/","og_locale":"es_ES","og_type":"article","og_title":"24 Preguntas de Entrevista para .NET Microservicios (con respuestas) &#183; devops Mauro Bernal","og_description":"Las 24 preguntas m\u00e1s frecuentes en entrevistas t\u00e9cnicas sobre microservicios en .NET, con respuestas detalladas: comunicaci\u00f3n, resiliencia, Saga, Outbox, Sidecar, DDD y m\u00e1s.","og_url":"https:\/\/maurobernal.com.ar\/blog\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\/","og_site_name":"devops Mauro Bernal","article_published_time":"2026-03-21T15:46:57+00:00","article_modified_time":"2026-03-24T15:20:48+00:00","author":"Mauro Bernal","twitter_card":"summary_large_image","twitter_creator":"@_maurobernal","twitter_site":"@_maurobernal","twitter_misc":{"Escrito por":"Mauro Bernal","Tiempo de lectura":"14 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/maurobernal.com.ar\/blog\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\/#article","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\/"},"author":{"name":"Mauro Bernal","@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"headline":"24 Preguntas de Entrevista para .NET Microservicios (con respuestas)","datePublished":"2026-03-21T15:46:57+00:00","dateModified":"2026-03-24T15:20:48+00:00","mainEntityOfPage":{"@id":"https:\/\/maurobernal.com.ar\/blog\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\/"},"wordCount":2738,"commentCount":0,"publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"keywords":[".NET","arquitectura-software","c#","dotnet","microservicios","Sistemas Distribuidos"],"articleSection":["Blog"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/maurobernal.com.ar\/blog\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/maurobernal.com.ar\/blog\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\/","url":"https:\/\/maurobernal.com.ar\/blog\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\/","name":"24 Preguntas de Entrevista para .NET Microservicios (con respuestas) &#183; devops Mauro Bernal","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#website"},"datePublished":"2026-03-21T15:46:57+00:00","dateModified":"2026-03-24T15:20:48+00:00","breadcrumb":{"@id":"https:\/\/maurobernal.com.ar\/blog\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/maurobernal.com.ar\/blog\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/maurobernal.com.ar\/blog\/24-preguntas-de-entrevista-para-net-microservicios-con-respuestas\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/maurobernal.com.ar\/blog\/"},{"@type":"ListItem","position":2,"name":"24 Preguntas de Entrevista para .NET Microservicios (con respuestas)"}]},{"@type":"WebSite","@id":"https:\/\/maurobernal.com.ar\/blog\/#website","url":"https:\/\/maurobernal.com.ar\/blog\/","name":"devops Mauro Bernal","description":"Cuando tu trabajo es hacer que las cosas funcionen bien...","publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/maurobernal.com.ar\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":["Person","Organization"],"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283","name":"Mauro Bernal","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","url":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","contentUrl":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","width":1740,"height":1740,"caption":"Mauro Bernal"},"logo":{"@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1"},"description":"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman","sameAs":["https:\/\/maurobernal.com.ar","https:\/\/x.com\/_maurobernal","https:\/\/youtube.com\/maurobernal"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/comments?post=1308"}],"version-history":[{"count":1,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1308\/revisions"}],"predecessor-version":[{"id":1309,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1308\/revisions\/1309"}],"wp:attachment":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/media?parent=1308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/categories?post=1308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/tags?post=1308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}