经典七层网络模型
以前: 为什么我用不到面试还要问?现在: 为什么我会用到这东西啊? 前言七层网络模型是每一个程序员在基础学习的时候都需要面对的一个知识点,与其相关的还有五层模型与四层模型,其实都是一个东西在不同场景使用和描述的不同,本质上差不多。 七层模型全称是OSI七层模型,其中OSI叫做国际标准化组织,这个组织专门为全球制定一些标准。 OSI七层模型依照顺序从上往下分别是: 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 建立七层模型的主要目的是为解决各种网络互联时遇到的兼容性问题。其最大的优点是将服务、接口和协议这三个概念明确地区分开来:服务说明某一层为上一层提供一些什么功能,接口说明上一层如何使用下层的服务,而协议则是如何实现本层的服务。如此各层之间就具有很强的独立性,互联网络中各实体采用什么样的协议是没有限制的,只要向上提供服务并且不改变相临层的接口就可以了。网络七层的划分也是为了使用网络的不同功能模块分担起不同的职责,也就带来如下好处: 减轻问题的复杂程度,一旦发生网络故障,可迅速定位故障所处层次 在各层分别定义标准接口,使具备相同对等层的不同网络设备能实现互操作。...
top命令基础
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。top命令展示的信息众多,初学者可能不能够快速掌握所有信息概况,以下对top命令基础进行简单讲解。 top在使用了top命令后会出现以下数据样式: 1234567891011121314151617top - 01:05:24 up 9 min, 0 users, load average: 0.00, 0.04, 0.05Tasks: 138 total, 1 running, 137 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.1 us, 0.3 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 7990064 total, 7001532 free, 698000 used, 290532 buff/cacheKiB Swap: 8257532 total, 8257532 free, 0 ...
shell环境变量
bash shell用一个叫作环境变量(environment variable)的特性来存储有关shell会话和工作环境的信息(这也是它们被称作环境变量的原因)。这项特性允许你在内存中存储数据,以便程序或shell中运行的脚本能够轻松访问到它们。这也是存储持久数据的一种简便方法。 简单来说环境变量就是在交互环境中预先被设定的变量,能够让程序启动的时候更快的找到他们或者为某些程序预先设置运行条件的变量设置。如电脑中两个Java,指定环境变量能够让Java默认启动第一个或者第二个。 在shell编程中尽量使用大写字符作为变量名称。并且环境变量不能够以数字作为变量名的开头。 环境变量发赋值与输出12变量名称=变量值echo $变量名称 全局变量与局部变量全局变量生效与所有的shell环境中。 export a=1 1234567[root@my server~]# echo $b2[root@myserver~]# b=2[root@myserver~]# export b[root@myserver~]# bash[root@myserver~]# echo $b2 局部...
conda那些命令
命令 创建虚拟环境 : conda create --name my_first_env python=3.6 列出虚拟环境 : conda env list 激活虚拟环境 : conda activate my_first_env 查看环境信息 : conda info -e 根据路径激活虚拟环境 : conda source /root/python/bin/activate 推出虚拟环境 : conda deactivate 删除虚拟环境 : conda remove -n your_env_name --all 创建时候安装需要的包 : conda create -n env_name numpy matplotlib python=2.7 在离线的时候创建虚拟环境 : conda create -n env_name --offline python=3.8 环境复制 : conda create --name new_env_name --clone old_env_name 查看所有包 : conda list conda 环境打包安装需要的...
一个简单的定时任务
在编写某些脚本的时候往往需要使用到定时执行任务,定时执行任务可以通过下发多进程或者使用某些调度算法实现,在python中为开发者提供了一个库可以快速实现定时任务并且不让主进程受到干扰。这个库就叫做:APScheduler。 简介dvanced Python Scheduler (APScheduler) 是一个Python库,可实现延迟调度要执行Python代码的功能,可以只执行一次,也可以定期执行。可以随时添加新任务或删除旧任务。如果将job任务存储在数据库中,这些任务还将在重新启动调度程序后保持它们的状态并继续运行。当重新启动调度程序时,它将运行离线时应该运行的所有job任务,这个功能可以让程序弥补由于外部情况损失的任务。这个库有四个组件: triggers触发器 : 包含调度逻辑,每一个job有它自己的触发器,用于决定job下一次运行时间。除了初始配置外,触发器完全是无状态的。 job stores作业存储 : 存储被调度的job,默认的job存储是简单地把job存储在内存中,其他的job存储是保存在数据库中。Job的数据在保存到持久化存储时被序列化,并在加载时进行反序列...
进程锁与进程池
如果多个进程抢占去对某一个共同的对象的操作的时候,为了防止操作产生冲突,这个时候就可以通过锁的操作来避免。 案例展示以下展示没有使用锁的案例: 123456789101112131415import timefrom multiprocessing import Process,Value,Arraydef test_func(n,): n.value = n.value + 1if __name__ == "__main__": num = Value('i',0) for i in range(20): p = Process(target=test_func,args=(num,)) p.start() time.sleep(1) print(num.value) 当改变time.sleep()的时间,就会发现每一次打印的结果都不一样,是因为多个进程在操作同一个对象的原因,在实际的工作当中,多个进程操作同一个对象是非常危险的时候,很有可能导致数据错乱或者数据不同步的情况发生。...
RGB与CMYK
在最近的工作中经常遇到图像处理相关知识,因此做一个记录: RGB模式RGB模式是以色光三原色为基础建立的色彩模式,RGB图像只使用三种颜色,当不等量的三种色光进行叠加混合时,即会在屏幕上重现自然界各种各样的颜色。红、绿、蓝每一种颜色各有256级亮度,用数字表示为从0、1、2…..直到255,256级的RGB色彩总共能组合出约1678万种色彩。RGB模式是电脑、手机、投影仪、电视等屏幕显示的最佳颜色模式。 CMYK模式CMYK是4种印刷油墨名称的首字母:青色Cyan、洋红色Magenta、黄色Yellow和黑色Black。之所以没有缩写成B(Black),是为了和RGB的B区分开,此外表示K印版是起关键作用的印版,在图像中能起到一种”骨架”的作用。CMYK主要应用于印刷,它的颜色由四个通道组成。印刷时,C、M、Y、K各出一张菲林。 两者都是作为计算机颜色的表示工具,前者更适合电脑,后者更适合打印,前者的色域更广,后者略微少,但是两者都有自己独特的色域。 补充 灰度RGB 是以三原色为基础的图像,因此被成为三通道图,而灰度图就是单通道图,只有一个颜色阶级,因此图像总体呈现灰色...
三层架构/MVC/MTV
在以前的时候,我总是把这三者混为一谈,总以为是不同语言或者不同环境条件下的称呼或者变种,后来我逐渐明白这是不一样的。 三层架构web开发其实并不一定需要遵循某一个框架进行开发,其实上能够实现web服务就行,但是在长期的摸索跟探究过程中,前人根据自己的经验进行总结,得出依据某个框架或者某个模式进行开发是一个较为高效的过程。 界面层(表示层):用户看的界面。用户可以通过界面上的组件和服务器进行交互 业务处理逻辑:处理业务逻辑的 数据访问层:操作数据存储文件 本质上这是一个线性结构,从上往下: 表示层请求数据,发送给业务逻辑层 业务逻辑层根据情况去数据访问层进行数据查询 从下往上: 数据访问层提交原始数据给业务逻辑层 业务逻辑层将处理后的数据提交给表示层 整个过程是一个线性结构从上至下的请求数据,数据从下往上进行返回 三层架构的优缺点优点:1、高内聚,低耦合2、方便维护,易于扩展3、开发人员可以只关注某一层,有利于分工协作,加快开发速度 缺点:1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层...
python进程基本使用
常用方法p.start() 与 p.join() p.start():当前进程准备就绪,等待被CPU调度,简单理解也就是启动进程 p.join():等待当前进程的任务执行完毕后再向下继续执行 代码如下: 123456789101112131415import multiprocessingdef task(ele): print(ele) print("执行中")if __name__ == "__main__": multiprocessing.set_start_method("spawn") ele = [] res = multiprocessing.Process(target=task,args=(ele,)) res.start() res.join() print("继续执行") res.join()的出现会使得程序在执行完子进程之后再继续执行主进程,当然,上述案例已经让程序按顺序执行了,进程意义不大了。 p.daemon = b...
python进程基础
在学习python进程相关知识的时候,查询各种网站或者博客,对于进程的解释都没有那么全面,有时候仅给出部分案例,导致代码有时候爆出一些莫名其妙的错误,因此写下这篇基础文章。 python 的三种进程模式在python当中进程被分为三种模式,不同的模式有不同的约束条件,也有不同的运行场景,需要依据情况而定: fork spawn forkserver 拷贝几乎程序拥有的所有资源 需要从启动函数处传入程序运行的必要资源 需要从启动函数处传入程序运行的必要资源 支持文件对象/线程锁等传参 不支持文件对象/线程锁等传参 不支持文件对象/线程锁等传参 unix unix/win 部分unix 快 慢 — 任意位置创建 main函数开始 main函数开始 注:main函数指: 12>if __name__ == "__main__": pass 并非指代函数名为main函数的函数。 案例fork123456789101112import multiprocessingdef task()...














