工程师基本常识

异步IO (异步输入输出)

异步传输存在一个潜在的问题,即接收方并不知道数据会在何时到达。在它检测到数据并作出响应以前,第一个比特已通过去了。这就像有人出乎意料地从后面走上来跟你说话,而你没来得及反应过来,漏掉了最前面的几个词。所以,每次异步传输的信息都以一个起始位开头,它通知接收方数据已经到达了,这就给了接收方响应、接收和缓存数据比特的时间;在传输结束时,一个中止位表示该次传输信息的终止。按照惯例,空闲(没有传送数据)的线路实际携带着一个表明二进制1的信号,异步传输的开始位使信号变成0,其余的比特位使信号随传输的数据信息而变化。最后,中止位使信号从新变回1,该信号一直保持到下一个开始位到达。例如在键盘上数字“1”,按照8比特位的扩展ASCII编码,将发送“00110001”,同时须要在8比特位的前面加一个起始位,后面一个中止位。前端

TCP/UDP协议

  1. TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操做和多路复用。经过面向链接、端到端和可靠的数据包发送。通俗说,它是事先 为所发送的数据开辟出链接好的通道,而后再进行数据发送;web

  2. TCP(Transmission Control Protocol,传输控制协议)是基于链接的协议,也就是说,在正式收发数据前,必须和对方创建可靠的链接。ajax

  3. TCP协议能为应用程序提供可靠的通讯链接,使一台计算机发出的字节流无差错地发往网络上的其余计算机,对可靠性要求高的数据通讯系统每每使用TCP协议传输数据。数据库

  4. TCP支持的应用协议主要有:Telnet、FTP、SMTP等;编程

  5. UDP则不为IP提供可靠性、流控或差错恢复功能。通常来讲,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。后端

  6. UDP支持的应用层协议主要有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。浏览器

  7. UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非链接的协议,它不与对方创建链接,而是直接就把数据包发送过去!缓存

  8. UDP适用于一次只传送少许数据、对可靠性要求不高的应用环境。服务器

WebSocket

WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通讯(full-duplex)。一开始的握手须要借助HTTP请求完成。

优势:服务器能够主动传送数据给客户端
功能: 实现了浏览器与服务器全双工通讯

在 WebSocket API,浏览器和服务器只须要作一个握手的动做,而后,浏览器和服务器之间就造成了一条快速通道。二者之间就直接能够数据互相传送。
在此WebSocket 协议中,为咱们实现即时服务带来了两大好处:

1. Header
   互相沟通的Header是很小的-大概只有 2 Bytes
2. Server Push
    服务器的推送,服务器再也不被动的接收到浏览器的request以后才返回数据,而是在有新数据时就主动推送给浏览器。
复制代码

消息队列

“消息队列”是在消息的传输过程当中保存消息的容器。网络

  1. “消息”是在两台计算机间传送的数据单位。消息能够很是简单,例如只包含文本字符串;也能够更复杂,可能包含嵌入对象。
  2. 消息被发送到队列中。“消息队列”是在消息的传输过程当中保存消息的容器。消息队列管理器在将消息从它的源 中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;若是发送消息时接收者不可用,消息队列会保留消息,直到能够成功地传递它。

共享内存

共享内存指 (shared memory)在多处理器的计算机系统中,能够被不一样中央处理器(CPU)访问的大容量内存。因为多个CPU须要快速访问存储器,这样就要对存储器进行缓存(Cache)。任何一个缓存的数据被更新后,因为其余处理器也可能要存取,共享内存就须要当即更新,不然不一样的处理器可能用到不一样的数据。共享内存是 Unix下的多进程之间的通讯方法 ,这种方法一般用于一个程序的多进程间通讯,实际上多个程序间也能够经过共享内存来传递信息。

多线程

优势
1.使用线程能够把占据时间长的程序中的任务放到后台去处理
2.用户界面能够更加吸引人,这样好比用户点击了一个按钮去触发某些事件的处理,能够弹出一个进度条来显示处理的进度
3.程序的运行速度可能加快
4.在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种状况下能够释放一5.些珍贵的资源如内存占用等等。
6.多线程技术在IOS软件开发中也有举足轻重的位置。

缺点
1.若是有大量的线程,会影响性能,由于操做系统须要在它们之间切换。
2.更多的线程须要更多的内存空间。
3.线程可能会给程序带来更多“bug”,所以要当心使用。
4.线程的停止须要考虑其对程序运行的影响。
5.一般块模型数据是在多个线程间共享的,须要防止线程死锁状况的发生。
复制代码

线程池

组成部分
一、线程池管理器(ThreadPoolManager):用于建立并管理线程池
二、工做线程(WorkThread): 线程池中线程
三、任务接口(Task):每一个任务必须实现的接口,以供工做线程调度任务的执行。
四、任务队列:用于存放没有处理的任务。提供一种缓冲机制。
复制代码

多线程死锁问题

所谓死锁: 是指两个或两个以上的进程在执行过程当中,因争夺资源而形成的一种互相等待的现象,若无外力做用,它们都将没法推动下去。

发生死锁的缘由通常是两个对象的锁相互等待形成的。

那么为何会产生死锁呢?
1.由于系统资源不足。
2.进程运行推动的顺序不合适。     
3.资源分配不当。

产生死锁的条件有四个:
1.互斥条件:所谓互斥就是进程在某一时间内独占资源。
2.请求与保持条件:一个进程因请求资源而阻塞时,对已得到的资源保持不放。
3.不剥夺条件:进程已得到资源,在末使用完以前,不能强行剥夺。
4.循环等待条件:若干进程之间造成一种头尾相接的循环等待资源关系。
复制代码

死锁是由于多线程访问共享资源,因为访问的顺序不当所形成的,一般是一个线程锁定了一个资源A,而又想去锁定资源B;在另外一个线程中,锁定了资源B,而又想去锁定资源A以完成自身的操做,两个线程都想获得对方的资源,而不肯释放本身的资源,形成两个线程都在等待,而没法执行的状况。

ORM

对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不一样类型系统的数据之间的转换。从效果上说,它实际上是建立了一个可在编程语言里使用的“虚拟对象数据库”。 ORM有时也称为基于事实的建模,由于它把相关数据描述为基本事实。这些事实若是分割为再小的事实就会丢失信息。 ORM提供的不仅是描述不一样对象间关系的一个简单而直接的方式。ORM还提供了灵活性。使用ORM建立的模型比使用其它方法建立的模型更有能力适应系统的变化。 ORM模型的简单性简化了数据库查询过程。使用ORM查询工具,用户能够访问指望数据,而没必要理解数据库的底层结构。

数据持久化

数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称. 
数据持久化对象的基本操做有:保存、更新、删除、查询等。
使用数据持久化有如下好处:
一、程序代码重用性强,即便更换数据库,只须要更改配置文件,没必要重写程序代码。
二、业务逻辑代码可读性强,在代码中不会有大量的SQL语言,提升程序的可读性。
三、持久化技术能够自动优化,以减小对数据库的访问量,提升程序运行效率。
复制代码

微服务

简单来讲, 微服务的目的是有效的拆分应用,实现敏捷开发和部署 。
微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。
一个微服务的策略可让工做变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而知足服务等级协议。
复制代码

SPA (单页应用程序)

单页Web应用(single page web application,SPA),就是只有一张Web页面的应用。单页应用程序 (SPA) 是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序。 浏览器一开始会加载必需的HTML、CSS和JavaScript,全部的操做都在这张页面上完成,都由JavaScript来控制。所以,对单页应用来讲模块化的开发和设计显得至关重要。

速度:更好的用户体验,让用户在web app感觉native app的速度和流畅,
MVC:经典MVC开发模式,先后端各负其责。
ajax:重前端,业务逻辑所有在本地操做,数据都须要经过AJAX同步、提交。复制代码
相关文章
相关标签/搜索