首页 文章 精选 留言 我的

精选列表

搜索[学习],共10000篇文章
优秀的个人博客,低调大师

《从零开始学Swift》学习笔记(Day 22)——闭包那些事儿!

我给Swift中的闭包一个定义:闭包是自包含的匿名函数代码块,可以作为表达式、函数参数和函数返回值,闭包表达式的运算结果是一种函数类型。 Swift中的闭包类似于Objective-C中的代码块、Java中的匿名内部类。 使用闭包表达式 Swift中的闭包表达式很灵活,其标准语法格式如下: { (参数列表) ->返回值类型in 语句组 } 其中,参数列表与函数中的参数列表形式一样,返回值类型类似于函数中的返回值类型,但不同的是后面有in关键字。 Swift提供了多种闭包简化写法,我来介绍下面几种不同形式: 1、类型推断简化 类型推断是Swift的强项,Swift可以根据上下文环境推断出参数类型和返回值类型。以下代码是标准形式的闭包: 1 2 3 {(a:Int,b:Int)->Intin return a+b } Swift能推断出参数a和b是Int类型,返回值也是Int类型。简化形式如下: 1 2 {(a,b)in return a+b} {a,bin return a+b} //参数列表括号也可以省略 2、隐藏return关键字 在闭包内部语句组只有一条语句,如return a + b等,那么这种语句都是返回语句。前面的关键字return可以省略,省略形式如下: {a, b in a + b } 使用这种简化方式修改后的示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 funccalculate(opr:String)->(Int,Int)->Int{ varresult:(Int,Int)->Int switch (opr){ case "+" : result={a,bina+b} //return关键字省略了 default : result={a,bina-b} //return关键字省略了 } return result } 省略的前提是闭包中只有一条return语句。 3、省略参数名称 Swift提供了参数名省略功能,我们可以用$0、$1、$2…来指定闭包中参数,$0指代第一个参数,$1指代第二个参数,$2指代第三个参数,以此类推$n+1指代第n个参数。 使用参数名省略功能,在闭包中必须省略参数列表定义,Swift能够推断出这些缩写参数的类型。参数列表省略了,in关键字也需要省略。参数名省略之后如下所示: {$0 + $1} 使用参数名省略后的示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 funccalculate(opr:String)->(Int,Int)->Int{ varresult:(Int,Int)->Int switch (opr){ case "+" : result={$ 0 +$ 1 } //采用了参数名省略 default : result={$ 0 -$ 1 } //采用了参数名省略 } return result } letf1:(Int,Int)->Int=calculate( "+" ) print( "10+5=\(f1(10,5))" ) letf2:(Int,Int)->Int=calculate( "-" ) print( "10-5=\(f2(10,5))" ) 4、使用闭包返回值 闭包表达本质上是函数类型,是有返回值的,我们可以直接在表达式中使用闭包的返回值。重新修改add和sub闭包,示例代码如下: 1 2 3 4 5 letc1:Int={(a:Int,b:Int)->Intin return a+b }( 10 , 5 ) print( "10+5=\(c1)" ) 解释:给c1赋值,后面是一个闭包表达式。但是闭包表达式不能直接赋值给c1,因为c1是Int类型,需要闭包的返回值。这就需要在闭包结尾的大括号后面接一对小括号(10,5),通过小括号(10,5)为闭包传递参数。 本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1746406,如需转载请自行联系原作者

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

一脸懵逼学习HBase的搭建(注意HBase的版本)

1:Hdfs分布式文件系统存的文件,文件存储。 2:Hbase是存储的数据,海量数据存储,作用是缓存的数据,将缓存的数据满后写入到Hdfs中。 3:hbase集群中的角色: (1)、一个或者多个主节点,Hmaster; (2)、多个从节点,HregionServer; 1:由于HBase依赖hdfs,所以下载的时候注意HBase的版本: 注:我使用的是hadoop2.4版本的,所以HBase选择支持2版本的:hbase-0.96.2-hadoop2-bin.tar.gz 2:上传hbase安装包,上传到一台机器即可: 建议:自己规划一下自己的机器,最好是独立的,再搞两台机器最好, 如果不想搞更多的机器,这里放到启动yarn进程的机器上: 如我的slaver5,slaver6(master节点,slaver1节点,slaver2节点安装Region Server,slaver5,slaver6安装Master ), 这样负载比较好点,自己电脑吃得消; 过程省略,上传结果如下所示; 2:解压缩刚才上传的hbase-0.96.2-hadoop2-bin.tar.gz: [root@slaver5 hadoop]# tar -zxvf hbase-0.96.2-hadoop2-bin.tar.gz 3:配置HBase集群,要修改3个文件(首先Zookeeper集群已经安装好了哟): 注意:要把hadoop的hdfs-site.xml和core-site.xml 放到HBase/conf下; [root@slaver5 conf]# cp /home/hadoop/hadoop-2.4.1/etc/hadoop/{core-site.xml,hdfs-site.xml} ./ 开始修改配置文件: 3.1:修改hbase-env.sh: 修改如下所示: //自己的jdk路径 export JAVA_HOME=/usr/java/jdk1.7.0_55//hadoop配置文件的位置export HBASE_CLASSPATH=/home/hadoop/hadoop-2.4.1/conf //告诉hbase使用外部的zk,export HBASE_MANAGES_ZK=true #如果使用独立安装的zookeeper这个地方就是false export HBASE_MANAGES_ZK=false 演示操作如下所示: 可以使用命令查看jdk的路径: [root@slaver6 hadoop]# echo $JAVA_HOME/home/hadoop/jdk1.7.0_65[root@slaver6 hadoop]# 按ESC进入命令行模式: 搜索内容如下所示: 改成如下内容,使用外部的Zookeeper管理HBase: 3.2:修改hbase-site.xml,vim hbase-site.xml: 修改内容如下所示: <configuration> <!-- 指定hbase在HDFS上存储的路径 --> <property> <name>hbase.rootdir</name> <value>hdfs://ns1/hbase</value> </property> <!-- 指定hbase是分布式的 --> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- 指定zk的地址,多个用“,”分割 --> <property> <name>hbase.zookeeper.quorum</name> <value>master:2181,slaver1:2181,slaver2:2181</value> </property> </configuration> 配置或如下所示,下面的配置仅仅做一下参考,不是此篇博客配置的: 1 <configuration> 2 <property> 3 <!--hbasemaster的主机和端口--> 4 <name>hbase.master</name> 5 <value>master1:60000</value> 6 </property> 7 <property> 8 <!--时间同步允许的时间差--> 9 <name>hbase.master.maxclockskew</name> 10 <value>180000</value> 11 </property> 12 <property> 13 <name>hbase.rootdir</name> 14 <!--hbase共享目录,持久化hbase数据--> 15 <value>hdfs://hadoop-cluster1/hbase</value> 16 </property> 17 <property> 18 <!--是否分布式运行,false即为单机--> 19 <name>hbase.cluster.distributed</name> 20 <value>true</value> 21 </property> 22 <property> 23 <!--zookeeper地址--> 24 <name>hbase.zookeeper.quorum</name> 25 <value>slave1, slave2,slave3</value> 26 </property> 27 <property> 28 <!--zookeeper配置信息快照的位置--> 29 <name>hbase.zookeeper.property.dataDir</name> 30 <value>/home/hadoop/hbase/tmp/zookeeper</value> 31 </property> 32 </configuration> 修改操作如下所示: [root@slaver5 conf]# vim hbase-site.xml 演示操作如下所示: 3.3:修改regionservers,vim regionservers: 因为master节点,slaver1节点,slaver2节点安装Region Server,所以这里配置一下,slaver5,slaver6安装Master就可以找到Region Server了; 4:然后将部署好的HBase传到其他几个节点上面(拷贝里面有html文档,拷贝起来有点慢,可以删除doc文档): 注:将配置好的HBase拷贝到每一个节点并同步时间。 [root@slaver5 hadoop]# scp -r hbase-0.96.2-hadoop2/ master:/home/hadoop/[root@slaver5 hadoop]# scp -r hbase-0.96.2-hadoop2/ slaver1:/home/hadoop/[root@slaver5 hadoop]# scp -r hbase-0.96.2-hadoop2/ slaver2:/home/hadoop/[root@slaver5 hadoop]# scp -r hbase-0.96.2-hadoop2/ slaver6:/home/hadoop/ 5:现在可以启动HBase了,不过启动HBase之前需要将HDFS启动起来(hdfs启动过程省略,之前启动好多次了),因为HBase在hdfs下面创建一个目录叫做hbase,自己配置的: 注:如果浏览器访问不了,记得关防火墙:service iptables stop,service iptables status; 启动所有的hbase 1:分别启动zk ./zkServer.sh start 2:启动hbase集群 start-dfs.sh 3:启动hbase,在主节点上运行: start-hbase.sh 启动完hdfs之后启动HBase: 可以查看这几个节点的进程的启动情况: 现在呢,一个HBase已经启动起来了,如果想启动两个HBase,第一个HBase启动不会自动启动第二个HBase,所以现在手动启动第二个HBase,操作如下所示: 注:为保证集群的可靠性,要启动多个HMaster 6:通过浏览器访问hbase管理页面 192.168.3.134:60010 可以看到三台master节点,slaver1节点,slaver2节点安装Region Server;slaver6是安装的备份的Master; 7:自己可以测试一下,杀死一个HMaster(slaver5节点的),另一个HMaster立马顶上去了,很强悍,依赖着Zookeeper,爽到爆啊。(kill -9 进程号,-9是强制杀死): 1 添加Hbase节点,删除的话直接kill: 2 [root@slaver6 hadoop]# hbase-daemon.sh start regionserver 8:使用HBase的命令行客户端操作一下HBase(测试使用,真实环境使用Java操作): 1 进入hbase的shell:hbase shell 2 退出hbase的shell:quit 3 页面:http://ip地址:60010/ 由于HBase是非关系型数据库,可以查看一下help看看都有啥命令,然后再操作: 可以查看一些基本的命令: HBase的一些基本命令(如果在hbase shell客户端,打错了,可按ctrl+BackSpace进行删除): #创建HBase数据表create 'myTables',{NAME => 'base_info',VERSIONS => 3},{NAME => 'extra_info'} hbase(main):016:0> create 'user','info01','info02' #查看有什么表list#查看表结构describe 'myTables'#禁用表disable 'myTables'#删除表,删除之前要先禁用表drop 'myTables'#插入数据,插入一个表的一行的一列的一个值,最后一个字段不带#不带分号#put '表名称','行','base_info/extra_info:列名称','列值'put 'myTables','0001','base_info:name','张三'put 'myTables','0001','base_info:age','22'put 'myTables','0001','base_info:sex','男'put 'myTables','0001','extra_info:addr','河南省'#查询数据,查询某一行。get 'myTables','0001'get 'myTables','0001',{COLUMN => 'base_info:name',VERSION => 10}scan 'myTables'#修改值操作,默认不显示历史值put 'myTables','0001','base_info:name','李四' 可以去Zookeeper查看hbase的一些信息: 1 [root@master sbin]# cd /home/hadoop/zookeeper-3.4.5/ 2 [root@master zookeeper-3.4.5]# ls 3 bin conf dist-maven ivy.xml NOTICE.txt recipes zookeeper-3.4.5.jar.asc 4 build.xml contrib docs lib README_packaging.txt src zookeeper-3.4.5.jar.md5 5 CHANGES.txt data ivysettings.xml LICENSE.txt README.txt zookeeper-3.4.5.jar zookeeper-3.4.5.jar.sha1 6 [root@master zookeeper-3.4.5]# cd bin/ 7 [root@master bin]# ls 8 README.txt zkCleanup.sh zkCli.cmd zkCli.sh zkEnv.cmd zkEnv.sh zkServer.cmd zkServer.sh zookeeper.out 9 [root@master bin]# ./zkCli.sh 10 Connecting to localhost:2181 11 2017-12-18 17:08:22,357 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.5-1392090, built on 09/30/2012 17:52 GMT 12 2017-12-18 17:08:22,383 [myid:] - INFO [main:Environment@100] - Client environment:host.name=master 13 2017-12-18 17:08:22,383 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.7.0_65 14 2017-12-18 17:08:22,383 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 15 2017-12-18 17:08:22,385 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/home/hadoop/jdk1.7.0_65/jre 16 2017-12-18 17:08:22,385 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/home/hadoop/zookeeper-3.4.5/bin/../build/classes:/home/hadoop/zookeeper-3.4.5/bin/../build/lib/*.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/slf4j-api-1.6.1.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/netty-3.2.2.Final.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/log4j-1.2.15.jar:/home/hadoop/zookeeper-3.4.5/bin/../lib/jline-0.9.94.jar:/home/hadoop/zookeeper-3.4.5/bin/../zookeeper-3.4.5.jar:/home/hadoop/zookeeper-3.4.5/bin/../src/java/lib/*.jar:/home/hadoop/zookeeper-3.4.5/bin/../conf: 17 2017-12-18 17:08:22,385 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/i386:/lib:/usr/lib 18 2017-12-18 17:08:22,386 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp 19 2017-12-18 17:08:22,387 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA> 20 2017-12-18 17:08:22,396 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux 21 2017-12-18 17:08:22,397 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=i386 22 2017-12-18 17:08:22,397 [myid:] - INFO [main:Environment@100] - Client environment:os.version=2.6.32-358.el6.i686 23 2017-12-18 17:08:22,398 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root 24 2017-12-18 17:08:22,428 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root 25 2017-12-18 17:08:22,470 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/home/hadoop/zookeeper-3.4.5/bin 26 2017-12-18 17:08:22,472 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@1238fa5 27 Welcome to ZooKeeper! 28 2017-12-18 17:08:22,994 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@966] - Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (unknown error) 29 JLine support is enabled 30 2017-12-18 17:08:23,281 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@849] - Socket connection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session 31 2017-12-18 17:08:24,145 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid = 0x16068706a9b0008, negotiated timeout = 30000 32 33 WATCHER:: 34 35 WatchedEvent state:SyncConnected type:None path:null 36 [zk: localhost:2181(CONNECTED) 0] ls / 37 [hadoop-ha, hbase, admin, zookeeper, consumers, config, 20171011, storm, yarn-leader-election, brokers, controller_epoch] 38 [zk: localhost:2181(CONNECTED) 3] get /hbase 39 40 cZxid = 0xc00000007 41 ctime = Wed Oct 25 17:29:19 CST 2017 42 mZxid = 0xc00000007 43 mtime = Wed Oct 25 17:29:19 CST 2017 44 pZxid = 0xf0000004a 45 cversion = 23 46 dataVersion = 0 47 aclVersion = 0 48 ephemeralOwner = 0x0 49 dataLength = 0 50 numChildren = 15 51 [zk: localhost:2181(CONNECTED) 4] ls / 52 [hadoop-ha, hbase, admin, zookeeper, consumers, config, 20171011, storm, yarn-leader-election, brokers, controller_epoch] 53 [zk: localhost:2181(CONNECTED) 5] ls /hbase 54 [meta-region-server, backup-masters, region-in-transition, draining, table, table-lock, running, master, namespace, hbaseid, online-snapshot, replication, recovering-regions, splitWAL, rs] 55 [zk: localhost:2181(CONNECTED) 6] ls /hbase/table 56 [hbase:meta, hbase:namespace, user] 57 [zk: localhost:2181(CONNECTED) 7] 待续......

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

ios开发学习-弹出视图(Popup View) 效果源码分享--系列教程4

Popup TextView 介绍:实现弹出文字输入框的效果。类似Facebook应用中弹出的状态输入框一样。http://ios.itmdc.com/thread-1937-1-11.htmlPop List View 介绍:实现一个弹出视图,弹出的视图上加上列表。可以取代UIActionSheet,使界面更加灵活美观。视图弹出和消失的动画都非常棒。http://ios.itmdc.com/thread-1941-1-11.htmlBlock Alerts and ActionSheets 介绍:实现各种各样的alert和 UIActionSheet和UIAlertView效果。比如,在UIAlertView中加入文字输入框,同时显示UIActionSheet和UIAlertView,显示多个UIAlertView等等。并且UIAlertView的出现和消失的动画都比默认的效果好很多(有一种弹簧的效果)。http://ios.itmdc.com/thread-1946-1-11.htmlNotification Manager 介绍:在窗口顶端弹出自定义的提示视图(notification View)。弹出的notification view可以自动隐藏。如果有多个notification view,则进行排队,按顺序显示。可用于显示当前app的状态,用户操作的提示、提醒通知等等。这种notification view比UIAlertView来得友好。http://ios.itmdc.com/thread-1948-1-11.htmlInfo Bar 介绍:用于当后台有任务运行时,或者用户进行了某些耗时较长的操作时,用于给用户显示提示信息。显示的提示信息位置位于tab bar的上方,自动显示,并且自动隐藏。提示信息的显示是异步的,也就是不会导致程序停滞。在效果图中,“Action From View 1”便是显示的提示信息,可以自动隐藏。http://ios.itmdc.com/thread-1951-1-11.htmlUITextField within Alert Prompt 介绍:在弹出对话框(Alert dialogue)中加入登录框。即在UIAlertView中加入文字输入框(UITextField)。http://ios.itmdc.com/thread-1954-1-11.htmlHidden Option Panel 介绍:实现可以隐藏的面板。这个面板一般位于窗口的下方。起初只是一个箭头按钮,当用户点击箭头按钮时,面板会向上缓慢滑动出来。http://ios.itmdc.com/thread-1957-1-11.htmlTableView Within Alert 介绍:在弹出对话框(Alert dialogue)中加入列表(UITableView)。http://ios.itmdc.com/thread-1959-1-11.htmlPopTip View 介绍:实现各种弹出消息/tips的效果。点击任意控件,按钮,导航条按钮,工具条按钮(UIBarButtonItem),都会弹出消息气泡。弹出的气泡会自动定位在相应的按钮旁边,并且有小箭头指向这个按钮。气泡的文字和颜色可以自定义。http://ios.itmdc.com/thread-1962-1-11.html 本文转自qianqianlianmeng博客园博客,原文链接:http://www.cnblogs.com/aimeng/archive/2012/12/07/2807900.html ,如需转载请自行联系原作者

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

Hadoop HDFS概念学习系列之HDFS的体系结构(十七)

如下图所示,HDFS采用Master/Slave架构对文件系统进行管理。一个HDFS集群是由一个NameNode和一定数目的DataNode组成的。NameNode是一个中心服务器,负责管理文件系统的名字空间(Namespace )及客户端对文件的访问。集群中的DataNode一般是一个节点运行一个DataNode进程,负责管理它所在节点上的存储。HDFS展示了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成了一个或多个数据块,这些块存储在一组DataNode上。NameNode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体DataNode节点的映射。DataNode负责处理文件系统客户端的读/写请求。在NameNode的统一调度下进行数据块的创建、删除和复制。1、副本存放与读取策略 副本的存放是HDFS可靠性和性能的关键,优化的副木存放策略也正是HDFS区分于其他大部分分布式文件系统的重要特性。HDFS采用一种称为机架感知( rack-aware)的策略来改进数据的可靠性、可用性和网络带宽的利用率。大型HDFS实例一般运行在跨越多个机架的计算机组成的集群上,不同机架上的两台机器之间的通信需要经过交换机,这样会增加数据传输的成本。在大多数情况下,同一个机架内的两台机器间的带宽会比不同机架的两台机器问的带宽大。 一方面,通过一个机架感知的过程,NameNode可以确定每个DataNode所属的机架ID。日前HDFS采用的策略就是将副本存放在不同的机架上,这样可以有效防止当整个机架失效时数据的丢失,井且允许读数据的时候充分利用多个机架的带宽。这种策略设置可以将副本均匀地分布在集群中,有利于在组件失效情况下的负载均衡。但是,因为这种策略的一个写操作需要传输数据块到多个机架,这增加了写操作的成本。 举例来看,在大多数情况下,副本系数是3 , HnFs的存放策略是将一个副本存放在本地机架的节点上,另一个副本放在同一机架的另一个节点上,最后一个副本放在不同机架的节点上。这种策略减少了机架间的数据传输,提高了写操作的效率。机架的错误远比节点的错误少,所以这个策略不会影响数据的可靠性和可用性。同时,因为数据块只放在两个不同的机架上,所以这个策略减少了读取数据时需要的网络传输总带宽。这一策略在不损害数据可靠性和读取性能的情祝下改进了写的性能。 另一方面,在读取数据时,为了减少整体的带宽消耗和降低整体的带宽延时,HDFS会尽量让读取程序读取离客户端最近的副本。如果在读取程序的同一个机架上有一个副本,那么就读取该副本。如果一个HDFS集群跨越了多个数据中心,那么客户端也将首先读取本地数据中心的副本。 2、安全模式 NameNode启动后会进入一个称为安全模式的特殊状态。处于安全模式的NameNode不会进行数据块的复制的。NameNode从所有的DataNode上接收心跳信号和块状态报告。块状态报告包括了某个DataNode所有的数据块列表。每个数据块都有一个指定的最小副本数。当NameNode检测确认某个数据块的副本数目达到最小值时,那么该数据块就会被认为是副本安全的;在一定百分比(这个参数可配置)的数据块被NameNode检测确认安全之后(加上一个额外的30秒等待时间),NameNode将退出安全模式状态。接下来它会确定还有哪些数据块的副本没有达到指定数目,并将这些数据块复制到其他DataNode上。 3、文件安全 NameNode的重要性是显而易见的,没有它客户端将无法获得文件块的位置。在实际应用中,如果集群的NameNode出现故障,就意味着整个文件系统中全部的文件会丢失,因为我们无法再通过DataNode上的文件块来重构文件。下面简单介绍Hadoop是采用哪种机制来确保NameNode的安全的。 第一种方法是,备份NameNade上持久化存储的元数据文件,然后将其转储到其他文件系统中,这种转储是同步的、原子的操作。通常的实现方法是,将NameNode中的元数据转储到远程的NFS文件系统中。 第二种方法是,系统中同步运行一个Secondary NameNode(二级NameNade)。 这个节点的主要作用就是周期性地合并编辑日志中的命名空间镜像,以避免编辑日志过大。Secondary NameNode的运行通常需要大量的CPU和内存去做合并操作,这就要求其运行在一台单独的机器上。在这台机器上会存储合并过的命名空间镜像,这些镜像文件会在NameNode宕机后做替补使用,以便最大限度地减少文件的损失。但是,需要注意的是,Secondary NameNod。的同步备份总会滞后于NameNade,所以损失是必然的。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5134302.html,如需转载请自行联系原作者

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

独家 | 一文读懂自然语言处理NLP(附学习资料)

前言 自然语言处理是文本挖掘的研究领域之一,是人工智能和语言学领域的分支学科。在此领域中探讨如何处理及运用自然语言。 对于自然语言处理的发展历程,可以从哲学中的经验主义和理性主义说起。基于统计的自然语言处理是哲学中的经验主义,基于规则的自然语言处理是哲学中的理性主义。在哲学领域中经验主义与理性主义的斗争一直是此消彼长,这种矛盾与斗争也反映在具体科学上,如自然语言处理。 早期的自然语言处理具有鲜明的经验主义色彩。如1913年马尔科夫提出马尔科夫随机过程与马尔科夫模型的基础就是“手工查频”,具体说就是统计了《欧根·奥涅金》长诗中元音与辅音出现的频度;1948年香农把离散马尔科夫的概率模型应用于语言的自动机,同时采用手工方法统计英语字母的频率。 然而这种经

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

ios开发学习-弹出视图(Popup View) 效果源码分享--系列教程2

Drop Down Menu 介绍:实现弹出下拉菜单效果。当点击菜单某个选项时,菜单又会收缩隐藏回去。http://ios.itmdc.com/thread-1881-1-12.html Codex Popup List 介绍:利用WEPopup类库实现弹出列表视图效果。弹出的视图会自动定位在相应的按钮旁边,并且有小箭头指向这个按钮。可以在弹出列表视图上添加文字、图片等。仅支持ARC以及iOS 5.0以上。http://ios.itmdc.com/thread-1882-1-12.html Push Back Animation 介绍:实现新视图弹出时,之前的视图变淡、缩小(即后退为背景视图)的动画效果。http://ios.itmdc.com/thread-1885-1-12.html NotiView 介绍:实现弹出消息视图效果。弹出的视图从界面上方进入,然后自动从界面右方出去。可以自定义弹出视图的icon,颜色,文字,运动方向等等。http://ios.itmdc.com/thread-1887-1-12.html CMActionSheet 介绍:实现特殊效果的UIActionSheet。ActionSheet弹出到最后会有一种弹跳(Bounce)的效果。http://ios.itmdc.com/thread-1888-1-12.html TSPopover 介绍:实现各种弹出视图效果。弹出的视图会自动定位在相应的按钮旁边,并且有小箭头指向这个按钮。可以在弹出视图上添加按钮、列表等控件。只支持iOS5.0,只支持ARC模式。http://ios.itmdc.com/thread-1889-1-12.html XYAlertView 介绍:自定义AlertView/LoadingView,包括背景颜色、文字等等,支持队列显示,即可以连续显示多个AlertView。http://ios.itmdc.com/thread-1892-1-12.html JSNotifier 介绍:实现在界面底部弹出消息通知框(Notification View),弹出的消息框可以加载png图片和Activity Indicatior,并且可以自动隐藏http://ios.itmdc.com/thread-1893-1-12.html 本文转自qianqianlianmeng博客园博客,原文链接:http://www.cnblogs.com/aimeng/archive/2012/12/09/2810024.html ,如需转载请自行联系原作者

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

【swift学习笔记】一.页面转跳的条件判断和传值

在转跳页面之前我们可能会判断一下是否有输入正确的数据,如下图所示,如果没有数据输入则弹出提示,不进行转跳。 一:页面转跳 1.第一个页面的上放上一个Label一个textfield和一个按钮 2.在第二个窗体上放两个label和一个按钮,并指定一个ViewController 3.创建Segue连接两个窗体,打开模式选择modal,并给Segue命名为"openView" 3.页面1 中创建输入文本框的引用和按钮的点击Action 在Action里判断文本是否有数据,如果没有则弹出提示,如果有则打开新窗体 @IBAction func passNameToView(sender: AnyObject) { guard let text = teName.text where !text.isEmpty else { let title = "Warning" let message = "please enter name!" let okText = "Ok" let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) let okButton = UIAlertAction(title: okText, style: .Cancel, handler: nil) alert.addAction(okButton) presentViewController(alert, animated: true, completion: nil) return; } self.performSegueWithIdentifier("openView", sender: self) // or if let text = teName.text where !text.isEmpty } 这样就可以打开新窗体了。 4.从新窗体返回原窗体 页面2中的按钮建立一个Action代码如下 @IBAction func backToParent(sender: AnyObject) { self.dismissViewControllerAnimated(true, completion: nil) } 二.页面传值 1.在页面2中声明一个字符串变量用于接收传过来的信息和一个lable的引用,在加载完窗体后显示在label中 @IBOutlet weak var receiveName: UILabel! var receivedStr: String = "" override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. receiveName.text = receivedStr } 2.页面1 重写prepareForSegue方法 把值输入的值传递给页面2 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "openView" { if let secondView = segue.destinationViewController as? SecondViewController { secondView.receivedStr = teName.text! } } } ok整个过程完毕。 完整代码:判断条件页面转跳.zip 本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/p/5523533.html,如需转载请自行联系原作者

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

ios开发学习-弹出视图(Popup View) 效果源码分享--系列教程1

Informatic Toolbar 介绍:实现弹出工具条(tool bar),并且在工具条上加上其他控件。实现类似iPhone自带邮件app发送邮件时,屏幕底部弹出的tool bar,显示邮件发送状态的效果。http://ios.itmdc.com/thread-1868-1-1.htmlDepth View 介绍:弹出新视图之后,给弹出视图遮住的背景视图加上模糊和阴暗效果,并且缩小背景视图,从而造成一种具有三维景深的视图叠加效果。 http://ios.itmdc.com/thread-1871-1-1.html ios开发/iphone开发源码分享之icon sheet 介绍:实现可自定义的Action Sheet。在Action Sheet中加入按钮、ScrollView等控件。 推荐理由:UI很简洁漂亮,代码也很简洁。http://ios.itmdc.com/thread-1872-1-1.htmlBlur ModalView 介绍:给弹出视图遮住的背景视图加上模糊效果。一般来说,弹出视图所遮住的背景主视图会加上阴暗效果,从而突出显示弹出视图。这份代码能够为背景视图加上模糊的效果。http://ios.itmdc.com/thread-1873-1-1.htmlKGModal 介绍:实现自定义的弹出视图,视图弹出和消失的动画效果都不错。弹出的视图会自动根据容器视图(container)调整自身的大小以及位置,从而使弹出的视图始终位于container的中间。http://ios.itmdc.com/thread-1874-1-1.htmlPopup Window 介绍:实现弹出视图效果,视图弹出和消失的动作是都是翻转的形式。Demo中的弹出视图中加入了HTML内容,可点击链接载入新的页面。http://ios.itmdc.com/thread-1875-1-1.html自定义AlertView 介绍:实现自定义UIAlertView。继承UIAlertView,改写其中的layoutSubviews方法,用于自定义UIAlertView的外观。http://ios.itmdc.com/thread-1876-1-1.htmlShaking AlertView 介绍:输入密码时,弹出密码输入框(一个UIAlertView),如果密码输入错误,密码输入框(UIAlertView)会发生颤动,用于提示密码错误。http://ios.itmdc.com/thread-1877-1-1.htmlPopoverView 介绍:实现效果不错的弹出视图。视图上有小箭头,指向弹出的地方。可以在弹出视图上加入各种控件。视图弹出的过程有Bounce的效果,并且能动态改变弹出视图的内容。http://ios.itmdc.com/thread-1878-1-1.htmlCustom AlertView 介绍:自定义UIAlertView的样式,包括背景图片以及按钮图片等等。 http://ios.itmdc.com/thread-1879-1-1.html 本文转自qianqianlianmeng博客园博客,原文链接:http://www.cnblogs.com/aimeng/archive/2012/12/08/2808444.html ,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

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

Nacos

Nacos

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

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册