摸鱼精选第 30 期

1. 强化学习 100 题

这是《深度学习入门 4 - 强化学习》的配套题目,最近推出了中文版可以在线测试,不过讲解视频还都是日文的。

强化学习(Reinforcement learning,RL)讨论的问题是一个智能体(agent) 怎么在一个复杂不确定的 环境(environment) 里面去极大化它能获得的奖励。通过感知所处环境的 状态(state) 对 动作(action) 的 反应(reward), 来指导更好的动作,从而获得最大的 收益(return),这被称为在交互中学习,这样的学习方法就被称作强化学习。

章节内容:

  • 第一章 老虎机问题
  • 第二章 马尔科夫决策过程
  • 第三章 贝尔曼方程
  • 第四章 动态规划
  • 第五章 蒙特卡罗方法
  • 第六章 TD 方法
  • 第七章 神经网络与 Q 学习
  • 第八章 DQN
  • 第九章 策略梯度方法
  • 第十章 更进一步

2. Dynamic member lookup in Swift

@dynamicMemberLookup 对简化访问内部私有对象的字段有用,还可以仿造 RXSwift 的.rx语法,做一些链式的 keyPath 语法调用。

但是也有缺点,引用网友的话:

这个只能设置属性,而不能调用方法,像设置 UIButton 的 title 就不太好做 还有注册 tableView cell 等等。

参考:

3. Ranges in Swift explained with code examples

Swift 的 Range 和 Objective-C 的 NSRange 不太一样。

4. Spring 中文文档

本站中的内容来源于 spring.io ,原始版权归属于 spring.io。本站内容由 Spring Boot 中文社区 进行翻译,整理。

5. 除了博客,当你有一台云服务器时还可以自部署哪些免费、开源的项目?

消息推送服务

除了系统自带的消息通知渠道之外,我们也可以自己拥有一个消息推送服务。基于自部署的消息推送服务,我们可以配合其他自动化工具来监控通知或是短信,实现消息转发等功能。

可选服务包括:

  • Gotify(Web / Android)
  • Bark(iOS)
  • ntfy(Web / Android / iOS)

n8n 类似于 iOS 的快捷指令,是一个开源、具备可扩展性、可自部署的工作流自动化工具,它不仅整合了国外 220 多种常用的应用服务,同时也拥有丰富的第三方模板社区以便人们分享自己的工作流。

但不同于移动端设备,n8n 是运行在服务器之上,在有效利用服务器资源的同时也可以让其他端设备享受到自动化的便捷。

Memos 是一款开源、可自部署的 Flomo 仿制项目,它大致还原了 Flomo 基本功能,并且也提供多用户注册;当然如果你像我一样只是自用,那么完全可以将其用作一个无话不说的「树洞」来使用。

6. DuckDB Sort 代码阅读和分析

DuckDB 是一款高性能分析型数据库。其 Sort 更是可圈可点,DuckDB 的 Sor 性能优于业界的其他数据库。

7. asio 调度器实现 - timer 实现详解

整体结构分为三层: 从下到上依次是:

  1. Core 部分的 timer_queue 实现
  2. 中间的 timer 调度器实现(多选一)
  3. 业务层使用的 service 和 timer 实现

8. How to use Abstraction and the Repository Pattern Effectively in your Flutter apps

架构不要过度设计,保持简单。

9. Flutter 适配遥控器方案

Flutter 用于桌面应用现在已经发布 1.0 的稳定版了,但是用于 TV 的遥控器适配,官方都没有宣布支持。作者的方案简单来说是用一个全局的遥控事件接收组件,统一 Focus 接收管理 ControlManager,然后在监听遥控事件的页面 mixin。

10. Advanced Fastify: Hooks, Middleware, and Decorators

Fastify 是一种日益普及的替代 Express 的选择(关于为什么可以参考这里)。Damilola 探讨了 Fastify 的一些高级概念,以及逐步从 Express 迁移到 Fastify 的办法。

11. axios-token-manager

管理 Axios Token 的缓存 — 用于在有效期内管理认证令牌的缓存,以及透明地刷新 或 恢复它们(例如当后端在有效期截至之前撤销了令牌时)。

12. 一文搞懂 Flutter 的手势事件——事件分发与冲突处理详解

Flutter 对于手势事件的处理流程的思路其实非常直观,在 down 事件时通过 hitTest()确定可能触发手势事件的 Widget 并给它们设置优先级,再调用 dispatchEvent 对手势事件进行分发并向竞技场注册成员等待判定。在 handleEvent()时会根据条件解决冲突判定手势的胜利者。 本文通过源码分析对 Flutter 的手势事件分发与冲突处理进行了说明,同时通过 GestureDetector 的示例分析了不同冲突的具体处理方式,以及如何对手势事件进行拦截,希望对大家理解 Flutter 的手势事件有所帮助。

13. iOS 开发学习系列(1)———Swift 语言入门

神农学 Swift 的笔记总结确实不错,是花了精力的,😄。

14. Swift 静态代码检测工程实践

本文主要讲解 swiftlint 的使用,尤其是大型的 Swift 项目里,通过 git diff 来比较当前修改的文件或新增的文件,减少 swiftlint 全量检测的耗时问题。

15. 百度工程师移动开发避坑指南——内存泄漏篇

介绍 Android/iOS 常见的内存泄漏问题。

16. 深入浅出 OkHttp 源码解析及应用实践

OkHttp 在 Java 和 Android 世界中被广泛使用,深入学习源代码有助于掌握软件特性和提高编程水平。

本文首先从源代码入手简要分析了一个请求发起过程中的核心代码,接着通过流程图和架构图概括地介绍了 OkHttp 的整体结构,重点分析了拦截器的责任链模式设计,最后列举了 OkHttp 拦截器在项目中的实际应用。

17. React 官方中文文档

新官网确实不错,各种示例讲解,对初学者很友好。

18. 用 VSCode 基于 Bazel 打造 Apple 生态开发环境

我只能说,为了 Apple 项目能用上 copilot,B 站也是够狠的。

19. iOS 客户端动图优化实践

主要优化手段以及目的:

  1. 使用动图逐帧加载的方案, 避免在动图展示之前就全部解码消耗太多内存, 并提升首帧耗时.
  2. 使用 Image 绑定帧缓存, 避免 YYAnimatedImageView 方案在滑动场景中不断加载新的动图并清空缓存导致一直在做解码, 从而引起 CPU 负载过高.
  3. 设置 SDImageCache 的内存缓存阈值, 避免 CPU 负载较高时 MemoryWarning 未及时触发, 导致 MallocException 崩溃.
  4. 使用 NSCache 代替 NSDictionary 做帧缓存, 避免系统压缩内存时带来额外 CPU 消耗, 并由系统自动释放帧缓存.
  5. 在内存不足导致解码失败时主动释放 SDImageCache 的 memoryCache, 避免其他业务申请不到内存导致崩溃.
  6. 设置开启图片下采样, 以合理使用内存.
  7. 在主线程滑动时, 暂停解码新的帧, 避免快速滑动场景浪费 CPU 资源.
  8. 完成图片通用加载组件, 在动图静态图复用的场景可以直接使用 QMAnimatedImageView, 组件不会造成额外性能消耗.

20. 快手 Swift 历险记之 Clang Module 带来的“坑”


// 开启Clang Module的import方式
@import OCPodA;//与#import <OCPodA/OCPodA.h>效果一致,Clang有做自动转换成import Module的功能。
@import SwiftPodB;

// 不开启Clang Module的import方式
#if __has_feature(modules)
@import OCPodA;
@import SwiftPodB;
#else
#import "OCPodA.h"
#import "SwiftPodB-Swift.h"
#endif

21. Pipeline 领域设计和多媒体框架介绍

Pipeline 作为多媒体框架引擎的核心思想,历史源远流长,从 Gstreamer 时代开始,逐渐大行其道,其设计思想在广义多媒体各个子领域都在广泛使用。

通过上面介绍的竞品多媒体框架,对比下来我们不难得出 pipeline 领域设计的关键点,但是最终 pipeline 领域设计还是要落实到具体的业务场景中,并结合具体的业务场景,设计出更加灵活、可靠、可拓展、可维护的媒体框架。

22. 抖音 Swift 编译优化 - 基于自定义 Toolchain 编译提速 60%

本文重点探讨全部模块化后带来的依赖解析瓶颈,主要包括对头文件增量编译分析等内容。

优化方案基于 Swift Toolchain 源码,本文不再探讨 Toolchain 相关基本概念及配置流程等,仅聚焦方案本身。

23. How to Create a Custom Debounce Hook with React

debounce 节流是 UI 的常规操作,要手写一个 debounce hook,说到底还是要有对 useEffect 的深刻理解。

import { useEffect, useRef, useState } from 'react';

const useDebounce = (value, delay = 500) => {
  const [debouncedValue, setDebouncedValue] = useState('');
  const timerRef = useRef();

  useEffect(() => {
    timerRef.current = setTimeout(() => setDebouncedValue(value), delay);

    return () => {
      clearTimeout(timerRef.current);
    };
  }, [value, delay]);

  return debouncedValue;
};

24. C++17’s Useful Features for Embedded Systems

与 C++14 相反,C++17 具有许多新功能,其中一些功能在嵌入式系统领域是有益的。

  • 二进制字面量

cpp uint8_t a = 0b110; // == 6 uint8_t b = 0b1111'1111; // == 255

  • constexpr 表达式
  • fold 表达式

cpp template<typename ...Args> int sum(Args&&... args) { return (args + ...); }

  • 嵌套命名空间

```cpp // C++11 namespace A { namespace B { namespace C { int i; } } }

// C++17 namespace A::B::C { int i; } ```

  • 增强的条件语句

```cpp if (int i = 4; i % 2 == 0) { cout << i << " is even number" << endl; }

switch (int i = rand() % 100; i) { default: cout << "i = " << i << endl; break; } ```

  • Inline 变量

cpp struct BabaMrb { static const int value = 10; static inline std::string className = "Hello Class"; }

25. HTTP/3 介绍文档

这是介绍 HTTP/3 以及其底层协议 QUIC 的文档,介绍它们的目的、原理、协议细节以及实现等。

还有一篇详细讲解HTTP//2的文档,主要内容包括该协议的背景、思想、协议本身的内容、对一些现有实现的探讨与对协议未来的展望。

26. GitHub Actions by Example

GitHub Action 教程,想用 GitHub 官方的 CI/CD 的同学可以了解一波。