zoukankan      html  css  js  c++  java
  • 程序猿面试题集锦

    1、列表解析、lambda 匿名函数

    value = [lambda: x + 100 for x in range(10)]
    print(value[0])
    print(value[0]())
    >>:
        <function <listcomp>.<lambda> at 0x0000021FBB52D9D8>
        109
          
    # 扩展
    def multipliters():
        """
         for i in range(4): 循环4次,最终i=3
        :return:[lambda x: i * x, lambda x: i * x, lambda x: i * x, lambda x: i * x]
        """
        return [lambda x: i * x for i in range(4)]
    
    print([m(2) for m in multipliters()])
    
    >>:
        [6, 6, 6, 6]
    

      

    2、函数默认参数

    默认参数为可变类型:

    def bar(lt1,lt2 = []):
        lt2.append(lt1)
        return lt2
    
    l1 = bar(1,[3,4])
    print(id(l1),l1)
    
    l2 = bar(1)
    print(id(l2),l2)
    
    l3 = bar(2,[3,4])
    print(id(l1),l3)
    
    l4 = bar(2)
    print(id(l4),l4)
    
    >>:
       2542419966728 [3, 4, 1]
       2542419946120 [1]
       2542419966728 [3, 4, 2]
       2542419946120 [1, 2]
    

    默认参数为不可变类型:

    def foo(tp1,tp2=()):
        return tp1+tp2
    
    t1 = foo((1,),(3,4))
    print(id(t1),t1)
    
    t2 = foo((1,))
    print(id(t2),t2)
    
    t3 = foo((2,),(3,4,5))
    print(id(t3),t3)
    
    t4 = foo((2,))
    print(id(t4),t4)
    
    '''
    2874698184384 (1, 3, 4)
    2874698241584 (1,)
    2874698161992 (2, 3, 4, 5)
    2874698241528 (2,)
    
    '''
    默认参数为不可变类型

    3、线程、进程、协程区别

    1、线程与进程的区别是什么?
    进程:是最小的资源管理单元
    线程是进程的具体执行单元,是CPU的最小执行单元
    
    进程是程序的实体,线程依赖进程存在,一个进程可以有多个线程
    
    线程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员
    
    线程;线程的出现是为了降低上下文切换的消耗,提高系统的并发性,并突破一个进程只能干一样事的缺陷,使到进程内并发成为可能
    优点:适用于I/O密集型任务
    
    
    2、协程与线程的对比(使用场景,优缺点)
        协程:协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。
            因此:协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置。
    
        协程的适用场景:当程序中存在大量不需要CPU的操作时(IO),适用于协程,但是在CPU密集型任务是不比python多线程好
    
        优点:1、无需线程上下文切换的开销
                 2、协程不需要“锁”机制,即不需要lock和release过程,因为所有的协程都在一个线程中。
                 3、方便切换控制流,简化编程模型
                 4、高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理
    
        缺点:
              1、无法利用多核资源
              2、进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序    

    4、类的单例模式

    5.数据库设计 & 查询 ---> 表结构设计及表关联关系

    6、用python实现堆栈

  • 相关阅读:
    js 报Unexpected token }
    c# 预览服务器文件
    js下载文件并修改文件名称
    js 自定义右键
    js 加载图片
    随笔1
    随笔
    php curl 发送post请求带参数
    laravel 数据库事务
    an't connect to local MySQL server through socket '/tmp/mysql.sock'
  • 原文地址:https://www.cnblogs.com/hedeyong/p/7723610.html
Copyright © 2011-2022 走看看