美文网首页
python 面试题(1)

python 面试题(1)

作者: dongshangtong | 来源:发表于2019-05-08 02:50 被阅读0次

我自学Python,曾经以为自己很牛逼呢!
在面试之前,我都没有刷过面试题目,结果呢.........?
还是你们自己想象............后来发现网上很多题目都有了,但是我还是记录下来。

现在我整理一些面试题出来给大家,答案仅供大家参考,如果有不对,希望大家指点,大家一起进步。

1.用js 方式查找ID为id_checkcode_img的元素, 并且设置它的宽度为150.

document.getElementById("id_checkcode_img").style.width='150px';

2.什么是闭包,点击p标签会输出什么,为什么?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        p{background: gold;}
    </style>
    <script type="text/javascript">

        function init() {
            var pary = document.getElementsByTagName("p");
            for (var i = 0; i < pary.length; i++) {
                pary[i].onclick = function() {
                    alert(i);
                }
            }
        }

    </script>
</head>
<body onload="init()">

<p>产品 0</p>
<p>产品 1</p>
<p>产品 2</p>
<p>产品 3</p>
<p>产品 4</p>
    
</body>

</html>

闭包是当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的变量,且返回的这个函数在外部被执行 就产生了闭包.闭包是一个环境,具体指的就是外部函数--高阶函

点击每个p标签都会输出5
再未点击前,init函数已经执行完毕,点击p标签将输出for循环最后的值

3.描述下soap 的交互流程, 以及实现原理, 并列举下 python 中自己曾经用的插件。

soap是以XML形式提供简单、轻量、用于在分散或分布式环境中交换结构化和类型信息的机制。SOAP消息的基本结构通过HTTP协议传递XML数据。简单的说就是一个基于XML的协议

saop的流程

客户端——> 阅读WSDL文档 (根据文档生成SOAP请求) ——>发送到Web服务器——>交给WebService请求处理器 (ISAPI Extension)

——>处理SOAP请求——> 调用WebService——>生成SOAP应答 ——> Web服务器通过http的方式交给客户端

原理详细描述:
无论使用什么工具、语言编写 WebService,都可以使用 SOAP 协议通过 HTTP 调用,其工作原理相同。创建 WebService 后,将其暴露给Web客户,任何语言、平台的客户都可以阅读其 WSDL 文档,以调用 WebService 。客户可以根据 WSDL 描述文档生成一个 SOAP 请求信息。 WebService 部署在Web服务器( 如IIS )上,客户生成的 SOAP 请求会被嵌入在一个 HTTP 请求中并发送到Web服务器,Web服务器(IIS)再将请求转发给 WebService 请求处理器。

总结:
WSDL、SOAP和UDDI(统一描述、发现和集成机制) 一起工作,支持WebService与Internet上的其他服务、应用程序和设备交互作用。UDDI提供了发布和定位Web服务功能(更多请自行了解),WSDL描述了Web服务,SOAP服务提供了传输消息。

4.下列函数那些传参正确(ABDF)多选题

def f(a,b,c='1',d='2',*args,**kwargs):
    pass

#A
f(1,2,)
#B
f(b=1,a=2)
#C
# f(a=1,2,c=1) #位置参数应遵循关键字传参
#D
f(1,2,d=3,f=4)
#E
# f(*(1,2),**{'c':1,'d':2,'a':5})#参数a获得了多个值
#F
f(*(1,),**{'c':1,'d':2,'b':5})

5.通过sorted函数或者列表的sort函数和lambda表达式对下列列表按score排序

  list_a = [

    {"name":"p1","sore":100},
    {"name":"p2","sore":10},
    {"name":"p3","sore":30},
    {"name":"p4","sore":20},
    {"name":"p5","sore":80},
    {"name":"p6","sore":70},
    {"name":"p7","sore":60},
    {"name":"p8","sore":40},
    ]
    
  小到大:
   cc = sorted(list_a, key=lambda x: x["score"])
    print(cc)
结果:
[{'name': 'p2', 'score': 10}, {'name': 'p4', 'score': 20}, {'name': 'p3', 'score': 30}, {'name': 'p8', 'score': 40}, {'name': 'p7', 'score': 60}, {'name': 'p6', 'score': 70}, {'name': 'p5', 'score': 80}, {'name': 'p1', 'score': 100}]


大到小:
   dd = sorted(list_a, key=lambda x: x["score"], reverse=True)
    print(dd)

结果:
[{'name': 'p1', 'score': 100}, {'name': 'p5', 'score': 80}, {'name': 'p6', 'score': 70}, {'name': 'p7', 'score': 60}, {'name': 'p8', 'score': 40}, {'name': 'p3', 'score': 30}, {'name': 'p4', 'score': 20}, {'name': 'p2', 'score': 10}]

大家任选一个

  1. 一行代码,通过filter 和 lamdba 函数输出以下列表索引为基数对应的元素

下面打印一些数据方便大家理解

list_b = [12, 213, 22, 2, 2, 2, 22, 2, 2, 32,]
print(list_b)
# [12, 213, 22, 2, 2, 2, 22, 2, 2, 32]
print([i for i in range(len(list_b))])
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 答案:
l = filter(lambda x:x in list_b,[i for i in range(len(list_b))])
print(list(l))
# [2]
  1. 一行代码,通过filter 和 lamdba 函数输出以下列表索引为奇数对应的元素

** 大家注意哦!这题和第六题只差一个词语:基数 和 奇数**

list_b = [12, 213, 22, 2, 2, 2, 22, 2, 2, 32,]

#  enumerate(list_b) 先变为元祖
# [(0, 12), (1, 213), (2, 22), (3, 2), (4, 2), (5, 2), (6, 22), (7, 2), (8, 2), (9, 32)]

# 答案
new_list = [x[1] for x in filter(lambda x: x[0] % 2 == 1, enumerate(list_b))]

print(new_list)
# [213, 2, 2, 2, 32]
  1. 写出下面太码分割出输什么?
class A:
    x = 1

class B(A):
    pass

class C(A):
    pass

print(A.x,B.x,C.x)
# 1 1 1 继承自父类的类属性x,所以都一样,指向同一块内存地址

B.x=2

print(A.x,B.x,C.x)
# 1 2 1 更改Child1,Child1的x指向了新的内存地址

A.x=3

print(A.x,B.x,C.x)
# 3 2 3  更改Parent,Parent的x指向了新的内存地址
  1. 采用递归的方式用javascript 写一下快速排序算法
    快速排序(Quicksort) 是对冒泡排序的一种改进, 由C.A.R.Hoare 在1962 年提出。

它基本思想是: 通过一趟排序将要排序的数据分割成独立的两个,
其中一部分的所有数据都比另一部分的所有数据都要小, 然后再按此方法对这两部分整个排序过程可以递归进行,以此达到整个数据变成有序序列。

function quick(arr){
  if(arr.length<=1){
    return arr;
  }
  var left = [];
  var right = [];
  var base = arr[0];
  for(var i=1;i<arr.length;i++)
  {
   // 判决条件
    if(arr[i]>base){
      right.push(arr[i]);
    }else {
      left.push(arr[i])
    }
  }
  return quick(left).concat(base,quick(right));
}

var arr = [3,5,7,21,56,16,1,30,23,47,79]

 console.log(quick(arr));
  1. 对记录进行去重
    对mygame 表gname ,userid 相同的记录进行去重
    例如表中记录如下
id gname userid
1 a 111111
3 a 111111
5 b 222222
6 b 222222
7 c 222222
8 d 111111
9 a 111111

去重结果如下:

id gname userid
6 b 222222
7 c 222222
8 d 111111
9 a 111111

表结构如下:

CREATE TABLE mygame(
`id` int(11) NOT NULL  AUTO_INCREMENT,
`gname` VARCHAR(50) DEFAULT NULL,
`userid` int(11) DEFAULT NULL,
`create_datetime` datetime DEFAULT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8

请写出SQL语句:

select * from mygame where id in (
select max(id) from mygame group by gname
) order by id;

10.(附加题) 写一个装饰器, 传入一个秒数,如果函数执行完成超过这个数值显示bad, 否则输出“goods”.

def  warp(x):
      pass

答案:

import time
from functools import wraps

def warpper(t):
    def decorator(func):
        @wraps(func)
        def _inner(*args, **kwargs):
            start = time.time()
            func(*args, **kwargs)
            end = time.time()

            resut = end - start
            print(resut)
            if resut > t:
                print('bad')
            else:
                print('goods')
        return _inner
    return decorator


@warpper(10)
def myfunc(*args,**kwargs):
    for i in range(100000000):
        pass

myfunc()
  1. (附加题) 对通关总数超过3关的用户,进行通关排名,并根据奖品表显示对应的奖品
    说明: 通关数目越多排名越在前面,如果通关数目相同, 那么最早通关的排在前面
    表结构如下:
    奖品表(arrangeaward)
    字段:名次(arrange_num), 奖品名称(award_name)
    例如:
名次 奖品名称
1 飞机
2 滑雪板
3 悠悠球

通关表(gamegate)
字段:用户 DI(userid), 关卡名称(award_name),通关时间(create_datetime)
例如:

userid gate_name create_datetime
33333 gate1 2014-12-31 09:00:00
111111 gate1 2014-12-30 08:00:00
111111 gate2 2014-12-30 08:00:00
111111 gate3 2014-12-30 08:00:00
222222 game3 2014-12-30 09:00:00
222222 game3 2014-12-30 09:00:00
222222 game3 2014-12-30 09:00:00
222222 game3 2014-12-30 09:00:00
444444 game4 2014-12-30 09:00:00

查询类似如下:

名次 奖品名称 用户ID 通关的总数 最后游戏通关时间
1 飞机 33333 8 2014-12-30 08:00:00
2 滑雪板 222222 8 2014-12-30 09:00:00
3 悠悠球 222222 4 2014-12-31 09:00:00

写出查询语句:

# 下面是网友写SQL数据库Oracle。
 select s.rank_number   as "名次",
       t.award_name    as "奖品名称",
       s.userid        as "用户ID",
       s.count_        as "通关的总数",
       s.last_datetime as "最后的游戏通关时间"
  from (select userid,
               dense_rank() over(order by count_ desc,last_datetime) rank_number,
               count_,
               last_datetime
          from
                    (select distinct userid,
                           count(userid) over(partition by userid) as count_,
                                last_value(create_datetime) over(partition by userid order by create_datetime) last_datetime
                  from gamegate)) s,
       arrangeaward t
 where s.rank_number = t.arrangenum;

相关文章

网友评论

      本文标题:python 面试题(1)

      本文链接:https://www.haomeiwen.com/subject/slguoqtx.html