面试题04

1.如何实现python列表去重并保持原有顺序?
li  = [1,2,5,1,2,5]
li2 = list(set(li))
print(li2)
2.现有两元祖(('a'),('b')),(('c'),('d')),请使用python匿名函数生成列表[{'a':'c'},{'b':'d'}]
tu1 = (('a'),('b'))
tu2 = (('c'),('d'))
func = lambda x,y:[{x[0]:y[0]},{x[1]:y[1]}]
li = func(tu1,tu2)
print(li)
# func = map(lambda x,y:[{tu1[0]:tu2[0]},{tu1[1]:tu2[1]}])
# print(func)
a = map(lambda x:x**2,range(10))
print(list(a))
3.请给出二分查找的python示列代码。
from timewrap import *

@cal_time
def bisection_method(li,val):
    '''二分法'''
    start = 0
    end = len(li)-1
    while start <=end:
        mid = (start+end) // 2
        if li[mid] < val:
            start = mid+1
        elif li[mid] > val:
            end  = mid -1
        else:
            return mid
    else:
        return -1
@cal_time
def index_search(li,val):
    '''内置索引查找'''
    try:
        return li.index(val)
    except Exception:
        return -1


li = list(range(0,10**7))

a=bisection_method(li,10**6+598)
b=index_search(li,10**6+598)
print(a)
print(b)
4.python字符串格式化中,%和format的主要区别是什么?
字符串格式化% 就是C里的printf; format是python 字符串自己的方法, 推荐用format,因为比较灵活
5.*args和**kwags在什么情况下会使用到?请给出使用**kwargs的示列代码
6.线程,进程,协程的区别?
7.GIL是什么,对于python有什么影响?
GIL即全局解释器锁
GIL本质就是一把互斥锁,既然是互斥锁,所有互斥锁的本质都一样,都是将并发运行变成串行,以此来控制同一时间内共享数据只能被一个任务所修改,进而保证数据安全。
有了GIL的存在,同一时刻同一进程中只有一个线程被执行
8.基于对列实现一个生产者消费者模型,要求:队列内元素不能超过5个,一旦有五个元素了,生产者不再生产,其他内容自由扩散
import queue,threading,time

q = queue.Queue(maxsize= 5)

def producer():
    num = 1
    while True:

        if not q.full():
            q.put(num)
            print('put',num)
            num+=1
def consumer():

    while True:
        time.sleep(2)
        if not q.empty():
            print('get',q.get())

t1 = threading.Thread(target=producer)
t2 = threading.Thread(target=consumer)

t1.start()
t2.start()
9.写sql语句,对下面两张表实现处理。
    table_A
    name  kecheng  fenshu 
    张三    语文    81
    张三    数学    75
    李四    语文    76
    李四    数学    90
    王五    语文    81
    王五    数学    100
    王五    英语    90
    
    tabe_B
    id    name
    1    张三
    2    李四
    3    王五
    4    小刘
    
    1.查出每门课程都大于80分的学生姓名
select name from table_A group by name having min(fenshu)>80;
    
    2.查询语文成绩最大的学生姓名
    select max(fenshu),name form table_A while kecheng='语文'
10.有表list,共有字段ABC类型都是整数,表中有如下记录:

id    A    B     C
1    2    7     9
2    5    6     4
3    3    11    9 
(1)查询出B、C列的值,要求按B列升序排序:
select B,C from list order by B asc
(2)写一条新的纪录,值为 7 8 9
inset info list(A,B,C) values(7,8,9)
(3)查询C列,要求清除重复的值,按降序排列:
select C from list group by C desc

 

posted @ 2018-02-18 16:35  TAMAYURA  阅读(165)  评论(0编辑  收藏  举报