一、背景
各种静态资源太大,从服务器获取静态资源很慢
二、nginx使用gzip
server{ gzip on; gzip_buffers 32 4K; gzip_comp_level 6; gzip_min_length 100; gzip_types application/javascript text/css text/xml; gzip_disable MSIE [1-6]\.; #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持) gzip_vary on; } 三、解读
gzip配置的常用参数 gzip on|off; #是否开启gzip gzip_buffers 32 4K| 16 8K #缓冲(压缩在内存中缓冲几块? 每块多大?) gzip_comp_level [1-9] #推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源) gzip_disable #正则匹配UA 什么样的Uri不进行gzip gzip_min_length 200 # 开始压缩的最小长度(再小就不要压缩了,意义不在) gzip_http_version 1.0|1.1 # 开始压缩的http协议版本(可以不设置,目前几乎全是1.1协议) gzip_proxied # 设置请求者代理服务器,该如何缓存内容 gzip_types text/plain application/xml # 对哪些类型的文件用压缩 如txt,xml,html ,css gzip_vary on|off # 是否传输gzip压缩标志
一、准备工作 VMware16安装:
下载地址:https://download3.vmware.com/software/WKST-1623-WIN-New/VMware-workstation-full-16.2.3-19376536.exe
安装过程略
VMware16激活许可证:ZF3R0-FHED2-M80TY-8QYGC-NPKYF
Ubuntu 18.04官网下载地址:
https://releases.ubuntu.com/18.04.6/ubuntu-18.04.6-desktop-amd64.iso
二、创建虚拟机 新建虚拟机,选择自定义 选择稍后安装操作系统 ![image-20220515195912813](D:\file\MarkdownFiles\VMware16安装Ubuntu 18.04 LTS.assets\image-20220515195912813.png)
自行修改名字和安装路径 选择2核2线程,根据自己系统配置提高或降低配置 2 GB内存 选择NAT网络 根据需要调整磁盘大小,30-40 GB,下面选项任意即可 完成 编辑虚拟机配置,如图,选择前面下载好的系统镜像 三、虚拟机安装系统 启动虚拟机,若遇到蓝屏问题,请看本文第四部分。翻到最下面选择 中文(简体),点击 安装Ubuntu
最小安装,不下载更新,点击继续
选择第一项(安装在虚拟机中,不用担心本机的数据被清除)
位置选择Shanghai
输入用户名密码,自己的电脑上密码可以设置简单一点,方便使用
安装中
安装完成
四、优化 替换下载源为国内下载源,加快下载速度
首先备份下载源:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bcakup 打开sources.list文件,清空里面的内容,替换为国内源
sudo gedit /etc/apt/sources.list # 阿里云源 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.
制作Openstack使用的windows镜像 一、准备工作 1.首先安装一台带GUI的centos7的8G虚拟机(勾上kvm)
2.需要准备以下软件(我这个不提供,自行网上下载)
3.需要装一个openstack云平台,请参照我这篇博客(https://www.cnblogs.com/whwh/p/16251336.html)
二、对centos7进行配置 1.修改主机名 [root@localhost ~]# hostnamectl set-hostname kvm [root@kvm ~]# bash 2.关闭防火墙 [root@kvm ~]# systemctl stop firewalld [root@kvm ~]# systemctl disable firewalld [root@kvm ~]# iptables -Z [root@kvm ~]# iptables -F [root@kvm ~]# iptables -X 3.关闭selinux [root@kvm ~]# cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced.
一、概述
Mysql 中有多种数据类型可以用于日期和时间的表示,不同的版本可能会存在差异,下面的表格中列出了 Mysql 5.7 中所支持的日期和时间类型
日期和时间类型 存储占用磁盘空间大小 最小值 最大值 YEAR 1 个字节 1901 2155 TIME 3 个字节 -839:59:59 839:59:59 DATE 4 个字节 1000-01-01 9999-12-31 TIMESTAMP 4 个字节 1970 年的某个时刻 2038 年的某个时刻 DATETIME 8 个字节 1000-01-01 00:00:00 9999-12-31 00:00:00 每一种时间日期格式都有一个有效范围,如果超出这个时间范围,在默认的 SQLMode 下,系统会进行错误提示,并且都以 零值 来进行存储
二、各种类型的区别
每一种时间日期类型都有不同的使用场景,一般来说使用最多的是 TIME、DATE、TIMESTAMP、DATETIME,下面就来简单看一下这几种类型的区别
创建 test 表
CREATE TABLE `test` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键 id', `d` date NOT NULL DEFAULT '1900-01-01' COMMENT '年月日格式', `t` time NOT NULL DEFAULT '00:00:00' COMMENT '时间格式', `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '年月日时分秒', `dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '年月日时分秒', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 需要注意的是 date 类型不能设置默认值 current_date, time 类型也不能设置默认值 current_time,需要用字符串设置一个默认的时间日期格式
本文示例在虚拟机 Rocky Linux 8.5 系统中编译安装 Nginx 开源版软件。
关于虚拟机 Rocky Linux 8.5 系统的安装配置教程可参考这篇文章:VMware 虚拟机图文安装和配置 Rocky Linux 8.5 教程 Nignx 开源版软件官网:https://nginx.org,当前最新版本是:1.21.6,下载链接:https://nginx.org/download/nginx-1.21.6.tar.gz 1. 下载并解压 # dnf install -y wget wget https://nginx.org/download/nginx-1.21.6.tar.gz tar -zxvf nginx-1.21.6.tar.gz 2. 依赖检查和编译安装 2.1 配置检查依赖库并创建 Makefile cd nginx-1.21.6 # --prefix 参数配置表示将 make install 将会把 nginx 安装到该目录中去 ./configure --prefix=/usr/local/nginx 若提示“./configure: error: C compiler cc is not found”表示缺少 C 编译器 cc 依赖:
安装缺少的 C 编译器 cc 依赖:
linux 防火墙 vsftpd安装配置
安装vsftpd1、安装yum install vsftpd2、设置开机自启systemctl enable vsftpd3、启动ftp服务systemctl start vsftpd防火墙 firewallsystemctl status firewalld 查看状态systemctl enable firewalld 启用防火墙 永久systemctl stop firewalld 停止防火墙 重启后失效systemctl disable firewalld 禁用防火墙 永久systemctl start firewalld 启动
systemctl restart firewalld 重启查看已打开的端口 netstat -anp添加允许的端口 firewall-cmd --add-port=8080/tcp --permanent若移除端口 firewall-cmd --permanent --remove-port=8080/tcp
策略修改完成,请重启: systemctl restart firewalld
加87的ftpZone白名单firewall-cmd --permanent --zone=ftpZone --add-source=00.00.000.00
重置systemctl restart firewalld查看是否成功firewall-cmd --list-all-zone
vsftpd 添加用户并指定新目录useradd -d /opt/utils/xxx/xxx/ -s /sbin/nologin ftpnamepasswd ftpname把新用户名加在这个文件夹下vim /etc/vsftpd/chroot_listservice vsftpd restart
修改文件夹权限就影响用户对这个文件夹的读写权限chmod 777 *
vsftpd 修改默认文件夹vim /etc/vsftpd/vsftpd.confservice vsftpd restart
ps(process status),列出系统中当前运行的进程,类似于windows的任务管理器。
参数:ps的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
-A 列出所有的进程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
-------------------------------------------------------------------------------------------------------
常用参数:
-A 显示所有进程(等价于-e)(utility)
-a 显示一个终端的所有进程,除了会话引线
-N 忽略选择。
-d 显示所有进程,但省略所有的会话引线(utility)
-x 显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用。(utility)
-p pid 进程使用cpu的时间
-u uid or username 选择有效的用户id或者是用户名
-g gid or groupname 显示组的所有进程。
U username 显示该用户下的所有进程,且显示各个命令的详细路径。如:ps U zhang;(utility)
-f 全部列出,通常和其他选项联用。如:ps -fa or ps -fx and so on.
-l 长格式(有F,wchan,C 等字段)
-j 作业格式
-o 用户自定义格式。
v 以虚拟存储器格式显示
s 以信号格式显示
-m 显示所有的线程
-H 显示进程的层次(和其它的命令合用,如:ps -Ha)(utility)
e 命令之后显示环境(如:ps -d e; ps -a e)(utility)
1,顿号 插入数据 insert into order_table VALUES(1,001,100,'2018-01-01 00:00:00'); insert into order_table VALUES(2,001,300,'2018-01-02 00:00:00'); insert into order_table VALUES(3,001,500,'2018-01-02 00:00:00'); insert into order_table VALUES(4,001,800,'2018-01-03 00:00:00'); insert into order_table VALUES(5,001,900,'2018-01-04 00:00:00'); insert into order_table VALUES(6,002,500,'2018-01-03 00:00:00'); insert into order_table VALUES(7,002,600,'2018-01-04 00:00:00'); insert into order_table VALUES(8,002,300,'2018-01-10 00:00:00'); insert into order_table VALUES(9,002,800,'2018-01-16 00:00:00'); insert into order_table VALUES(10,002,800,'2018-01-22 00:00:00'); 按照功能划分,可以把MySQL支持的窗口函数分为如下几类:
序号函数:row_number() / rank() / dense_rank() 分布函数:percent_rank() / cume_dist() 前后函数:lag() / lead() 头尾函数:first_val() / last_val() 其他函数:nth_value() / nfile() select order_id,user_no,amout,creat_date,row_number()over(partition by user_no order by amout desc) as rank_no from order_table 三、窗口函数如何使用
01.字符串函数
* SQL Server
> Concat 函数,在2012开始加入,若低于这个版本,可以通过 + 达到字符串连接的功能;
> TRIM: SQL中使用的是LTRIM, RTRIM;
> LPAD,RPAD: 2008中是没有,后期装2012之后确认;
02.数值函数
* sql server: mod函数不存在,以 a % b 达到效果;
03.日期函数
> select date_add(now(),interval 1 day); 在当前时间上,天数+104。
04.流程函数
05.约束
> 自动增长:auto_increment
> check 的使用:
> 外键添加方法
> 外键对应字段的关联业务
06.
进程和线程 进程 进程:是正在运行的程序。
是系统进行资源分配和调用的独立单位。 每一个进程都有它自己的内存空间和系统资源。 线程 线程:是进程中的单个顺序控制流,是一条执行路径。
单线程:一个进程如果只有一条执行路径,则称为单线程程序。 多线程:一个进程如果有多条执行路径,则称为多线程程序。 继承Thread类的方式实现多线程 多线程的实现方式 方式1:继承Thread类
定义一个类MyThread继承Thread类 在MyThread类中重写run()方法:MyThread类中可能还有其它的代码,并不是所有的代码都要被线程执行。区分可以被线程执行的代码,Java提供了run()方法,用来封装被线程执行的代码。 创建MyThread类的对象 启动线程 两个小问题:
为什么要重写run()方法? 因为run()是用来封装被线程执行的代码。
run()方法和start()方法的区别? run():封装线程执行的代码,直接调用,相当于普通方法的调用。
start():启动线程;然后由JVM调用此线程的run()方法。
设置和获取线程名称 设置和获取线程名称 Thread类中设置和获取线程名称的方法:
void setName(String name):将此线程的名称更改为等于参数name。 String getName():返回此线程的名称。 通过构造方法也可以设置线程名称。 使用带参构造方法,需要在自己定义的MyThread类中 定义 带参构造方法,通过super()访问父类的带参构造方法 如何获取main()方法所在的线程名称?
public static Thread currentThread():返回对当前正在执行的线程对象的引用。Thread.currentThread().getName() 线程优先级 线程调度 线程调度有两种调度方式:
分时调度模型:所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间片。 抢占式调度模型:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的CPU时间片相对多一些。 Java使用的是抢占式调度模型。