Lua
Lua
学习文档:LuatOS 文档
在线环境:LuatOS 在线模拟 - lua在线测试
官网:official::The Programming Language Lua
官方API手册:official::Lua 5.3 Reference Manual - contents
中文API手册:Lua 5.3 参考手册 - 目录 (luatos.com)
一、Lua基础1 下载安装
下载安装:
下载:official::Lua Binaries Download (sourceforge.net)
将解压结果放到自定义的一个位置
编辑环境变量:环境变量——系统变量——Path——新建D:\lua(假设在D盘下)
在cmd中运行lua,如果不行就看exe后面的数字是什么(版本),假设是lua54.exe,则可以输入lua54即可进入lua环境,可以进入表明环境添加成功。
可以在cmd中直接lua54 name.lua运行相应的lua程序。
2 数字变量
作用域:lua中声明的变量默认是全局变量,在其他文件中也可以使用。如果只想在当前文件夹中使用需要加上local
空值:lu ...
微信小程序
微信小程序
一、相关概念1 基础知识
微信的前端语言类似于网站开发的前端语言:
HTML(wxml)
CSS(wxss)
JavaScript(js)
微信小程序开发IDE:微信小程序开发者工具。
本地开发环境:
开发者工具
后端API
线上部署环境:
开发者工具,提交至微信(进行体验、发布)
API同时也需要部署到线上环境
2 工作流程
下载开发者工具:official::概览 | 微信开放文档 (qq.com)
注册小程序(ID):official::小程序 (qq.com)
个人版小程序:主要是没有支付功能
企业版小程序:可以结合自己的商户平台,管理支付数据。
登录账号:official::微信公众平台 (qq.com)
开发前端
开发后端
二、基本知识1 初始界面
新建项目:绑定ID,然后后台服务不要选择云开发,云开发废钱。然后可以选择语言模版,一开始选JavaScript模板。
查看ID:Web上进行登录,登录后在开发——开发管理处查看。
初始配置:
微信小程序默认是https模式。在本地测试时,需要将其修改成http模式,防止数据包无法发送到后端 ...
Celery
Celery
author::牛哄哄的celery
一、Celery1 定义
Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,专注于实时处理的异步任务队列,同时也支持任务调度。
Celery的架构由三部分组成:
消息中间件(message broker):Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括RabbitMQ,Redis等等任务执行单元。
人物执行单元(worker):Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。
人物执行结果存储(task result store):Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, Redis等
消息处理顺序:
User:生产者,产生消息的一方。如:Django。
message broker:消息中间件,管理消息的分发。如:RabbitMQ、Redis。
worker:执行单元,异步任务的执行者。如:Celery。
task result store:存储 ...
RabbitMQ
RabbitMQ
author::消息队列之真知灼见
Python三方库:Pika(RabbitMQ基础使用)
一、消息队列1 定义
MQ:全称为Messge Queue消息队列(MQ)是一种应用程序对应用程序的通信方法。MQ是消费生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。这样发布者和使用者都不用知道对方的存在。
生产者—消费者模式:生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题,生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯。所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。
作用:消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。
具体作用:
解耦:当一个模块需要向另一个模块发送消息时,它不 ...
MySQL
MySQL一、数据库概述1 基础
数据库(DataBase):DB,存储数据的仓库,数据是有组织的进行存储。
数据库管理系统(DataBase Management System):DBMS,操纵和管理数据库的大型软件。
SQL(Structured Quer Language) :SQL语句。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准
Mysql有商业版和免费版,商业版官方会提供技术支持。
关系型数据库(RDBMS):建立在关系模型基础上,由多张相互连接的二维表组成的数据库。Mysql是关系型数据库。
关系型数据库特点:
使用表存储数据,格式统一,便于维护。
使用SQL语言操作,标准统一,使用方便。
工作流程:Client链接DBMS,利用DBMS操作DB。
2 下载和管理
official::MySQL Community Downloads
安装:
Type and Networking:next
Authentication Method:next
Accounts and Roles:设置root的用户密码。
Windows Service:nex ...
Nginx
Nginx一、基本知识1 安装
Linux:
sudo apt update
sudo apt install nginx
Mac:
brew install nginx
Windows:
scoop install nginx
choco install nginx
Docker:
docker pull nginx
因为Nginx是用C语言编写的,所以也可以直接下载源码,然后自行修改配置后编译执行 。
2 启动
Linux启动:
nginx:启动,启动成功后不会返回任何消息。localhost可以直接访问到,浏览器中返回It works。
ps -ef|grep nginx:查看nginx进程。
lsof -i:80:查看80端口的任务。
Linux调度:
nginx -s quit:优雅停止。
nginx -s stop:立即停止。
nginx -s reload:重载配置文件。
nginx -s reopen:重新打开日志文件。
Docker启动:
docker run -d nginx
Nginx进程模型:有两种,本别是master和work ...
selenium模块
selenium模块一、基础知识1 基础
official::Selenium 浏览器自动化项目 | Selenium
API:键鼠操作
驱动下载:
google下载
驱动与版本映射关系(网盘有)
116-118版本
等待
隐式等待
driver.implicitly_wait(time_to_wait=10)(界面全部加载完成后才会向下执行代码,超出时间则抛出异常)
2 使用驱动# 使用驱动from selenium.webdriver.chrome.service import Serviceser = Service(r"./chromedriver.exe")bro = webdriver.Chrome(service = ser)
3 简单使用# 简单使用from selenium import webdriver# 打开浏览器driver = webdriver.Chrome()# 打开的网址driver.get(" ")# 获得源码text = driver.page_sourcefrom selenium.webdr ...
Scrapy
Scrapy
official::Scrapy Tutorial — Scrapy 2.11.0 documentation
一、基础文件1 基础
安装:pip install scrapy
功能:高性能的持久化存储,异步的数据下载,高性能的数据解析,分布式。
# 基本使用# 在当前路径下创建工程scrapy startproject <name>
2 spiders文件2.1 命令# *该文件下必须放置一个爬虫文件*# 进入工程文件目录cd url# 在spiders中创建一个爬虫文件scrapy genspider <name> <url># 执行爬虫(-nolog:无日志显示,-o <path>:持久化存储)scrapy crawl <name>
2.2 类变量import scrapyclass FirstSpider(scrapy.Spider): # 爬虫文件的名称:就是爬虫源文件的唯一标识 name = "first" # 允许的域名:用来限定start_urls中哪些可 ...
Python高级
Python高级
一、内存管理1 内部结构1.1 环状双向链表
环状双向链表(refchain)。在python程序中创建的任何对象都会放在refchain链表中。
static PyObject refchain = {&refchain, &refchain, ...}
假设我name = "Bob",内部的结构体会存上:上一对象、下一对象、类型、引用个数等内容。如果此时我再new = name,那么引用个数则会增加1个。
对于所有对象来说,内部结构体都会存上上一对象、下一对象、类型、引用个数,而不同的数据类型还会存储一切额外内容。比如创建int还会将int值存入结构体,创建list还会将列表,列表长度存入结构体。
综上:每个对象都有PyObject结构体,由多个元素组成的对象则是:PyObject + ob_size
// C语言源码#define Pyobject_HEAD Pyobject ob_base;#define Pyobject_VAR_HEAD PyVarobject ob_base;// 宏定义,包含 上 ...
Websocket
Websocket一、基础知识1 通讯方式
轮询:让客户端每隔一定时间向服务端发送一次请求。缺点:延迟、请求太多服务端压力大。
长轮询:客户端向服务端发送请求,服务器保持这个请求一定时间,一旦有数据到来就立即返回数据。否则保持一段间后返回没有新数据,此时客户端重新发送请求,保持循环。优点:数据的响应没有延迟。例如:WebQQ,Web微信等。
websocket:客户端和服务端创建连接以后,这个连接不会断开。那么就可以实现双向通信。
二、 轮询方式1 简单案例
前端定时向后端发送请求,后端发现数据更新后将新数据发送回去。
前端设定了一个index,来确保每次发送的数据都是新数据,不用重复发送数据。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> .message{ h ...