Anduin Xue
Anduin Xue

Anduin's Tech Blog

All Posts


How to serialize JSON object in C# without Newtonsoft Json

在C#开发中遇到JSON序列化需求却受限于Newtonsoft.Json的版本冲突问题时如何破局?本文提出了一种纯C#解决方案通过DataContractJsonSerializer实现自定义JSON转换器。开发者只需将MyJsonConverter类集成到项目中即可获得与Newtonsoft.Json相似的序列化能力该方法通过MemoryStream实现内存级数据流转无需依赖第三方库即可完成复杂对象的递归序列化。示例中的书籍关联结构验证了其处理嵌套对象的能力当对象的Related字段包含子对象时转换器能自动处理null值并保持结构完整性。这种轻量级方案不仅解决了依赖冲突问题还为资源受限场景提供了替代方案但同时也引发更多思考:当面对包含循环引用的对象时这种转换机制会如何表现?在性能对比中纯C#方案与Newtonsoft.Json的效率差异有多大?当需要处理包含动态类型的复杂数据结构时是否需要对转换器进行扩展?这些问题的答案或许能帮助开发者在不同场景下做出更明智的技术选型。--Qwen3

C# JSON .NET Newtonsoft.Json JSON handling Custom JSON solution

Enable PowerShell remoting for Windows Server machines

本文介绍了如何通过PowerShell实现Windows Server的远程管理功能并解决自签名证书的配置难题重点解析了从清除旧监听器生成自签名证书到设置HTTPS监听端口的完整流程同时提供了连接远程服务器时的会话选项配置技巧包括跳过证书信任链验证的关键参数设置并展示了实际连接成功后的交互界面针对可能出现的端口阻塞问题提出了创建防火墙规则的解决方案引发读者思考如何在保障安全性的同时优化远程管理体验如何在不同网络环境中平衡证书验证的严谨性与操作便捷性以及如何设计更智能的证书自动更新机制来应对长期维护需求--Qwen3

PowerShell Windows Server Remote Management WMI PowerShell Remoting Self Signed Certificate

Best-practice after creating a new Linux server

本文系统梳理了Ubuntu服务器的优化与安全配置全链路,重点涵盖系统性能调优、安全加固及部署准备。核心要点包括:通过镜像源自动测试选择最优网络源,升级至最新内核并启用性能模式提升硬件利用率,配置自动安全更新策略平衡稳定性与风险,调整CPU频率策略与时区设置,移除非必要组件如Snap减少资源占用,通过基准测试工具量化服务器性能指标,并提供Node.js/Docker/.NET等运行时环境安装指引。安全层面强调定期执行系统更新与手动补丁修复,性能优化则聚焦内核版本管理与硬件资源调度策略,最终为服务部署提供标准化的系统环境。--Qwen3

bash Linux Ubuntu SSH System Configuration Server Optimization

Setup auto-renew wildcard HTTPS certificate on Azure virtual machine

本文系统阐述了在Azure虚拟机上实现通配符HTTPS证书自动续订的完整技术方案。通过迁移DNS到Azure管理平台、部署Windows Server虚拟机、配置win-acme证书工具链,构建了一个无需人工干预的HTTPS安全体系。方案核心在于利用Let's Encrypt免费证书服务与Azure DNS验证插件的协同机制,通过应用注册实现自动化域名验证,最终达成通配符证书的自动申请与续订。该方案突破了Azure原生服务在通配符证书支持上的局限性,同时通过IIS与证书管理的深度集成,确保了网站服务的持续可用性。值得关注的是,方案特别强调了DNS迁移的潜在风险与规避策略,揭示了证书自动化背后的身份认证逻辑。当域名解析权完全托管于Azure时,如何平衡系统安全与操作风险?在证书生命周期管理中,自动续订机制是否可能产生新的运维盲区?或许我们应当思考:当云计算平台提供越来越完善的自动化工具时,开发者是否正在失去对关键基础设施的掌控能力?--Qwen3

Azure Azure DNS Windows Server HTTPS Win-ACME Certificate letsencrypt ACME

C# Rotate the square matrix

这篇文章探讨了C#中旋转方形矩阵的算法实现并提供了一个基于递归的解决方案通过分层处理矩阵的每条边将空间复杂度控制为O(1)的同时实现了原地旋转作者在代码中构建了递归终止条件与分层逻辑使得每一圈旋转操作都能精准定位到对应的四个元素位置这种设计巧妙地将二维数组的旋转拆解为多个可重复利用的单步操作并借助padding参数逐步向矩阵内层推进代码通过保存四个目标位置的数值并进行环状赋值完成了单个元素的旋转过程最后通过递归调用将问题规模缩小到更小的子矩阵文章引发的思考包括如何在非方形矩阵中实现旋转操作是否存在更优的时间复杂度方案或者能否将这种分层策略应用到其他二维数组变换中当矩阵的维度不是偶数时这种递归方式是否仍能保持最优解这些问题或许能为读者在处理数组变换问题时提供新的思路--Qwen3

C# Algorithm Matrix Math Matrix Rotation C# Implementation

Creating a proxy to another URL with ASP.NET Core

本文介绍了一种在ASP.NET Core中实现HTTP代理的轻量级方案通过扩展方法将HttpContext转换为可重用的HttpRequestMessage并构建完整的请求转发与响应处理链。文章重点展示了两个核心方法CreateProxyHttpRequest与CopyProxyHttpResponse的实现逻辑:前者通过解析原始请求方法处理流式数据并复制请求头信息构建目标请求对象后者则通过处理响应状态码头信息及响应体实现透明返回。这种设计允许开发者在现有项目中灵活实现请求代理功能而无需部署独立的代理服务器。值得注意的是实现过程中针对不同HTTP方法的处理差异以及头信息的精细拷贝策略都体现了对HTTP协议的深入理解。当访问特定路由时请求将被代理至目标URL(如示例中的google.com)并保持浏览器端的无感知交互。这种技术方案为API调试中间件开发等场景提供了新的可能性但同时也引发思考:如何在实际项目中平衡代理功能的灵活性与安全性?如何处理更复杂的路由规则与身份验证需求?当请求链延长时如何优化性能瓶颈?这些问题都值得开发者结合具体场景深入探索与实践。--Qwen3

ASP.NET Core C# Reverse Proxy Web Proxy HTTP Proxy

Fix Azure Media Player can't play video in iOS mobile devices

当Azure Media Player在iOS设备上遭遇视频播放障碍时开发者往往陷入两难境地——同样的页面在Android设备流畅运行却在iOS设备遭遇无声的崩溃。这种跨平台的兼容性困境揭示了现代视频播放技术中隐藏的复杂生态。开发者需要直面iOS系统对HTML5视频的特殊处理机制其对autoplay和playsinline属性的严苛要求构成了第一道门槛而nativeControlsForTouch的禁用则暗示着系统级控件与自定义皮肤之间的权力博弈。更深层的技术迷局在于MIME类型的精确匹配当application/vnd.ms-sstr+xml与application/dash+xml的细微差异成为播放成败的关键时开发者不得不重新审视流媒体协议的底层逻辑。令人意外的是事件监听器这一常见调试手段在iOS设备上竟可能引发播放器的性能灾难这种反直觉的现象背后或许暗藏着iOS对JavaScript异步操作的优化策略。当开发者删除这些监听器后播放速度的质变性提升不仅提供了技术启示更抛出了一个值得深思的问题:在追求功能完善与性能优化的天平上我们是否过于依赖表面可控的技术方案?而当广告插件和字幕功能在iOS设备上成为播放障碍时开发者是否意识到跨平台开发中"功能迁移"的本质挑战?这些未解之谜仍在等待更多实践者的探索与验证。--Qwen3

Azure Media Player Azure Azure Media Service Video Playback iOS Devices Configuration Adjustments

微信的架构是如何实现分布式消息分发?

微信的分布式架构设计揭示了其背后复杂而精巧的系统逻辑。通过在全球部署的分布式服务器节点微信实现了消息的快速传递与容错能力。当用户在澳大利亚发送消息时数据无需绕行中国数据中心而是直接通过最近的节点完成传输这种设计不仅降低了延迟更让微信具备了“哪里不快加哪里”的弹性扩展能力。服务器选择算法通过动态匹配用户位置与节点状态确保消息路径最优而切换算法则让故障节点的用户能无缝迁移至可用服务器。用户发现机制则解决了好友消息路由问题——当用户A与用户B聊天时系统会自动定位他们共同的最近服务器完成消息中转。这种设计解释了为何微信要求手机扫码登录PC端:若PC与手机连接不同服务器消息将无法同步。而聊天记录仅保存在本地设备上也导致更换设备时数据丢失。微信的架构优势在于其高可用性与去中心化特征。当非洲用户激增时新增节点即可自动融入网络无需人工配置;当某地服务器故障用户会自动切换路径而不会感知中断。与集中式架构的QQ相比微信的分布式设计消除了单点故障风险但同时也带来了多设备同步的挑战。这种设计哲学让微信更像通信基础设施而非传统应用——不同地区的服务器可独立适配当地法规如某国要求数据存储即可在该国部署带审查功能的节点而无需修改整体架构。文章最后抛出值得深思的问题:产品经理是否真正理解技术约束?那些抱怨微信登录限制的PM或许未曾意识到分布式架构对数据同步的天然限制。微信的架构设计是否能为其他应用提供启示?当我们在讨论“发消息”这个简单功能时是否低估了其背后需要解决的复杂系统问题?--Qwen3

Web WeChat Distributed Messging IM Distributed Systems

Download any Azure Media Service video or live stream with FFmpeg.

本文提供了一种通过FFmpeg下载Azure Media Service视频或直播流的实用方法。核心在于将Azure提供的smooth streaming URL转换为m3u8格式并利用FFmpeg的协议白名单功能实现下载。操作流程包含三个关键步骤:首先安装FFmpeg并配置协议白名单参数,其次从目标视频获取以manifest结尾的URL,最后通过追加format=m3u8-aapl-v3参数构建完整下载命令。技术细节揭示了媒体服务协议转换的可行性——当视频流被转码为HLS格式时,其分片特性恰好匹配FFmpeg的copy编码策略。值得注意的是这种技术路径不仅适用于点播内容,对直播流同样有效。技术实现背后引发值得深思的问题:媒体服务协议设计的开放性边界在哪里?当标准协议与自定义扩展产生交互时,系统安全性是否面临新的挑战?而当视频分发机制与下载技术形成对抗关系时,我们该如何看待内容保护与技术自由之间的平衡?--Qwen3

Azure Media Player bash Azure Azure Media Service Download FFmpeg

EF second layer cache to enhance your SQL database performance based on Redis

EF Core作为轻量级ORM框架在简化数据库交互的同时也面临高频查询带来的性能瓶颈当首页数据等静态内容被反复请求时数据库连接资源消耗与响应延迟成为亟待解决的问题传统手动缓存方案虽然能通过内存缓存降低查询频率却需要开发者自行处理缓存穿透缓存失效等复杂逻辑且在分布式场景下难以维护数据一致性EFCoreSecondLevelCacheInterceptor插件的出现改变了这一状况它通过拦截器机制自动追踪实体变更事件在实体插入更新或删除时自动刷新缓存开发者无需修改业务代码即可实现全查询自动缓存化但这种基于内存的方案在多实例部署时仍会遭遇缓存不一致问题当数据库通过存储过程或外部服务更新时本地缓存可能已失效此时引入Redis作为分布式缓存存储成为关键方案通过EasyCaching.Redis集成EF二级缓存将缓存数据集中存储在Redis集群中无论应用实例如何扩展都能保证缓存数据的实时同步与一致性配置过程仅需简单修改Startup类添加Redis连接信息即可实现从内存缓存到分布式缓存的无缝迁移当你的应用已通过Redis实现缓存分布式化是否考虑过如何设计缓存预热策略?当Redis集群出现网络分区时如何保证缓存可用性?这些未解难题或许正是你优化系统架构的下一个突破口--Qwen3

ASP.NET Core C# SQL Server SQL Entity Framework Core Azure Redis Caching Cache

软件定制行业为何应当发展软件订阅制?

当前软件定制行业普遍存在买断制软件质量低下的顽疾表面繁荣下隐藏着代码漏洞功能残缺与责任真空的深层矛盾这种模式导致开发商在验收后即撤离维护责任荒废形成技术债务的恶性循环而订阅制的出现正在重塑这一产业格局通过按时间用量付费的模式软件服务从一次性交易转变为持续性承诺服务方必须承担可用性维护迭代等全生命周期责任这种商业逻辑倒逼开发者构建更健壮的代码体系某高校教务系统从买断制转向订阅制的案例揭示了变革的力量当服务方将软件部署在自建数据中心并承诺99%可用性时维护成本从单人负担转化为专业团队规模化运营DevOps自动化测试灰度发布等现代工程实践得以普及甲方则从维护噩梦中解脱风险控制从百万级买断转向可随时终止的年度订阅这种价值交换重构了供需双方的博弈关系定价策略的灵活性更激发市场活力例如按用户日均元的计费模式让试错成本降至极低阈值而数据主权与财务审计等现实障碍则成为订阅制普及的最后堡垒当微软用Office 365的订阅模式战胜盗版困局时中国软件行业却仍在买断制的泥潭中挣扎这种认知鸿沟暗示着软件服务化革命的深层阻力:企业是选择短期可控的买断成本还是长期可持续的订阅价值?当订阅制将软件从产品变成服务时我们是否正在见证一场超越代码本身的产业进化?--Qwen3

DevOps China Software Development SaaS Subscription Software Subscription

在前端哈希密码是否是个不错的方案?

在前端对密码进行哈希处理是否真的能提升安全性?这种看似巧妙的设计反而可能将服务器暴露在更危险的境地——当哈希计算在客户端完成时,服务器接收到的其实是经过加密的"明文",这反而让数据库中的哈希值成为可以直接调用的账号凭证。历史上腾讯QQ曾采用的双哈希策略揭示了这种设计的荒谬性:即便在前端完成第一层加密,只要攻击者能截获中间传输的哈希值,就能通过API直接完成身份冒用。这种安全方案的失效性暴露了一个本质问题:任何试图通过加密手段在传输层面上完全防御攻击的尝试,都可能在协议层面被更高明的攻击者绕过。随着TLS技术的普及,现代HTTPS协议通过复杂的握手机制和证书验证体系,让中间人攻击变得异常困难。但安全防线的漏洞往往出现在意想不到的角落——浏览器插件的权限滥用、用户对钓鱼网站的识别盲区,都在提醒我们:当技术防御达到极限时,安全防护的最后防线始终是用户的安全意识。在密码学技术不断进步的今天,我们是否真的需要重新思考"安全"的定义?当所有技术手段都被突破时,人类对抗网络威胁的核心能力究竟是什么?--Qwen3

Security Password Hash password security hashing algorithm manual in the middle attack