中小型研发团队架构实践:电商如何做企业总体架构?
企业总体架构是什么?有什么用?具体怎么做?以我曾任职的公司为案例,一起来探讨这个问题。这家公司当时有200位研发人员和200多台服务器,我刚进这家公司时,系统已经玩不下去了,总是出现各种问题,例如日常发布系统时或访问量稍微过大时,系统就会出现很多故障,而且找不到故障发生的根本原因。我进公司后主要的任务就是对这个系统进行升级改造,花了一个半月的时间写了份企业总体架构文档,文档共有124页,直接指导了之后的技术改造,下图是那份文档的目录,文末有相关资料下载地址。企业商务模型企业商务模型的内容主要包括主营业务、商务模式、商务主体、竞品分析、组织架构、商务运作模型和业务流程等。主营业务即公司做什么业务。商业模式即公司怎么赚钱。商务主体即哪几个人在一起做这门生意。竞品分析即了解竞争对手的情况。组织架构即公司部门是怎么划分的,组织架构图中标出人数,根据系统与业务之间对应关系,可以了解系统中哪些模块使用频率高,以及业务与其对应模块的复杂度。商务运作模型即公司是如何运作的,售前做计划,找供应
想了解阿里巴巴的云化架构 看这篇就够了
阿里巴巴9年双11经历下来,交易额增长了280倍、交易峰值增长800多倍、系统数呈现爆发式增长。系统数据突飞猛进,用户还能一次次如丝般顺滑的秒杀毫无违和,这背后,是阿里技术团队经历数年时间的系统打磨,技术架构优化而呈现出来的结果。今年,天猫双11以1682亿的成交额再破记录,令人惊奇的是,其双11大促IT成本的增长相较于去年足足减少的一半,而这一切,都源于阿里巴巴云化架构的战略。在12月8日ArchSummit阿里技术专场上,来自阿里巴巴的四位技术专家们围绕“云化架构的创新实践”主题,就阿里的Sigma调度与集群管理系统、混部、Pouch容器和弹性混合云快速构建等云化架构技术亮点展开了深入分享,本文整理了其中的精彩部分,感兴趣的读者可以下载讲师演讲PPT进行深入了解。阿里巴巴调度与集群管理系统SigmaSigma集群管理系统是阿里巴巴集团云化战略的关键系统。Sigma通过和离线任务的伏羲调度系统深度集成,突破了若干CPU、内存和网络资源隔离的关键技术,实现了在线和离线任务的混合部署。阿里巴巴调度系统首席架构师张瓅玶,围绕Sigma调度系
MariaDB 10.1.30 和 Connector/C 2.3.4 发布
MariaDB10.1系列中最新的稳定版本MariaDB10.1.30,以及MariaDBConnector/C2.x系列中最新的稳定版本MariaDBConnector/C2.3.4发布了。主要更新内容MariaDB10.1.30改进项MDEV-12323–崩溃恢复期间的回滚进度日志消息,与不相关的日志消息混合在一起MDEV-14701–install_db显示损坏MDEV-13407–innodb.drop_table_background失败MDEV-14008–声明失败:`!is_set()||(m_status==DA_OK_BULK&&is_bulk_op())MDEV-12352–大事务回滚阻塞不应阻塞InnoDB关闭程序MDEV-13797–InnoDB可能会在启动后立即开启关闭时挂起,同时回滚已恢复的未完成事务MDEV-12837–WSREP:BFlockwaitlongMDEV-14587–当index==NUL
每日一博 | JSDuck 与 AngularJS 融合技巧
字数:1568阅读时间:10分钟前言前面,我们以一个实战案例来详细说明了如何在实际开发中使用JSDuck工具。但是,并不是所有的时候,代码的封装方式都受我们控制的。例如,如果我们使用了现在的几个主流框架AngularJS、React或者Vue的时候,代码的封装方式就必须按照框架定义的方式来构建。当我们的代码中出现了模块、控制器、服务、指令等JSDuck完全不认识的组成部分时,我们该如何使用JSDuck来正确描述我们的代码呢?那么,下面,笔者就以AngularJS为例,来说一说笔者自己的解决方案。融合思路解决这个问题,有两种思路。第一种,可以将JSDuck不识别的代码部分映射到工具识别的标签来进行描述。第二种,既然没有现成的标签来描述这些新成员,那我们可以自定义一套标签来描述它们。第一种方法更方便,不需要额外编码;第二种方法更优雅,但是需要自定义一整套标签。这里,由于笔者对文档的要求主要是实用,不需要那么完美,而且现在也没有过多的精力来研发一整套标签。所以,笔者选择了第一种解决方案。第一种方案最核心的地方就是需要确定
深入浅出 JS 异步处理技术方案
来源:gitbook作者:Gitbook-icepy为什么要异步"当我们在星巴克买咖啡时,假设有100个人在排队,也许咖啡的下单只要10S,但是咖啡的制作到客人领取咖啡要1000S。如果在同步的场景下,第一个客人下单到领取完咖啡要1010S才能轮到下一个客人,这在效率(某些场景)上来说会比较低下。如果我们异步处理这个流程,客人下单10S拿到凭证,客人就可以去做别的事情,并且10S后下一个客人可以继续下单,并不阻碍流程。反而可以通过凭证,让客人拿到自己的咖啡,也许时间上并不是第一个下单的客人先拿到。"在网页的世界里也是同样的道理,不妨我们看看在执行JS代码的主线程里,如果遇到了AJAX请求,用户事件等,如果不采用异步的方案,你会一直等待,等待第一个耗时的处理完成才能接上下一个JS代码的执行,于是界面就卡住了。“也许有人会想,既然大家都说现在网页上性能损耗最大的属于DOM节点的操作,把这些搞成异步,行不行?其实这会带来一个不确定性问题:既“成功”的状态到底谁先来的问题。可以想象一下,如果我们在操作DOM,既给节
react 入门-Babel
很多计算机语言在运行的时候,需要把我们编写的源代码编译成计算机底层的语言;而javascript是解释型语言,浏览器接收javascript文本,然后再解释执行,所以在编写javascript代码之后,浏览器可以直接识别这些文本,不需要再编译javascript文本。但是,随着javascript的不断更新和版本升级,新的语法和特性越来越多。这些语法提供了更好的性能、编程体验和开发风格,浏览器对这些新的语法和特性的跟随是非常滞后的,也就是说,新的javascript的特性无法直接使用。这就是babel出现的背景。javascript的版本包括ES3、ES5、ES6还有ES7,不是所有的浏览器都支持所有的这些版本。为了能让开发者在新版本的javascript出现后,使用最新的javascript版本,babel出现了。babel允许开发者使用最新的javascript版本和新语法开发应用。它可以把最新的语法转换成当前所有浏览器都可以支持的语法。比如,现在可以使用ES6甚至ES7的新语法,当然还有ReactJS
史上最全面的前端学习资源
由于时间有限,暂时只整理了html5,css3,js相关的知识,稍后会整理es6,typescript,jquery,vue,react,angular2+,webpack,node,express,mongodb,redis,gulp,git,iconfont,seajs,requirejs性能优化,博客,技术团队,比较牛逼的社区,常用的工具如果对你有帮助,请多多关注我,后续我会把视频教程也会分享出来,都是比较经典的参考文章:掘金知乎守候i(https://juejin.im/post/5a0c1956f265da430a501f51)
用canvas绘制一个曲线动画——深入理解贝塞尔曲线
在前端开发中,贝赛尔曲线无处不在:它可以用来绘制曲线,在svg和canvas中,原生提供的曲线绘制都是使用贝赛尔曲线它也可以用来描述一个缓动算法,设置css的transition-timing-function属性,可以使用贝塞尔曲线来描述过渡的缓动计算几乎所有前端2D或3D图形图表库(echarts,d3,three.js)都会使用到贝塞尔曲线这篇文章我准备从实现一个非常简单的曲线动画效果入手,帮助大家彻底地弄懂什么是贝塞尔曲线,以及它有哪些特性,文章中有一点点数学公式,但是都非常简单:)。实现一个曲线动画可以点击这里查看在线演示在写代码之前,先了解一下什么是贝塞尔曲线吧。贝塞尔曲线贝塞尔曲线(Beziercurve)是计算机图形学中相当重要的参数曲线,它通过一个方程来描述一条曲线,根据方程的最高阶数,又分为线性贝赛尔曲线,二次贝塞尔曲线、三次贝塞尔曲线和更高阶的贝塞尔曲线。下面详细介绍一下用得比较多的二次贝塞尔曲线和三次贝塞尔曲线二次贝塞尔曲线二次贝塞尔曲线由三个点P0,P1,P2来确定,这些点也被
[UWP]了解TypeConverter
1.前言TypeConverter是XAML解释器的幕后功臣,它做了大量工作,从WPF诞生以来,几乎每一次XAML的运作都有它的参与。虽然UWP中TypeConverter已经彻彻底底退居幕后,连自定义TypeConverver都不可以,但了解TypeConverter的原理对理解XAML解析器的运作方式总是有帮助的。2..Net中的TypeConverterTypeConverter在.NET的早期版本中就已经存在,它可以将一种类型的值转换为其它类型,典型的用法是在数据类型和字符串之间转换。假设要实现一个从字符串转换成目标类型的函数GetValue:privateTGetValue
谁说程序员找不到女朋友,你们是不知道当程序员撩妹,一撩一个准
小编给大家分享这些聊天记录之前,先分享一段非常经典的找女朋友套路!如果没有过硬的追人技术,放弃今生只爱她一个的想法。然后把目标定在你喜欢和喜欢你的那群人上。然后扩大交友圈。然后对喜欢的女孩表白直到遇到喜欢的。或者不断展示自己,吸引喜欢你的女孩过来,直到发现你喜欢的。另外,调整好心态,你是去吸引一群人,失败几次很正常!!!不要在意几颗小草,你要关注整个草原!AOE的高效,是建立在足够多的小怪上的。扩大你的交际圈是关键。还好这是网络时代,好友的数量没有上限。去一下你喜欢的地方,多刷点存在。多加点好友,多打点招呼。如果看到了,想关心就关心下。多点耐心,说不定就遇到了。还有,人是会变的,除非你已有女友,不然,即使是不聊天,也别轻易拉黑一个异性。跟我2任相遇,是看到她在我空间评论。然后发现,我QQ里还有这样一个女孩。然后翻漫游记录,发现几年前就添加了,还聊过天。估计那时是只关注几个有照片的,且长得漂亮的,忽视了。当你能遇到足够多的异性时,你还是可以相信缘分的。这篇文章分享之前我还是要推荐下我自己的web前端HTMML5群:6
Node.js 后端第 2 期报名公告
首发于萧井陌的专栏写文章登录Node.js后端第2期报名公告萧井陌6hoursago课程简介node1期在在2017年4月份对内部同学开放,取得了很好的效果为方便新同学年后跳槽,故在过年前开始node2期课程下图是当时的同学写的论坛程序截图教学目的、适合的情况这个课程是为Web前端岗位的从业者、有Web前端基础的人设计的,非零基础课程,请注意课程内容围绕node.js展开,主要是讲解用node.js开发Web后端应用需要用到的各种技术如果你有下面这些想法,可以考虑参与这个课程:希望通过对后端的学习能在工作中和后端良好沟通对node.js感兴趣,想要了解node.js希望通过node.js学习后端知识,提升综合技术水平希望通过学习,有能力担任或兼顾后端岗位希望借助这方面的技能实现跳槽或升职希望通过完善技术栈提升工作效率希望建立更全局的视野教学内容(提纲摘要)课程会包括以下内容:以项目形式展开的,基于node.js后端框架的原理和实现组件通信的原理和
js高级函数之filter篇
filter()方法创建一个新数组,其包含通过所提供函数实现的测试的所有元素。functionisBigEnough(value){returnvalue>=10;}varfiltered=[12,5,8,130,44].filter(isBigEnough);//filteredis[12,130,44]//ES6wayconstisBigEnough=value=>value>=10;let[...spread]=[12,5,8,130,44];letfiltered=spread.filter(isBigEnough);//filteredis[12,130,44]语法varnew_array=arr.filter(callback[,thisArg])参数callback用来测试数组的每个元素的函数。调用时使用参数(element,index,array)。返回true表示保留该元素(通过测试),false则不
three.js简介 —— 3D框架
特点Three.js特点:掩盖了3D渲染细节面向对象功能丰富速度快支持交互内置文件支持拓展性强同时支持HTML5、2D、Canvas动画示例threejs动画简介本文通过three.js中基础的场景实现简单了解一下引入首先需要引入three.js库文件,可以下载到本地或直接引用线上地址。
常见的 JavaScript 内存泄露
这是关于JavaScript内存泄露相关的序列文章中一篇。由于时间有限更新进度会有点慢,但会持续更新的。自己也在学习中,难免对某些知识点的理解不是很正确,所以才将文章放置github上,一是想与大家分享,二是方便持续更新,三是便于实时修正错误点。也希望看本文的各位同学能多提issues,我会根据提的意见不断完善文章。最后希望各位能从文章中有所收获最新内容请以github上的为准:exclamation:️https://github.com/zhansingsong/js-leakage-patterns什么是内存泄露内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。内存泄漏通常情况下只能由获得程序源代码的程序员才能分析出来。然而,有不少人习惯于把任何不需要的内存使用的增加描述为内存泄漏,即使严格意义上来说这是不准确的。————wikipedia注:下文中标注的CG是Chrome
NPM测试模块之rewire教程
摘要:有了rewire模块,再也不用担心测试私有函数了。在玩转Node.js单元测试,我介绍了3个用于编写测试代码的NPM模块:Mocha,Should以及SuperTest。为了怂恿大家写单元测试,我再介绍一款神奇的NPM测试模块:rewire。GitHub仓库:Fundebug/rewire-tutorialrewire原理对于技术,知其然,也应该知其所以然。对于rewire,它的基本功能与require相同,都是用于导入模块,只是,它会为导入的模块添加两个特殊的函数:__get__与__set__。顾名思义,这两个函数可以分别用于获取和修改模块中的变量/函数。测试的时候,当我们需要获取或者重写私有变量/函数,rewire非常有用。__get__:获取私有变量/函数下面是需要测试的代码示例1://公有函数addfunctionadd(a,b){returna+b;}//私有函数subfunctionsub(a,b){returna-b;}exports.add=add
用 Python 处理 HTML 转义字符的5种方式
写爬虫是一个发送请求,提取数据,清洗数据,存储数据的过程。在这个过程中,不同的数据源返回的数据格式各不相同,有JSON格式,有XML文档,不过大部分还是HTML文档,HTML经常会混杂有转移字符,这些字符我们需要把它转义成真正的字符。什么是转义字符在HTML中<、>、&等字符有特殊含义(<,>用于标签中,&用于转义),他们不能在HTML代码中直接使用,如果要在网页中显示这些符号,就需要使用HTML的转义字符串(EscapeSequence),例如<的转义字符是<,浏览器渲染HTML页面时,会自动把转移字符串换成真实字符。转义字符(EscapeSequence)由三部分组成:第一部分是一个&符号,第二部分是实体(Entity)名字,第三部分是一个分号。比如,要显示小于号(<),就可以写<。
京东联盟C#接口测试Demo
京东联盟C#接口的下载地址为:http://jos.jd.com/doc/channel.htm?id=285下载后,默认是一个控制台程序,核心库和demo程序在一个项目中。这里我把核心库独立成了Dll项目。接口使用流程是,初始化DefaultJdClient类,然后调用需要的接口类,传入参数,执行获取返回结果。注意,使用前请先修改bin目录下的config.json文件,配置appkey等信息,格式如下:{"appkey":"11111","appsecret":"2222","token":"234345","webid":"2234234","unionid":"567567"}1)初始化IJdClientclient=null;privatevoidinit_JDClient(){stringurl="https://api.jd.com/routerjson";this.client=newDefaultJdClient(url,dic["appkey"].ToString(),dic["ap
移植 MQTT broker mosquitto 到 omapl138
概述本次移植使用创龙的TL138-EVM开发板,基于TI的MCSDK开发环境。具体上位机系统为Ubuntu12.04-32bit,软件环境基于创龙的用户手册搭建。为了移植后在138上运行的web服务也能使用mosquitto,所以编译构建时要开启其libwebsocket功能支持。所以这里移植就总共分三步走。交叉编译libwebsocket,交叉编译mosquitto,移植编译结果到目标文件系统。交叉编译libwebsocket准备工作官网下载源码包:https://libwebsockets.org/构建过程需要比Ubuntu的apt-get方式安装的更高版本的cmake工具,可以参考这里进行安装:https://askubuntu.com/questions/610291/how-to-install-cmake-3-2-on-ubuntu-14-04编译过程进入解压后的源码包cdlibwebsockets-master创建build目录。mkdirbuild编辑交叉
开发人员学Linux(14):CentOS7安装配置大数据平台Hadoop2.9.0
1.前言“大云物移”是当年很火热的一个话题,分别指大数据、云计算、物联网和移动互联网,其中大数据领域谈论得多就是Hadoop。当然Hadoop不代表大数据,而是大数据处理领域的一个比较有名的开源框架而已,通常说的大数据包含了大数据的存放、大数据的分析处理及大数据的查询展示,本篇提到的Hadoop只不过是在其中的大数据的分析处理环节起作用,Apache提供了一个开源全家桶,包括了Hadoop、HBase、Zookeeper、Spark、Hive及Pig等一些框架。不过限于篇幅,本篇只介绍Hadoop的伪分布式部署,包括MapReduce和HDFS。2.准备JDK文件:jdk-8u131-linux-x64.tar.gz官方下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htmlHadoop文件:hadoop-2.9.0.tar.gz官方下载地址:http://www.apache.org/dyn/close
所有人都在渲染程序员的中年危机,我们却在劝你重新学会学习
原标题:所有人都在渲染程序员的中年危机,我们却在劝你重新学会学习编者按:本文来自微信公众号“InfoQ”(ID:infoqchina),作者:DonDenoncourt,编译:张健欣,36氪经授权发布。当“猝死”、“跳楼”、“34岁”、“被离职”这些关键词扎堆而起时,程序员们知道,媒体们又在炒作一个名叫“中年危机”的名词了。这个世界究竟是对中年人不够友好,还是对不优秀的人不友好?亦或是对不优秀还不努力的人不友好?很多问题,想不通头疼,想通了心疼。如果你只是一介布衣,又恰好在竞争激烈的互联网行业里讨生活,也许你的核心竞争力就是你的学习能力,而这是能支持你可持续发展的根本。问题的关键是,你知道如何更高效地学习吗?写在前面“他忘记的比你知道的还要多?”,那个人指的就是我。我成为一名开发者已经三十多年了,忘记过不少知识。但问题是:我现在知道的,或者说,我记得的,和千禧一代的人【译注1】或者GenX一代的人【译注2】一样多么?我的知识量真的比得上别人么?在与这些更年轻更聪明的天生适合做技术的人竞争时,我做对了许多事情。其中