42BTC.com python笔试题 ( 选择最佳回答者奖励的 价值 420 RMB 的 比特币 ) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
外包信息请发到 /go/outsourcing 节点。
不要把相同的信息发到不同的节点
zuroc
V2EX    酷工作

42BTC.com python笔试题 ( 选择最佳回答者奖励的 价值 420 RMB 的 比特币 )

  •  
  •   zuroc 2013-03-25 22:41:21 +08:00 6230 次点击
    这是一个创建于 4623 天前的主题,其中的信息可能已经有所发展或是发生改变。
    42BTC.com python笔试题 ( 选择最佳回答者奖励的 价值 420 RMB 的 比特币 )


    ** 前言 **

    https://42btc.com 是一个比特币交易平台 , 属于42区( http://42qu.com )旗下产品

    因为项目发展势头不错 , 现在需要招人

    同时 , 还有有电信云计算的公有云项目外包(就是帮电信做一个卖vps的解决方案) , 也需要人

    前端后端都需要 ( 简历-> [email protected] )


    我一直相信 , 分配并完成一个小项目 , 是考察一个人水平的最好方式

    所以 , 现在我出一个基于gae的小项目 (也是42btc需要的一个功能 ) , 作为招人的笔试题

    并将从完成的人中 , 选出一个最佳回答者, 奖励的 420 RMB (用bitcoin结算, 你可以在http://42btc.com 出售兑换成RMB )

    前端就直接给自己个人博客作为作品展示吧


    应用使用Python 基于Google App Engine开发

    因为GAE被墙 , 您可以使用 smarthosts ( https://code.google.com/p/smarthosts , 需要自己配置自己的APP的域名) , 然后用https 即可访问

    需求如下

    ** 不过, 先插播一条广告 **

    北京 2013 Python聚会

    地点:北京地铁10号线亮马桥附近京信大厦1234。地图见:http://www.qfpay.com/contact/
    时间:2013年3月30日 14点 开始

    主题:
    1。构建自动化的编译测试android,ios应用(Mengyang li)
    2。凤翔 - 类parse的数据平台分享 (liucong)
    3。自动化django admin (sshwsfc)
    --

    4。SSO的单点登录解决方案 (张沈鹏 , 就是我)

    预告片 :

    写新网站, 要写 注册 / 登录 / 微博&豆瓣&QQ登录(还有绑定邮箱) / 发送激活邮件 / 找回密码 / 更改邮箱 / 上传头像 / 剪裁头像 / 绑定手机 / 填写地址 / 用户设置自己的个性网址 ...

    然后 , 写新网址, 所有东西重新折腾一遍 , 所有来围观的新用户也跟着重新折腾一遍 …

    终于, 有一天, 你累, 心老了, 不想再这样折腾了

    于是, 你需要 SSO的单点登录解决方案 以及 跨网站的用户身份系统 -- 俗称 通行证

    其实 , 我觉得 , 通行证可以成为类似评论 ( 类似 disqus.com ) 的 网站无关的插件式解决方案

    .... … … … … … … … …

    我想 , 这是我人生中最后一次写用户帐号系统


    广告结束

    ** 项目需求正文 **

    API

    ticker (股票实时的牌价)

    描述

    此API是一个基于Google App Engine channel 的 长连接
    牌价的意思就是股票交易市场那些红红绿绿的价格

    输出数据 :

    {"0-1": [1364213624, 266255757, 122982587944, 46500000000, 46500000000, 49500000000]}

    数据解析 :

    {
    "0-1" # 买进的货币 - 卖出的货币 , 货币用数字用数字常量表示
    :
    [
    1364205583, # 时间 (精确到秒)
    #以下数值为整数 , 除以 100000000 后为真实数据
    266255757, # 1 当日累计交易量 , 单位为 买进货币
    122982587944, # 2 当日累计交易量 , 单位为 卖出货币
    46500000000, # 3 当前成交的价格
    46500000000, # 4 当前买进的最高报价 (单位为 卖出货币)
    49500000000, # 5 当前卖出的最低报价 (单位为 卖出货币)
    ]}

    货币的数字常量 : 0 - 比特币 , 1 - 人民币

    ** 演示作品要求实现以下功能 **

    1. 首页
    这是一个方便测试页面
    有一个表单
    可以输入上面除时间外的五个参数
    然后点击提交 , 会像所有连接着的客户端推送数据

    2.
    客户端会用一个access_token为标识符创建长连接

    3.
    客户端每隔1分钟需要发送一个心跳包给服务器
    否则服务器端会断开链接(移出send_message的队列)
    断开链接的时候 , 服务器会给客户端发送最后一条错误消息
    {“error”:{“code”:1, msg:”connection timeout”}}

    4.
    为了方便使用 , 我们同时在github维护一个官方的 ticket 仓库保存所有的牌价历史

    我们会在一台linux服务器上启动一个进程
    通过socket主动去连接这个google长链接
    当收到新数据的时候, 会追加当日的牌价文件中(一行一个) 比如 2013-03-01.txt
    然后commit , 这样用户就可以很容易的拿到所有的历史数据

    最后, 每分钟可以commit多次, 但是最多只push一次(如果没有更新不push, **首次更新立即push,方便调试**)
    push 请单独开一个线程 , 不要阻塞接受数据的线程

    同时commit的时候, commit的注释请直接用这条数据
    这样写浏览器插件的同学就可以通过直接访问类似如下的
    https://api.github.com/repos/torvalds/linux/commits
    链接拿到当前数据
    PS:
    这个链接还可以通过 jsonp 调用
    https://api.github.com/repos/torvalds/linux/commits?callback=xxxxxxx
    这样可以接着跨域嵌入到网页中
    同时还接受以下参数
    * since
    Optional ISO 8601 Date - Only commits after this date will be returned
    * until
    Optional ISO 8601 Date - Only commits before this date will be returned

    如何写socket请参考 https://gist.github.com/zuroc/5237007
    操作git请用 http://www.pygit2.org/

    7.
    最后 , 请用Gogole Doc为其编写文档


    ** 成品演示 : **

    启动linux的github同步进程
    在你的app首页输入一个数据 , 然后提交
    然后 , 刷新 github 能看到数据更新 和 相应的commit

    代码请遵循 PEP8 规范
    https://code.google.com/p/zhong-wiki/wiki/PEP8

    如果需求有不清楚的地方 , 请+我的qq 375956667 或 gtalk [email protected] 沟通

    参考文献 :
    在GAE上使用服务器推(Channel API)+聊天室示例
    http://955.cc/cDFd

    Channel API Overview (Python)
    https://developers.google.com/appengine/docs/python/channel/overview?hl=en

    ** 付费方式 : **

    请将您的

    1. 代码地址 ( 代码放在 bitbucket.orggithub.org 上 )
    2. 演示的gae的空间地址
    3. 演示的历史仓库地址

    发送到 [email protected]

    我们会于4月底前, 评选出最优雅清晰的实现整合到42btc.com中
    被选择的那个版本 , 将支付作者价值420元的bitcoin
    ( 价格以付费前一天 http://42btc.com 的最终平均价为准 )
    你可以在42btc.com上卖到它(兑换为人民币) , 或是自己收藏着玩
    10 条回复    1970-01-01 08:00:00 +08:00
    december
        1
    december  
       2013-03-26 10:24:42 +08:00   1
    现在还有人玩这个啊,教主你是后知后觉吗?
    nkliwenjian
        2
    nkliwenjian  
       2013-03-26 11:10:28 +08:00
    果断吐槽一下吧。
    1. 编程规范里面的就近原则知道吧,定义变量的地方应该跟使用变量的地方尽可能的靠近。你竟然还在中间插广告。
    2. 整个文章的排版乱七八糟的。
    3. 写代码就算了,还规定各种技术选型啊之类的东西,强迫别人搭环境?殊途同归好么,把自己的需求提炼成一个核心的骨干,让别人表达出来那意思就好了。
    likexian
        3
    likexian  
       2013-03-26 11:22:31 +08:00   1
    看着这乱七八糟的排版,还有东一句西一句的描述我就蛋痛。
    fanhan
        4
    fanhan  
       2013-03-26 21:01:31 +08:00
    @likexian 哈哈,院长又在吐槽了
    chinshou
        5
    chinshou  
       2013-03-26 22:32:58 +08:00
    420元真是一笔巨款啊
    SharkIng
        6
    SharkIng  
       2013-03-26 22:45:24 +08:00
    给我感觉就是想让多个人以应聘的名义帮自己公司写一个小程序,然后最多付420元,这个比在猪八戒上话1000多招人写高明多了啊。
    Mac
        7
    Mac  
       2013-03-26 22:50:33 +08:00
    成功的三要素:坚持,不要脸,坚持不要脸。
    66450146
        8
    66450146  
       2013-03-26 23:18:34 +08:00
    这样好像没有直接提供固定面值的 BTC 有吸引力啊。。。
    darcy
        9
    darcy  
       2013-03-27 01:43:25 +08:00
    42btc是运行在裸域下的,并且加了证书,我很好奇教主咋跟GAE关联起来的,反向代理?
    加上Chanel功能,必然凭空增加很多压力,开个子频道直接连GAE?

    记得以前Channel要付费的,从教主这个帖子中才发现如今已经由了免费流量,顺手写了一个Demo,有空的同学继续完善
    https://bitbucket.org/darcyliu/broadcast
    wenbinwu
        10
    wenbinwu  
       2013-03-27 02:01:09 +08:00
    我是来看价值420的代码的 =D
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5046 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 07:45 PVG 15:45 LAX 23:45 JFK 02:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86