当我们打开一个网页或 APP时,这背后都运用了哪些技术来让这个网页和 App 的内容呈现在浏览器和手机上?驱动这些展示背后的技术名词都是什么?各自有着怎样的优缺点,彼此间是如何协作和运转的,以及产品经理如何合理地评估技术能力和开发难度?这中间涉及到的技术知识又是什么?HTML、CSS、JavaScript、Java、PHP、PYTHON、HTTP服务器、应用服务器、数据库,都是什么?
作为产品经理,我们试图用产品的语言来说明下以上问题,但我的理解也并不都一定正确,为什么这么说,因为技术是一个太宽太广的领域,一个人终其一生也不过在某一技术领域有所精湛,做软件的不精通硬件技术,做硬件上层技术的不精通底层技术,写PHP代码的不写JAVA等,但我们在工作中确实会需要到一些相关的知识,才能更好的和工程师进行沟通,当然作为产品经理,我们也不需要具体理解技术的实现,仅需要知道有这项技术即可,知道其基本原理更好。
技术元素简介
Research and Development engineer,研发工程师,缩写为RD,对某种不存在的事物进行系统的研究和开发并具有一定经验的专业工作者,或者对已经存在的事物进行改进以达到优化目的的专业工作者。
技术是第一生产力,技术在进化着这个世界,工业革命,信息革命等快速发展的时代都是以技术更新推动着世界的发展,科学技术正在快速改变着我们生活的方方面面。
我们先来看看一般技术部门的架构
运维属于公司的基础保障部门,负责公司所有跟计算机相关的服务维护,甚至修电脑,然后是前端、后端,前端就是我们能看到的PC的网页以及安卓APP和苹果IOSAPP,前端我们可以说是显示层,那后端就是把逻辑处理好给到前端进行展示,后端一般也叫服务端,那测试就是对工程师开发的代码进行校验的团队,符合预期就可以上线,有问题修改,直到正确,那大数据呢?大数据就是对公司所有数据进行收集分析使用的部门,一般中大型公司才有设有单独的这个部门。
那一个技术人员和一个产品人员分别是如何理解产品的?
产品经理可以从五个维度去考虑一个产品,重点关注是用户、市场、公司资源、产品目标、功能等方面进行思考,小到页面功能大到市场定位,找出最优解去设计产品。发现一个问题,并试着找到问题的解决方案,并往下执行试验,就是一个产品经理的能力所在。产品经理理解产品可以说是用户体验的5个层次,之前我们单独讲过。
概念层——愿景与目标
范围层——竞品、产品功能与内容需求
结构层——交互设计、信息架构
框架层——界面设计、导航设计、信息设计
表现层——视觉设计
技术人员是如何理解一个产品的,大概也可以分为5层,如下:
逻辑层:把产品需求翻译成逻辑,即流程图、状态图、逻辑图、时序图。理清楚业务流程与功能模块;
实现层:具体的函数方法,即代码。
接口层:各功能、页面、模块之间交互的通道。产品往往会涉及到多个业务模块的交互,就是你传给我什么数据,我给你什么数据以及状态的确认。
数据层:程序执行的结果,即通过写入或读取对数据库的交互操作,需要了解一些数据库知识。
架构层:技术的技术架构、调用关系、技术规范等。我们需要了解技术的组织结构即可,可适当了解公司的技术架构。越是高级人员,架构能力越强,越需要。
所以对于产品,逻辑层是产品人员和技术人员建立连接的第一层,需要我们一定要将产品逻辑梳理清晰,接口层、数据层、架构层是能让彼此沟通更加顺畅,实现层了解即可;
为什么懂技术
产品经理在思考产品时会优从用户使用产品的场景出发,从场景出发设计产品功能,包含了用户常规的使用场景及异常使用场景,而技术人员会优先从产品功能的实现步骤角度出发,实现某一功能需要的步骤分别是什么,每一步又可以拆分成子步骤,子代码等,粒度更细,逻辑性更严谨。所以路径推理的技术思维和用户场景的产品思维,必然会各自站在各自的角度去分析和讨论问题,难免会产生差异,产品经理讲的是A,技术理解的是B,就会使产品的最终开发出现问题。所以产品经理如果能从技术的角度多考虑一些,会让产品和技术的沟通更加顺畅一些,懂技术不是产品经理的必备项,但是一定是加分项。产品经理懂技术才能更好的实现一下三点:
周全产品可实现性,更深层的考虑产品的实现。以技术的角度简单判断方案是否可行,而不至于方案总是被推翻,总是在改需求;
降低技术沟通成本,提高工作效率。如提前确认好接口字段及接口人,页面内容是原生还是H5还是混合,数据是同步给还是异步给等;
需求评审会高效有序;
需要懂哪些技术
举个例子,我们去餐馆点餐,你只需要报一下菜名“鱼香肉丝”,然后后厨就会进行做菜,做完后就会把菜呈现给我们。如果我们只是客户,我们不需要关心整个执行过程,只需要等着上菜就行,如果我们是餐馆老板呢?就需要知道整个执行的流程。这就像一个APP,我想购物了,就在应用商店下载了淘宝,然后进去选好商品,支付购买即可,如果你是淘宝APP的产品经理呢?需要做什么呢?对于产品,如果作为用户我们只要用这个产品就可以,那作为产品经理呢?我们就需要知道整个产品设计的过程,甚至知道其中都用了哪种技术,分别耗时多少,难易程度等。现在我们就从计算机的最底层,用最简单的语言陈述下计算机技术。
计算机的构成:
1、最底层可以说是硬件,通过硬件来支持上层操作系统的运行,计算机系统的硬件结构主要由四部分组成:控制器、运算器、内存和输入输出设备,其中,控制器和运算器统称为中央处理器,简称CPU,它是计算机硬件系统的指挥中心,包括控制器和运算器两个部件,其中,控制器的功能是控制计算机各部分协调工作,运算器则是负责计算机的算术运算和逻辑运算。
2、中间层是操作系统, 是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置 内存 、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。同时操作系统也提供一个让用户与系统交互的操作界面。操作系统的类型非常多样,不同机器安装的操作系统可从简单到复杂,可从移动电话的嵌入式系统到超级计算机的大型操作系统,常见的有Windows、MAC、IOS、Android。
3、上层是浏览器、桌面程序、APP程序、应用程序,然后基于网络服务实现数据的交互,而互联网产品也是在这一层发挥的的作用,产品经理负责这一层产品的设计,技术人员负责产品程序的开发。
那什么是程序?程序(program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。程序的执行是为了实现预期目的而进行操作的一系列语句和指令,一般分为系统程序和应用程序两大类。
那用户通过程序访问数据,数据是如何实现传输的呢?这时我们就要了解下B/S结构和C/S结构了。目前我们常见的是B/S结构,即浏览器和服务器架构模式,它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。
C/S结构体系是一种软件系统体系结构,通过将任务合理分配到Client端和Server端,降低系统的通讯开销,可以充分利用两端硬件环境的优势。早期的软件系统多以此作为首选设计标准。
B/S架构是WEB兴起后的一种网络架构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。
如上图为典型的B/S结构,用户通过电脑、手机、平板电脑访问互联网,互联网通过服务器向数据库获取数据并将计算结果再通过网络吐给电脑、手机、平板电脑的浏览器,浏览器再展示给用户查看。
用户通过设备上的产品访问时用到的技术知识有网站开发语言(HTML、CSS、Javascript)、IOS/Android软件包开发、原生/H5/混合等,产品与服务器进行数据交互时涉及到的技术知识:后端服务开发Java、PHP、PYTHON等、数据库(结构性/非结构性)、HTTP请求等。接下来我们来理解下一个网站/APP是如何在运行的,也可以说是应用程序如何和服务器、数据库进行交互呈现视图给到用户查看的过程,这个过程中涉及到的一种软件设计模式:MVC
MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
MVC 模式的目的是实现一种动态的程序设计,简化后续对程序的修改和扩展,并且使程序某一部分的重复利用成为可能。MVC 模式通过对复杂架构的简化,使程序的结构更加直观,软件系统在分离了自身的构成部分的同时也赋予了各个基本部分应有的功能,专业人员可以通过自身的专长进行相关的分组:
模型(Model)是应用程序中用于处理应用程序数据逻辑的部分。服务端开发将具体的业务逻辑及业务规则的计算进行代码写入,如将手机号进行判断是否已注册,已注册返回前端当前手机号已注册,未注册则生成新的账号ID,并做入库记录;
控制器(Controller)是应用程序中用于处理应用程序数据逻辑的部分。从界面(view)读取用户输入的数据并处理转发,也就是将用户输入的指令进行转发,向业务模型(model)发送数据。比如将你输入的手机号进行读取与向后服务器传输;;
视图(View)是应用程序中处理数据显示的部分,就是呈现给用户的界面,包含页面元素、布局等,如注册页的文字、图片、输入框等;
这三个层次共同组建了一个网站/APP的运行,该模型属于一种将业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
前端工程师,一般负责VC的部分;
后端工程师,则负责M的部分;
数据库由单独的DBA团队负责;
但各个公司对前端和后端的工作划分并不完全一致,有些工作前后端都可以做。
那什么是前端,什么是后端?
什么是前端:凡是运行在用户设备上的技术都可以称为前端技术。如浏览器网页、PC客户端,Andriod/IOS应用程序APP等。
什么是后端:是负责将页面需要的内容通过数据包的形式通过网络传送到前端,同时后端还可以对前端提供的数据进行计算和保存。通常包含HTTP服务器、应用服务器、数据库。
前台和后台的区分:都是指前端,只不过针对的用户不一样,前台主要针对的是企业外部用户,后台主要针对的是企业内部用户,前台和后台是一个相对概念,如电商的前台和商家的后台和企业后台。
前台主要做的就是内容展示、页面布局、页面交互、提交信息等,后台主要负责管理,包括任务流页面(条件搜索、列表页、详情页(审核)、增删改查导)、权限管理等;
前端:包含前台、后台,都是给用用户进行使用的地方,后端是技术的地盘,一般我们都看不到,包含服务端、数据库、运维等内容。
那前端、后端都是有什么样的编程语言呢?接下来我们就分析一下。
首先要了解的什么是编程语言。编程语言是程序设计人员与计算机进行交互的指令集,在计算机中任何逻辑和表达都可以通过编程语言来实现。技术人员就是通过编程语言实现前端/后端不同程序的执行的,那前端语言有哪些?前端语言主流的包含:HTML、CSS、Javascript、jQuery、Bootstrap、Ajax,下面我们一一认识下:
Html:全称HyperText Markup Language,是一组标签和文本的组合,是搭建网页的基础语言。代码简单,功能强大,什么平台都能用,什么电脑都能用,它已经包含了网页常见的所有元素,后面我们还会讲到。
CSS:CSS又称叠层样式表,能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。通过CSS能让页面排版更精美,是目前基于文本展示最优秀的表现设计语言。
JavaScript:通过嵌入到Html中,使网页拥有更加炫酷的交互,增加网页的动态功能,可以在多平台下运行,如Windows、Linux、Mac、Android、iOS等。Javascript 就是用来给 HTML 网页增加动态功能,实现更炫酷的交互。
现在我们看到的PC端或APP内部需要加载的页面信息,几乎都是通过以上三种语言开发完成的。
jQuery是一个Javascript库,主要面向查询的。简单理解就是javascript里面那些需要用一行行代码实现的体力活,在jQuery里面可以直接打包成模块,调取对应的接口使用,解放了开发者更多的时间。这种模块化的使用方式让开发者可以很快就开发出酷炫的页面。jQuery 使用户能更方便地处理 HTML ,它能够使用户的 HTML 页面保持代码和 HTML 内容分离,通过 jQuery ,可以不用在 HTML 里面插入一堆 JS 来调用命令,只需要定义 ID 即可。
Bootstrap:也是针对Javascript进行封装的库,它在jQuery的基础上进行更加人性化的完善,使用起来更方便。它有很多现成的组件,比如导航栏、下拉菜单、按钮,都定义好了样式和交互,直接成套拿来用就行了。
Ajax:是指一种创建交互式网页应用的网页开发技术,一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页在不使用 Ajax时,需要更新内容,必须重载整个网页页面。
关于前端,我们还会经常听到一个词,响应式设计,那什么是响应式设计?响应式设计就是让同一个网页可以在不同设备上呈现出不同的显示效果,主要是通过CSS来实现的。如图在不同的浏览器宽度情况下,页面的展示效果不一样。
那前端应用是如何向后端服务器发送和接收数据的呢?也就是数据是如何给到前端的?答案是需要后端服务,所有在前端访问的数据,大部分都是通过后端服务提供的,后端服务主要包括三项:HTTP服务器、应用服务器、数据库。
1、HTTP服务器:作为传输数据通道,简单可以认为是网通、电信、移动提供的数据服务,有了这个服务我们才能实现数据的对接传输。HTTP服务器基础协议就是TCP/IP,是Internet最基本的通信协议,通过这个来实现点对点的通信。我们访问的网站/App就是通过通信协议和数据交互格式的约定,进行数据的传输流转的,通信协议有HTTP/HTTPS、WAP、websocket等,数据交互格式主要有三种:PB、JSON、XML。
XML:提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。XML的简单使其易于在任何应用程序中读写数据;
PB:Protocol Buffer,是Google 定义的一个数据传输协议,以简洁,省流,易用的二进制数据进行传输。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。
JSON,JavaScript Object Notation, JS 对象标记是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。
通俗点说Web端大部分数据交互是通过http的数据包进行数据交互,移动端大部分是通过JSON的数据包进行数据交互;
2、应用服务器:对数据进行逻辑运算的部分,也就是技术负责的主要部分,比如阿里云、腾讯云或自建的机房都属于应用服务器,我们的服务端的技术就是将写好的代码上传到应用服务器上被使用的。在互联网公司服务端的开发一般能占到开发团队一半的人数。
而产品经理在设计产品时,更多的是客户端产品,但客户端之间的信息互动和数据传输需要通过服务端完成,服务端起到了中间核心处理的作用,负责处理复杂的业务逻辑并对数据进行管理。所以我们更应该了解服务端的技术都在用什么编程语言写代码。目前主流的服务端编程语言如下:
那有没有不通过后端服务实现数据的访问的?当然有,那就是无后端,无后端(noBackend)致力于让构建一个应用的过程变得更简单,实际上是通过前端代码抽象成后端接口,一些移动应用初期可以没有后端,实现项目的快速启动,如果后期业务逻辑复杂之后再寻找合适的后端工程师迁移也不迟。无后端的工具有Facebook Parse, Google Firebase以及国内的LeanCloud。
3、数据库(DB):运行在服务器上,按照数据结构对数据进行存储、组织和管理的库,通过程序可对数据库进行增删改查等操作。在公司一般叫做DBA(DataBase Administrator,简称DBA),它就是后厨仓库,里面存放着各种原材料(白菜、萝卜、西红柿等),并按某种关系分门别类的进行摆放管理,映射到数据库就是将不同类型的数据存储于不同的数据库,并通过不同的映射关系进行信息的管理。
数据库的形式分为关系型和非关系型。
关系型数据库:是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相关联连接的二维行列表格组成的数据库。类似于多张有关系的excel表格。我们最常见的关系型数据库是MySQL,MySQL是一个关系型数据库管理系统,可以通过SQL语句(即结构化查询语言,是一种操作关系数据库的编程语言)进行数据获取。
当前主流的关系型数据库还有Oracle、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL、浪潮K-DB等。
优点是体积小、速度快、成本低,一般中小型网站的开发都选择 MySQL 作为网站数据库;
缺点是在海量访问并发和海量数据管理时的力不从心,而且对数据库的升级和扩展很麻烦,往往需要停机维护和数据迁移。
非关系型数据库:即NoSQL,泛指非关系型的数据库,是一种相对松散且不可按照严格的结构规范进行存储的数据库。它是随着互联网web2.0网站的兴起而产生的,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0网站时已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。非关系型数据库以人为单位,数据可增加个人元素,这个我们可以比作每个人的档案袋,每个人的基础数据是一样的,又可以在基础数据的基础上增加个性的档案数据信息。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
优点:性能高,可扩展性强;
缺点:维护成本高、不提供对SQL的支持、不提供关系型数据库对事物的处理;
非关系型数据库有:MongoDB、CouchDB等;
MongoDB:是一个基于分布式文档存储的数据库,介于关系型数据库和非关系型数据库之间,他可以支持很松散的数据结构,同时又能支持关系型数据库表单查询的大部分功能,所以在一定程度上集成了两者的优点;
CouchDB:是一个开源的面向文档的数据库管理系统,可以通过 RESTful JavaScript Object Notation (JSON) API 访问。
当然数据库还有介于关系型和非关系型之间的,当然这里的内容太深奥,就不再延展,我们知道有这样的数据库即可。
Redis也是我们经常从技术口中听到的一个词,Redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库,可用作数据库,高速缓存和消息队列代理,并提供多种语言的API。
数据是互联网时代最重要的资产,尤其是互联网公司,阿里巴巴拥有大量中小商家的数据和数以万计的商品数据,得意称雄电商。腾讯具备大量的用户关系数据,这些用户关系数据构建了一个社交生态体系,使得微信能在短时间内呈现爆发的态势,通过社交关系衍生的场景和价值非常庞大。内容型产品有内容数据,例如文字、视频、音频等,交易型产品是用户行为数据和交易数据,都是企业的数据资产,企业的竞争价值所在。
那除了这些还会存在技术和技术之间进行交流的时候,通常是xx提供一下接口,那接口是什么?数据接口是指客户端和服务端进行数据传输和交互的数据协议,是一种数据交换的标准;
关于接口我们听到说的多的有API、MOA、同步调用、回调和异步调用,下面我们一一来认识一下:
API泛指实体把自己提供给外界的一种抽象化物,用以由内部操作分离出外部沟通的方法,使其能被内部修改而不影响外界其他实体与其交互的方式,是数据传输的一个通道。好比楼房里的电线,看不见,但需要有电线才能通电。而产品的功能和功能之间需要数据交互,建立连接的通道就叫API接口,而MOA目前是让开发可以快速的开发API的类后端;
接口调用方式包含同步调用、回调和异步调用,同步和异步的区别就在于在下达了执行任务的命令后,是等到执行完成之后才能得到结果呢,还是马上就知道了结果;
大部分情况下技术之间的沟通障碍都是因为接口问题导致的,所以产品要把握住核心接口,接口中都包含什么数据字段,也就是定义好接口传输的信息;
我们了解了一个互联网产品的基本实现原理,再来看看移动应用程序中包含的页面类型,主要为三种:原生、H5、混合式
原生也叫Native,无需借助服务器,即可进行运行,完全基于移动平台写代码,包含iOS应用和安卓应用。
优点:外观最好,用起来性能最佳,实现的功能最多;
缺点:开发耗时,用户需要更新版本;
原生页面适合对速度、性能特别敏感的应用或功能,如拍照、视频类。通常的开发周期为4-6周迭代一个版本,APP上线审核一般需要一周时间。
iOS应用是基于iOS应用平台的开发语言实现的,包含:Xcode/Objective-C/Swift,
Xcode:运行于苹果公司的Mac操作系统下,是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序。Xcode 具有统一的用户界面设计,编码、测试、调试都在一个简单的窗口内完成。
Objective-C:是编写iPhone应用程序的主要编程语言,包括iOS操作系统、iOS应用程序、Mac OS X操作系统、Mac OSX 上的应用程序。Objective-C语言的流行要归功于iPhone的成功。
Swift是苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。
iOS应用程序后缀名:dmg、ipa,dmg是MAC电脑的应用程序,ipa是iPhone手机的应用程序;
安卓APP是基于安卓应用平台的开发语言实现的,包含:JDK/Eclipse/Java
JDK即Java Development Kit,JDK是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是一切java应用程序的基础,所有的java应用程序是构建在这个开发工具之上的。
Eclipse是一个开放源代码的、基于Java的可扩展开发平台,安卓程序的一种集成开发环境。
Java是安卓程序的主要开发语言,安卓应用程序后缀名为Apk,发布时需要一个特殊的签名文件为这个安装包文件签名,签名的目的是确保这个安装包的唯一性和安全性。顺便说一下Windows的应用程序的后缀名为exe
关于系统权限控制,安卓授权发生在应用安装阶段,在安装时提示用户同意相关权限协议才能安装,IOS则是在用户使用产品的过程中进行授权的。从用户体验和安全上来说,IOS的权限管理会更好,当具体用到某一个需要授权的功能时,再提示授权通知,能引起用户的关注。
H5即HTML5,HTML是万维网(WWW)的核心语言,H5是HTML的第五次重大修改。可以只编写一次就跨平台运行,更快做跨屏适配,效果很酷炫,但也有一些功能的局限,由于HTML5 必经要经过浏览器这个中间层,所以在性能上多少会有些损失,所以如果你的应用对性能特别敏感,原生就会是比较好的选择。通常开发周期为1-2周;
HTML共计经历了5次重大修改,目前为第五次;
HTML1.0-1993年6月;
HTML2.0-1995年11月
HTML3.2-1997年1月14日
HTML4.0-1997年12月18日,web1.0门户时代崛起;
HTML 4.01(微小改进)——1999年12月24日,W3C推荐标准
Web2.0 2005 – 2010 年这段时间,HTML5 中的新标准主要是为了取代 Flash。10年后又进入了移动开发时代,所以 HTML5 又花了将近5 年时间制定各种针对移动平台的标准。2014年10月29日,万维网联盟宣布,经过接近8年的艰苦努力,该标准规范终于制定完成。如下图就是一个典型的用H5做的页面。
混合式(Hybird APP)就是将H5页面嵌入到APP的原生器中,目前大部分的APP都是混合式的。通常开发周期为3-4周一个版本迭代。
对于一些用户使用频率高、体验要求高的产品模块,使用Native实现会比较合适,对于使用频率低、内容变化频繁的模块使用H5实现,如果需要修改Native的模块就需要发版更新解决了。
那浏览器(或APP)与服务器之间是如何辨识用户的呢?为什么浏览器就知道是A在登录而不是B在登录呢?为什么从服务器里获取到数据后就知道给A而不给B呢?也许你会说用户A请求,当然服务器返回的就是A请求的数据,那你知道原理是什么吗?浏览器(或APP)与服务器里的A怎么就认识了呢?这里我们再讲几个技术口里经常提到的概念:cookie/session/token。
在公司团队里一般是用户服务组会提供注册和登录服务,提供用户的注册、登录授权标识,而这几个服务就与cookie/session/token三个技术密切相关:
Cookie:是一种数据,由服务器生成,发送到你的浏览器,然后由浏览器保存到本地的某个文件夹里,等你下次再登陆这个网站时,浏览器就会把你的Cookie发送给服务器,这时服务器就知道了“原来又是你在访问了”。一条Cookie的生命一般是一个轮回,就是当你第二次登录网站时,第一次登陆的那条Cookie会被覆盖,同时也可以设定周期,比如“一个月内自动登陆”等。
Session:则是一种时间的概念,就是你打开一个网站到关闭这个网站之间的时间,在这段时间里,你在网站上的动作都会被上传,然后以Session的方式保存在服务器中,比如你点击加购物车的动作,就会被Session保存在服务器上,关闭了网站怎么办?你的Session会被编上号,以SessionID的形式发送到浏览器,以Cookie的形式保存在本地,这就是Cookie和Session的亲密合作。
Token:在计算机身份认证中的令牌,在一些数据传输之前,要先进行核对,不同的令牌被授权不同的数据操作,它就像一把钥匙只能开一把锁。产品会如何使用到Token呢,比如强制用户下线操作,重新登录操作都会用到,使用token进行的身份认证,安全性好且是唯一的。使用Token可以实现单点登录、单设备登录
单点登录就是单一标记登录,一个账号只需要登录一次就可以访问不同页面或产品。例如登录QQ,可以访问QQ空间、QQ邮箱等其他服务。
单设备登录:就是只能在一个设备上登录,若同时在其他设备登录,先前登录的用户会被提醒或踢下线,例如微信只能在一台手机设备上登录,登录其他手机设备时会被提醒并踢下线;
常见技术术语
程序、渲染、写死、UA信息、URL、缓存、HTTP请求、队列、索引、脚本、明文密文加密、面向对象、Bug、SDK、PUSH、ReactNative&WEEX、APP升级检测、APP升级方式、AB测试、模拟器、抓包、代理服务器、轻量级虚拟机都是技术同学们在交流是说道的术语,下面一一介绍:
程序(program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。程序的执行是为了实现预期目的而进行操作的一系列语句和指令,在软件开发中,程序由数据结构和算法构成。程序的最小执行单元是函数或方法,函数是完成某项任务的独立模块,函数的组成包括输入、输出和函数内部的处理流程即逻辑计算。程序是一些列的数据结构和逻辑处理的集合,一个单一的处理流程用最小程序单元表示,将不同的逻辑处理流程组合拼接起来就构成了一个产品的基本功能。
渲染是通过一些列计算并呈现的过程,其中包括测量、排版、 绘制。我们看到浏览器加载出来的以各种不同排版的方式的数据就是通过渲染得来的。
写死:将数据集写死在本地,省去数据接口的开发,可以快速实现效果,但不利于更新;
UA信息是User Agen的简称,中文名为用户代理,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等,从而判断用户是使用电脑浏览还是手机浏览,让网页作出自动的适应。
URL:统一资源定位符(URL,英语 Uniform / Universal Resource Locator 的缩写)也被称为网页地址,是因特网上标准的资源的地址(Address)。每个网页都对应着一个 URL地址,类似于一个真实世界中的门牌地址一样。网址标识了一个 Web 页面所在的互联网里面的真实地址(这个页面处于 www.baidu.com/file/1.html,处于baidu 服务器 file 路径下的 1 这个文件)。
缓存:缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找,由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。
HTTP请求:是指从客户端到服务器端的请求消息,包含了请求时长、QPS等;
队列:在结构上分为队尾和队头,只能在队头执行出队操作,在队尾执行入队操作。技术人员经常会提及此词,以一个队列的形式给你吧,就是数据的一种交互方式,了解即可。
索引:即数据表的目录,比如要加入某个搜索条件,技术会告诉你没加索引,即没有目录,只能到表里面查找。
脚本:可以被计算执行的文件,文件里是一系列计算机指令,这些指令会按顺序被计算机解析并执行,如批量冻结10W个账号;
明文:明文,是指没有加密的文字(或者字符串),一般人都能看懂的意思,属于密码学术语。
密文:是加了密的的文字,明文是加密之前的文字。密文是对明文进行加密后的报文
加密:加密是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容,对数据安全尤为重要。
Bug是因为代码或者逻辑出错而导致的功能性错误,如用户无法登陆,无法获取某一信息或接口写错参数,通常会导致产品功能的中断,从而影响业务流程进展。
面向对象:指任何事物需要抽象出事物的各个属性值或元素。对世界万物的状态与行为进行归纳与分类,以此分析个体与个体间的相互作用与影响方法。
SDK:Software Development Kit,一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合;
APP推送是通过推送技术自动传送信息给用户,根据用户的兴趣、偏好等定期推给用户,从而帮助产品运营人员更高效地实现运营目标,维持APP留存率。推送的原理一种叫pull,也叫轮询,一种叫push,目前常用的就是push;
React Native 是 Facebook 推出的一个用JavaScript 语言就能同时编写 ios,android以及后台应用程序,并且它可以做到实时热更新,就像网页一样,改了一个字体,随时可上线;
WEEX:是阿里巴巴推出的,看到淘宝天猫的过节时的APP内容更新就是用的这项技术;
APP升级检测包括启动检测和手动检测,启动检测可以在启动时就提醒用户升级或强制用户升级,手动检测就是在设置页进行检测更新;
APP升级方式包括全部下载和增量下载,非游戏类的APP都是全量下载,游戏类的可全量也可增量,如游戏类打补丁,不足就是版本维护麻烦;
AB测试是为Web或App界面或流程制作两个(A/B)或多个(A/B/n)版本,在同一时间维度,分别让组成成分相同(相似)的访客群组随机的访问这些版本,收集各群组的用户体验数据和业务数据,最后分析评估出最好版本正式采用;
Beta指的是公共测试版,即针对用户公开的测试版本,收集公众的意见和建议。
模拟器:用以在一台计算机上模拟另一台指令不兼容或者体系不同的计算机。如安卓模拟器;
抓包:(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。
应用权限:苹果可获取的:摄像头、麦克风、相册、通讯录、推送、位置、访问日历、网络访问权限、读取手机状态和身份(获取到手机的唯一识别码 IMEI)、查看 WLAN 连接、控制振动、检索正在运行的应用、防止手机休眠、获取精确位置(基于 GPS 和网络)、屏幕锁定、安装/卸载;Android可获取更多:修改或删除外置存储中的内容、开机启动、安装/卸载快捷方式、读取/发送短信;
代理服务器:指在我们上网的过程中访问某个服务器的时候, 并不是亲自访问真正的服务器,而是先找了一个代理,由它向真正的服务器发出请求。代理服务器架在客户端和真正服务器中间,干的是替客户端访问真 正服务器的工作。
轻量级虚拟机是一个容器,也可以说是 一个软件集装箱,这个箱子里面可以塞入特定版本的操作系统、数据库、服务器程序和 web 应用,这样一套完整的 web 服务就集成在这个箱子里面了,当要发布服务的时候,直接将这个集装箱放在我们的服务器船上。
如何培养技术力
那我们该如何提升我们的技术力来和技术同学更好的沟通呢?第一,在真实工作中学习,不懂就查,不懂就问,多和技术同学沟通,自然而然就会提升,第二,尝试学习一门语言,比如H5、SQL、Python,简单易学,又能帮助你理解技术原理;
那在工作懂多少技术算是合理的呢?其实知道一个功能的实现的基本原理,以及目前的技术能力能否实现即可,包括目前行业的技术瓶颈和公司的技术能力,基于这些来评判出一个功能的可实现性及实现成本,可以做到提前就可以预判产品是否值得开发,当然还有一点,作为产品必定是技术的外行人,最好的方法就是与RD搞好关系,要记住你的技术背景只能停留在产品设计阶段和PRD沟通阶段,不要过多的给出技术方面的意见或建议,术业有专攻,莫要越俎代庖。
作为产品经理,不管是从技术层面还是产品层面,都应该是最了解产品所有细节的人,你要对整个产品负责!你是所有人的backup,所以你要懂得更多,有效管理整个整个项目顺畅执行。
网友评论