主頁 > 後端開發 > LNMP環境搭建(PHP7.2.25)

LNMP環境搭建(PHP7.2.25)

2020-09-21 07:27:34 後端開發

目錄
  • 準備作業
    • 安裝wget
    • 安裝net-tools
    • 安裝vim
    • 配置顯示行號
    • 關閉防火墻
  • 安裝Nginx
    • 安裝依賴
    • 編譯安裝Nginx
    • 配置環境變數
    • Systemd管理
  • 安裝MySQL
    • 安裝依賴
    • 下載boost
    • 編譯安裝MySQL
    • 配置環境變數
    • 修改組態檔
    • Systemd管理
    • 登錄MySQL
  • 安裝PHP
    • 安裝依賴
    • 編譯安裝PHP
    • 配置Systemd服務
    • 關聯Nginx和PHP
  • 安裝Redis
    • 編譯安裝
    • 配置環境變數
    • 配置后臺運行
    • 配置Systemd服務
  • 參考資料

作為一名PHP開發者,我們一定要懂得如何搭建PHP開發環境,目前主流的PHP開發環境組合是LAMP和LNMP,本文將介紹如何在CentOS7.*上搭建LNMP開發環境,

各項版本說明:

CentOS7: 7.7

Nginx: 1.16.1

MySQL:5.7.28

PHP:7.2.25

安裝所需所有的資源我都放在了/usr/local/src目錄下

準備作業

安裝wget

wget 是一個從網路上自動下載檔案的自由工具,支持通過 HTTP、HTTPS、FTP 三個最常見的TCP/IP協議下載,并可以可以使用HTTP代理,

sudo yum -y install wget

安裝net-tools

最小化安裝CentOS7時如果無法使用ifconfig命令,則需要安裝net-tools,如果是安裝的CentOS6版本則無需安裝

sudo yum -y install net-tools

安裝vim

sudo yum -y install vim

配置顯示行號

vim ~/.vimrc # 編輯.vimrc組態檔
set nu # 輸入set nu 后退出保存

關閉防火墻

systemctl stop firewalld.service  #令關閉防火墻
systemctl disable firewalld.service  #關閉防火墻開機自啟動
通過瀏覽器輸入IP測驗是否成功

安裝Nginx

安裝依賴

(1) 安裝 nginx 需要先將官網下載的原始碼進行編譯,編譯依賴 gcc 環境,如果沒有 gcc 環境,則需要安裝gcc-c++,

yum -y install gcc gcc-c++

(2) PCRE是一個Perl庫,中文"Perl兼容的正則運算式庫",安裝Nginx是為了使Nginx支持具備URI重寫功能的rewrite模塊,如果不安裝pcre庫,則Nginx無法使用rewrite模塊功能,Nginx的Rewrite模塊功能幾乎是企業應用必須,

yum -y install pcre pcre-devel

(3) zlib 庫提供了很多種壓縮和解壓縮的方式, nginx 使用 zlib 對 http 包的內容進行 gzip ,所以需要在 Centos 上安裝 zlib 庫,

yum -y install zlib zlib-devel

(4) OpenSSL是一個強大的安全套接字層密碼庫,囊括主要的密碼演算法、常用的密鑰和證書封裝管理功能及 SSL 協議,并提供豐富的應用程式供測驗或其它目的使用, nginx 不僅支持 http 協議,還支持 https(即在ssl協議上傳輸http),所以需要安裝 OpenSSL 庫 ,

yum -y install openssl openssl-devel

說明: yum安裝方式安裝的pcre版本比較低,不過基本不影響使用,但是最好還是手動編譯安裝官網最新穩定版的openssl,

檢查基礎依賴包

上面的依賴安裝完成后可以通過如下命令檢查各個依賴安裝是否成功

rpm -qa pcre pcre-devel
rpm -qa zlib zlib-devel
rpm -qa pcre pcre-devel

編譯安裝Nginx

# 這里我們把安裝包都放到了/usr/local/src目錄下,便于統一管理
cd /usr/local/src  #切換到軟體包目錄
wget http://nginx.org/download/nginx-1.16.1.tar.gz   #下載nginx原始碼包
useradd nginx -s /sbin/nologin -M   #創建nginx用戶用于管理nginx程式
tar -zxvf nginx-1.16.1.tar.gz  #解壓nginx原始碼包

cd nginx-1.16.1

#預編譯
./configure \
--user=nginx \
--group=nginx \
--prefix=/usr/local/nginx-1.16.1 \
--with-http_v2_module \
--with-http_ssl_module \
--with-http_stub_status_module

make && make install #編譯 和 安裝

cd /usr/local
ln -s nginx-1.16.1 nginx  #創建nginx的軟鏈接

安裝說明

--prefix=PATH    #設定安裝路勁
--user=USER      #行程用戶權限
--group=GROUP    #行程用戶組權限
--with-http_v2_module  # HTTP2
--with-http_stub_status_module   #激活狀態資訊
--with-http_ssl_module  #激活ssl功能

配置環境變數

vim /etc/profile
export PATH=/usr/local/nginx/sbin:$PATH
source /etc/profile

Systemd管理

新建并編輯/usr/lib/systemd/system/nginx.service 檔案

vim /usr/lib/systemd/system/nginx.service

并添加如下內容(這里的配置是根據自己安裝Nginx的路徑來配置的,Nginx安裝在了/usr/local目錄下)

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

通過yum安裝的nginx,默認的nginx.service配置如下,可以作為參考

# /usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target

多載daemon

執行下面的命令重新載入 systemd,掃描新的或有變動的單元即可

systemctl daemon-reload

設定開機自啟

systemctl enable nginx.service # 設定開機自啟
systemctl disable nginx.service # 取消開機自啟服務

Nginx服務管理常用命令

systemctl status nginx.service # 查看Nginx狀態
systemctl start nginx.service # 開啟Nginx
systemctl stop nginx.service # 關閉Nginx
systemctl reload nginx.service # 多載配置
systemctl restart nginx.service  # 重啟Nginx(相當于stop&start)

服務啟動檢查

可以通過該命令查詢80埠被誰占用

lsof -i :80

如果無法識別該命令,需要安裝lsof

sudo yum -y install lsof

安裝MySQL

安裝依賴

(1)cmake是新版MySQL的編譯工具,必須安裝

sudo yum -y install gcc gcc-c++ cmake ncurses-devel perl perl-devel autoconf bison bison-devel libtirpc libtirpc-devel

下載boost

如果安裝的MySQL5.7及以上的版本,在編譯安裝之前需要安裝boost,因為高版本mysql需要boots庫的安裝才可以正常運行,否則會報CMake Error at cmake/boost.cmake:81 錯誤

切換到/usr/local/src目錄,然后在這個目錄下下載boost
MySQL5.7.27要求boost的版本是1.59,更高版本的不適用MySQL5.7.28

wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

百度網盤鏈接: boost_1_59_0.tar.gz

編譯安裝MySQL

# 添加MySQL用戶
useradd -s /sbin/nologin -M mysql

# 切換到/usr/src目錄
cd /usr/local/src

# 下載MySQL
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28.tar.gz

# 解壓MySQL
tar -zxvf mysql-5.7.28.tar.gz

#解壓boost,并移至mysql/boost
tar -zxvf boost_1_59_0.tar.gz
mv boost_1_59_0 mysql-5.7.28/boost

# 進到MySQL目錄
cd mysql-5.7.28

# 預編譯
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.28 \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1 \
-DWITH_SSL=system \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_DATADIR=/var/lib/mysql/data \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_INNODB_MEMCACHED=1 \
-DWITH_DEBUG=OFF \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DENABLED_PROFILING=ON \
-DMYSQL_MAINTAINER_MODE=OFF \
-DMYSQL_TCP_PORT=3306

# 編譯&安裝
make && make install

# 創建軟鏈接
cd /usr/local
ln -s mysql-5.7.28 mysql

配置環境變數

# 添加到環境變數
vim /etc/profile
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile

修改組態檔

  1. /var/lib目錄下創建一個mysql檔案夾

    mkdir -p /var/lib/{mysql,mysql/data}
    touch /var/lib/mysql/mysqld.pid
    chown mysql.mysql -R /var/lib/mysql/
    
  2. 修改/etc/my.cnf檔案

    # 修改/etc/my.cnf檔案,編輯組態檔如下
    [mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    datadir=/var/lib/mysql/data
    socket=/var/lib/mysql/mysql.sock
    
    [mysqld_safe]
    log-error=/var/log/mysql/mysqld.log
    pid-file=/var/lib/mysql/mysqld.pid
    
    [client]
    default-character-set=utf8mb4
    
  3. 創建mysqld.logmysqld.pid檔案,并修改檔案權限

    # 創建mysqld.log 和 mysqld.pid檔案
    mkdir /var/log/mysql
    touch /var/log/mysql/mysqld.log
    chown mysql.mysql -R /var/log/mysql/
    
  4. 初始化資料庫

    # 初始化資料庫, –initialize 表示默認生成一個安全的密碼,–initialize-insecure 表示不生成密碼
    mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql/data
    

Systemd管理

創建一個/usr/lib/systemd/system/mysqld.service檔案,然后編輯內容如下

vim /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

Type=forking

PIDFile=/var/lib/mysql/mysqld.pid

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Execute pre and post scripts as root
PermissionsStartOnly=true

# Needed to create system tables
ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd

# Start main service
ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/var/lib/mysql/mysqld.pid $MYSQLD_OPTS

# Use this to switch malloc implementation
EnvironmentFile=/etc/my.cnf

# Sets open_files_limit
LimitNOFILE = 5000

Restart=on-failure

RestartPreventExitStatus=1

PrivateTmp=true

多載daemon

執行下面的命令重新載入 systemd,掃描新的或有變動的單元即可

systemctl daemon-reload

啟動MySQL

systemctl start mysqld.service # 啟動MySQL
systemctl stop mysqld.service # 關閉MySQL
systemctl status mysqld.service # 查看MySQL狀態

開機自啟

systemctl enable mysqld.service # 設定開機自啟
systemctl disable mysqld.service # 取消開機自啟

登錄MySQL

mysql -u root -p #第一次登陸不需要密碼,回車即可
set password for root@localhost = password('root');  #修改密碼

安裝PHP

安裝依賴

sudo yum -y install gcc gcc-c++ zip unzip libxml2 libxml2-devel curl-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel gd-devel bzip2 bzip2-devel libzip libzip-devel libwebp libwebp-devel

編譯安裝PHP

cd /usr/local/src
tar -zxvf php-7.2.25.tar.gz
cd  php-7.2.25
./configure \
--prefix=/usr/local/php-7.2.25 \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--enable-mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-mysql-sock=/var/lib/mysql/mysql.sock \
--with-gd \
--with-webp-dir \
--with-png-dir \
--with-gettext \
--with-jpeg-dir \
--with-freetype-dir \
--with-iconv-dir \
--with-zlib-dir \
--with-bz2 \
--with-openssl \
--with-curl \
--enable-mbstring \
--enable-static \
--enable-zip \
--enable-bcmath \
--enable-ftp \
--enable-pcntl \
--enable-soap \
--enable-calendar \
--enable-sockets \
--enable-exif \
--enable-xml

make && make install

編譯引數詳解

./configure \
--prefix=/usr/local/php-7.2.25 \ # 指定安裝路徑
--enable-fpm \             # 表示激活PHP-FPM方式服務,即FactCGI方式運行PHP服務,
--with-fpm-user=nginx \    # 指定PHP-FPM行程管理的用戶為nginx,此處最好和Nginx服務用戶統一,
--with-fpm-group=nginx \   # 指定PHP-FPM行程管理用戶組為nginx,此處最好和Nginx服務用戶組統一,
--enable-mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-mysql-sock=/var/lib/mysql/mysql.sock \
--with-gd \          # 打開gd庫的支持
--with-webp-dir \
--with-png-dir \
--with-gettext \     # 實作了NLS (Native Language Support) API,他可以用來國際化您的PHP程式
--with-jpeg-dir \
--with-freetype-dir \
--with-iconv-dir \   # 包含了 iconv 字符集轉換功能的介面,
--with-zlib-dir \    # 打開zlib庫的支持,用于http壓縮傳輸
--with-bz2 \         # 用于透明地讀寫 bzip2(.bz2)壓縮檔案,
--with-openssl \     # 打開openssl,加密傳輸時用到
--with-curl \        # 打開curl瀏覽工具的支持 
--enable-mbstring \  # 多位元組,字串的支持
--enable-static \    # 生成靜態鏈接庫
--enable-zip \       # 打開對zip的支持
--enable-bcmath \
--enable-ftp \       # 通過檔案傳輸協議 (FTP) 提供對檔案服務器的客戶端訪問
--enable-pcntl \     # 多行程
--enable-soap \
--enable-calendar \
--enable-sockets \   # 打開 sockets 支持
--enable-exif \      # 可交換影像資訊
--enable-xml

配置

cd /usr/local

ln -s php-7.2.25 php
cp /usr/local/src/php-7.2.25/php.ini-development /usr/local/php-7.2.25/lib/php.ini
 
vim /usr/local/php/lib/php.ini
date.timezone = PRC  (大約在934行)
expose_php = Off  #避免PHP資訊暴露在http頭中(大約369行)
 
display_errors = Off(生產環境設定為off,開發環境就設定為On,便于除錯)
 說明:設定了dispaly_errors為off后,需要在php-fpm.conf中開啟錯誤日志記錄路徑error_log = log/php-fpm.log
 
cd /usr/local/php 
cp etc/php-fpm.conf.default etc/php-fpm.conf

cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf
cd /usr/local/php
sbin/php-fpm
ps -e | grep php-fpm

如果在編譯PHP時指定了--with-mysql=mysqlnd和--with-pdo-mysql=mysqlnd的引數,那么在生產中可能會遇到socket連接問題,解決辦法是在php.ini里加入命令: pdo_mysql.default_socket=/var/lib/mysql/mysql.sock

最好是在編譯PHP的時候,指定mysql.socket的位置:
--with-mysql-sock=/var/lib/mysql/mysql.sock

管理PHP-FPM

vim /usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid
error_log = log/php-fpm.log #24行這個在php.ini設定display_errors = Off時啟用
設定完之后重啟服務器
向行程發送信號,就可以完成行程管理
停止: kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
平滑停止: kill -QUIT `cat /usr/local/php/var/run/php-fpm.pid`
重啟:kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
重新打開日志:kill -USR1 `cat /usr/local/php/var/run/php-fpm.pid`

配置環境變數

vim /etc/profile
export PATH=/usr/local/php/bin:$PATH
source /etc/profile

配置Systemd服務

其實php-fpm.service檔案php已經幫我們配置好了,只需要我們復制到指定位置,并啟用就行了,

cp /usr/local/src/php-7.2.25/sapi/fpm/php-fpm.service /usr/lib/systemd/system/

編輯/usr/lib/systemd/system/php-fpm.service檔案并修改為如下內容:

# It's not recommended to modify this file in-place, because it
# will be overwritten during upgrades.  If you want to customize,
# the best way is to use the "systemctl edit" command.

[Unit]
Description=The PHP FastCGI Process Manager
After=network.target

[Service]
Type=simple
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

多載daemon

執行下面的命令重新載入 systemd,掃描新的或有變動的單元即可

systemctl daemon-reload

開機自啟

systemctl enable php-fpm.service

啟動php-fpm

systemctl start php-fpm.service

關聯Nginx和PHP

nginx.conf配置

#user  nobody;
# 有一個作業的子行程,可以自行修改,但太大無益,因為要爭奪CPU
# 一般設定CPU數 * 核數
worker_processes  1; 

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
#一般是配置Nginx行程與連接的特性
#若幾個同時作業
	multi_accept on; #打開同時接受多個新網路連接請求的功能,
    use epoll;  #使用epoll事件驅動,因為epoll的性能相比其他事件驅動要好很多
    worker_connections  10240; #這是指一個子行程最大允許連接10240個連接
}


http { # 這是配置http服務器的主要段
    include       mime.types;
    default_type  application/octet-stream;
    
    #隱藏Nginx軟體版本號
    server_tokens off;
    
    #激活tcp_nodelay功能,提高I/O性能
    tcp_nodelay on;

    # 設定讀取客戶端請求頭資料的超時時間,此處的數值為15,其單位是秒,為經驗參考值
    client_header_timeout 15;

    # 設定讀取客戶端請求體的超時時間
    client_body_timeout 15;

    # 指定回應客戶端的超時時間
    send_timeout 25;

    # 上傳檔案大小限制
    client_max_body_size 8m;
    
    #壓縮配置
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types text/plain text/css text/xml application/javascript;
    gzip_vary on;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #include extra/*.conf;
    server {
        listen       80;
        server_name  www.blog.com;
        root         html;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            index  index.php index.html index.htm;
            if (!-e $request_filename) {
                rewrite ^/(.*)$ /index.php/$1 last;
            }
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
	}
}

安裝Redis

編譯安裝

# 解壓原始碼檔案
tar -zxvf redis-5.0.7.tar.gz

# 切換到解壓目錄
cd redis-5.0.7

# 編譯安裝
make PREFIX=/usr/local/redis-5.0.7 install

mkdir /usr/local/redis-5.0.7/etc
cp redis.conf /usr/local/redis-5.0.7/etc/

# 創建軟鏈接
cd /usr/local
ln -s redis-5.0.7 redis

配置環境變數

vim /etc/profile
export PATH=/usr/local/redis/bin:$PATH
source /etc/profile # 使修改立即生效

配置后臺運行

redis以后臺行程的形式運行

vim /usr/local/redis/etc/redis.conf

# daeonize no(大約136行)
# 改為 ->
daemonize yes

配置Systemd服務

/usr/lib/systemd/system/添加一個redis.service檔案,并添加如下內容

[Unit]
Description=Redis
After=network.target
 
[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli shutdown
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

多載daemon

執行下面的命令重新載入 systemd,掃描新的或有變動的單元即可

systemctl daemon-reload

開機自啟

systemctl enable redis.service

啟動redis服務

systemctl start redis.service

參考資料

centos7 原始碼編譯安裝 mysql5.7

mysql在linux7下systemd的相關配置

Managing MySQL Server with systemd

centos7 7.3php編譯安裝

centos7下編譯安裝php7.3

cmake安裝配置及入門指南

編譯CMake 3.15 和 gcc 5.3.0

CentOS7升級OpenSSL到1.1.1

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/95106.html

標籤:PHP

上一篇:Laravel Validator

下一篇:冒泡排序

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more