- 博客(181)
- 资源 (33)
- 收藏
- 关注
原创 网络和并发编程常见面试题
1、简述OSI七层模型物理层、数据链路层、网络层、传输层 (TCP/UDP)、会话层、表示层、应用层详细解析: OSI 7层模型和TCP/IP 4层模型 - 知乎2、简单描述三次握手四次挥手的过程三次握手:客户端发起SYN,服务端接受到建立连接信号发送SYN+ACK,服务端接收到信号发送ACK四次挥手:客户端发送FIN,服务端接受到断开信号发送ACK确认信号,传递完剩余的数据之后再发送FIN结束信号,客户端接收到信号之后再发送一次ACK确认详细解析:图解 TCP三次...
2022-05-29 18:45:43
515
原创 MySQL/Redis 常见面试题汇总
1、常见数据库引擎和区别Innodb 支持行锁/表锁,支持事物,支持外键,不支持全文索引 【很多企业默认使用Innodb】MyIsam 不支持行锁/支持表锁,不支持外键,不支持事物,支持全文索引2、MySQL事务及其特性原子性(Atomicity): 一个事物所有操作全部完成或失败一致性(Consistency): 事务开始和结束之后完整性没有被破坏隔离性(Isolation): 允许多个事物同时对数据库修改和读写永久性(Durablity): 事物提交之后,修改之后是永久不..
2022-05-28 16:49:02
924
原创 IO 多路复用 之 (select/poll/epoll)
一、常见的IO模型IO模型主要分为同步IO和异步IO两大类,同步IO和异步IO主要区别同步IO: 当进程发起IO操作后,数据准备就绪做真实IO操作的时候,这个过程是阻塞的异步IO: 当进程发起IO 操作之后,就直接返回,直到kernel发送一个信号,告诉进程IO操作完成,无需进程负责真实IO操作,所以不存在阻塞,称之为异步同步IO模型(synchronous IO)阻塞IO(bloking IO)非阻塞IO(non-blocking IO)多路复用IO(multiplex..
2022-05-04 19:27:54
450
原创 MySQL事务隔离级别和实现原理(MVCC)
一、MySQL 事务本文所说的 MySQL 事务都是指在 InnoDB 引擎下,MyISAM 引擎是不支持事务的。数据库事务指的是一组数据操作,事务内的操作要么就是全部成功,要么就是全部失败,当事物内的代码执行失败,就会回滚到事物开始之前的状态事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)四个特性,简称 ACID。今天要说的就是隔离性。二、事务并发产生问题说明以下几个概念是事务隔离级别要实际解决的问题,
2022-05-03 22:22:45
805
原创 基于Python实现Redis 分布式锁
一、Redis分布式锁的实现原理通过setnx设置分布式锁,拿到这个锁的进程可以执行业务代码,没有拿到只能进行等待,进程执行完业务代码后需要通过del key 释放锁,让其他进程重新获取,这样就实现了在多进程并发的情况下始终只有一个进程在执行业务代码【在生产环境中通常需要对多进程同时写数据库的代码块加锁】二、获得锁通过调用redis底层命令 setnx来实现加锁(key,value),python 语言redis包封装了SETNX命令 setnx(key,value) 方法在key不存在的情况
2022-05-02 18:53:59
6647
2
原创 Python 使用list及collections.deque实现栈与队列操作
一、栈1.1 栈的特点后进先出(last-in, first-out),最后添加的元素第一个被获取。1.2 使用list当成栈使用添加一个元素到栈顶,使用list.append(x),从栈顶接收一个元素,使用不显示指定索引的pop()>>> stack = [3, 4, 5]>>> #入栈操作... stack.append(6)>>> stack.append(7)>>> stack[3, 4, 5
2022-04-25 12:22:15
1379
原创 链表定义/删除链表元素/合并链表 Python实现
链表:简单列表双端链表定义链表class ListNode_handle: def __init__(self): self.cur_node = None def add(self, data): # add a new node pointed to previous node node = ListNode() # print(data) node.val = data
2022-04-25 11:32:44
2031
原创 django+nginx+gunicorn+supervisord部署配置
环境安装需要在服务器端安装我们所需要的环境nginx Python nginx gunicorn...django等站点需要的依赖将不进行介绍nginx在centos上支持yum 直接安装,其他系统请自行搜索安装方式$ sudo apt-get install nginxgunicorngunicorn只是一个Python的库 这里建议使用pip安装,简单方便ps:要么网络好,要么建议更改pip源为豆瓣源$ sudo pip install gunicorn注:
2022-04-21 09:09:15
3275
原创 图解 TCP三次握手四次挥手
1.TCP为什么三次握手而不是两次握手1.防止已失效的连接请求又传送到服务器端,因而产生错误。 不幸的是, 这种解释是不准确的,TCP 采用三次握手的原因其实非常简单, 远没有大部分博客所描述的那样云山雾绕。为了实现可靠数据传输,TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方...
2022-04-18 17:46:22
2527
原创 Celery 动态添加定时任务生产实践
需求为了能够在Web端口动态添加定时任务的需求,本次来调研一下Celery 4.x 在Django框架下该如何动态添加定时任务。Celery动态添加定时任务的官方文档celery文档:https://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#beat-custom-schedulersdjango-celery-beat文档 : https://pypi.org/project/django-celery-bea
2022-04-14 19:43:45
7187
3
原创 Redis: 五种数据类型/内置实现、数据持久化方式、淘汰策略
五种数据类型数据类型String 底层通过(数据类型和简单string类型实现)listhashsetzset内置实现string数据类型和简单string类型实现zset 跳跃表持久化方式rdb 指定时间把数据快照到rdb文件中aof append of file 每写一个sql语句就往文件里面写入一条redis淘汰策略LRURedis如何实现分布式锁【代码实现分布式锁】redis设置一个key,当其他的进程去获取锁的时.
2022-04-14 11:03:54
1230
原创 MySQL: 事务/隔离级别、乐观锁/悲观锁、Innodb/MyIsam
一、事务的基本特性原子性(Atomicity): 一个事物所有操作全部完成或失败一致性(Consistency): 事务开始和结束之后完整性没有被破坏隔离性(Isolation): 允许多个事物同时对数据库修改和读写永久性(Durablity): 事物提交之后,修改之后是永久不丢失的二、事物的并发可能会产生的问题幻读 (phantom read):一个事务第二次查询出第一次没有的结果(说明在第一次到第二次之间已经对数据进行修改)非重复读(nonerepeateable rea
2022-04-12 16:40:56
1099
原创 python线程池 ThreadPoolExecutor 使用记录
一、submit /result方法submit 函数用来提交线程需要执行的函数和参数,submit函数是立即返回的,从print(task1)输出结果在print(f'get page {times} success') 输出结果之前可以得出 result 函数用来获取线程结果,该方法是阻塞的,从print(f'get page {times} success') 输出结果 在print(task2.result()) 之前输出 可以得出import timedef get_html(..
2022-04-12 15:27:59
2135
1
原创 Python 垃圾回收机制原理
Python 无需我们手动回收内存引用计数为主(缺点:循环引用无法解决)引入标记清除和分代回收解决引用计数的问题引用计数为主、标记清除和分代回收为辅的回收机制标记清除:从根节点开始寻找引用,如果发现没有引用的对象则进行标记并进行清除分代回收:python对象是分为0,1,2 三代,每一代都是有不同的阈值,当引用数量超过指定阈值就会开始进行分代回收...
2022-04-11 22:03:29
768
原创 python *args **kwargs
一、*args传递不确定数量的value参数给*args,args类型为元组类型def print_everything(*args): print(args) for thing in args: print(f' {thing}')print_everything('apple', 'banana', 'cabbage')输出结果:二、**kwargs传递不确定数量的key=value 参数给**kwargs,kwargs类型为字典..
2022-04-11 17:24:56
889
原创 Python: 高阶函数 [map、reduce、filte、sorted] 和 闭包
一、map函数# 对0-50分别求平方,并输出求平方之后的结果列表res = list(map(lambda x:x**2,range(10)))输出结果:二、reduce函数# 求和0-49from functools import reduceres = reduce(lambda x,y:x+y,range(50))print(res)输出结果:三、filter函数# 过滤0-49能被2整除的数print(list(filter(lambda...
2022-04-11 17:19:52
465
原创 设计模式:Python实现结构型模式
一、常见结构型设计模式装饰器模式(Decorator): 无需子类化拓展对象功能代理模式(Proxy): 把一个对象的操作代理到另一个对象适配器模式(Adapter): 通过一个间接层适配统一接口外观模式(Facade): 简化复杂对象的访问问题享元模式(Flyweight): 通过对象复用(池)改善资源利用,比如连接池MVC Model-View-Controller: 解耦展示逻辑和业务逻辑二、代理模式把一个对象的操作代理另一个对象通过json 模块的 dumps
2022-04-11 16:13:24
766
原创 冒泡排序/选择排序/快速排序 Python实现
一、冒泡排序冒泡排序时针对相邻元素之间的比较,可以将大的数慢慢“沉底”(数组尾部)def bubbe_sort(nums): n = len(nums) for i in range(n): for j in range(1,n-i): if nums[j-1] > nums[j]: nums[j-1],nums[j] = nums[j],nums[j-1] return numsnums
2022-04-11 08:37:30
884
原创 python 异常处理机制、自定义异常
1、异常的产生和捕获程序在运行的过程中可能会因为权限问题、用户输入问题、第三方API问题、请求参数确实 等问题产生异常,这些异常可以在程序内部通过捕获异常让程序继续执行,也可以选择通过raise抛出异常让程序终止运行,如果不进行异常处理,异常最终会被python解释器捕获并终止运行程序2、基本语法1、try...except...else...finallydef func(x): return 2 / xif __name__ == "__main__": tr
2022-04-10 12:01:31
1087
原创 Python性能分析和优化,GIL全局解释器锁
一、什么是Cpython GILGIL Global inteperter lockCpython 解释器的内存管理并不是线程安全的,为了保护多个线程对python对象的访问,cpython 使用了简单的锁机制来避免多个线程同时执行字节码 【python执行是先把源文件编译成字节码然后再执行的】二、单核CPU的线程调度方式单核CPU上调度多个线程任务,大家相互共享一个全局锁,谁在CPU执行,谁就占有这把锁,直到这个线程因为IO操作或者Timer Tick到期让出CPU,没有在执行的线程就安静
2022-04-09 15:37:44
831
原创 设计模式:Python实现创建型模式
单例模式:一个类只能创建一个实例class Singleton(object): def __new__(cls, *args, **kwargs): # print(hasattr(cls,'_instance')) if not hasattr(cls, '_instance'): cls._instance = object.__new__(cls, *args, **kwargs) return cls._inst.
2022-04-09 08:50:59
667
原创 git reset 和 git revert
一、问题描述在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset)、反做(revert)。二、背景知识git的版本管理,及HEAD的理解使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支。如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支。有一个HEAD指针指向当前分支(只有一个分支的情况下会指向ma
2022-04-08 08:35:45
14686
4
原创 python 动态调试代码
HTTP content-typeContent-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。Content-Type 标头告诉客户端实际返回的内容的内容类型。语法格式:...
2021-08-10 16:20:06
290
转载 【shell】判断一个变量是否为空
#!/bin/bashargv="123"if [ -z "$argv" ]then echo "argv is empty"else echo "argv is not empty"说明,-z选项判断一个变量是否为空,如果为空则执行then部分,如果不为空,则执行else部分。另外,在shell中建议给变量加上双引号,比如如果test的内容是argv="adsf adf 1234e"有空格,变量不加双引号执行if [ -z $argv ]这个,虽然结果是对的,但是会..
2020-12-28 11:28:35
8145
转载 Python2和Python3中urllib库中urlencode的注意事项
前言在Python中,我们通常使用urllib中的urlencode方法将字典编码,用于提交数据给url等操作,但是在Python2和Python3中urllib模块中所提供的urlencode的包位置有些不同。对于Python2Python2中提供了urllib和urllib2两个模块。urlencode方法所在位置为:urllib.urlencode(values) # 其中values为所需要编码的数据,并且只能为字典...
2020-12-22 15:14:34
662
原创 【Python】使用datetime和time获取当前的日期和时间
1、使用datetime1.1 获取当前的时间对象import datetime# 获取当前时间, 其中中包含了year, month, hour, 需要import datetimetoday = datetime.date.today()print(today)print(today.year)print(today.month)print(today.day)2、使用time2.1 获取当前的时间戳# 取得当前时间戳import timeprint(time.
2020-12-22 14:48:00
28899
原创 Python 字典
一、使用字典键和值之间使用冒号分隔,键值对之间用逗号分割特性:key-value结构 key必须为不可变数据类型、必须唯一 可存放任意多个value、可修改、可以不唯一 无序 查询速度快,且不受dict的大小影响,至于为何快?我们学完hash再解释。1.访问字典中的值alien_0={'color':'green','point':5}print(alien.get('color'))...
2020-12-15 21:10:17
252
原创 Flask 引用logging模块把日志写入文件
系统默认有6个级别,优先级: CRITICAL 50 ERROR 40 WARNING 30 INFO 20 DEBUG 10 NOTSET 0最近用Python写了个外挂,需要部署到Linux环境的服务器上,由于之前本地开发时使用virtualenv,使用这个虚拟环境有个好处是项目中依赖的库不会是全局的,只在当前项目的目录下有效,因为我是Mac系统,virtualenv环境下的库文件和linux上所需要的库不通用,所以不能简单的将整个env拷...
2020-12-14 18:25:12
7321
3
原创 Elasticsearch概念和基本用法
一、ES基础概念1.2 ES API 风格ES是以RESTFul API风格来定义自己的API风格的API基本格式: http://<ip>:<port>/<索引>/<类型>/<文档id> 常用HTTP动词: GET/PUT/POST/DELETE二、ES基本用法2.1 创建索引创建索引需要提前设置好分片和副本数,类型名称和文档字段,创建语法如下curl -XPUT -u elastic:LiJun123@ ..
2020-05-25 19:26:52
1650
2
原创 curl命令最常见使用方式及案例
一、Curl使用用途Curl的使用主要分两大类:一个是网站服务的分析,我们会希望了解网站的返回状态;整个Http的通信过程;IPV6站点模拟检测等。一个是功能用途的使用,我们可以通过curl实现上传下载文件,模拟多种请求方式;使用代理模式访问网站等。二、网站服务分析我们经常会碰到这样的面试题,线上跑的一个服务,打开浏览器请求不到,怎么去分析?下面我们来梳理一下排查过程1.首先查看服务状态是否正常,然后查看服务日志2.也可以通过查看cpu使用率判断该服务是否正常3.进程状态
2020-05-17 19:19:32
1114
原创 最常用Shell命令集合和使用技巧
一、控制台使用技巧基于我平时的工作经验,总结出一些我常用的快捷键1.1 操作快捷键 Ctrl+r:可以快速查找历史命令 Ctrl+a / Ctrl+e:移动光标到命令行首 / 行尾 Ctrl+w / Ctrl+k:删除光标之前 / 之后的内容1.2 VIM文件编辑快捷键 ZZ:文件保存并退出1.3 进程操作快捷键 Ctrl+c:强制终止程序 Ctrl+z:挂起一个进程 Ctrl+d: 终...
2020-05-17 16:31:56
3939
1
原创 python统计字符串中每个字母出现的次数
一、实现思路需要统计字符串中每个字母出现的次数;如果字母是第一次出现的话,就把次数置为1,如果字母非第一次出现的话,就需要在原字母已保存次数上加1;仔细思考一下,需要保存字母和出现次数,然后相同字母出现多次的话,需要在原字母保存的次数加1;字典这种数据类型可以实现这种需求。二、代码实现2.1 统计字母出现次数统计字符串每个字母出现次数源码:def count_each_cha...
2020-05-06 22:10:58
80686
2
原创 python生成器和迭代器区别
一、生成器1.1 什么是生成器generator:一边生成一边计算后面元素的机制,称为生成器,生成器里面保存的是算法,只有需要用到才会计算后面的值1.2 通过列表生成式创建生成器我们可以将列表生成式的中括号改成小括号就创建了一个生成器list = [i for i in range(10)]print(type(list)) # <class 'list'>...
2020-05-04 17:06:26
3425
1
原创 Python实现端口检测
一、背景:在平时工作中有遇到端口检测,查看服务端特定端口是否对外开放,常用nmap,tcping,telnet等,同时也可以利用站长工具等web扫描端口等。但是在使用站长工具发现:每次只能输入一个检测的地址; 虽然可以输入多个端口,但是不能指定一个端口范围来进行批量检测; 没有批量任务记录日志等;因避免由于局域网检测发起端网络限制而导致的端口检测异常,未使用python-nmap...
2020-04-20 10:50:01
7363
3
原创 python列表生成式
现在有个需求,现有列表a=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求你把列表里的每个值加1,下面给出四种实现方式:通过生成一个新的列表实现 a=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]b=[]for i in a: b.append(a[i]+1)a=bprint(a) enumerate函数 for k in en...
2020-03-09 15:08:02
439
原创 Python闭包
1.闭包是什么东西函数定义和表达式位于另一个函数的函数体内(嵌套函数),返回的是函数对象,函数对象可以在函数外部被调用。2.闭包代码示例def outer(): name = 'kelly' def inner(): print("在inner里打印外层函数的变量",name) return inner # 注意这里只是返回inner的内存地址...
2020-03-08 17:54:11
200
原创 利用python通过循环和递归实现列表的二分查找
二分查找参数解释和查询原理:二分查找的前提是列表有序,下面以升序列表为例,order_list为有序列表,key为需要查找的值,left和right在列表或数组中相当于左右下标,表示在数组或列表的 [left, right] 范围内查找,查找过程中不断缩小 [left, right] 覆盖的范围,直到查找成功返回下标,不成功返回None。下面给出了循环和递归实现。循环实现二分查找:#...
2020-03-08 11:03:44
981
快速创建rhel7虚拟机所需配置文件
2018-08-11
zookeeper_rocketMQ.zip
2019-12-01
mongodb-linux-x86_64-rhel70-3.4.19.tgz
2019-12-01
mysql-wsrep-5.6.36-el7.zip
2019-12-01
privoxy-3.0.23-stable-src.zip
2018-08-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人