1、数据类型:int,float,str,list,set,dict
字符串类型:(+)字符串连接。索引和切片操作提取子串。find()、index()查找子串的位置。replace()替换子串。upper()、lower()转换大小写。
列表:append()、insert()添加元素。remove()、pop()删除元素。索引进行赋值修改。sort()方法对列表排序。
元组:不可变类型。索引提取元素或切片提取子元组。
集合:add()添加元素。remove()删除元素。交集(&)、并集(|)、差集(-)。
字典:键直接赋值添加新的键值对。del或pop()删除键值对。键进行赋值修改值。键进行查找值。
布尔类型:条件判断,if语句的条件表达式。逻辑运算,如and、or、not等。
2、Django Orm框架
定义模型类,通过迁移将模型映射到数据库表。Django会自动创建或更新数据库表结构,还有查询API,可进行数据库操作。
3、mysql数据库
connect()连接,数据库的主机名、用户名、密码、数据库名等连接信息。创建游标对象,execute()执行SQL语句和fetchall()获取结果。commit()提交事务,更改生效。关闭游标对象和数据库连接。
4、redis
高性能键值对存储数据库,支持多种数据结构,缓存、会话存储、消息队列等。
数据存储在内存中。将数据持久化到磁盘。
多种数据结构,字符串、哈希表、列表、集合、有序集合等,
发布订阅模式,多个客户端订阅特定的频道,当频道发布消息时,订阅者会接收到相应的消息。
主从复制,将数据复制到多个从节点,实现数据的备份和高可用性。
分布式,将数据分布到多个节点,提高数据的处理能力和容量。
5、向量数据库
大语言模型通常将文本表示为向量,而向量数据库则用于存储这些文本向量,并支持基于余弦相似度进行相似度查询。
6、HTTP在客户端和服务器之间传输数据。
http.client模块和requests库用于发送HTTP请求,实现GET、POST、PUT等请求方式。Flask和FastAPI Web框架,用于创建HTTP服务器和处理HTTP请求。
创建HTTP服务器可以搭建一个能够监听HTTP请求的服务,可以接收来自客户端的HTTP请求,并返回相应的HTTP响应。HTTP服务器可以用于构建Web应用程序、提供Web服务接口、处理API请求等。可以更方便地创建一个高性能的HTTP服务器,处理复杂的路由、请求参数、认证等。
创建HTTP服务器使你的Python代码能够充当一个服务端,接收来自其他客户端的HTTP请求,并根据请求处理业务逻辑并返回响应。而不创建HTTP服务器则只能在客户端角色上使用HTTP客户端来发送请求,不能处理其他客户端的请求。
7、request 对象用于处理所有类型的HTTP请求, POST 是HTTP请求方法,向服务器提交数据。GET 从服务器获取数据。
8、深拷贝是创建一个新的对象,并递归复制所有子对象;浅拷贝是复制对象的顶层,子对象仍然是原始对象的引用。
深拷贝适用于需要完整复制整个对象结构的场景,而浅拷贝适用于对象内部没有嵌套对象或者嵌套对象共享同一个引用的场景。
9、进程:独立执行单元,适合处理CPU密集型任务,每个进程拥有独立的内存空间和系统资源。
线程:并发执行单元,适合处理I/O密集型任务,多个线程共享进程的内存空间,需要考虑线程同步和互斥问题。
协程:轻量级并发处理方式,适合处理大量并发的I/O密集型任务,不需要线程切换开销,手动控制任务切换。
进程:在一个视频编码应用中,可以使用多个进程并发地对多个视频文件进行编码。每个进程独立处理一个视频文件,拥有独立的内存空间和系统资源,加速视频编码过程。
线程:在一个聊天应用中,可以使用多个线程并发地处理用户发送的消息。每个线程负责处理一个用户的消息接收和发送,共享聊天应用的内存空间,提高消息处理能力。
协程:在一个并发下载器中,可以使用协程并发地下载多个文件。当一个下载任务遇到网络延迟时,可以手动切换到另一个任务,保持下载速度和效率。
10、装饰器:动态修改函数或类的行为,为其添加额外功能。
生成器:逐步产生数据,节省内存,适用于大量数据或无限数据流。
迭代器:遍历可迭代对象中的元素,逐个获取数据,适用于大型数据集或延迟计算数据。
装饰器:动态地修改函数或类的行为。它允许我们在不改变原始函数代码的情况下,为函数添加额外的功能,比如日志记录、权限验证、性能监控等。通过在函数定义前使用@decorator_name语法,我们可以将函数传递给装饰器函数,从而使其被装饰。在调用被装饰的函数时,实际上执行了装饰器中的包装函数,并在执行前后添加了额外的逻辑。
生成器:特殊的迭代器,用于逐步产生数据而不是一次性生成全部数据。在生成器函数中,我们使用yield语句来返回数据,每次调用生成器函数时,函数会从上次yield语句的位置恢复执行,继续生成下一个值。生成器适用于处理大量数据或无限数据流,因为它在每次需要数据时才生成,从而节省了内存。
迭代器:是一种对象,用于遍历可迭代对象中的元素。可迭代对象是指具有__iter__()方法的对象,而迭代器是通过实现__iter__()和__next__()方法来实现的。__iter__()方法返回迭代器对象本身,__next__()方法返回下一个元素。在循环中使用迭代器可以逐个获取元素,而不需要提前知道可迭代对象的长度。迭代器适用于处理大型数据集或延迟计算数据,因为它们允许在需要时逐个获取数据。
11、lambda函数是一种匿名函数,常用于简化代码和函数的定义。它可以作为函数参数传递、用于列表推导式、排序等场景。
12、Session通常用于存储较大量的用户信息和状态,而Cookies主要用于存储少量的临时数据。Session存储在服务器端,而Cookies存储在客户端浏览器中。
13、异常处理:程序运行时出现的错误或异常情况,避免程序崩溃。使用try、except、else和finally关键字来处理异常。
14、双引号和单引号:使用转义符和三引号都能在字符串中混用不同类型的引号
15、正则表达式是一种文本匹配工具,使用特殊字符和通配符描述匹配规则。它可以用于字符串的搜索、替换、验证和提取,常见应用包括表单验证、数据提取、日志分析等。.表示匹配任意字符,\d表示匹配数字,*表示匹配前一个字符的零个或多个,+表示匹配前一个字符的一个或多个。[abc]表示匹配字符'a'、'b'或'c'。{3}表示匹配前一个字符恰好出现3次,{2,4}表示匹配前一个字符出现2到4次。Python中使用re模块来支持正则表达式的功能。添加?后缀可以使匹配变为非贪婪匹配,尽可能地匹配更少的字符。
16、字符编码是将字符映射成二进制数据的规则,常见的编码包括UTF-8、UTF-16等。代码规范Python有PEP 8规范。
17、元类创建类的类,允许你控制类的创建和行为。通过继承type类,可以自定义元类。
__init__方法是用于初始化对象实例的,而元类的主要方法是__new__用于控制类的创建过程。
18、类函数是绑定在类上而不是实例上的函数,可以通过类直接调用。
实现方法:在函数前加上@classmethod装饰器,第一个参数通常是cls表示类本身。
19、SQL注入是通过在输入中插入特殊的SQL代码来绕过应用程序的安全检查,对输入进行充分的验证和转义处理,使用参数化查询或预编译语句,避免直接拼接SQL字符串。限制数据库用户的权限,防止SQL注入攻击。
20、*args:一个元组,可以接收传递给函数的所有位置参数。
**kwargs:一个字典,可以接收传递给函数的所有关键字参数。
21、200 OK:请求成功,正常返回。404 Not Found:请求的资源不存在。401 Unauthorized:请求未经授权。500 Internal Server Error:服务器内部错误。
22、闭包是指在函数内部定义的函数,并且这个内部函数可以访问外部函数的局部变量。闭包可以在函数内部创建一个私有的作用域,使得局部变量在函数执行完后仍然可以被内部函数引用和访问。实现函数工厂或者创建私有变量。实现数据封装,隐藏内部实现细节。
23、递归函数是在函数体内调用函数本身的函数,直到满足终止条件为止。如果不满足,则继续调用自身,并传入更小规模的参数,直到满足终止条件为止。
24、
Linux语句:ls: 列出当前目录的文件和子目录。cd: 切换当前工作目录。ssh: 安全登录远程服务器。cp,mv
SQL语句:select: 从数据库中检索数据。
insert into: 向数据库表中插入新数据。
update: 更新数据库表中的数据。
delete from: 从数据库表中删除数据。
25、asyncio模块来支持异步编程,通过事件循环(Event Loop)管理异步任务的执行。
asyncio异步编程:基于协程Corontine和事件循环event loop处理并发任务。允许程序在等待I/O操作(如⽹络请求、⽂件读写)时暂停执⾏,并在操作完成后恢复执⾏,从⽽实现⾮阻塞的异步编程。
互斥锁是一种进程同步的机制,用于保护临界区的资源。当一个进程获得互斥锁时,其他进程必须等待直到该进程释放锁。互斥锁保证了在任意时刻只有一个进程能够访问共享资源,从而避免了数据竞争和冲突。
Django
Django是一个基于HTTP协议的Web应用程序框架,遵循了HTTP请求-处理-响应的标准模式。
客户端(通常是Web浏览器)向Django服务器发起HTTP请求。请求可以是GET请求、POST请求或其他HTTP请求方法。
Django服务器接收到客户端发起的HTTP请求。
Django使用URL配置来将请求的URL映射到对应的视图函数。URL路由配置将请求的URL与视图函数进行匹配,确定请求应该由哪个视图函数来处理。
匹配的视图函数将接收到请求,并根据业务逻辑进行处理。视图函数可以从数据库中读取数据,执行业务逻辑,处理表单提交,等等。
视图函数处理请求后,会返回一个HTTP响应对象。这个HTTP响应对象包含了响应的内容、状态码、响应头部等。
Django服务器将视图函数返回的HTTP响应发送给客户端。
客户端(Web浏览器)接收到Django服务器发送的HTTP响应。
客户端根据HTTP响应的内容进行处理。如果响应是HTML页面,则客户端渲染页面显示;如果响应是JSON数据,则客户端可以解析数据用于显示或其他处理。
Redis
当使用Redis时,场景用法:
缓存数据:
例如,一个Web应用程序需要频繁地查询数据库获取用户信息,可以将这些查询结果缓存到Redis中,下次查询同样的信息时,先尝试从Redis中获取,如果存在则直接返回,避免了频繁查询数据库,提高了应用程序的响应速度和性能。
会话存储:
在一个分布式的Web应用中,用户登录后需要保持登录状态,在不同的服务器之间共享用户的会话信息是一种常见需求。可以使用Redis来存储用户的会话数据,比如存储用户ID、权限等信息,实现会话的统一管理和共享。
消息队列:
Redis的发布订阅功能可以用于构建简单的消息队列系统。例如,一个在线聊天应用中,用户发送的消息可以通过Redis的发布功能发布到指定的频道,然后其他用户通过订阅相应的频道来接收消息,实现即时通讯功能。
计数器和排行榜:
Redis支持对数据进行自增和自减操作,可以用来实现计数器和排行榜功能。例如,一个论坛应用可以使用Redis来记录帖子的点赞数和评论数,以及根据点赞数或评论数来生成排行榜。
分布式锁:
在分布式系统中,需要确保某个资源在同一时间只能被一个进程或线程访问。Redis可以用作分布式锁的实现,通过Redis的SETNX命令(当键不存在时设置键的值)来实现锁的获取,避免了并发访问导致的竞态条件。
地理位置服务:
Redis的有序集合可以用来存储地理位置信息,例如存储用户的经纬度坐标。然后可以使用Redis的地理位置功能来查找附近的用户或地点,实现附近的人或地点推荐功能。
Python数据结构操作方法:
列表(List)操作:
append():在列表末尾添加元素
extend():将另一个列表的元素添加到当前列表
insert():在指定位置插入元素
remove():删除列表中指定元素
pop():删除并返回列表末尾的元素
index():返回指定元素的索引
count():计算指定元素在列表中出现的次数
sort():对列表进行排序
reverse():反转列表中的元素
clear():清空列表中的所有元素
元组(Tuple)操作:
元组是不可变数据结构,只能获取元素,不能修改或删除元素。
字典(Dictionary)操作:
keys():获取字典中所有键
values():获取字典中所有值
items():获取字典中所有键值对
get():获取指定键的值,若键不存在返回默认值
pop():删除指定键并返回对应的值
popitem():随机删除并返回一个键值对
update():合并两个字典
clear():清空字典中的所有键值对
集合(Set)操作:
add():向集合中添加元素
remove():删除集合中指定元素,若元素不存在会报错
discard():删除集合中指定元素,若元素不存在不会报错
pop():随机删除并返回一个元素
clear():清空集合中的所有元素
union():返回两个集合的并集
intersection():返回两个集合的交集
difference():返回两个集合的差集
字符串(String)操作:
字符串是不可变数据结构,不能直接修改其中的字符,但可以通过切片和连接等方式得到修改后的字符串。
字节串(Bytes)操作:
字节串是不可变数据结构,可以使用切片和连接等方式得到修改后的字节串。
decode():将字节串解码为字符串
encode():将字符串编码为字节串
hex():将字节串转换为十六进制表示的字符串
join():连接多个字节串为一个字节串
列表推导式(List Comprehension):
列表推导式是一种简洁的创建列表的方式,通过对现有列表或可迭代对象进行处理,生成一个新的列表。
示例:new_list = [x for x in old_list if x % 2 == 0],将旧列表中的偶数元素筛选出来组成新列表。
字典推导式(Dictionary Comprehension):
字典推导式用于创建字典,类似于列表推导式,但使用大括号{}和冒号:来表示键值对。
示例:new_dict = {key: value for key, value in zip(keys, values)},根据两个列表创建字典。
集合推导式(Set Comprehension):
集合推导式用于创建集合,类似于列表推导式,但使用大括号{}。
示例:new_set = {x for x in some_list if x % 2 == 0},将列表中的偶数元素组成集合。
排序(Sorting):
sorted():返回一个排序后的新列表,保持原列表不变。
list.sort():对列表进行原地排序,修改原列表。
去重(Removing Duplicates):
可以使用set数据结构对列表进行去重,然后转回列表。
示例:unique_list = list(set(original_list)),将原列表中的重复元素去除。
切片(Slicing):
可以使用切片操作从列表、元组、字符串等序列类型中获取子序列。
示例:sub_list = my_list[start_index:end_index],获取my_list中从start_index到end_index-1的子列表。
查找(Searching):
in关键字:用于检查元素是否在列表、字典、集合等数据结构中。
list.index():返回指定元素的索引,若不存在则会抛出异常。
迭代(Iteration):
可以使用for循环对列表、元组、字典等进行迭代,依次访问其中的元素。
类型转换(Type Conversion):
可以使用int()、float()、str()等函数将不同类型的数据进行转换。
迭代器(Iterator):
迭代器是一种特殊的对象,可以使用iter()函数将可迭代对象转换为迭代器。
使用next()函数可以逐个获取迭代器的元素,当迭代结束时会抛出StopIteration异常。
生成器(Generator):
生成器是一种特殊的迭代器,可以使用函数和yield关键字来定义生成器。
生成器函数执行时会暂停,并在每次调用yield语句时返回一个值,保持函数的状态,方便迭代操作。
堆(Heap):
堆是一种特殊的二叉树结构,可以使用heapq模块来实现堆操作。
heapq.heappush():将元素插入堆中
heapq.heappop():从堆中弹出并返回最小元素
heapq.heapify():将列表转换为堆
命名元组(Namedtuple):
命名元组是一种可命名的元组,可以使用collections.namedtuple()来定义。
命名元组的字段可以通过名称来访问,比普通元组更具可读性。
数据转换和拆解:
zip():将多个可迭代对象打包成一个元组序列。
enumerate():同时遍历索引和元素。
dict():将一个包含键值对的序列转换为字典。
数据拼接和连接:
join():将字符串列表或元组连接成一个字符串。
+:可用于列表、元组、字符串等的拼接。
extend():可用于列表的扩展。
对象复制(Object Copying):
copy():用于创建浅拷贝。
deepcopy():用于创建深拷贝,递归复制所有嵌套对象。
过滤(Filtering):
filter():根据指定条件过滤可迭代对象,返回满足条件的元素。
映射(Mapping):
map():根据指定函数映射可迭代对象,返回映射后的结果。
匿名函数(Lambda Function):
lambda:用于创建简单的匿名函数,一般用于map()和filter()等函数中。
筛选(Filtering):
filter():根据指定条件过滤可迭代对象,返回满足条件的元素。
映射(Mapping):
map():根据指定函数映射可迭代对象,返回映射后的结果。
匿名函数(Lambda Function):
lambda:用于创建简单的匿名函数,一般用于map()和filter()等函数中。
内置函数(Built-in Functions):
len():返回对象的长度或元素个数。
sum():返回可迭代对象中所有元素的和。
max():返回可迭代对象中的最大值。
min():返回可迭代对象中的最小值。
any():判断可迭代对象中是否有任意一个元素为True。
all():判断可迭代对象中所有元素是否为True。
zip():将多个可迭代对象打包成一个元组序列。
特殊方法(Special Methods):
通过定义特殊方法,可以自定义类的行为,例如__len__()、__getitem__()和__iter__()等。
矩阵操作:
使用第三方库如numpy,可以进行矩阵的创建、操作和计算。
队列(Queue)操作:
使用queue模块可以实现线程安全的队列,如Queue、LifoQueue和PriorityQueue。
堆栈(Stack)操作:
使用list可以实现简单的堆栈数据结构,如append()和pop()。
JSON处理:
使用json模块可以进行JSON数据的编码和解码。
多线程同步:
使用threading模块提供的锁和条件变量,可以实现多线程的同步操作。
文件读写:
使用内置的open()函数和文件对象,可以进行文件的读写操作。
环境变量操作:
使用os模块可以访问和设置环境变量,如os.environ。
字节操作:
使用struct模块可以对字节进行打包和解包。
时间日期操作:
使用datetime模块可以进行时间和日期的处理。
数学运算:
使用math模块提供的函数可以进行各种数学运算,如四舍五入、取整等。
SQL语句:
创建数据库:
CREATE DATABASE database_name;
删除数据库:
DROP DATABASE database_name;
切换数据库:
USE database_name;
创建表:
CREATE TABLE table_name (
column1 datatype1 constraints,
column2 datatype2 constraints,
...
);
删除表:
DROP TABLE table_name;
插入数据:
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
更新数据:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
删除数据:
DELETE FROM table_name WHERE condition;
查询数据:
SELECT column1, column2, ... FROM table_name WHERE condition;
查询所有数据:
SELECT * FROM table_name;
查询数据并排序:
SELECT column1, column2, ... FROM table_name WHERE condition ORDER BY column1 ASC/DESC;
查询数据并限制数量:
SELECT column1, column2, ... FROM table_name WHERE condition LIMIT number;
查询数据并分组:
SELECT column1, column2, ... FROM table_name WHERE condition GROUP BY column1;
聚合函数:
SELECT COUNT(column1) FROM table_name; -- 统计行数
SELECT SUM(column1) FROM table_name; -- 求和
SELECT AVG(column1) FROM table_name; -- 平均值
SELECT MAX(column1) FROM table_name; -- 最大值
SELECT MIN(column1) FROM table_name; -- 最小值
连接查询:
SELECT column1, column2, ... FROM table1 INNER JOIN table2 ON table1.column = table2.column;
子查询:
SELECT column1, column2, ... FROM table1 WHERE column1 IN (SELECT column FROM table2 WHERE condition);
更新表结构:
ALTER TABLE table_name ADD column datatype constraints; -- 添加列
ALTER TABLE table_name DROP column; -- 删除列
ALTER TABLE table_name MODIFY column datatype constraints; -- 修改列定义
ALTER TABLE table_name CHANGE old_column_name new_column_name datatype constraints; -- 修改列名称和定义
创建索引:
CREATE INDEX index_name ON table_name (column1, column2, ...);
删除索引:
DROP INDEX index_name ON table_name;
事务处理:
START TRANSACTION; -- 开始事务
SQL statements...; -- 执行SQL语句
COMMIT; -- 提交事务
ROLLBACK; -- 回滚事务
多表的一些常见SQL语句:
连接查询:
内连接:
SELECT column1, column2, ... FROM table1 INNER JOIN table2 ON table1.column = table2.column;
左连接:
SELECT column1, column2, ... FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
右连接:
SELECT column1, column2, ... FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;
全连接:
SELECT column1, column2, ... FROM table1 FULL JOIN table2 ON table1.column = table2.column;
联合查询(UNION):
合并多个查询结果,要求查询结果的列数和数据类型必须一致。
SELECT column1, column2, ... FROM table1 WHERE condition
UNION
SELECT column1, column2, ... FROM table2 WHERE condition;
子查询:
在一个查询的WHERE或FROM子句中嵌套另一个查询。
SELECT column1, column2, ... FROM table1 WHERE column1 IN (SELECT column FROM table2 WHERE condition);
JOIN ON多个条件:
在连接查询时,可以根据多个条件进行连接。
SELECT column1, column2, ... FROM table1
INNER JOIN table2 ON table1.column1 = table2.column1 AND table1.column2 = table2.column2;
聚合函数和多表:
可以在联合查询或连接查询的结果上使用聚合函数。
SELECT column1, SUM(column2) FROM table1 GROUP BY column1;
多表排序:
可以在联合查询或连接查询的结果上使用ORDER BY进行排序。
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2
ORDER BY column1 ASC;
多表更新:
使用多表连接更新数据。
UPDATE table1 INNER JOIN table2 ON table1.column = table2.column
SET table1.column = new_value;
多表删除:
使用多表连接删除数据。
DELETE table1 FROM table1 INNER JOIN table2 ON table1.column = table2.column
WHERE condition;
多表计算:
在查询结果中使用子查询来计算多个表的数据。
SELECT column1, (SELECT SUM(column2) FROM table2 WHERE condition) AS total_sum
FROM table1 WHERE condition;
多表条件联接:
可以在连接查询时使用不同的条件进行关联。
SELECT column1, column2, ... FROM table1
LEFT JOIN table2 ON table1.column1 = table2.column1
RIGHT JOIN table3 ON table1.column2 = table3.column2
WHERE condition;
多表嵌套子查询:
在子查询中可以嵌套更多的子查询来实现复杂的数据筛选和计算。
SELECT column1, column2, ...
FROM table1
WHERE column1 IN (
SELECT column FROM table2 WHERE column2 IN (
SELECT column FROM table3 WHERE condition
)
);
多表联合排序:
可以在联合查询结果中使用ORDER BY对多个字段进行排序。
SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2
ORDER BY column1 ASC, column2 DESC;
多表分页:
可以使用LIMIT和OFFSET实现多表分页查询。
SELECT column1, column2, ... FROM table1
UNION ALL
SELECT column1, column2, ... FROM table2
ORDER BY column1 ASC
LIMIT 10 OFFSET 0; -- 第一页
多表事务处理:
使用事务处理来确保多表操作的原子性和一致性。
START TRANSACTION; -- 开始事务
SQL statements...; -- 执行SQL语句
COMMIT; -- 提交事务
ROLLBACK; -- 回滚事务
多表复制和备份:
可以使用INSERT INTO SELECT语句从一个表复制数据到另一个表,实现数据备份或数据迁移。
INSERT INTO table2 (column1, column2, ...)
SELECT column1, column2, ... FROM table1 WHERE condition;
多表索引优化:
对多表查询的字段创建合适的索引,提高查询效率。
CREATE INDEX index_name ON table_name (column1, column2, ...);
多表视图(View):
使用CREATE VIEW创建多表的虚拟视图,简化复杂的查询。
CREATE VIEW view_name AS
SELECT column1, column2, ... FROM table1
INNER JOIN table2 ON table1.column = table2.column;