zoukankan      html  css  js  c++  java
  • CentOS 服务器初始化设置

    网卡配置


    CentOS 6.x

     1 vi /etc/sysconfig/network-scripts/ifcfg-eth0 
     2 
     3 DEVICE="eth0"
     4 BOOTPROTO="static"
     5 HWADDR="00:50:56:8F:01:3D"
     6 NM_CONTROLLED="no"
     7 ONBOOT="yes"
     8 TYPE="Ethernet"
     9 UUID="fdabdc89-ad4b-45ea-a860-83f1bc9f48c8"
    10 IPADDR=192.168.9.27
    11 NETMASK=255.255.255.0
    12 GATEWAY=192.168.9.254
    13 DNS1=114.114.114.114
    14 DNS2=8.8.8.8
    15 
    16 # 重启网卡, 使配置生效
    17 /etc/init.d/network restart
    18 
    19 # 查看网卡是否生效
    20 ifconfig eth0
    21 eth0      Link encap:Ethernet  HWaddr 00:50:56:8F:01:3D  
    22           inet addr:192.168.9.27  Bcast:192.168.9.255  Mask:255.255.255.0
    23           inet6 addr: fe80::250:56ff:fe8f:13d/64 Scope:Link
    24           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    25           RX packets:4521395 errors:0 dropped:0 overruns:0 frame:0
    26           TX packets:157653 errors:0 dropped:0 overruns:0 carrier:0
    27           collisions:0 txqueuelen:1000 
    28           RX bytes:564465601 (538.3 MiB)  TX bytes:16694989 (15.9 MiB)
    View Code

    CentOS 7.x

    # 修改 CentOS 7 网卡名为 eth0
    cd /etc/sysconfig/network-scripts
    mv ifcfg-ens160 ifcfg-eth0
    vi ifcfg-eth0
    # Generated by dracut initrd
    # NAME="ens160"
    # DEVICE="eth0"
    NAME="eth0"
    DEVICE="eth0"
    ONBOOT=yes
    NETBOOT=yes
    UUID="eb965b1d-1978-475c-bc27-25b260b0baac"
    IPV6INIT=yes
    BOOTPROTO=static
    TYPE=Ethernet
    IPADDR=192.168.9.27
    NETMASK=255.255.255.0
    GATEWAY=192.168.9.1
    
    # 因 CentOS7 采用 grub2 引导,还需要对 grub2 进行修改,编辑 /etc/default/grub 配置文件,在 GRUB_CMDLINE_LINUX 这个参数后面加入 net.ifnames=0 biosdevname=0
    vi /etc/default/grub
    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 crashkernel=auto rhgb quiet"
    GRUB_DISABLE_RECOVERY="true"
    
    # 用 grub2-mkconfig 命令重新生成GRUB配置并更新内核
    grub2-mkconfig -o /boot/grub2/grub.cfg
        Generating grub configuration file ...
        Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
        Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
        Found linux image: /boot/vmlinuz-0-rescue-fb511531b5c644a79810fbc5a52fe83c
        Found initrd image: /boot/initramfs-0-rescue-fb511531b5c644a79810fbc5a52fe83c.img
    
    # 重启系统
    reboot
    
    # 配置 DNS, 同样可以在配置网卡的时候配置 DNS1 / DNS2
    vi /etc/resolv.conf 
    nameserver 114.114.114.114
    nameserver 8.8.8.8

     Centos 7.x 修改网卡名, 在装机的时候进行更改

    •  安装系统时, 在选择菜单的界面, 按 Tab 键, 打开 Kernel 启动选项

               

    • 增加内核参数 :  net.ifnames=0   biosdevname=0

               

    • 输入完成之后回车正常安装操作系统.

    修改主机名


     CentOS 6.x

    # 临时修改;
    hostname web_1
    
    # 永久修改主机名,重启生效;
    vim /etc/sysconfig/network
        NETWORKING=yes
        HOSTNAME=web_1
    
    # 修改 hosts 文件, 本地解析, 可以将localhost.localdomain替换为web_1,或者追加;
    vim /etc/hosts
        127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 web_1
        ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    # 查看主机名
    uname -n 或者 hostname

     CentOS 7.x

    # 临时修改
    hostname tian
    
    # 永久修改,退出登录终端重新登录生效;
    hostnamectl set-hostname tian
    
    # 永久修改2, 需要重启生效;
    vim /etc/hostname
        tian
        
    # 查看主机名
    uname -n 或者 hostname

    更换国内阿里云yum源


     CentOS 6.x

    # 备份源yum源
    cd /etc/yum.repos.d && mkdir back
    mv *.repo back
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    # 或者使用 curl
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    # 清除yum缓存
    yum clean all
    # 缓存yum源的安装包
    yum makecache

    CentOS 7.x

    # 备份源yum源
    cd /etc/yum.repos.d && mkdir back
    mv *.repo back
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    # 或者使用 curl
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    # 清除yum缓存
    yum clean all
    # 缓存yum源的安装包
    yum makecache

    安装系统软件库


    # 开发工具, 源码安装服务需要
    yum -y groupinstall "Development tools"
    yum -y vim lrzsz ntp unzip

    时间同步


    # 查看系统时区是否为 上海
    vim /etc/sysconfig/clock
        ZONE="Asia/Shanghai"
        UTC=false           # 设置为false,硬件始终不与utc时间一致
        ARC=false
    # 若时区不是上海
    rm -f /etc/localtime    # 删除时间文件;
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime   # 时区设置为上海
    
    # 进行时间同步 (ntp1.aliyun.com / time.nist.gov / asia.pool.ntp.org)
    ntpdate time.nist.gov
    
    # 设置硬件时间与系统时间一致并校准
    hwclock --show            # 显示硬件时间
    hwclock --systohc
        # hwclock 命令的使用
        hwclock -r or hwclock --show            # 显示时间   
        hwclock -w or hwclock --systohc         # 用系统时间同步硬件时间   
        hwclock -s or hwclock --hctosys         # 用硬件时间同步系统时间   
        hwclock -a or hwclock --adjust          # 矫正时间 
        hwclock -v or hwclock --version         # 工具版本   
        hwclock --set --date=newdate            # 设置时间           
    
    # CentOS 7 查看系统时间及硬件时间
    timedatectl
    
    # 添加时间同步定时任务
    crontab -e
    00 01 * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1 ; /sbin/hwclock -w

    # ntp 常用服务器
     中国国家授时中心: 210.72.145.44
    NTP 服务器(上海): ntp.api.bz
    微软公司授时主机(美国): time.windows.com

    内核参数优化


    # 在 /etc/sysctl.conf 文件中添加以下内容
    cat >> /etc/sysctl.conf << EOF
    net.ipv4.tcp_fin_timeout = 2
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_keepalive_time = 600
    net.ipv4.ip_local_port_range = 10000 65000
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_max_tw_buckets = 6000
    net.ipv4.route.gc_timeout = 100
    net.ipv4.tcp_syn_retries = 1
    net.ipv4.tcp_synack_retries = 1
    net.core.somaxconn = 16384
    net.core.netdev_max_backlog = 16384
    net.ipv4.tcp_max_orphans = 16384
    net.ipv4.tcp_keepalive_probes=5
    net.core.netdev_max_backlog=3000 EOF # 立即生效添加项 sysctl -p # ************************* 参数讲解 ******************************** # 表示套接字由本端要求关闭,这个参数决定了他保持在 FIN_WAIT_2 状态的时间, 默认值是 60 秒; 该参数对应系统给路径为: /proc/sys/net/ipv4/tcp_fin_timeout net.ipv4.tcp_fin_timeout # 表示开启重用,允许将 TIME_WAIT sockets重新用于新的TCP连接, 默认值为0, 表示关闭; 该参数对应系统路径为: /proc/sys/net/ipv4/tcp_tw_reuse net.ipv4.tcp_tw_reuse # 表示开启 TCP 连接中 TIME_WAIT sockets 的快速回收, 默认值为0 , 表示关闭; 该参数的对应系统路径为: /proc/sys/net/ipv4/tcp_tw_recycle net.ipv4.tcp_tw_recycle # 上面两个 reuse和recycle 两个参数是为了放置生产环境中 WEB , Squid 等业务服务器 time_wait网络状态数量过多; # 表示开启 SYN Cookies功能,当出现 SYN 等待队列溢出时, 启用 Cookies 来处理, 可防范少量SYN攻击, 这个参数可不添加, 对应系统路径: /proc/sys/net/ipv4/tcp_syncookies net.ipv4.tcp_syncookies # 表示当keepalive启用时, TCP 发送keepalive消息的频度, 默认是2小时, 建议 10 分钟; 对应系统路径: /proc/sys/net/ipv4/tcp_keepalive_time, 默认 7200 秒; net.ipv4.tcp_keepalive_time # 表示设定允许系统打开的端口范围, 即用于向外连接的端口范围; 对应系统路径:/proc/sys/net/ipv4/ip_local_port_range net.ipv4.ip_local_port_range # 表示 SYN 队列的长度, 默认为 1024, 建议加大队列的长度为 8192 或者更大,这样可以容纳更多等待连接的网络连接数,该参数为服务器端用于记录那些尚未收到客户端确认信息的连接请求最大值; 对应系统路径: /proc/sys/net/ipv4/tcp_max_syn_backlog net.ipv4.tcp_max_syn_backlog # 表示系统同时保持 TIME_WAIT 套结字的最大数量,如果超过这个数值,TIME_WAIT套接字将立刻被清除并打印警告信息, 默认 180000, 对于 apache , nginx 等服务器来说可以将其调低一点, 5000~30000间, 不同业务的服务器也可以大一点, 如 LVS , Squid; 此参数可以控制 TIME_WAIT 套接字的最大数量, 避免 Squid 服务器被大量的TIME_WAIT套接字拖死; 对应系统路径:/proc/sys/net/ipv4/net.ipv4.tcp_max_tw_buckets net.ipv4.tcp_max_tw_buckets # 该参数的值决定了内核放弃连接前发送 SYN+ACK 包的数量; 对应系统路径为: /proc/sys/net/ipv4/net.ipv4.tcp_synack_retries net.ipv4.tcp_synack_retries # 表示在内核放弃建立连接之前发送 SYN 包的数量; 对应系统路径:/proc/sys/net/ipv4/net.ipv4.tcp_syn_retries net.ipv4.tcp_syn_retries # 用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上,如果超过这个数值,孤立连接将被立即被复位并打印出警告信息,这个限制只有为了防止简单的DoS攻击,不能过分依靠这个限制甚至认为减少这个值,更多的情况是增加这个值;对应系统路径为:/proc/sys/net/ipv4/tcp_max_orphans net.ipv4.tcp_max_orphans # 该选项默认值是128,这个参数用于调节系统同时发起的TCP连接数,在高并发的请求中,默认的值可能会导致链接超时或重传,因此,需要结合并发请求数来调节此值,对应系统路径为:/proc/sys/net/core/somaxconn net.core.somaxconn # 表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包最大数,对应系统路径为:/proc/sys/net/core/netdev_max_backlog,默认值为1000 net.core.netdev_max_backlog
    #减少超时前的探测次数   
    net.ipv4.tcp_keepalive_probes=5
    #优化网络设备接收队列   
    net.core.netdev_max_backlog=3000

    关闭防火墙及selinux机制


      CentOS 6.x

    /etc/init.d/iptables stop         # 关闭防火墙
    chkconfig iptables off            # 关闭开机自启
    setenforce 0                      # 临时关闭 selinux机制
    sed -i '/^SELINUX/ s/enforcing/disabled/' /etc/selinux/config    # 永久关闭selinux机制

    CentOS 7.x

    systemctl stop firewalld              # 关闭防火墙
    systemctl disable firewalld            # 关闭开机启动;
    setenforce 0                           # 临时关闭 selinux机制
    sed -i '/^SELINUX/ s/enforcing/disabled/' /etc/selinux/config    # 永久关闭selinux机制

    精简开机启动


     CentOS 6.x

    # 5个必须保留的开机启动服务( sshd/rsyslog/network/crond/sysstat )
    sshd           # 远程连接Linux服务器需要的服务;
    rsyslog        # 操作系统提供的一种机制,系统的守护程序通常会使用rsyslog将各种信息记录到系统日志中,Centos6以前服务为syslog
    network        # 系统启动时,网络服务
    crond          # 用于周期性执行系统及用户配置的任务计划;
    sysstat        # 是一个软件包,包含监测系统性能及效率的一组工具,此工具对系统性能数据很有帮助,硬盘和网络吞吐数据等,这些数据的分析, 有利于判断系统运行是否正常; 它是提高系统运行效率, 安全运行服务器的助手;
    for i in `chkconfig --list|grep 3:on|grep -Ev "sysstat|sshd|rsyslog|crond|network"|awk '{print $1}'`;do chkconfig $i off;done
    chkconfig --list|grep 3:on
        crond              0:off    1:off    2:on    3:on    4:on    5:on    6:off
        network            0:off    1:off    2:on    3:on    4:on    5:on    6:off
        rsyslog            0:off    1:off    2:on    3:on    4:on    5:on    6:off
        sshd               0:off    1:off    2:on    3:on    4:on    5:on    6:off
        sysstat            0:off    1:on    2:on    3:on    4:on    5:on    6:off

    CentOS 7.x

    # systemctl 是管制服务的主要工具, 它整合了chkconfig 与 service ;
    # 查看服务是否为开机启动, 以防火墙为例, 服务后面可不加 .service
    systemctl is-enabled firewalld.service
    # 查看所有服务的开机启动状态
    systemctl list-unit-files
    # 查看并过滤开机启动的所有服务
    systemctl list-unit-files |grep enable
        auditd.service                                enabled     # 安全审计;
        autovt@.service                               enabled     # 登录终端相关;与/etc/systmd/logind.conf配置文件中 NAutoVTs = 的数值(开启的终端数量)有关,开启终端就是自动从autovt@.service模板实例化;
        chronyd.service                               enabled     # 保持系统时钟与时钟服务器(NTP)同步;
        crond.service                                 enabled     # 定时任务;
        dbus-org.freedesktop.NetworkManager.service   enabled     # 桌面网卡;        关闭
        dbus-org.freedesktop.nm-dispatcher.service    enabled     
        getty@.service                                enabled     # tty控制台;
        irqbalance.service                            enabled     # 优化系统中断分配,自动收集系统数据以分析使用模式,并依据系统负载状况将工作状态置于 Performance mode 或 Power-save mode; 处于Performance mode 时,irqbalance 会将中断尽可能均匀地分发给各个 CPU core,以充分利用 CPU 多核,提升性能,在机器需要高并发时,建议开始该服务。处于Power-save mode 时,irqbalance 会将中断集中分配给第一个 CPU,以保证其它空闲 CPU 的睡眠时间,降低能耗;
        kdump.service                                 enabled     # 内核崩溃信息捕获;
        lvm2-monitor.service                          enabled     # 系统支持逻辑分区;
        microcode.service                             enabled     # 处理器稳定性增强;
        NetworkManager-dispatcher.service             enabled     # 网卡守护进程;     关闭
        NetworkManager.service                        enabled     
        postfix.service                               enabled     # 邮件服务;        关闭
        rsyslog.service                               enabled     # 日志服务;
        sshd.service                                  enabled     # ssh登录服务;
        systemd-readahead-collect.service             enabled     # 内核调用--预读取;
        systemd-readahead-drop.service                enabled 
        systemd-readahead-replay.service              enabled 
        tuned.service                                 enabled     # 系统调优工具;tuned 是服务端程序,用来监控和收集系统各个组件的数据,并依据数据提供的信息动态调整系统设置,达到动态优化系统的目的;tuned-adm 是客户端程序,用来和 tuned 打交道,用命令行的方式管理和配置 tuned,tuned-adm 提供了一些预先配置的优化方案可供直接使用
        vgauthd.service                               enabled     
        vmtoolsd.service                              enabled 
        dm-event.socket                               enabled 
        lvm2-lvmetad.socket                           enabled 
        lvm2-lvmpolld.socket                          enabled 
        default.target                                enabled     # multi-user.target软链;
        multi-user.target                             enabled     # 启动用户命令环境;
        remote-fs.target                              enabled     # 集合远程文件挂载点;
        runlevel2.target                              enabled     # 运行级别,用于兼容6的SysV;
        runlevel3.target                              enabled 
        runlevel4.target                              enabled

    更改系统文件句柄数及用户连接数


    # ulimit 控制shell程序的资源; Linux系统默认打开文件描述的最大值为 1024;需要修改文件句柄数;全局所有用户修改使用/etc/security/limits.d/90-nproc.conf; 针对用户的修改/etc/security/limits.conf(* - nofile 65535 表示软硬hard/soft两者)
    重新登录生效
    vim /etc/security/limits.d/90-nproc.conf ... ... * soft nproc 10240 * hard nproc 10240 * soft nofile 65535 * hard nofile 65535 vim /etc/security/limits.conf ... ... tian soft nofile 20480 # ulimit命令参数简介;使用命令是当前终端临时修改; # 参  数: -H 设置硬件资源限制,是管理员所设下的限制. -S 设置软件资源限制,是管理员所设下的限制. -a 显示当前所有的资源限制. -u 进程数目:用户最多可启动的进程数目. -c size:设置core文件的最大值.单位:blocks -d size:设置程序数据段的最大值.单位:kbytes -f size:设置shell创建文件的最大值.单位:blocks -l size:设置在内存中锁定进程的最大值.单位:kbytes -m size:设置可以使用的常驻内存的最大值.单位:kbytes -n size:设置内核可以同时打开的文件描述符的最大值.单位:n -p size:设置管道缓冲区的最大值.单位:kbytes -s size:设置堆栈的最大值.单位:kbytes -t size:设置CPU使用时间的最大上限.单位:seconds -v size:设置虚拟内存的最大值.单位:kbytes # 全局所有用户修改还可以修改 /etc/profile, 在文件中添加ulimit命令;例如 vim /etc/profile ... ... ulimit -n 65535 ulimit -u 10240 ... ... 等等

    锁定关键系统文件


    # 锁定文件,可以空格分开多个同时写;
    chattr +a /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
    # 解锁文件
    chattr -a /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
    # 查看文件是否锁定
    lsattr /etc/passwd
        -----a-------e- /etc/passwd
        或者
        ----i--------e- /etc/passwd
    # chattr加锁解锁选项 +a +i -a -i
    选项"i": 文件: 允许对文件删除, 改名; 不能添加修改删除文件中的数据;
             目录: 允许修改目录下文件的数据; 不能建立和删除文件;
    选项"a": 文件: 只能使用>>追加数据;不能删除也不能修改数据;
             目录: 允许在目录中建立和修改文件,但不允许删除;

    (可选) 修改系统语言为中文


    CentOS 6.x

    # 查看系统所有的语言环境 及 查看当前的系统语言环境
    locale -a
    echo $LANG
    # 若没有中文语言包,安装中文包
    yum groupinstall chinese-support
    # 临时生效
    LANG="zh_CN.UTF-8"
    # 永久生效, 重启系统;
    vim /etc/sysconfig/i18n 
        LANG="zh_CN.UTF-8"
        SYSFONT="latarcyrheb-sun16"

    CentOS 7.x

    # 查看系统所有的语言环境 及 查看当前的系统语言环境
    locale -a
    echo $LANG
    # 若是没有中文语言包进行安装
    yum -y install kde-l10n-Chinese
    # 临时修改,重启后恢复原来系统语言
    LANG=zh_CN.UTF-8
    # 永久修改, 重启生效
    localectl set-locale LANG=zh_CN.UTF-8       # 使用命令直接更改
    
    或者
    
    vim /etc/locale.conf
        # LANG="en_US.UTF-8" 注释掉此系统语言
        LANG="zh_CN.UTF-8"          # 重新定义系统语言为中文

    隐藏登录界面的系统信息


    # 去掉系统登录是提示的系统信息(系统版本,内核版本等)
    vim /etc/issue
        CentOS release 6.5 (Final)
        Kernel 
     on an m    
    # 将以上两行删除,写上你想展现的内容;例如
    vim /etc/issue
        localtime: d
        users: u
        tty: l
        
    # 此文件中
    等代表的内容
    d        //本地时间的日期;
    l        //显示当前tty的名字及第几个tty;
    m        //显示硬件的架构(i386/i486/i586...);
    
            //显示主机的网络名称;
    o        //显示domain name;
    
            //当前内核的版本;
    	        //显示本地端时间的时间;
    u        //当前有几个用户在线;
    s        //当前系统的名称;
    v        //当前系统的版本;

     

    服务器禁ping


    # 查看服务器允许 ping 的状态
    cat /proc/sys/net/ipv4/icmp_echo_ignore_all 
        0        # "0" 表示开启状态, 能ping通;
    
    # 临时禁 ping, 
    echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
    
    # 永久禁 ping, 修改配置文件sysctl.conf
    vim /etc/sysctl.conf
        ... ...
        net.ipv4.icmp_echo_ignore_all= 1
    # 立即生效
    sysctl -p

    ******************************************************************* 防火墙禁 ping *********************************************************************************************

    # -*- 禁止ping设置 -*-
    iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
    /etc/init.d/iptables save
    /etc/init.d/iptables restart

    # 防火墙命令解释
        -A:添加防火墙规则.
        INPUT:入站规则.
        -p icmp:指定包检查的协议为ICMP协议.
        --icmp-type 8:指定ICMP类型为8.
        -s:指定IP和掩码,“0/0”表示此规则针对所有IP和掩码.
        -j:指定目标规则,即包匹配则应到做什么,"DROP"表示丢弃.

    用户登录及历史命令


     // 记录用户的登录与操作(操作日志记录 /tmp/dbasky/root/192.168.10.108)
    # vim /etc/profile

    USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
    if [ "$USER_IP" = "" ]
    then
    USER_IP=`hostname`
    fi
    if [ ! -d /tmp/dbasky ]
    then
    mkdir /tmp/dbasky
    chmod  755 /tmp/dbasky
    fi
    if [ ! -d /tmp/dbasky/${LOGNAME} ]
    then
    mkdir /tmp/dbasky/${LOGNAME}
    chmod 300 /tmp/dbasky/${LOGNAME}
    fi
    export HISTSIZE=4096
    DT=`date "+%Y-%m-%d_%H-%M-%S"`
    export HISTFILE="/tmp/dbasky/${LOGNAME}/${USER_IP}-dbasky.$DT"
    export HISTTIMEFORMAT="[%Y.%m.%d %H:%M:%S]"
    chmod 600 /tmp/dbasky/${LOGNAME}/*dbasky* 2>/dev/null
     

    作者:TZHR —— 世间一散人

    出处:https://www.cnblogs.com/haorong/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明

  • 相关阅读:
    Java利用Base64编码和解码图片文件
    SQL查询结果列拼接成逗号分隔的字符串:group_concat
    两个正则表达式:匹配固定电话号码,匹配手机号码
    IDEA导入Junit jar包,在JavaSE的Module中使用Junit测试
    如何正确遍历删除List中的元素(普通for循环、增强for循环、迭代器iterator、removeIf+方法引用)
    Java Springboot 根据图片链接生成图片下载链接 及 多个图片打包zip下载链接
    fastjson List<> 转Json , Json 转List<>
    PHP结合memcacheq消息队列解决并发问题
    Redis与Memcached的区别
    yii2 中excel表导出
  • 原文地址:https://www.cnblogs.com/haorong/p/10495133.html
Copyright © 2011-2022 走看看