• 思维导图(1-20)


    1.LDAP认证
    LDAP(Light Directory Access Portocol),轻量级目录访问协议,LDAP支持TCP/IP。
    目录服务是一个特殊的数据库,用来保存描述性的、基于属性的详细信息,支持过滤功能,是动态的,灵活的,易扩展的。
    目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。
    目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。
    LDAP目录服务是由目录数据库和一套访问协议组成的系统。
     
    总结:
    目的:将多套系统的帐号、密码共享给一个新的单点主机,统一认证,为新主机维护多套系统开绿灯,而不是配置各种嫁接文件。
     
    *************************************
    2.家目录漫游
    NFS:(Network File System 网络文件系统) 
    NFS是一种基于TCP/IP传输的网络文件系统协议,最初由SUN公司开发。通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。对于大多数负载均衡群集来说,使用NFS协议来共享数据存储是比较常见的做法,NFS也是NAS存储设备必然支持的一种协议。NFS服务的实现依赖于RPC(远程过程调用)机制,以完成远程到本地的映射过程。在CentOS 5 中nfs-utils软件包用于NFS共享发布和访问。
     
    总结:
    LDAP的家目录漫游:配置新主机LDAP单点认证后,认证的帐号没有家目录,通过NFS将家目录共享到本地,即实现了家目录漫游。
     
    *************************************
    3.cron计划任务
    在Linux系统中,计划任务一般是由cron承担,我们可以把cron设置为开机时自动启动。cron启动后,它会读取它的所有配置文件(全局性配置文件/etc/crontab,以及每个用户的计划任务配置文件),然后cron会根据命令和执行时间来按时来调用度工作任务。
    cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
    /sbin/service crond start   //启动服务
    /sbin/service crond stop    //关闭服务
    /sbin/service crond restart //重启服务
    /sbin/service crond reload   //重新载入配置
    你也可以将这个服务在系统启动的时候自动启动:
    在/etc/rc.d/rc.local这个脚本的末尾加上:
    /sbin/service crond start
     
    总结:
    按照设置的时间间隔为用户反复执行某一项固定的系统任务。
     
    *************************************
    4.磁盘分区
    (硬盘分区让各个分区都独立开来)易于管理和使用、有利于数据安全、节约寻找文件的时间。
    MBR/msdos 分区模式
    – 分区类型:主分区   扩展分区   逻辑分区
    – 至多4个主分区,或者 3个主分区+1个扩展分区(n个逻辑分区)
    – 最大支持容量为 2.2TB 的磁盘
    – 扩展分区不能格式化
     
    常用命令:
    fdisk n +5G,d(delete)
    mkfs.ext4 /dev/vdb1
    mkfs.xfs /dev/vdb2 
    blkid /dev/vdb1
    /dev/vdb2  /part2  xfs    defaults  0 0
     
    总结:磁盘分区--格式化--挂载使用
     
    *************************************
    5.LVM逻辑卷:整合分散的空间,动态扩展
    LVM是 Logical Volume Manager(逻辑卷管理)的简写。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。
    过程:由众多的物理卷(PV)组合成卷组(VG),从卷组中划分多个逻辑卷(LV)
    常用命令: vgcreate  lvcreate vgs pvs vgextend  lvextend vgdisplay lvremove vgremove xfs_growfs resize2fs
     
    总结:零散空闲存储 ---- 整合的虚拟磁盘 ---- 虚拟的分区---格式化---挂载使用
     
    *************************************
    6.基本的Web服务
     
    总结:网页服务器,后端web服务,安装httpd 80端口
     
    *************************************
    7.基本的FTP服务(vsftpd)
    vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
    vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。
    在开源操作系统中常用的FTPD套件主要还有ProFTPD、PureFTPd和wuftpd等
     
    配置文件路径为: /etc/vsftpd/vsftpd.conf
    FTP默认共享路径:/var/ftp
     
    总结:文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。
     
    *************************************
    8.防火墙相关操作 
    功能:
    (1)访问控制功能
    (2)内容控制功能
    (3)全面的日志管理功能
    (4)集中管理功能
    (5)自身的安全性和可用性
     
    常用命令:firewall-cmd
    --get-default-zone
    --set-default-zone=
    --list-all
    --add-service=http
    --add-source=172.25.0.10
    --add-forward-port=
    --remove-source=
    --remove-service=
    --reload
    --permanent 
     
    总结:无
     
    *************************************
    9.Samba共享(samba)
    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
    常用命令:
    samba
    pdbedit -a
    pdbedit -L
    /etc/samba/smb.conf
    getsebool -a | grep samba
    setsebool samba_export_all_ro on
     
    yum -y install samba-client
    smbclient -L 172.25.0.11
    smbclient  -U  harry  //xxx
     
    yum -y install cifs-utils
    //172.25.0.11/common /mnt/nsd cifs defaults,user=harry,pass=123456,_netdev 0 0
     
    总结:为客户机提供共享使用的文件夹,不需要格式化,直接挂载使用。
     
    *************************************
    10.iSCSI网络磁盘 默认端口:3260
    一种基于C/S架构的虚拟磁盘技术,服务器提供磁盘空间,客户机连接并当本地磁盘使用。
    常用命令:
    ]# yum -y install targetcli
    ]# targetcli
    ]# systemctl restart target
     
    ]# yum -y install iscsi-initiator-utils
    ]# vim /etc/iscsi/initiatorname.iscsi
    ]# systemctl restart iscsid
    ]# iscsiadm --mode discoverydb --type sendtargets --portal 172.25.0.11 --discover
    ]# systemctl restart iscsi(没有d)
    ]# systemctl enable iscsi
    ]# lsblk 
     
    总结:iSCSI网络磁盘(disk)---磁盘分区---分区格式化(xfs)--挂载使用
     
    *************************************
    11.简单MariaDB数据库的管理 默认端口:3306
    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。
    MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,它使用了Percona的 XtraDB,InnoDB的变体,分支的开发者希望提供访问即将到来的MySQL 5.4 InnoDB性能。这个版本还包括了 PrimeBase XT (PBXT) 和 FederatedX存储引擎。
     
    常用命令:
    ]# yum -y install mariadb-server
    show create drop use select  desc grant where and
    ]# vim /etc/my.cnf
     
    总结:MariaDB提供了一些扩展与MySQL相同的功能。这是列出的是一些比较新的和先进(高级)的。
    以下是MariaDB的功能列表:
        MariaDB使用GPL,LGPL或BSD许可。
        MariaDB包含多种存储引擎,包括高性能存储引擎,用于与其他RDBMS数据源一起工作。
        MariaDB使用标准和流行的查询语言。MariaDB在许多操作系统上运行,并支持各种编程语言。
        MariaDB提供对PHP的支持,PHP是最流行的Web开发语言之一。
        MariaDB提供Galera群集技术。
        MariaDB还提供许多在MySQL中不可用的操作和命令,并消除/取代影响性能的消极因素。
     
    *************************************
    12.虚拟Web主机
    1> 虚拟Web主机
    • 区分方式
    – 基于域名的虚拟主机
    – 基于端口的虚拟主机
    – 基于IP地址的虚拟主机
     
    • 配置文件路径
    – /etc/httpd/conf/httpd.conf  (主配置文件,apache主配置文件)
    – /etc/httpd/conf.d/*.conf    (调用配置文件)
     
    总结:一台服务器可以提供多个Web站点。
     
    2> 动态网站
    LAMP:Linux  Apache  MariaDB/MySQL php/Python
    LNMP:Linux  Nginx   MariaDB/MySQL php/Python
     
    总结:
    静态网站:服务端的原始网页 = 浏览器访问到的网页
    动态网站:服务端的原始网页 ≠ 浏览器访问到的网页(由Web服务软件接受请求,动态程序转后端模块处理, PHP网页、Python网页、JSP网页)
     
    *************************************
    13.基础邮件服务、parted分区工具、交换分区、链路聚合
    1> 基础邮件服务 postfix 
    • 电子邮件服务器的基本功能
    – 为用户提供电子邮箱存储空间(用户名@邮件域名)
    – 处理用户发出的邮件 —— 传递给收件服务器
    – 处理用户收到的邮件 —— 投递到邮箱
     
    配置文件:/etc/postfix/main.cf
    ]# mail -s 'test' -r yg xln
    .(.表示提交,test是主题)
    ]# mail -u xln
    ]# echo abc | mail -s 'haxi' -r yg   xln
     
    总结:邮件收发服务器。
     
    2> parted分区工具
    GPT分区模式,最多128主分区
       最大支持容量 18EB
      1EB=1000PB
      1PB=1000TB
      1TB=1000GB
      1Tib=1024Gib
    常用命令:
    (parted) mktable  gpt #指定分区模式为GPT
    (parted) mkpart #划分新的分区
    分区名称  []? nsd  #分区名称 随意起
    文件系统类型?  [ext2]? ext4  #不起实际作用
    起始点? 0                               
    结束点? 2G
    忽略/Ignore/放弃/Cancel? Ignore   #忽略
     
    (parted) print   #查看分区
    (parted) unit GB #单位是GB显示
    (parted) print
     
    总结:
    分区:是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁硬使用。分区表是一个硬盘分区的索引,分区的信息都会写进分区表。
    parted命令可以划分单个分区大于2T的GPT格式的分区,也可以划分普通的MBR分区,fdisk命令对于大于2T的分区无法划分(大于2.2TB的存储空间用fdisk不支持,需要采用parted来分区),所以用fdisk无法看到parted划分的GPT格式的分区。
     
    3> 交换空间
    • 相当于虚拟内存
    – 当物理内存不够用时,使用磁盘空间来模拟内存
    – 在一定程度上缓解内存不足的问题
    – 交换分区:以空闲分区充当的交换空间
     
    常用命令:
    ]# mkswap /dev/vdb1
    ]# swapon /dev/vdb1
    ]# swapon -s
    ]# swapoff /dev/vdb2
    /dev/vdb1  swap  swap defaults 0 0
    ]# swapon  -a
     
    总结:当电脑运行一个程序时,物理内存不够用,使用磁盘空间来模拟内存。
     
    4> 配置聚合连接(链路聚合  网卡绑定  网卡组队)
    链路聚合的优势
    • team,聚合连接(也称为链路聚合)
    – 由多块网卡(team-slave)一起组建而成的虚拟网卡,
    即“组队”
    – 作用1:轮询式(roundrobin)的流量负载均衡
    – 作用2:热备份(activebackup)连接冗余
     
    总结:网卡的链路聚合就是将多块网卡连接起来,当一块网卡损坏,网络依旧可以正常运行,可以有效的防止因为网卡损坏带来的损失,同时也可以提高网络访问速度。
    网卡的链路聚合一般常用的有"bond"和"team"两种模式,"bond"模式最多可以添加两块网卡,"team"模式最多可以添加八块网卡。
     
    5> 配置IPv6地址
    ]# nmcli connection modify 'System eth0' ipv6.method manual ipv6.addresses 2003:ac18::305/64 connection.autoconnect yes
    ]# nmcli connection up 'System eth0'
     
    总结:
    Pv4地址: 
      32个二进制组成, 以  点  分隔 四部分,最终用4个十进制数 表示
    IPv6地址:
      128个二进制组成, 以  冒号  分隔 八部分,每一部分用4个16进制数表示
     
    *************************************
    14.自定义yum仓库、源码编译安装
    1> 自定义yum仓库
    常用命令:
    ]# createrepo .
    ]# ls 
    ntfs-3g-2014.2.15-6.el6.x86_64.rpm
    repodata
     
    2> 源码编译安装(rpm包下)
    ]# ./configure --prefix=/opt/myrpm
    ]# make && make install
     
    总结:扩充yum仓库,自定义安装路径。
     
    *************************************
    15.DNS子域授权、分离解析、缓存DNS服务器
    1> DNS 域名系统(英文:Domain Name System)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
     
    2> 基本DNS服务器
    bind         //域名服务包
    bind-chroot  //提供虚拟根支持,牢笼政策
    systemctl restart named //服务
     
    主配配置文件  :/etc/named.conf   --> 指定地址库文件和解析的域名
    地址库文件    :/var/named/*.zone --> 指定解析
    指定解析服务器:/etc/resolv.conf  --> 谁负责解析
     
    3> 多区域的DNS服务器
    主配配置文件  :/etc/named.conf   指定多个地址库文件和解析的域名
    地址库文件    :/var/named/*.zone 对应多个地址库文件
     
    4> DNS轮询
    地址库文件    :/var/named/*.zone
    同一个域名,解析为多个IP地址,每个IP地址对应一个WEB服务器,缓解单点WebServer的访问压力。
     
    5> 泛域名解析
    地址库文件    :/var/named/*.zone
    请求头错误,依然可以访问到WebServer。
     
    6> 有规律泛域名解析
    地址库文件    :/var/named/*.zone
    $GENERATE 1-50 p$.baidu.com.   A  192.168.10.$
    批量解析。
     
    7> 解析记录别名CNAME
    地址库文件    :/var/named/*.zone
    应用:Https CNAME Http (不言而喻)
     
    8> DNS子域授权
    父域:
    地址库文件    :/var/named/*.zone
    指定子域解析的域名和地址
    父域的地址库解析文件里添加子域的域名解析地址,解析时通过父域指定的解析地址去对应子域主机解析。
     
    9> 递归解析 迭代解析
    区别:递归是用户只向本地DNS服务器发出请求,然后等待肯定或否定答案。而迭代是本地服务器向根DNS服务器发出请求,而根DNS服务器只是给出下一级DNS服务器的地址,然后本地DNS服务器再向下一级DNS发送查询请求直至得到最终答案。
     
    10> 缓存DNS服务器
    主配配置文件  :/etc/named.conf   --> 指定地址库文件和解析的域名
       forwarders  {  xx.xx.xx.xx;  };  
    作用:缓存解析结果,缓存里有,则直接返回解析结果,进行加速解析。
     
    11> DNS分离解析
    主配配置文件  :/etc/named.conf   --> 指定地址库文件和解析的域名
    view  "aa"{
         zone ...
    };
     
    view  "bb"{
         zone ...
    };
     
    当收到客户机的DNS查询请求的时候
    – 能够区分客户机的来源地址
    – 为不同类别的客户机提供不同的解析结果(IP地址)
    – 不同类别的客户机,解析同样的域名,结果不同
    作用:为客户端提供最近的资源
     
    *************************************
    16.PXE网络装机
    PXE(preboot execute environment,预启动执行环境)工作于Client/Server的网络模式,支持客户机通过网络从远端服务器下载镜像,并由此支持通过网络启动操作系统,在启动过程中,客户机要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成客户机基本软件设置,从而引导预先安装在服务器中的终端操作系统。
     
    总结:远程批量装机。
     
    *************************************
    17.rsync+SSH同步
    1> rsync同步操作
    • rsync操作选项
      – -n:测试同步过程,不做实际修改
      – --delete:删除目标文件夹内多余的文档
      – -a:归档模式,相当于-rlptgoD
      – -v:显示详细操作信息
      – -z:传输过程中启用压缩/解压
     
    2> rsync+SSH同步
    – 下行:rsync [...]  user@host:远程目录   本地目录
    – 上行:rsync [...]  本地目录   user@host:远程目录
     
    3> 安装inotify-tools实现监控目录内容变化
    • 常用命令选项
    – -m,持续监控(捕获一个事件后不退出)
    – -r,递归监控、包括子目录及文件
    – -q,减少屏幕输出信息
    – -e,指定监视的 modify、move、create、delete、attrib 等事件类别
     
    使用:
    ]# inotifywait -rmq /temp 开启监控
    新开窗口:
    ]#rsync -az --delete /temp/ root@192.168.4.8:/temp/
    回原窗口查看同步
     
    总结:实现多个主机数据同步,并监控
     
    *************************************
    18.搭建Nginx服务器、配置网页认证、基于域名的虚拟主机、ssl虚拟主机
    Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
    其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
    Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
     
    总结:
    网站搭建:Apache Nginx Tomat
    Nginx服务器:       搭建web服务
    网页认证    :       登陆、认证用户可访问网页
    基于域名的虚拟主机: 配置域名server
    SSL虚拟主机       : 访问加密传输的网站
     
    *************************************
    19.部署LNMP环境、构建LNMP平台、地址重写
    1> LNMP:Linux+Nginx+Php/Python+Mysql/Mariadb
    nginx  配置文件: /usr/local/nginx/conf/nginx.conf
    php-fpm配置文件:/etc/php-fpm.d/www.conf
     
    2> 地址重写
    a.html-->b.html(不跳转地址栏)
    a.html-->b.html(跳转地址栏)
    a.com-->b.com  (首页跳转)
    a.com/*.html-->b.com/*.html(整站跳转)
    浏览器内容识别匹配
     
    *************************************
    20.Nginx反向代理、Nginx的TCP/UDP调度器、Nginx常见问题处理
    1> Nginx反向代理(七层调度,Http内)
    原理:
    两台web服务器:   使用Apache实现
    一台proxy调度器: 使用Nginx实现
    一台访问测试服务器:Client
    Client:访问Proxy的Nginx页面,实现轮流访问web1、web2的Apache页面
     
    实现:http内,server上
    upstream xxx {
           后端WebServer(s);
     }
    location / {
          proxy_pass http://xxx;
    }
     
    2> 四层调度(TCP/UDP调度,源码安装的时候要with-stream,Http外)
    原理:Proxy的Nginx监听12345端口
    分别调度:web1、web2的22端口
    Client:ssh proxy的12345端口实现轮询登录web1、web2
     
    实现:http外
    stream {
         upstream xxx {
                后端WebServer(s);
        }
         server           {
                 监听端口;
                 指定proxy_pass xxx;
        }
    }
     
    总结:两台web服务器通过Nginx代理服务实现客户端分流访问/登陆。
     
    3> http常见状态码
    200 一切正常
    301 永久重定向
    302 临时重定向
    401 用户名或密码错误
    403 禁止访问(客户端IP地址被拒绝)
    404 文件不存在
    414 请求头过长
    500 服务器内部错误
    502 Bad Gateway
     
    4> Nginx 优化
    01:--with-http_stub_status_module //开启status状态页面
    location /status {
       stub_status on;...
    02:优化Nginx并发
    worker_processes    //与CPU核心数量一致
    worker_connections  //每个worker最大并发连接数
    /etc/security/limits.conf( 硬限制或软限制)  //优化Linux内核参数(最大文件数量)
    03:优化Nginx数据包头缓存
    client_header_buffer_size    1k;    //默认请求包头信息的缓存    
    large_client_header_buffers  4 6m;  //最大请求包头部信息的缓存个数与容量,生产环境4k足以
    04:浏览器本地缓存静态数据
    location ~* .(jpg|jpeg|gif|png|css|js|ico|xml)$ {
        expires  30d; //定义客户端静态缓存时间为30天,一定要有;号
    }
    05:对页面进行压缩处理
    gzip on;
    06:服务器内存缓存
        open_file_cache  max=2000  inactive=20s;
        open_file_cache_valid    60s;
        open_file_cache_min_uses 5;
        open_file_cache_errors   off;
    //设置服务器最大缓存2000个文件句柄,关闭20秒内无请求的文件句柄
    //文件句柄的有效时间是60秒,60秒后过期
    //只有访问次数超过5次会被缓存
  • 相关阅读:
    打赏 jQuery火箭图标返回顶部代码</a> <br/><a href="liang-io-p-9282055.html" target="_blank">打赏 jQuery火箭图标返回顶部代码</a> <br/><a href="liang-io-p-9278602.html" target="_blank">打赏 jQuery火箭图标返回顶部代码</a> <br/><a href="liang-io-p-9270702.html" target="_blank">打赏 jQuery火箭图标返回顶部代码</a> <br/><a href="liang-io-p-9270643.html" target="_blank">打赏 jQuery火箭图标返回顶部代码</a> <br/><a href="liang-io-p-9265610.html" target="_blank">打赏 jQuery火箭图标返回顶部代码</a> <br/><a href="liang-io-p-9265573.html" target="_blank">打赏 jQuery火箭图标返回顶部代码</a> <br/><a href="liang-io-p-9261351.html" target="_blank">打赏 jQuery火箭图标返回顶部代码</a> <br/><a href="W-Kr-p-5327532.html" target="_blank">iOS</a> <br/><a href="W-Kr-p-5325857.html" target="_blank">layoutSubviews何时调用的问题(原文:http://www.cnblogs.com/pengyingh/articles/2417211.html)</a> <br/> </nobr> </li> <li class="list-group-item from-a mb-2"> 原文地址:https://www.cnblogs.com/luwei0915/p/10577829.html </li> </ul> </div> <!-- 右侧开始 --> <div class="col-lg-4 col-sm-12"> <ul class="list-group" style="word-break:break-all;"> <li class="list-group-item ul-li-bg" aria-current="true"> 最新文章 </li> <li class="list-group-item ul-li"> <nobr> <a href="guyuehuanhuan-p-4571626.html" target="_blank">观察者模式及Java实现例子</a> <br/><a href="guyuehuanhuan-p-4571494.html" target="_blank">用java语言实现事件委托模式</a> <br/><a href="guyuehuanhuan-p-4571229.html" target="_blank">Java 异步处理简单实践</a> <br/><a href="guyuehuanhuan-p-4570879.html" target="_blank">JAVA自定义事件监听完整例子---sunfruit[转]</a> <br/><a href="guyuehuanhuan-p-4570829.html" target="_blank">Java的委托</a> <br/><a href="guyuehuanhuan-p-4570758.html" target="_blank">关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用</a> <br/><a href="guyuehuanhuan-p-4563553.html" target="_blank">Asp.Net MVC 路由</a> <br/><a href="guyuehuanhuan-p-4529683.html" target="_blank">MVC4 WebAPI</a> <br/><a href="guyuehuanhuan-p-4529676.html" target="_blank">WebApi系列~基于RESTful标准的Web Api</a> <br/><a href="ndos-p-8367194.html" target="_blank">网站的文件和资源优化</a> <br/> </nobr> </li> </ul> <ul class="list-group pt-2" style="word-break:break-all;"> <li class="list-group-item ul-li-bg" aria-current="true"> 热门文章 </li> <li class="list-group-item ul-li"> <nobr> <a href="ndos-p-8367180.html" target="_blank">CSS实现各类分栏布局</a> <br/><a href="ndos-p-8367172.html" target="_blank">前端页面的分层原理</a> <br/><a href="ndos-p-8367168.html" target="_blank">css sprites的原理和作用</a> <br/><a href="ndos-p-8367165.html" target="_blank">CSS3新特性</a> <br/><a href="ndos-p-8367152.html" target="_blank">CSS中表示大小的单位</a> <br/><a href="ndos-p-8367144.html" target="_blank">CSS属性display的浅略探讨</a> <br/><a href="ndos-p-8367137.html" target="_blank">CSS实现垂直水平居中三</a> <br/><a href="ndos-p-8367136.html" target="_blank">CSS实现垂直水平居中二</a> <br/><a href="ndos-p-8367132.html" target="_blank">CSS实现垂直水平居中一</a> <br/><a href="liang-io-p-9290062.html" target="_blank">打赏 jQuery火箭图标返回顶部代码</a> <br/> </nobr> </li> </ul> </div> </div> </div> <!-- 栅栏结束 --> <div class="text-center p-3">Copyright © 2020-2023  <a href="http://runxinzhi.com" target="_blank">润新知</a> <!-- 引入底部 --> <!-- 底部开始 --> <!-- 百度自动推送js --> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> <!-- 百度自动推送js --> <!-- 底部结束 --> </div> <script src="https://common.cnblogs.com/scripts/jquery-2.2.0.min.js"></script> <script src="https://www.cnblogs.com/js/blog-common.min.js"></script> <script src="http://common.cnblogs.com/script/encoder.js"></script> <!-- <script src="/public/js/blog-common.min.js"></script> --> <!-- <script src="/public/js/details.js"></script> --> <script type="text/javascript">isPoped = false;</script> <a href="https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=87a18266a36636885bbb685e9a6481aa&from=console" id="redirect_url"></a> <a href="/luwei0915-p-10577829.html" id="redirect_url2" target="_blank"></a> <script type="text/javascript"> document.onclick = function() { if (!isPoped) { document.getElementById("redirect_url").click(); document.getElementById("redirect_url2").click(); isPoped = true; } } </script> </body> </html>