AI和机器学习中的Python基础库和框架

Python基础

基本语法

Python是一种高级的、解释型的编程语言,以其简洁清晰的语法和强大的灵活性而闻名。对于初学者来说,掌握Python的基本语法是学习其他高级概念之前的重要步骤。以下是Python基本语法的详细介绍:

变量类型

在Python中,变量不需要声明类型。当你赋值给变量时,Python会自动确定变量类型。

  • 数值类型:包括整数(int)、浮点数(float)和复数(complex)。
  • 布尔类型TrueFalse,用于表示逻辑值。
  • 字符串str):文本数据,可以使用单引号('...')或双引号("...")包裹。
  • 列表list):一个有序的集合,可以包含不同类型的元素,使用方括号([...])定义。
  • 元组tuple):与列表类似,但一旦创建便不能修改,使用圆括号((...))定义。
  • 字典dict):键值对集合,使用大括号({...})定义。
  • 集合set):无序且元素唯一的集合,使用大括号({...})定义,但不是键值对。

控制流

  • if语句:用于基于一定条件执行代码块。
if condition:# do something
elif another_condition:# do something else
else:# do another thing

for循环:用于遍历序列(如列表、字符串)或其他可迭代对象。

for element in iterable:# do something with element

while循环:在满足条件的情况下重复执行代码块。

while condition:# do something

函数定义

在Python中,使用def关键字定义函数,后跟函数名和圆括号内的参数列表。

def function_name(parameters):# function bodyreturn result

模块和包的导入

  • 模块是Python代码的文件,包含了函数、类和变量的定义,以及可执行的代码。
  • 是一种方式,用于将模块组织在一起。

使用import关键字可以导入模块或包中的特定功能。

import module_name
from module_name import function_name

示例代码

下面的示例展示了以上讨论的基本概念:

# 定义变量
my_int = 10
my_float = 20.5
my_str = "Hello Python"# 使用if语句
if my_int > 5:print("my_int is greater than 5")# 使用for循环遍历列表
my_list = [1, 2, 3, 4, 5]
for number in my_list:print(number)# 定义和调用函数
def add_numbers(a, b):return a + bresult = add_numbers(3, 5)
print(result)# 导入模块
import math
print(math.sqrt(16))

通过掌握这些基本概念,你就能开始使用Python进行各种各样的编程任务了。随着实践的增加,你将更加熟悉这门语言的高级特性和生态系统。

数据结构 

Python的内置数据结构包括列表(list)、元组(tuple)、字典(dict)和集合(set),每种数据结构都有其独特的特性和用途,以及一系列的操作方法。

列表(List)

列表是Python中最常用的数据结构之一,它是一个有序的元素集合,元素可以是不同类型的,列表是可变的,这意味着可以添加、移除或更改元素。

创建列表
my_list = [1, 2, "Python", 3.14]
访问元素
print(my_list[2]) # 输出 "Python"
修改元素
my_list[2] = "Hello"
常用方法
  • append():在列表末尾添加新的元素。
  • remove():移除列表中的一个元素。
  • pop():移除列表中的一个元素(默认是最后一个元素),并返回该元素的值。
  • extend():扩展列表,添加多个元素。
  • sort():对列表进行排序。

元组(Tuple)

元组与列表类似,但元组是不可变的,这意味着一旦创建,你就不能修改元组的元素。

创建元组
my_tuple = (1, 2, "Python", 3.14)
访问元素
print(my_tuple[2]) # 输出 "Python"
不可变性
my_tuple[2] = "Hello" # 会抛出TypeError

字典(Dict)

字典是一个无序的键值对(key-value pairs)集合,键必须是唯一的。

创建字典
my_dict = {"name": "John", "age": 30, "city": "New York"}

访问元素
print(my_dict["name"]) # 输出 "John"

修改或添加元素
my_dict["age"] = 25 # 修改 my_dict["gender"] = "Male" # 添加

常用方法
  • keys():返回字典中的键。
  • values():返回字典中的值。
  • items():返回字典中的键值对。
  • get():返回指定键的值。

集合(Set)

集合是一个无序的、不重复的元素集合。

创建集合
my_set = {1, 2, 3, "Python", 4.5}

添加元素
my_set.add(6)

移除元素
my_set.remove(2)
常用操作
  • 并集(union()|):合并两个集合。
  • 交集(intersection()&):找出两个集合共有的元素。
  • 差集(difference()-):找出一个集合有而另一个集合没有的元素。

数据结构的应用

每种数据结构都有其特定的用途:

  • 列表适合于需要经常修改元素的场景,如管理一个动态的元素集合。
  • 元组适合于不需要修改的元素集合,如函数返回多个值。
  • 字典适合于需要快速访问元素(通过键)的场景,如存储对象的属性。
  • 集合适合于需要进行集合运算,以及需要确保元素唯一性的场景。

通过熟悉这些内置数据结构及其操作,你可以更高效地解决各种编程问题。

面向对象编程

面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。在Python中,几乎所有的东西都是对象,具有属性(attributes)和方法(methods)。面向对象编程的主要概念包括类(class)、对象(object)、继承(inheritance)和多态(polymorphism)。

类(Class)和对象(Object)

  • 是创建对象的蓝图或模板,它定义了对象的属性和方法。
  • 对象是根据类定义创建的实例,它具有类定义的属性和方法。
定义类

使用class关键字定义类,类名通常采用大写字母开头的命名规则。

class Person:def __init__(self, name, age):self.name = name  # 属性self.age = agedef greet(self):  # 方法print(f"Hello, my name is {self.name} and I am {self.age} years old.")
  • __init__是一个特殊的方法,被称为类的构造器,用于初始化对象的状态。self参数代表类的实例本身。
创建对象

根据类创建对象非常简单,只需要像调用函数一样调用类即可。

person1 = Person("John", 30) person1.greet() # 输出: Hello, my name is John and I am 30 years old.

继承(Inheritance)

继承允许我们定义一个继承另一个类的所有属性和方法的类。

class Student(Person):  # 继承Person类def __init__(self, name, age, student_id):super().__init__(name, age)  # 调用父类的__init__方法self.student_id = student_iddef study(self):print(f"{self.name} is studying.")

  • 使用super()可以调用父类的方法。
  • 子类Student继承了Person类的所有属性和方法,并添加了自己的属性和方法。

多态(Polymorphism)

多态是指不同类的对象对同一消息作出响应的能力,即相同的方法或属性在不同的类中具有不同的实现。

class Teacher(Person):def __init__(self, name, age, subject):super().__init__(name, age)self.subject = subjectdef teach(self):print(f"{self.name} is teaching {self.subject}.")def greet(self):  # 重写greet方法print(f"Hello, I am {self.name}, the {self.subject} teacher.")

即使TeacherStudent类都有greet方法,但它们的行为是不同的。这就是多态的体现。

面向对象编程的好处

  • 封装:通过隐藏对象的内部状态和复杂性,同时提供操作这些内部状态的公共接口。
  • 继承:允许新创建的类重用现有类的代码。
  • 多态:允许不同类的对象对同一方法调用做出响应。

面向对象编程使得代码更加易于理解、维护和扩展,尤其是在处理大型软件项目时。通过使用类和对象,程序员可以更好地组织和模块化代码,同时实现代码重用。

Python库和框架

在AI和机器学习项目中,有几个Python库是必不可少的:

NumPy

NumPy(Numerical Python)是Python编程语言的一个库,用于支持大量的维度数组与矩阵运算,此外还提供了大量的数学函数库。NumPy是科学计算中一项非常基础的包,很多其他高级的科学计算包如Pandas、Matplotlib、SciPy等都是建立在NumPy的基础上的。

创建和操作数组

  • 创建数组:NumPy最重要的特性之一是其N维数组对象ndarray,可以非常快速灵活地处理大量数据。
import numpy as np# 从列表创建数组
a = np.array([1, 2, 3])# 创建特定的数组
zeros_array = np.zeros((2, 3))  # 创建一个2x3的全0数组
ones_array = np.ones((3, 2))  # 创建一个3x2的全1数组
empty_array = np.empty((2, 2))  # 创建一个2x2的空数组(内容随机)
range_array = np.arange(10)  # 类似于Python的range,但返回的是数组
  • 数组操作:NumPy提供了丰富的方法来处理数组,包括数组形状的改变、数组的合并和分割等。
# 改变数组形状
b = np.arange(6).reshape((2, 3))# 水平合并数组
c = np.hstack((a.reshape(1, 3), a.reshape(1, 3)))# 垂直合并数组
d = np.vstack((a, a))

数组索引、切片和迭代

  • 索引和切片:和Python的列表类似,但是NumPy数组可以进行更高维度的切片。
# 索引
print(a[2])  # 输出第三个元素# 切片
print(b[0, :])  # 输出第一行# 布尔索引
print(a[a > 1])  # 输出大于1的元素
  • 迭代:NumPy数组可以像列表一样进行迭代,对于多维数组,迭代是在第一维度上进行的。
for row in b:print(row)

线性代数、傅里叶变换和随机数生成

NumPy提供了大量的函数来进行科学计算。

  • 线性代数:NumPy的linalg模块提供了多种线性代数操作,如矩阵乘法、求解线性方程组、计算特征值等。
# 矩阵乘法
result = np.dot(a, b.T)  # 注意维度匹配# 求解线性方程组
x = np.linalg.solve(A, b)  # A是系数矩阵,b是结果数组
  • 傅里叶变换:NumPy提供了fft模块来进行快速傅里叶变换(FFT)。
# 快速傅里叶变换
frequencies = np.fft.fft(a)
  • 随机数生成:NumPy的random模块提供了大量生成随机数的函数。
# 生成随机数
random_array = np.random.rand(2, 3)  # 创建一个2x3的数组,数组中的数是从0到1的随机数

结语

NumPy是Python在科学计算中极为重要的一个库,提供了高性能的多维数组对象以及相应的操作。掌握NumPy不仅能够帮助你高效地进行数值计算,还是进一步学习其他科学计算库如Pandas和Matplotlib的基础。通过上面的介绍,希望你能有一个基本的了解并开始使用NumPy来进行科学计算。

Pandas

Pandas是Python中一个功能强大的数据处理和分析库,提供了快速、灵活、表达式丰富的数据结构,旨在使数据清洗、分析工作变得快速简单。它建立在NumPy库基础上,允许进行高效的数组计算。Pandas的核心数据结构是DataFrameSeries

DataFrame和Series数据结构

  • Series:一维数组,类似于NumPy的数组,但是可以有一个索引列,索引可以是数字或标签。
  • DataFrame:二维的、表格型的数据结构,每列可以是不同的值类型(数值、字符串、布尔值等)。它是由多个Series组成的,每个Series作为DataFrame的一列。
创建DataFrame和Series
import pandas as pd
import numpy as np# 创建Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])# 创建DataFrame
df = pd.DataFrame({'A': 1.,'B': pd.Timestamp('20230101'),'C': pd.Series(1, index=list(range(4)), dtype='float32'),'D': np.array([3] * 4, dtype='int32'),'E': pd.Categorical(["test", "train", "test", "train"]),'F': 'foo'
})

数据导入/导出

Pandas支持多种格式的数据导入和导出,包括CSV、Excel、SQL数据库和JSON等。

# 从CSV文件导入数据
df = pd.read_csv('example.csv')# 数据导出到CSV文件
df.to_csv('example_out.csv')

数据清洗和处理

数据清洗包括处理缺失数据、去除重复数据等。

# 删除含有缺失值的行
df.dropna(how='any')# 填充缺失值
df.fillna(value=5)# 去除重复数据
df.drop_duplicates()

数据筛选、排序和分组

# 筛选
df[df['A'] > 0]# 排序
df.sort_values(by='B')# 分组
df.groupby('E').sum()

数据合并、连接

Pandas提供了多种数据合并和连接的方法,如concatmergejoin

# 数据合并
pd.concat([df1, df2])# 数据连接
pd.merge(left, right, on='key')

创建透视表

透视表是一种可以对数据动态排布和汇总的表格格式。

df.pivot_table(values='D', index=['A', 'B'], columns=['C'])

结语

Pandas是数据分析和数据科学领域中不可或缺的工具之一,掌握Pandas不仅能够帮助你高效地进行数据处理和分析,还能够让你更好地理解数据本身。通过上面的简介,希望你能够开始使用Pandas来处理和分析真实世界中的数据。随着实践的增加,你会逐渐发现Pandas更多强大的功能。

MatplotlibSeaborn

Matplotlib和Seaborn是Python中最流行的两个数据可视化库,它们使得数据的可视化变得简单直观。Matplotlib是一个底层的库,提供了大量的基础绘图功能,而Seaborn则是建立在Matplotlib之上的高级接口,提供了更多的绘图模式和美化功能。

Matplotlib

Matplotlib是Python的一个绘图库,提供了大量的绘图方法,适用于创建静态、动态和交互式的图表。

基本用法
import matplotlib.pyplot as plt# 创建数据
x = [1, 2, 3, 4]
y = [10, 20, 25, 30]# 绘制简单的线图
plt.plot(x, y)
plt.show()# 绘制散点图
plt.scatter(x, y)
plt.show()# 创建多个子图
fig, ax = plt.subplots(2, 1)  # 创建一个包含2个子图的图表
ax[0].plot(x, y)  # 在第一个子图中绘制线图
ax[1].scatter(x, y)  # 在第二个子图中绘制散点图
plt.show()

Seaborn

Seaborn是基于Matplotlib的Python数据可视化库,提供了更高级的接口和默认的更美观的图表样式。Seaborn尤其适合用于探索和理解数据。

基本用法
import seaborn as sns
import pandas as pd# 创建DataFrame数据
data = pd.DataFrame({'x': [1, 2, 3, 4],'y': [10, 20, 25, 30]
})# 使用Seaborn绘制线图
sns.lineplot(x='x', y='y', data=data)
plt.show()# 绘制箱型图
sns.boxplot(x='x', y='y', data=data)
plt.show()# 绘制热力图
# 假设我们有一个相关性矩阵corr
corr = data.corr()
sns.heatmap(corr)
plt.show()

数据可视化的最佳实践

  • 清晰的标题和标签:确保你的图表包含一个清晰的标题和轴标签,这样观众可以立刻理解图表的内容。
  • 合适的图表类型:选择最能表达你数据点信息的图表类型。例如,用线图表示时间序列数据,用柱状图展示类别数据的比较等。
  • 简洁的图表:避免图表过于复杂或拥挤,这可能会使读者难以理解你想传达的信息。
  • 颜色的使用:合理使用颜色可以增强图表的表现力,但过多的颜色可能会分散观众的注意力。
  • 图例和注释:如果图表中包含多个变量或类别,确保使用图例来标示,必要时添加注释来解释特定的数据点或趋势。

通过使用Matplotlib和Seaborn,你可以创建出既美观又富有信息量的图表,有效地展示你的数据分析结果。随着你对这些库越来越熟悉,你将能够探索更多高级的功能和定制化的图表选项。

 机器学习和深度学习

掌握了Python及其在数据科学和数据可视化方面的关键库后,你可以进入机器学习和深度学习的世界。这需要理解和运用一系列的库,如Scikit-learn、TensorFlow和PyTorch,它们提供了实现复杂机器学习和深度学习算法的工具和接口。

Scikit-learn

Scikit-learn是Python的一个核心机器学习库,它支持包括分类、回归、聚类等在内的多种机器学习任务。它设计简洁,易于学习和使用,同时提供了大量的算法和工具,使得从数据预处理到模型训练和评估都变得非常简单。

主要特点和学习要点:
  • 数据预处理:Scikit-learn提供了大量的数据预处理功能,如标准化、归一化、编码类别特征等。
  • 分类和回归:支持多种算法,包括线性模型、支持向量机(SVM)、决策树、随机森林等。
  • 聚类:提供了K-means、谱聚类、DBSCAN等聚类算法。
  • 模型选择和评估:提供交叉验证、网格搜索等工具,以及准确率、召回率、F1分数等评估指标。

TensorFlow和PyTorch

TensorFlow和PyTorch是两个主流的深度学习框架,它们提供了构建和训练深度神经网络所需的复杂计算和自动求导能力。这些框架支持多种深度学习模型,如卷积神经网络(CNN)、循环神经网络(RNN)等,并且可以利用GPU加速计算。

主要特点和学习要点:
  • 基本概念:理解神经网络的基础,包括神经元、激活函数、前向传播和反向传播等。
  • 模型构建:学习如何使用TensorFlow或PyTorch构建网络模型,从简单的全连接网络到复杂的CNN和RNN。
  • 模型训练和评估:掌握如何使用这些框架进行模型训练、调参和评估。
  • 高级特性:探索更高级的功能,如自定义层、自动求导以及使用GPU加速。

实践和应用

理论学习与实践相结合是掌握机器学习和深度学习的关键。以下是一些建议:

  • 项目实践:通过项目实践应用所学知识,比如参与Kaggle比赛或完成特定的机器学习任务。
  • 阅读和研究:阅读相关论文和文章,了解最新的研究进展和技术动态。
  • 开源贡献:参与开源项目,了解社区的最佳实践和标准。

通过深入学习和实践,你将能够掌握使用Scikit-learn进行机器学习任务的能力,以及使用TensorFlow或PyTorch构建和训练深度学习模型的技能。这不仅能够让你在数据科学和人工智能领域更加专业,还能够为解决实际问题提供强有力的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/759889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机的事务管理系统

基于单片机的事务管理系统 摘 要 所谓事务管理系统就是主要用来做提醒,辅助以计时、秒表等的一个小系统。利用MCS51单片机即可完成系统硬件需要,成本低廉,程序简单,功能丰富实用,使用率广。根据题目的设计要求&#…

电商API接口淘宝/天猫按图搜索淘宝商品(拍立淘)API请求接入演示

"拍立淘"是淘宝提供的一种图片搜索功能,允许用户上传图片来搜索相似的商品。要接入淘宝的API进行按图搜索的功能,通常需要以下几个步骤: 注册账号:你需要有一个开放平台的账号,并成为开发者。 创建应用&…

30个业务场景的SQL优化

作为 SQL 专家,一定深知 SQL 查询优化对于数据库性能的重要性。在不同的业务需求场景中,SQL 查询可能因各种原因导致性能下降。以下是一些常见的业务需求场景、可能的性能问题原因、优化策略以及详细的示例解释,这是 V 哥验证过的经验&#x…

10 开源鸿蒙中芯片与开发板对应的源码(硬件相关的部分)

开源鸿蒙中芯片与开发板对应的源码(硬件相关的部分) 作者将狼才鲸日期2024-03-20 开源鸿蒙通过芯片仓存放指定芯片和指定开发板的代码,硬件相关的代码和纯逻辑代码是分开存放的 源码模块的组织结构在manifest这个Git仓库,这也是拉…

HW中常见的面试题

1.说说你在工作中或者SRC中挖到的比较典型的漏洞? 2.HW中如果已经发现红方IP地址,该如何溯源? 通过蜜罐系统或者安全设备锁定红方MAC,然后通过IP地址对,whois查询到该IP注册人以及注册邮箱,如果是发现邮箱是某厂商注册则可利…

SpringBoot-03 | SpringBoot自动配置

SpringBoot-03 | SpringBoot自动配置 原理分析代码示例源码剖析SpringBootConfiguration:组合注解,标记当前类为配置类ComponentScanEnableAutoConfigurationImport加载spring.factoriesrun初始化加载spring.factoriesspring.factories中的钩子类 网上盗…

部署DiffSynth-Studio实现视频风格转换

DiffSynth 是一个新的 Diffusion 引擎,可以实现图片和视频的风格转换。 拉取源码 git clone https://github.com/Artiprocher/DiffSynth-Studio/ 创建环境 conda env create -f environment.yml conda activate DiffSynthStudio 下载模型 将Stable Diffusion模…

组织学习的革命:打破常规,引领未来

组织学习的革命:打破常规,引领未来 一、组织学习的重塑:从传统到现代的转变 在知识经济的时代背景下,组织学习已经成为企业持续发展和竞争优势的关键。传统的组织学习方式,如培训、研讨会等,虽然在一定程…

NeRF——基于神经辐射场的三维场景重建和理解

概述 三维重建是一种将物理世界中的实体转换为数字模型的计算机技术。其基本概念是通过对物理世界中的物体或场景进行扫描或拍摄,并使用计算机算法将其转换为三维数字模型。抽象意义上的三维模型指的是:形状和外观的组合,并且可以渲染成不同…

阿里云服务器2核4G服务器收费价格表,1个月和一年报价

阿里云2核4G服务器多少钱一年?2核4G服务器1个月费用多少?2核4G服务器30元3个月、85元一年,轻量应用服务器2核4G4M带宽165元一年,企业用户2核4G5M带宽199元一年。本文阿里云服务器网整理的2核4G参加活动的主机是ECS经济型e实例和u1…

PyTorch学习笔记之激活函数篇(三)

文章目录 3、ReLU3.1 公式3.2 对应的图像3.3 对应的图像的代码3.4 优点与不足3.5 torch.relu()函数 3、ReLU 3.1 公式 ReLU函数的公式&#xff1a; f ( x ) { x , x > 0 0 , x < 0 f(x) \begin{cases} x&,x>0 \\ 0&,x<0 \end{cases} f(x){x0​,x>…

Vue 3响应式系统详解:ref、toRefs、reactive及更多

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

为什么延迟删除可以保证MYSQL 与redis的一致性?

看过很多保持MYSQL 与redis保持一致性的文章都提到了延迟删除&#xff0c;其实脱离任何业务场景的设计都是不切实际的&#xff0c;所以我会本着一个通用的读写场景去分析为什么延迟删除大概率可以保证MYSQL与redis的最终一致。 通常的读写场景 通常在使用redis作为读写缓存时…

Oracle SEQUENCE实现自增流水号,并设置定时任务每日清零

--创建增长序列 create sequence IMES.TEST_SEQ_PALLET minvalue 1 maxvalue 1336335 start with 1 increment by 1 nocache cycle order; --测试 select IMES.TEST_SEQ_PALLET.nextval from dual; --创建存储过程重置自增序列从1开始 IMES.TEST_SEQ_RESET_NEXT create or r…

无人机/飞控--ArduPilot、PX4学习记录(2)

这是一篇碎碎念&#xff0c;零零碎碎的记录了环境配置过程&#xff0c;仅供本人记录学习历程和参考。(记录的挺乱的&#xff0c;但是文章链接里的博客写的是真好) 本章主要完成的目标&#xff1a; 安装PX4 并 成功运行出3D无人机界面。 参考文章&#xff1a; 搭建PX4环境&…

虹科干货 | 网络取证分析和入侵分析培训重磅来袭,先来认真预习!什么是IOC?应该如何识别和响应?

文章速览&#xff1a; 网络安全中的IOC是什么&#xff1f;IOC和IOA有什么区别&#xff1f;IOC有哪些类型&#xff1f;IOC的常见实例有哪些&#xff1f;IOC解决方案和工具 近期&#xff0c;Wireshark 大学和 虹科Allegro Packets联合举办了网络取证和入侵分析线上培训课程&…

cv::Mat::depth() 获取图像的深度时返回值为0?

在OpenCV中&#xff0c;当使用函数比如 cv::Mat::depth() 获取图像的深度时&#xff0c;返回的整数值是代表数据类型的枚举值&#xff0c;而不是直接的比特数。这些枚举值定义在cv::Mat的数据类型中&#xff0c;用于描述像素值的数据类型及其位深度。如果cv::Mat::depth() 返回…

不同的Git仓库单独设置用户名和邮件地址

最近使用公司电脑将自己的一个私人项目推送到远程仓库&#xff0c;仓库显示的公司邮箱地址。因为设置了全局的username和usermail&#xff0c;这样就比较尴尬了。但是又不能频繁来回改用户信息&#xff0c;那么请看下面如何单独设置仓库的用户信息&#xff0c;让不同的仓库展示…

走上管理岗才发现:所谓工作能力强,就一点

走上管理岗才发现&#xff1a;所谓工作能力强&#xff0c;就一点 建立SOP‼️ - 我二本工科&#xff0c;电力专业&#xff0c;从现场工程师到新能源公司核心部门经理&#xff0c;入职公司三个月直接升职加薪。 - 我刚从工程师升至经理带团队的时候&#xff0c;经常靠加班续命&a…

zookeeper底层细节

zk 临时节点和watch机制实现注册中心自动注册和发现&#xff0c;数据都在内存&#xff0c;nio 多线程模型&#xff1b; cp注重一致性&#xff0c;数据不一致时集群不可用 事务请求处理方式 1.all事务由唯一服务器处理 2.将客户端事务请求转成proposal分发follower 3.等待半…