软件工程
CGO封装CPP库的一些最佳实践
CGO封装CPP库涉及Go调用C++11 SDK的技术实践。核心要点包括:遵循最小化C ABI接口设计,避免使用SWIG生成桥接代码,采用批处理减少调用开销,优化数据拷贝策略,严格管理内存防止泄漏,并正确处理C++智能指针的引用计数问题,确保跨语言调用的安全性和性能优化。
2022年3月27日
Go常见并发模式
Go语言并发编程的核心在于合理运用各种并发模式。常见模式包括请求-接收模式、单一状态者模式、生产消费模式和Pipeline流水线模式等。这些模式通过goroutine和channel的配合使用,能够有效管理并发程序的状态和数据流,提升代码的健壮性和可维护性,帮助开发者构建高性能的并发应用程序。
2019年9月22日
Leetcode 989. Add to Array-Form of Integer
Leetcode 989题解实现数组形式整数加法算法。将非负整数X的数组形式与整数K相加,返回结果的数组形式。采用优化策略处理不同长度情况,时间复杂度O(N),空间复杂度O(1)或O(len(K))。通过原地修改和反转操作高效处理进位,支持大数运算场景。
2019年2月14日
Leetcode 985. Sum of Even Numbers After Queries
Leetcode 985题解分析,讲解偶数求和查询算法优化方案。通过预计算初始偶数和,避免每次查询重复遍历数组,实现O(N)时间复杂度和O(1)空间复杂度的高效解决方案。代码采用位运算优化奇偶判断,并特别注意负数取模运算的处理细节,提供完整的C++实现代码和性能优化思路。
2019年2月13日
poj 1979 Red and Black
基于POJ 1979 Red and Black问题的深度优先搜索算法解决方案。该算法通过递归遍历二维网格,统计从起始位置可达的所有黑色格子数量。程序采用DFS核心思想,结合方向数组实现四个方向的移动判断,有效解决了路径搜索和区域计数问题,是ACM竞赛中的经典图论题目。
2018年6月28日
无缓冲通道引发的BUG
Go语言无缓冲通道在并发编程中容易引发阻塞问题,特别是在MapReduce框架的容错处理阶段。无缓冲通道要求发送方和接收方必须同时就绪才能完成操作,否则会导致goroutine阻塞。通过调整WaitGroup完成顺序,将wg.Done()置于通道发送操作之前,可有效避免因接收方未准备就绪而造成的死锁问题。
2018年4月11日



