- 博客(342)
- 收藏
- 关注
原创 RVM Ruby 管理工具
RVM Ruby 管理工具 1、RVM 简介 1.1 Ruby 简介 Ruby 是一种面向对象的脚本语言,简单易用,功能强大。能跨平台和可移植性好等等。其实就是种脚本语言。 Ruby 的软件源使用的是亚马逊的云服务,国内网络环境下载时可能会出现各种不稳定和超时,所以自带的需要FQ。 可以将官方 ruby 源替换成国内淘宝 ruby:https:...
2019-02-19 11:28:00
747
原创 Dubbo 分布式服务框架简介
1、分布式服务框架 1.1 Dubbo 简介 Dubbo 是一个分布式服务框架,以及阿里巴巴内部的 SOA 服务化治理方案的核心框架。其功能主要包括:高性能 NIO 通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。 说通俗点,就是首先将程序组件化成一个个相对独立的服务,然后就可以对服务进行分布式;而且,它有注册中心通过监听,实时发现着新服务,并部署,还可以推送...
2018-08-27 10:45:00
462
原创 MySQL 触发器
前言 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。 1、创建触发器 1)触发器只能创建在永久表(Permanent Table)上,不能对临时表(Temporary Table)创建触发器。 # 创建触发器,单条执行语句 # create trigger 触发器名 ...
2018-06-28 19:23:00
275
原创 MySQL 流程控制
1、MySQL 流程控制语句 MySQL 中可以使用 if、case、loop、leave、iterate、repeat 及 while 语句进行流程的控制。 1.1 if 语句 if 实现条件判断,满足不同的条件执行不同的语句列表。 # if 语句 # IF search_condition THEN statement_list [ELSEIF ...
2018-06-28 17:58:00
537
原创 MySQL 索引
1、MySQL 索引简介 1.1 MySQL 索引简介 索引是数据库中用来提高性能的最常用工具。所有 MySQL 列类型都可以被索引,对相关列使用索引是提高 select 操作性能的最佳途径。 索引用于快速找出在某个列中有一特定值的行。如果不使用索引,MySQL 必须从第 1 条记录开始然后读完整个表直到找出相关的行,表越大,花费的时间越多。 如果表中查询的列有一个索引,MySQL ...
2018-06-28 16:23:00
241
原创 MySQL 字符集
1、MySQL 字符集简介 1.1 字符集简介 MySQL 服务器可以支持多种字符集,在同一台服务器、同一个数据库甚至同一个表的不同字段都可以指定使用不同的字符集,相比 Oracle 等其他数据库管理系统,在同一个数据库只能使用相同的字符集,MySQL 明显存在更大的灵活性。 MySQL 的字符集包括字符集(character)和校对规则(collation)两个概念。 字符集用来定...
2018-06-25 19:06:00
257
原创 MySQL 存储引擎
前言 和大多数数据库不同,MySQL 中有一个存储引擎的概念,针对不同的存储需求可以选择最优的存储引擎。 1、MySQL 存储引擎概述 插件式存储引擎是 MySQL 数据库最重要的特性之一,用户可以根据应用的需要选择如何存储和索引数据、是否使用事务等。MySQL 默认支持多种存储引擎,以适用于不同领域的数据库应用需要,用户可以通过选择使用不同的存储引擎提高应用的效率,提供灵活的存储...
2018-06-21 19:55:00
213
原创 MySQL 常用函数
前言 在 MySQL 数据库中,函数可以用在 select 语句及其子句(例如 where、order by、having 等)中,也可以用在 update、delete 语句及其子句中。 1、字符串函数 字符串函数是最常用的一种函数,在 MySQL 中,字符串函数同样是最丰富的一类函数。 在程序上,字符串的编号从 0 开始,但在 MySQL 中,从 1 开始。 函数 功能 ...
2018-06-20 17:30:00
210
原创 MySQL 中的运算符
1、算数运算符 MySQL 支持的算术运算符包括加、减、乘、除和模运算。 运算符 作用 + 加法,获得一个或多个值的和 - 减法,从一个值中减去另一个值 * 乘法,得到两个或多个值的乘积 /,div 商运算,用一个值除以另一个值得到商 %,mod 模运算,用一个值除以另外一个值得到余数 1)在除法运算和模运算中,如果除数为 0,将是非法除数,返回结果...
2018-06-20 10:15:00
264
原创 MySQL 支持的数据类型
1、数值类型 MySQL 支持所有标准 SQL 中的数值类型,其中包括严格数值类型(integer、smallint、decimal、numeric),以及近似数值数据类型(float、real、double precision),并在此基础上做了扩展,扩展后增加了 tinyint、mediumint 和 bigint 这 3 种长度不同的整型,并增加了 bit 类型,用来存放位数据。...
2018-06-19 21:31:00
368
原创 SQL DCL 数据控制语句
前言 DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 grant、revoke 等。 ...
2018-06-14 21:38:00
331
原创 SQL DML 数据操纵语句
前言 DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用的语句关键字主要包括 insert、delete、update 和 select 等。 常用约束类型 约束类型 解释 not null 非空约束,设定的内容在添加数据的时候不能是 null 的 unique 唯一约束,值是...
2018-06-14 21:37:00
298
原创 SQL DDL 数据定义语句
前言 DDL(Data Definition Language)语句:数据定义语句,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象。常用的语句关键字主要包括 create、drop、alter 等。 1、DDL 数据库操作语句 1)创建数据库语句 # 创建数据库,数据使用默认编码方式 utf8mb4 # create database 数据库名; > creat...
2018-06-14 21:22:00
400
原创 SQL 数据库结构化查询语言
1、数据库 常见数据库 MySQL:开源免费的数据库,小型的数据库。 Oracle:收费的大型数据库,Oracle 公司的产品 DB2:IBM 公司收费的数据库,常应用在银行系统中 SQLServer:MicroSoft 公司收费的中型数据库,C#、.net 等语言常使用 SQLite:嵌入式的小型数据库,应用在手机端 2、SQL 语言 数据库结构化查询语言 SQL 是...
2018-06-14 21:21:00
412
原创 MySQL 服务常用操作命令
1、MySQL 服务设置 在使用 mysql.server 命令之前需要将路径 /usr/local/mysql/support-files 添加到系统环境变量中。 export PATH=$PATH:/usr/local/mysql/support-files 在使用 mysql 命令之前需要将路径 /usr/local/mysql/bin 添加到系统环境变量中。 export PA...
2018-06-14 21:20:00
269
原创 指令创建 Express Node.js 项目
1、安装 Express 1.1 安装 Express 框架 首先保证已经安装过了 Node.js,然后进入终端使用管理员身份来安装 Express 框架。 # 安装 express $ sudo npm install -g express 1.2 安装 Express 命令行工具 安装完以后,如果使用的是 Express 4.0 版本,这里有个需要注意的问题在 4.x 版本 e...
2018-05-31 15:09:00
363
原创 Mac NPM 配置
1、NPM 简介 NPM(node package manager),通常称为 node 包管理器,是目前世界上最大的开源库生态系统。使用 NPM 可以对 node 包进行安装、卸载、更新、查看、搜索、发布等操作。安装完 Node.js®,NPM 就可以直接用了。 2、NPM 环境配置 2.1 安装 Node.js 从下面的地址中下载安装 Node.js。 Node.js 官网下...
2018-05-31 15:05:00
1353
原创 Mac NVM 配置
1、NVM 简介 NVM(node version manager)是一个可以让你在同一台机器上安装和切换不同版本 node 的工具。 GitHub 地址 2、NVM 环境配置 2.1 安装 NVM 如果系统没有安装 git 的话,需先安装 git。 在终端输入以下命令安装 NVM。 # 安装 NVM $ curl -o- https://raw.githubusercontent...
2018-05-31 15:04:00
557
原创 Mac Node.js 配置
1、Node.js 简介 Node.js® 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,可方便地构建快速,可扩展的网络应用程序的平台。Node.js 使用事件驱动,非阻塞式 I/O 模型,使其轻量又高效,可运行在不同的设备上。 从 Node.js 官方网站的企业登记页,包括我们熟知的公司有 LinkedIn, Yahoo, Payp...
2018-05-31 15:02:00
305
原创 Swift Struct 结构体
前言 Swift 语言有两种基本的数据类型,即类(class)和结构体(struct),class 这样的概念大家不会陌生,而 struct 也并不是什么新的概念,在 Objective-C 和 C 中也有 struct,不过 Swift 将 struct 提升到一个更高更重要的层次,甚至 Swift Foundation 框架的 SDK,诸如 String,A...
2018-05-04 19:31:00
370
原创 Swift Enum 枚举
前言 枚举是一种自定义的数据类型,在 Swift 中枚举类型拥有相当高的自由度。在 Swift 语言中枚举是一级类型,它拥有在其他语言中只有类才拥有的一些特性,比如实例方法,实例构造器等。 枚举声明的类型是囊括可能状态的有限集,且可以具有附加值,并在你的代码中以一个安全的方式使用它们。通过内嵌(nesting),方法(method),关联值(associated values) 和模式...
2018-05-03 15:54:00
445
原创 Swift 静态派发和动态派发
前言 方法是 Swift 中的一个重要概念,方法允许你把需要复用的代码封装进方法中,这样当你调用方法时,实际上你的想法是执行方法中的那些代码,方法的出现极大的提高了方法的复用性。 Swift 工程的环境是非常复杂的,如何凭借方法的名字正确的找到方法中的代码实际上并不是听起来那样简单,在寻找代码的道路上又静态派发和动态派发两种不同的方式。 1、动态派发 OC ...
2018-04-24 17:29:00
505
原创 Swift 柯里化
前言 由于柯里化在业务层的应用较少,所以从 Swift 3.0 开始移除了柯里化的用法,但是 Swift 的很多底层特性是使用柯里化来表达的。 1、柯里化 1.1 柯里化简介 柯里化(Currying),又称部分求值(Partial Evaluation),是一种函数式编程思想,就是把接受多个参数的函数转换成接收一个单一参数(最初函数的第一个参数)的函数,并...
2018-04-18 17:09:00
307
原创 Swift 弱引用与无主引用
前言 Swift 提供了两种解决循环引用的方法,弱引用和无主引用。 弱引用和无主引用可以使循环中的一个实例引用另一个实例时不使用强引用。 1、弱引用 对生命周期中会变为 nil 的实例采用弱引用,也就是说对可选类型采用弱引用。 声明一个弱引用的关键字为 weak。 1.1 弱引用示例 比如存在一个学生类,一个班级类,学生类有一个属性叫学生所属的班级,而班级有一个属性是班长,它引...
2018-04-17 21:54:00
825
原创 Swift 循环引用
1、循环引用 如果两个类互相持有对方的强引用,就会出现循环引用的情况。 Swift 提供了两种解决循环引用的方法,弱引用和无主引用。 1.1 循环引用示例 比如存在一个学生类,一个班级类,学生类有一个属性叫学生所属的班级,而班级有一个属性是班长,它引用了一个学生类,它们都是可选型。 class Student { var name: String? var theC...
2018-04-17 20:56:00
641
原创 Swift ARC 自动引用计数
1、ARC 引用类型在堆上的内存分配过程中有 8 字节的地址长度用来保存对象的引用计数,堆上的内存并不像栈上那样立即进行回收,系统会定时对堆上的内存进行检查,当某个实例不再被使用时,引用计数会变为 0,此时系统会自动释放实例所占用的内存空间,一旦释放就不能再访问这个实例的属性和方法。由于该过程是自动的,不需要开发人员来开辟和释放内存,因此称为自动引用计数,简称 ARC(Automati...
2018-04-17 19:08:00
131
原创 Swift 值类型和引用类型的内存管理
1、内存分配 1.1 值类型的内存分配 在 Swift 中定长的值类型都是保存在栈上的,操作时不会涉及堆上的内存。变长的值类型(字符串、集合类型是可变长度的值类型)会分配堆内存。 这相当于一个 “福利”,意味着你可以使用值类型更快速的完成一个方法的执行。 值类型的实例只会保存其内部的存储属性,并且通过 “=” 赋值的实例彼此的存储是独立的。 值类型的赋值是拷贝的,对于定长的值类型来说...
2018-04-17 17:41:00
428
原创 Swift 栈和堆
前言 Swift 中的数据类型分为引用类型(类)和值类型(枚举、结构体)。 引用类型存储在 “堆” 上,值类型存储在 “栈” 上。 Swift 管理引用类型采用自动引用计数(ARC)的管理方法。 值类型是由处理器来管理的,不需要程序员来管理。 1、栈 栈是一块空间较小,但是运行速度很快的内存区域。 栈上的内存分配遵循后进先出的原则,通过移动栈的尾指针实现 push(入栈)和 ...
2018-04-17 09:28:00
408
原创 Swift 命令行输入输出
1、类输出 Swift 语言中类输出方法重写 override var description: String { return String(format: "%@, %@", self.lastName, self.firstName) } 2、命令行输入 在 Swift 语言中添加命令行输入函数 创建 C 语言的 .c 和 .h 及 桥接 文件,并添加自定义输入函...
2018-04-10 21:02:00
1442
原创 在 OC 中调用 Swift 代码
1、在 Objective-C 项目中使用 Swift 代码 1)在 OC 项目中创建 .Swift 文件,文件中的格式为其本有的格式。 2)Xcode 提示是否创建 Objective-C bridging 头文件,点击 Yes 创建,Xcode 会自动创建一个桥接头文件,文件名的格式是 项目名-Bridging-Header.h。 一般情况下,Xcode 辅助生成的桥接头文件在编...
2018-04-09 20:36:00
326
原创 在 Swift 中调用 OC 代码
前言 在 Swift 语言中,我们可以使用 Objective-C、C 语言编写代码,我们可以导入任意用 Objective-C 写的 Cocoa 平台框架、Objective-C 框架或 C 类库。 1、在 Swift 项目中使用 Objective-C、C 代码 1)在 Swift 项目中创建 OC/C 的 .h 和 .m 或 .c 文件,文件中的格式为其本有的格式。 2)Xc...
2018-04-09 20:33:00
434
原创 Swift 类型桥接
前言 iOS 中的 API 基本都是在许多年前由 OC 写成的,现在通过桥接的方法在 Swift 中可以用,基本看不出区别,非常自然。但是一些特殊的类型,在两种语言进行桥接的时候需要特别注意。 1、NSString 类型 NSString 是 Swift 中 String 类型在 OC 中的形式。 1)Swift 1.2 弱化了 String 和 NSString 类型的桥接,这...
2018-04-09 19:41:00
314
原创 Swift 与 C 语言混合编程
前言 作为一种可与 Objective-C 相互调用的语言,Swift 也具有一些与 C 语言的类型和特性,如果你的代码有需要,Swift 也提供了和常见的 C 代码结构混合编程的编程方式。 1、基本数据类型 Swift 提供了一些和 C 语言的基本类型如 char,int,float,double 等价的 Swift 基本数据类型。然而,这些 Swift 的核心基本类型之间并不能...
2018-04-09 19:40:00
351
原创 Swift Precondition 预处理
前言 precondition 和 assert 的格式类似,也是动态的,precondition 会造成程序的提前终止并抛出错误信息。 1、Precondition precondition 在一般的代码中并不多见,因为它是动态的,只会在程序运行时进行检查,适用于哪些无法在编译期确定的风险情况。 如果出现了诸如数据错误的情况,precondition 会提前终止程序,避免因数据...
2018-03-30 01:28:00
437
原创 Swift Assert 断言
前言 对每次运行都会出现的错误通常不会过于苦恼,可以使用断点调试或者 try catch 之类的方式判断并修复它。但是一些偶发(甚至是无数次运行才会出现一次)的错误单靠断点之类的方式是很难排除掉的,为此,引入一个不是很常用的调试工具函数 assert。 在实际编码中,为了保证程序正常运行,只有在某些必要条件被满足的情况下才执行特定代码段,这种编程思想叫做 “防错性编程”。 1、断言 ...
2018-03-30 00:36:00
422
原创 Swift Defer 延迟调用
1、Defer 在一些语言中,有 try/finally 这样的控制语句,比如 Java。这种语句可以让我们在 finally 代码块中执行必须要执行的代码,不管之前怎样的兴风作浪。在 Swift 2.0 中,Apple 提供了 defer 关键字,让我们可以实现同样的效果。 func checkSomething() { print("CheckPo...
2018-03-29 23:43:00
217
原创 Swift Guard 守护
前言 guard 语句和 if 语句有点类似,都是根据其关键字之后的表达式的布尔值决定下一步执行什么。 guard 语句只会有一个代码块,不像 if 语句可以 if else 多个代码块。 guard 必须强制有 else 语句。 guard 中的 else 只能执行转换语句,像 return, break, continue 或者 throws,当然你也可以...
2018-03-29 17:22:00
236
原创 Swift 异常处理
前言 在 Swift 1.0 时代是没有异常处理和抛出机制的。 如果要处理异常,要么使用 if else 语句或 switch 语句判断处理。 要么使用闭包形式的回调函数处理。 再要么就使用 NSError 处理。 以上这些方法都不能像 Java 中的 try catch 异常控制语句那样行如流水、从容不迫的处理异常,而且也会降低代码的可读性。 在 Swif...
2018-03-29 16:54:00
296
原创 Swift 模式匹配
前言 在 Swift 中模式匹配是个重要的概念。 最常用的模式匹配是 switch 语法。 模式匹配非常灵活,在使用 switch 进行一轮模式匹配时,不需要所有的 case 都是同一种风格。 let i = 5 switch i { case 1: print("The box is 1") case 2: ...
2018-03-29 13:54:00
239
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅