Ajax Zhan's Blog
Welcome!This is Ajaxzhan.
坚信:品味优先于执行,价值驱动下创造、系统工程保安全
持续跟进AI前沿研究,持续思考技术、产品与思维。
坚信:品味优先于执行,价值驱动下创造、系统工程保安全
持续跟进AI前沿研究,持续思考技术、产品与思维。
面对保研内卷加剧的焦虑,作者从斯多葛主义中寻求安宁、自由与镇定的个人哲学。斯多葛主张:安宁即入世与独处时内心平静;自由是独立思考与无约束时的自主;镇定需大事从容、顺遂时自律。核心“控制三分法”强调:专注完全可控之事(如内在目标与行动过程,而非结果),放弃完全不可控之事(避免杞人忧天),区分部分可控之事(关注过程而非结果)。此非逃避,而是积极行动中保持内心安定,为内耗者提供在纷扰中锚定自我的路径。
本文为《动手学设计模式》系列开篇,旨在系统梳理设计模式知识。设计模式是特定环境下解决重复问题的成功方案,广义为被反复使用的代码设计经验总结,分创建型、结构型、行为型三类,可提升开发效率、方便沟通并增强代码复用性与可扩展性。学习需结合UML(统一建模语言)理解类图及类间关系(关联、依赖、泛化、接口实现等),并遵循七大面向对象设计原则:单一职责(类职责单一)、开闭(对扩展开放、对修改关闭)、里氏代换(子类可替换父类)、依赖倒转(依赖抽象而非细节)、接口隔离(定制化接口)、合成复用(优先组合继承)、迪米特法则(降低对象间耦合)。专栏将结合案例与代码实现,帮助读者掌握设计模式的核心与应用。
8月中旬,借参加中国软件杯决赛之机,作者初游南京。因未进第一轮答辩,多出一天游玩时间,与队友打卡钟山风景区等经典景点。南京景点密集需预约,旅游旺季人潮汹涌,加之天气炎热,行程受限。梧桐大道意境美但人多,美龄宫因体验一般未细看,中山陵高处空旷感令人喜爱,孙中山纪念馆让作者对历史与伟人有更清晰认识,明孝陵建筑肃穆、石像路有趣,夫子庙因人山人海仅简单游览。饮食上,当地口味偏淡,鸭血粉丝颇受好评。作者感谢主办方、队友及老师,期待与南京再相见。
星优灵犀-基于讯飞AI的智适应学习平台’针对高等教育课前、课时、课后知识孤岛、评估低效等痛点,以人机共创与社群化学习融合为目标。项目采用前后端分离与微服务架构,深度整合讯飞星火大模型、语音合成等AI能力,构建“三大核心赋能+十大功能”体系:课前提供智能预习、备课及知识图谱;课时支持课堂回放、语句级社群智答;课后实现五维学情评估、闯关式复习及RAG资料问答。通过AI技术全流程渗透,助力高等教育数字化转型,让学习更智能、便捷、高效。
本文档为Linux+GPU服务器上的文档问答系统部署手册,作者结合自身踩坑经验编写,旨在帮助后续开发者顺利部署。核心步骤包括:修改`chatdoc/config.py`中的数据库与API配置;安装Anaconda并创建Python 3.10虚拟环境;配置清华源后安装requirements.txt依赖;根据CUDA版本安装Pytorch、Paddlepaddle及zh_core_web_sm模型;使用tmux管理会话确保服务持续运行;通过`export CUDA_VISIBLE_DEVICES`指定GPU卡号。手册还详细解决了星火Embedding源码修改(解决QPS限制和API版本问题)、Paddle报错处理(如libcudnn_ops_infer.so缺失)等常见部署问题,强调需注意环境变量配置与依赖版本匹配。
Go语言通过netpoll机制巧妙封装Linux Epoll,实现高性能网络编程。文章对比了BIO、NIO和Epoll的优缺点,指出Go结合了BIO的简洁性和Epoll的高效性:底层使用OS多路复用IO,协程层采用阻塞模型,将阻塞线程转为休眠协程。Go通过抽象层屏蔽不同系统差异(Linux的epoll、Mac的kqueue、Windows的IOCP),利用pollDesc等数据结构管理Socket状态,runtime自动监控Socket状态并调度协程休眠/唤醒,让开发者无需直接操作复杂系统调用即可享受高性能网络编程。
本文深入解析了Go语言Channel的核心概念与实现原理。Channel作为Go协程间的通信桥梁,通过"通信共享内存"的设计理念有效避免数据竞争,提升并发安全性。文章详细介绍了Channel的声明语法、基本操作及常见错误,并剖析其底层数据结构(环形缓冲区、等待队列、互斥锁等)。重点讲解了发送与接收数据的四种场景:直接传输、缓存操作、休眠等待及非阻塞模式(select、timer),揭示了Channel高效实现并发控制的内在机制,为开发者提供了清晰的并发编程实践指导。
Go语言读写锁(`sync.RWMutex`)通过分离读锁(共享)与写锁(互斥),优化了并发场景下的性能:无写锁时允许多读并发,有写锁时阻塞所有读写,有读锁时阻塞写锁。其核心数据结构包含互斥锁`w`、读写信号量`writerSem`/`readerSem`、读计数`readerCount`及等待读计数`readerWait`,通过状态转换实现锁的获取与释放。合理使用可显著提升读多写少场景的并发效率,但写入频繁时可能退化至互斥锁,需根据实际场景选择同步机制。
Go语言互斥锁`sync.Mutex`通过`state`(记录锁状态、唤醒标志、饥饿模式)和`sema`(休眠队列)实现并发控制。正常模式下,协程优先通过CAS尝试加锁,失败后自旋多次仍失败则入队休眠;解锁时直接释放或唤醒队列中协程。当协程等待超1ms进入饥饿模式,新协程直接入队,被唤醒协程优先获取锁,确保公平性。使用时需注意减少锁粒度、缩短持有时间,并用`defer`确保释放,避免性能瓶颈与死锁。
Go并发编程中,Atomic操作与sema锁是保障数据一致性的核心技术。Atomic操作通过硬件级锁(如LOCK指令)确保变量读写不可分割,解决全局变量自增等非原子性问题,提供增减、CAS等API;sema锁以uint32值控制并发数,>0时通过CAS获取/atomic释放,=0时退化协程休眠队列(AVL树管理),实现灵活并发控制。二者是sync.Mutex/RWMutex等高层锁的底层支撑,共同应对并发场景下的资源访问与数据一致挑战。