
笔记
KlayLee
软件工程学生
展开
-
Django学习笔记:Django安装配置与运行
配置Django使用pip3安装Djangopip3 install django —version=2.1.2查看下载的django版本使用ipython进入python命令行In [1]: import django原创 2020-11-14 20:32:50 · 223 阅读 · 0 评论 -
Django学习笔记:View层传参方法
View层:传参方法?传参方法在url后面使用?表示参数,如下:http://127.0.0.1:8000/?name=klay&age=18使用方法:在View视图层使用request.GET.get(arg1,arg2)函数接受参数Arg1表示参数名字,arg2表示默认值,如果在url处没有传入值,则在django逻辑中设置arg2为默认值在two应用下对应的view层编写以下代码:-untitled0 -two views.pydef index(request):原创 2020-11-14 20:30:47 · 1350 阅读 · 0 评论 -
Python学习笔记:迭代器
迭代器只要是可迭代的对象,无论有没有下标,都是可以迭代的# 迭代字符串for x in 'hello world!': print(x)hello world!# 迭代listsum = 0for x in [1,3,4,6,7,8]: sum+=xprint(sum)29# 迭代字典dict = {'图书馆':3,'机场':11,'教研室':23}for key in dict: print('key is : {}, valu原创 2020-11-13 19:25:29 · 263 阅读 · 1 评论 -
Python学习笔记:函数
函数定义一个函数#格式:def functionname( parameters ): "函数_文档字符串" function_suite return [expression]定义一个功能为最大值的函数def max(num1,num2): if num1>num2: return num1 else: return num2print(max(55,77))77在函数中可以进行类型判断处理,如果类型不合法则可原创 2020-11-13 14:21:13 · 289 阅读 · 0 评论 -
Python学习笔记:Set集合
Set集合python 的 set 和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素。创建一个SetSet需要接入一个list列表作为传入进行创建set1 = set([1,2,3])set1{1, 2, 3}如果创建字典过程中有重复的值,则会把重复的值给过滤掉set1 = set([1,2,3,2,1])set1{1, 2, 3}删除Setset1.remove(3)set1{1, 2}Set运算Set是无序不重复的元素集合,原创 2020-11-13 11:02:26 · 143 阅读 · 0 评论 -
Python学习笔记:Dict字典
Dict字典类似于Java中的map,使用key-value存储值对,加快查找速度创建字典dict = {'1':'李明','2':'陈凯','3':'吴菲'}dict{'1': '李明', '2': '陈凯', '3': '吴菲'}字典的键必须是唯一的,而值不一定需要是唯一的,如果出现了键不唯一,则会覆盖原来的值dict = {'1':'李明','2':'陈凯','1':'吴菲'}dict{'1': '吴菲', '2': '陈凯'}访问字典dict = {'1':'李明',原创 2020-11-13 09:52:24 · 234 阅读 · 0 评论 -
Python学习笔记:元组
Tuple元组tuple 和 List 非常类似,但是 tuple 一旦初始化就不能修改。 也就是说元组(tuple)是不可变的元组(tuple) 不可变是指当你创建了 tuple 时候,它就不能改变了,也就是说它也没有 append(),insert() 这样的方法,但它也有获取某个索引值的方法,但是不能赋值。因为 tuple 是不可变的,所以代码更安全。所以建议能用 tuple 代替 list 就尽量用 tuple 。创建一个Tuple元组tuple1 = 'first','second',原创 2020-11-12 20:31:20 · 173 阅读 · 0 评论 -
一次对AQS和ReetrantLock的源码理解和解析
AQS简介AQS在jdk1.8中全称为AbstractQueuedSynchronizer,中文翻译为同步器,是各种锁比如ReetrantLock、CountDownLatch、Semaphore的基础,AQS实现了锁、排队、锁队列这些框架但是对于tryAcquire、tryRelease、tryAcquireShared、tryReleaseShared、isHeldExclusively这些方法就需要子类比如之前的ReetrantLock等去实现。所以在了解ReetrantLock的底层原理之前,我们原创 2020-08-03 10:52:34 · 180 阅读 · 0 评论 -
单例模式的几种创建方法(synchorized、DoubleCheck、静态内部类等)
单例模式单例模式是创建型模式,它确保了一个类只能有一个对象被创建。在单例模式中,需要注意以下几点:构造方法必须为private,不能被其他类调用new方法成员变量为static的,这样子才能被static方法返回饿汉式饿汉式在类加载的时候就被初始化,免去检查是否为空的步骤,但是如果一直没有被调用的话,就会造成浪费。public class HungrySingleton { private static HungrySingleton hungrySingleton = new H原创 2020-07-29 20:06:36 · 473 阅读 · 0 评论 -
简述从2-3树到红黑树
因为CSDN的markdown不支持自动插入图片,所以这里引用我的github链接,大家可以进入该链接查看该图文博客(图片较多)简述从2-3树到红黑树原创 2020-07-29 12:55:58 · 171 阅读 · 0 评论 -
Mysql的事务并发问题和隔离级别
事务的四大特性ACID就是事务的四大特性,它们分别是原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)原子性:数据库中的每个事务都是不能再次分割的,要么一起操作成功,要么一起操作失败回滚,不能出现一个事务中一句执行成功了而另外一句没有执行成功的情况一致性:一致性是指数据库中的事务从一种状态变到另外一种状态,而数据库的完整性没有被破坏。比如A和B的总金额是2000元,无论A和B之间发生怎么样的交易,它们的总金额仍然是2000元隔离性原创 2020-07-28 12:27:07 · 397 阅读 · 0 评论 -
JWT验证的原理,以及在项目中实现JWT的验证登陆
因为之前实现的网关项目中存在以下的逻辑:租户需要在平台进行登陆租户在登陆之后获取到token之后才能通过网关的验证中间件进入到转发代理逻辑中不选择session的原因在这种登陆场景下,我们可以使用session来处理,session的处理流程如下:租户发起登陆请求,把用户名和密钥发送给转发代理服务器,服务器利用后台数据库中的数据进行验证后台服务器验证成功之后,利用服务器自己设置的租户session前缀+用户名+登陆时间这几个参数生成一个session并把session设置为Set-Cook原创 2020-07-22 13:39:23 · 2686 阅读 · 1 评论 -
Redis中的AOF持久化——《Redis设计与实现》读书笔记
Redis的AOF持久化特点:通过保存Redis服务器所执行的写命令来记录数据库状态与RDF的区别是RDF保存数据库的键值对持久化实现(三个步骤)1.追加服务器执行完一个命令之后会将命令写入到缓冲区aof_buf末尾2.文件写入服务器每执行完一个事件都会判断是否需要将aof_buf的内容写入保存到AOF文件里不同的appendfsync参数:always:每次都将aof缓冲区内容写入到AOF文件everysec:距离上次AOF写入超过1秒就写入到AOF中no:永远不保存3.原创 2020-07-22 00:05:45 · 305 阅读 · 0 评论 -
Redis中的RDB持久化——《Redis设计与实现》读书笔记
RDB持久化图片源文件RDB持久化Xmind源文件读者可以查看我之前的一些笔记,包含有文字的描述Redis中的压缩列表ziplist——《Redis设计与实现》读书笔记Redis中的字典——《Redis设计与实现》读书笔记Redis中的对象——《Redis设计与实现》读书笔记...原创 2020-07-20 15:45:59 · 118 阅读 · 0 评论 -
谈一谈Redis中的跳表
在阅读《Redis设计与实现》的时候,发现它在阐述跳跃表的原理的时候是简略而过,出于对技术的深究性,我决定还是深入理解一下跳表的原理,并整理讲述给大家听Redis中的跳表在Redis的有序集合中,它的底层数据结构是跳表+字典,字典用于存储键与值的映射关系,可以在查找键对应的值的时候使时间复杂度降到o(1)。而跳表的数据结构是为了可以实现ZRANGE等范围查询功能,因为跳表在范围查询里面效率非常高,这是为什么呢,下面我们就将一一剖析跳表这一数据结构从单链表到跳表对于一个单链表来讲,即便链表中存储的数原创 2020-07-20 01:09:20 · 1051 阅读 · 0 评论 -
Redis中的对象——《Redis设计与实现》读书笔记
由于对象这部分内容的文字比较长,就不作文本阐述了直接上思维导图Redis对象思维导图PNG文件Redis对象思维导图Xmind文件读者可以查看我之前的一些笔记,包含有文字的描述Redis中的压缩列表ziplist——《Redis设计与实现》读书笔记Redis中的字典——《Redis设计与实现》读书笔记...原创 2020-07-19 22:22:02 · 130 阅读 · 0 评论 -
实现服务注册与发现(Zookeeper介绍、安装以及使用)
ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.原创 2020-07-17 12:15:18 · 1018 阅读 · 0 评论 -
WebSocket的原理和golang实现WebSocket服务器
最近一直在做网关的项目,收获了不少关于网络协议的相关知识点,我打算把这些知识点都串起来完成一个大的项目,其中WebSocket就是其中的一个知识点WebSocket知识点Websocket 是服务器推送技术的一种,最大的特点是服务器可以主动向客户端推送消息,客户端也可以主动向服务器发送消息。WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocke原创 2020-07-16 19:50:30 · 2513 阅读 · 1 评论 -
谈一谈go中的限流方法以及time/rate限速器
在高并发系统中有三个常见的利器:缓存、限流、降级缓存:提升系统访问的速度和增大处理的容量降级:当服务器的压力剧增时,可以根据业务策略进行降级、以此释放服务资源保证业务正常限流:通过对并发降速以达到拒绝服务、排队或等待、降级等处理限流器,从字面上理解就是用来限制流量,有时候流量突增比如秒杀活动,会将后端服务压垮,甚至直接宕机,使用限流器能限制访问后端的流量,起到一个保护作用,被限制的流量,可以根据具体的业务逻辑去处理,直接返回错误或者返回默认值等等限流方法目前主流的限流方法有两个:漏桶限流:原创 2020-07-15 16:52:50 · 2289 阅读 · 0 评论 -
Redis中的压缩列表ziplist——《Redis设计与实现》读书笔记 (包括思维导图及xmind源文件)
简介:压缩列表ziplist是为了节约内存而开发的,由一系列特殊编码的连续内存块组成的顺序型数据结构一个压缩列表可以包含多个节点一个节点保存一个字节数组或者一个整数值组成部分zlbytes:整个压缩列表占用的字节数zltail:表尾距离起始地址有多少字节zlen:压缩列表包含的节点数量entry:保存数据的节点、节点长度由节点的内容决定zlend:标记位0xFF,标记压缩列表末端例子表示这个压缩列表占用0x50个字节、尾部节点在0x3c处、节点个数为3个只要用开始指针 p 加原创 2020-07-14 22:04:57 · 214 阅读 · 0 评论 -
在mac下配置golang环境下的swagger,实现api文档的自动生成
身为一位后端程序员,后端api文档的编写是必要的,我们可以使用swag的自动生成来实现api文档的自动生成环境配置我使用的环境是macos和golang要使用swaggo,首先要下载一个swag命令行。go get github.com/swaggo/swag/cmd/swag我们可以使用命令ll -r $GOPATH/bin或者直接进入目录查看我们的bin目录下多了一个swag命令文件我们还需要编辑mac的环境变量才能在命令行里面使用swag命令使用vim编辑器编辑macos的环境原创 2020-07-12 18:41:13 · 2573 阅读 · 1 评论 -
go实现反向代理的四种负载轮询方法(随机、顺序、加权、哈希一致性)
基础知识点在之前的博文我们实现了反向代理,但是缺乏对应的轮询方法(可以查看我之前的博文)在反向代理过程中我们需要知道以下的Header头X-Forwarded-ForX-Real-IP$remote_addrX-Forwarded-For:记录最后连接实际服务器之前的整个代理过程,可能会被伪造比如以下例子,注意X-Forwarded-For的变化如果我们在客户端处设置Header的X-Forwarded-For为99.99.99.99,那么就可以实现伪造X-Real-IP请求的原创 2020-07-11 00:44:14 · 1140 阅读 · 0 评论 -
go实现反向代理服务器(附浅拷贝和深拷贝知识点)
概念正向代理正向代理是一种客户端代理技术,帮助客户端访问无法访问的服务器资源,可以隐藏客户端的真实ip反向代理服务器端的代理技术,帮助服务器负载均衡、缓存、安全校验,可以隐藏服务器的真实ip正向代理实现实现原理:正向代理服务器接收到客户端到request请求,把request拷贝为自己的request发送给服务器,并把服务器返回的数据包装给客户端type Pxy struct {}func (p *Pxy) ServeHTTP(rw http.ResponseWriter,req原创 2020-07-11 00:39:17 · 879 阅读 · 0 评论 -
go语言简易构建Tcp客户端和服务器
TCP实现tcp服务器func main() { //监听相当于java的ServerSocket listener,err:=net.Listen("tcp","0.0.0.0:9090") if err !=nil{ fmt.Printf("listen fail,err : %v\n",err) return } for{ conn,err:= listener.Accept() if err!=nil{ fmt.Printf("accept fail,err原创 2020-07-09 22:56:19 · 432 阅读 · 0 评论 -
Redis中的字典——《Redis设计与实现》读书笔记
字典简介因为C语言没有内置字典结构,所以Redis自己构建了字典的实现。字典在Redis应用十分广泛,对数据库的增、删、改操作都是在字典的操作之上的,比如:SET msg “hello world”。字典还是哈希键的底层实现之一,当一个哈希键包含的键值比较多或者键值对中对元素都是比较长对字符串时,Redis会使用字典作为哈希键底层实现。组成字典在Redis中由 dict.h/dict 定...原创 2020-04-28 12:34:02 · 261 阅读 · 0 评论