为什么说“懂技术”, 是产品经理最硬的底牌?
本篇文章主要结合技术知识和一些日常案例,帮助大家理解技术同学的一些日常“黑话”,不至于被他们“骗”,其次就是随着时间的拉长,懂技术肯定也是产品自身的一项优势,希望本篇文章能给大家带来帮助或者启发,enjoy..
一、面向过程&面向对象
1、开发语言中C和Java的最大区别是什么?
C:面向过程
java:面向对象
2、什么叫面向过程?什么叫面向对象?2.1、面向过程强调的是步骤和顺序。例如:把一部苹果16放进A仓库,然后在把一部华为M70放进B仓库。这个案例中,要执行:
–拿起苹果16,放进A仓,增加A仓库存
–拿起华为M70,放进B仓,增加B仓库存
一共有6步。所以所强调的是过程操作
2.2、面向对象强调的是抽象和数据建模。里面涉及了3个知识:类、属性、对象(实例)
–先回到我们的案例,如果是上述案例,面向对象是怎么做的呢?
–声明类并取出对象(苹果16和华为M70)
–放到指定仓库(苹果16放到A,华为M70放到B)
–增加库存
eg:像上面说的放到指定仓库、增加库存都是开发语言中说的方法
3、面向对象中的类、属性、对象是什么呢?
3.1、类:抽象的结果,强调的是具有相同属性或行为(方法)对象的抽象。例如上面的苹果16和华为M70,对应的就是有共同信息的商品,抽象出来其实就是[商品SKU],所以我们的商品SKU就是抽象后的结果,也就是类
3.2、属性:简单理解就是信息或字段,例如苹果16和华为M70,他们共有的信息就是名称、型号,这就是属性,对应的就是页面上我们看到的商品SKU字段
3.3、对象(实例):这个结合类来理解,类可以理解成模板,对象就是通过模板形成的产物,例如苹果16就是商品SKU下的一个对象(或者说是具体的实物)
二、从面向对象到数据建模:E-R图与数据库
1、基于上面讲的,我们拓展到第二个知识[E-R图],E-R图是什么呢?
E-R(实体entity-关系relation)图也就是实体关系图,本身是数据建模的一种方法,简单来说其实就是用于搭建数据库表以及表于表之间如何合理建立联系的基础
2、E-R图中包含哪些信息呢?
2.1、E-R图中包含实体、属性、关系三种信息
2.2、什么是实体、属性?
–从面向对象与数据库的角度类比:实体≈类≈数据库表,属性≈属性≈数据库表中的字段
eg:面向对象中的对象≈数据库表中的一行数据
3、基于上述手机和仓库的案例,用系统功能举例E-R如何画呢?首先将E-R图中涉及的信息进行罗列
3.1、类/实体:商品SKU、仓库功能
3.2、属性:
–商品SKU:编号、名称等
–仓库:仓库名称、(隐藏属性:库存数量,本身不属于仓库的基础属性,但是是有关联关系的)
3.3、对象:
–商品SKU的对象:苹果16、华为M70
–仓库的对象:A仓、B仓
3.4、抽象出来上述信息后,E-R图是怎样的呢?
E-R图:
4、如何借鉴E-R图搭建数据库表呢?
4.1、数据库是什么?
–数据库是存储数据的一种工具,用于存储不同类型的数据,其中数据库的核心是表。数据库(此处指结构化数据库)中的表简单理解就是一个二维表,跟我们常用的excel差不多
–此处说的数据库指的是存储在服务器的硬盘上,属于持久化数据(简单理解就是可以随时读取)
4.2、以上述的商品SKU为例,数据库表案例如下:
–表名:sku_table(商品SKU表)
–表结构:
4.3、上述案例中有提到主键和外键,这是什么?
–主键:指的是当前表中的唯一标识,不允许为空也不允许重复。可以理解为excel中的行序号
–外键:一般当前表中的某个字段,这个字段存的是另一张表的主键,该字段用于建立表于表之间的关联关系。例如上述E-R中图的信息,t_warehouse_sku表中可以通过sku_id关联到t_sku表中的商品信息(简单理解就是excel中的vlookup函数)
5、开发常说查数据库慢,需要加索引,索引是什么?
简单理解就是一本书的目录,根据目录可以快速定位到数据的位置,从而提高查询速度
6、其实还一种数据库叫redis,redis是什么?
redis是数据库的一种,专业术语称它是内存数据库或者缓存数据库,例如一些数据不需要记录到真实的数据库时,但又需要记录下来供后续逻辑快速读取做计算使用,就可以把数据先记录到redis,然后做数据计算,计算完成后删除这条数据就可以了。
比较抽象,举个例子就是当我们记录了一个内容,分别记录在便利贴和电脑的excel上,便利贴你抬头看一眼就能知道内容了(内存读取),不用到电脑上找到excel然后打开找到这个内容,可以省去一些查找的过程。
三、常见的数据结构
1、字符串-json,符号是{}
json的数据结构是键值对,也就是key:value。key=属性(字段名),value=值。一般key是唯一的,但是value可以重复。样式例如{SKU编号:001}
2、数组-array,符号是[]
数据结构只有值(value),但是返回的值是有序的,并且可以指定返回第x个值。例如[A,B,C],如果指定第3个返回,那就是arr[2],此时返回的就是C(2是因为程序从0开始计数)
3、队列-queue,符号是Q
可以把它理解成数组,也有顺序,但是顺序不像数组可以指定返回,而是强有序的,遵循先进先出的原则,出队只能从头出,入队只能从尾入
四、其他一些比较常见的技术名词和概念
1、线程
执行动作的最小单元,可以理解成员工,如果一个员工做一件事就是单线程,如果多个员工做一件事或多件事就是多线程
2、任务执行方式
–同步任务:可以理解成串行,所以他是有顺序的,要一个一个执行,前一个没执行完之前不能执行下一个,所以是阻塞任务。例如只有1个车道时,前面的车不动,后面的车就不能动
–异步任务:可以理解成并行,所以他是没有顺序的。例如有4个车道时,4个车道可以一起通车,有可能是第一个车道的车先出去,也有可能是第二个车道的车先出
eg:有时跟线程搭配使用,简单理解就是:线程是员工,任务是工作内容,几个人做决定了这个工作内容的工作方式是同步还是异步
举个例子,例如同步第三方数据的功能,需要调对方接口获取最新数据,第三方接口每次只能获取指定周期内的数据(例如每次最大获取10天内的数据),此时如果用户同步8.1~8.30这个范围的数据,技术要做的就是:第一创建任务队列,将8.1~8.30拆分成3条数据存储(每个日期范围=10);第二步就是创建异步任务;第三步就是异步任务中启动线程,通过线程从队列中获取任务执行;第四步就是根据获取后的数据调第三方接口获取数据;第五步就是处理并存储数据
3、数据通讯方式
–轮询:通讯方式的一种,一般结合定时任务使用,即客户端一直向服务端询问有没有结果,即没有结果之前一直问。例如某个需求你在处理,然后其他同事一直问你有进度了没,有进度了没,有进度了没…
–websocket:也叫长连接,客户端与服务端建立一条通道做双向通讯,即服务端也可以主动向客户端发消息。例如我们需求处理完成后,主动告诉其他同事我们完成了,就不用他一直来问了
4、遍历
简单理解就是一个不落的把数据逐个访问,确保所有数据都能被访问到。最典型的就是数据统计,统计某一天的订单总金额时,就需要把这一天的订单全部获取,然后统计每个订单的金额做汇总
5、事务
–简单理解就是保证数据整体成功或整体失败的一种方法,比较适用于需要强制保证数据一致性的场景
–例如调整货位功能,下架商品的货架位需要库存扣减,上架商品的货架位库存需要增加,这种就要加事务,不能说下架货架位库存减少了,但是上架货架位库存没增加的场景,否则就会出现库存差异
6、空指针
可以理解成一个字段值本来不会为空但是出现了空值,此时用这个空值调用后续方法处理逻辑时报错就是空指针异常。例如增加SKU库存数量时,根据SKUID去查数据,理论上肯定能查到,但是某种异常情况下SKUID为空了,此时用空值调用后续增加库存的方法就会报错,这个报错就是空指针
7、kafka
本身是中间件的一种,主要应用之一是消息队列的处理,kafka中包含了3种角色:
生产者:可以理解成消息的创建者,将消息推送到消息中心
消息中心:可以理解成接收、存储数据的数据库。在消费中心可以细分topic(消息分类)和partition(分区)
消费者:可以理解成消息的处理者。kafka消费者获取数据的模式有两种:轮询、订阅(可以理解成webhook,即消息中心产生数据后主动推给消费者处理)