自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

海哥python的博客

专注服务端技术分享

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

原创 Redis面试大全

Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。

2024-01-17 21:53:03 1079

原创 MySQL 面试题大全

索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B 树及其变种 B+树。更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。索引是一个文件,它是要占据物理空间的。顾名思义,就是最左优先,在创建多列索引时,要根据业务需求,where 子句中使用最频繁的一列放在最左边。

2024-01-17 18:53:04 1049

原创 使用docker-compose快速搭建ELK

ubuntu系统。

2024-01-12 17:18:17 1240

原创 python包管理工具:pipenv的基本使用

很多语言都提供了环境隔离的支持,例如nodejs的,golang的go mod,python也有virtualenv和pyvenv等机制。为了建立依赖快照,通常会用命令生成一个requirements.txt文件,在一些场景下这种方式就可以满足需求,但是在复杂场景下requirements.txt就力不从心了。

2024-01-12 17:16:21 961

原创 python tcp socket中实现SSL/TLS认证

官话说SSL是安全套接层(secure sockets layer),TLS是SSL的继任者,叫传输层安全(transport layer security)。说白点,就是在明文的上层和TCP层之间加上一层加密,这样就保证上层信息传输的安全。如HTTP协议是明文传输,加上SSL层之后,就有了雅称HTTPS。它存在的唯一目的就是保证上层通讯安全的一套机制。

2024-01-11 18:50:23 3403

原创 Explain详解与索引最佳实践

Mysql安装文档参考:https://blog.csdn.net/yougoule/article/details/56680952使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQLexplain 两个变种1. 会在 explain 的基础上额外提供一些查询优化的信息。紧随其后通过 show warnings 命令可以得

2024-01-11 18:39:37 1107 1

原创 kubeadm实际搭建多节点的Kubernetes集群

Kubernetes 定义了 CNI 标准,有很多网络插件,这里我选择最常用的 Flannel,可以在它的 GitHub 仓库里(会看到 Pod 运行在 Worker 节点上,IP 地址是“10.10.1.2”,表明我们的 Kubernetes 集群部署成功。你会注意到 Master 节点的状态是“NotReady”,这是由于还缺少网络插件,集群的内部网络还没有正常运作。它会连接 Master 节点,然后拉取镜像,安装网络插件,最后把节点加入集群。稍等片刻,就可以在Master节点上看到两个节点是。

2024-01-10 13:47:40 1179

原创 自动化的运维管理:探究Kubernetes工作机制的奥秘

Kubernetes的大致工作流程每个 Node 上的 kubelet 会定期向 apiserver 上报节点状态,apiserver 再存到 etcd 里。每个 Node 上的 kube-proxy 实现了 TCP/UDP 反向代理,让容器对外提供稳定的服务。scheduler 通过 apiserver 得到当前的节点状态,调度 Pod,然后 apiserver 下发命令给某个 Node 的 kubelet,kubelet 调用 container-runtime 启动容器。

2024-01-10 13:46:34 1694

原创 【python3】从库存管理分析分布式锁

分布式锁是一种用于协调多个进程或线程之间访问共享资源的机制,它可以避免多个进程或线程同时对共享资源进行修改而导致的数据不一致问题。在分布式系统中,由于数据的分散存储在不同的节点上,因此需要一种可靠的分布式锁机制。分布式锁通常需要满足以下几个条件:互斥性:在任何时刻,只能有一个进程或线程获得锁。安全性:一旦一个进程或线程获得锁,其他进程或线程无法修改该锁的状态,只有锁的持有者可以释放锁。高可用性:分布式锁应该具有高可用性,即当某个节点或进程故障时,其他节点或进程可以接管该锁。性能:分布式锁应该具

2024-01-09 10:51:36 1045

原创 一条SQL查询语句是如何执行的?

大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。server层: 主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。Store层: 存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。

2024-01-09 10:48:28 1236

原创 【python设计模式】python单例模式的N种实现

我们知道,经典设计模式总共有 23 种,但其中只有少数几种被广泛采用。根据我的工作经验,实际常用的可能不超过其中的一半。如果随机找一位程序员,并要求他列举出自己最熟悉的三种设计模式,那么单例模式肯定会是其中之一,这也是今天我们要讨论的。

2024-01-08 11:56:39 1916

原创 【python】魔术方法大全(六)-- 模拟篇

这期我们接着聊聊拥有模拟功能的魔术方法。

2024-01-08 11:53:46 524

原创 【python】魔术方法大全(五)-- 运算篇

今天我们来聊聊魔术方法使用的精髓,叫做emulation。我们知道python中的类型系统叫做duck type。简单的说,就是他不去检查具体的这个对象是什么类型,而是检查这个对象有没有响应的功能。而python中有大量的魔术方法,就是给某一个对象加上相应的功能,接下来聊一聊emulating numeric types,也就是让你的类型实现一些数的功能。__add__

2024-01-06 11:45:05 679

原创 【python】魔术方法大全(三)-- 属性篇

这次我们主要来聊聊跟对象的属性有关的魔术方法。

2024-01-06 11:43:12 1127

原创 【python】魔术方法大全(二)-- 比较篇

在python的内置数据结构中,比如说dict,或者list,尤其是integer、string、float,它们的rich comparison都是有良好的定义的。函数在 Python 中是非常重要的,它为我们提供了一种快速比较对象是否相等的方法,使我们能够在使用字典、集合等可哈希类型时,快速查找对象。如果y是x的衍生类,优先使用y的rich comparison的函数,否者优先使用x的函数。在python中,当你没有去写一个类的比较逻辑的时候,它默认比较两个对象的是否相等的方法是会默认调用。

2024-01-05 16:18:57 896

原创 【python】魔术方法大全(一)--基础篇

所谓魔法方法,它的官方的名字实际上叫,是Python的一种高级语法,允许你在类中自定义函数,并绑定到类的特殊方法中。比如在类A中自定义__str__()函数,则在调用str(A())时,会自动调用__str__()函数,并返回相应的结果。我们常常看到的这个名字,在官方的文档里是没有出现过的。当然无论是还是魔术方法,这些词都被广泛的使用着。所谓的魔术方法,是python提供的,让用户客制化一个类的方式,它顾名思义,就是定义在类里面的一些特殊的方法。这些。

2024-01-05 16:18:08 975

原创 python延迟绑定是什么?

具体来说,当一个嵌套函数引用了外部函数的变量时,Python会在内部函数被调用时搜索变量的值,而不是在内部函数定义时。这意味着如果外部函数的变量在内部函数被调用之前被改变了,内部函数将使用新的变量值,而不是定义时的值。Python中的延迟绑定是指在嵌套函数中,内部函数在被调用时才会绑定外部函数的变量,而不是在定义内部函数时就绑定。这种绑定方式可以导致一些出乎意料的行为,因为变量的值是在函数调用时决定的,而不是在函数定义时。由于默认参数的值在内部函数被定义时就被确定了,所以每个内部函数都绑定了不同的变量值。

2024-01-04 18:21:01 1027

原创 【python】生成器是什么?

生成器是一种特殊的迭代器(注意这个逻辑关系反之不成立)。使用生成器,你可以写出来更加清晰的代码;合理使用生成器,可以降低内存占用、优化程序结构、提高程序速度。喜欢这篇文章的话,可以关注一下我的公众号『海哥python。

2024-01-04 18:20:10 1762

原创 善用Itertools,让你的python代码更整洁更优雅

大家好,我是海鸽。我们知道,在Python中,迭代器是一个非常强大的利器,可以更高效地处理数据。然而,当处理大量数据时,迭代器的效率可能受到影响。如果你还不清楚迭代器,你可以先温习下我的这篇文章。【python】对迭代器一知半解?为了解决这个问题,我们可以利用Python标准库中的itertools模块。itertools专门为处理迭代器而设计,提供了许多高效的函数,用于创建、组合和操作迭代器。每个函数都经过精心设计,以在内存使用和性能之间取得平衡,使其能够处理大型数据集。

2023-12-15 09:31:10 891

原创 【python】魔术方法大全(四)——类构建篇

方法是 Python 3 中新引入的一个元类方法,它在类定义之前被调用,用于创建用于存储类属性的字典。当定义一个数据描述符时,它通常是作为类中的一个属性来定义的,而属性名就是描述符的名称。是 Python 3.6 新增的一个特殊方法,用于在类定义时自动设置属性的名称。它是在数据描述符的定义中使用的,用于设置描述符属性的名称。方法会在访问泛型类型的类方法或静态方法时自动调用,并传入泛型类型的参数列表。是 Python 3.5 新增的一个特殊方法,用于在定义泛型类型时实现类型参数的协变或逆变。

2023-10-10 18:45:35 322

原创 几个易错的python小知识点

因此,所有类型,如 int、str、object 都是 type 类的实例,而 type 类本身也是一个对象,与 Python 中的一切对象一样。Python 中的逻辑运算符是惰性的,算法是查找第一个 true 元素的出现情况,如果没有找到,则返回 False。isinstance(type, object):这个表达式返回 True,因为在 Python 中,type 是一种类型,而 object 也是一种类型,它们都是对象的基类。用于将一个列表与另一个列表相加,并将结果存储在原始列表中,修改原始列表。

2023-10-09 13:57:40 70

原创 用Python分分钟造个Tree命令玩一下

喜欢这篇文章的话,就点个关注吧,或者关注一下我的公众号『海哥python』也可以,会持续分享高质量Python文章,以及其它内容。shell中的tree命令参数还是有一些的,这里我们只实现部分基本参数相关的操作,感兴趣的小伙伴可以自行扩展。因为click模块需要单独安装,有的时候不是太方便,可以使用内置的argparse模块代替。: 在软件开发中,可视化项目目录结构有助于了解代码库的组织,查找特定文件和快速导航。在处理大量文件和目录时,清晰地了解它们的结构是非常重要的。列出当前路径的上一层路径下的目录树。

2023-09-26 10:44:17 202

原创 【python】对迭代器一知半解?

如果我们想在for loop里面使用链表的话,那我们就要自己把链表变成一个iterable。这段代码演示了如何自定义一个可迭代对象和对应的迭代器。首先,我们定义了一个Node类,表示一个节点,每个节点具有一个名称和一个指向下一个节点的引用。Node类实现了__iter__()方法,该方法返回一个迭代器对象。然后,我们定义了一个NodeIter类作为迭代器,它接收一个节点对象作为参数,并在__init__()方法中初始化当前节点。NodeIter类实现了__next__()方法,用于返回下一个节点。

2023-05-23 10:12:09 144 1

原创 如何保证缓存与数据库一致性

更多内容关注微信公众号:fullstack888看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。这篇文章说一下几个缓存更新的Design Pattern(让我们多一些套路吧)。这里,我们先不讨论更新缓

2021-10-23 13:36:12 157

原创 Etcd+Confd实现配置文件动态更新

简介如上图是一个很简单的架构,生产环境中经常会进行灰度发布,需要下掉一部分的节点。如果靠人工操作很容易错误,这里通过Etcd和Confd来实现nginx upstream的动态更新。类似的,自动化部署时服务的环境变量等也可存入etcd(配置中心website页面),coredns等配置文件内容均可存入etcd,由confd动态刷新。etcd: 分布式KV存储系统,一般用于共享配置和服务注册与发现。confd:管理本地应用配置文件,使用etcd或consul存储的数据渲染模板,还支持redis、zo

2021-10-23 12:46:02 558

原创 web框架之Django基础

Django的简介Django是一个由python写成的开放源代码的Web应用框架。Django的目的是使常见的Web开发任务,快速和容易。Django框架的特点遵循MVC开发模式内置进行快速web开发所需的各种组件利用ORM(对象关系映射)机制来定义和数据库,使开发人员可以构建出独立于具体数据库引擎的web应用内置后台管理web应用内置web Serv...

2019-03-17 23:08:21 406

原创 Python类的实例方法、静态方法和类方法

class Foo(object): """类三种方法语法形式""" def instance_method(self): print("是类{}的实例方法,只能被实例对象调用".format(Foo)) @staticmethod def static_method(): print("是静态方法") @classme...

2018-03-21 23:13:17 652

原创 CSDN-markdown

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I...

2018-03-21 22:15:58 1005

原创 sys/os/内置模块 Python

系统相关的信息模块: import syssys.argv 是一个 list,包含所有的命令行参数. sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输出的文件对象. sys.stdin.readline() 从标准输入读一行 sys.stdout.write("a") 屏幕输出a sys.exit(exit_code) 退出程

2018-01-23 23:32:44 240

原创 猎聘网HR版简历爬取

根据需求爬取猎聘网求职者简历# -*- coding:utf-8 -*-import timefrom lxml import etreefrom selenium import webdriverfrom selenium.webdriver.common.keys import Keysbrower = webdriver.Chrome()brower.get("https://pas

2017-12-27 00:31:14 12011 7

原创 知乎spider

from scrapy import Request, Spiderimport jsonfrom zhihuuser.items import ZhihuuserItemclass ZhihuSpider(Spider): name = 'zhihu' allowed_domains = ['www.zhihu.com'] start_urls = ['ht

2017-12-06 07:35:38 334

原创 爬虫模拟登陆

注意:模拟登陆时,必须保证settings.py里的 COOKIES_ENABLED (Cookies中间件) 处于开启状态COOKIES_ENABLED = True 或 # COOKIES_ENABLED = False策略一:直接POST数据(比如需要登陆的账户信息)只要是需要提供post数据的,就可以用这种方法。下面示例里post的数据是账户密码:# -*-

2017-12-06 00:48:30 282

原创 requests模拟登陆(session+url_token)

session在 requests 里,session对象是一个非常常用的对象,这个对象代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开。会话能让我们在跨请求时候保持某些参数,比如在同一个 Session 实例发出的所有请求之间保持 cookie 。import requestsimport reimport jsonsession =requests.Sess

2017-12-04 22:45:38 3021

基于golang语言和Saltstack开发的WEB运维平台

基于golang语言和Saltstack开发的WEB运维平台

2023-12-08

空空如也

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

TA关注的人

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