- 博客(32)
- 收藏
- 关注
原创 Linux服务器启动80端口:prmission denied
4]. Huang Huang 的博客 . net.ipv4.ip_local_port_range 的值究竟影响了啥 . 2019.05 . https://mozillazg.com/2019/05/linux-what-net.ipv4.ip_local_port_range-effect-or-mean.html。在TCP协议中,通信双方需要各自打开1个端口,然后在这个端口上通过3次握手建立连接,连接建立后双方将会保持端口的占用,直到连接断开,如果端口耗尽后,就会拒绝连接。(例如80、443)
2024-11-26 14:21:07
1020
原创 SQLAlchemy技术手册
对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。
2023-08-22 15:31:51
983
1
原创 搭建地图服务-OSRM
OpenStreetMap它是利用公众集体的力量和无偿的贡献来改善地图相关的地理数据。OSM是非营利性的,它将数据回馈给社区重新用于其它的产品与服务。Leaflet 是一个为建设移动设备友好的互动地图,而开发的现代的、开源的 JavaScript 库。Leaflet设计坚持简便、高性能和可用性好的思想,在所有主要桌面和移动平台能高效运作,在现代浏览器上会利用HTML5和CSS3的优势,同时也支持旧的浏览器访问。支持插件扩展,有一个友好、易于使用的API文档和一个简单的、可读的源代码。
2023-08-17 17:53:23
1890
原创 权限系统设计模型分析(DAC,MAC,RBAC,ABAC)
在 MAC 的设计中,每一个对象都都有一些权限标识,每个用户同样也会有一些权限标识,而用户能否对该对象进行操作取决于双方的权限标识的关系,这个限制判断通常是由系统硬性限制的。属性通常来说分为四类:用户属性(如用户年龄),环境属性(如当前时间),操作属性(如读取)和对象属性(如一篇文章,又称资源属性),所以理论上能够实现非常灵活的权限控制,几乎能满足所有类型的需求。用户与角色是多对多的关系,用户与会话是一对一的关系,会话与角色是一对多的关系,角色与许可是多对多的关系。
2023-08-17 16:43:12
584
原创 如何在macOS上安装NVM 管理note版本
NVM(Node Version Manager)是一个用于在基于Linux系统上安装和管理Node.js的shell脚本。macOS用户可以使用homebrew来安装NVM。本教程帮助你在macOS系统上安装NVM并管理Nodej.is版本。前提条件 在macOS上使用安装。
2023-08-11 13:48:41
914
原创 Git相关配置及常用命令
命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}: 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p。
2023-08-07 14:06:04
84
原创 Docker概念及命令
其它的指令还有ENTRYPOINT、ARG、VOLUME、WORKDIR、USER、HEALTHCHECK、ONBUILD、LABEL等等。--since :显示某个开始时间的所有日志 -t : 显示时间戳 --tail :仅列出最新N条容器日志。:Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。docker run -i -t -- name 名字 centos:7(镜像:版本)等镜像仓库上有大量的高质量的镜像可以用,可以从仓库获取镜像。
2023-08-03 18:15:18
155
原创 进程\线程\协程的概念及区别
协程(co-routine)是比线程更轻量级的存在,又称微线程,在单线程上执行多个任务,用函数切换,开销极小.协程不通过系统调度,由程序控制,拥有自己寄存器上下文和栈,协程切换时,将寄存器上下文和栈保存,切加时恢复先前保存寄存器和栈,因此协程能保留上次调用时的状态,即局部状态的一个特定组合,每次过程重入时,相当于进入上次调用状态.操作系统调度执行的最小单位,也叫执行路径,依赖进程存在,在一个进程中至少有一个线程,叫主线程.多个线程共享内存(数据共享,全局变量共享),提升程序运行效率.
2023-08-03 18:10:11
72
原创 算法的时间与空间复杂度
我们继续看上面的例子,假设每行代码的执行时间都是一样的,我们用 1颗粒时间 来表示,那么这个例子的第一行耗时是1个颗粒时间,第三行的执行时间是 n个颗粒时间,第四行的执行时间也是 n个颗粒时间(第二行和第五行是符号,暂时忽略),那么总时间就是 1颗粒时间 + n颗粒时间 + n颗粒时间 ,即 (1+2n)个颗粒时间,即: T(n) = (1+2n)*颗粒时间,从这个结果可以看出,这个算法的耗时是随着n的变化而变化,因此,我们可以简化的将这个算法的时间复杂度表示为:T(n) = O(n)
2023-08-03 14:48:13
62
原创 网络协议——七层、五层、四层协议概念及功能
这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。但是,当你谈论TCP等具体的协议时又有特殊的叫法,TCP的数据单元称为段 (segments)而UDP协议的数据单元称为“数据报(datagrams)”。它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。
2023-08-02 21:06:03
9091
转载 深入理解“三次握手,四次挥手”
TCP是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务器的内存里保存的一份关于对方的信息,如ip地址、端口号等。TCP可以看成是一种字节流,它会处理IP层或以下的层的丢包、重复以及错误问题。在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在TCP头部。TCP提供了一种可靠、面向连接、字节流、传输层的服务,采用三次握手建立一个连接。采用4次挥手来关闭一个连接。
2023-08-02 10:36:09
132
转载 Python 命令行:click 整理学习
click是一个以尽可能少的代码、以组合的方式创建优美的命令行程序的 Python 包。它有很高的可配置性,同时也能开箱即用。它旨在让编写命令行工具的过程既快速又有趣,还能防止由于无法实现预期的 CLI API 所产生挫败感。任意嵌套命令自动生成帮助支持运行时延迟加载子命令很显然,我们需要针对count和name来定义它们所对应的参数信息。count对应为命令行选项--count,类型为数字,我们希望在不提供参数时,其默认值是 1name对应为命令行选项--name。
2023-07-26 16:49:00
1202
原创 Python版本管理-pyenv
pyenv 可以改变全局的 Python 版本,在系统中安装多个版本的 Python, 设置目录级别的 Python 版本,还能创建和管理 virtual python environments。而 virtualenv 主要是用来管理相同版本 Python 不同项目的包的依赖不同的问题,就无法解决这个问题,这个时候就需要 pyenv。2.迁移时,python3由于依赖于相对高一点的glibc库,要注意迁移与被迁移服务器的glibc的版本问题,版本不同时还需要手动安装,更新时注意。
2023-07-17 15:45:31
2973
1
原创 sqlalchemy中Column的默认值属性default/server_default
我们知道 使用 sqlalchemy 定义 ORM 对象,需要给一些 字段设置一个默认值, default 属性类似下面的代码.name = Column(String(length=64), comment='姓名')is_delete = Column(Integer,comment="是否删除",default=0)(self.id,这样就可以 在 session.add() , session.commit() 的时候,如果没有提供这个字段的值,就会自动设置会0 写入到数据库里面。
2023-07-17 15:29:00
1326
1
原创 Netflix Dispatch 开源项目部署及启动
Netflix 很高兴地宣布我们的危机管理编排框架开源:Dispatch!好的,但是什么是 Dispatch?简单来说,Dispatch 就是:您今天为管理事件而做的所有临时事情,都为您完成,以及您应该做但没有时间的其他一堆事情!Dispatch 通过与整个组织使用的现有工具(Slack、GSuite、Jira 等)深度集成,帮助我们有效管理安全事件。Dispatch 利用这些工具的现有熟悉度来提供编排,而不是引入其他工具。
2023-07-12 16:28:39
361
2
原创 python线程池ThreadPoolExecutor使用
假设我们必须多线程任务创建大量线程。由于线程太多,因此可能会有很多性能问题,这在计算上会是最昂贵的。一个主要问题可能是吞吐量受限。我们可以通过创建一个线程池来解决这个问题。一个线程池可以被定义为一组预先实例化和空闲的线程,它们随时可以开始工作。创建线程池比我们需要执行大量任务时为每个任务实例化新线程更受欢迎。线程池可以管理大量线程的并发执行,如下所示 -
2023-06-30 14:02:00
2284
原创 Python 函数性能分析cProfile+snakeviz
下载相关库:pip install cProfilepip install snakeviz2.应用3.查看分析性能snakeviz load_data.out
2023-06-30 13:35:22
563
原创 asyncio异步IO--协程(Coroutine)与任务(Task)详解
协程(coroutines)是通过定义函数或方法,是使用asyncio进行异步编程的首选途径。如下,是一个协程的例子:123456上例中的main方法就是我们定义的协程。代码的功能很简单:开始打印“hello”沉睡1秒打印“world”结束我们在交互环境(Python3.7)下执行以上代码,看看效果:12345678910helloworld需要注意的是:如果像执行普通代码一样直接调用main(),只会返回一个coroutine对象,
2022-12-16 16:59:25
2092
原创 python多任务之进程、进程与线程对比、进程间通信、进程池Pool
2.1.1 进程程序:例如xxx.py这是程序,是一个静态的进程:一个程序运行起来后,代码+用到的资源 称之为进程,它是操作系统分配资源的基本单元。不仅可以通过线程完成多任务,进程也是可以的2.1.2. 进程的状态工作中,任务数往往大于cpu的核数,即一定有一些任务正在执行,而另外一些任务在等待cpu进行执行,因此导致了有了不同的状态multiprocessing模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情进程对象 =
2022-07-09 18:33:26
379
原创 深拷贝(deepcopy)与浅拷贝(copy)的区别
1.深拷贝与浅拷贝对象的引用(内存地址)”赋值给变量的,在python中有6个标准数据类型,他们分为可变和不可变两类。浅拷贝(copy)1.浅拷贝会创建一个新的容器对象(compound object)2.对于对象中的元素,浅拷贝就只会使用原始元素的引用(内存地址)常见的浅拷贝操作有:注意点:1>拷贝对象中无可变类型元素,原对象的元素值改变不影响新对象的元素值.2>拷贝对象中存在可变类型元素A(例如列表中的子元素是一个字典),拷贝时新对象中可变类型元素A,两者指向同一个内存地址,如果拷贝对象A的值改变
2022-07-02 16:30:57
6421
原创 python 解决json.loads()对不标准json格式序列化异常
移除json多余逗号,避免json.loads报错 兼容不标准的json格式
2022-06-30 17:14:49
2673
转载 Home Assistant 家庭智能中心
简介Home Assistant 是一个基于Python 3开发的开源家庭自动化平台。可以跟踪和控制家庭中的所有设备,并实现自动化控制。 可以完美的运行在Raspberry Pi。1.简单介绍,优势:1完全本地化,不受服务器限制2.支持设备广,全面打通各个平台和设备,如苹果HomeKit,博联3.自定制开发,功能强大,无限可能4.用户基数大,教程资源丰富缺点,需要折腾,有问题要自己解决2.安装,参考官网wWw.home-assistant.io,多种设备安装简单化,树莓派、群晖安装插件HACS参考:在智能家
2022-06-28 09:27:29
16195
1
转载 Python库collections
官方说法:collections模块实现了特定目标的容器,以提供Python标准内建容器dict ,list , set , 和tuple的替代选择。通俗说法:Python内置的数据类型和方法,collections模块在这些内置类型的基础提供了额外的高性能数据类型,比如基础的字典是不支持顺序的,collections模块的OrderedDict类构建的字典可以支持顺序,collections模块的这些扩展的类用处非常大,熟练掌握该模块,可以大大简化Python代码,提高Python代码逼格和效率,高手入门
2022-06-25 14:55:44
15536
2
原创 Leetcode刷题笔记-383. 赎金信-python
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。示例 1:输入:ransomNote = “a”, magazine = “b”输出:false示例 2:输入:ransomNote = “aa”, magazine = “ab”输出:false示例 3:输入:ransomNote = “aa”
2022-06-22 09:24:37
255
原创 Leetcode刷题笔记-1480. 一维数组的动态和
给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。示例 1:输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。示例 2:输入:nums = [1,1,1,1,1]输出:[1,2,3,4,5]解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1] 。示例 3:输入:n
2022-06-21 17:25:13
851
1
原创 python多任务之线程、全局变量、互斥锁
多线程:线成是cpu调度的单位.多进程:操作系统分配资源的单位.并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务轮流交替执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已)并行:对于多核cpu处理多任务,操作系统会给cpu的每个内核安排一个执行的任务,多个内核是真正的一起同时执行多个任务.这里指的是任务数小于等于cpu核数,多核cpu是并行的执行多任务,始终有多个任务一起执行.python的thread模块是比较底层的模块,python的threa
2022-06-21 11:35:59
1941
原创 anaconda 64位和32位的python共存
注:如本机为32位anaconda则无法切换为64位python版本:3.6anaconda对于python版本的管理还是很方便的,所以这里用anaconda才实现32位和64位python共存1、打开anaconda prompt,输入conda info,可以看到现在用的是64位的。2、切换成32位的set CONDA_FORCE_32BIT=1可以看出已经切换成32位的了3、安装32位的python3.6conda create -n python...
2021-07-09 18:06:04
1613
原创 selenium:鼠标动作链及模拟键盘事件
1.鼠标动作链有些时候,我们需要再页面上模拟一些鼠标操作,比如双击、右击、拖拽甚至按住不动等,在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。方法 说明ActionChains(driver) 构造ActionChains对象context_click() 执行鼠标悬停操作move_to_element(above) 右击double_click() 双击context_click() 用于模拟鼠标右键操作, 在调用时需要指定元素定位perfo
2021-02-02 18:52:12
715
原创 seleniumr的WebDriver的入门方法
Selenium 的 WebDriver提供了各种方法来寻找元素,假设下面有一个表单输入框:<input type="text" name="user-name" id="passwd-id" />那么:# 获取id标签值element = driver.find_element_by_id("passwd-id")# 获取name标签值element = driver.find_element_by_name("user-name")# 获取标签名值element = dri
2021-02-02 18:44:13
195
原创 selenium的webdriver三种等待方式(显式等待WebDriverWait+implicitly_wait隐式等待+sleep强制等待)
selenium的webdriver三种等待方式(显式等待WebDriverWait+implicitly_wait隐式等待+sleep强制等待)**1、显式等待**一个显式等待是你定义的一段代码,WebDriverWait,配合该类的until()和until_not()方法,每隔xx秒进行判定,用于等待某个条件发生然后再继续执行后续代码。超过设置的最长时间,抛出TimeoutExcep...
2020-03-23 10:46:22
2222
原创 selenium 弹窗确认异常 元素定位异常
弹窗确认异常,原因多数为两种情况:一.frame因素,情况有二:1.未获取frame,无法找到定位元素.处理方法:#定位元素所属的frame(id=frmMain)Frame = browser.find_element_by_xpath('//*[@id="frmMain"]') #进入framebrowser.switch_to.frame(Frame)#点击确定按钮brow...
2020-01-09 16:30:30
893
原创 IDEA 使用Git插件本地推送至远程 步骤
IDEA 使用Git插件本地推送至远程 步骤1.首先确认提交Git分支2.commit提交至本地3.选择文件夹,推送至远程
2019-12-23 13:36:19
218
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人