问题员工会登录一个内部服务系统,登录后可以选择休息或工作状态,下班时选择离开。有一个页面要实时展示员工当天休息和工作的累计时长。
有两个数据库表存储员工的数据。
员工状态表:存储员工的当前状态。
员工状态流水表:每次员工状态切换,存储一条日志,记录切换发生的时间,切换前状态,切换后状态。
解决先建立问题的模型,一个状态图,是员工状态切换的本质。
如下,员工有三种状态,在状态切换时才会有时长被计算进去。其中红色的表示计算为休息时长,蓝色表示工作时长。即从休息状态转出的记录为休息时长,工作状态转出的记录为工作时长。
建立一个新表,存储用户最近一次状态,和状态的获取时间点。还有用户当前的累...
最近发现,组内的小伙伴对负载均衡组件有哪些还不清楚,总结了下,希望对大家能有写用处。
当用户点击了一次页面,到后端server执行完返回,经过了好几次传递,每次上游调用下游,都要使用负载均衡组件。
使用负载均衡组件有什么好处?
自动选择存活的服务器,剔除掉“死掉”的服务。
保证请求能够按照分配均匀地分给服务端。
服务端增减机器,修改配置,对客户端透明。
以上几点最深的体会就是。
作为服务端,不必急急忙忙地恢复死掉的服务,只要有存活的节点存在即可。因为有时你可能正在吃饭或睡觉。
作为客户端,服务端更换你不必配合发布,减少工作量,代码不用做业务外的特殊逻辑。
下面我们从前到后一次看看都有...
起因有同学在nginx站点配置中加了一行Access-Control-Allow-Origin *,导致微信中业务数据异常,抓包看http头有两个Access-Control-Allow-Origin字段,一个是站点自己的域名,一个是*。 为了实现跨域资源访问,在代码和nginx配置中都加了Access-Control-Allow-Origin字段,但是浏览器有个原则,如果有两个Access-Control-Allow-Origin字段,那么都失效,哪个都不信。最终导致了微信中打开异常。 也引出了CORS。
定义和原理什么是CORS跨站资源共享?
跨站源资源共享(CORS)是一份浏览器...
jump Consistent hash用途是一个hash分配算法,在增加或减少hash桶个数时,是有1/n的节点被移动到新桶内,其他key所在的桶序号不变。
要求桶是按顺序编号的,相对于web缓存,更适合存储的场景。
适合场景用于分布式存储产品中,而不用在缓存类型的产品。因为有节点不可用时,jumphash用存活节点分担不可用节点的能力不强,会导致分布不均。但是在存储类中,节点都会有主备,主节点不可用路由到备节点,key的分布不会有变化。
适合在分布式系统中,根据key来选择被分配到的服务场景。每次新增新的服务节点,只有1/n的key会变动,不会因为扩容或缩容瞬间造...
定义一致性hash算法,在维基百科的定义是:
Consistent hashing is a special kind of hashing such that when a hash table is resized, only K/n keys need to be remapped on average, where K is the number of keys, and n is the number of slots. In contrast, in most traditional hash tables, a change in the number of ...
在《了解一致性hash算法》中介绍了一致性hash ring的实现算法。
但是切割hash环的时候,遇到一个思考题:
在数字环上随机落N个点,把环切分成N个区间,原点要算一个切分点吗?如果算,就只产生N-1个随机数就可以了,如果不算,要产生N个随机点。
为什么会产生这个疑问?如上图,把hash用三个绿色点分割了三段。如果把环从蓝色的0点打开,变成右边的直线。直线被分成了四段。随机分割直线四段,肯定用右边的方法,为啥切割hash环就用左边的方法呢?
最终owen认为,还是要把0点当作一个已经切分过的node来处理,因为每次产生的随机数,都是按照右边展开的直线的空间来落点,分割直线...
《编程珠玑》里说过:大约10%的专业程序员,才能够正确地写出二分查找。尽管第一个二分查找程序于1946年就公布了,但是第一个没有bug的程序在1962年才出现。
二分查找易错的主要原因:缩小查找范围的区间切分不对。如果使用左闭右开区间划分,就很难出错了。
左闭右开区间在STL数据结构的构造参数,一些api的返回值范围等场景,也都广泛应用。仔细思考,是有些规律在里面的。
先来看三个使用的场景。
一、javascript随机数返回值在js中,产生随机数函数 Math.random() 返回值是[0,1)间的实数。
通过偏移和缩放返回值,能映射到任意实数区间。再通过取下界,随机产生任意整数...
腾讯曾经有句很经典的话——先抗住再优化。
优化和需求相比,永远都是排在第二位的,唯快不破,首先是要业务生存下来,然后才是如何稳定运营业务。
见到一些技术人员,包括刚工作是的自己,恨不得把架构代码打磨得无可挑剔,用当下最流行最“高效”的技术。而且还会说“要有技术追求;不能等到撑不住的时候再优化,那就来不及了……”
到底应该如何优化,什么时候优化,要遵守以下几个原则。
先弄清极限容量,自己能撑多少先弄清楚现在系统的容量,什么地方是瓶颈,到多少访问量、用户的时候才会有问题。如果说目前用户1万,到100万时有问题,公司要5年后到达这个量级。那么可以停下了,先做其他需求去,在这五年内有好多事可以做...
事故发生时的情景。
处理步骤:1.告知leader 2.恢复业务保留现场信息 3.复盘修复bug,继续发布验证
其他:验证方法,黑盒法,只看结果,用abtest,新老或异构两套对比;白盒法,在关键节点,异常部分加上报,统计,在程序围观层面查看。排查问题可以用二分法,排除法。
心态:要有颗强大包容的心,每一次事故都是对自己的一次提升,吃一堑长一智。变被动为主动,主动发现,预防事故,积累经验,提高意识。
终于发布完成了,还没等休息,收到一堆告警短信,收件箱都快炸了;
刚发完特性不到一天,客服群里用户反馈,数据错了,多扣钱了;
半夜睡觉,突然被短信吵醒,业务崩溃了……
以上这些场景,对于...
写作目的:说明如何选择编程语言,对不同语言的认识。
结构:
说明问题:语言太多,对于初创公司,选择是一个问题。
结论:看菜吃饭。根据公司的目标,能够快速出产品为主。当前团队对语言的熟悉程度,已有资源对语言的支撑;还要兼顾可维护性,招人的难度,以及语言的学习难度。
结构:
大家的知识背景,用最熟悉的语言和工具,能够快速出产品。
根据语言特性,不同语言应对不同的使用场景。例如:php适合网页开发;C++适合计算密集型、游戏引擎等的开发;python有很多数据分析的库;nodejs也很适合前端转后端。
市场上招人的难度和成本,php很多,C++的很少。
已有的成熟组件的语言代码。例如有个现成...