Element_UI学习
一、Element-UI
官网:https://element.eleme.cn/#/zh-CN
黑马程序员:
https://www.bilibili.com/video/BV1x64y1S7S7?p=31&spm_id_from=pageDriver&vd_source=501c3f3a75e1512aa5b62c6a10d1550c
1、Element-UI介绍
HTML、CSS语法
一、HTML介绍1、HTML头部解释123<!Document html>: 文档类型声明标签,高速浏览器采用html5版本来显示页面<html lang='en'>: 告诉浏览器是一个英文网站<meta charset='UTF-8'>: 必须写,采用UTF-8保存文字,如果不写就会乱码
2、标题标签1234567// 每个标题标签都会独占一行<h1></h1><h2></h2><h3></h3><h4></h4><h5></h5><h6></h6>
3、段落标签和换行标签1234567// 每个段落标签都会独占一行<p>段落标签</p>// 换行标签是单标签,break的缩写,强制换行,相当于回车换行<br />// 换行标签只是单独开始新的一行,跟段落不一样,段落会插入一些垂直的间距
4、文本格式化标签1234567891 ...
JS语法
一、JS介绍1、js概念
javascript是脚本语言,浏览器会有一个js解释器,对js代码逐行进行解释后执行
https://www.bilibili.com/video/BV1Sy4y1C7ha?p=271&vd_source=501c3f3a75e1512aa5b62c6a10d1550c
ES6语法:
https://www.bilibili.com/video/BV1uK411H7on?p=9
2、js组成
js由三部分组成,如下三部分
ECMAScript: javascript语法,规定了js的编程语法和基础核心知识,是所有浏览器需要保持的一个标准
DOM:页面文档对象模型
BOM:浏览器对象模型,控制浏览器的行为,弹出弹窗、打开页面等等、
3、js的位置
有三种写法,详细看代码,分为行内、内嵌、外部js
注意:外部js的两个script标签之间不可以写内容
123456789101112131415161718<!DOCTYPE html><html lang="en"><head> &l ...
VUE笔记
一、vue介绍
https://www.bilibili.com/video/BV1zq4y1p7ga?p=75&vd_source=501c3f3a75e1512aa5b62c6a10d1550c
1、vue介绍
官网:https://cn.vuejs.org/
是一套用来构建用户界面的前端框架
构建用户界面
用vue给html中填充数据,非常方便
框架
是一套现成的解决方案,用来让程序员遵守欧框架规范编写页面功能
学习重点
Vue的用法、指令、组件(对UI结构的复用)、路由、vue
2、vue的特性2.1 数据驱动视图
在使用了vue的页面里,vue会主动监听数据的变化,然后自动重新渲染页面结构
这样带来的优点:
当页面数据发生变化时,页面会自动重新渲染
注意:
数据驱动视图是单向的数据绑定
2.2 双向数据绑定
双向数据绑定可以服务开发人员在不操作DOM的前提下,自动把想要的数据同步到数据源中
比如:填写表单时,自动会把页面上输入的内容同步到数据源中
双向数据绑定的好处:
如果没有vue,从页面获取数据,需要操作dom,如果需要把 ...
Python异步编程
一、异步编程原理1、I/O概念
参考:https://zhuanlan.zhihu.com/p/572120426
什么是I/O?
顾名思义,它所指的是Input/Output,即输入/输出,对文件实现输入/输出称为I/O
I/O操作的基本对象为文件
文件既可以是设备文件,也可以是普通文件。
Linux系统中,I/O的类型可以分为标准I/O与文件I/O。标准I/O和文件I/O是为了实现对文件读写而封装的两套不同的用户程序编程接口。
标准I/O采用间接系统调用(库函数)的方式实现对文件的读写。
文件I/O采用直接系统调用的方式实现对文件的读写。
同时针对I/O的操作模式,也实现了阻塞I/O、非阻塞I/O、多路复用I/O以及异步I/O,这四种典型的模型。
I/O不会占用CPU!!!
I/O(Input/Output)就是指输入输出操作,包括读写磁盘、网络 ...
Go Zap日志库
一、Zap介绍与安装1、zap介绍
zap是uber公司开源的一款日志库,主要使用Golang语言编写,目前在github上已经有15k+以上的星星,具有速度快、支持结构化、分级的特点
https://www.liwenzhou.com/posts/Go/zap/
2、zap安装
注意:zap只支持Go当前的两个最新的小版本
该笔记使用时是Go1.17版本
1go get -u go.uber.org/zap
二、Zap使用1、zap特点
Zap是非常快的、结构化的,分日志级别的Go日志库。
它同时提供了结构化日志记录和printf风格的日志记录
它非常的快
2、zap性能
来自于github的zap官方库数据
对于在热路径中记录的应用程序来说,基于反射的序列化和字符串格式化是非常昂贵的–它们是CPU密集型的,并且会进行许多小的分配。换句话说,使用编码/json和fmt.Fprintf来记录大量的interface{}s会使你的应用程序变慢。
Zap采取了一种不同的方法。它包括一个无反射、零分配的JSON编码器,基本的Logger努力避免序列化开销和尽可能的分 ...
Go Viper使用
一、viper介绍与安装1、什么是viper?
地址:https://github.com/spf13/viper
Viper是一个完整的Go应用程序(包括Twelve-Factor App)的配置解决方案,它被设计为在应用程序中工作,并能处理所有类型的配置需求和格式。它支持:
设置默认值
读取JSON、TOML、YAML、HCL、envfile和Java properties格式的配置文件
实时监控和重读配置文件(可选)
从环境变量中读取
从远程配置系统(etcd或Consul)中读取、监控配置变化
从命令行参数读取
从缓冲区读取
显式配置值
Viper可以被认为是一个注册表,满足你所有的应用配置需求。
2、viper的特点
为什么选择Viper?
在构建一个现代化的应用程序时,你不想担心配置文件的格式;你想专注于构建一个出色的软件。Viper就是来帮助你的。
Viper为你做以下工作。
查找、加载和解除JSON、TOML、YAML、HCL、INI、envfile或Java属性格式的配置文件。
提供一种机制,为你的不同配置选项设置默认值。
提供一种机制,为通过命令 ...
Go Redis使用
一、搭建Redis环境
前言:使用Docker 来搭建Redis环境
镜像官网:https://hub.docker.com/_/redis
1. 创建redis容器1.1 创建redis容器命令
使用redis-cli客户端连接方式创建redis容器
12345678# 创建redis容器docker run -idt --name redisly -p 6379:6379 redis# 命令参数解释-idt: i表示可以进行交互,t表示开启一个tty终端,d表示在后台运行容器--name: 表示自定义容器名,进入容器时可以使用该名字进入--rm: 表示创建redis容器时候,如果存在redis 、redis-cli先删除再创建-p: 表示将容器内端口映射到宿主机的端口
1.2 创建无密码redis容器
2. 连接redis服务端2.1 redis-cli命令介绍
redis服务器可以通过redis-cli工具进行连接
1234567891011121314151617181920212223242526272829303132333435363738394041 ...
Go并发编程
https://geektutu.com/post/geeorm-day1.html
一、并发编程
go天生支持并发,所以并发编程很重要,需要好好理解
https://mp.weixin.qq.com/s/aN6SuLNzeeeMRYyXWD1V8w
1、并发和并行
相关参考资料:
https://laike9m.com/blog/huan-zai-yi-huo-bing-fa-he-bing-xing,61/
https://zhuanlan.zhihu.com/p/145587728
并发(Concurrency)
并发是同时发生
并行指物理上同时执行
并发的字面意思指的是线程同时开始执行这个事件,后续的执行是串行,还是并行,不确定,依赖于底层的硬件条件和操作系统的调度
并发的“发”
这里的发是指,如果有多个线程,都会同一时间先启动,但是线程里内容先不执行,会根据操作系统调度去交替执行
并行(Parallelism)
并行就是同时执行
并行是指线程同时执行这个过程
并发指能够让多个任务在逻辑上交织执行的程序设计
注意:
并发和并行都必须是多线程的
如 ...
Django笔记
一、Web框架介绍1、Socket实现http服务端123456789101112131415161718192021import socket # 导入socket模块,用于网络通信socket = socket.socket() # 创建一个TCP Socket对象socket.bind(("127.0.0.1", 8888)) # 将Socket绑定到本地地址和端口8888socket.listen(5) # 开始监听连接,最多允许5个未处理的连接while True: # 进入无限循环,等待客户端连接 conn, addr = socket.accept() # 接受客户端连接,返回一个新的Socket对象和客户端地址 data = conn.recv(1024) # 从客户端接收数据,最多接收1024字节 print(f"recv data:{data}") # 打印接收到的数据 conn.send(b"HTTP/1.1 200 OK\r\n\r\n <h1&g ...