生有涯,知无涯

吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。登高而招,臂非加长也,而见者远;顺风而呼,声非加疾也,而闻者彰。假舆马者,非利足也,而致千里;假舟楫者,非能水也,而绝江河。
私信 关注
生有涯,知无涯
码龄4年

登高而招,臂非加长也,而见者远;顺风而呼,声非加疾也,而闻者彰。假舆马者,非利足也,而致千里;假舟楫者,非能水也,而绝江河。君子生非异也,善假于物也。

  • 213,785
    被访问量
  • 205
    原创文章
  • 21,212
    作者排名
  • 71
    粉丝数量
  • 于 2017-05-25 加入CSDN
获得成就
  • 获得166次点赞
  • 内容获得43次评论
  • 获得522次收藏
荣誉勋章
兴趣领域
  • #后端
    #Python#分布式#Redis
TA的专栏
  • Git使用
    7篇
  • shell
    1篇
  • 设计模式
    6篇
  • 分布式系统
    2篇
  • 网络基础
    1篇
  • 大数据
    1篇
  • golang整理
    1篇
  • flask框架
    5篇
  • python基础
    19篇
  • 服务器
    6篇
  • jQuery
    1篇
  • Django框架
    11篇
  • python高级用法
    31篇
  • celery
    3篇
  • vue
    3篇
  • Docker
    1篇
  • FastDFS
    1篇
  • CORS
    2篇
  • Json web token (JWT)认证
    2篇
  • QQ登录
  • ubuntu
    14篇
  • python脚本
    1篇
  • RabbitMQ
    4篇
  • redis
    9篇
  • RESTful API
    2篇
  • MySQL
    18篇
  • Ajax请求
    1篇
  • 数据库
    2篇
  • 常用链接
    1篇
  • gRPC
    1篇
  • python
    18篇
  • 爬虫
    2篇
  • Nginx
    3篇
  • Mongodb
    13篇
  • 数据结构和算法
    12篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

剑指offer64-求1+2+3+…+n

题目:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。Python代码def sum(n): count = n num = n and sum(n - 1) # python A and B, A为真返回B,A为假返回A return count + numprint(sum(100)) # 5050...
原创
15阅读
0评论
0点赞
发布博客于 1 小时前

剑指offer63-求股票的最大利润(Python)

题目假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖交易该股票可能获得的利润是多少?例如一只股票在某些时间节点的价格为{9, 11, 8, 5, 7, 12, 16, 14}。如果我们能在价格为5的时候买入并在价格为16时卖出,则能收获最大的利润11。思路遍历每一个数字,并保存之前最小的数字,两者差最大即为最大利润。python代码stock1 = [12, 9, 7, 5, 2, 1]stock2 = [9, 11, 8, 5, 7, 12, 16, 14]def get_max
原创
15阅读
0评论
0点赞
发布博客于 1 小时前

深圳2021.03.04python面试总结

1.redis非事务型流水线使用事务的其中一个好处就是底层的客户端会通过使用流水线来提高事务执行时的性能。使用非事务型流水线(non-transactional pipeline)同样可以获得相似的性能提升,并且可以让用户同时执行多个不同的命令。1.1 redis事务redis的事务是以特殊命令MULTI为开始,之后传入多个需要执行的命令,最后以EXEC为结束,开始执行.MULTI和EXEC也会消耗资源,并且可能会导致其他重要的命令被延迟执行。但也可以在不使用MULTI和EXEC的情况下,获得流水线带
原创
11阅读
0评论
0点赞
发布博客于 2 天前

安装所需要的文件.rar

ubuntu18.04安装linux版本所需文件
rar
发布资源于 1 月前

pycharm2020.1在ubuntu18.04上的安装操作

1. 下载pycharm linux版本(本文在linux 2020.1版本测试)https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=linux2.移动tar.gz安装包到ubuntu18.04目录(例如/root/),解压tar -zxvf pycharm-professional-2020.1.tar.gz # 解压3.运行进到pycharm安装目录里面的bin目录运行pycharm, 例如
原创
102阅读
0评论
0点赞
发布博客于 1 月前

leetcode第589、590、429题——N叉树的前序遍历、后序遍历、层序遍历(python)

1.题目描述给定一个 N 叉树,返回其节点值的前序、后序、层序遍历。说明:树的深度不会超过 1000。树的节点总数不会超过 5000。例如,给定一个 3叉树 :2.python代码(迭代+递归)class Node(object): def __init__(self, val, children): self.val = val self.children = childrenclass Solution: def preorder
原创
21阅读
0评论
0点赞
发布博客于 2 月前

leetcode第144、94、145、102——二叉树的前序、中序、后序、层序遍历(递归+迭代)

1.问题描述如下的二叉树: 4 / \ 2 7 / \ / \ 1 3 6 8返回其前序遍历、中序遍历、后序遍历、层序遍历结果列表。前序:[4, 2, 1, 3, 7, 6, 8]中序:[1, 2, 3, 4, 6, 7, 8]后序:[1, 3, 2, 6, 8, 7, 4]层序:[4, 2, 7, 1, 3, 6, 8]2.代码(递归+迭代)# 如下的二叉树:# 4# / \# 2 7
原创
25阅读
0评论
0点赞
发布博客于 2 月前

leetcode第105、106题——根据前序遍历(或后序遍历)、中序遍历结果重建二叉树

1.描述根据一棵树的前序遍历与中序遍历构造二叉树。或者一棵树的后序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]或者中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 72.代码(递
原创
20阅读
0评论
0点赞
发布博客于 2 月前

leetcode第572题——判断一棵树是不是另外一棵树的子树

1.题目描述给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例:给定的树 s: 3 / \ 4 5 / \ 1 2给定的树 t: 4 / \ 1 2返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。给定的树 s: 3 / \ 4 5 / \ 1 2
原创
10阅读
0评论
0点赞
发布博客于 2 月前

ubuntu18.04桌面版支持root登录

1.前言:切换root权限Ubuntu 18.04系统在登陆界面上是不支持root用户直接登录的,但是你可以使用下面的方法让Ubuntu 18.04也支持root登录通常情况下,在Ubuntu 18.04中的普通用户只能通过运行sudo [命令] [参数]来获得系统临时使用root权限,或者是运行su root切换到root用户权限下,下面是使用root登录图形界面的具体方法。2.设置root用户,修改/root/.profile文件让Ubuntu 18.04系统支持root用户登录的方法1、设
原创
17阅读
0评论
0点赞
发布博客于 2 月前

天翼云、移动云ubuntu服务器分区和磁盘挂载步骤

1.前提parted 命令可创建,查看,删除和修改磁盘分区。磁盘分区和分区大小调整工具。如果划分分区时报错:-bash: parted: command not found ,表示未安装parted工具。parted 命令安装:apt-get install parted2.划分分区本操作以该场景为例,当云主机挂载了一块新的数据盘时,采用parted分区工具为数据盘设置分区,分区方式设置为GPT,文件系统设为ext4格式,挂载在“/data”下,并设置开机启动自动挂载。1、执行以下命令,查看新
原创
28阅读
0评论
0点赞
发布博客于 2 月前

leetcode第297——二叉树的序列化与反序列化(层次遍历)

序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。1.需求请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。示例:2.层序遍历解法序列化反序列化# Definition for a binary tree node.class Tre
原创
22阅读
0评论
0点赞
发布博客于 2 月前

leetcode第144、94、145——二叉树的前序遍历、中序遍历、后序遍历

1.前序遍历给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]1.1 递归解法# Definition for a binary tree node.class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.
原创
28阅读
0评论
0点赞
发布博客于 2 月前

ubuntu设置主机hostname + ssh免密快捷登录配置 + tab补全

1.永久设置主机名1.1 查看主机名hostname 或者 uname -n1.2 永久修改主机名1.修改/etc/hostname文件: vim /etc/hostnameubuntu系统永久修改hostname只需要修改/etc/hostname文件即可,对于其他linux发行版如centos、redhat等hostname存在/etc/sysconfig/network中,所以修改hostname时要区分linux发行版。修改之后保存退出。2.修改完hostname以后,同时修改下/
原创
44阅读
0评论
0点赞
发布博客于 2 月前

pip install报错Could not install packages due to an EnvironmentError

1.现象pip install过程中发生报错:ERROR: Could not install packages due to an EnvironmentError: ('Received response with content-encoding: gzip, but failed to decode it.', error('Error -3 while decompressing data: incorrect header check',))2.解决修改镜像源vi ~/.pip/pip
原创
36阅读
0评论
0点赞
发布博客于 2 月前

MongoDB–查找数组字段长度大于等于N的所有文档

1.需求mongodb查询过滤出某个数组字段元素个数(即长度) >= N的所有文档,或者查询长度=N的所有文档例如有如下格式的文档,collection:defect_product_data {"barcode" : "028201693002026300269101111000000000", "status" : "judg_audited", "judge_info" : [ { "judge_result" : "conc
原创
160阅读
0评论
0点赞
发布博客于 2 月前

shell脚本字符截取操作${var##*/}、${var#*/}、${var%/*}、${var%%/*}

1.假设有变量 test_url=http://www.baidu.com/123.html, 在shell脚本常用字符截取操作如下:1. $test_url#*// : #号截取,*//表示从左边删除第一个//号及左边的所有字符,保留右边字符,即删除http://www.baidu.com/123.html2. $test_url##*/ : #号截取,##*/表示从右边删除第一个/号及左边的所有字符,保留右边字符,即删除http://baidu.com/123.html3. $test
原创
113阅读
0评论
0点赞
发布博客于 2 月前

mongo聚合分组$group实现生成工厂树状组织结构

1.需求有设备基础数据表如下,包含车间工厂、车间、生产单元、子生产单元(本次树状结构忽略这一层次)、设备五个层次,现在需要根据工厂、车间、生产单元、设备四个层次生成工厂树状结构。2.思路先按工厂、车间、生产单元分组,并将设备信息push到一个数组device_info保存再对上一步的结果按车工厂、车间分组,并将生产单元信息及生产单元下的设备信息push到数组production_cell保存再对上一步的结果按工厂分组,并将车间及车间下的生产单元及生产单元下的设备push到数组workshop_i
原创
32阅读
0评论
0点赞
发布博客于 2 月前

Python threading模块 Lock 和 RLock 的区别

1.解释1.1 Lock:Lock锁是Python的原始锁,在锁定时不属于任何一个线程。在调用了 lock.acquire() 方法后,进入锁定状态,lock.release()方法可以解锁。底层是通过一个函数来实现的,会根据不同的操作系统选择一个最有效的版本实例1.2 RLock:RLock被称为重入锁,RLock锁是一个可以被同一个线程多次 acquire 的锁,但是最后必须由获取它的线程来释放它,不论同一个线程调用了多少次的acquire,最后它都必须调用相同次数的 release 才能完全释
原创
48阅读
1评论
0点赞
发布博客于 2 月前

hello_world.rar

所需文件
rar
发布资源于 2 月前

-bash: cannot create temp file for here-document: No space left on device

1.现象登陆Linux系统后, cd 到某个指定目录时使用tab键的时候报以下错误:-bash: cannot create temp file for here-document: No space left on device2.原因不能创建临时文件文档,设备上没有剩余空间(告诉我们磁盘空间满了)3.清理文件3.1 用命令查看硬盘空间 df -h3.2 查看哪个目录占用硬盘空间最大 du -sh /*3.3 一级一级向下查找大文件 du -sh /root/*3.4 找出
原创
42阅读
1评论
0点赞
发布博客于 2 月前

mongo聚合操作符$unwind

1.原始数据2.需求1.按条件获取所有停机原因及对应的停机时长数据2.按条件获取指定停机类型下的停机原因及停机时长3.操作3.1 获取所有停机原因及时长db.stop_reason_duration_daily_data.aggregate([ {'$match': {"timestamp": {"$gte": ISODate("2020-10-01T00:00:00.000+0000"), "$lt": ISODate("2020-12-24T00:00:00.
原创
106阅读
0评论
0点赞
发布博客于 2 月前

mongo聚合操作符: $split/$arrayElemAt/$addFields/$strLenCP/$subtract/$substr/$toInt/$push/$arrayToObject

1.原始数据2. 需求3.思路首先考虑需要拆分code,分成三个字段device_code(设备编码),kpi_code(指标code), shift(班次)再根据以上三个字段分组,再每个设备,当天当班次的指标到一个字典里。4.操作db.datas.aggregate([ { '$match': {'code': {'$in': ['dev_plc_LS_01_001~zb_r_cl_bc1', 'dev_plc_LS_01_001~zb_r_
原创
92阅读
0评论
0点赞
发布博客于 2 月前

ubuntu18.04安装python开发环境前期准备

1.以root账户登录https://blog.csdn.net/qq_39591507/article/details/81288644?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearn
原创
49阅读
0评论
0点赞
发布博客于 2 月前

leetcode第206题——反转单链表(python迭代和递归实现)

反转一个单链表。1.示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL2.迭代方法2.1 代码# Definition for singly-linked list.class ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: de
原创
107阅读
0评论
0点赞
发布博客于 3 月前

Mysql的四种事务隔离级别及脏读、不可重复读、幻读问题

1、事务的基本要素(ACID)原子性(Atomicity):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。隔离性(Isolatio
原创
97阅读
0评论
0点赞
发布博客于 3 月前

mongo聚合操作符$arrayToObject:将数组转换为单个文档

1.需求有如下表,获取指定设备当前的状态。需要得到结果如下:{“dev_status_dict” : {“device_5ls4_1_3” : 2,“device_5ls4_1_4” : 6,“device_5ls4_1_5” : 2,“device_5ls4_1_6” : 2}}2.解决方案:mongo聚合,将device_code和status_code放到数组,最后将数组转化为dictdb.device_status.aggregate([{"$match": {"end_
原创
88阅读
0评论
0点赞
发布博客于 3 月前

MQ消息中间件相关知识扩展(MQ高频面试题)

1.为什么要用消息中间件(消息队列)?使用消息队列主要做三件事: 解耦、异步、流量削峰2.几种消息队列的比较3.消息队列的优点和缺点?优点:解耦、异步、流量削峰缺点: 系统可用性降低,系统复杂性提高,引入了数据一致性问题4.如何保证消息队列的高可用?4.1 rabbitMQ: 单机模式, 普通模式, 镜像集群(高可用一般采用此种方式部署)单机模式: 顾名思义,一台机器上部署mq,主要是调试用,生产环境不用;普通模式(无高可用性):普通集群模式,意思就是在多台机器上启动多个
原创
47阅读
0评论
0点赞
发布博客于 3 月前

mongo聚合操作符$reduce:对数组字段进行组合去重等操作

1.需求:有如下数据,需要将数据按照设备进行分组,然后将某个数组字段的结果进行组合去重,形成一个新的数据字段。得到结果如:解决方案:mongo聚合,先按设备分组,再对目标字段进行$reducedb.device_analysis.aggregate([ { '$match': {'时间': {'$gte':'2020年07月16日', '$lte':'2020年11月24日'}} }, { '$group': {'_id': '$设备编码',
原创
147阅读
0评论
0点赞
发布博客于 3 月前

python使用多进程multiprocessing并汇总每个子进程的返回值(获取项目git分支列表)

业务需求: 使用多进程执行业务代码提高系统效率,但要能够获取并汇总每个子进程的运行结果示例:获取一批git项目的分支列表import osimport multiprocessingfrom multiprocessing import Managerimport auto_arrange.arrange as arrange_liblocal_root_directory = '/root/auto_arrange_env/'def get_local_app_directory(ap
原创
200阅读
0评论
0点赞
发布博客于 3 月前

记录一道python装饰器相关的题目

1.题目:问以下代码输出结果是什么?function_list = []for i in range(5): def output(): print(i) function_list.append(output)# 之后调用for f in function_list: f()2.输出结果先给出结论3.结果分析函数定义时,仅代表output变量指向了一个空间,并不会执行函数体。所以遍历5次,往function_list追加的是5个实现相同功能的
原创
20阅读
0评论
0点赞
发布博客于 3 月前

python获取远程服务器连接并对进程操作

1.获取远程服务器连接from fabric2 import Connectiondef get_server_conn(remote_ip, gateway_ip, gateway_port, password): """ 获取服务器远程连接 :param remote_ip: 远程服务器内网ip :param gateway_ip: 网关ip(跳板机ip) :param gateway_port: 网关端口(跳板机端口) :param password:
原创
101阅读
1评论
0点赞
发布博客于 3 月前

python获取指定间隔日期列表

1.获取指定年份月份之间的间隔日期列表import datetimefrom calendar import Calendardef get_year_dates(year: int, date_format: str = '%Y%m%d', start_month=1, end_month=12): """ 获取指定年份月份的所有日期 :param year: int :param date_format: :param start_month: 默认开始
原创
61阅读
0评论
0点赞
发布博客于 3 月前

ubuntu安装ssh以及开启root用户ssh登录

一、安装ssh切到root下面安装sudo -i #切换到root下sudo apt updatesudo apt install openssh-serversudo service ssh start检查是否启动成功: ps -aux | grep ssh二、开启root用户ssh登录1.输入root账户的用户名密码切换到root目录: su2. 修改sshd配置文件: vi /etc/ssh/sshd_config3. 找到下面相关配置:PermitRootLogin pro
原创
81阅读
0评论
0点赞
发布博客于 3 月前

linux查看服务器内存占用情况

查看某个进程的占用内存情况(以‘device_maintenance’为例)1.查找进程号ps -ef | grep 'device_maintenance' 或 ps -aux | grep 'device_maintenance'2.查看服务器整体内存占用情况13.查看服务器整体内存占用情况2free -htotal: 内存总数used: 已经使用内存数free: 完全空闲内存shared: 多个进程共享的内存buffers: 用于块设备数据缓冲,记录文件系统metad
原创
497阅读
0评论
0点赞
发布博客于 4 月前

python列表推导式的条件判断语句位置

1.列表推导式总共有两种形式:①[x for x in data if condition]此处if主要起条件判断作用,data数据中只有满足if条件的才会被留下,最后统一生成为一个数据列表②[exp1 if condition else exp2 for x in data]此处if…else主要起赋值作用,当data中的数据满足if条件时将其做exp1处理,否则按照exp2处理,最后统一生成为一个数据列表2.示例a_list = [1, 2, -3, 0, -4, 5, -6]b_
原创
150阅读
0评论
0点赞
发布博客于 4 月前

使用python修改配置文件

1.需求项目部署过程中,支持平板的应用在进行安卓apk打包前,需要修改一些配置文件,以适应不同的项目环境。2.需求分析逐行读取配置文件,匹配到对应行时,正则匹配需要修改的位置,进行替换。然后将每行读取的文件(包含替换的那一行)写到新的同名文件里。3.实例替换’cordove-hcp.json’文件的ip/端口及组织名 192.168.10.12:8888/xddq 替换为 192.168.1.17:8888/pebg{ "name": "workorder", "ios_identifi
原创
140阅读
0评论
0点赞
发布博客于 4 月前

git忽略部署过程中对文件的增删改

1.问题引入:某项目应用有多个分支。项目部署时,可能在不同工厂的目标服务器部署不同的分支。但完成部署功能的只有1台服务器。即这台服务器运行自动部署的代码。有可能出现X厂部署分支1、Y厂部署分支2。先部署X厂,然后部署过程中打包之前有修改部分本地代码。当X厂部署完毕,进行部署Y厂时,自动部署代码里当运行git checkout 分支2 时报错,无法切换分支。原因就是X厂部署时本地代码有修改不能直接切换另一分支。2.解决手段每次部署完毕依次执行以下操作:1. 先cd到项目的git目录2. git c
原创
25阅读
0评论
0点赞
发布博客于 4 月前

linux修改root密码,添加新用户

1. 修改root密码以root身份登陆,执行:passwd root然后根据提示,输入新密码,再次输入新密码,系统会提示成功修改密码。具体示例如下:[root@www ~]# passwd rootChanging password for user root.New UNIX password:BAD PASSWORD: it is based on a dictionary wordRetype new UNIX password:passwd: all authentica
原创
138阅读
0评论
0点赞
发布博客于 5 月前

linux服务器无法解析域名解决

解决方法编辑etc下的resolv.conf文件(如果没有就新建一个)vi /etc/resolv.conf添加一行nameserver 8.8.8.8nameserver 114.114.114.114保存后重启网络服务service network restart然后应该就可以了
原创
366阅读
0评论
0点赞
发布博客于 5 月前

mongodb删除重复数据保留一条

1.问题引入标红字段可能存在重复数据,需删除重复数据保留一条2. 聚合操作db.defect_product_data.aggregate([ { $group: { _id: {barcode: '$barcode', device_code: '$device_code', produce_process: '$produce_process', produce_user: '$produce_user',produce_shift: '$produce_shift'},
原创
430阅读
0评论
1点赞
发布博客于 5 月前

ubuntu18.04安装rabbitmq

1. 安装准备服务器一台: Ubuntu18.04 64位安装方式: 使用apt-get来安装2.安装步骤2.1 由于rabbitMq需要erlang语言的支持,在安装rabbitMq之前需要安装erlang,执行命令:apt-get install erlang-nox # 安装erlangerl # 查看relang语言版本,成功执行则说明relang安装成功2.2 添加公钥wget -O- https://www.rabbitmq.com/rabbitmq-rele
原创
73阅读
0评论
0点赞
发布博客于 5 月前

ubuntu如何生成ssh key以及将其添加到gitlab

1.检查本地是否有SSH Key存在在终端输入ls -al ~/.ssh如果输出的是: No such file or directory, 那就没有ssh key如果有就会出现这样,说明已经生成过ssh-key:2.生成新的SSH key首先在终端输入ssh-keygen -t rsa -C "your_email@example.com"your_email@example.com 为你在 GitHub或者GitLab 注册时的邮箱回车后,连续按三次回车即可,终端会显示:3.
原创
166阅读
0评论
0点赞
发布博客于 5 月前

SaaS多租户和单租户的分别

提到SaaS,很多人都会立刻想到节约成本、按需付费、即租即用等等这些概念,这说明大部分人对SaaS已经有了普遍认知,且开始主动应用SaaS软件。然而这只是一些浅层概念。很多人对于一些SaaS技术问题还是知之甚少,例如企业在进行SaaS企业管理软件选型时,仍不了解“多租户”与“单租户”是什么意思,二者之间的区别更是一头雾水。企业明白这两种SaaS架构的特点,才能更多地从未来的功能需求、数据安全等方面进行考虑,从而选出适合企业应用的SaaS软件。一、多租户SaaS架构小A、小B、小C大学毕业后,一起同
原创
251阅读
0评论
0点赞
发布博客于 6 月前

分布式系统中的FLP不可能原理、CAP理论与BASE理论

前言分布式系统是由多个不同的服务节点组成,节点与节点之间通过消息传递进行通信和协调。根据消息传递的不同,分布式系统的运行模型可以分为异步模型系统 和同步模型系统。1、同步与异步同步和异步关注的是消息通信机制 。1.1 同步所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。(工程语言解释)拿最经典的打电话举例。你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是
原创
184阅读
0评论
0点赞
发布博客于 6 月前

OSI七层模型简要说明

1.七层模型图示2.七层模型图示23.简述说明3.1 应用层:应用层:为应用程序提供服务并规定应用程序中通信相关的细节;包括的协议如下:①:超文本传输协议HTTP:这是一种最基本的客户机/服务器的访问协议;浏览器向服务器发送请求,而服务器回应相应的网页②:文件传送协议FTP:提供交互式的访问,基于客户服务器模式,面向连接 使用TCP可靠的运输服务主要功能:减少/消除不同操作系统下文件的不兼容性③:远程登录协议TELNET:客户服务器模式,能适应许多计算机和操作系统的差异,网络虚拟终端NVT
原创
50阅读
0评论
0点赞
发布博客于 6 月前

Redis过期策略及内存淘汰机制

1.过期策略我们set key的时候,都可以给一个expire time,就是过期时间,指定这个key比如说只能存活1个小时,我们自己可以指定缓存到期就失效。如果假设你设置一个一批key只能存活1个小时,那么接下来1小时后,redis是怎么对这批key进行删除的?答案是:定期删除+惰性删除1.1定期删除定期删除,指的是redis默认是每隔100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。注意,这里可不是每隔100ms就遍历所有的设置过期时间的key,那样就是一场性能
原创
60阅读
0评论
0点赞
发布博客于 6 月前

python-根据给定的时间范围计算年、季、月、周的开始和结束日期

1.根据给定的日期字符串,获取当天所在年、季度、月、周的开始和结束日期def get_first_and_last_day(date_str): """ 获取指定日期的开始、结束日期 :param date_str: 字符串格式 '2020-08-21' :param need_key: 字符串格式 'year','quarter' :return: """ result = {} struct_date = datetime.datetim
原创
651阅读
0评论
0点赞
发布博客于 6 月前

xshell_all.rar

内含: 1.xshell6登录客户端,无需认证即可使用。2.xftp文件上传下载客户端;分别安装,即可在xshell客户端联动xftp使用。
rar
发布资源于 6 月前

frp内网穿透的安装、搭建、配置详细流程

一、简介frp全名Fast Reverse Proxy, 是一个可用于内网穿透的高性能的反向代理应用,主要用于解决一些内网服务没有公网ip但是却需要提供外网访问的问题。使用frp可以将内网中的TCP、UDP、HTTP、HTTPS等协议类型的服务发布到公网,并且支持Web服务根据域名进行路由转发。优点:小巧方便,部署简单frp的最新版本为v0.33。二、前置准备云服务器一台(或者有公网ip的机器);内网服务器一台;下载frp脚本部署文件;熟悉基本linux操作命令。三、下载脚本部署文件
原创
1072阅读
0评论
3点赞
发布博客于 7 月前

Python使用MongoDB-GridFS进行文档管理

问题引入:mongodb如何存取图片及等其他非文档型文件,或者说大于16M的文件。例如pdf文件,大图片文件等。解决方案MongoDB内置一套文件系统名为GridFS(Grid File System),我们可以使用它来存储大于16M的文件。GridFS具有分布式管理文件的能力,可以突破一般文件系统对file的限制,分段存储,不像普通文件系统是整个存储的。这样读取大型文件时就不会占用大量的内存。GridFS会将文件存储在两个Document里:1.Chunks用来存储二进制数据2.Files用
原创
196阅读
0评论
1点赞
发布博客于 7 月前

git 的撤销

1.git add 的撤销1.只撤销指定文件git reset /home/working/auto_arrange/..../aaaa.py2.git commit的撤销不小心git add.并且commit了,想撤销commit到add,然后取消部分文件的add1.撤销commit 保留git addgit reset --soft HEAD~13.撤销push不常用,移步参考: https://www.jianshu.com/p/491a14d414f6...
原创
37阅读
0评论
0点赞
发布博客于 7 月前

mongodb查询索引、创建哈希索引、删除哈希索引

1.获取索引信息db.auto_arrange_data.getIndexes();2.对code字段创建hash索引db.auto_arrange_data.ensureIndex({'code':'hashed'});3.删除指定字段建立的索引db.auto_arrange_data.dropIndex('code_hashed')
原创
397阅读
0评论
0点赞
发布博客于 7 月前

pip 配置多个镜像源

linux:修改 ~/.pip/pip.conf (没有就创建一个), 内容如下:vim ~/.pip/pip.confwindows:直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.inipip配置文件内容[global]index-url=http://pypi.douban.com/simpleextra-index-url=http://mirrors.aliyun.com/pypi/simple/extra-index-url=htt
原创
1118阅读
1评论
0点赞
发布博客于 8 月前

Windows系统下安装vue

参考链接:https://www.jianshu.com/p/e215a33aed40
原创
63阅读
0评论
0点赞
发布博客于 9 月前

RESTful API之幂等性

接口幂等性的含义幂等性原本是数学中的含义,表达式的是N次变换与1次变换的结果相同。而RESTFul API中的幂等性是指调用某个方法1次或N次对资源产生的影响结果都是相同的,需要特别注意的是:这里幂等性指的是对资源产生的影响结果,而不是调用HTTP方法的返回结果。举个例子,RESTFul API中的GET方法是查询资源信息,不会对资源产生影响,所以它是符合幂等性的,但是每次调用GET方法返回的结果有可能不同(可能资源的某个属性在调用GET方法之前已经被其他方法修改了)。实际上,在分布式架构中的API幂
原创
74阅读
0评论
0点赞
发布博客于 9 月前

Nginx服务器配置之负载均衡策略(6种)

一、关于Nginx的负载均衡在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。详情请查看我的另一篇博客。二、Nginx负载均衡策略负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。一个最基本的upstream模块是这样的,模块内的server是服务器列表:#动态服务器组 upstream dynamic_zuoyu { server localhost:
原创
92阅读
0评论
0点赞
发布博客于 9 月前

柚子街

1.crontab中* * * * * /usr/local/run.sh中这5个星号分别代表什么?分钟、小时、日、月、星期2.以下python代码执行完毕后,a的结果?a = [1,2 3]def func(a,b): a.append(b)func(a,b)a = [1,2,3,3]3.攻击者采用某种手段,使用户访问某网站时获得一个其他网站的IP地址,从而将用户的访问引导到其他网站,这种攻击手段称为?DNS欺骗攻击4.系统死锁的可能原因是?A.进程释放资源B.一个进程进入死循
原创
161阅读
0评论
0点赞
发布博客于 10 月前

2020.05.10武汉TRX记录

1. mysql里,union 和union all 区别?Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;Union All:对两个结果集进行并集操作,包括重复行,不进行排序;从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL。2.mysql查询中,where,group by having 的顺序?select五种子句: where 条件查询 ,不能跟聚合函数,常用运算符过
原创
62阅读
0评论
0点赞
发布博客于 10 月前

Python的可迭代对象和迭代器对象

迭代器迭代器指的是迭代取值的工具,迭代是指一个重复的过程,每一次重复都是基于上一次结果而来,迭代提供了一种通用的不依赖索引的迭代取值方式一.可迭代对象但凡内置有__iter__方法的对象,都称为可迭代对象,可迭代的对象:str,list,tuple,dict,set,文件对象二.迭代器对象1.既内置又__next__方法的对象,执行该方法可以不依赖索引取值2.又内置有__iter__方...
原创
85阅读
0评论
0点赞
发布博客于 10 月前

python下载远程服务器日志

# coding=utf-8import paramikohost_ip = '*.*.*.*' # 不需要带端口port = 189 # 服务器连接端口username = 'root' # 远程服务器登录用户名password = '*********' # 密码remote_path = '/data/redis/logs/redis.log' # 日志文件路径lo...
原创
154阅读
0评论
0点赞
发布博客于 10 月前

查看和保留redis某个队列的长度

1.登录redisredis-cli2.认证redis密码选择指定库如select 0如果有如下提示:(error) NOAUTH Authentication required.2.1 查看redis密码2.2 输入密码auth PS_redis_access3.进入队列所在几号库select 04.查看某个队列的长度例如: 'select:word:queue’为...
原创
3663阅读
0评论
0点赞
发布博客于 11 月前

redis info 配置参数详解

查看redis的状态(以aws上面的redis实例为例子):redis-cli auth 'redis密码'infoServerredis_version:3.2.10 ##redis版本redis_git_sha1:0 ##git上版本redis_git_dirty:0 ##git的代码是否修改redis_build_id:0 ...
原创
199阅读
0评论
0点赞
发布博客于 11 月前

一文搞懂什么是Redis缓存穿透和缓存雪崩(包含解决方案)

前言作为一个内存数据库,redis也总是免不了有各种各样的问题,这篇文章主要是针对其中两个问题进行讲解:缓存穿透和缓存雪崩。并给出一些解决方案。这两个问题是基本问题也是面试常问问题。一、缓存穿透1、概念缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去...
原创
100阅读
0评论
0点赞
发布博客于 1 年前

线上发布git pull拉取代码冲突解决(git checkout .)

模拟时间轴描述现象2020.03.27 线上git pull origin master 拉取代码后发布,发布之后有bug,于是直接在生产环境所在服务器项目文件路径里直接修改bug,更改了代码。2020.03.28 将此前线上的改动push 到master分支。2020.04.02 线上再次发布时,git pull origin master 时代码合并冲突。因为此前对生产环境代码有改动。...
原创
319阅读
0评论
0点赞
发布博客于 1 年前

Git 将dev代码合并到master

git 合并dev分支到master假如我们现在在dev分支上,刚开发完项目,执行了下列命令git add .git commit -m ‘dev'git push -u origin dev然后我们要把dev分支的代码合并到master分支上 该如何?首先切换到master分支上git checkout master如果是多人开发的话 需要把远程master上的代码pull下...
原创
3968阅读
0评论
1点赞
发布博客于 1 年前

如何查找 nginx的配置文件的路径

1.如果程序在运行中ps -ef | grep nginx2.程序不知道是否在运行find / -name nginx.conf
原创
138阅读
0评论
1点赞
发布博客于 1 年前

python实现:根据给定的日期间隔打印日期列表

前言工作中,遇到查数据库统计,需要得到每个月的月初月末日期。python代码def get_time_range_list(startdate, enddate): """ 获取指定时间期间内每个月月初和月末日期参数列表 :param startdate: 起始日期 --> str :param enddate: 结束日期 --> str ...
原创
551阅读
0评论
0点赞
发布博客于 1 年前

TCP连接连接的三次握手和四次挥手

1.TCP连接建立(三次握手)1.TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;2.TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段...
原创
72阅读
0评论
0点赞
发布博客于 1 年前

APScheduler任务调度工具在Django项目中的使用

1. APSchedulerAPScheduler:强大的任务调度工具,可以完成定时任务,周期任务等,它是跨平台的,用于取代Linux下的cron daemon或者Windows下的task scheduler。内置三种调度调度系统:Cron风格(具有可选的开始/结束时间)间隔性执行仅在某个时间执行一次2.代码演练# coding=UTF-8import init_enviro...
原创
960阅读
0评论
0点赞
发布博客于 1 年前

常见排序算法(冒泡排序、选择排序、插入排序、快速排序)

1.冒泡排序冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。"""冒泡排序"""# 第一轮,依次取索引0和1、1和2,...,n-2和n-1两两比较,小的在前大的在后。一轮结束最大的在最后# 第二轮,依次取索引0和1、1和2,...,n-3和n-2两两比较,小的在前大的在后。二轮结束次大的在倒...
原创
50阅读
0评论
0点赞
发布博客于 1 年前

FC消息队列中间件+Btree 和 B+tree区别+FastDFS安全性+设计模式+序列化和反序列化+python内存管理机制+redis事务

1.rocketMQ和rabbitMQ区别?2.Btree 和 B+tree区别?3.FastDFS安全性方面,做了哪些工作?比如别人知道图片或视频地址以后就可以直接访问资源。4.知道的和使用过的设计模式?(21种)5.讲讲序列化和反序列化?6.python的内存管理机制?7.redis事务...
原创
72阅读
0评论
0点赞
发布博客于 1 年前

什么是正向索引、反向索引(倒排索引)?

1.正向索引正向索引(正排索引):正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。“文档1”的ID > 单词1:出现次数,出现位置列表;单词2:出现次数,出现位置列表;…………。“文档2”的ID > 此文档出现的关键词列表。正排表结构如图1所示,这种组织方法在建立索引的时候结构比较简单,建立比较方...
原创
572阅读
0评论
0点赞
发布博客于 1 年前

Python封装Redis通用工具类

1.django项目settings.py文件关于redis的配置 # Redis缓存库配置 CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://192.168.10.2:6379/0", ...
原创
1136阅读
0评论
2点赞
发布博客于 1 年前

Python字典列表的操作

1.对现有字典列表(列表中的元素是字典格式)进行排序# coding=UTF-8"""要求:按倒序排序"""group_list = [{'group_code': 22, 'group_name': 'dev'}, {'group_code': 5, 'group_name': 'design'}, {'group_code': 3...
原创
120阅读
0评论
0点赞
发布博客于 1 年前

Python日期、时间处理工具类

工作中,经常要处理时间和日期等数据,难度不大,但是为避免重复造轮子,特整理了工作中常用的时间日期处理工具供大家选用参考!utils_datetime.py# coding=UTF-8"""日期、时间处理工具类"""import timeimport datetimeimport calendardef generate_timestamp(): """根据当前时间获...
原创
435阅读
0评论
2点赞
发布博客于 1 年前

python项目封装日志通用工具

一、日志工具类utils_log.py"""定义log对象,以及改写log的部分函数,改变日志的输出颜色"""import os, logging, logging.config, settingsclass MyLogger(logging.Logger): """重写Logger的某些函数,给这些等级的日志输出不同颜色""" def info(self, ms...
原创
463阅读
0评论
1点赞
发布博客于 1 年前

pymongo批量操作工具封装——mongodb数据大批量操作

class BulkHandler(): """ bulk操作是基于pymongo语法,目前mongoengine语法不支持bulk操作 所以传入到bulk操作内的数据必须依赖于pymongo的基本语法,基本语法和mongodb的shell语法保持一致 bulk操作的结果处理,可以在该类中处理,也可以在类外处理,这里暂不处理,后期有需求的时候再加 """...
原创
249阅读
0评论
0点赞
发布博客于 1 年前

Redis的持久化机制之RDB和AOF

一、Redis两种持久化方式(RDB&AOF)Redis的持久化过程中并不需要我们开发人员过多的参与,我们要做的是什么呢?除了深入了解RDB和AOF的作用原理,剩下的就是根据实际情况来制定合适的策略了,再复杂一点,也就是定制一个高可用的,数据安全的策略了。二、RDB持久化方式:在RDB方式下,你有两种选择:一种是手动执行持久化数据命令来让redis进行一次数据快照;而手动执行持久...
原创
44阅读
0评论
0点赞
发布博客于 2 年前

【分布式】缓存穿透、缓存雪崩,缓存击穿的区别及解决方案

一、什么样的数据适合缓存二、缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决方案:1)有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据...
原创
36阅读
0评论
0点赞
发布博客于 2 年前

Django操作mongoDB Mongoengine之——信号

1.安装blinker库MongoEngine在进行数据操作时会发出一些信号,我们可以连接这些信号进行一些额外的操作。注意:要在MongoEngine中使用信号,需要安装 blinker 这个库。$ pip install blinkerMongoEngine提供的信号如下:pre_init: 在创建一个新的 Document 或者 EmbeddedDocument 实例对象之后,并且...
原创
200阅读
2评论
0点赞
发布博客于 2 年前
Pycharm2019.2安装操作
发布Blink于 2 年前

Python使用set()对对象进行去重解决思路

问题背景:ORM查询出来多个对象列表,例如list1 = list(Adgroup.objects.filter(shop_id=shop_id,adgroup_id__in=adgroup_id_list1))list2 = list(Adgroup.objects.filter(shop_id=shop_id,adgroup_id__in=adgroup_id_list2))lis...
原创
359阅读
0评论
0点赞
发布博客于 2 年前

Python对多个列表求交集并集和差集(补集)

1.求多个list的交集输入:"""以a、b、c为实验对象,求a、b、c都同时拥有的元素"""a = [0,1,2,3,4]b = [0,2,6]c = [-1,2,5,8]# 求多个list的交集:a、b、c同时拥有的元素r = list(set(a).intersection(b,c)) print('r -->', r) # 输出r --> [2]2....
原创
976阅读
0评论
0点赞
发布博客于 2 年前

pycharm2019.02在Windows上的安装操作

1.下载pycharm2019.2版本http://www.jetbrains.com官网下载pycharm2019.2(暂时没有尝试2019.3版本)2.下载补丁文件链接: https://pan.baidu.com/s/1dPjPWxZIurVOCE17mT2tCg提取码: ta9w3、将补丁文件放到pycharm安装目录的\bin下:比如:C:\Program Files\J...
原创
1215阅读
1评论
4点赞
发布博客于 2 月前

git stash命令之暂存的操作

多人开发,经常遇到开发某一个分支时,需要处理其他事情,这时就可以暂存手头的工作,进行其他工作,完事后再恢复,继续工作。查看当前状态git status如果有修改,添加修改文件git add .暂存操作git stash save '本次暂存的标识名字'查看记录git stash list恢复指定的暂存工作, 暂存记录保存在list内,需要通过list索引index取出恢复...
原创
95阅读
0评论
0点赞
发布博客于 2 年前

git-如何将本地分支与远程分支关联

1.问题引入:远程仓库原有master、dev,现远程新建了一个分支,比如feature,此时需要在本地新建一个feature分支并关联远程仓库的feature分支。2.具体操作:(1) 新建feature并切换到该分支:查看当前分支git branch新建并切换到feature分支git checkout -b feature(2) 拉取feature分支最新代码...
原创
764阅读
0评论
1点赞
发布博客于 2 年前

字典列表排序sorted()方法lambda和operator .itemgetter

实例我们先声明一个列表,里面元素为字典data = [ {'age': 31, 'city': 'taipei', 'name': 'amy'}, {'age': 71, 'city': 'tokyo', 'name': 'john'}, {'age': 16, 'city': 'london', 'name': 'zoe'}, {'age': 16, 'cit...
原创
88阅读
0评论
0点赞
发布博客于 2 年前

mysql存储引擎之MyISAM与InnoDB 的区别

区别:InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的...
原创
49阅读
0评论
1点赞
发布博客于 2 年前

unsupported format character 'Y'报错问题解决

1.原始sql语句query_sql = """ SELECT a.plateform_type, DATE_FORMAT(a.create_date, '%Y-%m-%d') the_date, COUNT(*) the_count FROM ( SELECT DISTINCT n.plateform_type, DATE_FOR...
原创
2107阅读
0评论
1点赞
发布博客于 2 年前

CSDN使用表格模板

复制以下代码到文章里面,在th标签里填入表头,td标签里面填入内容<table> <thead> <tr> <th></th> <th></th> <th></th> <th></th> </tr> &...
原创
210阅读
2评论
2点赞
发布博客于 2 年前

python 打印高亮-日志输出颜色控制

一、语法1.实现过程终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。控制字符颜色的转义序列是以ESC开头,即用\033来完成2.书写过程开头部分: \033[显示方式;前景色;背景色m结尾部分: \033[0m注意:开头部分的三个参数:(1)显示方式,前景色,背景色是可选参数,可以只写其中的某一个;(2)另外由于表示三个参数不同含义的数值都是唯一...
原创
1086阅读
0评论
1点赞
发布博客于 2 年前

python的datetime.date日期计算——计算当月第一天、当月最后一天、前月第一天、前月最后一天、次月第一天、次月最后一天、去年的当天日期等

一、各种日期计算方法# -*- coding: utf-8 -*-import datetimeimport calendar# 1.初始化一个datetime.date类型的日期,多种方式# init_date = datetime.date(2008, 1, 3) # <class 'datetime.date'>init_date = datetime.date...
原创
1618阅读
0评论
2点赞
发布博客于 2 年前

mysql查询结果行转列——case when用法

1.准备数据首先建表,主要有四个表,学生表(Student),课程表(Course),教师表(Teacher),以及成绩表(SC)在分别介绍一下每个表的字段 学生表(Student )有四个字段 sid–学生id,sname–学生姓名,sage–学生年龄,ssex–学生性别课程表(Course)有三个字段,cid–课程id,cname–课程名,tid–教师id教师表(Teacher)有两个...
原创
358阅读
0评论
0点赞
发布博客于 2 年前

Python面向对象—六大设计原则

设计原则1.开-闭原则(目标、总的指导思想)Open Closed Principle“开”指的是允许一个类甚至往大了说允许一个系统随时可以对自己的功能进行扩展。“闭”指的是不允许在扩展和修改功能的时候触及到已经写好的底层代码(比如父类)。举一个比较浅显的例子,可以理解为电脑与硬盘以及 U 盘的关系。面向过程类型的编写会把所有关键代码写在一起,就好比在给一个已经装好的主机箱添...
原创
139阅读
0评论
0点赞
发布博客于 2 年前

利用Python使用一行语句实现嵌套列表的平铺(3种方法)

1.问题引入:将列表demo_list = [[1, 2, 3], [4, 5, 6], [-1, -2, -3]],每个元素拆开平铺成一个新列表(去掉内层的中括号)。2.代码from itertools import chain"""python实现嵌套列表的平铺"""demo_list = [[1, 2, 3], [4, 5, 6], [-1, -2, -3]]# 方法一...
原创
510阅读
1评论
2点赞
发布博客于 2 年前

Python设计模式——工厂模式

1.前言工厂模式,顾名思义就是我们可以通过一个指定的“工厂”获得需要的“产品”,在设计模式中主要用于抽象对象的创建过程,让用户可以指定自己想要的对象而不必关心对象的实例化过程。这样做的好处是用户只需通过固定的接口而不是直接去调用类的实例化方法来获得一个对象的实例,隐藏了实例创建过程的复杂度,解耦了生产实例和使用实例的代码,降低了维护的复杂性。2.简单工厂首先,我们先看一个简单工厂的例子:#...
原创
196阅读
0评论
0点赞
发布博客于 2 年前

Wireshark-win64-3.0.2.msi

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。
msi
发布资源于 2 年前

由Python外观设计模式引入设计原则之——迪米特法则

1.引言2. 迪米特法则迪米特法则又称最少知识原则(least knowledge principle)简称LKP。意思是说一个对象应该对其他对象有尽可能少的了解,不和陌生人说话。迪米特法则的一个解释是(talk only to your immediate friends)。只与直接朋友对话。什么是直接朋友呢。两个类有耦合就是朋友关系。直接朋友,我的理解是类之间是通过参数调用产生关...
原创
71阅读
0评论
0点赞
发布博客于 2 年前

Python设计模式——状态模式

1.说明在软件开发过程中,各种应用程序可能会根据不同的情况做出不同的处理。最直接的方案就是把所有的可能发生的情况都考虑到。然后使用条件语句if-elif-else对不同情况的作出判断并进行处理。但是假如状态比较复杂,就会出现多个判断语句,判断语句中又包含这各种操作,这显然是不受欢迎的。状态模式的出现就是为了解决这种问题。状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题,将一...
原创
67阅读
1评论
0点赞
发布博客于 2 年前