测试面试题-总结

功能:

 

 

 

 

数据库

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 元素不可重复
      列表 元素可以重复
      列表是有序
      集合是无序


  装饰器:
    简单来说,装饰器就是实现了一个通用的功能,然后将这个通用的功能应用到不同的、需要使用这个功能的函数上,
    从而避免每次都在不同函数上反复写相同的功能代码

 

  闭包:

          指在一个内嵌函数中引用了其外部函数的变量(非全局变量),并且该外部函数返回了这个内嵌函数。闭包可以让内嵌函数记住并访问定义时的环境,即使在外部函数已经返回之后。

    闭包的基本构成

    1.   嵌套函数:在一个函数内部定义的函数。
    2.   自由变量:在嵌套函数中引用的外部函数中的变量。
    3.   返回嵌套函数:外部函数返回嵌套函数。  
    def outer_function(x):
    def inner_function(y):
   return x + y
  return inner_function

   # 使用外部函数创建闭包
   closure = outer_function(10)
  print(closure(5)) # 输出 15

        为什么使用闭包?

    1.   数据隐藏:闭包可以隐藏一些数据,使其不被外部访问或修改,只能通过闭包函数来操作。
    2.   延迟计算:闭包可以用于延迟计算,将某些操作延迟到以后执行。
    3.   更少的全局变量:通过使用闭包,可以减少全局变量的使用,避免命名冲突和难以维护的代码

 

 

 


  深浅复制区别:
    浅拷贝: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)

也问别的了,当时没打上来,也忘了。。

 

posted @ 2024-07-02 19:33  dearddu  阅读(3)  评论(0编辑  收藏  举报