0%

gulp 中的 stream

through by dominic

through2 by

秋招,简历上写的是自学过,数据结构与算法,网络,操作系统…可是这玩意自己学的太烂,啥都不会,参加这次阿里秋招纯粹找虐的…附加题第一个二叉树居然没写完,数据结构拿图给我现在是啥都不知道,二叉树还有点戏…太对不起自己了…

还有几个选择题,做的时候,觉得自己能拿下来,先做个标记,回头再看,看了几个,有的也是确实时间不够,交卷之后再想的…

  1. 12 点,连成 59 根线,问有几根是由三个及三个以上的构成的…

    1
    2
    3
    4
    5
    6
    从12中取2个 = 12*11/2 = 66个

    三点共线,这三点本来要构成 C32 = 3 条线的,但是共线只有一条,减两条
    四点共线,本来构成C42 = 6条,结果一条,减五条

    照这样去凑,66-59 = 7 = 2 + 5 也就是,两条,一条三点共线,一条四点共线
  2. 睡过头概率 0.2,路上堵车概率 0.5,这两个都会导致主人公(如小明)迟到,现在,知道小明已经迟到了,问相关的概率

    这个是条件概率,以前学概率的时候很熟,现在忘光了,刚去翻了翻概率书,可以解了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    A事件 : 睡过头
    B事件 : 路上堵车
    C事件 : 迟到了

    则P(A) = 0.2 , P(B) = 0.5
    未迟到概率 = 1 - P(C) = 没有睡过头&没有堵车 = (1-0.2)*(1-0.5) = 0.4
    迟到概率P(C) = 0.6

    现在知道已经迟到了...

    睡过头 P(A|C) = P(AC)/P(C) = 睡过头&迟到概率/迟到概率 = 0.2/0.6 = 33.3%
    堵车 P(B|C) = P(BC)/P(C) = 堵车&迟到概率/迟到概率 = 0.5/0.6 = 5/6
  3. 二叉树遍历,移植前序&中序,求后序

    1
    2
    3
    4
    5
    6
    7
    8
    9
          对于

    A
    / \
    B C

    前序指 ABC
    中序指 BAC
    后序指 BCA
    最后解为
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        1
    / \
    / \
    / \
    2 4
    \ /
    3 5
    / \
    6 9
    \
    7
    \
    8

    后序为 3-2-8-7-6-9-5-4-1

阅读全文 »

之前写的图片下载器,使用 python 和 C#,今儿个使用 nodejs 重写,使用 cheerio 库,和 jq 比较像

代码是没问题,我出问题了…

  • http.request 没有同步版本,导致一开始就回调…
  • http.request 参数要么是 string,要么是 option,必须要分 host,path,但是这个下载器必须带 User-Agent 的 header
  • request 类库 option 可以使用 url|uri,但是回调函数,callback(err,res,body),body 是 utf8 编码,gbk 中文乱码,而 res 是 request 类库处理之后传回的,此时给 res 加上 on data,end 事件接收数据无效,使用 pipe 也无效
  • 获取页面的 srcs,判断是否有下一页,同步代码一个 while 搞定,node 使用 async.whilst 也可以,之前使用 if + 递归搞定,但是内存占用更多,不好的方法,使用 whilst 代替
  • 下载完回调,log 一下耗时,本想使用 async.each,但是这货不提供 index 呀,自己实现 index++,可能不能保证顺序呀,使用[].forEach,自己实现 done 函数,判断 finished 看是否全部完成,呢吗 async 内部也是这么写的好么!!!我就想实现个回调而已啊!!!!
  • 下载文件,res.pipe(fs-stream),此时要给 fs.WriteStream 加上 finish 事件,要不然,程序不管有没有接受完,就退出了
阅读全文 »