42BTC.com python笔试题 ( 选择最佳回答者奖励的 价值 420 RMB 的 比特币 )
** 前言 **
https://42btc.com 是一个比特币交易平台 , 属于42区(
http://42qu.com )旗下产品
因为项目发展势头不错 , 现在需要招人
同时 , 还有有电信云计算的公有云项目外包(就是帮电信做一个卖vps的解决方案) , 也需要人
前端后端都需要 ( 简历->
42btc.com@gmail.com )
我一直相信 , 分配并完成一个小项目 , 是考察一个人水平的最好方式
所以 , 现在我出一个基于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 zsp042@gmail.com 沟通
参考文献 :
在GAE上使用服务器推(Channel API)+聊天室示例
http://955.cc/cDFdChannel API Overview (Python)
https://developers.google.com/appengine/docs/python/channel/overview?hl=en** 付费方式 : **
请将您的
1. 代码地址 ( 代码放在
bitbucket.org 或
github.org 上 )
2. 演示的gae的空间地址
3. 演示的历史仓库地址
发送到
42btc.com@gmail.com
我们会于4月底前, 评选出最优雅清晰的实现整合到42btc.com中
被选择的那个版本 , 将支付作者价值420元的bitcoin
( 价格以付费前一天
http://42btc.com 的最终平均价为准 )
你可以在42btc.com上卖到它(兑换为人民币) , 或是自己收藏着玩
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.