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多少次后,其它线程或进程才能使用锁的数据")
    

      

  • 相关阅读:
    UVA 1025 A Spy in the Metro DP水题
    ZOJ 3814 Sawtooth Puzzle BFS
    ZOJ 3816 Generalized Palindromic Number
    UVA 10859 Placing Lampposts 树形DP
    UVA 11825 Hackers' Crackdown 状压DP
    POJ 2887 Big String 线段树 离线处理
    POJ 1635 Subway tree systems Hash法判断有根树是否同构
    BZOJ 3110 k大数查询 & 树套树
    sdoi 2009 & 状态压缩
    来自于2016.2.24的flag
  • 原文地址:https://www.cnblogs.com/rootid/p/9714687.html
Copyright © 2011-2022 走看看