2024年Linux运维_Bash脚本_编译安装PHP-7,2024年最新美团Linux运维面试

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

    # ------------------------------------------
    if [[ $STEP\_INSTALLED == 1 ]]; then
        if [[ ! -d "/opt/lib" ]]; then mkdir /opt/lib; fi
        if [[ ! -d "/opt/lib/pkgconfig" ]]; then mkdir /opt/lib/pkgconfig; fi
        # ......................................
        ln -sf /opt/libxml2-2.9.1/bin/xml2-config /usr/local/bin/
        ln -sf /opt/libxml2-2.9.1/bin/xmlcatalog  /usr/local/bin/
        ln -sf /opt/libxml2-2.9.1/bin/xmllint     /usr/local/bin/
        # ......................................
        rsync -av /opt/libxml2-2.9.1/include/ /usr/local/include/
        # ......................................
        rsync -av /opt/libxml2-2.9.1/lib/ /usr/local/lib/
        # ......................................
        cp -f /opt/libxml2-2.9.1/lib/pkgconfig/libxml-2.0.pc /opt/lib/pkgconfig/
    fi
    
    # ------------------------------------------
    cd $STORAGE && rm -rf $STORAGE/libxml2-2.9.1 && return 0
else
    echo "[Caution] Path: ( /opt/libxml2-2.9.1 ) Already Exists."
    # ------------------------------------------
    return 0
fi

}

Function: 编译安装(Compile Install) libxslt-1.1.28

function Compile_Install_libxslt_1_1_28() {

if [[ ! -d "/opt/libxslt-1.1.28" ]]; then

    local VERIFY
    local STEP\_UNZIPPED=0
    local STEP\_CONFIGURED=0
    local STEP\_INSTALLED=0

    # ------------------------------------------
    read -p "[Confirm] Compile and Install ( libxslt-1.1.28 )? (y/n)>" VERIFY
    if [[ "$VERIFY" != "y" ]]; then exit 1; fi

    # ------------------------------------------
    tar -zxvf $STORAGE/libxslt-1.1.28.tar.gz && STEP\_UNZIPPED=1
    
    # ------------------------------------------
    cd $STORAGE/libxslt-1.1.28 && ./configure --prefix=/opt/libxslt-1.1.28 && STEP\_CONFIGURED=1
    
    # ------------------------------------------
    make && make install && STEP\_INSTALLED=1
    
    # ------------------------------------------
    if [[ $STEP\_INSTALLED == 1 ]]; then
        if [[ ! -d "/opt/lib" ]]; then mkdir /opt/lib; fi
        if [[ ! -d "/opt/lib/pkgconfig" ]]; then mkdir /opt/lib/pkgconfig; fi
        # ......................................
        ln -sf /opt/libxslt-1.1.28/bin/xslt-config /usr/local/bin/
        ln -sf /opt/libxslt-1.1.28/bin/xsltproc    /usr/local/bin/
        # ......................................
        rsync -av /opt/libxslt-1.1.28/include/ /usr/local/include/
        # ......................................
        rsync -av /opt/libxslt-1.1.28/lib/ /usr/local/lib/
        # ......................................
        cp -f /opt/libxslt-1.1.28/lib/pkgconfig/libexslt.pc /opt/lib/pkgconfig/
        cp -f /opt/libxslt-1.1.28/lib/pkgconfig/libxslt.pc  /opt/lib/pkgconfig/
    fi

    # ------------------------------------------
    cd $STORAGE && rm -rf $STORAGE/libxslt-1.1.28 && return 0
else

    echo "[Caution] Path: ( /opt/libxslt-1.1.28 ) Already Exists."
    # ------------------------------------------
    return 0
fi

}

Function: 编译安装(Compile Install) byacc-20230219

function Compile_Install_byacc_20230219() {

if [[ ! -d "/opt/byacc-20230219" ]]; then

    local VERIFY
    local STEP\_UNZIPPED=0
    local STEP\_CONFIGURED=0
    local STEP\_INSTALLED=0

    # ------------------------------------------
    read -p "[Confirm] Compile and Install ( byacc-20230219 )? (y/n)>" VERIFY
    if [[ "$VERIFY" != "y" ]]; then exit 1; fi

    # ------------------------------------------
    tar -zxvf $STORAGE/byacc-20230219.tar.gz && STEP\_UNZIPPED=1
    
    # ------------------------------------------
    cd $STORAGE/byacc-20230219 && ./configure --prefix=/opt/byacc-20230219 && STEP\_CONFIGURED=1
    
    # ------------------------------------------
    make && make install && STEP\_INSTALLED=1
    
    # ------------------------------------------
    if [[ $STEP\_INSTALLED == 1 ]]; then
        # Default None .h (Include) File.
        # ......................................
        # Default None .so / .a / .la (Library) File.
        # ......................................
        ln -sf /opt/byacc-20230219/bin/yacc /usr/local/bin/
    fi
    
    # ------------------------------------------
    cd $STORAGE && rm -rf $STORAGE/byacc-20230219 && return 0
else

    echo "[Caution] Path: ( /opt/byacc-20230219 ) Already Exists."
    # ------------------------------------------
    return 0
fi

}

Function: 编译安装(Compile Install) krb5-1.20.1

function Compile_Install_krb5_1_20_1() {

if [[ ! -d "/opt/krb5-1.20.1" ]]; then

    local VERIFY
    local STEP\_UNZIPPED=0
    local STEP\_CONFIGURED=0
    local STEP\_INSTALLED=0

    # ------------------------------------------
    read -p "[Confirm] Compile and Install ( krb5-1.20.1 )? (y/n)>" VERIFY
    if [[ "$VERIFY" != "y" ]]; then exit 1; fi

    # ------------------------------------------
    tar -zxvf $STORAGE/krb5-1.20.1.tar.gz && STEP\_UNZIPPED=1
    
    # ------------------------------------------
    cd $STORAGE/krb5-1.20.1/src && ./configure --prefix=/opt/krb5-1.20.1 && STEP\_CONFIGURED=1
    
    # ------------------------------------------
    make && make install && STEP\_INSTALLED=1
    
    # ------------------------------------------
    if [[ $STEP\_INSTALLED == 1 ]]; then
        # Skip # if [[ ! -d "/usr/local/sbin" ]]; then mkdir /usr/local/sbin; fi
        # ......................................
        if [[ ! -d "/opt/lib" ]]; then mkdir /opt/lib; fi
        if [[ ! -d "/opt/lib/pkgconfig" ]]; then mkdir /opt/lib/pkgconfig; fi
        # ......................................
        # Skip # ln -sf /opt/krb5-1.20.1/bin/\* /usr/local/bin/
        # ......................................
        # Skip # ln -sf /opt/krb5-1.20.1/sbin/\* /usr/local/sbin/
        # ......................................
        # Skip # rsync -av /opt/krb5-1.20.1/include/ /usr/local/include/
        # ......................................
        # Skip # rsync -av /opt/krb5-1.20.1/lib/ /usr/local/lib/
        # ......................................
        cp -f /opt/krb5-1.20.1/lib/pkgconfig/*.pc /opt/lib/pkgconfig/
    fi
    
    # ------------------------------------------
    cd $STORAGE && rm -rf $STORAGE/krb5-1.20.1 && return 0
else

    echo "[Caution] Path: ( /opt/krb5-1.20.1 ) Already Exists."
    # ------------------------------------------
    return 0
fi

}

Function: 编译安装(Compile Install) openssl-1.1.1g

function Compile_Install_openssl_1_1_1g() {

if [[ ! -d "/opt/openssl-1.1.1g" ]]; then

    local VERIFY
    local STEP\_UNZIPPED=0
    local STEP\_CONFIGURED=0
    local STEP\_INSTALLED=0

    # ------------------------------------------
    read -p "[Confirm] Compile and Install ( openssl-1.1.1g )? (y/n)>" VERIFY
    if [[ "$VERIFY" != "y" ]]; then exit 1; fi

    # ------------------------------------------
    tar -zxvf $STORAGE/openssl-1.1.1g.tar.gz && STEP\_UNZIPPED=1
    
    # ------------------------------------------
    cd $STORAGE/openssl-1.1.1g && ./config --prefix=/opt/openssl-1.1.1g \
                                           --openssldir=/opt/openssl-1.1.1g/ssl \
                                           --shared \
                                           zlib && \
                                           STEP\_CONFIGURED=1
    
    # ------------------------------------------
    make && make install && STEP\_INSTALLED=1
    
    # ------------------------------------------
    if [[ $STEP\_INSTALLED == 1 ]]; then
        if [[ ! -d "/opt/lib" ]]; then mkdir /opt/lib; fi
        if [[ ! -d "/opt/lib/pkgconfig" ]]; then mkdir /opt/lib/pkgconfig; fi
        # ......................................
        # 注意: 避免与系统原有的 "openssl" 发生冲突, 未将 "openssl-1.1.1g" 的二进制 bin 文件发送到 PATH 路径。
        # Caution: To avoid conflicts with the original "openssl" in the system, the binary file of "openssl-1.1.1g" was not sent to the PATH path.
        # ......................................
        # Skip # ln -sf /opt/openssl-1.1.1g/bin/\* /usr/local/bin/
        # ......................................
        # Skip # rsync -av /opt/openssl-1.1.1g/include/ /usr/local/include/
        # ......................................
        # Skip # rsync -av /opt/openssl-1.1.1g/lib/ /usr/local/lib/
        # ......................................
        cp -f /opt/openssl-1.1.1g/lib/pkgconfig/libcrypto.pc /opt/lib/pkgconfig/
        cp -f /opt/openssl-1.1.1g/lib/pkgconfig/libssl.pc    /opt/lib/pkgconfig/
        cp -f /opt/openssl-1.1.1g/lib/pkgconfig/openssl.pc   /opt/lib/pkgconfig/
    fi
    
    # ------------------------------------------
    cd $STORAGE && rm -rf $STORAGE/openssl-1.1.1g && return 0
else

    echo "[Caution] Path: ( /opt/openssl-1.1.1g ) Already Exists."
    # ------------------------------------------
    return 0
fi

}

Function: 编译安装(Compile Install) SQLite-3.41.2

function Compile_Install_SQLite_3_41_2() {

if [[ ! -d "/opt/SQLite-3.41.2" ]]; then

    local VERIFY
    local STEP\_UNZIPPED=0
    local STEP\_CONFIGURED=0
    local STEP\_INSTALLED=0

    # ------------------------------------------
    read -p "[Confirm] Compile and Install ( sqlite-autoconf-3410200 )? (y/n)>" VERIFY
    if [[ "$VERIFY" != "y" ]]; then exit 1; fi

    # ------------------------------------------
    tar -zxvf $STORAGE/sqlite-autoconf-3410200.tar.gz && STEP\_UNZIPPED=1
    
    # ------------------------------------------
    cd $STORAGE/sqlite-autoconf-3410200 && ./configure --prefix=/opt/SQLite-3.41.2 && STEP\_CONFIGURED=1
    
    # ------------------------------------------
    make && make install && STEP\_INSTALLED=1
    
    # ------------------------------------------
    if [[ $STEP\_INSTALLED == 1 ]]; then
        if [[ ! -d "/opt/lib" ]]; then mkdir /opt/lib; fi
        if [[ ! -d "/opt/lib/pkgconfig" ]]; then mkdir /opt/lib/pkgconfig; fi
        # ......................................
        ln -sf /opt/SQLite-3.41.2/bin/sqlite3 /usr/local/bin/
        # ......................................
        # Skip # rsync -av /opt/SQLite-3.41.2/include/ /usr/local/include/
        # ......................................
        # Skip # rsync -av /opt/SQLite-3.41.2/lib/ /usr/local/lib/
        # ......................................
        cp -f /opt/SQLite-3.41.2/lib/pkgconfig/sqlite3.pc /opt/lib/pkgconfig/
    fi
    
    # ------------------------------------------
    cd $STORAGE && rm -rf $STORAGE/sqlite-autoconf-3410200 && return 0
else

    echo "[Caution] Path: ( /opt/SQLite-3.41.2 ) Already Exists."
    # ------------------------------------------
    return 0
fi

}

Function: 编译安装(Compile Install) cURL-7.71.1

function Compile_Install_cURL_7_71_1() {

if [[ ! -d "/opt/curl-7.71.1" ]]; then

    local VERIFY
    local STEP\_UNZIPPED=0
    local STEP\_CONFIGURED=0
    local STEP\_INSTALLED=0

    # ------------------------------------------
    read -p "[Confirm] Compile and Install ( curl-7.71.1 )? (y/n)>" VERIFY
    if [[ "$VERIFY" != "y" ]]; then exit 1; fi

    # ------------------------------------------
    tar -zxvf $STORAGE/curl-7.71.1.tar.gz && STEP\_UNZIPPED=1
    
    # ------------------------------------------
    cd $STORAGE/curl-7.71.1 && ./configure --prefix=/opt/curl-7.71.1 && STEP\_CONFIGURED=1
    
    # ------------------------------------------
    make && make install && STEP\_INSTALLED=1
    
    # ------------------------------------------
    if [[ $STEP\_INSTALLED == 1 ]]; then
        if [[ ! -d "/opt/lib" ]]; then mkdir /opt/lib; fi
        if [[ ! -d "/opt/lib/pkgconfig" ]]; then mkdir /opt/lib/pkgconfig; fi
        # ......................................
        ln -sf /opt/curl-7.71.1/bin/curl        /usr/local/bin/
        ln -sf /opt/curl-7.71.1/bin/curl-config /usr/local/bin/
        # ......................................
        # Skip # rsync -av /opt/curl-7.71.1/include/ /usr/local/include/
        # ......................................
        # Skip # rsync -av /opt/curl-7.71.1/lib/ /usr/local/lib/
        # ......................................
        cp -f /opt/curl-7.71.1/lib/pkgconfig/libcurl.pc /opt/lib/pkgconfig/
    fi
    
    # ------------------------------------------
    cd $STORAGE && rm -rf $STORAGE/curl-7.71.1 && return 0
else

    echo "[Caution] Path: ( /opt/curl-7.71.1 ) Already Exists."
    # ------------------------------------------
    return 0
fi

}

Function: 编译安装(Compile Install) onig-6.9.5-rev1

function Compile_Install_onig_6_9_5_rev1() {

if [[ ! -d "/opt/onig-6.9.5-rev1" ]]; then

    local VERIFY
    local STEP\_UNZIPPED=0
    local STEP\_CONFIGURED=0
    local STEP\_INSTALLED=0

    # ------------------------------------------
    read -p "[Confirm] Compile and Install ( onig-6.9.5-rev1 )? (y/n)>" VERIFY
    if [[ "$VERIFY" != "y" ]]; then exit 1; fi

    # ------------------------------------------
    tar -zxvf $STORAGE/onig-6.9.5-rev1.tar.gz && STEP\_UNZIPPED=1
    
    # ------------------------------------------
    cd $STORAGE/onig-6.9.5 && ./configure --prefix=/opt/onig-6.9.5-rev1 && STEP\_CONFIGURED=1
    
    # ------------------------------------------
    make && make install && STEP\_INSTALLED=1
    
    # ------------------------------------------
    if [[ $STEP\_INSTALLED == 1 ]]; then
        if [[ ! -d "/opt/lib" ]]; then mkdir /opt/lib; fi
        if [[ ! -d "/opt/lib/pkgconfig" ]]; then mkdir /opt/lib/pkgconfig; fi
        # ......................................
        ln -sf /opt/onig-6.9.5-rev1/bin/onig-config /usr/local/bin/
        # ......................................
        # Skip # rsync -av /opt/onig-6.9.5-rev1/include/ /usr/local/include/
        # ......................................
        # Skip # rsync -av /opt/onig-6.9.5-rev1/lib/ /usr/local/lib/
        # ......................................
        cp -f /opt/onig-6.9.5-rev1/lib/pkgconfig/oniguruma.pc /opt/lib/pkgconfig/
    fi
    
    # ------------------------------------------
    cd $STORAGE && rm -rf $STORAGE/onig-6.9.5-rev1 && return 0
else

    echo "[Caution] Path: ( /opt/onig-6.9.5-rev1 ) Already Exists."
    # ------------------------------------------
    return 0
fi

}

########################################### PHP - 7.4.28

Function: 编译安装(Compile Install) PHP-7.4.28

function Compile_Install_PHP_7_4_28() {

# 配置 Apache2 + PHP7 (Optional):
# 1. 安装 Apache (httpd)。
# 2. 查看 apxs 二进制 Bin 文件所在路径, 用于编译 PHP 时生成 /etc/httpd/modules/libphp7.so, 若没有这个依赖, Apache 无法解析 PHP 代码。
# 3. 执行 PHP 的配置命令, 不要遗漏 apxs 路径的配置, 如: --with-apxs2=/usr/local/bin/apxs。

if [[ ! -d "/opt/php-7.4.28" ]]; then

    local VERIFY
    local STEP\_UNZIPPED=0
    local STEP\_CONFIGURED=0
    local STEP\_INSTALLED=0

    # ------------------------------------------
    read -p "[Confirm] Compile and Install ( php-7.4.28 )? (y/n)>" VERIFY
    if [[ "$VERIFY" != "y" ]]; then exit 1; fi

    # ------------------------------------------
    tar -zxvf $STORAGE/php-7.4.28.tar.gz  && STEP\_UNZIPPED=1
    
    # ------------------------------------------
    cd $STORAGE/php-7.4.28 && ./configure --prefix=/opt/php-7.4.28 \
                                          --with-config-file-path=/opt/php-7.4.28/etc \
                                          --with-fpm-user=php \
                                          --with-fpm-group=php \
                                          --with-apxs2=/usr/local/bin/apxs \
                                          --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-jpeg-dir \
                                          --with-xmlrpc \
                                          --with-xsl \
                                          --with-zlib \
                                          --with-bz2 \
                                          --with-mhash \
                                          --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-sysvshm \
                                          --enable-xml \
                                          --enable-zip \
                                          --enable-fpm \
                                          PKG\_CONFIG\_PATH="/opt/lib/pkgconfig" && \
                                          STEP\_CONFIGURED=1
    
    # ------------------------------------------
    # \* Problem: undefined reference to `xmlFreeParserCtxt'
    # collect2: error: ld returned 1 exit status
    # - Solve: 在 php-7.4.28/Makefile 中的 EXTRA\_LIBS 变量添加: -lxml2
    # ..........................................
    # \* Problem: undefined reference to `EVP\_PKEY\_free'
    # collect2: error: ld returned 1 exit status
    # - Solve: 在 php-7.4.28/Makefile 中的 EXTRA\_LIBS 变量添加: -L/opt/openssl-1.1.1g/lib -lssl
    # ..........................................
    # \* Problem: ...libcrypto.so.1.1: error adding symbols: DSO missing from command line
    # collect2: error: ld returned 1 exit status
    # - Solve: 在 php-7.4.28/Makefile 中的 EXTRA\_LIBS 变量添加: -L/opt/openssl-1.1.1g/lib -lcrypto
    # ..........................................
    # \* Problem: undefined reference to `xsltSaveResultToString'
    # collect2: error: ld returned 1 exit status
    # - Solve: 在 php-7.4.28/Makefile 中的 EXTRA\_LIBS 变量添加: -L/opt/libxslt-1.1.28/lib -lxslt
    # ..........................................
    # \* Problem: undefined reference to `sqlite3\_reset'
    # collect2: error: ld returned 1 exit status
    # - Solve: 在 php-7.4.28/Makefile 中的 EXTRA\_LIBS 变量添加: -L/opt/SQLite-3.41.2/lib -lsqlite3
    # ..........................................
    # \* Problem: undefined reference to `curl\_share\_strerror'
    # collect2: error: ld returned 1 exit status
    # - Solve: 在 php-7.4.28/Makefile 中的 EXTRA\_LIBS 变量添加: -L/opt/curl-7.71.1/lib -lcurl
    # ..........................................
    # \* Problem: undefined reference to `OnigEncodingASCII'
    # collect2: error: ld returned 1 exit status
    # - Solve: 在 php-7.4.28/Makefile 中的 EXTRA\_LIBS 变量添加: -L/opt/onig-6.9.5-rev1/lib -lonig
    # ..........................................
    # \* Problem: undefined reference to `\_\_dn\_expand' | Handle : EXTRA\_LIBS = -lresolv | From Glibc-2.17
    # collect2: error: ld returned 1 exit status

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

ror: ld returned 1 exit status

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

[外链图片转存中…(img-NFWnZpRm-1715214633164)]

给大家整理的电子书资料:

[外链图片转存中…(img-iOjWJaIZ-1715214633165)]

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值