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实现堆栈

  • 相关阅读:
    POJ 3630 Phone List/POJ 1056 【字典树】
    HDU 1074 Doing Homework【状态压缩DP】
    POJ 1077 Eight【八数码问题】
    状态压缩 POJ 1185 炮兵阵地【状态压缩DP】
    POJ 1806 Manhattan 2025
    POJ 3667 Hotel【经典的线段树】
    状态压缩 POJ 3254 Corn Fields【dp 状态压缩】
    ZOJ 3468 Dice War【PD求概率】
    POJ 2479 Maximum sum【求两个不重叠的连续子串的最大和】
    POJ 3735 Training little cats【矩阵的快速求幂】
  • 原文地址:https://www.cnblogs.com/hedeyong/p/7723610.html
Copyright © 2011-2022 走看看