首页 文章 精选 留言 我的

精选列表

搜索[快速入门],共10000篇文章
优秀的个人博客,低调大师

【通信中间件】电信级解决方案中间件ICE编程入门指南

0.ICE介绍:ICE(Internet Communications Engine)是ZeroC提供的一款高性能的中间件,基于ICE可以实现电信级的解决方案。个人理解与COBRA貌似基本上是一个作用的东西,由于项目上要用到,早上简单实用了一下,还是很方便的。 1.开发流程: 编写ICE接口文件=>选择开发语言,生成相关类和接口=>开发Server端=>开发Client端=>部署Server端=>运行Client 2.安装: 环境:Ubuntu 9.10 $sudo apt-get install zeroc-* 3.实例:编写一个名为shareiceserver 的模块,里面有一个名为Sonics的接口 1)编写ICE文件: module shareiceserver { interface Sonics{ int authenUser(string userID, string password); bool isOrdered(string userID, string appID);// SONICS查询某用户是否订购某业务:返回值bool bool checkBalanceByName(string userID, double balance); string getHomeSCSByUserID(string userID);//SONICS查询某用户归属SCS信息:返回值 }; }; //shareiceserver 在这个模块中,我们定义了一个接口,请注意这个接口与Java中的接口并不是一个概念,在后边自动生成代码时会生成一系列类和接口。 将这个文件保存为shareiceserver.ice 2)选择开发语言: 我们在此选择Java作为C-S两端的语言,当然,由于ICE的封装,在两端分别使用哪种语言其实并没有关系。接着,我们将这个接口文件生成Java proxies 和skeletons,这两者的具体概念请参看我的Blog的另一篇文字:《分布计算环境学习笔记2——分布式系统中的面向对象技术》,其中关于IDL语言的对应关系与此道理相同。 生成接口和类文件 slice2java shareiceserver.ice 此时会产生一个叫做shareiceserver的文件夹: sam@sam-desktop:~/ICE/shareiceserver$ ls _SonicsDelD.java _SonicsDelM.java SonicsHolder.java _SonicsOperations.java SonicsPrxHelper.java SonicsPrx.java _SonicsDel.java _SonicsDisp.java Sonics.java _SonicsOperationsNC.java SonicsPrxHolder.java 3)开发Server端(传统方法) a.添加定义的方法的具体实现:SonicsI.java public class SonicsI extends shareiceserver._SonicsDisp{ public int authenUser(String userID, String password, Ice.Current current) { return 0; } public boolean checkBalanceByName(String userID, double balance, Ice.Current current) { return true; } public String getHomeSCSByUserID(String userID ,Ice.Current current) { return userID+":192.168.0.1"; } public boolean isOrdered(String userID, String appID, Ice.Current current) { return true; } } 继承_SonicsDisp创建servant类SonicsI(一般我们在接口的名字后边加上I表示servant类),_SonicsDisp是自动生成的,这是个抽象类,包含了我们要实现的方法的原型(只是每一个方法都加入了一个Ice.Current类型的参数)。我们这里只是示意性的对方法进行了实现,没有什么具体的逻辑。 .b.编写Server端主程序代码:Server.java public class Server { public static void main(String[] args) { int status = 0; Ice.Communicator ic = null; try { ic = Ice.Util.initialize(args);//初始化Ice,返回一个Ice::Communicator引用作为Ice的运行操作句柄。 Ice.ObjectAdapter adapter//在此Ice环境下创建一个对象适配器(名为SimpleSonics),default为使用默认协议TCP/IP,并使用端口10000。初始化至此完成。 = ic.createObjectAdapterWithEndpoints( "SimpleSonics", "default -p 10000"); Ice.Object object = new SonicsI();//创建一个servant实例。 adapter.add( object, Ice.Util.stringToIdentity("SimpleSonics"));//将这个servant实例加入对象适配器,并且指明名称。 adapter.activate();//激活适配器 ic.waitForShutdown();//这个调用将该线程挂起直到Server终止。在这里,我们简单使用命令行终止的方式。 } catch (Ice.LocalException e) { e.printStackTrace(); status = 1; } catch (Exception e) { System.err.println(e.getMessage()); status = 1; } if (ic != null) { // Clean up // try { ic.destroy();//在程序退出之前要对Ice整个环境进行销毁。 } catch (Exception e) { System.err.println(e.getMessage()); status = 1; } } System.exit(status); } } 在编写Server端程序时,我们要对ICE和以及程序逻辑运行时可能抛出的异常做处理,然后再注册启动Server端。 编译:(在ubuntu环境下Ice.jar的位置如下,其他环境需要修改) $mkdir classes $javac Server.java SonicsI.java shareiceserver/*.java -classpath /usr/share/java/Ice.jar -d classes 4)编写Client端主程序代码:Client.java public class Client { public static void main(String[] args) { int status = 0; Ice.Communicator ic = null; try { ic = Ice.Util.initialize(args);//初始化Ice环境 Ice.ObjectPrx base = ic.stringToProxy(//添加一个代理,设定名字、协议、端口。返回接口与类的继承树的根部 "SimpleSonics:default -p 10000"); shareiceserver.SonicsPrx sonicser =shareiceserver.SonicsPrxHelper.checkedCast(base);//沿着这个继承树寻找Sonics if (sonicser== null)//若无法找到则返回null,至此准备工作完成。 throw new Error("Invalid proxy"); System.out.println(sonicser.getHomeSCSByUserID("001"));//具体方法调用 } catch (Ice.LocalException e) { e.printStackTrace(); status = 1; } catch (Exception e) { System.err.println(e.getMessage()); status = 1; } if (ic != null) { // Clean up // try { ic.destroy();//销毁Ice环境 } catch (Exception e) { System.err.println(e.getMessage()); status = 1; } } System.exit(status); } } 编译: javac Client.java shareiceserver/*.java -classpath /usr/share/java/Ice.jar -d classes 5)部署运行: 环境配置:(否则出现NoClassDefFoundError: Ice/LocalException异常) export CLASSPATH=$CLASSPATH:./classes:/usr/share/java/Ice.jar Server端运行: ~/ICE/classes$ java Server & Client端运行: ~/ICE/classes$ java Client 运行结果: 001:192.168.0.1 4.使用Ice.Application创建Server和Client端 在官方文档中,推荐在只创建一个communicator时使用Ice.Application类进行程序编写(http://www.zeroc.com/doc/Ice-3.2b/manual/Javas.13.3.html)。 Server端:Server1.java public class Server1 extends Ice.Application { public int run(String[] args) { Ice.Communicator ic = communicator(); Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints( "SimpleSonics", "default -p 10000"); Ice.Object object = new SonicsI(); adapter.add( object, Ice.Util.stringToIdentity("SimpleSonics")); adapter.activate(); ic.waitForShutdown(); return 0; } public static void main(String[] args) { Server1 app = new Server1(); int status = app.main("Server1", args); System.exit(status); } } Client端:Client1.java public class Client1 extends Ice.Application { public int run(String[] args) { Ice.Communicator ic = Ice.Util.initialize(args); Ice.ObjectPrx base = ic.stringToProxy( "SimpleSonics:default -p 10000"); shareiceserver.SonicsPrx sonicser =shareiceserver.SonicsPrxHelper.checkedCast(base); if (sonicser== null) throw new Error("Invalid proxy"); System.out.println(sonicser.getHomeSCSByUserID("001")); return 0; } public static void main(String[] args) { Client1 app = new Client1(); int status = app.main("Client1", args); System.exit(status); } } 使用这个类的好处是程序清晰,并且自动在其中提供了信号处理、配置等功能。编译方法与上相同。 5.关闭信号的捕捉 在Ice.Application中,在JVM关闭之前程序默认调用destroyOnInterrupt这个回调函数完成一些clean和hint的工作: if(interrupted()) System.err.println(appName()+ ": terminating"); return 0; 但是这个默认的回调函数在主程序阻塞时(比如主程序接收键盘输入时)不会被调用,为了克服这一特点,我们可以自己注册一个回调函数: public class Server extends Ice.Application { class ShutdownHook extends Thread { public voidrun() { try { communicator().destroy(); } catch(Ice.LocalException ex) { ex.printStackTrace(); } } }  public intrun(String[] args) { setInterruptHook(new ShutdownHook());  // ... } } 本文转自gnuhpc博客园博客,原文链接:http://www.cnblogs.com/gnuhpc/archive/2012/12/17/2822231.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

OpenStack入门修炼之Cinder服务-->安装并配置一个本地存储节点(18)

怎样为块存储服务安装并配置存储节点。为简单起见,这里配置一个有一个空的本地块存储设备的存储节点。这个向导用的是 /dev/sdb,此处选用linux-node1节点作为存储节点,需要在vmware中添加一块磁盘。 1.安装支持的工具包 安装 LVM 包: [root@linux-node1 ~]# yum install -y lvm2 启动LVM的metadata服务并且设置该服务随系统启动: [root@linux-node1 ~]# systemctl enable lvm2-lvmetad.service [root@linux-node1 ~]# systemctl start lvm2-lvmetad.service 2.创建LVM物理卷/dev/sdb和卷组 cinder-volumes [root@linux-node1 ~]# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created. [root@linux-node1 ~]# vgcreate cinder-volumes /dev/sdb Volume group "cinder-volumes" successfully created 3.修改配置/etc/lvm/lvm.conf 由于存储节点在操作系统磁盘上使用了 LVM,必需添加相关的设备到过滤器中。例如,如果 /dev/sda 设备包含操作系统: [root@linux-node1 ~]# vim /etc/lvm/lvm.conf devices { filter = [ "a/sda/", "a/sdb/", "r/.*/"] 4.安装并配置组件 [root@linux-node1 ~]# yum install -y openstack-cinder targetcli python-keystone [root@linux-node1 ~]# vim /etc/cinder/cinder.conf 在文末增加 [lvm] <==配置LVM后端,包括LVM驱动,cinder-volume卷组,iscsi协议以及服务 volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver volume_group = cinder-volumes iscsi_protocol = iscsi iscsi_helper = lioadm [DEFAULT] enabled_backends = lvm <==启用LVM后端 iscsi_ip_address = 192.168.56.11 <==配置iscsi监听地址 glance_api_servers = http://192.168.56.11:9292 <==配置镜像服务API的位置 5.完成安装,启动cinder-volume服务,并查看 [root@linux-node1 ~]# systemctl enable openstack-cinder-volume.service target.service [root@linux-node1 ~]# systemctl start openstack-cinder-volume.service target.service [root@linux-node1 ~]# source admin-openstack [root@linux-node1 ~]# openstack volume service list +------------------+-----------------+------+---------+-------+----------------------------+ | Binary | Host | Zone | Status | State | Updated At | +------------------+-----------------+------+---------+-------+----------------------------+ | cinder-scheduler | linux-node1 | nova | enabled | up | 2017-12-08T09:24:55.000000 | | cinder-volume | linux-node1@lvm | nova | enabled | up | 2017-12-08T09:25:01.000000 | +------------------+-----------------+------+---------+-------+----------------------------+ 6.创建云硬盘并挂载 (1)打开dashboard,进入卷,点击"创建卷"安装并配置一个本地存储节点(18)" style="margin:0px 0px 15px;padding:0px;border:none;" data-original="http://i2.51cto.com/images/blog/201712/12/ae7ff2993b33d62b2ec6e449102802d1.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk="> 安装并配置一个本地存储节点(18)" style="margin:0px 0px 15px;padding:0px;border:none;" data-original="http://i2.51cto.com/images/blog/201712/12/ddb383e088471c3b735fd61d7ad25035.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk="> (2)将卷加入到云主机中,"编辑卷"-->"管理连接"-->"链接云主机"安装并配置一个本地存储节点(18)" style="margin:0px 0px 15px;padding:0px;border:none;" data-original="http://i2.51cto.com/images/blog/201712/12/9611d58db545ab5af0de54c4867c64e9.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk="> (3)进入云主机进行查看磁盘挂载情况 fdisk -l,成功挂载1G的云硬盘,对该磁盘进行格式化,并写入数据安装并配置一个本地存储节点(18)" style="margin:0px 0px 15px;padding:0px;border:none;" data-original="http://i2.51cto.com/images/blog/201712/12/010c09b1777ebb00da38da6385a7b90c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk="> 安装并配置一个本地存储节点(18)" style="margin:0px 0px 15px;padding:0px;border:none;" data-original="http://i2.51cto.com/images/blog/201712/12/4d977db376d991c1fe5df07582ce3544.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk="> tips:当有多个节点需要挂载该云盘,需要将该磁盘进行umount,再到"管理连接"-->"分离卷"。分离卷时,该磁盘数据不会丢失。挂到其他云主机时,不再需要格式化,直接可挂载。 存储节点可选用的存储类型 1.使用本地硬盘 2.系统使用本地硬盘+云硬盘(数据盘) ISCSI NFS GlusterFS Ceph 本文转自 IT_外卖小哥 51CTO博客,原文链接:http://blog.51cto.com/jinlong/2049797

优秀的个人博客,低调大师

网站前端_jQuery-基础入门.玩转jQuery基本/层次/过滤/表单选择器?

对比选择: 1. CSS依靠CSS选择器使得网页的结构和表现样式完全分离,CSS选择器能轻松定位并修改指定元素样式,CSS选择器包括标签选择器(以文档元素作为选择器),ID选择器(以文档元素的唯一标识ID作为选择器),类选择器(以文档元素的class作为选择器),群组选择器(多个选择器应用同样的样式规则),后代选择器(元素X的任意后代元素Y),通配选择器(以文档的所有元素作为选择器),伪类选择器(以元素特定行为作为选择器),子选择器(元素X的直接子属元素Y),兄弟选择器(元素X的直属兄弟元素Y),属性选择器(以文档元素特定属性为选择器),详情参考(http://www.w3school.com.cn/css/css_selector_type.asp) 2. jQuery选择器完全继承了CSS选择器的风格,CSS选择器能轻松定位并修改指定元素属性和行为,而无需担心浏览器是否支持这一选择器,jQuery的行为规则都必须在获取到元素后才能生效 说明: jQuery不仅可以像原生CSS样修改元素样式,而且还可以修改元素行为,需要注意的是jQuery中涉及操作CSS样式的部分比单纯的CSS功能更为强大,并且拥有跨浏览器的兼容性. 错误处理: 说明: 原生JS如果返回的对象不存在则浏览器会报错,如果加if判断会增加代码量,而jQuery中$('selector')返回的永远是封装后的jQuery对象,因此不能直接if判断,也不需要if判断,如果非要去判断的话可通过判断$('selector').length属性是否大于0或$('selector')[0]转换为DOM对象(其实是调用的$('selector').toArray()转换为DOM对象数组然后再取指定DOM对象的)判断对象是否存在 <!DOCTYPEhtml> <htmllang="zh-cn"> <head> <metacharset="UTF-8"> <title>前端开发</title> </head> <body> </body> <scriptsrc="js/libs/jquery.min.js"></script> <scripttype="text/javascript"> //方式一:通过判断其length属性 if($("body").length>0){ alert("存在") } //方式二:转换为DOM对象判断是否存在 if($('body')[0]){ alert("存在") } </script> </html> JQ选择器: <!DOCTYPEhtml> <htmllang="zh-cn"> <head> <metacharset="UTF-8"> <title>前端开发</title> <styletype="text/css"> div,span,p{ width:200px; height:200px; margin:5px; background:#aaa; border:#0001pxsolid; float:left; font-size:17px; } div.mini{ width:66px; height:66px; background-color:#aaa; font-size:12px; } div.hide{ display:none; } </style> </head> <body> <h1>justfortest</h1> <divclass="one"id="one"> id为one,class为one的div <divclass="mini">class为mini的div</div> </div> <divclass="one"id="two"title="test"> id为two,class为one,title为test的div <divclass="mini"title="other">class为mini,title为other的div</div> <divclass="mini"title="test">class为mini,title为test的div</div> </div> <divclass="one"> class为one的div <divclass="mini">class为mini的div</div> <divclass="mini">class为mini的div</div> <divclass="mini">class为mini的div</div> <divclass="mini"></div> </div> <divclass="one"> class为one的div <divclass="mini">class为mini的div</div> <divclass="mini">class为mini的div</div> <divclass="mini">class为mini的div</div> <divclass="mini"title="test">class为mini,title为test的div</div> </div> <divstyle="display:none;"class="one">style的display为"none"的div</div> <divclass="hide">class为"hide"的div</div> <div> 包含input的type为"hidden"的div <inputtype="hidden"name="name"> </div> <spanid="mover">正在执行动画的span</span> </body> </html> # 基本选择器 说明: 基本选择器包括元素选择器/ID选择器/类选择器/通用选择器/分组选择器. <scriptsrc="js/libs/jquery.min.js"></script> <scripttype="text/javascript"> //改变id为one的元素背景颜色为#bbffaa $("#one").css("background-color","#bbffaa") //改变class为mini的元素的背景颜色为#bbffaa $(".mini").css("background-color","#bbffaa") //改变所有div元素的背景颜色为#bbffaa $("div").css("background-color","#bbffaa") //改变所有元素的背景颜色为#bbffaa $("*").css("background-color","#bbffaa") //改变所有span和id为two的元素的背景颜色为#bbffaa $("span,#two").css("background-color","#bbffaa") </script> # 层次选择器 说明: 层次选择器包括子选择器/后代选择器/兄弟选择器/后续选择器. <scripttype="text/javascript"> //改变body里面所有div元素的背景颜色为#bbffaa $("bodydiv").css("background-color","#bbffaa") //改变body内第一层同级div元素的背景颜色为#bbffaa $("body>div").css("background-color","#bbffaa") //改变class为one的后面第一个同级div的背景颜色为#bbffaa $(".one+div").css("background-color","#bbffaa") //改变id为two后面所有div元素的背景颜色为#bbffaa $("#two~div").css("background-color","#bbffaa") </script> 扩展: 在层次选择器中子选择器和后代选择器比较常用,而兄弟选择器和后续选择器在jQuery中可以用更简单的方法代替,兄弟选择器可通过.next("selector")代替,而后续选择器可通过.nextAll("selector")代替,需要注意的是.next("selector")和.nextAll("selector")都是基于同级的,还有一个基于同级但是不论前后的兄弟元素获取方法是.siblings("selector") # 过滤选择器 说明: 过滤选择器包括基本过滤选择器/内容过滤选择器/可见性过滤选择器/属性过滤选择器/子元素过滤选择器/表单属性过滤选择器. <scripttype="text/javascript"> //基本过滤选择器 //改变第一个div元素的背景色为#bbffaa $("div:first").css("background-color","#bbffaa") //改变最后一个div元素的背景色为#bbffaa $("div:last").css("background-color","#bbffaa") //改变class不为one的元素的背景色为#bbffaa $("div:not(.one)").css("background-color","#bbffaa") //改变索引为偶数的元素的背景颜色为#bbffaa $("div:even").css("background-color","#bbffaa") //改变索引为奇数的元素的背景颜色为#bbffaa $("div:odd").css("background-color","#bbffaa") //改变索引等于某值元素的背景颜色为#bbffaa $("div:eq(0)").css("background-color","#bbffaa") //改变索引大于某值的元素的背景颜色为#bbffaa $("div:gt(0)").css("background-color","#bbffaa") //改变索引小于某值的元素的背景颜色为#bbffaa $("div:lt(1)").css("background-color","#bbffaa") //改变所有的标题元素(h1~h6)的背景颜色为#bbffaa $(":header").css("background-color","#bbffaa") //改变所有正在执行动画的元素的背景颜色为#bbffaa $(":animated").css("background-color","#bbffaa") //内容过滤选择器 //设置包含文本内容为某值的元素背景色为#bbffaa $("div:contains(为)").css("background-color","#bbffaa") //设置不包含任何子元素或文本内容的元素背景色为#bbffaa $("div:empty").css("background-color","#bbffaa") //设置包含指定选择器的元素的元素背景色为#bbffaa $("div:has(div)").css("background-color","#bbffaa") //设置包含有子元素或文本的元素的背景色为#bbffaa(和empty相反) $("div:parent").css("background-color","#bbffaa") //可见过滤选择器 //设置所有不可见元素显示 $("div:hidden").show(3000) //设置所有可见div元素背景色设置为#bbffaa $("div:visible").css("background-color","#bbffaa") //属性过滤选择器 //设置含有title属性元素的背景色为#bbffaa $("[title]").css("background-color","#bbffaa") //设置title属性值等于test的元素背景色为#bbffaa //$("[title=test]").css("background-color","#bbffaa") //设置title属性值不等于test的元素背景色为#bbffaa $("[title!=test]").css("background-color","#bbffaa") //设置title属性值以te开头的元素背景色为#bbffaa $("[title^=te]").css("background-color","#bbffaa") //设置title属性值以st结尾的元素背景色为#bbffaa $("[title$=st]").css("background-color","#bbffaa") //设置title属性值中含有es的元素背景色为#bbffaa $("[title*=es]").css("background-color","#bbffaa") //设置包含id属性且title属性值为test的元素的背景色为"#bbffaa" $("[id][title=test]").css("background-color","#bbffaaa") //子元素过滤选择器 //设置class为one的div下的第一个子元素背景色为#bbffaa $("div.one:first-child").css("background-color","#bbffaa") //设置class为one的div下的最后一个子元素背景色为#bbffaa $("div.one:last-child").css("background-color","#bbffaa") //设置class为one的div下只有一个子元素的元素背景色为#bbffaa $("div.one:only-child").css("background-color","#bbffaa") //设置每个元素下的第index个子元素或偶数或奇数元素的背景色为#bbffaa $("div.one:nth-child(odd)").css("background-color","#bbffaa") </script> 说明: 在可见性过滤选择器中,:hidden不仅包括样式属性display:none的元素,也包括文本隐藏域<input type="hidden">和visible:hidden之类的元素,在子元素过滤选择器中,:nth-child将为每一个符合条件的父元素匹配子元素,但需要注意的是索引是从1开始,而:eq的索引从0开始,同理:first和:first-child,:last和:last-child类似 # 表单选择器 说明: 表单选择器包括表单对象属性过滤选择器和扩展表单过滤选择器. <scripttype="text/javascript"> //表单对象属性过滤选择器 //设置id为form1的表单下的可用元素的值为你改变了~ $("#form1input:enabled").val("你改变了~") //设置id为form1的表单下的不可用元素的值为你改变了~ $("#form1input:disabled").val("你改变了~") //获取多选框中选中的个数并显示在div中 $("div:first").html($("input:checked").length+"个被选中!").css({ "color":"red", "font-weight":"border" }) //获取多选下拉列表中被选中的个数并显示在div中 $("div:eq(1)").html($("select:first[selected=selected]").length+"个被选中").css({ "color":"red", "font-weight":"border" }) //获取单选下拉框中被选中的值并显示在div中 $("div:last").html($("select:last[selected=selected]").text()+"被选中").css({ "color":"red", "font-weight":"border" }) //表单选择器 //:input可匹配<input>/<textarea>/<select>/<button>元素 $(":input").css("border","solid1pxred") //:text可匹配<input>所有的单行文本框 $(":text").css("border","solid1pxred") //:password可匹配所有的密码框 $(":password").css("border","solid1pxred") //:radio可匹配所有的单选框 $(":radio").css("border","solid1pxred") //:checkbox可匹配所有的多选框 $(":checkbox").css("border","solid1pxred") //:submit可匹配所有的提交按钮 $(":submit").css("border","solid1pxred") //:p_w_picpath可匹配所有的图像按钮 $(":p_w_picpath").css("border","solid1pxred") //:reset可匹配所有的重置按钮 $(":reset").css("border","solid1pxred") //:button可匹配所有的按钮 $(":button").css("border","solid1pxred") //:file可匹配所有的文件上传域 $(":file").css("border","solid1pxred") //:hidden选取所有不可见元素 $(":hidden").css("border","solid1pxred") </script> 最佳实践: 1. 给网页中的所有的<p>元素添加点击事件,点击后弹出元素内的文本内容? <scripttype="text/javascript"> $("p").click(function(event){ alert($(this).text()) }); </script> 2. 使一个特定的表格隔行换色? <scripttype="text/javascript"> $("tabletr:odd").css("background-color","#bbffaa") </script> 3. 对多选框进行操作,输出选中的个数? <scripttype="text/javascript"> $("input[name=newselector]:checkbox").click(function(event){ $("div>span").html( ""+$("input[name=newselector]:checked").length+"个选项被勾选!" ).css("color","red") }) </script> 4. 如上要求用户进入页面时,品牌列表默认精简显示(从第5条开始隐藏后面的品牌,除了最后一条),用户单机"显示所有品牌"显示全部品牌同时高亮显示推荐的品牌,且按钮里的文字也换成"精简显示品牌",再次单击"精简显示品牌"恢复初始状态? <!DOCTYPEhtml> <htmllang="zh-cn"> <head> <metacharset="UTF-8"> <title>前端开发</title> <styletype="text/css"> *{margin:0;padding:0;} body{font-size:12px;text-align:center;} a{color:#04D;text-decoration:none;} a:hover{color:#F50;text-decoration:underline;} .SubCategoryBox{width:600px;margin:0auto;text-align:center;margin-top:40px;} .SubCategoryBoxul{list-style:none;} .SubCategoryBoxulli{display:block;float:left;width:200px;line-height:20px;} .showmore{clear:both;text-align:center;padding-top:10px;} .showmorea{display:block;width:120px;margin:0auto;line-height:24px;border:1pxsolid#AAA;} .showmoreaspan{padding-left:15px;background:url(img/down.gif)no-repeat00;} .promoteda{color:#F50;} </style> </head> <body> <divclass="SubCategoryBox"> <ul> <li><ahref="#">佳能</a><i>(30440)</i></li> <li><ahref="#">索尼</a><i>(27220)</i></li> <li><ahref="#">三星</a><i>(20808)</i></li> <li><ahref="#">尼康</a><i>(17821)</i></li> <li><ahref="#">松下</a><i>(12289)</i></li> <li><ahref="#">卡西欧</a><i>(8242)</i></li> <li><ahref="#">富士</a><i>(14894)</i></li> <li><ahref="#">柯达</a><i>(9520)</i></li> <li><ahref="#">宾得</a><i>(2195)</i></li> <li><ahref="#">理光</a><i>(4114)</i></li> <li><ahref="#">奥林巴斯</a><i>(12205)</i></li> <li><ahref="#">明基</a><i>(1466)</i></li> <li><ahref="#">爱国者</a><i>(3091)</i></li> <li><ahref="#">其它品牌相机</a><i>(7275)</i></li> </ul> <divclass="showmore"> <ahref="more.html"><span>显示全部品牌</span></a> </div> </div> </body> <scriptsrc="js/libs/jquery.min.js"></script> <scripttype="text/javascript"> /* 1.默认进去页面,从第5条开始隐藏后面的品牌(最后一条"其它品牌相机"除外) 2.当用户点击"显示全部品牌"按钮时 >显示隐藏品牌 >"显示全部品牌"按钮文本切换成"精简显示品牌" >高亮推荐品牌 3.当用户点击"精简显示品牌"按钮时 >从第5条开始隐藏后面的品牌(最后一条"其它品牌相机"除外) >"精简显示品牌"按钮文本切换成"显示全部品牌" >去掉高亮显示的推荐品牌 */ $(function(){ var$moreItems=$(".SubCategoryBox>ul>li:gt(5):not(:last)") var$moreBtn=$(".showmore>a") var$highlightItmes=$("ul>li").filter(":contains(佳能),:contains(索尼)") $moreItems.hide() $moreBtn.toggle(function(){ $moreItems.show() $(".showmore>a>span").css("background","url(img/up.gif)no-repeat00").text("精简显示品牌") $highlightItmes.addClass("promoted") },function(){ $moreItems.hide() $(".showmore>a>span").css("background","url(img/down.gif)no-repeat00").text("显示所有品牌") $highlightItmes.removeClass("promoted") }) }) </script> </html> 方法 说明 .show(speed,callback) 显示隐藏的匹配元素,支持设置显示速度以及回调函数 .css(name) 获取所有匹配元素的样式 .css(name, value) 设置所有匹配元素的单个样式 .css(name,function(index,value)) 设置所有匹配元素的单个样式,index为选择器index的位置,value为当前样式值 .css({k: v, k: v}) 设置所有匹配元素的多个样式 .filter(selector) 以单个过滤器过滤对应的集合 .filter(expr) 以多个过滤器过滤对应的集合,过滤器之间使用,隔开 .filter(func) 以函数过滤对应的集合,函数接收选择器index的值 .addClass(class) 为指定元素添加class .removeClass(class) 为指定元素删除class .toggle(func1,func2, func3....) 用于绑定两个或多个事件处理函数,以响应被选元素的轮流的.click事件

优秀的个人博客,低调大师

Spark入门到精通视频学习资料--第六章:Machine Learning on Spark(1讲)

MLlibis Apache Spark's scalable machine learning library.(如下图所示) 很明显:MLlib 是一个广泛的机器学习的libray。 其定为基于Apache Spark的四大子组件,并且权重极大。在目前而言,Spark 0.9.1 MLLIB 包含了如下的算法: 1 依赖 2 二元分类 3 线性回归 4 聚类 5 协同过滤 6 隐性反馈 vs 显性反馈 7 梯度下降基础算法 8二元分类 9 线性回归 10 聚类 11 协同过滤 12 用Java调用MLLib 13 用Python调用MLLib 14二元分类 15 协同过滤 详细介绍请参考视频文件: 《Machine Learning on Spark.mp4》 链接: http://pan.baidu.com/s/1bnfI3Zx 密码: rqrv 《Machine Learning on Spark.pdf》 链接: http://pan.baidu.com/s/1kT00VmZ 密码: 6b68 ========================================================== 申明:视频资料已过期,建议不要再下载了。 ==========================================================

优秀的个人博客,低调大师

Spark入门到精通视频学习资料--第五章:Shark介绍与使用(2讲)

熟悉Hadoop的应该就知道HBase和Hive,如果了解这两个组件,那么对于Shark就不会那么陌生了,也就比较容易上手了。 Shark基本上就是在Spark的框架基础上提供和Hive一样的HiveQL命令接口,为了最大程度的保持和Hive的兼容性,Shark使用了 Hive的API来实现query Parsing和 Logic Plan generation,最后的PhysicalPlan execution阶段用Spark代替Hadoop MapReduce。通过配置Shark参数,Shark可以自动在内存中缓存特定的RDD,实现数据重用,进而加快特定数据集的检索。同时,Shark 通过UDF用户自定义函数实现特定的数据分析学习算法,使得SQL数据查询和运算分析能结合在一起,最大化RDD的重复使用。 直接上视频链接吧: Shark原理与实践(上).mp4 链接: http://pan.baidu.com/s/1qWBgcHm 密码: ufqv Shark原理与实践(下).mp4 链接: http://pan.baidu.com/s/1dDkycqX 密码: l92p 《Shark原理与实践.pdf》 链接: http://pan.baidu.com/s/1gd2AQmZ 密码: r2f3 ========================================================== 申明:视频资料已过期,建议不要再下载了。 ==========================================================

优秀的个人博客,低调大师

软件授权管理平台 v1.0.3 发布,快速集成到任何编程语言开发的软件产品

软件授权管理系统:任何编程语言编写的软件产品都可以通过SDK或者直接编码集成离线或在线授权模块。 ✨ 新增功能 授权管理功能与限制设置:增加授权管理功能与限制设置,支持动态配置和多语言文本,优化许可证表单交互体验 添加仪表盘背景图片:优化主题切换按钮和样式,调整统计卡片暗模式背景 增加客户端对接的go语言SDK 官方首页:License Manager

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册