面试中遇到的Python和C++问题

问题列表

python里的list和tuple有什么区别?
  • tuple(元组)是不可变列表,
  • list的可变性是由于其底层实现机制导致的, 动态数组 + 链表
python里的string释放可以使用for循环修改?

不可以, 它是不可变序列

python里的dictionary和C++的map有什么区别? 其底层实现原理是什么?
  • python里的字典通过哈希表实现的
  • C++ 的map的实现时通过红黑树实现的
  • dict操作复杂度如下:
    操作时间复杂度
    copyO(n)
    get(value)O(1)
    delete(value)O(1)
    search(in)O(1)
    itteratioonO(n)
python的set实现原理
  • set与dict类似,但hash函数直接操作它的元素, 而且不包含重复元素
  • 实现方式成为Hash set
python的OrderedDict的实现原理
  • python中的字典是按照hash来存储的, 因此是无序的
  • OrderedDict的实现是 哈希表 + 双向链表
什么是双向队列

它是一种具有队列和栈的性质的数据结构,可以高效的在头尾两端插入和删除元素

什么是优先队列
  • 优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出(first in, largest out)的行为特征。
  • Python里PriorityQueue是通过heapq实现的,它考虑了线程安全的问题
最大堆、最小堆
    • 它是一棵完全二叉树或者为空
    • 树中节点的值总是不大于或者不小于其孩子节点的值
    • 每一个节点的子树也是一个堆
  • 最大堆: 除了根节点外的的所有节点都要满足小于等于其父节点的值
  • 最小堆: 除了根节点以外的所有节点都要满足大于等于其父节点的值
  • Python里是通过list维护堆的性质实现的
python中的深、浅copy
  • 浅copy, copy第一层内容,不copy内部对象,下面这个例子可以很好的理解浅copy.
    lst = ["CV", "NLP", "SPEECH", ["DL, ML, AI"]]
    lst_copy = lst.copy()
    print(id(lst), id(lst_copy))
    print(id(lst[3]), id(lst_copy[3]))
    lst.append("Algorithm")
    print(lst, lst_copy)
    lst[3].append("Statitics")
    print(lst, lst_copy)
    
    输出结果:
    4584596232 4584596360
    4584596104 4584596104
    ['CV', 'NLP', 'SPEECH', ['DL, ML, AI'], 'Algorithm'] ['CV', 'NLP', 'SPEECH', ['DL, ML, AI']]
    ['CV', 'NLP', 'SPEECH', ['DL, ML, AI', 'Statitics'], 'Algorithm'] ['CV', 'NLP', 'SPEECH', ['DL, ML, AI', 'Statitics']]
    
  • 深copy, copy所有内容,生成一个新的完完全全的对象
list可以作为哈希关键字吗
  • 一个对象能不能作为字典的key,取决于其有没有__hash__方法, 参考(https://blog.csdn.net/lnotime/article/details/81192207)
  • list, dict, set不能作为key
  • 数值,字符串,完全不可变的元组,函数,类,方法等可以作为key
C++的多态是什么,如何实现的?
  • 多态按字面的意思是多种形态,当类之间存在层次结构并且类之间是通过继承关联时,就会用到多态
  • C++多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数
  • 虚函数实现, 在基类中使用关键字virture声明的函数
  • 参考链接 C++ 多态

补充知识

  1. 哈希表

    • 关键字 基于关键字直接找到数据的存储位置
    • 哈希地址 在查找表中的存储位置
    • 哈希函数 通过这个函数可以快速求出该关键字对应数据的哈希地址
      • 直接定址法(一次函数)
      • 数字分析法
      • 平方取中法
      • 折叠法
      • 除留余数法
      • 随机数法
    • 解决冲突的方法
      • 开放定址法
        • 线性探测
        • 二次探测
        • 伪随机数探测法
      • 再哈希法
      • 链地址法
      • 建立一个公共溢出区

参考链接

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值