标签 知识 下的文章

Integer缓存策略

这篇文章其实是讲Java和Python的,其他的语言并不知道。

在Java里你可能会遇到这样一个问题:

public class JavaIntegerCache {
    public static void main(String... strings) {

        Integer integer1 = 3;
        Integer integer2 = 3;

        if (integer1 == integer2)
            System.out.println("integer1 == integer2");
        else
            System.out.println("integer1 != integer2");

        Integer integer3 = 300;
        Integer integer4 = 300;

        if (integer3 == integer4)
            System.out.println("integer3 == integer4");
        else
            System.out.println("integer3 != integer4");

    }
}

那么问题来了,答案是什么,首先,我们应该比较的是地址,这是引用类型,那么应该两个都不等吗?

运行结果是:

integer1 == integer2
integer3 != integer4

- 阅读剩余部分 -

CSS overflow visible的坑

标题好难……这周遇到了一个坑,就是overflow-x:hiddenoverflow-y:visible连用的时候x轴和y轴都出现了滚动条,调了很久都是然并卵,后来查了一下查到了。

http://stackoverflow.com/questions/6421966/css-overflow-x-visible-and-overflow-y-hidden-causing-scrollbar-issue

在Gecko,Safari和Opera中当其中一根轴设为非visible时,另外一根轴会被设为auto。

换句话说,除非两个都是visible,否则的话两个都不会是visible。

说说Promise

标题不知道怎么拟定比较好,总之是讲Promise的吧,基本上算是第一次讲Promise,以前Rails+Angular的时候曾经说过,不过那个时候对于callback hell和Promise解决的东西理解的并不深刻,所以解释的也很肤浅(不明明这次依旧是肤浅的解释)。

首先……V8的Promise性能实在不靠谱,都没有第三方的快,bluebird有一篇性能比较(反正大致是想说自己快吧):http://bluebirdjs.com/docs/benchmarks.html

慢归慢,基本上一些对于性能需求不太迫切的项目还是可以用自带的Promise的,Node6对于ES6的支持已经相当全面了,这一点可以用npm install es-checker检查一下。(毕竟回调地狱恶心到吐血)。

- 阅读剩余部分 -

代码同步部署解决方案介绍

在上一篇中我们介绍了一下pull、push模型,除了在网页获取数据时用得上以外,其实还有很多应用场景(甚至可以说处处都见得到),在这次第一个正式工作,是写一个同步发布脚本,因此也了解了一些常见的同步方案,其中包括了运用这两种不同模型的几种选择。

Git + Rsync

这是目前在使用的解决方案,Rsync的介绍与配置留在下一篇博客,Git只是负责从远程获取到最新的代码到源机器(把上一篇文章的服务器看做源机器,客户端看做目标机器即可),Rsync负责差异同步到目标机器。这套方案比较简单,缺点是太简单,没有后续方案的话失败需要手动回滚到上一版,后续搭配SSH自动或人工食用。(除了我们以外Teambiton似乎也有开源的解决方案sneaky)。

- 阅读剩余部分 -

消息系统中pull与push模型比较

在上一个消息路由设计中,大概也有提到过关于pull和push的问题,但没有细说,我们在设计模式中,也就是观察者模式(也叫订阅发布模型)中,也遇到过相同的问题,那么push与pull到底有什么差别?

首先我们来确定一下定义:push(推),主动推送,换言之也就是从服务器发出请求给客户端,客户端接收数据,pull(拉),被动拉取,换言之,客户端去请求服务端,获取服务端的数据。

平时其实也很常见,如果我们网站的数据需要实时动态更新,此时我们有两种解决方案,一种Ajax轮询,从客户端的角度来说,我们可以看做把消息定时的拉下来,而另一种是WebSocket,当服务端生产出消息后,推送到客户端,实时性很强。

- 阅读剩余部分 -

消息路由设计总结

这学期做的一个作业,稍微总结一下自己的设计思路,顺便读了一篇美团技术部门写的《消息队列设计精要》,深感做一个消息队列的复杂程度。

简单介绍一下,我的消息路由开源中,但除了学习之中没有什么卵用(这篇文章也不会讲代码的实现,主要是设计思路),之所以这样是考虑到整个系统的开发难度进行了取舍,之后也会说到:https://github.com/csvwolf/Sky_Message_Routing_Middleware

我们要做的东西简单的来说英文是Message Router,也就是消息路由,实际上也就是没什么卵用的转发器,尤其是小规模的情况下——整体而言是一个问答系统,我们有3个前端,一个后端,在这种规模下,似乎确实没有什么意思,只能自己虚拟情况了。

- 阅读剩余部分 -

Ubuntu/Python 结巴分词 + Word2Vec利用维基百科训练词向量

结巴分词是一个跨语言的中文分词器,整体效果还算不错,功能也够用,这里直接用Python了,其他主流语言版本均有提供。

Word2Vec,起源于谷歌的一个项目,在我刚开始接触的时候就关注到了他的神奇,大致是通过深度神经网络把词映射到N维空间,处理成向量之后我们终于可以在自然语言处理上方便的使用它进行一些后续处理。(具体的方法忘了)

Python的gensim库中有word2vec包,我们使用这个就可以了,接下来我们就对维基百科进行处理,作为训练集去训练。(包地址:http://radimrehurek.com/gensim/models/word2vec.html

本文参考:http://www.52nlp.cn/中英文维基百科语料上的word2vec实验

- 阅读剩余部分 -

Node.js 几种获得正式绝对路径的方式

在项目中需要绝对路径去设置一些文件地址,于是搜索了一下,在这里大致总结一下:

console.log(__dirname);
console.log(__filename);
console.log(process.cwd());
console.log(path.resolve('./'));

我的项目路径为:/Users/SkyAo/Documents/Coding/JavaScript/Node.js/Connector,而运行的文件是在core文件夹中,然后执行项目路径下的index.js(其中引用了core目录中的appConfig.js

- 阅读剩余部分 -

客户端Session和服务端Session对比

引言

本来想作为Client Side vs Server Side Session的翻译,结果自己的英语太烂,怕翻译的太渣,只能自行根据几篇参考文章总结一下,如果有说的不对的地方,还请大家指出。(把Client Side Session翻译成客户端Session也让我觉得很别扭)。

故事背景是昨天和受泽讨论验证码如何进行验证,然后谈到了Flask(Python的一个MVC框架)使用的是Client Side Session,于是略作了解。

首先我们需要了解一下Session的工作原理,在文末的参考链接1有针对PHP的分析,可以供参考,上一篇模拟登陆中也节选了图解HTTP中的图片来说明一下问题,这是面试中的常见问题,我们之后再对比时也会做相应说明,这里稍微介绍一下,就是在客户端存SessionID之类的Cookie信息,每次访问把Cookie带去请求服务端,服务端进行验证操作,如果服务端有Cookie对应的Session信息,那么确认,把它拿出来使用即可。

那么既然如此,为什么又会分为Client Side Session和Server Side Session,他们的优缺点是什么——这是本文我们所想讲的内容:

- 阅读剩余部分 -