自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

星尘博客_CSDN镜像

一个Python爱好者学习之路

  • 博客(24)
  • 收藏
  • 关注

原创 搭建一个最简单的首页随机图片api

搭建一个最简单的首页随机图片api1. 引言首页的图片每天都是重样的是在是看得心烦意乱,就希望每次访问网页都能看到不一样的风景,既然是用Typora+PicGo写博客,图片通过JSDlivr全球分发(其实是心疼CDN的钱,毕竟每个月又拍云才给15G),那么我就直接通过一个简单的php实现访问GitHub中的随机图片不就能实现简单的随机图API了嘛?说干就干,咳咳,我们理一下思路:先找到我们需要的随机图<赛博朋克风格随机图32张>通过大名鼎鼎的tingpng实现压缩,毕竟图片1080

2021-01-24 00:31:25 3721 7

原创 我是如何写博客的—Typora+jsDelivr+Picgo+TinyPNG实现图片压缩加水印和全球CDN访问加速

我是如何写博客的—Typora+jsDelivr+Picgo+TinyPNG实现图片压缩加水印和全球CDN访问加速1. 引言从我第一次写博客到现在使用halo博客已经有很长一段时间了。最近一段时间的备案后,服务器已经从阿里云香港搬到了腾讯云广州,用的是轻量应用服务器1核2G5M40G的版本,每个月1000G流量,套了又拍云的CDN之后流量是完全够用的,访问速度也非常快。只不过博客中常常引用图片的问题比较麻烦,用腾讯云COS的话除了存储费用还需要支付流量费,图片量比较大的话被刷就又是一个很烦人的事情了

2021-01-24 00:29:27 1054

原创 面试官的灵魂拷问:i++;为什么不是线程安全的?

面试官的灵魂拷问:i++;为什么不是线程安全的?1. 引言之前面试的次数也不多,投过后端开发和测开岗基本也就是问一下Python的装饰器和面向对象等一些简单的问题。今天面了某车企(岗位是Java后端开发),面试官超Nice,在看完我的博客后,问了<Python的线程安全>中的一个问题(当时也没想那么多),感觉给自己挖了一个大坑(print("赶紧填坑"))面试情况如下:面试官:博客还不错,Python知识点整理的还不错((▽))面试官:我不懂Python唉,现在的版本是2.0还是多少

2021-01-23 04:21:38 312

原创 商城高并发秒杀系统架构分析和设计

引言高并发、高可用,都是面试的重点,如果你在简历中的项目与商城、秒杀相关,亦或是头部大厂、中厂,这样的问题你一定不会陌生。之前面试某头部大厂,一面、二面均提到了关于商城中库存一致性和高并发中防止超卖、少卖、减库存,大概率三面也会问相关问题,趁这个机会,整理一下关于高并发秒杀系统的知识点。这篇文章主要分析:如何在100万人同时抢一万张火车票时,系统提供正常、稳定的服务。1. 高并发系统架构高并发系统一般都会采用分布式集群部署,服务层上有层层负载均衡,并提供各种容灾手段(双活数据中心、异地多活、节点容

2021-02-24 01:01:17 1423

原创 Linux三剑客—grep、awk、sed基础教程

Python3中的正则表达式模式模式字符串使用特殊的语法来表示一个正则表达式:字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。多数字母和数字前加一个反斜杠时会拥有不同的含义。标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。反斜杠本身需要使用反斜杠转义。由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r’\t’,等价于 ‘\t’)匹配相应的特殊字符。下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参

2021-02-01 00:21:15 283

原创 SRE岗位理解(上篇)—读SRE实战手册有感

1. 引言什么是SRE呢?SRE全称为:Site Reliability Engineering,意为:站点可靠性工程师。SRE这个概念来自Google,Systems Engineer, Site Reliability Engineering是Google招聘给出的职位描述,我们具体看看这个岗位的要求:职位简介:Site Reliability Engineering (SRE) combines software and systems engineering to build and r

2021-01-30 04:23:50 3723 2

原创 python 基础知识梳理——Python协程

1. 引言在博文中<python 基础知识梳理——Python中的多进程和多线程>,我们还没有讲如何通过生成器来实现Python的协程。协程是一种实现并发编程的方式,当然多进程/多线程也是解决并发的手法,但是当同时连接到服务器的客户端达到一定的量级,进程的上下文切换占用了大量的资源,线程也顶不住如此巨大的压力了,此时我们就需要一个调度器来对任务进行调度,节省多线程中启动线程、管理线程、同步锁等各种开销。Nginx,在高并发下能够保持低资源、低消耗、高性能就是依赖调度器(例如:轮询算法)。在

2021-01-25 02:51:37 198

原创 python 基础知识梳理——Python中的多进程和多线程

python 基础知识梳理——Python中的多进程和多线程1. 引言进程是操作系统资源分配的基本单位,而线程是任务调度的基本单位。一个应用程序至少包括一个进程,而一个进程至少包括一个线程,线程的尺度更小每个进程在执行过程中都拥有独立的内存单元,而每个进程的多个子线程共享同一个内存单元2. 多进程2.1 Python中的多进程与multiprocess模块Python中的多进程编程主要依靠的是multiprocess模块,现在我们对比两个任务,一个采用多进程,另一个不采用多进程,输出运

2021-01-24 00:35:21 236

原创 python 基础知识梳理——Python中的垃圾回收机制

python 基础知识梳理——Python中的垃圾回收机制1. 引言当Python程序在运行的时候,需要在内存中开辟出一块空间,用来存放运行时产生的临时变量;计算完成后,再将结果输出到永久性存储器中。如果数据量过大,内存空间就有可能会出现OOM(out of memory),程序可能被操作系统终止。泄漏指的是:程序本身没有设计好,导致程序本身未能释放已经不再使用的内存内存泄漏指的是:在代码分配某段内存后,因为设计错误,失去了对这段内存的控制,从而造成的内存的浪费。我们只需要记住最关键的一句话:

2021-01-24 00:34:55 544

原创 python 基础知识梳理——Python中的上下文管理器

python 基础知识梳理——上下文管理器1. 引言在Python中,我们难免会操作文件、连接断开数据库,这些都是很常见的操作,在文件操作的时候,我们必须保证打开文件后调用close(),连接数据库后也需要close()操作,不然就容易造成资源泄露,轻则系统处理缓慢,重则系统崩溃。老规矩,我们从一个例子入手:for x in range(10000000): f =open('test.txt','w') f.write('hello')很明显,这样的疯狂的行为会导致错误,因为

2021-01-24 00:34:34 266 1

原创 python 源码分析——列表和元组的内部实现

python 源码分析——列表和元组的内部实现列表的内部实现listobject.h:https://github.com/python/cpython/blob/949fe976d5c62ae63ed505ecf729f815d0baccfc/Include/listobject.h#L23listobject.c: https://github.com/python/cpython/blob/3d75bd15ac82575967db367c517d7e6e703a6de3/Objects/list

2021-01-24 00:34:04 303

原创 python面向对象——三大特性

python面向对象——三大特性1. 引言Python是面向对象的语言,自然也支持面向对象的三大特性:封装、继承、多态。因为Python2已经较为古老,所有除非是阐述区别,大部分情况下Python2的经典类在博文中我都会忽略。2. 继承继承是一种创新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以称为基类或超类,新建的类称为派生类或子类。Python中的类的继承可分为:单继承和多继承优点:减少了代码的冗余实现了代码的重用,子类可以继承父类,并且可以继承多个父类(

2021-01-24 00:33:42 1182

原创 二叉树的前序、中序、后续、层序遍历原理及Python代码实现

二叉树的前序、中序、后续、层序遍历原理及Python代码实现正好前几天被一个学弟问了一下数据结构里的二叉树的问题,这毕竟也是老黄历了,翻了翻之前的博客,WordPress的数据库一团糟,当时写的好几篇文章全是乱码,明明密码是对的结果硬是提示错误。还是想办法重新写一个吧,之前用的C语言,也已经忘得差不多了,这次用Python重新写一写,顺带测试一下新的水印功能((#.#))1. 引言二叉树遍历:是指从根节点出发,按照某种次序依次访问二叉树中的所有节点,使得每个节点被访问一次且仅被访问一次二叉树的

2021-01-24 00:33:04 381

原创 队列、栈、堆的区别与联系并用Python实现

队列、栈、堆的区别与联系并用Python实现1. 引言我们先来谈一谈线性表,毕竟栈(堆栈)和队列是两种操作受限的线性表,堆就是树了。线性表:线性表是一种线性结构,它是一个含有n≥0个结点的有限序列,同一个线性表中数据元素类型相同并且满足“一对一”的逻辑关系。“一对一”的逻辑关系是指:对于其中的结点,有且仅有一个开始结点没有前驱&但有一个后继结点有且仅有一个终端结点没有后继&但有一个前驱节点其余所有的结点都有且仅有一个前驱和后继2. 队列和栈2.1 原理和特点

2021-01-24 00:31:01 433

原创 Linux常用命令实现汇总

Linux基本概念及常用命令实现汇总1. 引言Linux常用的发行版是Linux内核及各种应用软件的集成版本。各个版本的Linux发行版系统命令大同小异,这篇文章中,我们不讲区别,主要讲一些Linux的基本命令。基于的包管理工具商业发行版社区发行版RPMRed HatFedora / CentOSDPKGUbuntuDebian首先我们必须要会的一个命令是ssh命令,当你需要连接的服务器不多时,进行一些简单的管理再也不需要XSHELL等工具了,macOS提供

2021-01-24 00:30:11 673

原创 python 基础知识梳理——GIL(全局解释器锁)

python 基础知识梳理——GIL(全局解释器锁)1. 引言之前的博文中,整理了关于Python中的多进程、多线程,还有协程的基本使用,当时我们就讨论过,Python中的多线程其实并不是"真正"的多线程,为什么呢?这就和GIL离不开关系了,下面我们通过几个列子来看一看Python中的GIL是如何影响Python中多线程的使用的。1.1 为什么变慢了?import timedef Countnumber(n): while n > 0: n -= 1start =

2021-01-23 04:37:52 190

原创 python 基础知识梳理——字典和集合

python 基础知识梳理——字典和集合字典和集合基础字典是由键(key)和值(value)配对组成的元素的集合(在Python3.7之后字典有序成为了语言特性,因此3.6中无法保证其有序性),而Python3.6之前是无序的,其长度大小可变,元素可以任意地删减和改变。相对于列表和元组,字典的性能更优,特别是对于查找、添加和删除操作,字典都能在常数时间复杂度内完成。集合和字典基本相同,唯一的区别是 :集合没有键和值的配对,是一系列无序的、唯一的元素组合。字典和集合的创建,通常有如下几种方式:d1

2021-01-23 04:37:00 432

原创 python 基础知识梳理——装饰器

python 基础知识梳理——装饰器装饰器一直都是Python中非常有用的一个特征,在后端开发的Django框架中,比如日志、缓存等等的任务中都会用到。函数 -> 装饰器函数核心def get_message(message): return 'Got a message:'+messagedef root_call(func,message): return (func(message))print(root_call(get_message,'hello world

2021-01-23 04:36:27 164

原创 python 基础知识梳理——列表和元组

python 基础知识梳理——列表和元组列表和元组列表list和元组tuple都是可以一个可以用来放置任意数据类型的有序集合。list1 = [1,2,'hello','world']# 列表中含有int类型和string类型的元素print(list1)[1,2,'hello','world']tuple1 = ('json',2) # 元组中含有int类型和string类型的元素ptrint(tuple1)('json',2)区别:列表是动态的,长度大小不固定,可以随时的增加、删

2021-01-23 04:35:39 185

原创 python 基础知识梳理——函数

python 基础知识梳理——函数函数基础上来先看一个简单的例子吧def sum_numbers(a,b): return a+bresult = sum_numbers(3,5)print(result)# 输出8在调用函数时,必须在函数调用前声明函数,不然的话可能会报错。result = sum_numbers(3,5)def sum_numbers(a=0,b=0): return a+bprint(result)# 输出NameError:name 'sum_nu

2021-01-23 04:35:10 201

原创 python 基础知识梳理——迭代器和生成器

引言for i in [1,2,3,4,5,6]: print(i)这是一个非常简单的for in语句,什么样的对象可以被用来迭代呢?容器、可迭代对象、迭代器在Python中一切皆是对象,对象的抽象就是类,而对象的集合就是容器。列表list:[0,1,2],元组tuple:(0,1,2),字典dict:{0:0,1:1,2:2},集合set:set{0,1,2}都是容器。容器可以想象成各个元素在一起的单元,不同容器的区别在于内部数据结构的实现方法,然后,针对不同的场景,可以选择适合的不同时间

2021-01-23 04:33:30 162

原创 Docker基础命令

Docker基础命令入门1. 引言Docker是一个虚拟环境容器,可以将开发环境、代码、配置文件等一并打包到容器中,在Mac、Linux、Windows中发布,在开发中,经常会遇到配置环境的问题,Docker相比于虚拟机更轻巧快速,它的可移植性和轻量级的特性,还可以使得我们轻松的完成动态管理的工作负担,并根据业务指标需求,实施扩展或拆除应用程序和服务。Docker的三个基本概念:1.镜像(Image):Docker的镜像概念类似于虚拟机中的镜像,是一个只读的模板,一个独立的文件系统,包括运行

2021-01-23 04:31:08 223

原创 Anaconda、PIP换源教程及常用命令,附重邮开源镜像加速校内访问

Anaconda、PIP换源教程及常用命令,附重邮开源镜像加速校内访问1.Anaconda简介Anaconda 是一个用于科学计算的 Python 发行版,支持 Linux, Mac, Windows, 包含了众多流行的科学计算、数据分析的 Python 包。Anaconda 安装包可以到 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载。TUNA 还提供了 Anaconda 仓库与第三方源(conda-forge、msys2、p

2021-01-23 04:29:51 716 2

原创 深入了解Python的import机制

深入了解Python的import机制1. 引言Python中官方的定义为:Python code in one module gain access to the code in another module by the process of importing it.在平常的使用中,我们一定会使用from xxx import xxx或是import xx这样的导包语句,假如你研究过Python中的包你就会发现,很多包中会包含__init__.py这样的文件,这是为什么呢?这篇博文中,我

2021-01-23 04:28:35 446 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除