聚合文章列表
9 浏览

作为SRE,我希望开发人员知道的5件事情!

了解如何编写应用程序和了解其下的基础架构之间是有区别的。今年,当我从开发人员转到SRE(站点可靠性工程师),看到分布式系统如何在实际的公司工作时,真的改变了我写代码的方式。当你独自进行软件开发时,你并没有想到如何被阻止。当我部署第一个网站时,我不知道如何解决这个问题。我并不在乎编写测试。让我们保持真实:我只关心添加新功能并看到最终产品。我不明白如何主持静态图像,或配置服务器。以下是我希望程序员在开发时更关注的一些事情:1.编写准确的提交消息和清晰的文档程序员要确保代码是有效的,并适当进行注释。对于每一次修复都应该留下清晰的提交消息使代码审查人员更容易理解你做的改变,并在不通过的情况下帮助调试过程,这使得代码审查者有机会审查开发者添加的内容以及知晓原因。之前,我只是想快点结束编码或者解决难题,现在,我意识到清晰的文档可以节省更多时间。如果之后你打算开放一部分源代码,当这些东西在GitHub上出现时,开发者不会清楚这些代码的含义,这会导致一个糟糕的审查会议和需要很长时间才能解决问题。2.编写重点测试我曾经读过一则推特,上面

程序员 2017-12-09 发布
18 浏览

链家另一面

沿街绿色基调的门店里,黑西装白衬衫的年轻人们,随时准备穿街走巷,带着一个个希望在这座城市落脚的人,不停看房,一套,一套,又一套。这是链家的公众印象:线下、传统,人多,缺乏科技感。12月3日,链家网技术副总裁惠新宸坐在公司三楼公共休息区,告诉对面的一众记者,「我们的产品技术团队有1000多人」。大家心里想的是,需要这么多?链家网的办公大楼在北京海淀区上地五街,再往北一点,就是码农云集、超越五道口的新晋「宇宙中心」后厂村路,百度、网易、新浪、腾讯都在那里安营扎寨。2014年,链家网从链家总部独立出来,奔着挖掘码农的目的,从望京搬到了现在的福道大厦。上午10点,链家网两天一夜的「黑客马拉松大赛」正式结束。一间小会议室里,一个小伙子面对参观的记者们,有些紧张,用颤抖的手指划动手机屏幕,讲解着他的五人团队设计的产品。这款暂且命名为「经纪人助理」的产品,主要功能是通过数据整合和挖掘,让买房/租房人与经纪人的沟通更加便捷。大楼里的互联网公司作派,除了LOGO,一点都不「链家」。4.5亿元「真实房源计划」对链家的

程序员 2017-12-09 发布
19 浏览

Android Architecture Components之LifeCycle

LifeCycle架构设计一大利器,旨在减少Activity和Fragment中代码,简化Activity和Fragment职责,实现功能代码分离,达到解耦的目的。官方解释:Lifecycle-awarecomponentsperformactionsinresponsetoachangeinthelifecyclestatusofanothercomponent,suchasactivitiesandfragments.Thesecomponentshelpyouproducebetter-organized,andoftenlighter-weightcode,thatiseasiertomaintain.译文:Lifecycle-aware组件感知Activity和Fragment的周明周期,并能响应个生命周期状态。这个组件有助于产生更有序、更轻和更易维护的代码。优点LifeCycle作用主要是针对开发中遇到的一些痛点,它的优点也是基于现有的痛点,主要

软件架构 2017-12-09 发布
AD 友情赞助
17 浏览

翻译:Clean Swift iOS Architecture for Fixing Massive View Controller (一)

节选翻译来自CleanSwiftiOSArchitectureforFixingMassiveViewController系列第一篇。原作者:Raymond翻译者:RocZhang第一次尝试翻译,如有任何问题还请留言指出。E-mail:roczhang9673@gmail.comWeibo:@张鹏roczhangTwitter:@Lighters9673开始之前:原作者提供了付费的TheCleanSwiftHandbook,以及可以通过订阅他的list来下载CleanSwift的Xcode模版。示例代码在原文发布后有更新,因此文中所提及代码可能与你下载到的代码有所出入。CleanSwift-适用于iOS上的Clean架构CleanSwift架构起源于由UncleBob提出的Clean架构,他们之间有很多概念互通,例如Components组件,Boundaries边界,以及Models模型。我将会实现一个由UncleBob

软件架构 2017-12-09 发布
16 浏览

浅谈架构-从传统走向分布式

随笔:最近再做这些年的知识整理,今天整理到了架构这方便,就索性拿出来和大家分享一下,有什么写错的,欢迎大家指正架构拆分的演变:1.传统项目的架构:特点:1.allinone(所有模块在一起,技术也不分层),注:像05年06年那会儿,就是这样,把代码写在jsp里面,那时候还没有分层的概念,把所有的东西都写在一起,这就叫做allinone2.servlet(jsp)缺点:1.并发量差2.容错性差(不具有高可用性)注:不具有高可用性的意思是,比如当用户访问时,服务器后台因为一些原因导致服务器崩溃,用户就能直接看到错误页面,服务器也因为错误从而停止运行(宕机),这就叫做不具有高可用性。解决方案:1.分层开发(可以提高并发量)2.mvc架构3.服务器的分离部署用图说话:集群的配置:集群架构:特点:1.项目采用多台服务器集群部署2.mysql数据库采用多台服务器集群部署优势:1.并发量提高(1000+)2.容错性提高(具有高可用性)注:一般的i

软件架构 2017-12-09 发布
19 浏览

项目实战7—Mysql实现企业级数据库主从复制架构实战

Mysql实现企业级数据库主从复制架构实战环境背景:公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公司业务中断,损失100万,老王做出深刻反省,公司也因此对于数据库的性能和可靠性提出更高要求。要求对数据库进行改造,使其承载力进行提升,故障修复时间减少,有没有能实现的方案呢?Mysql实现数据库主从复制实战架构及其原理1、实验架构及其原理数据库高可用架构分为主从:一主一从,一主多从,一主从从双主2、过程分析(1)主数据库(innodb引擎)的操作:①一个写的请求,先写到redo事务日志中,②mysql的进程读事务日志,事务日志的内容做到数据库内存中;此时可以回复客户端,数据为脏数据③请求的操作记录到二进制日志中④二进制日志再写磁盘中写;优化策略,变随机写为顺序写(2)从数据库的操作:⑤I/Othread线程:从主的数据库上,把二进制文件的内容拉过来,写到relaylog中继日志中

MySQL 2017-11-20 发布
AD 友情赞助
18 浏览

常见并发问题

两个事务并发执行时间线只以购物车中不存在该商品为例。当有两个添加购物车请求差不多同时到达的时候,第一个事务在commit之前,第二个事务是读取不到第一个事务中新插入的数据的。那么,导致的结果就是,两个请求都成功insert了数据,最终导致购物车中同一商品出现多条数据。解决办法购物车的这种情况,还是比较容易解决的。分析一下,业务的特点是什么?没有就insert,有就update。这正好可以使用mysql的一个特性(注意,只是mysql的特性,不是sql表情语法)来实现:INSERTINTOtable(a,b,c)VALUES(1,2,3)ONDUPLICATEKEYUPDATEc=c+1;使用这种特性,首先要做的就是设置Uniquekey。在这里,根据业务分析,我们可以将userId和csuId设置成Uniquekey。这样就解决了问题。重复下单背景根据购物车下单下单完成后删除购物车中数据

MySQL 2013-12-13 发布
22 浏览

MySQL学习——基本命令(1)

这篇文章主要介绍MySQL添加新用户、为用户创建数据库、为新用户分配权限和MySQL基本命令。参考博客http://blog.csdn.net/u013216667/article/details/70158452一、登录MySQLmysql-uroot-p二、添加新用户允许本地IP访问localhost,127.0.0.1#第一种添加方式#username:jasper#password:123456createuser'jaser'@'localhost'identifiedby'123456';#第二种添加方式#username:laravel_tx#password:123456insertintomysql.user(Host,User,Password)values("localhost","laravel_tx",password("123456"));允许外网IP访问#username:jasper#password:123456createuser'ja

MySQL 2017-11-19 发布
27 浏览

vue中v-model父子组件通信

前言我们在vue项目中,经常有这样的需求,父组件绑定v-model,子组件输入更改父组件v-model绑定的数值。很多朋友对这种操作不是很清楚,这需要对v-model有比较深入的了解,今天谈谈v-model。vue的双向数据绑定这个问题在很多前端面试中,会提及。面试官问你,vue的双向数据绑定原理是什么?当然,这个也是耳熟能详的问题,百度随便一搜索,到处都能找到答案。一般都会搜索到,是用Object.defineProperty(),来监听数据get和set,来实现数据劫持的。假如对Object.defineProperty()不是很了解,可以点击上面链接,看看其语法!举个简单的例子:varblog={name:'haorooms博客'};console.log(blog.name);//haorooms博客如果想要在执行console.log(blog.name)的同时,直接给haorooms博客加个书名号,那要怎么处理呢?或者说要通过什么监听对象blog的属性值。这时候Object.definePr

Vue.js 2017-12-09 发布
AD 友情赞助
14 浏览

css(表现层)Cascading Style Sheets层叠样式表

HTML:===>结构层css:===>表现层js:===>行为层css的常用三种类型选择器:1、基本选择器:idclass标签*逗号选择器(,)2、包含选择器:子代选择器(>)后代选择器(空格)3、属性选择器:[name][name=value][name^=value][name$=value]css常用样式:height:width:border:1pxsolid#fee;color:background:display:定位问题:position:DIV+CSS页面布局(盒子模型)

CSS 2017-10-22 发布
19 浏览

淘宝直播弹幕爬虫

背景说明公司有通过淘宝直播间短链接来爬取直播弹幕的需求,奈何即便google上面也仅找到一个相关的话题,还没有答案.所以只能自食其力了.爬虫的github仓库地址在文末,我们先看一下爬虫的最终效果:下面我们来抽丝剥茧,重现一下调研过程.页面分析直播间地址在分享直播时可以拿到:弹幕一般不是websocket就是socket.我们打开devtools过滤ws的请求即可看到websocket地址:提一下斗鱼:它走的是flash的socket,我们就算打开devtools也是懵逼,好在斗鱼官方直接开放了socket的API.我们继续查看收到的消息,发现消息的压缩类型compressType有两种:COMMON和GZIP.data的值肯定就是目标消息了,看起来像经过了base64编码,解密过程后面再说.现在我们首先要解决的问题是如何拿到websocket地址.分析一下htmlsource,发现可以通过其中不变的部分查找到脚本:然鹅,拿到这块整个的脚本格式化之后发现,

HTML5 2017-12-09 发布
21 浏览

node实现一个Websocket服务器

早点时候翻译了篇实现一个websocket服务器-理论篇,简单介绍了下理论基础,本来打算放在一起,但是感觉太长了大家可能都看不下去。不过发现如果拆开的话,还是不可避免的要提及理论部分。用到的地方就简要回顾一下好了。Websockt基本通信流程在具体代码实现之前,我们需要大概理一下思路。回顾一下websocket的理论部分。简单的websocket流程如下(这里就不谈详细的过程了,大概描述一下)客户端发送握手请求服务器响应、处理握手并返回客户端验证通过后,发送数据服务器接收、处理数据,然后返回给客户端客户端接收服务器的推送作为一个服务器而言,我们主要的精力需要放在2,4这两个步骤。响应并处理握手虽然websocket可以实现服务器推送,前提在于该连接已经建立。第客户端仍然需要发起一个Websocket握手请求。既然要响应该握手请求,我们需要了解一下该请求。客户端握手请求客户端的握手请求是一个标准的HTTP请求,大概像下面的例子。GET/HTTP/1.1//HTTP版本必须1.1及以上,请求方式为GETHost:lo

HTML5 2017-12-09 发布
AD 友情赞助
16 浏览

canvas getImageData与任意字符图形点、线动效实现

这篇文章发布于2017年12月9日,星期六,22:20,归类于canvas相关。阅读15次,今日15次byzhangxinxufromhttp://www.zhangxinxu.com/wordpress/?p=6594本文可全文转载,但需得到原作者书面许可,同时保留原作者和出处,摘要引流则随意。一、动态字符或动态图像的连线动画效果首先见下面gif效果截屏:也就是我在输入框中输入一个字符'5',然后回车,页面上就会以连线的方式把这个字符'5'给呈现出来。上面演示效果有对应的demo页面,您可以狠狠的点击这里:任意字符图形连线生成动效demo不仅仅是字符,我们还可以选择本地图片进行图形生成。例如有一个手指PNG图标如下图效果:在demo页面中,我们选择这张图:然后效果为:下面简单讲下实现原理,以及拓展出来其它好玩东西。二、canvasgetImageData与动态字符图形信息获取这种动态内容动效实现主要难点在于如果准确获得图形坐标。实现原理如下:字符

HTML5 2017-12-09 发布
16 浏览

C# 使用Task实现任务超时,多任务一起执行

简介:充分使用Task的异步功能代码实现:1.实现了任务超时退出任务2.多个任务一起执行///

///做事需要ms秒才能完成/////////staticasyncTaskDoing(inttime,stringname="我"){Console.WriteLine(name+"来了");awaitTask.Delay(TimeSpan.FromMilliseconds(time));returnstring.Format("这活{1}干了:{0}ms",time,name);}//////设定超时任务如

.Net 2017-12-09 发布
17 浏览

C# 小知识

C#小知识阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。先放张图:根据前面的描述,我们来考虑下阻塞队列在程序中会出现的问题:阻塞队列需要实现两个功能:使线程等待与唤醒线程.具体介绍如下:在极端条件下,需要挂起线程,等待队列满足条件后,再去执行添加或提取操作待队列满足了条件之后,通知线程去继续其挂起之前的操作....涉及到的技术:线程同步与线程间通信可能产生死锁的分析:在某个时刻,队列为空或者是已满,此时生产者未能存入数据或者还在存入数据到队列中,这就会产生使得队列出错如果此时,消费者对队列在进行操作就会产生死锁...由于之前的生产者的操作使得队列出了问题并没有释放锁,此时就会造

.Net 2017-12-09 发布
23 浏览

Vue上传图片组件(多图单图上传)

公司要写一些为自身业务量身定制的的组件,要基于Vue,趁着这个机会,自己在业余时间也写了个组件,选择写图片上传是因为自己之前一直对这个功能比较迷糊,所以这次好好了解了一下。演示在网址打开后的show.gif中。使用技术:Vue.js|node.js|express|MongoDB。github网址:https://github.com/capslockta...功能:单图多图上传图片上传预览上传进度条分组上传,分组查询新建分组,删除分组删除图片前端利用Vue搭建,form表单绑定一个隐藏的iframe来实现页面无刷新提交表单,在input的onchange事件中将file提交给后台,对于多图上传,则递归调用上传函数,直到所有图片都传完。<inputtype="file"@change="uploadImage($event)"multiple="multiple"accept="image/gif,image/jpeg,image/png">uploadImage($even

vue.js 2017-12-08 发布
12 浏览

【项目上线】详细步骤05:实战 --- vue项目上线步骤

这里我以yunfenghui商城为例https://github.com/lolongwell...第一步,在虚拟主机上添加一个站点,如yunfenghui.lolong.xyzlnmpvhostadd然后,一路敲回车。(注意需要在云主机上解析域名,详细步骤参考【项目上线】04)第二步,通过git把项目克隆到对应位置,此例克隆到/home/wwwroot/yunfenghui.lolong.xyz目录下cd/home/wwwroot/yunfenghui.lolong.xyzgitclonehttps://github.com/lolongwell/YunFengHuiShop.git第三步,通过npm或者cnpm安装对应依赖包国内主机建议配置cnpm,安装速度更快npmi-gcnpm--registry=https://registry.npm.taobao.org安装api(后台)依赖包node_modulescd/home/wwwroot/yunfenghui.lolong.xyz/YunFeng

vue.js 2017-12-09 发布
22 浏览

vue.js默认路由不加载linkActiveClass的问题

今天打开项目的时候,发现我的默认路由没加载上linkActiveClass,网上一搜,发现很多同学也有这个问题,查了一些资料发现这是个重定向的问题,官网文档是这么写的https://router.vuejs.org/zh-c...我的代码本来是这样的:constrouter=newVueRouter({linkActiveClass:'list-active',routes:[{path:'/',component:user},{path:'/user',component:user},{path:'/warship',component:warship}]})这样虽然加载了子路由,但是它的默认类没跟着过来,然后加了一句redirect:'/user',修改成了这样constrouter=newVueRouter({linkActiveClass:'list-active',routes:[{path:'/',redirect:'/

vue.js 2017-12-09 发布
15 浏览

Damer-cli:帮你优化HTTP请求结构的脚手架

==写在前面==:最近一直在用Vue做后台管理系统。大家也都知道这种后台管理系统,用组件库的话很快就能搭出一个像样的界面出来,但是他的请求远比单页面复杂得多,逻辑也更复杂一点。http请求有一个清晰的结构不仅有利于开发,也有利别人接手,本篇文章就是给大家分享一些优化的方法,第一次写文章,如果有的地方写的不对或是没有表达清楚,欢迎大家给我提issues代码结构就不展示了,大家可以去这里查看,本篇文章主要给大家分享一下其中的api和storeapi1.urlConfig.js//在这个页面中,将后台的请求集合起来,统一管理(function(){varBASE_URL=window.oPageConfig.oData.BASE_URL;functionURLConfig(which,data){varurl;switch(which){/*********************基础信息*********

vue.js 2017-12-09 发布
18 浏览

python kafka 使用

classProducer(threading.Thread):def__init__(self):threading.Thread.__init__(self)self.stop_event=threading.Event()defstop(self):self.stop_event.set()defrun(self):producer=KafkaProducer(bootstrap_servers=BOOTSTRAP_SERVERS)whilenotself.stop_event.is_set():producer.send('my-topic',b"test")producer.send('my-topic',b"\xc2Hola,mundo!")time.sleep(1)producer.close()#读取数据classConsumer(multiprocessing.Process):def__init__(self):multiprocessing.Process.__init__(self)self.

消息系统 2017-12-19 发布
AD 友情赞助