我自学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}]
大家任选一个
- 一行代码,通过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]
- 一行代码,通过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]
- 写出下面太码分割出输什么?
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指向了新的内存地址
- 采用递归的方式用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));
- 对记录进行去重
对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()
- (附加题) 对通关总数超过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;
网友评论