敏捷开发
1.简介:
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
2.核心原则:
主张简单、拥抱变化、第二个目标是可持续性、递增的变化,令投资最大化、有目的的建模、多种模型、高质量的工作、快速反馈,软件是主要目标、轻装前进。
3.分类:
主要包括 SCRUM、XP(极限编程)、Crystal Methods、FDD(特性驱动开发)等。其中 SCRUM 与 XP 最为流行。
4.SCRUM 的工作流程:
在项目启动之前,由团队的产品负责人按照需求优先级来明确出一份需求列表(Product Backlog),为项目做出整体排期。随后在每一个小的迭代周期里,团队会根据会议计划(Sprint Plan Meeting)确定本周期的 Sprint Backlog,再细化成一个个具体开发任务(Task),分配给团队成员,进行具体开发工作。每一天,团队成员都会进行每日监控项目进度的会议(Daily meeting或Scrum),根据情况更新自己的 Task 状态,整个团队更新当前周期的需求完成情况(Sprint burn down chart)。当这一周期的 Sprint backlog 全部完成,团队会进行团队成员演示成果的冲刺评审会议(Spring review meeting)。一切顺利的话,会发布出这一版本的最新可用版本(Release),并且进行冲刺周期(Sprint)回顾会议(Sprint Retrospective Meeting)。
5.SCRUM 与 XP 的区别:
SCRUM 是一种开发流程框架,包含三个角色,三个工件,四个会议,其目的是为了有效地完成每一次迭代周期的工作。
XP 极限编程更侧重于实践,并力求把实践做到极限。这一实践可以是测试先行,也可以是结对编程等,关键要看具体的应用场景。
6.敏捷开发与 Devops:
Devops 是 Development 和 Operations 的合成词,其目标是要加强开发人员、测试人员、运维人员之间的沟通协调。为了实现这一目标,项目做到持续集成、持续交付、持续部署。
时下流行的Jenkins、Bamboo,就是两款优秀的持续集成工具。而 Docker 容器则为 Devops 提供了强大而有效的统一环境。
面向对象
1.面向对象的思想主要是以对象为主,将一个问题抽象出具体的对象,然后将抽象出来的对象和对象的属性和方法封装成一个类。建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
2.面向对象的三大特性:封装、继承、多态。
3.封装:把客观事物封装成抽象的类,隐藏属性和方法的实现细节,仅对外公开接口。
4.构造函数(Constructor)模式:用来在创建对象时初始化对象。
构造函数与普通函数的区别:
首字母大写,即使用大驼峰命名,非构造函数首字母小写
内部使用 this
使用 new 生成实例
5.原型(prototype):Javascript规定,每一个构造函数都有一个 prototype 属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。即对于那些不变的属性和方法,可以直接将其添加在类的 prototype 对象上。
6.继承:子类可以使用父类的所有功能,并且对这些功能进行扩展。继承的过程,就是从一般到特殊的过程。
this 指针
1.this 永远指向最后调用它的那个对象。
2.函数调用的方法:
(1) 作为一个函数调用。
举例(示例为一个最简单的函数,它不属于任何一个对象就是一个函数,这样的情况在浏览器中的非严格模式默认属于全局对象 window,在严格模式,就是 undefined
。注意,全局函数容易产生命名冲突,所以不建议使用全局函数):
function a() {...}
a();
(2) 函数作为方法调用。
举例(示例定义一个对象 a,对象 a 有一个属性 name
和一个方法 fn
,然后对象 a 通过 .
方法调用了其中的 fn 方法):
var a = {
name: "",
fn: function(){...}
}
a.fn();
(3) 使用构造函数调用函数。如果函数调用前使用了 new
关键字, 即调用了构造函数。注意,虽然看起来就像创建了新的函数,但实际上 JavaScript 函数是重新创建的对象。
举例:
// 构造函数:
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
var a = new myFunction("a","b");
a.lastName;
(4) 作为函数方法调用函数(call、apply)。
在 JavaScript 中, 函数是对象,它有自己的属性和方法。call()
和 apply()
是预定义的函数方法。这两个方法可用于调用函数,使用 call()
和 apply()
方法时,就会改变 this 的指向,这两个方法的第一个参数必须是对象本身。
2.改变 this 指向:
(1) 使用 ES6 的箭头函数。箭头函数的 this 始终指向函数定义时的 this,而非执行时的 this。箭头函数中没有 this 绑定,必须通过查找作用域链来决定其值,如果箭头函数被非箭头函数包含,则 this 绑定的是最近一层非箭头函数的 this,否则,this 为 undefined。
(2) 在函数内部使用 _this = this
。将调用这个函数的对象保存在变量 _this 中。
(3) new 实例化一个对象。
(4) 使用 apply、call、bind。apply()
方法调用一个函数, 其具有一个指定的 this 值,以及作为一个数组(或类似数组的对象)提供的参数。语法:fun.apply(thisArg, [argsArray]);
。举例:
var a = {
name : "",
fn : function (a,b) {...}
}
var b = a.fn;
b.apply(a,[1,2])
call()
方法与 apply()
类似,区别在于传入的参数不同。语法:fun.call(thisArg[, arg1[, arg2[, ...]]])
。举例:
var a = {
name : "",
fn : function (a,b) {...}
}
var b = a.fn;
b.call(a,1,2)
apply 和 call 的区别是 call 方法接受的是若干个参数列表,而 apply 接收的是一个包含多个参数的数组。bind()
方法创建一个新的函数, 当被调用时,将其 this 关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。
bind 是创建一个新的函数,需要手动去调用。举例:
var a = {
name : "",
fn : function (a,b) {...}
}
var b = a.fn;
b.bind(a,1,2)()
JSON
1.JSON:JavaScript 对象表示法(JavaScript Object Notation)。
2.JSON 是存储和交换文本信息的语法。类似 XML,但比 XML 更小、更快,更易解析。
3.JSON 具有自我描述性,即人类可读。
4.JSON 具有层级结构,值中存在值。
5.JSON 可通过 JavaScript 进行解析。
6.JSON 数据可使用 AJAX 进行传输。
7.举例:
{
"integral": 666,
"musicGoods": [
{
"musicGoodName": "击音XT800金属磁吸入耳式Hifi耳机",
"musicGoodIntroduce": "超高音质,专供款",
"musicGoodPrice": "50",
"musicGoodNum": "1",
"musicGoodImg": "../static/img/song-sheet1.jpeg"
}, {
"musicGoodName": "20寸铝框(非全铝)登机箱",
"musicGoodIntroduce": "轻便优雅,耐摔时尚",
"musicGoodPrice": "280",
"musicGoodNum": "1",
"musicGoodImg": "../static/img/song-sheet2.jpeg"
}, {
"musicGoodName": "音乐雨伞",
"musicGoodIntroduce": "Music Code-History系列,黑胶印象款",
"musicGoodPrice": "109",
"musicGoodNum": "1",
"musicGoodImg": "../static/img/song-sheet5.jpeg"
}
]
}
AJAX
1.AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
2.AJAX 属于创建快速动态网页的技术,通过在后台与服务器进行少量数据交换,使网页实现异步更新。
3.jQuery AJAX:ajax()
方法。
4.ajax()
方法通过 HTTP 请求加载远程数据,该方法是 jQuery 底层 AJAX 实现。
常见参数:
options:Object 类型,AJAX 请求设置。所有选项都是可选的。
type:String 类型,请求方式 post 或 get ,默认为 get ,其它 HTTP 请求方法,如 put 和 delete 也可以使用,但仅部分浏览器支持。
url:String 类型,当前页地址。发送请求的地址。
async:Boolean 类型,默认值 true ,即默认设置下所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。
success:Function 类型,请求成功后的回调函数。参数:由服务器返回,并根据 dataType 参数进行处理后的数据;描述状态的字符串。
error:Function 类型,默认值自动判断 (xml 或 html)。请求失败时调用此函数。参数:XMLHttpRequest 对象、错误信息、(可选)捕获的异常对象。如果发生了错误,错误信息(第二个参数)除了得到 null 之外,还可能是 "timeout", "error", "notmodified" 和 "parsererror"。
data:String 类型,发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。
dataFilter:Function 类型,给 Ajax 返回的原始数据的进行预处理的函数。提供 data 和 type 两个参数:data 是 Ajax 返回的原始数据,type 是调用 jQuery.ajax 时提供的 dataType 参数。函数返回的值将由 jQuery 进一步处理。
dataType:String 类型,预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:"xml": 返回 XML 文档,可用 jQuery 处理;"html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行;"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载);"json": 返回 JSON 数据 ;"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数;"text": 返回纯文本字符串。
5.举例:
$.ajax({
type: "post",
url: "",
async: false,
success: function(data) {...}
});
HTTP 和 HTTPS
1.HTTP 和 HTTPS 的基本概念:
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
2.HTTP 和 HTTPS 的区别:
HTTPS和HTTP的区别主要如下:
(1) https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
(2) http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
(3) http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
(4) http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。