zoukankan      html  css  js  c++  java
  • s10_python_examination

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    # @author: Wu
    # @date:18-9-25
    
    def paper():
        pass
        """
    复习:6,12,13,19,20,23
    Python10期考试题
    1、常用字符串格式化有哪些?并说明他们的区别(6)  
    2、请写出【元祖,列表,字典,集合】的定义方法、新增方法、更改方法、删除方法(4)
    3、利用 python打印前一天的本地时间,格式为‘2018-01-30’(面试题)(5)
    4、python中search和match的区别(面试题)(5)
    5、什么是1ambda函数,有什么好处(2)
    6、说明__init__和__new__的作用(2)  
    7、简述反射是怎么回事?(3)
    8、解释python中深拷贝和浅拷贝的区别(3)
    9、用最简洁的方式生成这样一个列表【4,16,32,64,128】③)
    10、python中如何实现随机数并打印,默认的随机数范围是多少?(2)
    11、新式类和经典类(旧式类)的区别(一种一分)(2)
    12、装饰器什么时候被执行的(3)
    13、什么是"并发"?什么是"并行"?(2)
    14、以个人理解描述 Event 的执行原理(2)
    15、什么是粘包,如何避免?(3)
    16、什么是进程?(2)
    17、什么是线程?(2)
    18、简述你对管道、队列的理解;(3)
    19、编程题;写一个装饰器实现功能:打印程序的运行时间(5)
    20、读以下代码,写出答案并简述原因(面试题建议不用电脑)(5)
    下面代码会输出什么:
    def f(x,l=[]):
        for i in range(x):
            l.append(i * i)
        print(l)
    
    
    f(2)
    f(3, [3, 2, 1])
    f(3)
    
    21、使用 python简单实现打印九九乘法表(3)
    22、简述 python GIL的概念,以及它对 python多线程的影响?(2)
    23、写一个单例模式(4)
    24、编程题:将以下1ist3的格式转换成1ist4格式(8)
    
      list3 = [
            {"name": "alex", "hobby": "smoking"},
            {"name": "alex", "hobby": "drinking"},
            {"name": "alex", "hobby": "perm"},
            {"name": "alex", "hobby": "Massage"},
            {"name": "egon", "hobby": "singing"},
            {"name": "egon", "hobby": "dancing"},
            ]
    
        list4=[
            {"name":"alex" hobby_list":["smoking","drinking","perm"," Massage"]},
            {"name":"egon"," hobby_list":["singing","dancing"]}
            ]
    
    
    
    25、编程题(7)
    定义一个学生类。有下面的类属性
    1姓名
    2年龄
    3成绩(语文,数学,英语)[每课成绩的类型为整数]
    类方法
    1获取学生的姓名: get_name()返回类型:str
    2获取学生的年龄: get_age()返回类型:int
    3返回3门科目中最高的分数。 get_course()返回类型:int
    写好类以后,可以定义2个同学测试下
    zm=Student("zhangming",20,[69, 88, 100J)
    返回结果
    zhangming
    20
    100
    """
    
    
    """
    26、写一个 socket客户端和服务端兵进行通讯(4
    27、什么是异步,什么是异步阻塞?(2)
    28、写一个程序,包含十个线程,子线程必须等待主线程s1eep10秒钟之后才执行,并打印当前时间(5)
    29、你所了解的锁都有哪些?(2)
    30、 threading.RLock和 threading.Lock的区别
    
    """
    
    
    def test1():
        print("%s %d  #语法糖")
        print("format #直接调用函数")
    
    
    def test3(p=1):
        """
        important
    
        :return:
        """
        if p == 1:
            import time
            import datetime
    
            print(datetime.date.fromtimestamp(time.time() - 3600 * 24))
        elif p == 2:
            import time
            print(time.strftime("%Y-%m-%d", time.localtime(time.time() - 3600 * 24)))
    
    
    def test4():
        """
        important
    
        :return:
        """
        # answer
    
        """
        match()函数只检测RE是不是在string的开始位置匹配, 
        search()会扫描整个string查找匹配, 
        也就是说match()只有在0位置匹配成功的话才有返回,
        如果不是开始位置匹配成功的话,match()就返回none
        """
        import re
        print(re.match('super', 'superstition').span())
        print(re.match('super', 'isuperstition'))
        print(re.search('super', 'isuperstition').span())
        pass
    
    
    def test5():
        print("5、什么是1ambda函数,有什么好处(2)")
        print("匿名函数,简洁明了;可以和内置函数合用,有效减少冗余代码")
    
    
    def test6():
        print("6、说明__init__和__new__的作用(2)")
        print("__init__#是初始化方法;对象初始化时执行的方法 ")
        print("__new__ #是构造方法; 继承自object的新式类才有__new__方法,"
              "__new__至少要有一个参数cls,代表要实例化的类"
              "__new__() 方法会返回cls(cls指代当前类)的实例,然后该类的__init__()方法作为构造方法会接收这个实例(即self)作为自己的第一个参数")
        print("__del__ #是析构方法,删除一个对象之前执行的方法")
    
    
    def test7():
        print("7、简述反射是怎么回事?")
        print("用字符串类型的变更名或函数名来调用对应的属性")
    
    
    def test8():
        print("8、解释python中深拷贝和浅拷贝的区别")
        print("深拷贝:不管数据类型有多少层,都开僻新的内存空间来存储一份与原来数据一样的数据")
        print("浅拷贝:只新开僻一块空间来存第一层数据")
    
    
    def test9(p=1):
        if p == 1:
    
            def f(x):
                return 4 if x < 4 else 2 ** x
    
            print("1st answer:", [f(i) for i in range(3, 8)])
    
        elif p == 2:
            print("2nd answer:", list(map(lambda x: 4 if x < 4 else 2 ** x, [i for i in range(3, 8)])))
    
        elif p == 3:
            print("3rd answer:", [4 if i < 4 else 2 ** i for i in range(3, 8)])
        elif p == 4:
    
            print("4th answer:", [4 if i == 3 else 2 ** i for i in range(3, 8)])
    
        elif p == 5:
    
            print("5th answer:", [4 if i == 3 else pow(2, i) for i in range(3, 8)])
    
    
    def test10():
        print("10、python中如何实现随机数并打印, 默认的随机数范围是多少?(2)")
        print("import random")
        print("random.random() #默范围是在0-1之间的数")
    
    
    def test11():
        print("11、新式类和经典类(旧式类)的区别")
        print("新式类:默认继承object,在继承过程中寻找一个方法时默认遵循广度优先,内置mro方法来标识广度优先的顺序")
        print("经典类:在继承过程中寻找一个方法时默认遵循深度优先")
    
    
    def test12():
        print("12、装饰器什么时候被执行的")
        print("加载函数的时候被执行")
        print("for example:")
    
        def time_log(f):
            def wrapper(*args, **kwargs):
                print("in time log func")
                res = f(*args, **kwargs)
                return res
    
            return wrapper
    
        @time_log
        def func(strings):
            print("hello", strings)
    
        func("test")
    
    
    def test13():
        print('13、什么是"并发"?什么是"并行"?')
        print("并发:在同一时候,只有一个CPU在处理任务")
        print("并行:真正意义上的在同一时刻,有多个CPU在处理任务,即同时在运行")
        print("在python中:多线程是并发,多进程是并行")
        print("在python中:多进程在同一时刻可以占用多个CPU执行")
        print("在python中:多线程看起来是在同时执行,但是GIL的限制,在同一时刻只有一个线程给到CPU执行")
    
    
    def test14():
        print("以个人理解描述 Event 的执行原理")
        print("在多进程或多线程中,Event对像有True和False两个状态,分别控制wait方法是否阻塞,如果状态是True,wait()就非阻塞状态,如果是False,则阻塞")
        print("在多进程中,Event之所以能通信,是因为基于IPC")
        print("在多线程中,Event之所以能通信,是因为主线程与子线程本身就是可以通信的")
    
    
    def test15():
        print("15、什么是粘包,如何避免?")
        print("粘包:TCP协议是面向流连接的数据传输协议,传输数据是无边界的")
        print("避免粘包:自定义协议;python中可以使用struct模块;UDP没有粘包问题")
    
    
    def test16():
        print("16、什么是进程?")
        print("运行中的程序")
        print("是最小的资源分配单位")
        print("是多个任务之间数据安全和内存隔离的约束")
    
    
    def test17():
        print("17、什么是线程?")
        print("CPU调度的最小单位")
        print("是进程的一部份,可以共享进程中的数据")
    
    
    def test18():
        print("18、简述你对管道、队列的理解;")
        print("管道:python中,双向通信的数据容器,多进程中的IPC中用到,数据不安全")
        print("队列:python中,先进先出,基于管理和锁实现的一个可以在进程/线程中传递数据的容器,数据安全")
    
    
    def test19():
        import time
    
        def log_time(fun):
            def wrapper(*args, **kwargs):
                start_time = time.time()
                res = fun(*args, **kwargs)
                print(time.time() - start_time)
                return res
    
            return wrapper
    
        @log_time
        def func():
            print("hello")
    
        func()
    
    
    def test20():
        """
    
        20、读以下代码,写出答案并简述原因(面试题建议不用电脑)(5)
    下面代码会输出什么:
    def f(x,l=[]):
        for i in range(x):
            l.append(i * i)
        print(l)
    
    
    f(2)
    f(3, [3, 2, 1])
    f(3)
    
    
        :return:
        """
    
        def f(x, l=[]):
            for i in range(x):
                l.append(i * i)
            print(l)
    
        f(2)
        f(3, [3, 2, 1])
        f(3)
        print("因为经过第一次f(2)之后,默认参数l的值已经是[0,1]")
    
    
    def test21(p=1):
        if p == 2:
            for i in range(1, 10):
                for k in range(1, i):
                    print(end="        ")
                for j in range(i, 10):
                    print("%d*%d=%2d" % (i, j, i * j), end="  ")
                print("")
    
        elif p == 1:
    
            for i in range(1, 10):
                for j in range(i, 10):
                    print("%d*%d=%2d" % (i, j, i * j), end="  ")
                print("")
    
        elif p == 3:
            for i in range(1, 10):
                for j in range(1, i + 1):
                    print("%d*%d=%2d" % (j, i, i * j), end="  ")
                print("")
    
        elif p == 4:
    
            for i in range(1, 10):
                for k in range(1, 10 - i):
                    print(end="        ")
                for j in range(1, i + 1):
                    print("%d*%d=%2d" % (j, i, i * j), end="  ")
                print("")
    
    
    def test22():
        print("22、简述 python GIL的概念,以及它对 python多线程的影响?(2)")
        print("python GIL即python全局解释器锁")
        print("用来在Cpython解释器解释一段多线程代码时,约束线程在同一时刻只能有一个线程访问CPU")
        print("对python多线程的影响:在Cpython解释器下启动的多线程并不能真正的实现并行")
    
    
    def test23():
        print("23、写一个单例模式(4)")
        print("")
    
    
    def test24(p=1):
        list3 = [
            {"name": "alex", "hobby": "smoking"},
            {"name": "alex", "hobby": "drinking"},
            {"name": "alex", "hobby": "perm"},
            {"name": "alex", "hobby": "Massage"},
            {"name": "egon", "hobby": "singing"},
            {"name": "egon", "hobby": "dancing"},
    
        ]
    
        list4 = []
    
        if p == 1:  # 方法一:
            tmp_dic = {}
    
            for item in list3:
                if not tmp_dic.get(item["name"]):
                    tmp_dic[item["name"]] = []
                tmp_dic[item["name"]].append(item["hobby"])
            for key in tmp_dic:
                list4.append({"name": key, "hobby_list": tmp_dic[key]})
            print(list4)
    
        elif p == 2:  # 方法二
            for item in list3:
                for dic in list4:
                    if dic["name"] == item["name"]:
                        dic["hobby_list"].append(item["hobby"])
                        break
                else:
                    list4.append({"name": item["name"], "hobby_list": [item["hobby"]]})
            print(list4)
    
    
    def test25():
        class Student(object):
            def __init__(self, name, age, score):
                self.name = name
                self.age = age
                self.score = score
    
            def get_name(self):
                pass
    
            def get_age(self):
                pass
    
            def get_course(self):
                return '{name}
    {age}
    {max_score}
    """'.format(name=self.name, age=self.age, max_score=max(self.score))
    
        zm = Student("zhangming", 20, [69, 88, 100])
        print(zm.get_course())
    
    
    def test28(p=1):
        if p == 1:  #使用非阻塞式的timer计时器的解法
    
            from threading import Timer
            import datetime
    
            def func():
                print(datetime.datetime.now())
    
            for i in range(10):
                Timer(10, func).start()    #非阻塞式的计时器
    
            print(datetime.datetime.now())
    
        elif p == 2:  #不符合题要求的解法,主线程是阻塞的,相当于主线程等待,而非子线程等待
    
            from threading import Thread
            import datetime
            import time
    
            def func():
                print(datetime.datetime.now())
    
            t_list = []
            for i in range(10):
                t = Thread(target=func)
                t_list.append(t)
            print(datetime.datetime.now())
            time.sleep(10)
            for t in t_list:
                t.start()
                t.join()
    
    def test29():
        print("29、你所了解的锁都有哪些?(2)")
        print("互斥锁:from multiprocessing/threading import Lock")
        print("递归锁:from multiprocessing/threading import RLock")
    
    def test30():
        print("30、threading.RLock和 threading.Lock的区别?(2)")
        print("互斥锁:在同一个线程或进程之间,当有两个acquire的时候,就会产生死锁")
        print("递归锁:在同一个线程或进程之间,无论acquire多少次,也不会产生死锁,但要注意的是acquire多少次,就需要release多少次后,其它线程或进程才能使用锁的数据")
    

      

  • 相关阅读:
    React 不暴露webpack配置的情况下,修改webpack配置
    Array的一些方法
    ES 6 学习
    位运算解决“一个数组中,只有一个数字出现n次,其他数字出现k次”问题
    句子反转——牛客刷题(java)
    数串——牛客刷题
    链表分割——牛客剑指offer
    合并两个排序链表——牛客offer
    复杂链表的复制——牛客offer
    两个链表的第一个公共结点——牛客offer
  • 原文地址:https://www.cnblogs.com/rootid/p/9714687.html
Copyright © 2011-2022 走看看