这是一封来自饿了么校招的邀请函

这是一个很硬的软广。

饿了么校招内推终于开始了!

招聘岗位:

软件开发(移动客户端/后端/Web)
数据开发与分析(数据分析、数据仓库)
搜索算法
算法
DBA(研发方向)
软件测试
信息安全
项目助理
运维
产品类:

数据产品经理
产品经理
简历发到这里:beichu.zhang@ele.me。简历名称和邮件标题都设为岗位+姓名+学校哟。

好了话不多说,简单来介绍一下吧,作为一个业界良心,简单介绍一下我们部门(大前端部)的福利:

根据不完全统计,我司较适合萌新和老司机加入——没有漫无目的的加班,合理的工作分配,轻松地办公环境,你听说过互联网行业的加班神话,但你可能并不知道,有一些公司比你所听到的正常的多。

根据国内某(不)知名八卦组织调查,部门满意度普遍很高——我们不压抑个性,将自己的才华用在最适合自己的地方,能够与大家分享,一起来做些有趣的事情吧,尤其是不需要打卡,下个楼就有好多好吃的(叫外卖当然OK啦),如果你见过张江的荒芜,那么这里无疑是最佳选择。

我只相信,能把个性和团体利益结合的工作,才是好工作;能够让员工得到归属感的公司,才是好公司。

那么问题又来了,精神福利你不吃,那么谈谈现实吧:RMBP+dell显示器+机械键盘+人体工学椅是你新手村的标准装备,你的月卡经验取决于你的价值,10k+/mo,13-16薪不等(封顶?我并不知道这样的事情,不过肯定比这个多)。

具体岗位要求请见:http://campus.ele.me/jobs,其他岗位也有哦(内推只有技术和产品)。

说了那么多,上邮箱:beichu.zhang@ele.me,不要怕,给我们一次了解你的机会。记得:简历名称和邮件标题都设为岗位+姓名+学校哟。

注1:以上统计出自一个叫敖天羽的人
注2:敖天羽同志是个好同志
注3:我不是HR!

JavaScript Debouncing与Throttling

这周还遇到了一个问题,在遇到了overflow坑之后,我准备自己实现以下滚动效果,第一是滚动条太难看,第二是overflow无法达成我要的效果。

所以就找到了wheel事件想要借此来自己实现滚动,结果一监听就坑了,我发现只要稍微移一下就会触发一次事件,那样一秒可以触发上百次了吧,尤其是使用触摸板的时候还有惯性——根本停不下来。

之后就接触到了解决方案:

参考:http://stackoverflow.com/questions/3515446/jquery-mousewheel-detecting-when-the-wheel-stops

- 阅读剩余部分 -

vue-router修改Title的姿势

这周在写的时候发现不知道怎么改变Title,因为Vue注册的作用域是body,覆盖不到head的title部分,之后查了一下,有人提议说可以把作用域注册到html,试了之后似乎报了一个Warning,看着也不是什么靠谱的解决方案,作为一个英语渣就随便抽象的查了一下,GitHub有讨论:Accessing route VM within router hooks for updating document.title

现在应该算是比较官方的做法是:

首先加:

- 阅读剩余部分 -

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。

JavaScript 确定一个字符串的所有字符均不同

上次去Google Girls送了我一本面试金典,前天无聊就看了起来,看到的部分目前还是比较基础也有些意思的,在我看到第一堆算法题的时候我说了一句,这个题看着有点简单啊……然后秒被打脸,可以说,所有的题都是想简单就简单,想难就难,主要看你考虑了多少。

今天就拿其中一道题来说说上面的观点。

实现一个算法,确定一个字符串的所有字符是否不同,假设不允许使用额外的数据结构,又该如何处理。

- 阅读剩余部分 -

说说Promise

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

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

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

- 阅读剩余部分 -

rsync配置与使用指南

好了,这一篇我们顺着上面几篇的思路来说说rsync,所有的内容在参考链接中都可以看到更详细应该也是更有深度的说明……

rsync科普级介绍

如果你在寻找一个差异同步上传机制,那么rsync就是你想要的,在目录中选择性拷贝,安全保障,提供多种传输方式,具体的功能可以从之后的介绍和扩展阅读中看出。

rsync算法介绍

酷壳有一篇介绍,不过一些名词介绍的比较让人郁闷,先给个总结:rsync = 分块hash check + 滑动窗口。

- 阅读剩余部分 -

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

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

Git + Rsync

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

- 阅读剩余部分 -

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

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

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

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

- 阅读剩余部分 -