小米一面面经

1、印象最深的一个项目。

2、Python中list和tuple的区别是什么?

  • 声明方式不同,列表用[]声明,元组用()声明。

  • 列表内的元素是可变的,元组内的元素时不可变的。

  • 注意:

    • 元组中的元素值是不可以修改的!但是可以对元组进行连接组合。

    • 元组中的元素值是不允许删除的!但是可以使用del删除整个元组。

3、Python中的迭代器和生成器分别是什么?

  • 迭代器

    • 迭代器是访问集合元素的一种方式,迭代器是一个可以记住遍历的位置的对象

    • 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完。迭代器只能往前,不能后退

    • 迭代器的两个基本方法,iter()和next()。

  • 生成器

    • 使用了yield的函数被称为生成器。

    • 生成器是一个返回迭代器的函数,只能用于迭代操作。在调用生成器运行的过程中,每次遇到yield时,函数会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方法时,从当前位置继续执行。调用一个生成器函数,返回一个迭代器

4、设计模式知道哪些?讲讲单例模式的用处?

  • 无序列表内容
  • 无序列表内容
  • 无序列表内容

5、MySQL和Redis的区别是什么?

  • 数据库类型

    • MySQL是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度慢。
    • Redis是非关系型数据库,也是缓存数据库。将数据存储在缓存中,缓存的读取速度块,能够大大的提高运行效率,但是保存时间有限。
  • 数据库作用

    • MySQL作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在I/O操作,如果频繁的访问数据库:第一,会在反复链接数据库上花费大量时间,从而导致运行效率过慢;第二,反复的访问数据库也会导致数据库的负载过高

    • Redis数据库是一种缓存型数据库,用于存储使用频繁的数据,这样可以减少访问数据库的次数,提高运行效率

6、MySQL的引擎是什么?

  • InnoDB
    • 该引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM引擎,写的处理效率会差一些,并且会占用更多的磁盘空间以保留数据和索引。

7、linux显示当前路径的指令是什么?

  • pwd

8、查看资源使用量的指令是什么?

  • top命令

    • 能够实时显示系统中各个进程的资源占用情况。
  • ps命令

    • 用于报告当前系统的进程状态。可以查看**哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。
  • pmap命令

    • 用于报告进程的内存映射关系。
  • free命令

  • 显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区

9、返回家目录的指令是什么?

  • cd ~

10、TCP连接中滑动窗口的作用是什么?

  • 用于进行流量控制,防止接收方来不及接受数据,造成网络丢包和网络拥塞等情况。

11、输入一个url的过程是什么?

  • 浏览器向DNS发出请求,解析该url的ip地址。

  • DNS解析出ip地址后,浏览器和服务器简历TCP连接。

  • 浏览器和服务器之间进行请求和响应等操作。

  • 释放TCP连接。

  • 浏览器将拿到的数据进行渲染,显示界面。

12、DNS和Mac地址有关系吗?

  • 没有关系。

    • DNS是将域名和IP联系起来;而ARP是将IP和MAC联系起来。一个在应用层,一个在网络层。
    • ip地址的目的是为了解决网络与网络之间的通信。而mac地址则是为了解决相邻主机间的通信。

13、ARP欺骗是什么?

  • 背景

    • 两个计算机在同一局域网时,发送方需要知道接收方的MAC地址。如果发送方不知道接收方的MAC地址,就无法发送信息,这时就要询问ARP。ARP会在局域网里向所有计算机广播,找到接收方的MAC地址。
  • 原理

    • 主机之间在传递消息时,发送方得先问ARP找到接收方的MAC地址才能发送。ARP向局域网中的所有主机广播询问接收方的MAC地址。这个询问包含了发送方的IP和MAC地址,黑客如果在这个局域网中,也会收到ARP Request,从而得知发送方的地址。这样,黑客就可以冒充别的主机,进行欺骗活动,截取数据包。

14、写一个生成器函数。

def helper(n):
    i = 0
    while i<n:
        yield i
        i += 1
f = helper(5)
while True:
    try:
        print(next(f))
    except:
        print('over')
        break
  • 输出
0
1
2
3
4
over

15、写一个单例模式。

  • 单例模式的主要目的是确保某一个类只有一个实例存在

  • 使用模块实现单例模式。

    • 因为模块在第一次导入时,会生成.pyc文件,当第二次导入时,会直接加载.pyc文件,而不会再次执行模块代码。因此,我们只需要把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。
class Singleton(object):
    def foo(self):
        pass
singleton = Singleton()
  • 将上面代码保存在文件demo.py中,要使用时直接在其他文件中导入此文件中的对象,这个对象即为单例模式的对象
from demo import singleton
  • 使用装饰器实现单例模式
def Singleton(cls):
    _instance = {}
    def _singleton(*ars, **kwargs):
        if cls not in _instance:
            _instance[cls] = cls(*args, **kwargs)
        return _instance[cls]
    return _singleton

@Singleton
class A(object):
    a = 1
    def __init__(self, x=0):
        self.x = x

a1 = A(2)
a2 = A(3)

16、合并两个有序数组。

def mergeList(arr1, arr2):
    if len(arr1) == 0 and len(arr2) == 0:
        return []
    stack = []
    p1 = 0
    p2 = 0
    while p1<len(arr1) and p2 < len(arr2):
        if arr1[p1] <= arr2[p2]:
            stack.append(arr1[p1])
            p1 += 1

        else:
            stack.append(arr2[p2])
            p2 += 1

    while p1 < len(arr1):
        stack.append(arr1[p1])
        p1 += 1

    while p2 < len(arr2):
        stack.append(arr2[p2])
        p2 += 1

    return stack

if __name__ == '__main__':
    arr1 = [1, 3, 5, 7, 9]
    arr2 = [2, 4, 6, 8, 10]
    result = mergeList(arr1, arr2)
    print(result)

17、最近有什么爱看的书籍?

18、对小米工作环境的看法。

19、为什么选择测开?对自己以后的规划是什么?

20、有什么要问的?

21、Python中的字典怎么获取默认值?

  • setdefault()方法

    • dict.setdefault(key, default=None),如果键不存在于字典中,将会添加键并将值设为默认值。

22、Python中给怎么给列表元素去重?

lis = [1, 2, 2, 2, 3, 4]
lis = set(lis)
lis = list(lis)
print(lis)
  • 输出
[1, 2, 3, 4]

23、TCP拥塞控制的方法有什么?慢开始是怎么工作的?

24、B树和B+树了解吗?

全部评论

相关推荐

自从我室友在计算机导论课上听说了“刷&nbsp;LeetCode&nbsp;是进入大厂的敲门砖”,整个人就跟走火入魔了一样。他在宿舍门口贴了一张A4纸,上面写着:“正在&nbsp;DP,请勿打扰,否则&nbsp;Time&nbsp;Limit&nbsp;Exceeded。”日记本的扉页被他用黑色水笔加粗描了三遍:“Talk&nbsp;is&nbsp;cheap.&nbsp;Show&nbsp;me&nbsp;the&nbsp;code。”连宿舍聚餐,他都要给我们讲解:“今天的座位安排可以用回溯算法解决,但为了避免栈溢出,我建议用动态规划。来,这是状态转移方程:dp[i][j]&nbsp;代表第&nbsp;i&nbsp;个人坐在第&nbsp;j&nbsp;个位置的最优解。”我让他去楼下取个快递,他不直接去,非要在门口踱步,嘴里念念有词:“这是一个图的遍历问题。从宿舍楼(root)到驿站(target&nbsp;node),我应该用&nbsp;BFS&nbsp;还是&nbsp;DFS?嗯,求最短路径,还是广度优先好。”和同学约好出去开黑,他会提前发消息:“集合点&nbsp;(x,&nbsp;y),我们俩的路径有&nbsp;k&nbsp;个交点,为了最小化时间复杂度,应该在&nbsp;(x/2,&nbsp;y/2)&nbsp;处汇合。”有一次另一个室友低血糖犯了,让他帮忙找颗糖,他居然冷静地分析道:“别急,这是一个查找问题。零食箱是无序数组,暴力查找是&nbsp;O(n)。如果按甜度排序,我就可以用二分查找,时间复杂度降到&nbsp;O(log&nbsp;n)。”他做卫生也要讲究算法效率:“拖地是典型的岛屿问题,要先把连通的污渍区块都清理掉。倒垃圾可以用双指针法,一个指针从左往右,一个从右往左,能最快匹配垃圾分类。”现在我们宿舍的画风已经完全变了,大家不聊游戏和妹子,对话都是这样的:“你&nbsp;Two&nbsp;Sum&nbsp;刷了几遍了?”“别提了,昨天遇到一道&nbsp;Hard&nbsp;题,我连暴力解都想不出来,最后只能看题解。你呢?”“我动态规划还不行,总是找不到最优子结构。今天那道接雨水给我整麻了。”……LeetCode&nbsp;真的害了我室友!!!
老六f:编程嘉豪来了
AI时代还有必要刷lee...
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务