<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>XinbooBlog</title><description>专注.NET开发，热爱微软生态</description><link>https://xinboo.aiursoft.com/</link><pubDate>Sat, 22 Aug 2026 09:45:42 GMT</pubDate><copyright>© 2021 - 2026 Xinboo</copyright><generator>MoongladePure v1.0.0 (a8ee77)</generator><item><title>.NET 后端面试 26 问：并发、缓存、数据库与工业通信实战解析</title><link>https://xinboo.aiursoft.com/post/2026/8/18/dotnet-backend-interview-26-questions</link><description>What if a single misconfigured timeout could bring down an entire industrial production line? This exploration delves into the intricate mechanics of .NET backend engineering, moving far beyond basic syntax to dissect the high-stakes realities of concurrency, data persistence, and industrial communication. It examines how a seemingly simple Modbus coil write can hide a fatal byte-order trap, and why forcing an async method to wait for a result in a desktop app guarantees a deadlock that no amount of debugging can easily fix. The narrative weaves through the fragile ecosystem of caching, distinguishing between the silent killer of cache penetration and the thunderous collapse of a cache avalanche, revealing why a logical expiration strategy might be the only way to keep a hot key from crushing a database. As the scale expands to tens of terabytes of IoT time-series data, the text challenges the conventional reliance on general-purpose databases, questioning whether MongoDB’s sharding is...--AI Generated</description><author>anduin2017@foxmail.com</author><category>.NET</category><guid isPermaLink="false">83305524-dac6-4a64-ba09-51d864037bb4</guid><pubDate>Tue, 18 Aug 2026 14:32:30 GMT</pubDate></item><item><title>浅聊一下时序数据库 InfluxDB，以及 .NET 怎么操作它</title><link>https://xinboo.aiursoft.com/post/2026/7/7/influxdb-dotnet-quick-start</link><description>Imagine a world where every sensor in a water pump room whispers its secrets to a database, creating a symphony of real-time data that traditional systems struggle to hear. This narrative explores the transition from conventional storage solutions like PostgreSQL and MongoDB to the specialized realm of Time Series Databases, specifically InfluxDB. Why do we need such a shift? Because time-stamped data behaves differently than standard relational records; it demands high write throughput, chronological querying, and immutable history. The core mystery lies in how InfluxDB organizes this chaotic influx of information through elegant abstractions like Buckets, Measurements, Tags, and Fields. Tags act as indexed dimensions for fast filtering, while Fields hold the actual metric values without indexing overhead—a distinction that can make or break performance at scale. For .NET developers, this isn't just theory; it is a practical journey from installing the InfluxDB.Client NuGet package to...--AI Generated</description><author>anduin2017@foxmail.com</author><category>InfluxDB</category><category>.NET</category><guid isPermaLink="false">8965374d-63dc-494f-a89c-3811bcea53ad</guid><pubDate>Tue, 07 Jul 2026 15:08:20 GMT</pubDate></item><item><title>用 MQTTnet 的 ManagedMqttClient 创建带自动重连的 MQTT 客户端</title><link>https://xinboo.aiursoft.com/post/2024/5/13/mqttnet-managed-client-qos-retain</link><description>Imagine building an IoT system where the network is as unreliable as a dial-up connection in the 90s. How do you ensure your sensors talk to each other without constant manual intervention? The answer lies in shifting from basic MQTT clients to intelligent, managed architectures like ManagedMqttClient. This approach automates the tedious work of reconnection and message queuing, allowing developers to focus on logic rather than infrastructure maintenance. But beyond convenience, it forces us to confront the core mechanics of message delivery: Quality of Service (QoS), CleanSession flags, and Retain messages. These are not just technical settings; they are philosophical choices about reliability versus efficiency. QoS 0 offers speed at the cost of certainty, while QoS 2 guarantees perfection but demands a heavy performance toll. Where is the sweet spot for your application? Is it worth sacrificing latency to ensure that every single command is executed exactly once? The CleanSession par...--AI Generated</description><author>anduin2017@foxmail.com</author><category>MQTT</category><category>.NET</category><guid isPermaLink="false">a23d660a-0f3b-485e-abf2-3cd56674d46e</guid><pubDate>Mon, 13 May 2024 15:15:40 GMT</pubDate></item><item><title>在 Admin.Core 中使用 Redis 实现接口限流</title><link>https://xinboo.aiursoft.com/post/2024/3/28/admin-core-redis-rate-limiting</link><description>Imagine a digital fortress where every request is meticulously counted, not in isolation, but as part of a grand, synchronized symphony across multiple servers. The premise of distributed rate limiting often sounds like a complex engineering hurdle, yet it can be elegantly solved by harnessing the power of Redis to create a unified memory space for traffic control. When an application scales horizontally, adding more instances usually fractures data consistency, but what if every node could peek into the same real-time ledger? This approach transforms the chaos of distributed systems into order, ensuring that no single user can overwhelm the infrastructure regardless of which server they land on. The mechanics are deceptively simple: a key is generated from the client’s identity and endpoint, incremented atomically in Redis, and checked against a threshold before the request ever touches the business logic. If the limit is breached, a crisp 429 status code halts the process, protecting...--AI Generated</description><author>anduin2017@foxmail.com</author><category>Redis</category><category>.NET</category><guid isPermaLink="false">4805e942-9531-499e-8b2e-a4abdd2156fa</guid><pubDate>Thu, 28 Mar 2024 08:16:48 GMT</pubDate></item><item><title>Nginx 中 server_name、location、proxy_pass 的几种写法和区别</title><link>https://xinboo.aiursoft.com/post/2023/9/1/nginx-config-notes</link><description>Nginx reverse proxy configurations often hide subtle traps within three fundamental directives: server_name, location, and proxy_pass. While they appear routine, their nuanced behaviors can drastically alter traffic routing, leading to silent failures or unexpected redirections that are notoriously difficult to debug. The complexity begins with server_name, where the distinction between exact matches, wildcards, and regular expressions dictates which server block handles an incoming request. Precision matters here; a wildcard placed incorrectly or a regex used when a prefix match suffices can impact performance and logic flow. Understanding that exact matches take precedence over prefixes, which in turn override suffixes and regular expressions, is crucial for predictable routing.

Equally deceptive is the behavior of location blocks. The presence or absence of a trailing slash in paths like /image versus /image/ changes how Nginx interprets incoming URIs, determining whether a request...--AI Generated</description><author>anduin2017@foxmail.com</author><category>Nginx</category><category>.NET</category><guid isPermaLink="false">47f95944-38a8-483f-98fe-a47a0ea542e9</guid><pubDate>Fri, 01 Sep 2023 07:56:12 GMT</pubDate></item><item><title>我的 Steam 账号是如何被盗的</title><link>https://xinboo.aiursoft.com/post/2023/7/23/steam-account-stolen</link><description>Your digital identity is often more fragile than you believe, hanging by a thread of trust in the invisible infrastructure of your daily online life. Consider the terrifying simplicity with which a Steam account can be hijacked, not through brute force or sophisticated hacking tools, but via a chain of mundane vulnerabilities that turn ordinary convenience into catastrophic security failures. It begins subtly, perhaps in an internet cafe or while using a sketchy VPN, where the initial breach isn't even at the gaming platform itself but in the email provider that serves as your digital keychain. Once the attackers infiltrate this primary gatekeeper, they execute a silent, surgical strike: blacklisting legitimate communication channels to isolate you from reality. This isolation is the first psychological trap, creating a vacuum of information that only the attacker can fill.

As panic sets in, the second phase of the deception unfolds with chilling precision. The account is locked, trig...--AI Generated</description><author>anduin2017@foxmail.com</author><category>Default</category><guid isPermaLink="false">83c3751b-32bc-4762-b51a-18124ba8118e</guid><pubDate>Sun, 23 Jul 2023 07:20:32 GMT</pubDate></item><item><title>PostgreSQL 排序相同值不固定的问题</title><link>https://xinboo.aiursoft.com/post/2023/6/11/postgresql-order-by-same-value</link><description>Imagine a world where reality itself is fluid, shifting its foundations with every passing moment. This is the experience of querying PostgreSQL when dealing with duplicate sort values. Unlike SQL Server, which meticulously arranges data like books on a perfectly organized shelf, PostgreSQL operates with the chaotic elegance of a drawer that fills whatever empty space is available at any given instant. When multiple records share the exact same creation timestamp, their physical location in memory is not fixed but transient, dictated by the whims of vacuum processes and storage allocation. Consequently, two identical queries executed milliseconds apart may return results in completely different orders, not because the data has changed, but because the underlying architecture refuses to guarantee stability for indistinguishable elements. This phenomenon challenges our fundamental assumption that order implies permanence. If the database engine does not care about the relative position o...--AI Generated</description><author>anduin2017@foxmail.com</author><category>PostgreSQL</category><guid isPermaLink="false">94bddab7-3963-4ca5-a9cd-a2de8689cdff</guid><pubDate>Sun, 11 Jun 2023 15:26:50 GMT</pubDate></item><item><title>.NET 5 控制台服务里消费 Kafka，带自动重连</title><link>https://xinboo.aiursoft.com/post/2022/6/19/dotnet5-kafka-consumer-background-service</link><description>What happens when a robust data synchronization service needs to breathe life into a .NET 5 console application? The journey into consuming Kafka messages within this environment reveals not just technical steps, but a delicate dance between persistence and grace. It begins with the quiet power of Microsoft.Extensions.Hosting, which transforms a simple background task into a resilient process capable of understanding the subtle signals of its environment. But how does one ensure that messages are never lost when the digital tide turns against them? The answer lies in rejecting the convenience of automatic commits in favor of manual control, creating a safety net where every message is acknowledged only after it has been truly understood. Yet, resilience is not just about handling success; it is about surviving failure. When the Kafka broker vanishes or the network fractures, does the service collapse, or does it rise again? By wrapping the consumption loop in a persistent embrace of tr...--AI Generated</description><author>anduin2017@foxmail.com</author><category>Kafka</category><category>.NET</category><guid isPermaLink="false">8b5ade91-025c-4dac-8736-4517d549e68a</guid><pubDate>Sun, 19 Jun 2022 08:25:26 GMT</pubDate></item><item><title>用 .NET Framework 4.7.2 手搓一个 IoC 容器</title><link>https://xinboo.aiursoft.com/post/2022/6/10/dotnet-handmade-ioc-container</link><description>Dependency Injection is often treated as a black box in modern .NET development, where services are magically wired together without understanding the underlying mechanics. This exploration demystifies the Inversion of Control container by stripping away the complexity of established frameworks like Autofac or Microsoft.Extensions.DependencyInjection to reveal the core logic that powers them. At its heart, an IoC container performs three fundamental operations: registration, resolution, and lifecycle management. Registration maps interfaces to concrete implementations, while resolution recursively traverses dependency graphs, instantiating objects through reflection until all leaf nodes are resolved. The true magic lies in this recursive process, where the container automatically fulfills constructor arguments by resolving their own dependencies, creating a seamless chain of object creation that eliminates manual instantiation code.

Lifecycle management adds another layer of control, ...--AI Generated</description><author>anduin2017@foxmail.com</author><category>.NET</category><guid isPermaLink="false">191c1229-f688-4114-89ad-8d9ed8709dd2</guid><pubDate>Fri, 10 Jun 2022 08:32:25 GMT</pubDate></item><item><title>StackExchange.Redis 的断连坑</title><link>https://xinboo.aiursoft.com/post/2021/11/16/stackexchange-redis-disconnect-fix</link><description>Redis, the ubiquitous in-memory data store, promises lightning-fast performance and seamless integration for modern applications. Yet, beneath its efficient surface lies a labyrinth of connectivity pitfalls that can silently cripple your system. Consider the StackExchange.Redis client: a default configuration choice regarding abortConnect can turn a minor network hiccup into a permanent application deadlock, forcing unnecessary restarts and disrupting service availability. This is not merely a technical oversight but a fundamental misunderstanding of how connection states persist under pressure. What happens when the invisible hand of TCP retries dictates your application's fate? On Linux systems, kernel parameters like tcp_retries2 can enforce a agonizing fifteen-minute silence after a Redis node restart, leaving clients stranded in a state of limbo while infrastructure attempts to recover. This delay is not a bug but a feature of the underlying protocol stack, revealing how deeply ou...--AI Generated</description><author>anduin2017@foxmail.com</author><category>Redis</category><category>.NET</category><guid isPermaLink="false">a12a9bc1-9daa-4b95-b5e7-484f5ae65e5c</guid><pubDate>Tue, 16 Nov 2021 09:07:04 GMT</pubDate></item><item><title>Welcome to MoongladePure</title><link>https://xinboo.aiursoft.com/post/2021/7/24/welcome-to-moonglade-pure</link><author>anduin2017@foxmail.com</author><category>Default</category><guid isPermaLink="false">505abf3e-8874-4ee8-bb1e-b23c2a71d34d</guid><pubDate>Sat, 24 Jul 2021 12:24:40 GMT</pubDate></item></channel></rss>