技术名词
通信:
就是只信息传输这个操作,比如客户端和服务端之间的通信
上报:
一般是指上报服务端,也就是数据从客户端流向(上报)到服务端
拉取:
是指用户打开app之后,客户端向服务端请求数据的过程。
并发量:
有多少用户在同时使用产品,请求数据。
丢包:
数据在上报过程中,由于网络异常导致的数据丢失。
上线:
功能测试没问题之后,研发打包发布到各大应用市场及app store,供用户使用。
cookie:
网页中记录用户访问及操作的一种缓存;
缓存:
用于临时存放已加载的内容
URL:
就是网址的意思;
vpn:
上网代理,一般用于在公司外部可直接访问公司内网;
HTTP状态码(HTTP Status Code)
表示网页服务器响应状态的3位数字代码。
1开头的为消息类,代表请求已被接受,需要继续处理;
2开头的为成功类,代表请求已成功被服务器接收、理解、并接受;
3开头的为重定向类,代表需要客户端采取进一步的操作才能完成请求;
4开头的为请求错误类,代表了客户端看起来可能发生了错误,妨碍了服务器的处理,常常遇到的403、404属于此类。
Native App:
基于智能手机本地操作系统如iOS、Android、WP并使用原生程式编写运行的第三方应用程序。能够调用移动硬件设备的底层功能,比如个人信息,摄像头以及重力加速器等等。
Web App:
基于web的系统和应用,运行于网络和浏览器之上,目前多采用h5标准开发。只能使用有限的移动硬件设备功能。
Hybrid App:
native app 与 web app的混合,在native app里内置浏览器,合适的功能页面采用网页的形式呈现。既能保证流畅性的体验,就满足变更复杂等需求,实现动态运营。
App消息推送(Push):
对用户移动设备进行的主动消息推送的行为,基于app和后台的联系来实现,app和后台的连接方式分为两种,Pull(轮询),即不断地向后台请求;Push,即维持一条长连接通道(心跳机制)。
数据交互:
即前端和后台的数据交互,大致可分为四种:
1)使用cookies对象(Cookie是服务器保存在客户端中的一小段数据信息),前提是客户端的浏览器需允许使用cookies。
2)使用session对象(session对象表示特定会话session的用户数据),客户第一次访问支持session的Java Server Pages网页,服务器会创建一个session对象记录客户的信息。
3)利用request重定向,设置setAttribute(重定向发生时,服务器会跟浏览器交互,它会让浏览器重新生成一个新的请求发送给服务器)。
4)利用Ajax进行异步数据请求,得到的数据可以以json或xml格式返回,便于处理。
HTML、CSS、JavaScript:
网页主要由 结构( Structure) 、 表现( Presentation) 和行为( Behavior)三部分组成。
HTML,即Hyper Text Markup Language,定义网页的结构。
CSS,即Cascading Style Sheets,定义网页的样式,样式定义如何显示 HTML 元素。
Javascript,是一种脚本语言,定义网页元素的行为。
程序、进程和线程:
程序是指令和数据的有序集合,是一个静态概念。
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
线程(Thread)是程序执行流的最小单元。线程是进程中的一个实体,是被系统独立调度和分派的基本单位。
同步、异步和回调:
同步调用,即当程序1调用程序2时,程序1停下不动,直到程序2完成回到程序1来,程序1才继续执行下去。
异步调用,即当程序1调用程序2时,程序1径自继续自己的下一个动作,不受程序2的的影响。
回调(callback)和异步调用关系密切,通常使用回调来实现异步消息的注册。
浏览器渲染:
对从服务器加载到的资源(HTML、JS、CSS、图象等),进行语法解析,构建渲染树(对各个元素进行位置计算、样式计算等等),然后根据渲染树对页面进行渲染(可以理解为“画”元素)。
流(stream):
在C++,Java等编程语言中,流是指用来从另一个地方不间断地获取数据。
缓存系统:
一般分为两级,
一级缓存也叫内存缓存,存取速度更快,程序退出数据就消失,不可一直保留,是一种以空间换时间的程序设计;
二级缓存也叫硬盘缓存,容量大一点,速度慢一点,程序下次启动时候,依然可以使用。
在一二级缓存超过某个阈值时,一般会使用LRU(Least Recently Used)算法进行淘汰。
定位:
室外定位使用GPS,地球上任意一点都可以同时观测到4颗卫星,以保证卫星可以采集到该观测点的经纬度和高度。
室内定位,一般采用基站和WIFI定位。运营商可通过查询手机连接的基站位置定位,WIFI定位则是通过手机连接的无线路由器的MAC地址。
“熔断”:
如果【服务提供方】频繁超时,就把【服务调用方】调用【服务提供方】的请求,直接短路掉,不实际调用,而是直接返回一个mock的值。等【服务提供方】的服务恢复稳定之后,重新调用。
推荐算法:
常见的为内容关联算法和协同过滤算法。
内容关联算法基于对item内容的理解,提取内容形成taglist,剩下的事情和搜索引擎类似,通过merge用户喜爱的item,匹配tag进行召回,优势在于无需冷启动。
协同过滤算法的原理是汇总所有
数据库(DataBase):
按照一定的数据结构来组织、存储的数据的“仓库”。常见类型为关系型和非关系型。
关系型把复杂的数据结构归结为简单的二元关系(即二维表格形式),如Oracle和MySQL。
非关系型即NoSQL数据库,是对关系型数据库的补充,特点是模式自由、支持简易复制、简单的API等。
接口:
提供具体能力的一个标准和抽象。通过接口的设计,一个系统被清晰定义成为了多种能力的集合,每一个开发者只关注自己模块的实现就好了,调用者负责完成整个程序的业务逻辑。
热补丁(hotfix):
通过线上推送一段修补 BUG 的代码,终端无需更新版本直接运行,可以做到在用户无感知的情况下,修复问题。
该技术避免了当 App 发布之后,突然发现 bug 需要进行紧急修复时需要完成的重新打包 App、测试、向各个应用市场和渠道换包、提示用户升级、用户下载、覆盖安装等一系列复杂的操作。
“撞库”攻击:
通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。
TCP/IP协议:
即TCP/IP协议族,TCP(传输控制协议)和IP(网际协议)为该家族中最早通过的标准。协议族可以分为四层:最上面的是应用层了,如http,ftp等协议;第二层是传输层,TCP和UDP协议在这个层次;第三层是网络层,IP协议就这一层,它负责对数据加上IP地址和其他的数据以确定传输的目标。第四层是数据链路层,这个层次为待传送的数据加入一个以太网协议头,并进行CRC编码,为最后的数据传输做准备。
Ajax:
即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML)。是一种无需重新加载整个网页的情况下,能够更新部分网页的技术。
DOM:
Document Object Model(文档对象模型),在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。
HTTPS:
Hyper Text Transfer Protocol over Secure Socket Layer(超文本传输安全协议),简单来讲即是HTTP的安全版,在HTTP下加入SSL层,广泛用于万维网上安全敏感的通讯,例如交易支付方面。
URL:
即统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
可以分解为:协议(如http://)+ 主机名(如http://v.qq.com)+ 路径和文件名(如/a/20160221)+ 参数(如?a=1&b=2,目的是带上一些本地信息给服务器)+ 端口号。
数据埋点:
即在正常的功能逻辑中添加统计逻辑。有客户端(前端)埋点和服务端(后端)埋点之分。
客户端的埋点是记录的用户在客户端的操作记录,服务端埋点则是记录的客户进行服务器请求的日志。
客户端埋点一般都是采取key-value的形式,key代表某个事件,value代表事件发生的次数、状态值等。
生产者与消费者模式:
在一个系统中,存在生产者和消费者两种角色,他们通过内存缓冲区进行通信,生产者生产消费者需要的资料,消费者把资料做成产品,从而实现服务的解耦。在这个模型中,最关键就是内存缓冲区为空的时候消费者必须等待,而内存缓冲区满的时候,生产者必须等待。其他时候可以是个动态平衡。
SDK和API:
SDK即软件开发工具包(SoftwareDevelopmentKit),第三服务商提供的实现软件产品某项功能的工具包。
API即应用编程接口(Application Programming Interface),是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的API而使操作系统去执行应用程序的命令(动作)。
架构:
Architect,可以类比建筑架构,抽象来看包含以下几个层次:
1)根据要解决的问题,对目标系统的边界进行界定;
2)对目标系统按某个原则的进行切分。切分的原则,要便于不同的角色,对切分出来的部分,并行或串行开展工作,一般并行才能减少时间。
3)并对这些切分出来的部分,设立沟通机制。
4)保证部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作。
第三方登陆:
实质是在OAuth2.0协议的基础上,利用外部的标识来获取帐号的内部标识然后完成登录的过程。
具体的讲,就是将三方的帐号绑定到产品自身的帐号上,当查询到用户第三方的帐号已经绑定了平台的某个user_id时,直接登录对应的帐号。
外部标志:
用来使用用户身份的标志,可以是用户名,手机号,邮箱等,每一个外部标识一定和一个内部标识相关联用以确定一个用户。需要注意的是,外部标识可能改变。如 open_id,union_id。
内部标志:
即产品中用于标识用户唯一性的标志,例如user_id,必须有,不可更改且唯一,用户一般接触不到内部标识。当一个内部标识建立后,用户所有的数据资产都会绑定到这个内部标识上。如 user_id、app_id。
Unix时间:
用一个正整数来表示时间与基准时间之间相差的秒数,常使用NTP协议(网络时间协议)来把计算机的时钟同步到世界协调时UTC。
控件、组件和框架:
涉及到程序设计中的粒度划分。
控件表示程序设计中最小粒度的可复用可编程的部件,比如常见的搜索框、按钮、单选框、复选框等。
组件由控件组合而成从而具有一定能力/功能,它是功能复杂的最小单位。比如App的TabHost。
框架是由很多控件、组件组装在一起的,并且能够在某一领域完成一系列操作。
加密:
对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为"密文",使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。可分为对称加密和非对称加密:
对称加密即单密钥加密,双方用同一个密钥来实现信息的加密和解密;
非对称加密使用两个密钥(公钥和私钥),公钥可以对外公开,私钥对外保密,公钥加密的信息,只有私钥能解密。
脚本:
Script,普通文本文件,是确定的一系列控制计算机进行运算操作动作的组合。
MVC模式:
即模型(Model)-视图(View)-控制器(Controller)。用一种业务逻辑、数据、界面显示三者相分离的方法来组织代码。
Model 建立业务规则模型,该层返回的数据相对中立,可以提供给不同的页面。
View 即用户看到并与之交互的界面,在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操纵的方式。
Controller 接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。
示意图:
用户首先在界面中进行人机交互,然后请求发送到控制器,控制器根据请求类型和请求的指令发送到相应的模型,模型可以与数据库进行交互,进行增删改查操作,完成之后,根据业务的逻辑选择相应的视图进行显示,此时用户获得此次交互的反馈信息,用户可以进行下一步交互,如此循环。
跨域与同源:
跨域即不同源。同源即同域名,同端口,同协议。浏览器的同源策略限制了来自不同源的“document”或脚本,对当前“document”读取或设置某些属性,从一个域上加载的脚本不允许访问另一个域的文档属性。
重构:
在保留现有功能的基础上,重新梳理软件中的代码结构,让原本杂乱无章的代码重新具有可读性、结构性和拓展性。
增量更新:
传统做法下重新下载安装一个最新版的apk文件,比较耗流量,不利于用户体验。增量更新只下载当前app版本与最新版本的差异内容,然后与当前版本就行合并成最新版本再安装。
响应式设计:
是指根据不同设备浏览器分辨率或尺寸来展示不同页面结构、行为、表现的设计方式。实现上包含了响应式布局、响应式html和css、响应式媒体、响应式javascript
抽象、封装、类、实例:
抽象是面向对象思维的最基本逻辑,是对问题领域进行分析,抽象出共性。封装是把对象的属性和行为(数据)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。类是对属性和功能集合的静态描述。实例是真正的载体和功能的执行者。
继承:
继承是从已有的类中派生出新的类称为子类,子类继承父类的数据属性和行为,并能根据自己的需求扩展出新的行为,提高了代码的复用性。
“锁”:
和资源占用相关的概念,为解决对同一资源操作的时间重叠问题,将「并行执行」变更为「顺序执行」。
程序中的数据:
常量(“写死的”)、变量(赋值之后才能使用)、整型、浮点、字符、数组(同类变量的集合)、字符串。
静态网页和动态网页:
静态网页是标准的HTML文件,是指没有后台数据库、不含程序和不可交互的网页。
动态网页则能与后台数据库进行交互,数据传递,是结合了HTML以外的高级程序设计语言和数据库技术进行的网页编程技术生成的网页。
MapReduce:
是面向大规模数据处理的并行计算模型和方法,将大量数据分解为独立的单元执行,然后将结果归并在一起,即先Map(映射),然后Reduce(归约)。
端口:
Port,是设备与外界通讯交流的出口,分为物理端口和虚拟端口。虚拟端口指计算机内部或交换机路由器内的端口,不可见,如网络数据收发用的端口号。
栈和队列:
栈是一端受限,一段允许进行操作的线性表,遵循先进后出。
队列也是一种特殊的线性表。不同于栈所服从的先进后出的原则,队列的原则是先进先出。
“引擎”:
是一个软件产品中,最基础最核心的一个组件。比如搜索中的搜索引擎,实现最核心的爬虫、分词和索引;
游戏引擎是用来开发游戏的工具和组件。
长连接:
连接是指客户端和服务器基于TCP/IP协议联系起来并获取数据(通常三次握手建立,四次握手释放,所以每个连接的建立都是需要资源消耗和时间消耗的)。
短连接是指通讯双方有数据交互时,就建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。
长连接是指建立的连接长期保持,不管此时有无数据包的发送,这时为给长连接保活,一般会定时向被检测系统发送心跳包,检测系统是否存活或者网络链路是否通畅。
位图和矢量图:
位图使用像素点来描述一张图片,矢量图由点、线、多边形等图元构成(使用数值和方程式进行描述)。
表单:
在网页中主要负责数据采集功能。一个表单由三个基本组成部分:
表单标签(用于申明表单,定义采集数据的范围,HTML中的)
表单域(包含了文本框、密码框、复选框、单选框和下拉选择框等)和表单按钮。
URL Scheme:
苹果给出的一个可以让app相互之间可以跳转的协议。
“观察者模式”:
Observer,又称为源-收听者(Listener)模式,是软件设计模式的一种。
在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。
观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。
SQL注入攻击:
由于代码设计中没有对用户输入数据的合法性进行判断,用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据。
正则表达式:
即Regular Expression,是对字符串操作的一种逻辑公式。
向前兼容、向后兼容:
向前兼容即Forwards Compatibility,是对未来还没有做好的版本兼容。向后兼容即Backward Compatibility,是对已经发出去的老版本兼容。
状态机:
描述一个事物多个状态之间相互切换关系的数学模型(常用有向图来描述),构成要素为现态(现在的状态)、次态(一定动作后达到的状态)、条件(执行动作的前提)、动作。
序列化:
Serialization,将对象的状态信息转换为可以存储或传输的形式的过程。通俗来讲,即是把数据对象转化为二进制。
JSON:
JavaScript Object Notation,是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
Instant App:
为了让人们能够像点击链接那么简单,节省掉安装App的痛苦,最快速度、最少流量的消耗,让用户体验到App级的用户体验,Google于2016年的Google I/O大会,发布了该技术,同年9月21日,微信小程序公开内测,但是二者在体积和页面解析(HTML vs Java)速度上有所不同。