电话
400 9058 355
News
必须显式指定std::launch::async才真正并发;未取值的future析构会触发std::terminate;捕获局部变量需确保生命周期安全,推荐值捕获或shared_ptr。
聚合是“我用你”,组合是“我就是你的一部分”;聚合中整体不new部分对象、部分可共享且独立存在,组合中整体内部new部分对象、部分不可共享且生命周期依附整体。
io.Copy是最稳妥的默认文件拷贝方式,自动处理缓冲、分块读写和错误传播,但不检查目录、不创建父目录、不保留权限与时间戳;Go1.19+推荐使用os.CopyFile。
直接起goroutine处理请求会导致内存暴涨、调度过载甚至OOM,因Go不限流且goroutine有栈开销;应使用带缓冲channel+固定worker池限流,并结合context与errgroup实现超时控制和优雅退出。
接口是契约声明而非模板,只定义行为(方法签名、常量、default/静态方法),不提供实现;解耦依赖接口而非具体类,需配合依赖注入(如构造器注入、工厂、ServiceLoader、Spring@Autowired)落地;default和private方法影响演进自由度,小而专的接口更利于组合与隔离;测试暴露设计缺陷,异...
不能直接用sprintf,因其不检查缓冲区大小易致内存越界、崩溃或远程代码执行;应使用snprintf并传入正确缓冲区总字节数,配合返回值判断截断与否,跨平台需注意实现差异。
构造函数不能是虚函数,因为虚函数机制依赖的虚表指针(vptr)在构造过程中尚未就绪,且构造语义与运行时多态冲突;析构函数则可以且常需声明为virtual以确保正确清理。
关键不是“要不要缓存”,而是“缓存什么、什么时候失效、谁来清理”;用sync.Map+文件修改时间做轻量级缓存适合中小规模Web服务。
邮箱:8955556@qq.com
Q Q:8955556