创业团队诚招 Python 主程序员,坐标上海张江,此为初步面试题,待遇 20~40K,附期权 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Harveyguo
V2EX    Python

创业团队诚招 Python 主程序员,坐标上海张江,此为初步面试题,待遇 20~40K,附期权

  •  1
     
  •   Harveyguo 2016-08-11 15:56:39 +08:00 6974 次点击
    这是一个创建于 3359 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用过两门以上编程语言;至少精通一门编程语言

    2 年以上 Python 经验;或 5 年以上开发经验

    如下面试题,如感兴趣可以将题目答案及简历发送至 [email protected] 邮箱,期待与你的相遇!

    有 20 种不同的树形 dict ,需要映射为结构更简单的扁平化 dict 。 为了不进行硬编码,需要写一个 python 库,定义一套规则,完成从树形字典的映射为扁平化字典。 注意两个字典的对应字段的名称可能是不同的。 说明库的设计思路,实现思路。


    范例数据输入

    in_data= { u'deliveryOrder': { u'warehouseCode': u'OTHER', u'deliveryOrderCode': u'3600120100000', u'receiverInfo': { u'detailAddress': u'\u5927\u5382\u680818\u53f7101', u'city': u'\u4e94\u8fde', u'province': u'\u5c71\u4e1c', u'area': u'\u5927\u5382' }, u'senderInfo': { u'detailAddress': u'\u6587\u4e09\u8def172\u53f7', u'city': u'\u676d\u5dde', },
    }, u'orderLines': { u'orderLine': { u'itemId': u'0192010101', u'planQty': u'20', } }
    }

    #以下为库主程序运行后的范例数据输出 out_data : { 'warehouse_code': u'OTHER',
    'express_code': u'3600120100000',

    'receiver_area': u'\u5927\u5382', 'receiver_province': u'\u5c71\u4e1c', 'receiver_address': u'\u5927\u5382\u680818\u53f7101', 'receiver_city': u'\u4e94\u8fde', 'sender_city': u'\u676d\u5dde', 'sender_address': u'\u6587\u4e09\u8def172\u53f7', 'lines': [ { 'item_id': u'0192010101', 'product_qty': u'20' } ], 

    }

    第 1 条附言    2016-08-13 10:22:34 +08:00
    补充一下我们的情况吧,项目是去年底启动的, 3 月份发布测试版, 5 月份上线第一个用户。做的是面向企业后端的 SaaS 应用,主要针对电商企业的仓库管理效率,算是企业效率工具类的软件。技术是 Python+AngularJS ,做了自动化测试看板,目前每周迭代,计划在 Q4 下轮融资,期待与大家共同实现梦想!
    由于产品后台的业务逻辑较复杂,所以后端人员需求更多一些,诚招 Python 各级别程序员,包括联合创始人!
    34 条回复    2016-08-15 13:18:35 +08:00
    Harveyguo
        1
    Harveyguo  
    OP
       2016-08-11 15:58:46 +08:00
    公司网址 http://www.vwms.cn ;天使轮;目前团队不到 20 人,产品 5 月份上线,已有 5 家企业用户;其他情况欢迎来电来函咨询。
    yuku
        2
    yuku  
       2016-08-11 16:01:44 +08:00 via iPhone
    以前听说面试时帮对方解决问题?
    wd85318
        3
    wd85318  
       2016-08-11 16:03:32 +08:00
    这个应该就是帮忙解决问题了
    @yuku
    fuling
        4
    fuling  
       2016-08-11 16:03:46 +08:00
    @yuku :/ 你这么一说,后面都没人回复 LZ 了
    cxyfreedom
        5
    cxyfreedom  
       2016-08-11 16:04:17 +08:00
    如果考虑到不同型的 dict ,范例输出的 lines 不是还没有完全扁平吗
    qianbaooffer
        6
    qianbaooffer  
       2016-08-11 16:04:35 +08:00
    boss 值聘上好像聊过
    luluuulu4848
        7
    luluuulu4848  
       2016-08-11 16:04:44 +08:00
    @yuku 同感。。。
    Harveyguo
        8
    Harveyguo  
    OP
       2016-08-11 16:04:54 +08:00
    额~你这个顾虑怎么解决呢?把我们 3 月份实现的这段代码发上来?
    luluuulu4848
        9
    luluuulu4848  
       2016-08-11 16:05:22 +08:00
    @yuku 这一看就是公司业务上的需求
    shyling
        10
    shyling  
       2016-08-11 16:06:56 +08:00
    {aA:{bB:c}}变为{aa_bb:c}然后再根据情况去掉前缀 /删掉不需要的
    Harveyguo
        11
    Harveyguo  
    OP
       2016-08-11 16:09:02 +08:00
    @yuku @luluuulu4848 @wd85318 各位大牛,如果真的需要解决这个问题,那会直接把这个问题发上来求教的, Python 开源社区这么多,有必要用这种方式解决实际的业务问题吗?如果连这个问题都需要用这种方式来解决,那我的 CTO 就可以直接洗洗睡了……
    之所以用实际的业务问题是希望面试者没有地方去搜索答案而已,如果各位有更好的题目或者方式,欢迎赐教。
    hitmanx
        12
    hitmanx  
       2016-08-11 16:17:14 +08:00
    这种拿关键字一搜就有了,我能想到的关键字
    "python nested dictionary flatten"

    然后就看到了 SO 上例如
    http://stackoverflow.com/questions/6027558/flatten-nested-python-dictionaries-compressing-keys
    好像还有个库
    https://pypi.python.org/pypi/flatdict
    等等,都没点进去细看。
    Magic347
        13
    Magic347  
       2016-08-11 16:51:34 +08:00
    dfs 可解
    domty
        14
    domty  
       2016-08-11 17:13:30 +08:00
    这个很难吗?
    感觉就是把一个多层的树遍历出来成为一个集合。
    但是为什么后面的
    u'senderInfo': { u'detailAddress': u'\u6587\u4e09\u8def172\u53f7', u'city': u'\u676d\u5dde', },},
    u'orderLines': { u'orderLine': { u'itemId': u'0192010101', u'planQty': u'20', } }
    在结构上没看出什么区别,而后面的那个解析出来却是个 list ?
    Yinz
        15
    Yinz  
       2016-08-11 17:50:47 +08:00
    纯好奇,说一下我的思路看看:D
    看起来这个字段名称映射不是简单的拼接 key ,估计需要使用时指定一个映射表的结构。

    所以大概是一个递归函数 flattening(),参数两个,分别是 struct_dict 和 target_dict 。

    函数 for 遍历 target_dict.items(), 每个元素,先读取 tmp = struct_dict[key],判断 tmp 类型

    是 str/unicode ,则 value 是数据字段,则 result_dict[key] = value ;

    tmp 仍是 dict ,则 sub_dict = flattening(tmp, value) ,然后合并 result_dict 和 sub_dict ,可以循环合并,可以 from collections import ChainMap

    然后是 struct_dict 大概是这个样子的

    {
    u 'deliveryOrder': {
    u 'warehouseCode': u 'warehouse_code',
    u 'deliveryOrderCode': u 'express_code',
    u 'receiverInfo': {
    u 'detailAddress': u 'receiver_address',
    u 'city': u 'receiver_city',
    u 'province': u 'receiver_province',
    u 'area': u 'receiver_area'
    },
    u 'senderInfo': {
    u 'detailAddress': u 'sender_address',
    u 'city': u 'sender_city',
    },
    },
    u 'orderLines': {
    u 'orderLine': u'lines'
    }
    }

    不过这样, lines 下面的元素名称映射就不好搞了,我想到的办法是映射字符串特殊标记,不过这样 struct_dict 就很复杂难看了,暂时还没有想到优雅的方案。如果没有这个 list 一切都好说:(

    这样写下来感觉这个问题的难点就是那个结果里面的 list 了,不知最后的方案是怎么样解决的?纯好奇,希望能看到答案:D
    hitmanx
        16
    hitmanx  
       2016-08-11 17:51:29 +08:00
    对的,就是一棵多叉树遍历, dfs 就行。
    vnady
        17
    vnady  
       2016-08-11 19:47:43 +08:00
    这种招聘挺好的,节约彼此的时间。比直接面试靠谱。
    mymike
        18
    mymike  
       2016-08-11 20:08:31 +08:00
    映射并存储字段名称
    guyskk
        19
    guyskk  
       2016-08-11 20:19:40 +08:00
    以前写过一个类似的,用递归实现。 https://github.com/guyskk/walkdict
    zhuangzhuang1988
        20
    zhuangzhuang1988  
       2016-08-11 20:31:36 +08:00
    不错 不错, 薪资不错。。
    WinterWu
        21
    WinterWu  
       2016-08-11 21:35:59 +08:00 via iPhone
    题目中写了字段名可能不同,因此总要用某种表。 1 ,直接将源 dict 字段和目标字段构建一个 dict , 2 ,抽象出规则,将无法用规则表达的用额外 dict 实现。具体到怎么扫描整个 dict 这个最简单就是迭代轮询,也可以用各种算法。
    但是,这个题目没说清楚最重要的问题:场景,数据量,表规模。场景:像这样的诉求我猜很可能在数据库中转换数据存储方式,那就应该直接使用数据库自身功能实现,比如 mongo agg 处理。数据量:少量数据情况下根本不值得写什么库,极大数据量情况下用 python 可能也麻烦。当然实际中还要考虑很多其它因素。
    抛开上面的问题,只说题目,那直接写个 mapping 轮询就好了
    newghost
        22
    newghost  
       2016-08-11 22:35:17 +08:00 via iPhone
    所以没事还是别发面试题了 这么多人 challenge
    owt5008137
        23
    owt5008137  
       2016-08-11 22:43:37 +08:00 via Android
    https://github.com/xresloader/xresloader/blob/master/README.md
    是不是和我这个相反?结构化转非结构化不要太简单。
    扁平化的数据转树形结构才麻烦
    likuku
        24
    likuku  
       2016-08-11 22:46:22 +08:00
    技术都可以学习培养,由解题所无法获知的另一些非技术面的信息反而在工作中更重要吧
    IMRES
        25
    IMRES  
       2016-08-11 23:21:45 +08:00 via iPhone
    喜欢这样的招聘帖,直接
    garytqq
        26
    garytqq  
       2016-08-12 08:08:02 +08:00
    感觉很像这个东西完成的功能: from flask_restful import marshal

    数据是变化的, key/field 不变的话,建立源 key/field 到目标 key/field 的映射关系,使用上面的方法
    Harveyguo
        27
    Harveyguo  
    OP
       2016-08-12 12:04:42 +08:00
    @mymike 有兴趣交流下吗? [email protected]
    Harveyguo
        28
    Harveyguo  
    OP
       2016-08-12 16:58:10 +08:00
    各位大牛,有愿意找工作的吗?我该怎么联系你们呢?真急死我了。。。。
    补充一下我们的情况吧,项目是去年底启动的, 3 月份发布测试版, 5 月份上线第一个用户。因为是面向企业后端的 SaaS 应用,所以业务上的细节还是比较多,主要针对电商企业的仓库管理效率,算是企业效率工具类的软件。技术是 Python+AngularJS ,做了自动化测试看板,目前每周迭代,节奏还是比较快。计划在 Q4 下轮融资,期待与大家共同实现梦想!
    yutian2211
        29
    yutian2211  
       2016-08-12 17:11:51 +08:00
    。。。。。招聘网站
    daocloud
        30
    daocloud  
       2016-08-13 11:16:36 +08:00   2
    DaoCloud 发来贺电!
    dh7758
        31
    dh7758  
       2016-08-13 11:52:39 +08:00
    套路
    ntop
        32
    ntop  
       2016-08-13 20:35:13 +08:00
    任何发明新算法的都是耍流氓,这个很简单其实抽象出来就是一个爬虫的应用。输入的数据结构类似于一个网页,输出扁平化的结构类似于爬虫的结果,所以借鉴 XMLPath 的做法,定义映射规则,再写一个遍历数据结构的引擎就是就解决了。原来的结构是 json 的,可以利用 jsonpath ,在结合业务自己优化优化
    xiaobeitzb
        33
    xiaobeitzb  
       2016-08-13 20:49:12 +08:00
    大胆推测是为了把操作系统的树形结构路径,存到数据库(邻接表)里么?
    asuraa
        34
    asuraa  
       2016-08-15 13:18:35 +08:00
    尼玛能不能用 python3
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3750 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 00:51 PVG 08:51 LAX 17:51 JFK 20:51
    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