Go语言实现的常用哈希函数,并提供对应的64位方法

以下是使用Go语言实现的常用哈希函数(BKDRHash,APHash,DJBHash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash),并提供每个哈希对应的64位方法。经测试,64位的哈希函数基本不会出现碰撞(测试数据为十亿随机字符串数据量)。

哈希函数代码库地址:https://gitee.com/johng/gf/tree/master/src/g/encoding/ghash

 

Go语言/位操作/取反/异或/左移/右移

 

ZooKeeper 典型应用场景一览

数据发布与订阅(配置中心)

发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,服务式服务框架的服务地址列表等就非常适合使用。

1. 应用中用到的一些配置信息放到ZK上进行集中管理。这类场景通常是这样:应用在启动的时候会主动来获取一次配置,同时,在节点上注册一个Watcher,这样一来,以后每次配置有更新的时候,都会实时通知到订阅的客户端,从来达到获取最新配置信息的目的。

2. 分布式搜索服务中,索引的元信息和服务器集群机器的节点状态存放在ZK的一些指定节点,供各个客户端订阅使用。

3. 分布式日志收集系统。这个系统的核心工作是收集分布在不同机器的日志。收集器通常是按照应用来分配收集任务单元,因此需要在ZK上创建一个以应用名作为path的节点P,并将这个应用的所有机器ip,以子节点的形式注册到节点P上,这样一来就能够实现机器变动的时候,能够实时通知到收集器调整任务分配。

4. 系统中有些信息需要动态获取,并且还会存在人工手动去修改这个信息的发问。通常是暴露出接口,例如JMX接口,来获取一些运行时的信息。引入ZK之后,就不用自己实现一套方案了,只要将这些信息存放到指定的ZK节点上即可。

注意:在上面提到的应用场景中,有个默认前提是:数据量很小,但是数据更新可能会比较快的场景。 Continue reading “ZooKeeper 典型应用场景一览”

FastTpl – 轻量级模板解析引擎

〇、前言

在PHP开发者当中,流行的Smarty模板引擎已是无人不知,它的功能丰富强大,出现的时机也恰到好处。

但是为什么我还需要开发这么一个模板引擎呢,初衷有三:

1、我不需要太复杂的模板设计,需要的是简单易学,团队成员能够快速入手,并且易于维护的模板引擎;

2、Smarty虽然功能丰富,但过于臃肿,执行效率低,我需要轻量级的模板引擎,它需要执行起来特别高效;

3、我需要前端和后端的技术都能够使用,因此它既需要有自己的模板标签,同时也支持原生的PHP文件作为模板; Continue reading “FastTpl – 轻量级模板解析引擎”

面向服务(SOA)与微服务(MAS)架构

微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维的小应用。这些小应用之间通过服务完成交互和集成。每个小应用从前端web ui,到控制层,逻辑层,数据库访问,数据库都完全是独立的一套。在这里我们不用组件而用小应用这个词更加合适,每个小应用除了完成自身本身的业务功能外,重点就是还需要消费外部其它应用暴露的服务,同时自身也将自身的能力朝外部发布为服务。

Continue reading “面向服务(SOA)与微服务(MAS)架构”

Google镜像站点

来源:http://coderschool.cn/1853.html

原版页面:

https://gufen.ga/ (无广告,原guso.ml,ggso.ga,guge.ga)

https://www.aiguso.ml/ (无广告,体验良好)

https://g.qqmmgj.com/ (无广告,体验良好)

https://google.gg-g.org/ (无广告,体验良好)

https://www.xichuan.pub/ (无广告,体验良好)

https://nginx-google.arukascloud.io/ (无广告,体验良好)

https://ggso.me/    (有广告,体验良好)

https://gugeabc.xyz/ (无广告,体验良好)

https://a.ggkai.men/(有广告,体验良好)

http://google.suanfazu.com/ (整合搜索,非原版)

https://g.caisan.ml (无广告,体验良好)

https://kuaiguge.info (无广告,体验良好)

https://g.zmirrordemo.com/ (第一次访问需验证)

https://google.tse.moe/ (部分地区被qiang)

https://zh.bywiki.com (维基百科 部分地区被qiang)

http://gg2.firstguo.com/ (有弹窗广告,体验一般)

Continue reading “Google镜像站点”

Vue.js介绍

Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的。相比于Angular.js,Vue.js提供了更加简洁、更易于理解的API,使得我们能够快速地上手并使用Vue.js。

如果你之前已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DOM的思维,因为Vue.js是数据驱动的,你无需手动操作DOM。它通过一些特殊的HTML语法,将DOM和数据绑定起来。一旦你创建了绑定,DOM将和数据保持同步,每当变更了数据,DOM也会相应地更新。

当然了,在使用Vue.js时,你也可以结合其他库一起使用,比如jQuery。

本文的Demo和源代码已放到GitHub,如果您觉得本篇内容不错,请点个赞,或在GitHub上加个星星!

v-for Demo v-bind Demo Page Demo GitHub Source

Continue reading “Vue.js介绍”

开源软件中的License

什么是License

许多混乱就始于你不知道License到底是什么,到底有什么含义。当你对你的产品使用License时,并不意味着你放弃了任何权利,你依然对其拥有原著作权。License只是授予他们于特定权利来使用你的产品。

License只是把你的作品释放到公有领域,或者给各个拷贝赋予权限。也意味着你放弃了版权收入,别人也没有义务把你列为原作者或贡献者。

开放源代码许可协议更容易为他人作出贡献,而不必寻求特别的许可。它也可以保护你作为原创者的权利,至少确认了你的贡献。它还可以保证你的工作不为别人所剽窃。

Continue reading “开源软件中的License”

p3p header在单点登录的cookie跨域中的应用

场景一:

A网站全站均为UTF-8编码,B网站全站为GB2312编码。

A网站提供一段JS代码供B网站调用,该代码会动态生成一个FORM表单,以收集提交上来的数据。

B网站此时开始提交数据,但提交上来的中文均为乱码 。

现象的产生是由于二个网站编码不一致而导致的,一般情况下使二个网站的编码一致即可。

如果无法统一编码该怎么办?

FORM有一个accept-charset属性

<form method=”post” action=”…” accept-charset=”utf-8″> 
…  
</form>   

测试成功,但在IE下不成功,需要一个HACK来解决:
在form的onsubmit事件触发时动态改变document的编码,即:

onsubmit=”document.charset=\’utf-8\’;”

场景二:

A网站提供一个页面供其它网站进行Iframe调用,该页面使用了SESSION,并进行了SESSION判断。

现象:

B网站IFRAME了A网站的页面,总显示SESSION过期,但直接在浏览器中打开该页面却又是正常的。

这是由于浏览器的安全性所致,SESSION依赖于COOKIE,A与B是二个完全不同的域,A网站没法去读取B网站下的COOKIE,所以 SESSION也就失效了。

解决办法:

A网站的页面在输出头上附加一个P3P属性,值为CP=CAO PSA OUR即可。
如:

Response.AddHeader(“P3P”, “CP=CAO PSA OUR”);  
if (Session[SESSIONKEY] == null)  
{  
   //TODO:其它操作  
}  

在IE中,页面通过FRAME,JS,IMG等引用其他域名页面的时候,P3P协议会阻止引用也的cookie。

举例说明:

在 B.COM中,

  1. <iframe width = 300 height = 300 src = ”http://www.a.com/test.php” mce_src = ”http://www.a.com/test.php”>

此时,test.php中产生的cookie将会被阻止,而不会记录下来
这种情况下,我们引入P3P header ,情况就改变喽~
P3P header允许跨域访问隐私数据,从而可以跨域set-cookie成功
在 www.a.com/test.php中这样写:

  1. header(\’P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”\’);

cookie就可以跨域了~

这种方法
在单点登陆中被别广泛应用~