一、耦合及内聚
高内聚低耦合—各司其职
例如:输入数据展示图表
输数据只能展示饼图—高耦合
输数据传给中间容器,中间容器触发,再决定数据饼图/柱状图/折线图—低耦合
注:耦合和内聚往往相反,耦合指模块间的依赖程度(越过接口的依赖),内聚指模块内元素和自己交互的状态
二、接口
接口就是提供具体能力的一个标准和抽象。
接口提供一种别人可调用的能力的标准。例如,小明写一封简历找 工作,这个简历就是小明的接口清单,这个接口清单描述了小明具备 的“接口”,有如下三点: (1)熟练使用Office。 (2)会写文章。 (3)以前在学生会工作,具备非常强的协调能力。 对外暴露了这几个接口之后,小明被老板聘用了。老板要求小明马 上写一篇文章,这就是要调用小明的第二项能力。 这里的例子表明,接口提供了能力,任何一个接口都被定义为了能 力的集合。
那么接口为什么又是一个标准和抽象呢?大家都知道USB接口是用来连接设备的,具有一个国际标准。这个国际标准定义了USB接口可以对手机进行充电,可以传输数据,并且定义了相应的电压和电流标准等。 真正在市场上出售的 USB,有可能是华硕、三星这样的大厂家生产的,也 有可能是东莞一个手工作坊制作的,<u>但是他们都遵从了国际标准</u>,否则 产品根本就卖不出去。从这个例子中我们可以看出,<font style="color:#1890FF;">接口有制定者和实现者,两者可以是相互独立的实体</font>。同时,接口制定者定义的接口标准往往是抽象的,并不涉及实现过程中的具体细节 。
截至目前,接口有了三层意思:
(1)接口定义了一组能力。
(2)接口有定义者和实现者。
(3)接口定义一般是抽象的,不包括具体的实现。
再来回顾那三个场景,“USB接口”只是一个标准,任何符合这个标准的USB线都能插入这个接口。 “让后台给我提供一个接口”,这句话在工程中一般表示的是仅仅提 供一项能力供调用方使用,这跟我们上文讲的接口的定义不完全一样。 例如,后台提供了一项能力,终端可以从后台调用这个接口,查询当前所在位置的天气。这种话在开发过程中讲得比较多,常用于前端和后台的联调。 “你来设计一个接口,我来实现”,语境一般是在面向对象的程序设计中,对一种能力的抽象分别由不同的开发者实现。
例如要实现两种门, 一种门使用密码锁,另一种使用钥匙锁,<u>那么抽象出来的通用的接口能力就是开门和关门两个能力,由密码锁和钥匙锁分别实现</u>。显然,它们对开门和关门的实现是不一样的,一种是输入密码,另一种是用钥匙。负责开门或关门的调用方看到接口后就能明白,可以用钥匙或者密码开门和关门,但并不用关注密码锁和钥匙锁的具体实现,有效隔离了调用者和具体实现过程。
接口象征着提供出来的能力,定义者和实现者一般是不同的,<font style="color:#1890FF;">调用者并不需要关注具体细节,只需要关注接口暴露出来的能力就可以了</font>。 如果程序员说,我需要定义一套接口,它是在抽象一种能力集,保证调用者只需要知道这个能力并调用,<font style="color:#1890FF;">实现者不需要关心谁调用,只安安心心地做好功能就好了</font>。 接口首先保证了大规模程序开发的可行性,通过接口的设计,一个 系统被清晰地定义成了多种能力的集合,每一个开发者只需关注自己的模块实现,而调用者负责完成整个程序的业务逻辑 。 以后如果程序员说“你给我封装一个接口,我直接调用”,他说的意思是:“我不关心你如何实现这个能力,只要我要用的时候,你给我正确的结果就好了。 “
三、Cookie
在浏览网页时,有的广告竟然展示出读者近期搜索过的关键词,也有一些广告竟然知道读者近期要买的东西。到 底是什么技术悄悄地把读者的信息出卖了?答案就是Cookie。
浏览器不断地向服务器请求数据,服务器不断地回答数据。这个过 程有个缺点:<font style="color:#E8323C;">每次请求都是独立的,服务器并不会记下客户端的信息。为 了让服务器识别请求者,请求者需要在发送请求时带上自己的身份信 息,这个身份信息的学名叫作Cookie。</font> <font style="color:#1890FF;">Cookie 是浏览器每次向网站服务器请求数据时携带的一些额外信 息,这些信息一般非常少(最多4KB),主要就是为了解决服务器“记性不 好”的问题。</font>当然,Cookie需要携带什么信息,其实是由服务器决定的,比如读者登录新浪微博后,服务器就会要求浏览器把登录成功的账号写到 Cookie里,下次请求关注列表时,浏览器就会带上这个Cookie,一起发送到服务器,这样服务器就会知道请求者是谁了。 例如,访问了百度之后产生的Cookie是加密过的。只有开发者才知、道这种经过加密的信息是什么意思,它里面包含了用户搜索过的关键词的信息。每个网站都会有很多这样的 Cookie,但它们是隔离开的。也就是 说,百度只能访问到百度存储在浏览器的 Cookie,微博只能访问到微博存储在浏览器的 Cookie,百度无法得到微博的Cookie,这一点由浏览器 保证。
现在我们来解释开头广告的事情。用户搜索关键词被百度保存在了 浏览器的Cookie 里,但是这个广告是出现在一个博客网站上的,按上文的理论,这个博客网站只能访问它自己存储在浏览器的Cookie,为什么能访问百度的Cookie呢?作者看了这个页面的源码,发现这个广告是博客网站的程序员从百度那里复制了一段代码放到这个页面上而展示出来 的,用户在请求广告图片时,还是去百度请求,自然百度也就能拿到带着 搜索关键词的Cookie。拿到Cookie的百度就可以根据关键词匹配它们的 广告,然后推荐给用户,这种广告因为推送的都是用户感兴趣的内 容,“杀伤力”特别大,被称为“精准广告”。 已经有成千上万的网站加入了搜索引擎的广告联盟。用户在浏览其他网站时,都有可能看到带有自己搜索关键词的广告 。
四、JSON
这还得从面向对象里的“对象”说起。它可以封装,满足程序员的洁癖;也可以继承, 满足程序员的懒惰。因此每次接到需求,都要先把能用到的所有现实里的东西抽象成对象。<font style="color:#F5222D;"> 一个对象其实就是一块内存,存储着属于本对象的一些数据。</font>当然, 它也会从“类”那里得到很多方法,这些方法大多数是对自身的数据做一 些逻辑上的操作。 比如有一个对象叫“给产品经理讲技术”公众号,里面存储了300多篇文章作为自身的数据。还有一些操作这些数据的方法,例如增加一篇文章、发布一篇文章等。 但是也有一种对象,没有什么特别的方法,存在的意义就是用来存储数据。这可比原始的存储数据的方式高级多了。例如,数组可以存一组 数据,但这组数据必须是相同类型的,比如都是整数。但是<u>对象可以存储任意类型的数据,它可以有任意个数的成员变量,每个成员变量都有自 己的类型,有的是整数,有的是字符串,有的甚至可以是另一个对象</u>。
方便归方便,对象作为一种高级的数据表达方式,在网络上传输时难免遇到问题。举个例子,微信服务器上有一个“文章”对象,它有很多成员变量,比如标题、作者、正文、留言,每个变量可以存储一部分数据。现 在用户在微信客户端上请求这篇文章,如何才能把这个“文章”对象通过 网络原封不动地传输过来呢?
众所周知,HTTP协议是基于文本的,它已经屏蔽了底层的比特数据流,转而使用更高级的字符串来传输数据。如果用HTTP协议来传输对象的话,就得想办法把对象转换成字符串,而且接收端必须能够按照规则把收到的字符串再转换成对象,这样才能达到“传输对象”的目的。 为此,**<font style="color:#F5222D;">程序员发明了JSON,它更像是一种格式,把一个对象拆开,每一个成员变量变成了key=value的形式,被写成字符串,最后用大括号把它们括起来,拿到网络上传输,</font>****<u><font style="color:#F5222D;">这个过程叫序列化</font></u>****<font style="color:#F5222D;">。客户端收到这个 JSON字符串之后,再按照相反的规则,把它拆开,取出里面所有的 key=value,包装成一个对象,这个过程叫反序列化,也就是</font>****<u><font style="color:#F5222D;">JSON的解析</font></u>****<font style="color:#F5222D;">。</font>** 所以,JSON并不是凭空想出来的高深概念,而只是为了解决“对 象”在网络上传输的问题而诞生的。这时再看它的英文名JavaScript Object Notation(JavaScript的对象标记法)
五、原子操作

六、IAAS、PAAS、SAAS

七、http协议:get和post请求
HTTP协议:
协议-超文本传输协议
规定了请求和响应的整个过程
用于定义EB浏览器与WEB服务器之间交换数据的过程
http请求:
- 一个状态行
Request URL请求路径
Request Method:GET请求方式
- 请求方式:
- GET
通常用来获取内容
请求参数默认在地址栏中
请求参数的大小由限制,一般1-8KB,不同浏览器不同
- POST
通常用来提交内容(提交表单(登录,注册,个人信息填写))
请求参数在请求实体中
请求参数大小认为没有限制
上传文件必须使用post请求
