测试面试题-总结
功能:
数据库
mysql
查看索引:show index from table
查询每个部门工资最高员工:
SELECT d. NAME AS Department,e. NAME AS Employee,e.Salary FROM Department d,Employee e
WHERE d.Id = e.DepartmentId AND (e.Salary, e.DepartmentId) IN
(SELECT Max(Salary),DepartmentId FROM Employee GROUP BY DepartmentId)
查询前三名学生成绩:
select a.id,a.subject_id,a.student_id,a.score from score as a left join score as b on
a.subject_id=b.subject_id and a.score>=b.score
group by a.subject_id,a.student_id,a.score
having count(a.subject_id)>=4
order by a.subject_id,a.score desc;
ES查询:
term 精确过滤
terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配
range过滤允许我们按照指定范围查找一批数据:gt:大于,gte:大于等于,lt:小于,lte:小于等于
bool过滤:
must:多个查询条件的完全匹配,相当于 and。
must_not:多个查询条件的相反匹配,相当于 not。
should:至少有一个查询条件匹配, 相当于 or。
python链接es:
from elasticsearch5 import Elasticsearch
ES = ['127.0.0.1:9200']
ret = es.search(index='articles', doc_type='article', body=query)
index 索引,doc_type 文档类型
Redis 五种数据类型
1. 字符串(String)
简介:
- 最基本的 Redis 数据类型,可以存储任何形式的字符串,包括二进制数据,如图片或序列化对象。
操作:
SET key value
:设置指定键的值。GET key
:获取指定键的值。INCR key
:将键的值增1(假设值为整数)。APPEND key value
:将指定值附加到键的原值之后
2. 哈希(Hash)
简介:
- 键值对集合(类似于 Python 字典),适合存储对象。
操作:
HSET key field value
:设置哈希表中字段的值。HGET key field
:获取哈希表中指定字段的值。HGETALL key
:获取哈希表中所有字段和值。
3. 列表(List)
简介:
- 有序的字符串列表,可以添加到列表的头部或尾部。适用于消息队列等场景。
操作:
LPUSH key value
:将一个值插入到列表头部。RPUSH key value
:将一个值插入到列表尾部。LPOP key
:移除并返回列表的第一个元素。RPOP key
:移除并返回列表的最后一个元素。LRANGE key start stop
:获取列表在指定范围内的元素。
4. 集合(Set)
简介:
- 无序的字符串集合,不允许重复的成员。适用于存储不重复的元素集合。
操作:
SADD key member
:向集合添加一个成员。SREM key member
:移除集合中的一个成员。SMEMBERS key
:返回集合中的所有成员。SISMEMBER key member
:判断某个成员是否在集合中。
5. 有序集合(Sorted Set)
简介:
- 与集合类似,但每个成员都会关联一个分数(score),成员按分数排序。适用于排行榜等场景。
操作:
ZADD key score member
:向有序集合添加一个成员,或更新已存在成员的分数。ZRANGE key start stop [WITHSCORES]
:返回指定范围内的成员。ZREM key member
:移除有序集合中的一个成员。ZSCORE key member
:返回有序集合中成员的分数。
Linux
Python常见面试题
python常见的数据结构:
数字、字符串、列表、元组、字典和集合
列表,元组区别: 列表为动态元素,可改变其长度,元组相反,但可以通过合并改变长度 + 实现
列表,集合区别( {}或set() ):
集合set 元素不可重复
列表 元素可以重复
列表是有序
集合是无序
装饰器:
简单来说,装饰器就是实现了一个通用的功能,然后将这个通用的功能应用到不同的、需要使用这个功能的函数上,
从而避免每次都在不同函数上反复写相同的功能代码
闭包:
指在一个内嵌函数中引用了其外部函数的变量(非全局变量),并且该外部函数返回了这个内嵌函数。闭包可以让内嵌函数记住并访问定义时的环境,即使在外部函数已经返回之后。
闭包的基本构成
- 嵌套函数:在一个函数内部定义的函数。
- 自由变量:在嵌套函数中引用的外部函数中的变量。
- 返回嵌套函数:外部函数返回嵌套函数。
def outer_function(x):
def inner_function(y):
return x + y
return inner_function
# 使用外部函数创建闭包
closure = outer_function(10)
print(closure(5)) # 输出 15
为什么使用闭包?
- 数据隐藏:闭包可以隐藏一些数据,使其不被外部访问或修改,只能通过闭包函数来操作。
- 延迟计算:闭包可以用于延迟计算,将某些操作延迟到以后执行。
- 更少的全局变量:通过使用闭包,可以减少全局变量的使用,避免命名冲突和难以维护的代码
深浅复制区别:
浅拷贝:copy(),使用浅拷贝,当原容器对象中可变对象中有元素发生变化,拷贝得到的对象也会变化
深拷贝:=,copy.deepcopy() 包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变
json和字典dict的区别?
json本质上还是字符串,只是按key:value这种键值对的格式来的字符串
range与xrange的区别?
range生成的是数组,元素少的情况下可以用
xrange是一个生成器,一边计算一边生产,每次只返回一个值
json和str相互转换:
json.dumps(list)
json.loads(list)
列表去重:
a = [2,4,5,9,8,8,6,3,2,4,4]
list[set(a)]
统计在一个队列中的数字,有多少个正数,多少个负数:
a = [1, 3, 5, 7, 0, -1, -9, -4, -5, 8]
b = [i for i in a if i > 0]
c = [i for i in a if i < 0]
字符串 "axbyczdj",如果得到结果“abcd”:
print(a[::2])
字符串为“hello_world_yoyo”, 如何得到一个队列 ["hello","world","yoyo"]:
b = a.split("_")
已知一个队列[1, 3, 6, 9, 7, 3, 4, 6]:
正序:a.sort()
倒序:a.sorted() #a.sort(reverse=True)
去重:b = list(set(a))
冒泡排序:
def bubble_sort(list):
n = len(list)
for i in range(n - 1):
for j in range(n - 1 - i):
if list[j] > list[j + 1]:
list[j], list[j + 1] = list[j + 1], list[j]
return list
a = [1, 4, 2, 2, 7, 9, 7, 5, 3, 2, 0]
b = bubble_sort(a)
print(b)
合并两个有序数组:
def merge_sort(nums1, nums2):
m = []
i, j = 0, 0
l_1, l_2 = len(nums1) - 1, len(nums2) - 1
# 当i,j的索引位置小于等于索引最大值的时候
while i <= l_1 and j <= l_2:
if nums1[i] <= nums2[j]:
m.append(nums1[i])
i += 1
else:
m.append(nums2[j])
j += 1
m = m + nums1[i:] + nums2[j:]
return m
找出一个字符串中所有子串是回文的次数:
a = "ABCABADCSABBAUYIIYU"
s = 0
# 回文数大于2个字符
for i in range(2, len(a) + 1):
b = []
for j in range(len(a) - i + 1):
# 生成的组合
new_s = a[j:j + i]
if new_s == new_s[::-1]:
b.append(new_s)
# print(b)
s += len(b)
print("总共子串回文:", s)
两数之和
def twoSum(nums, target):
num_dict = {}
# 遍历数组
for i, num in enumerate(nums):
# 计算当前数值与目标值的差
diff = target - num
# 如果差值在字典中,则找到了两个数
if diff in num_dict:
return [num_dict[diff], i]
# 将当前数值和索引存入字典
num_dict[num] = i
print(num_dict)
Flask面试题:
什么是Flask,有什么优点?
轻量级web框架,默认依赖两个外部库:jinja2和Werkzeug WSGI工具
适用于做小型网站以及web服务的API
如何在Flask中访问会话?
会话(seesion)会话数据存储在服务器上,需要存储在服务器上的临时目录中
from flask import session导入会话对象
session['name'] = 'admin'给会话添加变量
session.pop('username', None)删除会话的变量
Flask蓝图的作用?
蓝图Blueprint实现模块化的应用
- book_bp = Blueprint('book', __name__)创建蓝图对象
- 蓝图中使用路由@book_bp.route('url')
- 在另一.py文件里导入和注册蓝图
from book import book_bp app.register_blueprint(book_bp)
也问别的了,当时没打上来,也忘了。。