阿C的博客

Category: Experience (page 1 of 2)

《异类》一书告诉我们,天才不是天生的,而是练出来的。

「练」,并非随意的练习,是刻意的练习(deliberate practice)。在体育、音乐等领域,刻意练习帮助人们快速成长为「天才」

同样,软件设计和代码设计的能力也需要刻意的练习。不可否认,大家在工作的实际项目中能够不停地得到提升,并且还能够得到前辈的指导。但事实上,这样的提升还不够快,因为:

1
项目交付压力大
项目交付的压力让你不能有太多的思考,更多时候是条件反射。
2
不能重复
无法重复,不可能花时间在相同的需求上,这对公司没有价值。
3
没时间回顾
很少有时间让你回顾,手头的需求还没有完成,下一波已经在面前了。
4
缺乏对比和交流
缺乏对比和交流,无法知道好坏,一般公司不会有资源同时让多组不同的人做相同的需求,最后最优选择。

所 · 以


我们就要……


刻意练习

朋友们如有兴趣,可以试验一下这个题目: ThoughtWorks面试题:收银机 & 缓存图

策略压缩规则:

客户端

  1. 以竖屏为例, 设置参考屏幕宽度作为基准最大宽度, 超过这个宽度则压缩至此宽度
  2. 所有PNG图片压缩成JPG
  3. 所有格式图片降质20%

服务端

  1. 保存客户端上传的图片
  2. 基于参数生成特定图片,操作参考: 七牛云存储-图片基本处理

以德服人、以情感人、以技赢人、以智胜人、以形悦人、以己正人

一个群体中的领导者或最出色者必须有其原因吸引他的伙伴德、情、技、智、形、榜样……

Continue reading

Talk is cheap, show me the code!

我想这句话充分表达了代码的重要性,而我们大部分的代码就是函数,整洁的函数优雅、高效,让人赏心悦目!它能够很容易的被修改、应该讲述事实,不引人猜测。

缓存分两类: 数据缓存结果缓存

缓存场景:
  • 数据缓存举例:圈子、帖子、用户、回复。主要应用在单表视图
  • 结果缓存举例:帖子详细(含关联信息)。主要应用在多表业务
缓存时间:
  • 数据缓存缓存时间长。根据实体稳定程度来设置,可以为1天1小时
  • 结果缓存缓存时间短。根据业务关联程度来设置,可以为1小时15分钟
缓存注意:
  • 数据缓存存在实体原子性问题。数据缓存唯一影响他变化的原因就是它自身的改变,不应该依赖其他对象。
  • 结果缓存存在依赖源依赖问题。依赖源的任何改动都会导致缓存无效。常用的做法:一、小时间缓存,间隔失效;二、依赖源改变时主动修改结果缓存。

缓存策略难点:
  • 针对数据缓存,必须明确清楚使用它的结果缓存有哪些,一旦数据缓存改变时,如何同步通知所有关联的结果缓存?(不要小看这点,因为随着共同协作,加之业务量增加,慢慢的设计者可能都不清楚到底我的数据缓存被用到多少个地方,被多少结果缓存引用。)
  • 针对结果缓存,如何在使用时判断它所依赖的关联数据是否改变?
  • 针对程序开发,如何有效的清理指定缓存内容包括它的子依赖数据?

怎么建立一套高效智能的缓存存取更新响应机制? 我们立即来解答 🙂


缓存交互设计

缓存实体:
  • 缓存键:依靠公式生成。生成公式:缓存键 = MD5(信赖键+大写查询条件语句)
  • 缓存值:存储缓存对象。缓存对象可以是数据缓存结果缓存
  • 缓存时间键:表示缓存版本。本键与缓存键一一对应。生成该缓存时,会同时记下缓存依赖键的值(即:依赖键的版本,通常用时间戮),后面用于比对缓存是否需要更新(如果缓存依赖键更新了,则表示当前缓存需要更新)。生成公式:缓存时间键 = 缓存键 + ‘_Time’
  • 缓存时间值:记录依赖键版本。通常为依赖键生成的时间。
  • 依赖键:缓存依赖内容。缓存依赖一旦变化,代表旗下的所有子缓存都失效,需要重新获取。依赖键通常为表名,复杂的依赖键可以自己定义,如“表名+字段名”等。
  • 依赖值:缓存依赖版本。通常为生成依赖键的时间。
  • 注意:上述讲到的内容均为 数据缓存 的设计。

举例1: 帖子结果数据=帖子+圈子+用户+回复,假设帖子结果数据为要缓存的内容,那么帖子、圈子、用户、回复都是帖子结果数据的依赖,它们一旦改变则帖子结果数据就立即失效。但是,千万记住这里的依赖不是依赖键的意思。我们所讲的依赖键只针对单表的设计,不涉及到join。所以,在缓存中应该有数据缓存4个:帖子原表缓存、圈子原表缓存、用户原表缓存、回复原表缓存。然后,再重新组合出帖子结果数据,这时,可以将结果数据作为结果缓存存储。

举例2: 我们现在有两张通用表:一张为通用配置表,一张为通用数据表。通用数据表中有我们能够想到的所有通用字段,字段数量超过30个,而通用配置表则记录每个业务需要用到通用数据中的哪些字段。一个业务一条通用配置记录,对应着多条通用数据记录。到时候一些简单的逻辑,我们就不用建表,直接走通用数据。这个时候,我们会发现如果缓存通用数据,那么依赖键的设置单纯的表名是不够的,要使用表名+配置ID来关联。

缓存案例:

案例背景:请求动画详细信息,信息包括:动画表所有字段、动画分类表名称字段。

  •   动画表名:media_video_tb
  • 动画分类表名:media_video_type_tb

案例设计:为动画表、动画分类表依次建立数据缓存,然后再组合内容成目标动画详细信息

场景模拟:

数据缓存实例:动画表(案例以动画表为例,动画分类表类同)

  • 缓存键:MD5(‘media_video_tb’+’|’+’SELECT * FROM MEDIA_VIDEO_TB’)。
  • 缓存值:[{id:1,name:’宝宝学数字’,type_id:1},{id:2,name:’宝宝懂礼貌’,type_id:2},…]。
  • 缓存时间键:${缓存键} + ‘_Time’
  • 缓存时间值:201701010000(例)
  • 依赖键:media_video_tb
  • 依赖值:201701010000(例)

一、首次获取:

(1)缓存中无依赖。生成依赖键并赋值当前时间戮。

Redis Key Redis Value
media_video_tb 201701010000

(2)缓存中无缓存。生成缓存并同步依赖键值内容。

Redis Key Redis Value
3d2843a3064d296300773e4d320801cc [{id:1},{id:2}]
3d2843a3064d296300773e4d320801cc_Time 201701010000

二、再次获取:

(-)判断本SQL语句对应的缓存时间键与依赖键值是否相同。

  •  相同:则表示未改变,直接获取缓存的值;
  • 不相同(或依赖键不存在)则表示缓存过期,需要重新从数据库拉取。

三、后台更新:

(-)当后台管理进行动画表的增删改操作时,程序代码进行自身依赖键的删除。那么,下一次请求动画表时将会引发缓存过期重新查询数据库。

Redis Key Redis Value
media_video_tb null
  • 加班之一:因为喜欢这份工作,愿意为此多付出
  • 加班之二:为了表现给上司看,得到领导的好感
  • 加班之三:上班时间效率低下,不得以只有加班
  • 加班之四:加班成为企业文化,别人没走我不走
  • 加班之五:项目变更或统领差,事前不足事后补
  • 加班之六:下了班也没处可去,在公司消磨时间

哈佛大学教授 威廉·詹姆斯 有做过一项研究表明,在缺乏激励的环境中,人的潜能只发挥20-30%,而在激励良好的环境中,人的潜能能发挥80-90%对于士气高昂的团队来说,没有什么是不可能的;对于士气低落的团队来说,一棵稻草就有可能压垮整个团队!而一个只会执行指令的团队注定是一个平庸的团队,停止抱怨你的团队、去彻底激发你的团队吧!

以真实的业务场景为出发点,去考量和认知(技术)。金榕(阿里巴巴集团)

今天看到郑芸推荐的 #李翔商业内参|向技术的长征# ,阿里巴巴在14/09/09在纽约证交所上市之后,便成立iDST(数据科学与技术研究院institute of Data Science&Technologies),招纳了一批技术先知去推进数据科技。
马云把下一个时代命名为DT时代,但在整个集团看来,iDST从未在公司工作过,他们是否能够理解公司正在做的事情,并且用技术来帮助业务团队实现目标,尤未可知。“科技并不是算算数学,并不是只要把点击率提高,它想要能够把商业模型做好”

科技推动业务的难度案例:
用算法来提升聚划算的GMV(商品交易总额)在技术上并不困难。如果想要提升交易量,那么,只需要把价格低的商品排列到搜索结果和推荐选项的前列。低价总是可以刺激购买。但是,如果在排序和推荐上,出现的总是更低价的商品,这就意味着网站吸引来的目标用户群,其收入水平在不断降低,“用户从二三线城市一直掉到四五线城市,整个内涵完全变了”。不过,如果要提高优质高价产品在推荐和排序中的权重,交易量和成交总额又会下跌。

一点点建议,进阶成为 Problem-Solver

All life is Problem-Solving

想要游刃有余地面对复杂的工作生活,就必须让自己优秀的Problem-Solver。究竟如何才能成为真正的Problem-Solver呢?在我看来,需要以下三方面能力

  • 扎实的专业技能
  • 清晰的逻辑思维
  • 优秀的沟通能力

Continue reading

命由天定,运在人造。

大家知道昨晚中国队VS韩国队,国足胜了。当时,正在和老板还有兄弟姐妹们吃饭,老板说我们来赌一把压韩国赢3赔1,压中国赢1赔3,压平1赔4。这时,如果是你,会怎么选呢?

我笃定至少中国平,所以我的策略是“压中国赢100,压平100”,结果不出所料,赚了老板100块,一开心就发红包大家分了。选择的原因有三:(1)中国地界、政治问题;(2)概率优势,2/3概率至少赢100;(3)群众心理,压韩国赢底金300才能赢100,若输则300全输,现场近9成伪球迷且女生居多,定不会冒险求韩胜。输的情况只有韩赢我才会输,而且是陪大家一起输,无所谓也开心。

其实想说,上面的都是歪理,但结果是赢了,运气也是实力的一种做人有多大气,就会有多成功。因为胸怀,才是成功者的标志。记住一句话:越努力,越幸运。

Olderposts

Copyright © 2020 阿C的博客

Theme by AC.AsiaUp ↑