- 博客(94)
- 收藏
- 关注
原创 常见算法的进阶打怪路程|二叉树 01
的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。平衡二叉搜索树:又被称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。而广度优先遍历的实现一般使用队列来实现,这也是队列先进先出的特点所决定的,因为需要先进先出的结构,才能一层一层的来遍历二叉树。这棵二叉树为满二叉树,也可以说深度为。
2024-09-11 00:10:38
895
原创 常见算法的进阶打怪路程|字符串 01
字符串是若干字符组成的有限序列,也可以理解为是一个字符数组双指针法在数组,链表和字符串中很常用其实很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。先整体反转再局部反转 先局部反转再整体反转KMP的经典思想就是:当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配。那么什么是前缀表:记录下标i之前(包括i)的字符串中,有多大长度的相同前缀后缀。前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。
2024-09-08 01:53:30
210
原创 常见算法的进阶打怪路程|哈希表 01
哈希函数如下图所示,通过hashCode把名字转化为数值,一般hashcode是通过特定编码方式,可以将其他数据格式转化为不同的数值,这样就把学生名字映射为哈希表上的索引数字了。将学生姓名映射到哈希表上就涉及到了hash fashion 也就是哈希函数,把学生的姓名直接映射为哈希表上的索引,然后就可以通过查询索引下标快速知道这位同学是否在这所学校里了。此时为了保证映射出来的索引数值都落在哈希表上,我们会在再次对数值做一个取模的操作,这样我们就保证了学生姓名一定可以映射到哈希表上了。(数组就是一张哈希表)
2024-09-07 01:24:52
777
原创 常见算法的进阶打怪路程|链表 01
- 力扣(LeetCode)curr=cur707. 设计链表 - 力扣(LeetCode)return -1returnreturn206. 反转链表 - 力扣(LeetCode)##双指针法pre=Nonecur=headwhile cur:pre=curcur=ccreturn pre。
2024-09-05 04:21:42
146
原创 常见算法的进阶打怪路程|数组
java中二维数组的每一行头结点的地址是没有规则的,更谈不上连续。数组可以方便的通过下标索引的方式获取到下标下对应的数据。数组是存放在连续内存空间上的相同类型数据的集合。在C++中二维数组在地址空间上是连续的。滑动窗口最主要的思路就是。
2024-08-28 21:27:27
433
1
原创 Linux的super super super easy教程 | 用户态 内核态 终端 reload
当我们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态(比如操作硬件)。于是后面改为make update 就把核心的/sbin/nginx二进制文档给替换成新的。(一般来说用户态大于内核态 当用户态大量对硬件进行读写的时候 内核态会大于用户态)用户空间里面运行的叫用户态(自己的应用程序的代码运行起来的)内核空间里面运行的是内核态(系统调用和内核的代码运行起来的)到时候启动新的worker就是新的二进制文档产生的。
2023-06-09 14:27:44
214
原创 关于日志流量监控预警小小项目 | Flask日志监控脚本
Flask日志监控脚本现在要写一个任务去监控每一秒钟的带宽值(每一分钟去监控三分钟之前的日志)现在就新增一个task需求分析:请求flask的监控项api接口,然后获取monitor数据表的数据---》request.get(“http://x.x.x.x/v1/monitor”)查询数据库原始日志nginxlog三分钟之前的日志 然后放入dataframe循环获取监控项数据表里的数据,依次从dataframe去获取原始日志有没有出发邮件告警也可以生成celer
2022-03-01 13:32:41
3921
原创 关于日志流量监控预警小小项目 | kafka vs redis
而关于客户端的请求:md5的做法需要先实例化一个然后再updaterequest可以自动识别params 于是我们给params字典添加内容就相当于再url?后面指定参数 可以自动识别转化的'Aurhorization':'Basic YXBpOg==',这一段的加密内容是api:Request连接url的时候前面要加上http://具体代码:import requestsimport jsonfrom hashlib import md5appid="fengqi.
2022-03-01 13:30:33
1556
原创 关于日志流量监控预警小小项目 | 对数据库的管理工具:migrate
manage.py的具体内容:#命令行管理flask#flask_script flask的命令行管理工具#安装 pip install flask_script# 首先,创建一个Python模板运行命令脚本,可起名为manager.py;# 在该文件中,必须有一个Manager实例,Manager类追踪所有在命令行中调用的命令和处理过程的调用运行情况;# Manager只有一个参数——Flask实例,也可以是一个函数或其他的返回Flask实例;# 调用manag...
2022-03-01 13:28:17
639
原创 关于日志流量监控预警小小项目 | 在flask里面和数据库交互 标准化返回
在flask里面和数据库交互:使用orm对数据库进行操纵(orm的底层还是pymysql)orm: object relational mapping(对象关系映射)flask不需要和复杂的sql语句打交道 只需要操控orm对象就可以了orm就是用来将数据库里的表结构映射成模型类类产生的对象就是数据库里的每一行记录配置文件setting里面添加数据库配置:第一行:连接数据库SQLALCHEMY_DATABASE_URI =用户名:密码@数据库主机/数据库?字符集
2022-03-01 13:24:10
804
原创 关于日志流量监控预警小小项目 | flask
前半部分架构已经实现了 后半部分Filebeat装在nginx存在的机器里面所用版本:Nginx网站只是为了模拟环境 产生日志flask:是python里面比较出名的web框架主要是看数据包的走向浏览器开发者工具Web服务都是基于http协议的http(超文本传输协议)(hyper text transfer protocol)传输的是超文本(这里的超文本就是源代码) 传输的是源代码 本地拿到了之后当地运行http协议:1991发布第一
2022-03-01 13:20:24
2692
原创 关于日志流量监控预警小小项目 | 环境基础 2
Mysql:方便数据的持久化MySQL的内容:安装 版本:5.7.34 二进制安装 商业版 收费 社区版 免费 MySQL支持分布式和集群 如:阿里 腾讯 百度 美团 小米等都是用的MySQL 脚本安装 安装包去mysql官网 建表建库库在mysql里面就相当于一个文件夹,是存放数据的地方建库:create database 库名;查库:use 库名;#创建表create table nginxlog (id int primar...
2022-03-01 13:16:21
318
原创 关于日志流量监控预警小小项目 | 环境及基础 1
环境及基础:web集群:实现web功能的很多台机器每次访问都会记录日志(access 日志)cdn:内容分发网络(ContentDeliveryNetwork),也就是缓存,有的话直接返回,没有的话就回源,把它缓存下来,下次访问就快了cdn的日志可以定时同步到总部的日志里面去无论写代码还是做架构,没有什么问题是加入中间层解决不了的!!!!一般会是去购买cdn服务(cdn按流量计费)带宽的95值:也就是最小带宽到最大带宽的百分之九十五的位置若是c..
2022-03-01 13:14:03
3784
原创 计算机网络的super super easy 教程 | HTTP
吞吐量:进出的流量配额:分配给你的固定额度网络抖动:网络质量不稳定 一会儿好一会儿坏TCP差错控制体现的是可靠性三次握手四次断开体现的是面向连接问题:为什么是三次握手,却是四次断开带宽:网络的带宽(对于服务器很重要)网络是非常重要的内核参数网络相关的调优:阿里对内核调优的参数:(主要针对tcp三次握手和四次断开的调优 也有arp协议响应的调优)我们对内核参数的调优:(路由转发和 tcp timewait的复用功能和不使用交换分区).
2022-03-01 12:59:34
264
原创 计算机网络的super super easy 教程 | DNAT和SNAT UDP和TCP
DNAT(目标地址转换,Destination Network Address Translantion):修改数据表的目的IP地址作用(应用环境):在互联网中发布位于企业局域网内的服务器 在互联网中发布内网的服务器将一个网络服务器发布出来,让另外的网络能够使用发布:背后是对内部资源的管控SNAT和DNAT可以共存DNAT实验:内网的服务器配置好ip和网关,dns 内网的服务器搭建好web服务,启动ngin...
2022-02-28 19:22:05
724
原创 计算机网络的super super easy 教程 | 网卡网络连接的三种形式
动态路由:IGP(内部网关协议inner gateway protocol 用在一个自治系统 类似于香港特别行政区) rip :老一点 只是适合规模小的网络 基于跳数衡量一条路由的质量(好坏)(最多只能15跳 16便不能到达) ospf:新一点 适合大型的网络 基于开销,代价的(也就是基于带宽 看速度快不快)EGP:(外部网关协议 Exterior gateway protocol) BGP:边界网关路由协议(双方付出代价 交换信息...
2022-02-28 19:18:50
674
原创 计算机网络的super super easy 教程 | IP协议 及 arp协议
网络层:这两个协议只是打包方式及使用材料不相同ip协议arp协议(路由器 电脑查看):只看四个地址 源mac 目的mac(不知道的情况下用00:00:00:00:00:00填充 表示我需要目的mac) 源IP 目的IP网络层arp请求报文封装格式:源mac 目的mac 源IP 目的IP数据链路层的帧封装(交换机 电脑 路由器):目的mac:如果没有用FF:FF:FF:FF:FF:FF填充 源macping 192...
2022-02-28 19:11:55
949
原创 计算机网络的super super easy 教程 | 路由及路由器
路由器的接口需要配置IP地址交换机的接口不需要配置IP地址给交换机配置IP地址是给vlan1配置IP的(WAN口)(路由器默认所有的接口都是vlan1 表示随便哪个LAN口接进来都可以访问)所有的无线路由器的LAN口的IP地址就是vlan1的IP地址用命令行给交换机添加vlan20 并设置IP地址路由器:将数据从一个网段送到另外一个网段 实现跨网段通信交换机:组件局域网(相同网段内的数据传输)子网划分—》把大网划分成小网(给vlan使用)一个vlan内数.
2022-02-28 19:07:34
613
原创 计算机网络的super super easy 教程 | LAN 局域网 IP地址
广播域:能够接收到同一个广播的区域分割广播域物理分割 :两个教室逻辑分割:一个教室 两个人吵架LAN 局域网 vlan 虚拟局域网:是逻辑分割局域网,很多电路在同一个交换机上,我们人为 的将他们分开,导致不能通信(默认情况下 不同vlan就不能通信)(简称为隔离网络 顺带隔离广播)vlan的优势 隔离广播(不至于一发广播所有vlan都能接收)增强网络安全性:不同的vlan默认是不能通信简化网络管理一个vlan就是一个帮派静态vlan...
2022-02-28 19:03:56
779
原创 计算机网络的super super easy 教程 | 基础 及 数据链路层
交换机:组建局域网路由器:实现跨网段通信使用=》将数据从一个网络送到另外一个网络=》上网使用的设备家用或企业的无线路由器:无线交换机+路由器什么是计算机网络?硬件方面:通过线缆将网络设备和计算机连接起来软件方面:操作系统,应用软件,应用程序通过通信线路互连软件和硬件的融合,实现资源共享,信息传递计算机网络:network互联网:internent网站 web协议(protocol):语言,不同设备之间通信使用的 开发软件实现协议,C语言会定义...
2022-02-28 18:59:52
405
原创 python的super super easy教程 | 日志的轮转
日志的轮转按时间 日志文件名称接的是开始时间 TimedRotatingFileHandler按大小 一般日志文件名称接的是大小 RotatingFileHandler#按照大小轮转创建#传入参数:名字 最大字节 备份数量fh=RotatingFileHandler("sc-bak.log",maxBytes=100,backupCount=2)#按时间轮转创建处理器#传入参数:名字 时间单位 周期(这里表示2s轮转一次) 备份数量(保留几个历史轮转文件 2个)fh=Tim.
2022-02-28 18:45:36
204
原创 python的super super easy教程 | 闭包与装饰器
闭包与装饰器变量的生命周期:函数调用完了就释放里面的变量什么是闭包• 在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。• 闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。• 在给定函数被多次调用的过程中,这些私有变量能够保持其持久性def outer(x): a=300 def inner(): print(x+a) return innerd=outer(100)d()#输出为400 说明.
2022-02-26 16:45:19
146
原创 python的super super easy教程 | 元类
python中一切皆对象 类也是对象 类也是由另外一个类创建的对象在实例化的过程中,会调用__init__和__new__方法创建新对象, 该过程对于类而言也不例外。一个类本身又是另一个类的实例,用于创建类的类。负责生成其他类的类就是元类type:创建类的类,称之为元类class animal: def __init__(self,name): self.name=name def eat(self): print("i am eating....
2022-02-26 16:43:09
135
原创 python的super super easy教程 | python中的下划线 魔术方法
迭代器相对于生成器来说,需要自己手动实现__iter__和__next__方法类的三个特征:封装 继承 多态多态主要用于接口的重用经典类和新式类:在Python 2.x及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于“新式类”,不由任意内置类型派生出的类,则称之为“经典类”“新式类”和“经典类”的区分在Python 3.x之后就已经不存在,在Python 3.x之后的版本,因为所有的类都派生自内置类型object(即使没有显示的继承object类型),.
2022-02-26 16:41:27
260
原创 python的super super easy教程 | 类的继承
单例模式:无论实例化多少次,都只返回同一个对象实例,这个一般通过重写__new__实现(对全局配置用单例模式比较好)class only(): obj=None def __new__(cls, *args, **kwargs): if not cls.obj: cls.obj=object.__new__(cls) return cls.obja1=only()a2=only()print(id(a1),id(a2)).
2022-02-26 16:38:27
125
原创 python的super super easy教程 | 类
sorted()排序要巧用元组常见的三种编程范式 函数式编程• 函数可以作为参数传递、修改,或作为返回值• 函数内不修改外部变量的状态 面向过程编程 (函数)• 根据操作数据的语句块来实现功能。 面向对象编程 (OOP-Object Oriented Programming)• 把数据和功能结合起来,用称为对象的东西包裹起来组织程序的方法面向过程着重于做什么面向对象着重于谁去做数据结构是指相互之间存在一种或多种特定关系的数据元素的集合类:用来描述具有相同的属性和方法(能.
2022-02-26 16:36:52
189
原创 python的super super easy教程 | python函数式编程
yield关键字在python中的作用:• 当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。• 当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一个yield。• yield关键字:保留中间算法,下次继续执行send的值:除了可以使用 next() 方法来获取下一个生成的值,用户还可以使用 send() 方法将一个新的或者是被修改的值返回给生成器。除此之外,还可以使用 close() 方法来随时退出生成器。如:def counter(start_at=.
2022-02-26 16:34:14
270
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人