李歘歘的朋友圈

李歘歘的朋友圈

专注于计算机知识分享

编程 Cookbook【开发面试必备】导航页
编程 Cookbook Featured

编程 Cookbook【开发面试必备】导航页

🎉🎉 欢迎各位朋友来到CodingCookbook,我是🧑‍🍳主厨:李歘歘。 👯 编程Cookbook,我们的初衷和这个名字一样,像传统食谱给出具体的烹饪步骤和食材用量一样,精准的打造“编程食谱”。 🔭 这里专注于分享编程知识,包括但不限于编程语言知识,数据库,中间件等,如果你正在准备面试,需要这方面的准备,那么恭喜你,来对了!
6 min read
Goodnote【算法面试必备】导航页
Goodnote Featured

Goodnote【算法面试必备】导航页

🎉🎉 欢迎各位朋友来到Goodnote(好评笔记)。 👯 Goodnote(好评笔记),我们的初衷和这个名字一样,产出好评连连的笔记。 🔭 这里专注于分享人工智能知识点,包括但不限于人工智能、大模型、机器学习基础、深度学习、AIGC、多模态等内容,如果你是初学者,或者正在准备面试,需要这方面的准备,那么恭喜你,来对了! 🌱 本系列涵盖人工智能领域面试/学习过程中的众多相关知识点。
4 min read
计算机网络之TCP/UDP篇(下)
计算机网络

计算机网络之TCP/UDP篇(下)

大家好,这里是编程Cookbook。本文详细介绍计算机网络中的TCP/UDP协议相关的内容,包括单不限于基础概念、连接的建立与断开、TCP可靠传输的实现等。 @[toc] TCP 可靠传输机制 TCP 协议的可靠传输机制 TCP 通过以下机制保证可靠传输: 1. 序列号和确认机制: * 每个字节的数据都有一个唯一的序列号。 * 接收方通过发送 ACK 报文确认已收到的数据。 2. 超时重传: * 发送方在发送数据后启动定时器,如果超时未收到 ACK,则重传数据。 3. 流量控制: * 通过滑动窗口机制,接收方动态调整发送方的发送速率,避免接收方缓冲区溢出。 4. 拥塞控制: * 通过慢启动、拥塞避免、快速重传和快速恢复等算法,动态调整发送速率,避免网络拥塞。 5. 数据校验: * 使用校验和字段检测数据在传输过程中是否损坏。 6. 顺序传输: * 通过序列号保证
25 min read
计算机网络之TCP/UDP篇(上)
计算机网络

计算机网络之TCP/UDP篇(上)

大家好,这里是编程Cookbook。本文详细介绍计算机网络中的TCP/UDP协议相关的内容,包括单不限于基础概念、连接的建立与断开、TCP可靠传输的实现等。 @[toc] TCP/UDP 基础概念 什么是 TCP 连接? TCP(Transmission Control Protocol,传输控制协议)是面向连接的、可靠的、基于流的传输层协议。TCP 报文段如下所示: TCP 报文段的首部通常为 20 字节(无选项时),最大可扩展至 60 字节。具体结构如下: 字段 长度(字节) 说明 源端口(Source Port) 2 发送方的端口号(如 54321) 目的端口(Destination Port) 2 接收方的端口号(如
21 min read
计算机网络之HTTP篇(下)
计算机网络

计算机网络之HTTP篇(下)

大家好,这里是编程Cookbook。本文详细介绍计算机网络中的HTTP协议相关的内容,包括单不限于HTTP各个版本及其优势、请求和响应、HTTPS等。 @[toc] HTTP 是无状态协议,如何实现有状态的会话管理? HTTP 是无状态协议,意味着服务器不会保留客户端请求之间的状态信息。为了实现有状态的会话管理(如用户登录状态、购物车信息等),通常通过 Cookie、Session、Token、URL 重写 和 隐藏表单字段 等技术实现。 1. Cookie Cookie 是由服务器在客户端(通常是浏览器)上存储的一小段数据,它可以用于记录用户信息,并在同一站点的不同页面之间或跨会话维持状态。 Cookie 的特点 * 存储位置:存储在客户端(浏览器)。 * 数据大小:通常限制为 4KB 左右。 * 数据格式:键值对(key=value)。 * 生命周期: * 会话 Cookie(Session
36 min read
计算机网络之HTTP篇(上)
计算机网络

计算机网络之HTTP篇(上)

大家好,这里是编程Cookbook。本文详细介绍计算机网络中的HTTP协议相关的内容,包括单不限于HTTP各个版本及其优势、请求和响应、HTTPS等。 @[toc] HTTP协议 HTTP 1.0、1.1、2.0和3.0有什么区别? HTTP(HyperText Transfer Protocol)是用于Web通信的核心协议,历经多个版本的演进,旨在提升性能、安全性和可靠性。以下是HTTP 1.0、1.1、2.0和3.0的演变和进化过程: 1. HTTP 1.0 发布时间:1996年(RFC 1945) HTTP 1.0是第一个正式的HTTP版本,主要特点如下: 1. 无状态、无连接:每个请求-响应都需要单独建立TCP连接,请求完成后即关闭连接,导致开销较大。
39 min read
多模态论文笔记——CLIP
多模态论文

多模态论文笔记——CLIP

大家好,这里是Goodnote(好评笔记)。本文详细介绍这几年AIGC火爆的隐藏功臣,多模态模型:CLIP,通过对比学习进行图像-文本联合学习。 文章目录 * CLIP(Contrastive Language-Image Pre-training) * 1. CLIP 的核心思想 * 2. CLIP 的模型架构 * 2.1 图像编码器 * 2.2 文本编码器 * 2.3 对比学习机制 * 2.4 对比损失(Contrastive Loss) * InfoNCE * 图像编码器损失函数 * 文本编码器损失函数 * 总损失函数 * 2.5 共享嵌入空间 * 3. CLIP 的训练方式 * 4. CLIP 的推理过程 * 4.1 图像分类 * 4.2
12 min read
多模态论文笔记——ViT、ViLT
多模态论文

多模态论文笔记——ViT、ViLT

大家好,这里是Goodnote(好评笔记)。本文详细介绍Transformer架构在计算机视觉方面的成功模型,将Transformer引入图像领域:ViT、ViLT。 文章目录 * ViT * 1. ViT的基本概念 * 2. ViT的结构与工作流程 * 1. 图像分块(Image Patch Tokenization) * 2. 位置编码(Positional Encoding) * 3. Transformer 编码器(Transformer Encoder) * 4. 分类标记(Classification Token) * 3. ViT的关键组件 * 1. 图像分块(Patch Embedding) * 2. 多头自注意力机制(Multi-Head Self-Attention) * 3. 位置编码(Positional Encoding) * 4. ViT与CNN的对比 * 5. V
18 min read
深度学习笔记——归一化、正则化
深度学习

深度学习笔记——归一化、正则化

深度学习笔记——归一化、正则化 大家好,这里是Goodnote(好评笔记)。本笔记介绍深度学习中常见的归一化、正则化。 文章目录 * 各种优化的归一化介绍(本质上进行标准化) * 普通归一化过程 * 1. 确定归一化范围 * 2. 计算均值和方差 * 3. 标准化 * 4. 缩放和平移 * 普通归一化分类 * 1. 批归一化(Batch Normalization, BN) * 原理 * 优点 * 缺点 * 使用场景 * 2. 层归一化(Layer Normalization, LN) * 原理 * 优点 * 缺点 * 使用场景 * 3. 实例归一化(Instance Normalization, IN)
28 min read
深度学习笔记——优化算法、激活函数
深度学习

深度学习笔记——优化算法、激活函数

大家好,这里是Goodnote(好评笔记)。本笔记介绍深度学习中常见的优化算法、激活函数。 文章目录 * 优化算法 * 方法 * 梯度下降 (Gradient Descent, GD) * 动量法 (Momentum) * AdaGrad (Adaptive Gradient Algorithm) * RMSProp (Root Mean Square Propagation) * Adam (Adaptive Moment Estimation) * AdamW 优化算法 * 总结 * 经验和实践建议 * 使用 Adam 进行初始训练,之后用 SGD 进行微调 * 冷启动策略(Cold Start Strategy) * 大批量与小批量交替训练 * 学习率逐步衰减(Learning Rate Decay) * 总结 * 主要考虑的参数
42 min read
机器学习笔记——特征工程、正则化、强化学习
机器学习

机器学习笔记——特征工程、正则化、强化学习

大家好,这里是Goodnote(好评笔记)。本笔记介绍机器学习中常见的特征工程方法、正则化方法和简要介绍强化学习。 文章目录 * 特征工程(Fzeature Engineering) * 1. 特征提取(Feature Extraction) * 手工特征提取(Manual Feature Extraction): * 自动特征提取(Automated Feature Extraction): * 2. 特征选择(Feature Selection) * 1. 过滤法(Filter Methods) * 2. 包裹法(Wrapper Methods) * 3. 嵌入法(Embedded Methods) * 4. 其他方法 * 5. 选择方法的应用场景 * 总结 * 3. 特征构造(Feature Construction) * 4. 特征缩放 * 4.1
30 min read
机器学习笔记——损失函数、代价函数和KL散度
机器学习

机器学习笔记——损失函数、代价函数和KL散度

大家好,这里是Goodnote(好评笔记)。本笔记介绍机器学习中常见的损失函数和代价函数,各函数的使用场景。 文章目录 * 损失函数 * 一、回归问题中的损失函数 * 1. 均方误差(Mean Squared Error, MSE) * 2. 平均绝对误差(Mean Absolute Error, MAE) * 3. 对数余弦损失(Log-Cosh Loss) * 4. Huber 损失(Huber Loss) * 5. 平均平方对数误差(Mean Squared Logarithmic Error, MSLE) * 总结 * 二、分类问题中的损失函数 * 1. 0-1 损失(0-1 Loss) * 2. 对数损失(Log Loss)或交叉熵损失(
24 min read
设计模式之动作型
设计模式

设计模式之动作型

大家好,这里是编程Cookbook。本文是对设计模式中创建模式的详细讲解,共11种,分别是观察者模式、责任链模式、策略模式、模板方法模式、状态模式、迭代器模式、备忘录模式、命令模式、中介者模式、访问者模式、解释器模式。 常用动作型模式 观察者模式(Observer Pattern) 观察者模式是一种行为型设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会收到通知并自动更新。观察者模式的核心思想是解耦观察者与被观察者,使得它们可以独立变化。 组成成分 观察者模式通常包含以下角色: 1. 主题(Subject/Topic): * 维护一个观察者列表,并提供注册、删除和通知观察者的方法。 2. 具体主题(Concrete Subject): * 实现主题接口,存储具体状态,并在状态改变时通知观察者。 3. 观察者(Observer):
22 min read
设计模式之结构型
设计模式

设计模式之结构型

大家好,这里是编程Cookbook。本文是对设计模式中创建模式的详细讲解,共7种,分别是适配器模式、桥接模式、组合模式、装饰器模式、代理模式、外观模式、享元模式。 常用结构型模式 适配器模式(Adapter Pattern) 适配器模式是一种结构型设计模式,它允许将一个类的接口转换成另一个接口。适配器模式的核心思想是解决接口不兼容的问题,使得原本由于接口不匹配而无法一起工作的类可以协同工作。 组成成分 适配器模式通常包含以下角色: 1. 目标接口(Target): * 客户端期望的接口,定义了客户端需要使用的功能。 2. 适配者(Adaptee): * 需要被适配的类,通常是已经存在的类,但其接口与目标接口不兼容。 3. 适配器(Adapter): * 适配器的核心类,负责将适配者的接口转换成目标接口。 * 适配器可以是 类适配器(通过继承实现
18 min read
设计模式之创建型
设计模式

设计模式之创建型

大家好,这里是编程Cookbook。本文是对设计模式中创建模式的详细讲解,共5种,分别是单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式。 常用创建型模式 单例模式 什么是单例模式? 单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个 全局访问点来获取该实例。单例模式的核心思想是控制对象的创建过程,避免重复创建对象,从而节省资源并保证一致性。 单例模式的特点 1. 唯一性:在程序的整个生命周期里,该类只会有一个实例存在。 2. 全局可访问性:提供了一个能让所有代码都可以访问到唯一实例的全局访问点。 3. 延迟加载特性:在有需求的时候才去创建实例(比如通过懒汉式来实现这一特性)。 单例模式的使用场景 单例模式适用于以下场景: 1. 配置管理:系统中只需要一个全局配置对象,用于统一管理配置信息。 2. 日志记录:日志对象通常只需要一个实例,用于记录系统的运行状态。 3. 数据库连接池:数据库连接池通常只需要一个实例,用于管理数据库连接。 4. 缓存系统:缓存对象只
18 min read
设计模式概要介绍
设计模式

设计模式概要介绍

大家好,这里是编程Cookbook。本文是对设计模式的概要介绍,包括 23 种设计模式和一些设计原则。 优秀代码的特点 我们所说的优秀代码通常具有以下特点: 1. 可靠性、安全性:功能正确、运行稳定、确保安全。 2. 性能优化:时间复杂度优、空间复杂度优、资源利用高效。 3. 可维护性、可拓展性:低耦合高内聚、遵循设计原则和模式、易于修改扩展。 4. 可读性:命名规范、结构清晰、注释适当。 5. 可测试性:单元测试友好、可模拟隔离。 6. 兼容性:跨平台兼容、版本兼容。 设计模式基础概念 设计模式及其作用 什么是设计模式? 设计模式是解决软件设计中常见问题的经验总结,它提供了一套经过验证的、可重用的解决方案模板。设计模式并不是具体的代码,而是一种设计思想或方法论,用于指导开发者编写高质量、可维护、可扩展的代码。 设计模式的作用
28 min read
RPC概要讲解
RPC

RPC概要讲解

大家好,这里是编程Cookbook。本文概要介绍RPC(远程过程调用),包括其基础概念,工作原理,相关框架,并且与HTTP和MQ进行对比。 RPC基础概念 RPC 定义 RPC(Remote Procedure Call,远程过程调用)是一种 通信协议,允许程序调用另一台计算机上的函数或过程,就像调用本地函数一样,隐藏了底层网络通信细节。 主要作用 1. 简化分布式系统开发: * RPC 使得开发者可以像调用本地函数一样调用远程函数,无需关心网络通信、数据序列化、反序列化等细节。 * 开发者可以专注于业务逻辑,而不必处理底层的网络编程。 2. 提升代码复用: * 通过 RPC,不同的系统或服务可以共享相同的函数或服务,避免了重复开发。 * 例如,一个通用的用户认证服务可以被多个不同的应用调用。 3. 增强系统扩展性: * 通过增加远程服务的
32 min read
Golang——Channel
Go语言

Golang——Channel

大家好,这里是编程Cookbook。本文详细介绍Golang的数据类型channel,包括基本概念,源码,常见问题及其解决并发。 基本概念 定义 * Channel 是 Go 语言中用于实现协程(goroutine)之间通信的核心机制。通过 channel,可以在协程之间通过数据传递实现同步。Go 的并发编程依赖 CSP(Communicating Sequential Processes)模型,强调“通过通信共享内存,而不是通过共享内存来通信”。 优势 Goroutine 解放了程序员,让我们更能贴近业务去思考问题。而不用考虑各种像线程库、线程开销、线程调度等等这些繁琐的底层问题,goroutine 天生替你解决好了。channel 的灵活性和扩展能力使其成为 Go 并发编程的核心工具,而非单纯的同步机制。 * Channel 的组合能力: channel 可以将多个 goroutine 的结果汇集到一个统一的 channel 中,主协程可以从这个
17 min read
Golang——rune和byte
Go语言

Golang——rune和byte

大家好,这里是编程Cookbook。本文详细介绍Golang中的两种字符类型rune和byte,介绍他们的区别,编码方式和简单的使用。 在Go语言中,rune和byte都是表示单个字符的类型,但它们有一些关键的区别。 byte 类型 byte 是 uint8 的别名,即一个 8 位无符号整数,表示一个字节,范围是 0 到 255。 * byte 用于表示 UTF-8 编码中的 字节,适合处理字节流和 ASCII 字符。 字符占用字节数: * ASCII 字符(0-127)占用 1 字节。 * 常见的字符,如拉丁字母、标点符号,占用 1 字节。 * 中文等非 ASCII 字符会占用 3 字节。 byte 表示:
7 min read
Golang——hashmap
Go语言

Golang——hashmap

大家好,这里是编程Cookbook。本文详细介绍golang的哈希表的底层实现、扩容机制、插入查询过程以及并发安全性。 定义 字典(Map)类型其实是哈希表(Hash Table)的一个实现。字典用于存储键-值对的无序集合。 Key无序性 为什么 map 的 key 无序? 1. 扩容后键重新分布:键值对的存储位置随着扩容发生显著变化。 2. 随机化遍历起点:遍历时从随机 bucket 和随机 cell 开始,避免返回固定顺序。 3. 防止误解:杜绝程序员误以为 map 有固定的遍历顺序,避免潜在错误。 4. 语言特性:从 Go 1.0 起就设计为无序,以保持哈希表特性的一致性。 Key唯一性 注意: 同一个字典中的每个键都是唯一的。如果我们在向字典中放入一个键值对的时候其中已经有相同的键的话,那么与此键关联的那个值会被新值替换。 Key可比性
14 min read
Golang——切片与数组
Go语言

Golang——切片与数组

大家好,这里是编程Cookbook。本文详细介绍Golang的切片与数组,包括他们的联系,区别,底层实现和使用注意事项等。 数组与切片的异同 相同之处 * 集合类型:数组和切片均属于集合类类型,其值均可用于存储某一种类型的元素。 * 内存布局:在内存中,数组和切片的元素存储是连续分配的。 * 访问方式:两者都可以通过下标来访问单个元素。 区别 * 数组: * 数组的长度是固定的,必须在声明时指定,且之后无法改变。 * 数组的长度是其类型的一部分,例如 [3]int 和 [4]int 是不同的类型。 * 由于长度固定,数组在实际开发中使用较少。 * 切片: * 切片更加灵活,是数组的封装和增强。 * 切片的长度可变,其类型字面量中只有元素类型,没有长度(可通过 make 函数初始化时指定长度和容量)。 * 切片的长度可随着添加元素而动态增长,但不会因移除元素而减少(直到没有引用时垃圾回收机制才会释放)。 切
9 min read
Golang——语言基础知识
Go语言

Golang——语言基础知识

大家好,这里是编程Cookbook。本文详细介绍Go语言的基础知识,包括数据类型,深浅拷贝,编程范式,Go语言是一种静态(静态类型语言 和 静态语言)强类型、编译型、并发型,并具有垃圾回收功能的编程语言。 1. Go 语言基础知识 下面将详细介绍 Go 语言的理论知识,包括数据类型、深拷贝与浅拷贝、以及如何在函数中传递数据。 数据类型 Go 语言是强类型的,意味着变量在使用时必须明确指定类型。Go 语言有很多内建的数据类型,主要可以分为以下几类: 基本数据类型 * 布尔类型(bool):表示真(true)或假(false)。 * 数字类型: * 整数:int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64。 * 浮点数:
20 min read
消息队列概要讲解(下)
消息队列(MQ)

消息队列概要讲解(下)

大家好,这里是编程Cookbook。本文概要介绍消息队列的核心原理和实现,以及常见问题及其解决方案等。本文不会过多的扩展详细的消息队列系统,如RocketMQ、RabbitMQ、Kafka等,这些会在后续系列文章中详细介绍。 由于篇幅问题,本文分为上下两节,上节内容参考历史文章:《消息队列概要讲解(上)》 消息传递模式 在消息队列的运行机制中,消费者从消息队列获取数据主要有两种方式:推(Push) 模式和 拉(Pull) 模式,它们在数据传递方式、实时性和资源消耗等方面有显著差异。 首先需要明确一下,推拉模式指的是Consumer和Broker之间的交互。Producer与Broker之间就是推的方式,即Producer将消息推送给Broker,而不是Broker主动去拉取消息。 如果需要Broker去拉取消息,那么Producer就必须在本地保存消息来等待Broker的拉取,如果有很多生产者的话,那么消息的可靠性不仅仅靠Broker自身,还需要靠成千上万的Producer。 概念介绍 1. 推模式(Push) 在推模式中,消息队列
27 min read
消息队列概要讲解(上)
消息队列(MQ)

消息队列概要讲解(上)

大家好,这里是编程Cookbook。本文概要介绍消息队列的核心原理和实现,以及常见问题及其解决方案等。本文不会过多的扩展详细的消息队列系统,如RocketMQ、RabbitMQ、Kafka等,这些会在后续系列文章中详细介绍。 消息队列(Message Queue,MQ) 是在微服务系统和分布式架构中实现异步通信的技术。是分布式系统中重要的组件,主要解决应用耦合,异步处理,流量削锋等问题,实现系统的高性能,高可用,可伸缩,使用较多的消息队列有RocketMQ、RabbitMQ、Kafka等。 为什么需要消息队列? 随着互联网的快速发展,技术架构从单体架构向微服务和分布式架构转变,服务间相互调用和依赖增多。需要一个工具来解耦服务之间的关系、合理控制资源的使用以及缓冲流量洪峰等,消息队列应运而生。 主要功能包括: * 异步处理:例如电商订单系统中,下单后订单处理、库存扣减、支付处理等环节可异步进行,提高系统响应速度。 * 应用解耦:让不同服务专注自身业务,通过消息队列交换信息,如营销系统和支付系统分开。 * 流量削锋:避免流量过大冲垮系统,例如电商大促期间
18 min read