在Kali上配置远程redis服务
1. 下载安装好后,利用自带客户端,保证能够正常访问
2. vim 编辑 redis.conf 配置文件,修改如下参数
注释掉 bind 127.0.0.1
关闭保护模式 protected-mode no
修改守护进程 daemonize yes
添加密码 requirepass passwd
远程链接命令:redis-cli -h 192.168.136.128 -p 6379 -a Fbb33879
Python 杀死正在运行的进程的方式
-
退出标记
-
ctypes 强制杀掉
超大文件按行读取处理
使用mmap
mmap是一种虚拟内存映射文件的方法
将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。
通过建立一个文件的内存映射将使用操作系统虚拟内存来直接访问文件系统上的数据,而不是使用常规的I/O函数访问数据。内存映射通常可以提供I/O性能,因为使用内存映射是,不需要对每个访问都建立一个单独的系统调用,也不需要在缓冲区之间复制数据;实际上,内核和用户应用都能直接访问内存,是目前测到最快的方法。
python
python是强类型的动态脚本语言。
强类型:不允许不同类型相加
动态:不使用显示数据类型声明
脚本语言:解释型语言(运行程序时翻译),运行时不需要编译,只需要解释器
编译型语言:程序运行前需要编译器将程序编译成机器语言(可执行文件)
python是一种解释型语言(运行前不需要解释),是一种动态语言(声明前不需要说明变量类型),适合面向对象编程(支持通过组合与继承的方式定义类),python中一切皆对象;python 编码快,但是运行速度比编译型语言通常要慢。
init 和 new的区别?
使用类名()方式创建对象时,python解释器会先为对象分配内存空间(new),再为对象初始化(init)
new方法内部做了两件事:
1.为对象分配内存空间
2.将对象的引用返回给python的解释器
new分配对象的内存空间–>将对象的引用返回给python的解释器–>python解释器将独享的引用传递给init的第一个参数self–>init在方法的内部针对该对象定义实例属性
sys.getsizeof() 可以得到一个对象使用的内存
python中变量的作用域
变量的作用域由代码中被赋值的地方决定。
变量作用于搜索范围:
-
本地作用域
-
当前作用域被嵌入的本地作用域
-
全局/模块 作用域
-
内置作用域
提升python程序运行性能?
- 使用多进程,充分利用多核性能
- 对于性能影响较大的代码,使用C/C++编写
- 对于IO阻塞造成的性能问题,使用IO多路复用解决
- 尽量使用python内建函数
- 尽量使用局部变量
单例模式应用场景
- 资源共享,避免因资源操作时的导致的性能或损耗。
- 控制资源,方便资源之间相互通信
多线程交互访问数据,如果访问不到就不访问了,如何避免重读?
创建一个已访问数据列表,加上互斥锁,多线程访问时先访问数据列表,若已存在直接跳过
函数可以作为参数传递的语言可以使用装饰器
类方法,类实例方法,静态方法
类方法:类对象的方法,定义时使用@classmethod进行装饰,形参为cls
类实例方法:类实例化对象的方法,只有实例对象可以调用,形参为self,指代对象本身
静态方法:任意函数在其上方用@staticmethod进行装饰,可用对象直接调用,静态方法跟类没太大关系
python 内存管理机制(垃圾回收机制)
- 引用计数
- 标记清除
- 分代回收
- 内存池
断言?
声明表达式的布尔值必须为真判定,发生异常则为假
设置断言的目的就是必须实现某个条件
回调函数如何通信?
把函数指针作为参数传递给另一个函数,将整个函数当作一个对象,赋值给调用的函数。
栈和队列
栈:先进后出
栈是一种限制仅在表的一端(表尾)进行操作(插入和删除)的线性表
表尾 = 栈顶,能插入,删除
表头 = 栈底,啥也不能干
栈的插入 = 入栈,时间复杂度O(1),空间复杂度O(1)
栈的删除 = 出栈,时间复杂度O(1),空间复杂度O(1)
栈是一种特殊的线性表
顺序存储的栈叫做顺序栈(存在栈满);链式存储的栈叫做链栈(不存在栈满)
队列:先进先出
队列是限制只在一端进行插入,在另一端进行删除操作的线性表
链队列;顺序队列;循环队列
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156914.html