内存对齐 先了解下C/C++基本类型的字节占用情况,
alignas 关键字 #pragma pack(N) pragma pack 规定的对齐长度,实际使用的规则是: 结构(如struct,union,或者class )内部的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。 而结构之间整体的对齐,则按照结构中最大的数据成员 和 #pragma pack指定值 之间,较小的那个进行。 也就是说,当#pragma pack的值等于或超过所有数据成员长度的时候,这个值的大小将不产生任何效果。
再来看个例子:
#include <iostream> using namespace std; #define OFFSET(struct_type, member) ((size_t) &((struct_type *) 0)->member) #pragma pack(4) struct TestB { int aa; // 第一个成员,放在[0,3]偏移的位置, char a; // 第二个成员,自身长为1,#pragma pack(4),取小值,也就是1,所以这个成员按一字节对齐,放在偏移[4]的位置。 short b; //第三个成员,自身长2,#pragma pack(4),取2,按2字节对齐,所以放在偏移[6,7]的位置。 char c; //第四个,自身长为1,放在[8]的位置。 }; #pragma pack() int main() { cout<< sizeof(TestB) << endl; // 12 cout<< OFFSET(TestB, aa) <<endl; // 0 cout<< OFFSET(TestB, a) <<endl; // 4 cout<< OFFSET(TestB, b) <<endl; // 6 cout<< OFFSET(TestB, c) <<endl; // 8 } 上面的例子中,这个struct 实际占据的内存空间是9字节,但sizeof返回的是12,原因:
硬盘操作 为什么要给硬盘分区? 如果你需要在一块硬盘上用到多个文件系统,那么你就需要对硬盘进行分区,以便用不同的分区支持不同的文件系统。(但一个硬盘只能有一个分区表!)反过来说,如果你整块硬盘都用同样的文件系统,那么就可以不对硬盘分区。
Linux服务器硬盘该选择什么分区表? 需要分区的话推荐无脑GPT。
MBR分区工具--fdisk
GPT分区工具--gdisk
两者都是引导式的分区工具,做出更改后只要不写入,程序就不会对硬盘做出任何操作。
还有一个parted,它是非交互式的分区工具。
硬盘可以不分区直接用吗? 硬盘可以不分区,直接格式化(文件系统格式)挂载好就能拿来用(如果想保持开机生效一定不要忘了修改/etc/fstab文件!)对于不分区的硬盘,系统会把它的分区表类型标记为loop。但实际上,loop并不是一种分区表类型。至于为什么会显示loop,是因为parted命令在(设置了LVM?)的这块硬盘上找不到分区表。
参考连接:hard disk - Is partition table type loop a good or bad idea on BTRFS? - Unix & Linux Stack Exchange
区别概念:loop设备
parted /dev/sdc print Model: VMware, VMware Virtual S (scsi) Disk /dev/sdc: 5369MB Sector size (logical/physical): 512B/512B Partition Table: loop Disk Flags: Number Start End Size File system Flags 1 0.00B 5369MB 5369MB xfs sector size(扇区大小)与block size(块大小) sector size是关于硬盘最小的存储单位扇区大小的描述(物理层面),而block size则是属于文件系统层面的概念。
1.聚合函数的使用 #求和函数SUM SELECT SUM(字段) FROM 表名; #最大值函数MAX SELECT MAX(字段) FROM 表名; #最小值函数MIN SELECT MIN(字段) FROM 表名; #平均数函数AVG SELECT AVG(字段) FROM 表名; #非空计数函数COUNT SELECT COUNT(*) FROM 表名; #该表有多少条记录 SELECT COUNT(字段) FROM 表名; #也可以通过具体字段去查非空值的记录数 2.分组查询 SELECT * FROM 表名 WHERE 筛选条件 GROUP BY 分组字段; 3.Having子句的使用 对group by分组后的数据进行条件过滤
SELECT * FROM 表名 WHERE 筛选条件 GROUP BY 分组字段 HAVING 分组结果筛选条件 ORDER BY 排序字段; 4.表的内连接 SELECT …… FROM 表1 INNER JOIN 表2 ON 条件; 5.
原文链接
1. 基本概念 Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在 BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上 Nginx 的并发能力在同类型的网页服务器中表现较好。以上内容来自百度百科,由百度百科给出的介绍我们不难发现,Nginx 其实是一个反向代理服务器,作用其实有很多,最突出的是其负载均衡能力,Nginx 的并发能力在同类型的网页服务器中是较为出色的。
2. 安装 首先到官网下载 Nginx 的解压包
下载完成后通过 rz 命令将其上传至 Linux,然后进行解压
tar -zxvf nginx-1.21.6.tar.gz 解压完成后进入解压后的目录,在该目录下有一个名为configure的脚本,通过执行该脚本即可安装 Nginx
./configure 正常情况下终端会提示缺少一些环境
它提示缺少什么,我们就安装什么就行。这里的提示信息说的是找不到C语言编译器,所以来安装一下C语言的编译器
yum install -y gcc 安装完成后,重新执行configure脚本,该脚本还可以携带参数,通过指定 prefix 参数即可将 Nginx 安装在指定的目录下。不出意外,此时终端会再一次提醒你缺少相应的依赖
./configure --prefix=/usr/local/nginx 同样的,安装上就好了
yum install -y pcre pcre-devel 安装完成后再次执行configure脚本,终端还是提示缺少相应的依赖
把它也安装上
yum install -y zlib zlib-devel 再一次来执行configure脚本,这应该是我们第四次执行该脚本了,此时应该是能够安装成功了
接下来执行 make 指令
make 该指令是 Linux 提供的一个编译指令,通过 make 指令即可对安装后的 Nginx 进行编译操作,编译完成后进行安装操作
make install 此时我们可以来到/usr/local目录下查看 nginx 是否安装成功
The Dash to Panel Gnome Shell extension does exactly what you want and is highly configurable.You can install it from Ubuntu software (search Dash to panel), or using the terminal with the command sudo apt install gnome-shell-extension-dash-to-panel. Caveat: the extension is not automatically enabled. Log out and then back in. Then you will see the extension in Gnome Tweaks, and you can enable it there.
To configure the extension, make sure you have Gnome Tweaks installed.
镜像下载、域名解析、时间同步请点击阿里云开源镜像站
Ubuntu 暂时不能解析域名及解决办法 可能的解决方案:重启虚拟机网卡
前提:主机使用无线网,Win10;虚拟机采用NAT模式,Ubuntu20.04
最近移动过vmware的文件,导致虚拟机开机后使用sudo apt-get时会提示暂时不能解析域名,大概是下面这样
(忘截图了,借个图,图源水印)
解决方法:
点击右下角,网络和Internet设置,选择更改适配器选项,找到虚拟机对应的网卡:
这时显示已启用,但是点进去看的状态是这样: ipv4无访问权限
点击属性,跳出如下小框:
双击TCP/IPv4,设置的是自动获取ip和自动获取DNS。
关闭小框,在虚拟机的网卡,右键禁用,再重新启用 。这时,在虚拟机即可正常执行 sudo apt-get update 。
奇怪的是,这时网卡状态显示的和之前是一样的。
附:vmware设置如下:
本文转自:https://blog.csdn.net/weixin_51947245/article/details/123447600
1、Elasticsearch安装 elasticsearch官方地址:https://www.elastic.co/cn/
官方文档:https://www.elastic.co/guide/index.html
官方下载地址:https://www.elastic.co/downloads/past-releases
Windows 版的 Elasticsearch 压缩包,解压即安装完毕,解压后的 Elasticsearch 的目录结构如下 :
目录 含义 bin 可执行脚本目录 config 配置目录 jdk 内置 JDK 目录 lib 类库 logs 日志目录 modules 模块目录 plugins 插件目录 解压后,进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务 。
注意: 9300 端口为 Elasticsearch 集群间组件的通信端口, 9200 端口为浏览器访问的 http协议 RESTful 端口。
打开浏览器,输入地址: http://localhost:9200,测试返回结果,返回结果如下: 2、问题解决(安装时出错问题)
Nginx 实现负载均衡,Nginx 是个反向代理网关,可以将请求分发到不同的负载服务器,支持大量的链接。
配置文件:
user www-data; worker_processes 2; # 进程数 worker_cpu_affinity 00000001 00000010; pid /var/run/nginx.pid; error_log /var/log/nginx/error.log warn; events { use epoll; worker_connections 1024; # 每个进程允许的最大链接数 } http { include /etc/nginx/mime.types; default_type application/octet-stream; client_max_body_size 500m; resolver 114.114.114.114; log_format main '$time_local $remote_addr $remote_user $status ' '$request_time $request [$body_bytes_sent/$bytes_sent] ' '$http_user_agent $http_referer $http_x_forwarded_for'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; keepalive_timeout 65; gzip on; # 负载 1:1 分发请求 upstream serverCluster{ server 172.31.5.3:8007 weight=1; server 172.
安装从网上下载文件的wget命令 yum -y install wget 下载mysql的repo源 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 安装mysql-community-release-el7-5.noarch.rpm包 rpm -ivh mysql-community-release-el7-5.noarch.rpm 查看 会获得两个mysql的yum repo源:/etc/yum.repos.d/mysql-community.repo,/etc/yum.repos.d/mysql-community-source.repo
[root@centos7 seven]# cd /etc/yum.repos.d/ [root@centos7 yum.repos.d]# ls CentOS-Base.repo CentOS-Media.repo mysql-community.repo CentOS-CR.repo CentOS-Sources.repo mysql-community-source.repo CentOS-Debuginfo.repo CentOS-Vault.repo nginx.repo CentOS-fasttrack.repo CentOS-x86_64-kernel.repo 安装mysql yum install mysql-server 安装mysql开发包(ubuntu的libmysqlclient-dev) yum install mysql-devel
在Linux环境下,使用Shell脚本自动备份数据库,需要用到 crontab 定时任务,以下是使用 mysqldump 方式对数据库备份
1、新建shell脚本,这里命名为 dbbackup.sh
/usr/bin/mysqldump -u用户名 -p密码 -h 数据库IP -R --opt 要备份的数据库名 |gzip > /backup/mysqldata/`date +%Y-%m-%d-%H-%M-%S`.sql.gz 说明: /usr/bin/mysqldump mysqldump路径,需要linux环境安装mysql /backup/mysqldata 备份后的数据库要存储的位置,文件名以日期命名 需要填写数据库用户名、密码、数据库的IP、要备份的数据库2、添加脚本执行权限 chmod +x /backup/mysqldata/dbbackup.sh 3、编辑定时任务
crontab -e 加入以下代码,表示每天凌晨3点,执行sh文件
00 03 * * * bash /backup/mysqldata/dbbackup.sh 说明:
00 03 * * * bash /backup/mysqldata/dbbackup.sh
代表意义 分钟 小时 日期 月份 周 数字范围 0-59 0-23 1-31 1-12 0-6
4、重启crond
service crond restart