Linux 笔记 - 第十四章 LAMP 之(一) 环境搭建
一、前言
LAMP 是 Linux Apache MySQL PHP 的简写,即把 Apache、MySQL 以及 PHP 安装在 Linux 系统上,组成一个环境来运行 PHP 脚本语言,通常是 PHP 的网站。其中的 Apache 是主流的 Web 服务器软件,MySQL 是小型的关系型数据库软件。
我们可以把 Apache+PHP 安装在一台机器上,再把 MySQL 安装在另外一台机器上,也可以将其全部安装在同一台机器上。但是 Apache 和 PHP 需要安装在同一台机器上,这是因为 PHP 是作为 Apache 的一个模块存在的。
下面依次安装 MySQL、Apache 和 PHP。
二、安装 MySQL
由于通过源码包安装 MySQL 时需要比较长的编译时间,所以建议安装二进制的免编译包。可以到 MySQL 官网下载,https://dev.mysql.com/downloads,此处选择 64 位 5.7.22 版本。Linux-Generic 表示 Linux 的二进制免编译包。
首先查看系统是多少位,如下:
- [root@ryan ~]# uname -i
- x86_64
显示系统是 64 位的,如果返回 i386 则表示系统是 32 位的。
点击右侧的 "Download" 进入如下页面:
复制 "No thanks, just start my downl" 的连接地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
在 Linux 中下载,建议将软件安装包统一放在 /usr/local/src 目录下,便于统一管理,如下:
- [root@ryan ~]# cd /usr/local/src
- [root@ryan src]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
2.1 解压并移动
- [root@ryan src]# tar zxvf mysql-5.7.-linux-glibc2.-x86_64.tar.gz
- [root@ryan src]# mv mysql-5.7.-linux-glibc2.-x86_64 /usr/local/mysql
2.2 添加系统用户
- [root@ryan src]# groupadd mysql
- [root@ryan src]# useradd -r -g mysql mysql
- [root@ryan src]# grep mysql /etc/passwd
- mysql:x::::/home/mysql:/bin/bash
2.3 创建数据库文件存放目录
- [root@ryan src]# mkdir -p /data/mysql
- [root@ryan src]# chown -R mysql:mysql /data/mysql
2.4 安装数据库
- [root@ryan src]# cd /usr/local/mysql
- [root@ryan mysql]# ./bin/mysqld --initialize --user=mysql --datadir=/data/mysql
- ./bin/mysqld: error while loading shared libraries: libaio.so.: cannot open shared object file: No such file or directory
- [root@ryan mysql]# yum install -y libaio
- [root@ryan mysql]# ./bin/mysqld --initialize --user=mysql --datadir=/data/mysql
- ./bin/mysqld: error while loading shared libraries: libnuma.so.: cannot open shared object file: No such file or directory
- [root@ryan mysql]# yum -y install numactl
当安装时出现如上的错误时,需要分别安装 libaio 和 numactl 依赖,直到安装成功。如果是 MySQL5.7以前的版本,使用 ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql 命令安装。
2.5 配置 /etc/my.cnf
- [root@ryan mysql]# vim /etc/my.cnf
- [mysqld]
- character_set_server=utf8
- init_connect='SET NAMES utf8'
- basedir=/usr/local/mysql
- datadir=/data/mysql
- socket=/tmp/mysql.sock
- lower_case_table_names=
- log-error=/var/log/mysqld.log
- pid-file=/data/mysql/mysqld.pid
2.6 复制启动脚本
- [root@ryan mysql]# cp support-files/mysql.server /etc/init.d/mysqld
- [root@ryan mysql]# chmod /etc/init.d/mysqld
编辑 vim /etc/init.d/mysqld,修改第46和47行,如下:
修改为:
2.7 启动 MySQL
- [root@ryan mysql]# service mysqld start
- Starting MySQL. SUCCESS!
- [root@ryan mysql]# ps aux |grep mysqld
- root 0.0 0.0 pts/ S : : /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/mysqld.pid
- mysql 0.5 9.5 pts/ Sl : : /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/data/mysql/mysqld.pid --socket=/tmp/mysql.sock
- root 0.0 0.0 pts/ S+ : : grep mysqld
2.8 设置 root 密码
- [root@ryan mysql]# service mysqld stop
- Shutting down MySQL.. SUCCESS!
- [root@ryan mysql]# ./bin/mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
- [root@ryan mysql]# ./bin/mysql -u root mysql
- mysql> update user set authentication_string=PASSWORD("")where user="root";
- Query OK, row affected, warning (0.00 sec)
- Rows matched: Changed: Warnings:
- mysql> flush privileges;
- Query OK, rows affected (0.00 sec)
- [root@ryan mysql]# service mysqld start
- Starting MySQL SUCCESS!
密码不要设置的太简单,如此处演示的 123456,否则再次登录时会提示必须重置密码:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
并且注意此处 5.7 版本的修改密码的的语法为:
update user set authentication_string=PASSWORD("123456")where user="root";
5.7 以下版本的语法为:
update user set password=PASSWORD("123456")where user="root";
注意:
Mysql 5.7 在自动初始化数据库的时候,会生成 root 用户的默认密码。
通过 grep "temporary password" /var/log/mysqld.log 命令,返回结果最后冒号后面的字符串就是root的默认密码。
使用此密码登录后,Mysql 会要求第一件做的事就是改root密码,而且是要求强密码。
如果是其他版本,在刚安装好MySQL后,超级用户 root 是没有密码的。
三、安装 Apache
Apache 是目前主流的 Web 服务器,后来改名称为 httpd 了。目前最新版为 2.4,此处选择 2.4.34。官方下载页面为:http://httpd.apache.org/download.cgi,可下载 gzip 或 bzip2 格式的源码包。
此处下载地址为:http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.34.tar.gz
3.1 下载
- [root@ryan src]# cd /usr/local/src
- [root@ryan src]# wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.34.tar.gz
注意,2.4 版本还需要下载 apr 和 apr-util 包,可以将这两个包理解为通用函数库,主要为上层应用提供支持。Apache 2.4 以后的版本不再自带 APR 库(Apache Portable Runtime,Apache 可移植运行库),所以在安装 Apache 之前需要手动下载安装 APR 库。完整的 APR 实际上包含了三个依赖包:apr、apr-util 以及 apr-iconv。目前只下载前面两个安装就行,即 apr 和 apr-util。
- [root@ryan src]# wget http://mirror.bit.edu.cn/apache//apr/apr-1.6.3.tar.gz
- [root@ryan src]# wget http://mirror.bit.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
3.2 解压
- [root@ryan src]# tar zxvf httpd-2.4..tar.gz^C
- [root@ryan src]# ll httpd-2.4..tar.gz
- -rw-r--r-- root root Jul : httpd-2.4..tar.gz
解压 apr 和 apr-util 包
- [root@ryan src]# tar zxvf apr-1.6..tar.gz
- [root@ryan src]# tar zxvf apr-util-1.6..tar.gz
3.3 安装
首先安装 apr
- [root@ryan apr-1.6.]# cd /usr/local/src/apr-1.6.
- [root@ryan apr-1.6.]# ./configure --prefix=/usr/local/apr
- [root@ryan apr-1.6.]# echo $?
- [root@ryan apr-1.6.]# make
- [root@ryan apr-1.6.]# echo $?
- [root@ryan apr-1.6.]# make install
- [root@ryan apr-1.6.]# echo $?
如果在安装中出现如下错误:
configure: error: no acceptable C compiler found in $PATH
说明没有找到可用的C语言编译器,需要安装 gcc,如下:
[root@ryan apr-1.6.3]# yum install -y gcc
然后安装 apr-util
- [root@ryan apr-util-1.6.]# /usr/local/src/apr-util-1.6.
- [root@ryan apr-util-1.6.]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
- [root@ryan apr-util-1.6.]# echo $?
- [root@ryan apr-util-1.6.]# make
- [root@ryan apr-util-1.6.]# echo $?
- [root@ryan apr-util-1.6.]# make install
- [root@ryan apr-util-1.6.]# echo $?
如果在编译时出现如下错误:
[root@ryan apr-util-1.6.1]# make
make[1]: *** [xml/apr_xml.lo] Error 1
make[1]: Leaving directory `/usr/local/src/apr-util-1.6.1'
make: *** [all-recursive] Error 1
[root@ryan apr-util-1.6.1]# echo $?
2
则需要安装 expat-devel 包:
[root@ryan apr-util-1.6.1]# yum -y install expat-devel
到这里是不是终于可以正式安装 apache 了,其实不是的,还有依赖的软件没有安装,缺少 pcre 程序,这是关于正则表达式 regular expression 的依赖包。
访问:http://pcre.org/,进入如下界面:
找到如下链接:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
下载:
- [root@ryan ~]# cd /usr/local/src
- [root@ryan src]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.42.tar.gz
配置编译参数:
- [root@ryan src]# tar zxvf pcre-8.42.tar.gz
- [root@ryan src]# cd pcre-8.42
- [root@ryan pcre-8.42]# ./configure --prefix=/usr/local/pcre
- [root@ryan pcre-8.42]# echo $?
如果在预编译时出现如下错误:
configure: error: Invalid C++ compiler or C++ compiler flags
说明缺少 C++ 编译器,可以使用 yum 安装:
[root@ryan pcre-8.42]# yum -y install gcc-c++
编译并安装:
- [root@ryan pcre-8.42]# make && make install
- [root@ryan pcre-8.42]# echo $?
到现在为止,Apache 安装前的依赖库终于安装完毕,可以安装 Apache 了。
设置编译参数:
- [root@ryan httpd-2.4.]# /usr/local/src/httpd-2.4.
- [root@ryan httpd-2.4.]# ./configure --prefix=/usr/local/apache24 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-so --enable-mods-shared=most
- [root@ryan httpd-2.4.]# echo $?
如果出现如下错误:
make[2]: *** [htpasswd] Error 1
make[2]: Leaving directory `/usr/local/src/httpd-2.4.34/support'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/src/httpd-2.4.34/support'
则先将 apr 和 apr-util 复制到 httpd的srclib目录下:
# cp -r apr-1.6.3 httpd-2.4.34/srclib/apr
# cp -r apr-util-1.6.1 httpd-2.4.34/srclib/apr-util
然后再重新预编译,添加 --with-included-apr 选项:
# ./configure --prefix=/usr/local/apache24 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-so --enable-mods-shared=most --with-included-apr
然后再编译和安装:
- [root@ryan httpd-2.4.]# make
- [root@ryan httpd-2.4.]# echo $?
- [root@ryan httpd-2.4.]# make install
- [root@ryan httpd-2.4.]# echo $?
四、安装 PHP
PHP7 已经出来很长时间了,此处选择 PHP7,当然也可以选择 PHP5。官方下载地址为:http://www.php.net/downloads.php
此处下载目前最新版 7.2.8,进入上面链接后,选择镜像下载地址:http://cn2.php.net/get/php-7.2.8.tar.gz/from/this/mirror,由于这个下载地址比较特殊,使用 wget 可能下载不下来,建议先下载到 Windows 上,再sftp上传到Linux 服务器上。
执行预编译:
- [root@ryan src]# cd /usr/local/src
- [root@ryan src]# tar zxvf php-7.2..tar.gz
- [root@ryan src]# cd php-7.2.
- [root@ryan src]# ./configure --prefix=/usr/local/php7 \
- --with-apxs2=/usr/local/apache24/bin/apxs \
- --with-config-file-path=/usr/local/php7/etc \
- --with-curl \
- --with-freetype-dir \
- --with-gd \
- --with-gettext \
- --with-iconv-dir \
- --with-kerberos \
- --with-libdir=lib64 \
- --with-libxml-dir \
- --with-mysqli \
- --with-openssl \
- --with-pcre-regex \
- --with-pdo-mysql \
- --with-pdo-sqlite \
- --with-pear \
- --with-png-dir \
- --with-xmlrpc \
- --with-xsl \
- --with-zlib \
- --enable-fpm \
- --enable-bcmath \
- --enable-libxml \
- --enable-inline-optimization \
- --enable-mbregex \
- --enable-mbstring \
- --enable-opcache \
- --enable-pcntl \
- --enable-shmop \
- --enable-soap \
- --enable-sockets \
- --enable-sysvsem \
- --enable-xml \
- --enable-zip
如果上面执行出错,需要安装一些依赖的组件:
- [root@ryan php-7.2.]# yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel MySQL pcre-devel openssl openssl-devel curl-devel libxslt-devel
编译:
- [root@ryan php-7.2.]# make
- [root@ryan php-7.2.]# echo $?
由于 with 指定需要的模块不一样,编译的时间也会不一样,此处 make 编译的时间可能需要5分钟以上。
安装:
- [root@ryan php-7.2.]# make install
- [root@ryan php-7.2.]# echo $?
最后复制配置文件:
- [root@ryan php-7.2.]# cp php.ini-production /usr/local/php7/etc/php.ini
php.ini-development 适合开发程式使用(测试用);
php.ini-production 拥有较高的安全性设定,则适合上线当产品使用;
一般将 php.ini-production 修改为 php.ini,确保测试环境(本地)与正式环境(线上)一致。PHP 配置文件:/usr/local/php7/etc/php.ini
配置 Apache(httpd)支持 PHP
编辑 httpd 的主配置文件:/usr/local/apache24/conf/httpd.conf
- [root@ryan ~]# vim /usr/local/apache24/conf/httpd.conf
将 ServerName www.example.com:80 前的 # 去掉。
找到如下配置:
<Directory />
AllowOverride none
Require all denied
</Directory>
将 denied 修改为 granted:
<Directory />
AllowOverride none
Require all granted
</Directory>
修改这个的目的是,允许所有请求,否则,我们访问到的时候会报 403 错误。
找到如下内容
AddType application/x-gzip .gz .tgz
在该行的下面添加:
AddType application/x-httpd-php .php
找到如下内容:
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
修改为:
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
五、测试 LAMP 是否成功
MySQL、httpd 和 PHP 安装之后,需要先检查 httpd 的配置文件是否正确,只有正确的配置文件才可以正常解析 PHP 文件。
测试配置文件语法是否正确
- [root@ryan ~]# /usr/local/apache24/bin/apachectl -t
- Syntax OK
如果有错误,则需要修改,Syntax OK 表示配置文件的语法结构正确。
启动 httpd,并查看是否启动:
- [root@ryan ~]# /usr/local/apache24/bin/apachectl start
- [root@ryan ~]# netstat -lnp |grep httpd
- tcp ::: :::* LISTEN /httpd
说明 httpd 已经正常启动了。
启动 httpd 服务命令:/usr/local/apache24/bin/apachectl start
停止 httpd 服务命令:/usr/local/apache24/bin/apachectl stop
也可以使用 curl 命令来进行简单的测试,如下:
- [root@ryan ~]# curl localhost
- <html><body><h1>It works!</h1></body></html>
能够正常返回结果,说明已经正常启动了。
测试是否正确解析 PHP
首先编写一个测试脚本,其中 htdocs 是 Apache 的默认网站根目录。如下:
- [root@ryan ~]# vim /usr/local/apache24/htdocs/test.php
- <?php
- echo "我的LAMP";
- ?>
然后执行如下测试:
- [root@ryan ~]# curl localhost/test.php
- 我的LAMP
说明 httpd 已经可以正确解析 PHP 了。
此时通过其他机器来访问本服务器时显示:
应该是 Linux 服务器没有开启 80 端口导致的,CentOS 6 需要在 iptables 放行 80 端口。
放行 80 端口
- [root@ryan ~]# /etc/init.d/iptables status
- [root@ryan ~]# iptables -I INPUT -p tcp --dport -j ACCEPT
- [root@ryan ~]# /etc/init.d/iptables save
- [root@ryan ~]# /etc/init.d/iptables status
- Table: filter
- Chain INPUT (policy ACCEPT)
- num target prot opt source destination
- ACCEPT tcp -- 0.0.0.0/ 0.0.0.0/ tcp dpt:
- ACCEPT all -- 0.0.0.0/ 0.0.0.0/ state RELATED,ESTABLISHED
- ACCEPT icmp -- 0.0.0.0/ 0.0.0.0/
- ACCEPT all -- 0.0.0.0/ 0.0.0.0/
- ACCEPT tcp -- 0.0.0.0/ 0.0.0.0/ state NEW tcp dpt:
- REJECT all -- 0.0.0.0/ 0.0.0.0/ reject-with icmp-host-prohibited
- Chain FORWARD (policy ACCEPT)
- num target prot opt source destination
- REJECT all -- 0.0.0.0/ 0.0.0.0/ reject-with icmp-host-prohibited
- Chain OUTPUT (policy ACCEPT)
- num target prot opt source destination
注意,重启系统或者重启 iptables 服务后还会加载已经保存的规则,所以需要使用 "/etc/init.d/iptables save" 保存一下规则。
然后再次访问:
发现均已经可以正常访问了。
设置环境变量
- [root@ryan conf]# vim /etc/profile.d/app.sh
- #MySQL
- export PATH=$PATH:/usr/local/mysql/bin
- #Apache
- export PATH=$PATH:/usr/local/apache24/bin
- [root@ryan conf]# source /etc/profile
可以将 MySQL 和 Apache 的路径配置到 /etc/profile 或者 /etc/profile.d/app.sh 中,方便使用它们的命令时,不用再添加绝对路径。
附录
注意:
如果make中出现错误,必须执行 make clean 清除所有缓存文件后继续,如果是在 make install 过程中出现错误,必须执行 make clean 并且删除生成了安装目录,然后重新执行 make 和 make install。以上步骤执行后,均可以使用命令 echo $? 来检查是否执行成功。
安装完成之后删除原来释放出来的那些目录即可,如果以后要卸载,只要不忘记安装目录,直接删除安装目录就可以,也不会出现任何残留垃圾文件。
apachectl 常用命令参数
# apachectl configtest:检查设置文件中的语法是否正确;
# apachectl fullstatus:显示服务器完整的状态信息;
# apachectl graceful:重新启动Apache服务器,但不会中断原有的连接;
# apachectl help:显示帮助信息;
# apachectl restart:重新启动Apache服务器;
# apachectl start:启动Apache服务器;
# apachectl status:显示服务器摘要的状态信息;
# apachectl stop:停止Apache服务器;
# apachectl -M:输出一个已经启用的模块列表,包括静态编译在服务器中的模块和作为DSO动态加载的模块。即同时列出已经启用的静态模块(static)和动态模块(shared)。
# apachectl -l:输出一个静态编译在服务器中的模块的列表。它不会列出使用LoadModule指令动态加载的模块。即只列出已经启用的静态模块(static)。
PHP 其实就是作为 apache 的一个动态模块被调用的,如下:
- [root@ryan httpd-2.4.]# grep php /usr/local/apache24/conf/httpd.conf
- LoadModule php7_module modules/libphp7.so
- [root@ryan httpd-2.4.]# apachectl -M |grep php
- php7_module (shared)
在安装 PHP 时,指定的 --with-apxs2 选项其实就是将 PHP 作为一个模块安装到 apache 中的。
通过查看 httpd.conf 中的 LoadModule 对应的模块都是动态的(shared),如下:
- [root@ryan httpd-2.4.]# grep -i LoadModule /usr/local/apache24/conf/httpd.conf
- # have to place corresponding `LoadModule' lines at this location so the
- # LoadModule foo_module modules/mod_foo.so
- LoadModule authn_file_module modules/mod_authn_file.so
- #LoadModule authn_dbm_module modules/mod_authn_dbm.so
- #LoadModule authn_anon_module modules/mod_authn_anon.so
- #LoadModule authn_dbd_module modules/mod_authn_dbd.so
- ……
关于 MPM
可以在安装 apache 时,使用 --with-mpm=MPM 来指定 MPM 模式,如下:
- [root@ryan httpd-2.4.]# /usr/local/src/httpd-2.4./configure --help |grep mpm -A2
- --enable-mpms-shared=MPM-LIST
- Space-separated list of MPM modules to enable for
- dynamic loading. MPM-LIST=list | "all"
- --
- --with-mpm=MPM Choose the process model for Apache to use by
- default. MPM={event|worker|prefork|winnt} This will
- be statically linked as the only available MPM
- unless --enable-mpms-shared is also specified.
- --with-module=module-type:module-file
- Enable module-file in the modules/<module-type>
MPM 常见的三种模式为:prefork、worker 和 event。
MySQL 主配置文件:/etc/my.cnf
Apache 主配置文件:/usr/local/apache24/conf/httpd.conf,虚拟主机配置文件:/usr/local/apache24/conf/extra/httpd-vhosts.conf
PHP 主配置文件:/usr/local/php7/etc/php.ini
参考文档:
MySQL:
https://www.cnblogs.com/KiraEXA/p/6030912.html
https://www.cnblogs.com/fnlingnzb-learner/p/5830622.html
http://www.cnblogs.com/jxrichar/p/9248480.html
https://blog.csdn.net/z13615480737/article/details/80019881
https://blog.csdn.net/keepd/article/details/77151006
Apache:
https://www.cnblogs.com/freeweb/p/5177516.html
多处理模块(MPM):http://httpd.apache.org/docs/2.2/mpm.html
PHP:
https://blog.csdn.net/u010647316/article/details/56489795/
Linux 笔记 - 第十四章 LAMP 之(一) 环境搭建的更多相关文章
- Linux 笔记 - 第十四章 LAMP 之(二) 环境配置
博客地址:http://www.moonxy.com 一.前言 LAMP 环境搭建好之后,其实仅仅是安装上了软件,我们还需要掌握 httpd 和 PHP 的配置. 二.httpd 配置 2.1 创建虚 ...
- Linux 笔记 - 第二十四章 配置 Tomcat
一.前言 Tomcat 是 Apache 软件基金会(Apache Software Foundation)Jakarta 项目中的核心项目,由 Apache.Sun 和其他一些公司及个人共同开发.使 ...
- 《linux程序设计》--读书笔记--第十四章信号量、共享内存和消息队列
信号量:用于管理对资源的访问: 共享内存:用于在程序之间高效的共享数据: 消息队列:在程序之间传递数据的一种简单方法: 一.信号量 临界代码:需要确保只有一个进程或者一个执行线程可以进入这个临界代码并 ...
- 《机器学习实战》学习笔记第十四章 —— 利用SVD简化数据
相关博客: 吴恩达机器学习笔记(八) —— 降维与主成分分析法(PCA) <机器学习实战>学习笔记第十三章 —— 利用PCA来简化数据 奇异值分解(SVD)原理与在降维中的应用 机器学习( ...
- Linux 笔记 - 第十六章 LNMP 之(一) 环境搭建
博客地址:http://www.moonxy.com 一.前言 LNMP 中的 N 指 Nginx,在静态页面的处理上,Nginx 较 Apache 更胜一筹:但在动态页面的处理上,Nginx 并不比 ...
- Linux 笔记 - 第十五章 MySQL 常用操作和 phpMyAdmin
博客地址:http://www.moonxy.com 一.前言 前面几章介绍了 MySQL 的安装和简单的配置,只会这些还不够,作为 Linux 系统管理员,我们还需要掌握一些基本的操作,以满足日常管 ...
- Linux 笔记 - 第十二章 Shell 脚本
博客地址:http://www.moonxy.com 一.前言 常见的编程语言分为两类:一类是编译型语言,如:C.C++ 和 Java等,它们远行前要经过编译器的编译.另一类是解释型语言,不需要编译, ...
- Linux 笔记 - 第二十二章 Nginx 配置 SSL
一.前言 基础知识 1.1 公钥密码体制(public-key cryptography) 公钥密码体制分为三个部分,公钥.私钥.加密解密算法,它的加密解密过程如下: 加密:通过加密算法和公钥对内容( ...
- C primer plus 读书笔记第十四章
这一章主要介绍C语言的结构和其他数据形式,是学习算法和数据结构的重点. 1.示例代码 /*book.c -- 仅包含一本书的图书目录*/ #include <stdio.h> #defin ...
随机推荐
- python之“装饰器”
在python里装饰器 其定义:装饰器就是一个函数,用来装饰其他函数,就是给其他函数添加功能. 装饰器有两个特点: 1.装饰器不修改被装饰函数的源码: 2.装饰器不锈钢被装饰函数的调用方式. 在编程中 ...
- springboot整合webservice采用CXF技术
转载自:https://blog.csdn.net/qq_31451081/article/details/80783220 强推:https://blog.csdn.net/chjskarl/art ...
- 【MySQL】索引
什么是索引 索引就好比是书的目录,可以显著提高数据库查询的效率.例如像一本很厚的书,在没有目录的情况下要查到你想要看的知识点,都不知要找到什么时候,但通过目录我们可以很快的查询到对应的内容. 索引的数 ...
- Java生产者消费者的三种实现
Java生产者消费者是最基础的线程同步问题,java岗面试中还是很容易遇到的,之前没写过多线程的代码,面试中被问到很尬啊,面完回来恶补下.在网上查到大概有5种生产者消费者的写法,分别如下. 用sync ...
- SQL优化没思路,智能优化工具来帮你
前言 作为DBA或系统管理员,我们有时会遇到一个慢SQL需要优化,但是通过分析执行计划又没有找到好的优化思路,或者优化之后效果不明显,没有达到自己理想的预期,此时的你是不是很焦虑?此时你一定想如果有一 ...
- unity_小功能实现(敌人巡逻功能)
利用NavMeshAgent控制敌人巡逻,即敌人在一组位置间循环巡逻. 首先我们要知道NavMeshAgent中有两个方法:1.锁定当前巡逻的某一目标位置,即navMeshAgent.destinat ...
- ConcurrentLinkedQueue 源码解读
一.介绍 ConcurrentLinkedQueue 是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部:当我们获取一个元素时,它 ...
- Oracle误操作--被提交后的数据回退(闪回)
由于一时的粗心,在做update操作时,忘记了加where条件,导致全表数据被修改.此类错误实属不该!!特此记录一下!! 网上搜索Oracle数据回退操作,介绍如下: 闪回级别 闪回场景 闪回技术 对 ...
- gym/101955/problem/E - The Kouga Ninja Scrolls 线段数 维护 切比雪夫距离 2018沈阳icpc
传送门 思路: 这道题要把给定的每个坐标利用切比雪夫坐标表示,这样两个点的距离就是max(dx,dy),而不是一开始的dx + dy,有利于线段树的维护,又由于询问的是区间的最大差值,限制是两个点是属 ...
- hdu 5977 Garden of Eden(点分治+状压)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5977 题解:这题一看就知道是状压dp然后看了一下很像是点分治(有点明显)然后就是简单的点分治+状压dp ...