2014年6月 ’ 的文章存档

MySQL主从复制原理、主从复制(异步)、半同步复制、基于SSL复制

概述

复制通常用来创建主节点的副本,通过添加冗余节点来保证高可用性,当然复制也可以用于其他 用途,例如在从节点上进行数据读、分析等等。在横向扩展的业务中,复制很容易实施,主要表现在在利用主节点进行写操作,多个从节点进行读操作,在mysql5.5中默认为异步复制。

mysql 复制的异步性是指:事物首先在主节点上提交,然后复制给从节点并在从节点上应用,这样意味着在同一个时间点主从上的数据可能不一致,异步复制的好处在于它 比同步复制要快,如果对数据的一致性要求很高,还是采用同步复制较好。

mysql-5.5 开始支持semi-synchronous的复制,也叫半同步复制,目的在于事务环境下保持主从一致

mysql-5.6 开始支持延时复制。
阅读全文

在线学习Java免费资源推荐

你想学习Java吗?来对地方了!这篇文章将会介绍很多高质量的免费资源,包括网页、论坛、电子书和速查表。

Java是一种面向对象的编程语言,拥有独立、多线程、安全、动态和健壮的特点。归功于其多功能的特点,Java已经成为最流行的编程语言之一,可以让你开发出健壮的应用程序。

Java几乎是所有商务应用程序的核心。它有多种脚本语言和流行的框架,可以开发客户端和服务端。因此,学习Java不仅仅可以提高你的知识储备,也有利于你在事业上的发展。

这篇文章将介绍各种各样的网络资源(不包含必读的Java书籍),你可以借助这些资源进行在线学习。

学习Java最好的电子书(PDF)

如果你喜欢阅读,那么通过这些免费的Java电子书可以自学这门语言。大多数在线的电子书都是不断更新且完整的。覆盖了Java的大多数细节。
阅读全文

10款效果惊艳的HTML5应用和源码

1、纯CSS3实现打火机火焰动画

这又是一款很酷的纯CSS3动画特效,它是一个可以点燃的打火机,当你用鼠标滑过这只打火机时,打火机就会打开,然后开始出现火焰燃烧的动画特效。
另外要说明的是,整个动画都是利用纯CSS3实现的,没有一行JS代码,小伙伴们,这个CSS3动画是不是很酷?

b1

在线演示  /  源码下载

 

2、HTML5/CSS3图片过滤归类应用 三种过滤动画
阅读全文

针对数据 gnuplot画图 初试

把数据画成图,是我一直想要达到的,今日研究gnuplot,小有成就,下面我只举一个数据制图的例子

比如我想画个每小时nginx日志500错的图

需求:开启一个http服务,比如80端口

web根目录为/var/www/html
阅读全文

以boost::function和boost:bind取代虚函数

这是一篇比较情绪化的blog,中心思想是“继承就像一条贼船,上去就下不来了”,而借助boost::function和boost::bind,大多数情况下,你都不用上贼船。

boost::function和boost::bind已经纳入了std::tr1,这或许是C++0x最值得期待的功能,它将彻底改变C++库的设计方式,以及应用程序的编写方式。
阅读全文

Instagram的技术架构

Instagram 被 Facebook 以10亿美金收购。团队规模:13 人。而在被Facebook收购前的一个月,整个团队才7名员工。

  • 2010年: 2位工程师
  • 2011年: 3 位工程师
  • 2012年: 5 位工程师

制胜法宝:

  1. 广泛的单元测试和功能测试
  2. 坚持DRY(Don’t Repeat Yourself)原则
  3. 使用通知/信号机制实现解耦
  4. 我们大部分工作使用Python来完成,只有逼不得已的时候,才会用C
  5. 频繁的代码复查,尽量保持“智慧共享”。(frequent code reviews, pull requests to keep things in the ‘shared brain’)
  6. 广泛的系统监控

Instagram的两个创始人

  • Mike Kriegerr:之前是一个颇为低调的工程师和用户体验设计师,他在一家名叫Meebo的创业公司工作了1年半。analytics & python @ meebo(在Meebo做分析,使用python );
  • Kevin Systrom:毕业后在Google的收购部门工作了一年,今年28岁,随后去到了一家从事旅行业务的创业公司Nextstop,没有计算机学位,没有接受过正式培训, 但他下班后坚持自学编程,在这家创业公司被Facebook以人才收购的方式收购后,Systrom又去早期的Twitter实习了一段时间。

下面一起来看下这个奇迹是怎样搭建的?Instagram的技术实现是什么?以下内容来自翻译。
阅读全文

JavaScript装逼指南

如何写JavaScript才能逼格更高呢?怎样才能组织JavaScript才能让别人一眼看出你不简单呢?是否很期待别人在看完你的代码之后感叹一句“原来还可以这样写”呢?下面列出一些在JavaScript时的装逼技巧。

1. 匿名函数的N种写法

你知道“茴”的四种写法吗?ε=(・д・`*)ハァ… 扯淡,但你或许不知道匿名函数的好几种写法。一般情况下写匿名函数是这样的:

(function(){})();

但下面几种写法也是可以的:

  • !function(){}();
  • +function(){}();
  • -function(){}();
  • ~function(){}();
  • ~(function(){})();
  • void function(){}();
  • (function(){}());

当然,这样的写法,没有什么区别,纯粹看装逼程度。

2. 另外一种undefined

从来不需要声明一个变量的值是undefined,因为JavaScript会自动把一个未赋值的变量置为undefined。所有如果你在代码里这么写,会被鄙视的:

var data = undefined;

但是如果你就是强迫症发作,一定要再声明一个暂时没有值的变量的时候赋上一个undefined。那你可以考虑这么做:

 var data = void 0; // undefined

void在JavaScript中是一个操作符,对传入的操作不执行并且返回undefined。void后面可以跟()来用,例如void(0),看起来是不是很熟悉?没错,在HTML里阻止带href的默认点击操作时,都喜欢把href写成javascript:void(0),实际上也是依靠void操作不执行的意思。
阅读全文

基于JAVA的简易缓存系统

背景

几乎任何一个应用,特别是WEB应用,缓存都是非常重要的一块内容,在过去的一段PHP开发中,比较常见的使用缓存的例子如下:

1、根据一个key从缓存中取值
2、如果取到值,则直接返回这个值
3、如果没取到值,则根据业务从solr或是db或是某一段业务逻辑中取值,然后再把这个key-value存入缓存

以上步骤在每一个需要的地方都进行一遍。逻辑其实没有问题,代码跑起来也是OK的,就是看起来有点ugly,不够优雅,扩展性也不好。
阅读全文

如何写好CSS?

真正的问题是什么?

CSS即层叠样式表,所以一层一层覆盖其实是其本质特征。真正的问题在于维护,许多人认为CSS仅是样式,不是代码,无需维护,所以任意书写,只要将自己需要的样式的优先级设为最高即可,才导致了深层级CSS的出现,因为每次添加一个样式就必须比以前的优先级高才能在页面看到。深层级不仅造成维护性降低,可读性也是一个问题,人不是机器,无法很优雅的按优先级阅读,所以很难确认一个样式用于哪里,其实还存在许多的冗余样式,在任何地方都被覆盖的样式。这样的代码在扩展性上,一开始反而是有优势的,因为添加一个新class,无需担心影响其他地方,但慢慢随着项目规模的增大,页面增多,需要复制样式的地方也越来越多,它们之间又存在微小的差异,设计的更改,需求的变化,这一切都会将这种快餐式的CSS推进柏油坑。因为难以维护,所以无法响应需求,所以无法复用,只能复制,恶性循环。

正如上面所说的,问题在于可读性、维护性、扩展性、复用性这几个方面。所以只要提高它们就能解决问题, 虽然这么说,也不是如此简单的。先来谈谈在CSS中,这些概念都有着怎样的意义。

可读性

有人认为CSS不是程序,不需要可读性,有人认为CSS只要写出来就有可读性,因为很简单。抛开各种预处理器不说,原生CSS结构确实简单,没有需要编程的部分,但仍然可能导致混乱。原因有二,一是CSS可以层叠,其中涉及到了优先级和作用范围,如果写的不好,人很难读出其中的意义,二是CSS属性众多,加上CSS3引入了很多用法独特的属性,一个选择器可能包含几十个属性。比如下面这段我随便写的CSS代码:

span {
    -webkit-box-shadow: 6px 4px 4px red;
    -moz-box-shadow: 6px 4px 4px red;
    box-shadow: 6px 4px 4px red;
}
div span {
    border-width: 4px;
    border-style: dotted;
    border-color: blue;
}
#box {
    border-left: 2px solid red;
    border-bottom: 2px solid red; 
}

 

乍一看也没什么,都是border,大致能看出来这段CSS只是为了添加一个红色的阴影让box看起来比较立体。但中间的部分似乎是捣乱的,你可能会说这太傻了,看不到吗。是的,当这3部分散落在上万行的CSS中时,肯定看不到。于是有人很自然的想起了我们可爱的浏览器,没错,在浏览器中可以快速找到作用于目标的CSS样式,但这也是万恶之源。首先我假设你不知道中间那部分东西是为了什么而写的,因为你是靠浏览器找到它的。然后剩下两种可能,不管三七二十一改了再说和看看它为什么存在。前者悲剧的可能性是100%,后者悲剧的可能性是90%,因为你已经掉坑里了,很快我们会发现要修改它还牵扯到了另外的地方,接着在浏览器中探索到另一个莫名其妙的样式,当你弄懂全部的时候,你应该已经把上万行的代码弄了个一清二楚了,也许最幸运的是,浪费了几个小时的时间发现只需要修改一行就能达到目的。
阅读全文

你是编程中的“快枪手”还是“慢悠悠”?

一般而言,有两种类型的开发者。一种编码速度快,喜欢一大段一大段的组合代码,然后看它是否能顺利运行,这是编程中的“快枪手”,还有一种在朝着目标前进的时候比较淡定,他们会确保他们所写的一切代码都是精心设计的,可维护和可扩展的。因为这个原因,使得他们在速度上显得比别人慢,所以是“慢悠悠”。

两者之间的区别是,前者完成的效率更高,但代码的错误率更大(除非他们特别幸运),而后者代码的错误率就少多了,并且易于扩展和维护。亲你是哪一种呢?
阅读全文