- 博客(72)
- 资源 (1)
- 收藏
- 关注
原创 Python中的并发编程
场景1:一个网络爬虫,按顺序爬取花了一小时,采用并发下载减少到20分钟场景2:一个App应用,优化前每次打开页面需要3秒,采用异步并发提升到每次200ms引入并发就是为了提升程序运行速度CPU密集型:也叫计算密集型,是指I/O在很短时间内就可以完成,CPU需要大量的计算和处理,特点是CPU占用率相当高,例如:解压缩/加密解密/正则表达式搜索IO密集型:系统运作过程中大部分的状况是CPU在等待I/O(硬盘/内存)的读/写操作,CPU占用率很低.例如:文件处理程序,网络爬虫程序,读写数据库程序。
2025-05-22 22:02:14
908
原创 Docker架构详解
是集中存放镜像文件的场所。仓库(repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。最大的仓库是DockerHub (https://hub.docker.com),存放了数量庞大的镜像供用户下载。可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、网络空间等)和运行在其中的应用程序。容器与镜像的关系类似于面向对象编程中的类和对象,镜像好比是类,那么容器则是对象。
2025-05-22 21:20:05
513
原创 python装饰器详解高阶
说到装饰器,我们要知道在python中所有的都是对象object,包括我们的函数也是object,函数既然是对象,那么python中的函数的传参可以是一个函数,函数的返回值也是一个函数。装饰器就是把函数作为参数,返回值来实现的一种功能。
2025-05-21 18:16:03
394
原创 python中的引用,浅拷贝,深拷贝
浅拷贝则是外层是新的对象,但是内层id还是一样的,只是外层拷贝,内层的数据还是指向同一个人对象。从中可以看出引用,是同一个对象,外层id和内部数据id都是一样的。深拷贝则是,外层数据,内层数据都是全新生成的对象。浅拷贝:是重新生成一个对象,但是只是一层拷贝。深拷贝:生成一个新的对象,递归拷贝里面的数据。引用:是同一个对象。
2025-05-20 12:01:14
222
原创 python中的迭代器
通过__iter__()方法,迭代器返回它自己,这使得迭代器对象也可以被用在支持迭代的上下文中,如for循环中。迭代器是一个可以记住遍历的位置的对象。迭代器的核心特性是它们是惰性的,只有在你请求下一个值时,才会计算和提供值,而不是一开始就计算所有的值。状态不变性:迭代器是有状态的,这意味着一旦迭代器的状态改变,比如你用next()取出下一个元素,它的内部计数器将改变,无法返回到之前的状态。不直观的长度计算:与列表或元组不同,你不能直接获取迭代器的长度,因为迭代器是惰性的,它们的元素是按请求生成的。
2025-05-12 09:07:41
552
原创 常见的Mysql索引失效场景有哪些?
2,隐式类型转换,会导致索引失效,例如 age字段类型是int,我们 where age = '1', 这样就会触发隐式类型转换。3,like通配符有时会导致索引失效,注意"ABC%"不会失效,"%ABC"索引会失效。6,索引字段上使用is null 或者 is not null可能会导致索引失效。5,索引字段上使用(!= 或者 <>,not in)时,会导致索引失效。7,mysql估计使用全表扫描要比使用索引快,则不使用索引。1,查询条件包含or,会导致索引失效。4,对索引字段进行函数运算。
2025-04-10 14:24:50
103
2
原创 Redis的三种集群模式
系统中只有一台redis服务器是不可靠的,容易出现单点故障,为了避免单点故障,可以使用多台redis服务器组成redis集群,redis支持三种集群模式.
2025-04-10 13:41:52
757
原创 八,<FastApi>请求体数据
当我们需要将数据从客户端发送给API时,你将其作为请求体发送,请求体是客户端发送给API的数据,响应体是API发送给客户端的数据。FastAPI基于Pydantic,Pydantic主要用来做类型强制检查(校验数据),不符合类型要求就会判处异常。
2025-04-07 16:09:29
562
原创 五,<FastApi>路由分发include_router
include_router在复杂的项目中我们可以用来管理路由,举例如下。我们可以通过include_router来统一在一个文件里进行路由管理。
2025-04-07 14:49:45
267
原创 四,<FastApi>路径操作装饰器方法参数简介
tags,summary和description可以做一些详细的功能介绍,对合作开发之间很友好。一, fastapi支持各种请求方式。二,路径操作装饰器方法的参数。
2025-04-07 14:23:12
226
原创 三,<FastApi>FastApi的quickstart
之前我们可能会用request模块或者postman等来做接口测试,而fastAPI给我们提供了docs可以来测试接口,对开发者很友好,这可能也是fastAPI受欢迎的原因之一。需要安装fastapi,uvicorn两个安装包,uvicorn用于启动fastapi程序。此外FastAPI有着很棒的交互式API文档,这一点很吸引人。我们将看到自动生成的交互式API文档。
2025-04-07 10:48:42
503
原创 python Socket编程
在 Python 中使用客户端/服务端 Socket 可以用于在网络上建立通信连接,实现数据的传输和交换。客户端通过 Socket 连接向服务端发送请求,服务端接收并处理这些请求,然后返回响应给客户端。客户端/服务端 Socket 在网络编程中被广泛应用,适用面相当广泛。
2025-04-07 09:35:42
375
原创 Redis是什么?架构是怎么样的?
我是一个程序员,维护了一个商品服务,它的背后直连Mysql数据库,假设商品服务对外每秒需要提供1万次查询,但背后的mysql每秒只能提供每秒5K次的查询,那mysql肯定顶不住,分分钟压垮,这种大流量场景很常见,比如双十一购物,春节抢车票.那么问题来了?有没有什么办法在Mysql不被压垮的同时,让商品服务支持每秒!万次的查询?当然有!没有什么是加一层中间层不能解决的,如果有,那就再加一层,这次我们要加的中间层就是Redis.
2025-04-03 17:02:39
821
原创 RabbitMQ详解,RabbitMQ是什么?架构是怎样的?
有些生产者想将消息发到一个Queue中,有些则是发给多个Queue中,甚至广播给所有Queue,于是我们还需要一个可以定制消息路由分发的策略的组件,交换器Exchange,将它与Queue绑定在一起,通过一个类似正则表达式的字符串,声明绑定的关系,让用户根据需要,选择要投递的序列,消息队列本质上就是类似链表的独立进程,链表里的每一个节点是一个消息,它介于生产者和消费者之间,在流量高峰时先慢慢暂存数据,然后再慢慢消费数据,可以很好的保护消费者,也就是削峰填谷,这个类似链表的进程就是队列。
2025-04-02 16:51:31
1533
原创 left join、right join和join的区别
left是左边的意思,join是连接的意思,连起来就是“左连接”,表1左连接表2,以左为主,表示以表1为主,关联上表2的数据,查出来的结果显示左边的所有数据,然后右边显示的是和左边有交集部分的数据。join,其实就是“inner join”,为了简写才写成join,两个是表示一个的,内连接,表示以两个表的交集为主,查出来是两个表有交集的部分,其余没有关联就不额外显示出来,这个用的情况也是挺多的,如下。结果集就是02和03部分。
2025-04-02 14:46:49
497
原创 如何理解mysql中except和in?
这个需求中,order表有10000条数据,而user表有100条数据。order表是大表,user表是小表。如果order表在左边,则用in关键字性能更好。因为如果sql语句中包含了in关键字,则它会优先执行in里面的子查询语句,然后再执行in外面的语句。假如有order和user两张表,其中order表有10000条数据,而user表有100条数据。前面提到的这种业务场景,使用in关键字去实现业务需求,更加合适。不管是用in,还是exists关键字,其核心思想都是用小表驱动大表。
2025-04-02 11:53:58
238
原创 SQL的优化技巧
sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到。如果某天你负责的某个线上接口,出现了性能问题,需要做优化。那么你首先想到的很有可能是优化sql语句,因为它的改造成本相对于代码来说也要小得多。那么,如何优化sql语句呢?这篇文章从15个方面,分享了sql优化的一些小技巧,希望对你有所帮助。1 避免使用。
2025-04-02 11:48:07
1035
原创 union all和union的区别
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。UNION用的比较多,union all是直接连接,取到得是所有值,记录可能有重复 union 是取唯一值,记录没有重复。UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。[SQL 语句 1][SQL 语句 2][SQL 语句 1][SQL 语句 2]
2025-04-02 11:14:01
554
原创 二,<FastApi>FastApi的两个核心组件
框架/工具包,非常适合在Python构建异步Web服务。Starlette是一个轻量级的。FastAPI的两个核心组件。
2025-04-02 09:37:57
239
原创 一,<FastApi>什么是FastApi?及框架介绍
FastAPI是一个现代、快速(高性能)的python web框架,基于标准的python类型提示,使用python3.6+构建的web框架。FastAPI是建立在Pydantic和Starlette基础上的,Pydantic是一个基于Python类型提示来定义数据验证,序列化和文档的库。Starlette是一种轻量级的ASGI框架工具包,是构建高性能Asyncio的理性选择。
2025-04-02 09:17:39
189
原创 Python之Celery
Celery是一个简单的,灵活且可靠的,处理大量消息的分布式系统,专注于实时处理的异步任务队列,同时也支持任务调度,Celery本身并不是任务队列,它是一个分布式队列的管理工具,Celery封装好了操作常见任务队列的各种操作,比如说从监听某个任务队列并从该队列中拿到数据进行消费。
2025-03-30 15:40:08
659
1
原创 数据库分库分表是啥?读写热点是什么?读扩散又是什么?
我们在上面的分库分表中,都用这个id去分,这其实就是所谓的分片键,实际上我们一般也是用数据库的主键作为分片键,这样理想情况下我们已知一个ID,不管是那个规则,我们根据ID都能很快的知道该去查询那张表。
2025-03-30 12:49:57
873
原创 python之GIL锁详解
多线程:只需要开1 个进程,这个进程开启 4 个线程,开启线程所消耗的资源很少,但是由于最终执行是只有一个 CPU 可以工作,所以最终消耗 40s 多的时间。3、在没有GIL锁的情况下,有可能多线程在执行一个代码的同时,垃圾回收机制对所执行代码的变量直接进行回收,其他的线程再使用该变量时会导致运行错误。由于GIL锁的存在,即使是多个线程处理任务,但是最终只有一个线程在工作,那么是不是多线程真的一点用处都没有了呢?2个线程都会去操作该数据,由于多线程对同一个资源的竞争,实际上引用计数为3,
2025-03-29 21:15:31
322
原创 python之kafka组件
Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。消息的发布者不会将消息直接发布给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接收感兴趣的消息。Kafka是一个开源的分布式事件流平台(Event Streaming Platform),被数千家公司用于高性能的数据管道、流分析、数据集成和关键任务应用。
2025-03-29 21:05:19
1672
原创 python之多线程,多进程理解
1. 多线程(Multithreading)线程是进程中的一个执行单元。一个进程可以包含多个线程,它们共享同一个内存空间,共同完成任务。在 Python 中,多线程通常用于 I/O 密集型任务(例如网络请求、文件读写等),因为这些任务往往会因为 I/O 操作而被阻塞。通过多线程,我们可以让程序在等待 I/O 操作时继续处理其他任务,从而提升程序的整体响应速度。
2025-03-29 16:02:40
1424
原创 python之协程
Tasks用于并发调度协程,通过asyncio.create_task(协程对象)的方式创建Task对象,这样可以让协程加入事件循环中等待被调度执行。事件循环就是把你创建好的函数,加入到任务列表,事件循环负责监听任务列表,当执行这个函数遇到费时操作时,事件循环就会控制跳到其他可执行的任务,当没有可执行的任务就会等待当前任务执行完毕,只有全部任务都执行完毕,才会退出循环。2,包装协程为任务(task1 = asyncio.create_task( func() ))检查协程-->让出控制-->等待协程。
2025-03-29 15:33:16
838
原创 为什么使用Flask + uWSGI + Nginx 部署服务?
其次,需要支持应用相关的规范,例如类库、安全方面的特性。但是理论上web server与应用程序之间是无法通信的,他们之间也需要有一个桥梁,这个桥梁就是uWSGI,uWSGI通过WSGI这个协议,将web server的请求转换成应用程序可以理解的request,与应用程序进行动态数据交互,将请求到的数据转换成web server可以理解的形式,由 web server将数据最终返回给请求的客户端。(1)既然客户端可以请求服务端的数据,那么客户端与服务端肯定是可以通信的,通信是由谁来完成的呢?
2025-03-28 12:52:15
564
原创 Flask项目部署:Flask + uWSGI + Nginx
pidfile=uwsgi.pid #进程号存储文件,若不存在则会自动创建,pid里面只记录一个进程号,若存在多个进程processes,则使用uwsgi命令通过uwsgi.pid文件停止、重启uwsgi服务不全。master=true #启动主进程,来管理其他进程,其它的uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程。daemonize=uwsgi.log #使进程在后台运行,并将日志打到指定的日志文件,文件若不存在则会自动创建。
2025-03-28 12:47:34
931
原创 C++多态
对于不同的交通工具,比如汽车和自行车,它们的移动方式是不同的。你需要一个具体的交通工具,比如“汽车”或“自行车”,它们根据“交通工具”的概念具体实现了移动的功能。想象一下,你有一个遥控器(这就像是一个基类的指针),这个遥控器可以控制不同的电子设备(这些设备就像是派生类)。无论是电视、音响还是灯光,遥控器上的“开/关”按钮(这个按钮就像是一个虚函数)都能控制它们,但具体的操作(打开电视、播放音乐、开灯)则取决于你指向的设备。当我们使用基类类型的指针或引用来调用虚函数时,实际调用的是对象的实际类型(派生类)
2024-12-15 13:09:38
689
原创 C++静态成员
静态成员在C++类中是一个重要的概念,它包括静态成员变量和静态成员函数。静态成员的特点和存在的意义如下:静态成员变量1. 定义:静态成员变量是类的所有对象共享的变量。与普通成员变量相比,无论创建了多少个类的实例,静态成员变量只有一份拷贝。2. 初始化:静态成员变量需要在类外进行初始化,通常在类的实现文件中。3. 访问:静态成员变量可以通过类名直接访问,不需要创建类的对象。也可以通过类的对象访问。4. 用途:常用于存储类级别的信息(例如,计数类的实例数量)或全局数据需要被类的所有实例共享。
2024-12-14 10:09:08
265
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人