小米一面(Python后端),攒人品

背景,楼主机械专业,学了14个月Python及相关体系。
报的JAVA工程师,后面了解到面试我的考官是小米电商组的,组中电商开发这一块语言是Java,推荐算法那块有Python岗位,考官应该是Java语言的,所以一上来就开始问项目了。
第一个项目相关:
1.项目数据库的设计。答:我做的是一个物联网项目,下位机控制测试工艺,上位机把测试数据实时存储在数据库,我采用的是ORM框架,因为这个插入效率不是很高,所以开启了事务,在测试一件待测件时数据只add,等测完一个之后再统一commit,这样效率就可以跟上了。
2.频繁插入有没有考虑过一次insert多个数据。答:这个技术我是知道的,但ORM框架有封装好的函数,底层实现应该是类似的功能
3.说下ORM和原生数据库的区别。答:ORM框架把数据库映射成一个类,每个字段对应一个类属性,这样操作类就可以实现无SQL语句操作数据库,但读取数据时得到的是一个对象,每个字段的值需要用类.属性获得,比较麻烦,所以我在类里面自定义了一个函数,把我需要的属性拼接成一个有序字符串返回,这样就可以实现遍历了。
4.ORM还有什么其他优点。答:(我也不确定)我就说可以防止SQL注入吧
5.什么是SQL注入。答:(其实我只知道有这回事,一直没来得及深究)我就说,基本是用字符串的拼接,利用巧办法将SQL语句置为恒True,这样就可以脱库了。
6.前后端不分离的风险。答:(没有答案)我就说前后端不分离每次请求都需要渲染全部页面数据返回,可能会对服务器压力比较大,别的就不知道了;考官说,其实前后端分离对服务器的压力才更大,因为ajax请求频率比渲染模板之后再返回的频率更快。问,那到底是什么风险?考官说,攻击者在评论里提交一个js代码,在渲染模板时会对页面产生控制。我说这个有印象,模板语言里有这个防护机制,打开之后就不会识别富文本格式了。
7.项目中提到了对数据进行机器学习,希望学习的目标是什么。答:(我对机器学习了解不是很多其实)我就说根据工人班次,待测件,工艺方案等作为特征值,因为是测试,所以希望的结果是提高合格率。
第二个项目相关:(这个是模拟电商平台的项目)
1.项目中提到了redis缓存购物车,用什么数据格式实现的。答:用的是哈希格式,cart+客户id拼接为key,字段field为商品id,value为具体数量。
2.如果在小米买了电视赠送一个音响,怎么在redis缓存里嵌套实现。答:据我的知识,redis里无法实现嵌套,我可能会在哈希里增加一个键值对,field为对应商品的id加标识构成,表示是赠送。考官说可以把value用字符串表示,可以存储更多信息,又追问如果还需要对商品添加到购物车的时间进行倒序表示怎么实现?我说不知道,反问怎么做。考官说把商品id对应的value设置为各个属性的field,然后在属性field的value里面再记录具体信息。学到了😮
3.部署里面用到了Nginx,Django框架怎么获得客户的ip。答:(想了一下,好像超出了知识范围)我就说我其实不知道,我最多会考虑放进url的参数里面传递,这个应该是***服务器反向***服务器的知识,不太了解。
做个题吧:
输入一个字符串,输出float
问:需要考虑非法么?考官说那就考虑吧。
答:
def get_float(str_):
    str_ = str_.strip()
    cnt = 0
    res = ""
    for i in str_:
        if i == ".":
            cnt += 1
        if cnt < 2 and (i.isdigit() or i == "."):
            res += i
        else:
            break
    return eval(res)
不是考官希望的方法,考官进一步对方法进行了限制,需要实时转化为float,输入"1.1",输出1.1;输入“1.12”,输出1.12
问:需要考虑非法么?可以不考虑。
答:
def get_float2(str_):
    flag = 0
    res = 0
    cnt = 0
    for i in str_:
        if i == ".":
            flag = 1
            continue
        if not flag:
            res = res * 10 + int(i)
        else:
            cnt += 1
            res += int(i) / (10 ** cnt)
    return res
反问环节:
因为我学习的是Python,我最先考虑的是算法岗,但因为自知达不到岗位要求转了开发岗,后面希望进一步学习最终实现转岗,所以不希望换语言,而我投递的是Java岗,那咱们有Python岗么,答案见开头。
考官最后问对工作城市有要求么,开发岗在北京,南京。我:我投递的是武汉啊,我可能觉得南京互联网氛围不是活跃。考官:国内互联网除了北上广深杭成都好点,武汉和南京差不多,如果想换地方可以跟hr沟通。我:需要重新面试么。考官:需要跟hr沟通。我:其实我主要考虑的是房价问题,南京也可以接受的。
总结:面试体验很好,小米的考官不会让人有尴尬的感觉。可能由于语言原因,没有问Python核心编程的东西。总时长约1小时,5:50——6:50。
#面经##Python工程师##校招##小米#
全部评论
因为我学习的是Python,我最先考虑的是算法岗,但因为自知达不到岗位要求转了开发岗,后面希望进一步学习最终实现转岗,所以不希望换语言, 和我想法一样
1 回复
分享
发布于 2019-09-26 07:49
字符串转float不可以用float函数try - except吗,还是说有什么特殊要求,比如字符串是整数不带点之类的?
点赞 回复
分享
发布于 2019-09-20 23:11
阅文集团
校招火热招聘中
官网直投
校招吗
点赞 回复
分享
发布于 2019-09-26 08:56
做后台开发为啥中途不换语言呢?
点赞 回复
分享
发布于 2019-12-17 22:23
python没有开发岗吗
点赞 回复
分享
发布于 2020-12-01 16:45

相关推荐

4 28 评论
分享
牛客网
牛客企业服务