本文介绍了基于Vercel搭建的WebAPI服务,提供了多个API接口,包括获取舔狗日记、友链可访问性监控和Gist加速等功能。文章详细描述了各API的参数、使用方法及返回数据格式,并强调部分API仅供个人使用。作者还提到服务的性能和自建难度权衡,适合小型个人项目的需求。
本文通过源码分析详细解读了glibc中raise函数的实现及其作用时机,指出raise函数通过调用tgkill发送信号给线程或进程,并触发对应的信号处理函数。作者还对raise在单线程和多线程中的行为进行了对比,强调其多线程安全性及在信号处理中的关键作用。此外,文章结合abort函数和信号处理机制,进一步阐述了raise的使用场景及其在内核态与用户态切换中的处理时机。
本文介绍了基于Hugo静态网站生成器的搜索工具hugo-algolia2,该工具是对原hugo-algolia项目的改进版本,解决了原项目不支持中文分词、包含无用词等问题,并增加了自定义URI格式和文件后缀过滤等功能。文章详细说明了hugo-algolia2的安装方法、工作原理及如何将索引文件上传至Algolia,包括配置文件的设置和使用命令行工具的步骤。此外,作者还提供了通过GitHub Action自动生成和上传索引的示例配置。项目持续更新,采用ISC开源许可,适合需要改进Hugo站点搜索功能的开发者使用。
本文介绍了使用Docker模拟软件运行环境的实践方法,以解决glibc版本不兼容的问题。作者通过编写Dockerfile创建Ubuntu 20.04环境,并配置必要的依赖和脚本。文章详细说明了镜像构建、容器创建和运行的步骤,特别是如何映射本地USB设备以支持Android设备调试。此方法为解决运行环境问题提供了高效的解决方案。
本文探讨了C++中i++和++i在函数参数传递时的行为差异及其背后的机制。作者通过两个问题详细分析了参数计算顺序和自增操作的执行时机。首先,C++标准规定函数参数的入参顺序为从右往左,但参数的计算顺序未被明确规定,因此不同编译器(如gcc和clang)可能采用不同的计算顺序,导致相同代码在不同编译器下的输出结果不同。其次,作者通过类的示例和汇编代码分析,解释了i++和++i的计算时机:i++会先将当前值传递给参数,再执行自增操作,而++i则在传递参数前完成自增操作。文章通过汇编代码验证了这一行为,清晰地展示了寄存器的操作过程。本文对C++开发者理解编译器行为和避免潜在问题具有重要参考价值。
本文详细介绍了Linux内核中进程控制块(PCB)的结构和功能,重点解析了task_struct的各个组成部分,包括任务ID、亲缘关系、任务状态、权限、运行统计、调度相关、信号处理、内存管理、文件与文件系统以及内核栈等。文章通过代码示例和图解说明了进程的状态转换、优先级计算、信号处理机制以及内核栈的作用,帮助读者深入理解进程在内核中的管理方式及其与硬件资源的交互。
本文是《UCB CS61a SICP Python 中文》第四章的学习笔记,主要讨论了并行计算、信号量和协程的概念与实现。作者通过示例解释了信号量如何限制资源访问并避免过载,同时指出值为1的信号量等同于锁。协程部分重点介绍了Python中yield和send的用法,展示了协程在数据处理中的应用及其控制流的交互机制。文章最后总结了作者对SICP的初步学习体会,并计划未来进一步深入研究协程的原理与实现。
本文探讨了作者从功利主义到重视基础知识学习的转变过程,强调数据结构和算法是程序员的内功。作者通过面试经历认识到刷题和学习计算机理论基础的重要性,认为这些知识不仅能帮助通过面试,还能提升编程思维和代码质量。文章引用SICP的观点,鼓励程序员站在语言设计者的角度思考问题,从而在职业发展中走得更远。
本文记录了《UCB CS61a SICP Python 中文》第三章的学习内容,涵盖递归、数据递归和组合语言解释器的实现。作者通过代码示例展示了递归的基本原理及其在计算阶乘和斐波那契数列中的应用,并引入记忆化技术优化递归性能。此外,文章详细讲解了如何实现一个支持多种运算符的计算器语言,包括表达式解析、运算符执行和递归求解的过程。通过这些内容,作者强调了递归在程序设计中的重要性及其与动态规划的联系。