- 博客(66)
- 收藏
- 关注
原创 netperf测试最大连接数
上面给出的结论都是理论上的单机TCP并发连接数,实际上单机并发连接数肯定要受硬件资源(内存)、网络资源(带宽)的限制,至少对我们的需求现在可以做到数十万级的并发了。
2022-09-04 23:16:36 1876 1
原创 Leetcode 题解 - 树(1)
递归一棵树要么是空树,要么有两个指针,每个指针指向一棵树。树是一种递归结构,很多树的问题可以使用递归来处理。1. 树的高度104. Maximum Depth of Binary Tree (Easy)Leetcode / 力扣public int maxDepth(TreeNode root) { if (root == null) return 0; return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
2022-03-29 22:06:18 190
原创 # 面向对象思想
一、三大特性封装利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外的接口使其与外部发生联系。用户无需关心对象内部的细节,但可以通过对象对外提供的接口来访问该对象。优点:减少耦合:可以独立地开发、测试、优化、使用、理解和修改减轻维护的负担:可以更容易被理解,并且在调试的时候可以不影响其他模块有效地调节性能:可以通过剖析来确定哪些模块影响了系统的性能提高软件的可重用性降低了构建大型系统的风险:
2022-03-28 22:15:14 178
原创 算法 - 算法分析
数学模型1. 近似N3/6-N2/2+N/3 ~ N3/6。使用 ~f(N) 来表示所有随着 N 的增大除以 f(N) 的结果趋近于 1 的函数。2. 增长数量级N3/6-N2/2+N/3 的增长数量级为 O(N3)。增长数量级将算法与它的具体实现隔离开来,一个算法的增长数量级为 O(N3) 与它是否用 Java 实现,是否运行于特定计算机上无关。3. 内循环执行最频繁的指令决定了程序执行的总时间,把这些指令称为程序的内循环。4. 成本模型使用成本模型来评估算法,例如数组的访问次数就是一种成
2022-03-25 21:39:10 165
原创 算法 - 符号表(2)
红黑树红黑树是 2-3 查找树,但它不需要分别定义 2- 节点和 3- 节点,而是在普通的二叉查找树之上,为节点添加颜色。指向一个节点的链接颜色如果为红色,那么这个节点和上层节点表示的是一个 3- 节点,而黑色则是普通链接。 红黑树具有以下性质:红链接都为左链接;完美黑色平衡,即任意空链接到根节点的路径上的黑链接数量相同。画红黑树时可以将红链接画平。 public class RedBlackBST<Key extends Comparable<Key>, Valu
2022-03-23 21:15:20 189
原创 算法 - 符号表(1)
前言符号表(Symbol Table)是一种存储键值对的数据结构,可以支持快速查找操作。符号表分为有序和无序两种,有序符号表主要指支持 min()、max() 等根据键的大小关系来实现的操作。有序符号表的键需要实现 Comparable 接口。public interface UnorderedST<Key, Value> { int size(); Value get(Key key); void put(Key key, Value value);
2022-03-22 21:34:17 194
原创 算法 - 并查集
前言用于解决动态连通性问题,能动态连接两个点,并且判断两个点是否连通。 方法描述UF(int N)构造一个大小为 N 的并查集void union(int p, int q)连接 p 和 q 节点int find(int p)查找 p 所在的连通分量编号boolean connected(int p, int q)判断 p 和 q 节点是否连通public abstract class UF { protected int[] id;
2022-03-21 21:28:14 91
原创 算法 - 栈和队列
栈public interface MyStack<Item> extends Iterable<Item> { MyStack<Item> push(Item item); Item pop() throws Exception; boolean isEmpty(); int size();}1. 数组实现public class ArrayStack<Item> implements MyStack<
2022-03-17 22:38:33 92
原创 算法 - 排序
约定待排序的元素需要实现 Java 的 Comparable 接口,该接口有 compareTo() 方法,可以用它来判断两个元素的大小关系。使用辅助函数 less() 和 swap() 来进行比较和交换的操作,使得代码的可读性和可移植性更好。排序算法的成本模型是比较和交换的次数。public abstract class Sort<T extends Comparable<T>> { public abstract void sort(T[] nums);
2022-03-16 21:23:31 144
原创 计算机网络 - 应用层
域名系统DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名。 DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大多数情况下 DNS 使用 UDP 进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。在两种情况下会使用 TCP 进行传输:如果返回的响应超过的 512 字节(UDP 最大只支持 512 字
2022-03-12 19:00:00 315
原创 计算机网络 - 网络层
概述因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。 与 IP 协议配套使用的还有三个协议:地址解析协议 ARP(Address Resolution Protocol)网际控制报文协议 ICMP(Internet Control Message Protocol)网际组管理协议 IGMP(Internet Group Mana
2022-03-11 23:30:00 214
原创 计算机网络 - 传输层
网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。UDP 和 TCP 的特点用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。传输控制协议 TCP(T
2022-03-11 19:19:28 117
原创 计算机网络 - 链路层
基本问题1. 封装成帧将网络层传下来的分组添加首部和尾部,用于标记帧的开始和结束。 2. 透明传输透明表示一个实际存在的事物看起来好像不存在一样。帧使用首部和尾部进行定界,如果帧的数据部分含有和首部尾部相同的内容,那么帧的开始和结束位置就会被错误的判定。需要在数据部分出现首部尾部相同的内容前面插入转义字符。如果数据部分出现转义字符,那么就在转义字符前面再加个转义字符。在接收端进行处理之后可以还原出原始数据。这个过程透明传输的内容是转义字符,用户察觉不到转义字符的存在。 3. 差错检测目
2022-03-11 19:17:47 195
原创 计算机网络 - 物理层
通信方式根据信息在传输线上的传送方向,分为以下三种通信方式:单工通信:单向传输半双工通信:双向交替传输全双工通信:双向同时传输带通调制模拟信号是连续的信号,数字信号是离散的信号。带通调制把数字信号转换为模拟信号。 ...
2022-03-10 19:56:52 183
原创 计算机网络 - 概述
网络的网络网络把主机连接起来,而互连网(internet)是把多种不同的网络连接起来,因此互连网是网络的网络。而互联网(Internet)是全球范围的互连网。 ISP互联网服务提供商 ISP 可以从互联网管理机构获得许多 IP 地址,同时拥有通信线路以及路由器等联网设备,个人或机构向 ISP 缴纳一定的费用就可以接入互联网。 目前的互联网是一种多层次 ISP 结构,ISP 根据覆盖面积的大小分为第一层 ISP、区域 ISP 和接入 ISP。互联网交换点 IXP 允许两个 ISP 直接相连而不
2022-03-10 19:55:56 100
原创 计算机操作系统 - 内存管理
虚拟内存虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当程序引用到不在物理内存中的页时,由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失败的指令。从上面的描述中可以看出,虚拟内存允许程序不用将地址空间中的每一页都映射到物理内存,也就是说一个程序不需要
2022-03-09 19:00:00 222
原创 计算机操作系统 - 死锁
必要条件 互斥:每个资源要么已经分配给了一个进程,要么就是可用的。占有和等待:已经得到了某个资源的进程可以再请求新的资源。不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。环路等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。处理方法主要有以下四种方法:鸵鸟策略死锁检测与死锁恢复死锁预防死锁避免鸵鸟策略把头埋在沙子里,假装根本没发生问题。因为解决死锁问题的代价很高,因此鸵鸟策略这种不采取任务
2022-03-09 19:00:00 149
原创 计算机操作系统 - 设备管理
磁盘结构盘面(Platter):一个磁盘有多个盘面;磁道(Track):盘面上的圆形带状区域,一个盘面可以有多个磁道;扇区(Track Sector):磁道上的一个弧段,一个磁道可以有多个扇区,它是最小的物理储存单位,目前主要有 512 bytes 与 4 K 两种大小;磁头(Head):与盘面非常接近,能够将盘面上的磁场转换为电信号(读),或者将电信号转换为盘面的磁场(写);制动手臂(Actuator arm):用于在磁道之间移动磁头;主轴(Spindle):使整个盘面转动。 磁盘调
2022-03-09 19:00:00 120
原创 计算机操作系统 - 进程管理
进程与线程1. 进程进程是资源分配的基本单位。进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。下图显示了 4 个程序创建了 4 个进程,这 4 个进程可以并发地执行。 2. 线程线程是独立调度的基本单位。一个进程中可以有多个线程,它们共享进程资源。QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一
2022-03-09 19:00:00 354
原创 计算机操作系统 - 链接
编译系统以下是一个 hello.c 程序:#include <stdio.h>int main(){ printf("hello, world\n"); return 0;}在 Unix 系统上,由编译器把源文件转换为目标文件。gcc -o hello hello.c这个过程大致如下: 预处理阶段:处理以 # 开头的预处理命令;编译阶段:翻译成汇编文件;汇编阶段:将汇编文件翻译成可重定位目标文件;链接阶段:将可重定位目标文件和 printf.o
2022-03-09 19:00:00 138
原创 计算机操作系统 - 概述
基本特征并发并发是指宏观上在一段时间内能同时运行多个程序,而并行则指同一时刻能运行多个指令。并行需要硬件支持,如多流水线、多核处理器或者分布式计算系统。操作系统通过引入进程和线程,使得程序能够并发运行。共享共享是指系统中的资源可以被多个并发进程共同使用。有两种共享方式:互斥共享和同时共享。互斥共享的资源称为临界资源,例如打印机等,在同一时刻只允许一个进程访问,需要用同步机制来实现互斥访问。虚拟虚拟技术把一个物理实体转换为多个逻辑实体。主要有两种虚拟技术:时(时间)分复用技术和空(空间)
2022-03-08 19:30:00 146
原创 redis
概述Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。数据类型数据类型可以存储的值操作命令STRING字符串、整数或者浮点数对整个字符串或者字符串的其中一部分执行操作 对整数和浮点数执行自增或者自减操作set hello worl
2022-03-07 20:04:23 187
原创 sql语法
基础模式定义了数据如何存储、存储什么样的数据以及数据如何分解等信息,数据库和表都有模式。主键的值不允许修改,也不允许复用(不能将已经删除的主键值赋给新数据行的主键)。SQL(Structured Query Language),标准 SQL 由 ANSI 标准委员会管理,从而称为 ANSI SQL。各个 DBMS 都有自己的实现,如 PL/SQL、Transact-SQL 等。SQL 语句不区分大小写,但是数据库表名、列名和值是否区分依赖于具体的 DBMS 以及配置。SQL 支持以下三种注释:#
2022-03-03 19:41:10 226
原创 mysql(2)
数据类型整型TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 分别使用 8, 16, 24, 32, 64 位存储空间,一般情况下越小的列越好。INT(11) 中的数字只是规定了交互工具显示字符的个数,对于存储和计算来说是没有意义的。浮点数FLOAT 和 DOUBLE 为浮点类型,DECIMAL 为高精度小数类型。CPU 原生支持浮点运算,但是不支持 DECIMAl 类型的计算,因此 DECIMAL 的计算比浮点类型需要更高的代价。FLOAT、DOUBLE 和
2022-03-02 19:00:32 96
原创 MySQL(1)
索引B+ Tree 原理数据结构B Tree 指的是 Balance Tree,也就是平衡树。平衡树是一颗查找树,并且所有叶子节点位于同一层。B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具有 B Tree 的平衡性,并且通过顺序访问指针来提高区间查询的性能。在 B+ Tree 中,一个节点中的 key 从左到右非递减排列,如果某个指针的左右相邻 key 分别是 keyi 和 keyi+1,且不为 null,则该指针指向节点的所有 key 大于等于 keyi 且小于等于
2022-02-28 20:13:44 88
原创 数据库系统原理(2)
隔离级别未提交读(READ UNCOMMITTED)事务中的修改,即使没有提交,对其它事务也是可见的。提交读(READ COMMITTED)一个事务只能读取已经提交的事务所做的修改。换句话说,一个事务所做的修改在提交之前对其它事务是不可见的。可重复读(REPEATABLE READ)保证在同一个事务中多次读取同一数据的结果是一样的。可串行化(SERIALIZABLE)强制事务串行执行,这样多个事务互不干扰,不会出现并发一致性问题。该隔离级别需要加锁实现,因为要使用加锁机制保证同一时间只有一
2022-02-24 20:38:18 136
原创 数据库系统原理(1)
事务概念事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。ACID原子性(Atomicity)事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。回滚可以用回滚日志(Undo Log)来实现,回滚日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。一致性(Consistency)数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对同一个数据的读取结果都是相同的
2022-02-23 20:57:30 191 2
原创 django+drf 前后端分离总结(2)
DRF常见问题DRF 常用组件权限组件局部视图权限from rest_framework.permissions import BasePermissionclass SVIPPermission(BasePermission): message="SVIP才能访问!" def has_permission(self, request, view): if request.user.user_type==3: return True
2022-02-22 19:52:11 327
原创 django+drf 前后端分离总结(1)
django常见问题django设计模式django的内置组件认证组件auth模块models用户模型主要有下面几个字段:username、password、email、first_name、last_name一般我们继承AbstractUser去扩展#注意要在setting设置这个、重载系统的用户,让UserProfile生效AUTH_USER_MODEL = 'users.UserProfile'authenticate() 提供了用户认证,即验证用户名以及密码是否正确,一
2022-02-21 19:12:20 2384
原创 drf 分页
内置分页器分页基类class BasePagination: display_page_controls = False def paginate_queryset(self, queryset, request, view=None): # pragma: no cover raise NotImplementedError('paginate_queryset() must be implemented.') def get_paginated_resp
2022-02-17 18:45:18 619
原创 drf 序列化器
模型类对象-> > python字典: 序列化python字典-> > 模型类对象: 反序列化序列化对象创建对象from datetime import datetimeclass Comment(object): def __init__(self, email, content, created=None): self.email = email self.content = content self.cr
2022-02-16 19:14:08 563 1
原创 drf 解析器
过程执行get_parsersdef get_parsers(self): """ Instantiates and returns the list of parsers that this view can use. """ # 列表生成式获取解析器实例 return [parser() for parser in self.parser_classes]列表生成式获取解析器实例,然后就是看是否我们在类中是否定义了解析类设置了就执行设置的解析类
2022-02-15 19:50:16 578 1
原创 drf 版本
流程self.initial()# 这里的request 是封装后的request,传入def initial(self, request, *args, **kwargs)这个方法def initial(self, request, *args, **kwargs): """ Runs anything that needs to occur prior to calling the method handler. """ self.format_kwarg = se
2022-02-14 19:04:15 278 1
原创 drf频率
过程解析check_throttles()def check_throttles(self, request): """ Check if request should be throttled. Raises an appropriate exception if the request is throttled. 检查是否应该限制请求,如果请求被限制,则引发适当的异常 """ throttle_durations = [] # 循环频率控制类
2022-02-11 19:15:36 282 1
原创 drf权限(2)
内置权限类分析BasePermission默认实现has_permission, has_object_permission方法class BasePermission(metaclass=BasePermissionMetaclass): """ A base class from which all permission classes should inherit. """ def has_permission(self, request, view):
2022-02-10 19:34:51 448 1
原创 drf权限(1)
流程执行initial()方法def initial(self, request, *args, **kwargs): """ Runs anything that needs to occur prior to calling the method handler. """ self.format_kwarg = self.get_format_suffix(**kwargs) # Perform content negotiation and store t
2022-02-09 18:58:39 360
原创 DRF 认证(2)
self.initial()这里的request 是封装后的request,传入def initial(self, request, *args, **kwargs)这个方法def initial(self, request, *args, **kwargs): """ Runs anything that needs to occur prior to calling the method handler. """ self.format_kwarg = self.ge
2022-01-27 17:56:21 3578
原创 DRF 认证(1)
认证流程认证过程解析一、在django中客户端发来的请求会执行视图类的as_view方法,而as_view方法会执行dispatch方法,然后进行反射执行相应的方法(get、post等)反射:通过字符串的形式操作对象相关的属性https://www.chenshaowen.com/blog/reflection-of-python.html1. getattr(object,‘name‘,‘default’)如果存在name的属性方法,则返回name的属性方法,否则返回default的属性
2022-01-26 18:34:02 1082
原创 Django 源码 ORM 查询管理器
ORM 查询管理器对象关系映射, Object Relational Mapping, ORM, 是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。ORM 能大大简化并抽象数据库的操作.假设 django 的一个工程中包含一个名为 Book 的模块(model), 在 views.py 的函数中可能会写出查询语句:# views.pydef index(request): book_set =
2022-01-25 18:26:08 168
原创 Django 源码 ORM
django ORM 源代码组织结构对于数据库, django 有自己的一套 ORM(对象关系映射), 或许其他的框架可以随意更换 ORM, 但 django 不建议这么做. 因为 django 内置有很多的 model, 这些 model 无疑是用 django 内置 ORM 实现的, 如果更换后, 内置的 model 就无效了, 除非以下两个选择:你已经吃透了 django 的 ORM, 定制自己的 ORM, 但必须用里面的规则, 比如类的属性名等等;又或者更换自己的 ORM, 不使用 djan
2022-01-24 18:42:06 529
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人