- 博客(85)
- 收藏
- 关注
原创 python实现redis分布式锁
使用python实现redis锁什么场景需要分布式锁分布式锁应该具备哪些条件:基于redis实现分布式锁什么场景需要分布式锁我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的锁进行处理,并且可以完美的运行,毫无Bug!注意这是单机应用,后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如下图:上图可以看到,变量A存在三个服务...
2020-01-12 17:17:11
679
原创 动态更新的数据结构介绍与对比
支持动态更新的数据结构:散列表、跳表、红黑树对比分析:散列表: 插入删除查找都是O(1) 优点:时间复杂度低 缺点:不能够顺序遍历,动态扩容操作以及散列函数和解决冲突的操作可能会消耗时间 适用场景:适用于那些不需要顺序遍历,数据更新不那么频繁的跳表: 插入删除查找O(logn) 优点:能够顺序遍历 缺点:空间复杂度O(n) 适用场景:不那么在意内存空间的,...
2019-08-18 12:40:36
449
原创 floor puzzles
根据已知问题条件进行求解#------------------# User Instructions## Hopper, Kay, Liskov, Perlis, and Ritchie live on # different floors of a five-floor apartment building. ## Hopper does not live on the top...
2019-08-03 16:17:39
249
原创 Python实现基础二分查找与二分查找的变形以及应用
二分查找基础版本的递归与非递归''' 使用递归和非递归实现二分查找 Author by: Lofues'''def binary_search(a : list, n : int, val : int) -> int: #return Binary_search(a,0,n-1,val) return binary_search_rec(a,0,n-1,val)de...
2019-08-03 15:10:00
224
原创 Python高级函数用法
itertools.chain用法 : for i in itertools.chain(iterable1,iteralbe2,.....)将可迭代对象组合遍历
2019-07-31 17:23:02
221
原创 python的常见排序以及O(n)时间内的查找第k大元素
冒泡排序def bubble_sort(l : list): length = len(l) if length <= 1: return for i in range(length): flag = False for j in range(length-i-1): if l[j] > l[j+1]: l[j], l[j+1] = l[j+1], l...
2019-07-31 16:03:18
1418
原创 Python用数组实现普通队列、循环队列(LeetCode 622),以及链表队列,
支持动态移动的普通数组队列''' 用数组创建队列并支持动态移位操作 Author by: Lofues'''from typing import Optionalclass ArrayQueue(object): def __init__(self,capacity : int): self._capacity = capacity self._items = ...
2019-07-29 12:41:40
382
原创 Python栈的链表实现以及栈来实现浏览器的前进后退功能
栈的链表实现''' 用无头节点的单链表实现栈 filename:link_stack.py Author by: Lofues'''class Node(object): def __init__(self,val : int): self.val = val self.next = Noneclass LinkedStack(object): def __ini...
2019-07-28 14:12:57
248
原创 LeetCode 232:用栈实现队列 Python
问题描述使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.po...
2019-07-28 09:19:49
286
原创 Python链表基础及实现
手写代码单链表实现LRUCachelRUCache是最近最短使用的Cache缓存机制#使用单链表实现lru_cache机制#分为两种情况#1.如果此数据之前已经被缓存到链表中了,遍历得到此节点并删除,然后插入到链表的头部。#2.如果此数据之前没有被缓存到链表中,分为两种情况:# 当缓冲没有满时,直接将其插入到头部# 当缓存满时,将链表尾部节点删除并插入到头部class Link...
2019-07-27 12:55:42
217
原创 LeetCod19.删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。class Solution: def removeNthFromEnd(self, head: ListNode...
2019-07-24 23:22:51
121
原创 Octave的使用及操作
基础的算数加减5 + 65 - 21 / 22 ^ 6逻辑运算1 == 2 % false 百分号是注释 返回值是01 ~= 2 %不等于 返回值是11 && 0 %and1 || 0 % or * 使用command:PS1('>> ')可以移动命令行光标到最左端赋值运算a = 3 % 不加分号将会打印...
2019-07-24 19:32:16
754
原创 MongoDB文档的查找操作
查找操作1.db.collection.find(query,field) 功能:查找文档 参数:query 查找条件,相当于where子句 field 查找的域 返回值:查找到的所有文档 #query:以键值对的方式传递参数,如果是空或{}表示查找所有内容 e.g: db.test.find({sex:'w'}) #field:以键值对的方式给出要查找(不查找)的域,以...
2019-07-23 21:07:07
230
原创 Leetcode26. 删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums ...
2019-07-23 14:23:44
107
原创 Leetcode11题:盛更多的水 python3
给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色...
2019-07-23 14:00:35
245
原创 Matplotlib的基础用法
基础用法import matplotlib.pyplot as pltimport numpy as np1.画出简单的直线图x = np.linspace(-3,3,50)y = 2*x + 1plt.plot(x,y)plt.show()2.显示多个figure与多线段figure以及线段个性设置y1 = 2*x + 1y2 = x**2plt.figure(nu...
2019-07-22 21:52:23
182
原创 Numpy的使用
Numpy的一些属性import numpy as nparray = np.array([[1,2,3],[4,5,6]]) # 创建二维数组1.打印矩阵 print(array)2.数组的维度 array.ndim3.数组的形状 array.shape4.数组的元素个数 array.size如何创建数组/矩阵1.指定数据类型dtype: int16/32/6...
2019-07-22 14:47:26
140
原创 MongoDB插入文档操作
插入文档db.collection.insert() 功能:插入一个文档 参数:要插入的文档 e.g. db.class0.insert({'name':'Lucy','age':15,'sex':'w'}) db.class0.insert({ "_id" : 1, "name" : "Mrak", "age" : 14 }) * 插入操作中键可以不加引号 * 查看插入结...
2019-07-20 10:51:20
245
原创 MongoDB文档介绍
文档mongodb中数据的组织形式 --> 文档定义:是以键值对的形式组成的一组数据。类似python中字典描述数据的方式键:即文档的域,表达了一个键值对的含义键的命名规则: 1.utf-8格式字符串 2.不能使用'\0' 3.一个文档中键不能重复 值:即文档存储的数据。 * 文档中键值对是有序的 * 文档中键值对严格区分大小写支持的数据类型类型 ...
2019-07-19 16:21:52
284
原创 Mongodb的集合操作
集合操作1.创建集合 方法1:db.createCollection(collection_ name) e.g db.createCollection('class1') 方法2:当向一个集合中插入数据时如果集合不存在则自动创建 db.classname.insert({})2.查看集合 show tables show collections* 集合命名规则:...
2019-07-19 15:36:57
124
原创 MongoDB介绍与基本操作
Mongodb命令 1.设置数据库存储位置 mongod --dbpath 目录 e.g 将存储路径设置为dbs mongod --dbpath dbs2.设置数据库监听端口 mongod --port 8080 * 默认监听端口为270173.进入数据库交互操作界面 mongo mongo shell:用来操作mongodb数据库的界面,在这里可以使用mong...
2019-07-19 13:30:17
142
原创 Linux下MongoDB的安装
MongoDB的安装1. 自动安装 sudo apt-get install mongodb 默认安装位置: /var/lib/mongdb 配置文件位置: /etc/mongodb.conf 命令集: /usr/bin /usr/local/bin 查看安装位置: whereis [mongodb]2.手动安装 1.下载安装包 www.mongodb.com...
2019-07-19 11:14:17
114
原创 数据库存储概念
数据存储阶段1.文件管理阶段 (.txt .doc .xls) 优点:使用简单,展现直观 可以长期保存数据 可存储数据量比较大 缺点: 查找不方便 容易造成数据冗余 数据格式不规范2.数据库管理阶段 优点: 将数据结构化存储,降低冗余 提高了增删改查效率 方便扩展,方便程序调用 缺点: 数据库往往需要指令和语句操作,相对复杂...
2019-07-19 10:57:50
884
原创 python中协程的使用
协程基础定义: 协程,微线程。协程的本质是一个单线程程序,所以协程不能使用计算机多核资源。作用: 能够高效的完成并发任务,占用较少的资源。 因此协程的并发量较高原理: 通过记录应用层的上下文栈区,实现在运行中进行上下文跳转,达到可以选择性地运行想要运行的部分,以此提高程序的运行效率。优点: 消耗资源少 无需切换开销 无需同步互斥 IO并发性好缺点: 无法利用计...
2019-07-18 18:21:16
178
原创 tcp的Http应用:Http2.0版本的创建
HTTP V2.0HTTP V1.0 1. 接收客户端请求 2. 解析客户端请求 3. 组织数据,形成HTTP response 4. 将数据发送给客户端升级: V2.0 1. 采用多线程并发接收多个客户端请求 2. 基本的请求解析,根据请求返回相应的内容 3. 除了可以请求静态网页,也可以请求简单的数据 4. 将功能封装在一个类中技术点 - socket tc...
2019-07-18 17:31:34
285
原创 python3中Thread.setDeamon的使用
setDaemon语法: obj.setDaemon(True)个人理解: * 需要在start之前使用 * 主线程被创建时默认为False,所以子线程要设置时需要手动设置 * Daemon意思为守护线程,用来回收线程,当主线程运行结束时,会被子线程杀死官方文档:setDaemon() Old API for daemon. A boolea...
2019-07-18 17:21:21
1614
原创 python集成模块的使用
继承模块的使用python2 SocketServerpython3 socketserver功能:通过模块的不同、类的组合完成多进程/多线程的tcp/udp的并发StreamRequestHandler 处理TCP套接字请求DatagramRequestHandler 处理udp套接字请求TCPServer 创建tcp serverUDPServer 创建udp serve...
2019-07-18 15:00:18
287
原创 多线程并发构建基础服务器
多线程并发threading的多线程并发对比多进程并发: * 消耗资源较少 * 线程应该更注意共享资源的操作 * 在python中应该注意GIL问题,网络延迟较高,线程并发也是一种可行的方法实现步骤: 1. 创建套接字,绑定监听 2. 接收客户端请求,创建新的线程 3. 主线程继续接收其他客户端连接 4. 分支线程启动对应的函数处理客户端请求 5. 当客户端断开,则...
2019-07-18 12:44:50
153
原创 ftp文件服务器搭建
项目功能: * 服务端和客户端两个部分,要求启动一个服务端,可以同时处理多个客户端请求 * 功能:1. 可以查看服务端文件库中所有的普通文件 2.从客户端可以下载文件库的文件到本地 3.可以将本地文件上传到服务端文件库 4.退出 * 客户端使用print在终端打印简单的命令提示,通过命令提示发起请求项目分析 * 技术分析(fork tcp 并发) ...
2019-07-17 21:42:43
162
原创 多进程并发的基础web服务器模型搭建
服务器模型硬件服务器: 主机 集群厂商: IBM HP 联想 浪潮软件服务器: 编写的服务端应用程序,在硬件服务器上运行,一般依托于操作系统,给用户提供一套完整的服务httpserver ---> 处理http请求webserver ---> 网站的后端应用服务器程序邮箱服务器 ---> 邮件处理ftp文件服务器 --> 文件的上传下载功能:网络...
2019-07-17 13:44:54
395
原创 进程与线程的区别和联系
进程和线程的区别和联系1.两者都是多任务编程方式,都能够使用计算机的多核资源2.进程的创建删除消耗的计算机资源比线程要多3.进程空间独立,数据相互不干扰,有专门的IPC(进程间通信),线程使用全局变量进行通信4.一个进程可以创建多个线程分支,两者之间存在包含关系5.多个线程公用进程的资源,在资源操作时往往需要同步互斥6.进程线程在系统中都有自己特有的属性,ID,代码段,栈区等资源...
2019-07-17 10:39:50
136
原创 python多线程的GIL锁
python线程的GIL问题(全局解释器锁)来源:python-->支持多线程-->同步互斥-->加锁-->超级锁,给解释器加锁-->解释器同一时刻只能解释一个线程后果:一个解释器同一时刻只能解释执行一个线程,所以导致python线程效率低下。但是当遇到IO阻塞时线程会主动让出解释器,因此python线程更加适合高延迟的IO程序并发。解决方法: * ...
2019-07-17 00:31:52
217
原创 线程间的通信
线程通信通信方法: 多个线程共享进程的空间,所以线程间通信使用全局变量完成。注意事项:线程使用全局变量往往要同步互斥机制保证通信安全线程同步互斥方法:线程的Evente = threading.Event() 创建事件对象e.wait([timeout]) 如果e为设置状态则不阻塞否则阻塞e.set() 将e变为设置状态e.clear() 清楚设置线程锁lock =...
2019-07-16 20:18:10
111
原创 自定义线程类
自定义线程类1.继承Thread2.加载Thread中的__init__方法3.重写run方法自定义类的简单实现#自定义线程类from threading import Threadfrom time import sleep,ctimeclass MyThread(Thread): def __init__(self,target,name = 'Thread',arg...
2019-07-16 19:20:31
238
原创 多任务编程之线程
线程线程也是一种多任务编程方法,也是可以利用计算机多核资源完成程序的并发执行。线程又被称为轻量级的进程。线程特征 * 线程是计算机多核分配的最小单位 * 一个进程可以包含多个线程 * 线程也是一个运行的过程,消耗计算机资源,多个线程共享进程的资源和空间 * 线程的创建删除消耗的资源都要远远小于进程 * 多个线程之间执行互不干扰 * 线程也有自己的特有属性,比如指令集 ID...
2019-07-16 18:57:21
138
转载 sublime Text3快捷键简介
选择类Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本。Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑。举个栗子:快速选中并更改所有相同的变量名、函数名等。Ctrl+L 选中整行,继续操作则继续选择下一行,效果和 Shift+↓ 效果一样。Ctrl+Shift+L 先选中多行,再按下快捷键,会在每行行尾插入光标,即可同时编辑这些行。Ctr...
2019-07-16 15:03:33
113
原创 python的信号量机制
信号通信一个进程向另一个进程发送一个信号来传递某种信息,接收者根据接收到的信号进行相应的行为终端命令:kill -l 查看系统信号kill -sig PID 向一个进程发送信号信号介绍:信号名称 信号含义 默认处理方法SIGHUP 连接断开SIGINT CTRL-CSIGQUIT CTRL-\SIGTSTP CTRL-ZSIGKILL 终止一个进程...
2019-07-15 19:11:09
3783
1
原创 进程间的消息传输:管道、消息队列、共享内存
进程间通信(IPC) 原因:进程空间相对独立,资源无法相互获取,此时在不同进程间通信需要专门方法。 进程间通信方法:管道 消息队列 共享内存 信号 信号量套接字管道通信 Pipe通信原理:在内存中开辟管道空间,生成管道操作对象,多个进程使用“同一个”管道对象进行操作即可实现通信multiprocessing--》 Pipefd1,fd2 = Pipe(duplex =...
2019-07-15 17:58:21
221
原创 进程池技术实现
多进程优点: 可以使用计算机多核,进行任务的并发执行,提高执行效率 空间独立,数据安全 运行不受其他进程影响,创建方便 缺点: 进程的创建和删除消耗的系统资源较多进程池技术1、产生原因:如果有大量任务需要多进程完成,则可能需要频繁的创建和删除进程,给计算机带来较多的资源消耗。原理: 创建适当的进程放入进程池,用来处理待处理事件,处理完毕后进程不销毁,仍然在进程...
2019-07-15 13:00:41
685
原创 自定义进程类
Process进程的对象属性p.start()p.join()p.is_alive() 判断进程生命周期状态,处于生命周期得到Truep.name 进程名称,默认为Process-1/2.....p.pid 进程的pid号p.daemon 默认状态False 主进程退出不会影响子进程执行如果设置为True 则子进程会随着主进程结束而结束* 要在start前设置* 一...
2019-07-15 12:29:37
328
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人