首页 文章 精选 留言 我的

精选列表

搜索[c 14],共10015篇文章
优秀的个人博客,低调大师

Java程序性能优化14

对于boolean值,避免不必要的等式判断 将一个boolean值与一个true比较是一个恒等操作(直接返回该boolean变量的值). 移走对于boolean的不必要操作至少会带来2个好处:1)代码执行的更快 (生成的字节码少了5个字节);2)代码也会更加干净 。 例子:public class UEQ{ boolean method (String string) { return string.endsWith ("a") == true; // Violation } } 更正:class UEQ_fixed{ boolean method (String string) { return string.endsWith ("a"); } }

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

14.Swift学习之闭包

闭包引入 计算1个数的平方 函数写法 func square(param:Int) -> Int{ return param * param } square(param:3) 闭包写法 let squareCloure = { (param:Int) -> Int in return param * param } squareCloure(3) 闭包含义 闭包是可以被传递和引用的一个独立模块 闭包能够捕获和存储定义在其上下文中的任何常量和变量,即闭合并包裹那些常量和变量,因此被称为“闭包” 闭包符合如下三种形式中的一种: 全局函数是一个有名字但不会捕获任何值的闭包 内嵌函数是一个有名字且能从其上层函数捕获值的闭包(函数中的嵌套函数知识点) 闭包表达式是一个轻量级语法,可以捕获其上下文中常量或变量值的没有名字的闭包 闭包和函数一样也是引用类型 简单案例 案例一 let demo= { print("Swift 闭包实例。") } demo() 案例二 let divide = {(val1: Int, val2: Int) -> Int in return val1 / val2 } let result = divide(200, 20) print (result) 闭包表达式 闭包表达式语法有如下的一般形式: { (parameters) -> (return type) in statements } 闭包表达式由一对{}开始与结束 由in关键字将闭包分割成两部分:参数与返回值、闭包体 闭包参数与函数参数的区别 形式参数不能提供默认值,其他和函数一样 闭包主要知识点 参数名称缩写 Swift 提供了参数名称的缩写功能,直接通过 $0,$1,$2来顺序调用闭包的参数 在闭包表达式中使用参数名称缩写,可以在闭包参数列表中省略对其定义 参数类型可以通过函数类型进行推断 在单行闭包的时候,return 关键字可以省略 参数名称省略以后,in 关键字也可以被省略 //从数组中筛选指出合适的数据组成新的数组 func getList(score:[Int], con:(Int)->Bool) -> [Int]{ var newScore:[Int] = [Int]() for item in score { if con(item) { newScore.append(item) } } return newScore } let newAarray = getList(score: [75,60,95,45,85], con:{(s:Int)->Bool in return s>80}) print(newAarray) 第一种简写: 省略 ->与返回类型(根据后面表达式可以推断返回值是一个Bool) let newAarray = getList(score: [75,60,95,45,85], con:{(s:Int) in return s>80}) 第二种简写:省略参数类型和括号(根据函数的参数可推断传进来的必然是Int) let newAarray = getList(score: [75,60,95,45,85], con:{s in return s>80}) 第三种简写:省略return关键字 let newAarray = getList(score: [75,60,95,45,85], con:{s in s>80}) 第四种简写:参数名称缩写,省略参数声明和in,改为$0 let newAarray = getList(score: [75,60,95,45,85], con:{$0>80}) 捕获 闭包可以从上下文环境中捕获常量、变量,并在自己的作用域内使用 Swift最简单的闭包形式是嵌套函数,也就是定义在其他函数的函数体内的函数,嵌套函数可以捕获其外部函数所有的参数以及定义的常量和变量。 func makeIncrementor(forIncrement amount: Int) -> () -> Int { var runningTotal = 0 func incrementor() -> Int { runningTotal += amount return runningTotal } return incrementor } let incrementByTen = makeIncrementor(forIncrement: 10) // 返回的值为10 print(incrementByTen()) // 返回的值为20 print(incrementByTen()) // 返回的值为30 print(incrementByTen()) 尾随闭包 尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用 闭包是函数的最后一个参数 调用时,函数的 ) 可以前置到倒数第二个参数末尾,后面的参数直接使用 { // 执行代码 },形式参数标签也随之省略 将一个很长的闭包表达式作为最后一个参数传递给函数,可以使用尾随闭包来增强函数的可读性 //尾随闭包 func doSomething(info:String, clousre:(String)->Void){ clousre(info) } //不使用尾随闭包进行函数调用 doSomething(info: "Hello", clousre: { s in print(s) }) //使用尾随闭包进行函数调用 doSomething(info: "World") { s in print(s) } 逃逸闭包 闭包作为一个参数传递给一个函数 传入函数的闭包如果在函数执行结束之后才会被调用,那么这个闭包就叫做逃逸闭包 声明一个接受闭包作为形式参数的函数时,可以在形式参数的类型之前写上@escaping 来明确闭包是允许逃逸的 逃逸闭包会在函数结束后才执行 举例 //逃逸闭包:闭包可以超出函数的范围来调用 //存放没有参数、没有返回值的闭包 var closureArray :[()->Void] = [()->Void]() //定义一个函数,接收一个非逃逸闭包为参数 func nonEscapeClosure(closure:()->Void){ closure() } //定义一个函数,接收一个逃逸闭包为参数,将闭包并存储到一个数组里面去,并没有调用 func escapeClosure(closure: @escaping ()->Void){ print("函数开始") closureArray.append(closure) print("函数结束") } var x = 10 //打印10 print(x) nonEscapeClosure { x = 100 } //打印100 因为闭包在函数里面执行了 print(x) escapeClosure { x = 200 } //打印100 因为闭包逃逸了 没有在函数里面执行 print(x) closureArray.first?() //打印200 在函数外面调用了闭包 print(x) //尾随闭包常用于异步回调 自动闭包 一种自动创建的闭包,用于包装函数参数的表达式 不接受任何参数,被调用时会返回被包装在其中的表达式的值 在形式参数的类型之前加上@autoclosure关键字标识这是一个逃逸闭包 //自动闭包 func printIfTrue(predicate:@autoclosure ()->Bool){ if predicate() { print("is true") } else{ print("is false") } } //直接进行调用了,Swift 将会把 2 > 1 这个表达式自动转换为 () -> Bool。这样我们就得到了一个写法简单、表意清楚的表达式。 printIfTrue(predicate: 2>1) printIfTrue(predicate: 2<1) 闭包的循环引用 class NetworkTools: NSObject { /// 完成回调属性 var finishedCallBack: (()->())? /// 加载数据 /// - parameter finished: 完成回调 func loadData(finished: () -> ()) { self.finishedCallBack = finished working() } func working() { finishedCallBack?() } deinit { print("网络工具 88") } class ViewController: UIViewController { var tools: NetworkTools? override func viewDidLoad() { super.viewDidLoad() tools = NetworkTools() tools?.loadData() { print("加载数据完成,更新界面:", NSThread.currentThread()) weakSelf!.view.backgroundColor = UIColor.redColor() } } /// 与 OC 中的 dealloc 类似,注意此函数没有() deinit { print("控制器 88") } } Swift中解决循环引用的方式 方案一: 使用weak,对当前控制器使用弱引用 但是因为self可能有值也可能没有值,因此weakSelf是一个可选类型,在真正使用时可以对其强制解包(该处强制解包没有问题,因为控制器一定存在,否则无法调用所在函数) // 解决方案一: weak var weakSelf = self tools.loadData { print("加载数据完成,更新界面:", NSThread.currentThread()) weakSelf!.view.backgroundColor = UIColor.redColor() } 方案二: 和方案一类型,只是书写方式更加简单 可以写在闭包中,并且在闭包中用到的self都是弱引用 tools.loadData {[weak self] () -> () in print("加载数据完成,更新界面:", NSThread.currentThread()) self!.view.backgroundColor = UIColor.redColor() } 方案三: 使用关键字unowned 从行为上来说 unowned 更像OC中的 unsafe_unretained unowned 表示:即使它原来引用的对象被释放了,仍然会保持对被已经释放了的对象的一个 "无效的" 引用,它不能是 Optional 值,也不会被指向 nil tools.loadData {[unowned self] () -> () in print("加载数据完成,更新界面:", NSThread.currentThread()) self.view.backgroundColor = UIColor.redColor() }

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

第 14 章 Piranha - Cluster administation tools

摘要 Piranha 安装与配置 目录 14.1. install 14.2. configure 14.3. real server 14.4. Example 14.4.1. Master 14.4.2. Slave 14.4.3. MySQL 14.1.install Install piranha and ipvsadm packages on the LVS Routers yum -y install ipvsadm piranha Turning on Packet Forwarding on the LVS Routers vi /etc/sysctl.conf net.ipv4.ip_forward = 1 把原来的0改成1 使刚才的修改生效 sysctl -p 临时生效 echo "1" >/proc/sys/net/ipv4/ip_forward Configuring Services on the LVS Routers chkconfig pulse on chkconfig ipvsadm on chkconfig piranha-gui on Setting a Password for the Piranha Configuration Tool # piranha-passwd Starting the Piranha Configuration Tool Service # setenforce 0 setenforce: SELinux is disabled # service ipvsadm start # service piranha-gui start Please enable JavaScript to view the &lt;a href="http://disqus.com/?ref_noscript"&gt;comments powered by Disqus.&lt;/a&gt;comments powered by Disqus 原文出处:Netkiller 系列 手札 本文作者:陈景峯 转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

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

《Java编程思想》读书笔记(14)

程序是根据具体情况在不断地创建新对象,而这些情况又只有在运行时才能够确定,因此我们就不知道到底需要多少对象,什么类型的对象,所以要能够创建任何对象并且能保持住这些对象的引用。Java就提供了很多容器类来持有和操纵对象。 数组是比较特别的一个容器,怎么说呢,它可以持有象int等基本类型数据,能够随机存储和访问,而且访问效率很高,但高效率是以牺牲灵活为代价的,当你创建了一个数组后,它的容量就确定了,并且在其生命周期内不能改变。而与它相对应的ArrayList就恰好相反,它可以灵活地增加容量,但效率就明显低于数组。而与List,Map,Set等泛型容器相比,数组在创建时就指明了它持有的对象类型,因此在编译时就会做类型检查,从而防止插入错误类型的对象。而泛型容器把它里面的元素都看成是Object,因此能容纳所有类型的对象(这就郁闷了,当你要往里面插入基本类型的数据时,就不得不先用对应的包装类将基本类型包装为Object型),并且泛型容器也没有编译时的类型检查,因此安全性得不到保证。 本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2006/06/17/428251.html,如需转载请自行联系原作者

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

Android开发者指南(14) —— Introduction

简介 使用SDK提供的工具来开发Android设备的应用程序非常方便。要使用这些工具,不仅可以通过被称为ADT(Android Development Tools)的Eclipse插件,还可以通过命令行。我们推荐使用Eclipse进行开发,因为它可以使我们在开发应用程序的过程中,能够直接调用所需的各种工具。 当然,你也可以选择使用其它的IDE进行开发。或者,仅使用一个简单的文本编辑器,并通过命令行来调用工具或执行脚本。对开发而言,这是一些数量不多的流线式步骤。尽管有时不得不手工地调用命令行工具,但所有的这些功能在Eclipse中全都具备。 备注:在开始开发Android应用程序之前,请确信已通读了安装中罗列的所有步骤。 不管是否使用Eclipse,开发应用程序的基本步骤是一样的: 1.安装Android虚拟设备或硬件设备。 需要创建Android虚拟设备或连接硬件设备,用来安装应用程序。 更多信息请查阅管理虚拟设备和使用硬件设备。 2.创建Android工程。 Android工程容纳了应用程序的全部源代码和资源文件。最后,它会被构建到一个.apk的包中,用于安装到Android设备。 3.构建和运行应用程序。 如果使用Eclipse进行开发,那么每次保存所做的改动时都会执行构建。要把应用程序安装到设备中,只需要点击Run。如果使用的是其它IDE,可以用Ant来构建工程,并用adb来把它安装到设备中。 (译者注:Eclipse中的构建是否在保存操作后自动执行,取决于菜单项Project>Build Automatically的状态) 4.用SDK的调试和日志工具来调试应用程序。 应用程序调试包括使用JDWP兼容调试器,以及Android SDK提供的调试和日志工具。在Eclipse中,已经包含的一个兼容调试器。 (译者注:JDWP是Java调试线协议,其详细介绍可参阅这里) 5.用测试和测量框架来测试应用程序。 Android SDK提供了一个测试和测量框架,用来帮助在仿真器或设备中安装和运行测试。 必要的命令行工具 当使用Eclipse之外的其它IDE或编辑器进行开发时,需要熟悉下列的所有工具,它们都必须通过命令行来执行。 android 创建和更改Android工程,创建、移动和删除AVD。 Android Emulator 在一个Android仿真平台上运行你的Android应用程序。 Android Debug Bridge 与仿真器或已连接设备之间的接口(安装应用程序、执行设备shell、发送命令等)。 除了上面的SDK工具之外,还需要下面的开源三方工具: Ant 用于把Android工程编译构建为可安装的.apk文件。 Keytool Keytool是JDK的一部分,用于生成密钥库和私钥,进而对.apk文件进行签名。 Jarsigner(或类似的签名工具) 用Keytool生成的私钥对.apk文件进行签名。Jarsigner也是JDK的一部分。 如果使用Eclipse和ADT,那么adb和android都会由Eclipse和ADT的类似功能来进行调用。不过,你还是需要熟悉adb,因为它的有些功能是无法从Eclipse访问的,比如adbshell命令。你可能还需要调用Keytool和Jarsigner来对应用程序进行签名,但最好还是对Eclipse进行设置,让它来自动地做这件事。 有关Android SDK提供的工具的更多信息,请查阅文档的工具部分。 第三方开发工具 下面所述的工具不是由Android SDK团队开发的。Android开发指南中没有提供这些工具相关的文档,请通过给出的链接来找到它们。 在IntelliJ IDEA中开发 IntelliJ IDEA是来自JetBrains的强大的Java IDE,它的免费社区版和最终版都提供了完整的Android开发支持。 IDE确保与最新Android SDK的兼容,同时还提供智能的代码编辑器、在代码和资源间的快速导航、图形化调试器、使用Android测试框架的单元测试支持、以及在模拟器或USB连接的设备中运行应用程序的能力。 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/596986,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

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

用户登录
用户注册