数据库知识
事务是为了解决什么(原子性?一致性?隔离性?持久性?),什么情况下需要用到事务?
处理一系列业务处理的执行逻辑单元,该单元里的一系列类操作要不全部成功要不全部失败
当数据库需要处理操作量大、复杂度高的数据的时候需要用到事务。
索引的优缺点,什么情况下需要用到索引?
优点:
(1)加快数据检索速度,提高对数据访问效率
(2)提高数据查询性能
缺点:
(1)占用大量硬盘空间
(2)数据的增删改等更新操作,需要维护索引时间,降低更新速度
使用场景:
(1)主键列中创建索引
(2)多表连接时连接列创建索引
(3)where子句查询的列
(4)需要经常GROUP BY和ORDER BY的列
什么表关联,外关联?
表关联:是指将两个或两个以上的表按照一对一、一对多、多对多等关系使用外键关联起来,方便后期的数据查询
外关联:是指一个表的外键是参照另一个表的
聚集函数有哪些(举例sum)?
count():表示计算总行数
max(列):表示求此列的最大值
min(列):表示求此列的最小值
sum(列):表示求此列的和
avg(列):表示求此列的平均值
Python 中命名里单下划线和双下划线分别是代表什么意思?举几个双下划线的例子(如 __init__)
单下划线:表示的是保护变量,只有类对象和子类对象才能访问到这些变量;而且是不能直接访问的类属性,需通过类提供的接口进行访问。
双下划线:表示的是私有变量,只有类对象自己能访问,连子类对象也不能访问到这个数据。如:__name__、__main__、__init__
写出 {idx: val for idx, val in enumerate(['a', 'b', 'c'])} 的结果
{0: 'a', 1: 'b', 2: 'c'}
range(5)[2:-2] 的结果是什么? ['a', 'b', ‘c’][::-1] 的结果是什么?
前者的结果是2;后者的结果是’c’,’b’,’a’
filter、map、reduce用途各是什么?
filter:filter 的作用是生成一个新数组,在遍历数组的时候将返回值为 true 的元素放入新数组,可以利用这个函数删除一些不需要的元素
map:作用是生成一个新数组,遍历原数组,将每个元素拿出来做一些变换然后放入到新的数组中。
reduce:该函数的功能是进行按照要求进行累计的效果
HTTP请求中GET和POST有什么区别?
(1)GET请求资源数据,POST向服务器传递需要处理的数据
(2)GET传递数据大小不超过2kb,POST没有限制
(3)GET请求的参数会在Url上暴露显示,POST请求参数在Requestbody里,所以相对GET来说,POST安全性较高
(4)GET 请求的静态资源会被浏览器缓存,POST不会被缓存
(5)GET传递的数据类型是文本,POST是文本或者二进制
(6)GET请求被回退时是无害的,POST请求被回退是会被重新再执行一次
什么是单例模式?什么情况需要用到单例模式。
单例模式:它是一种常用的软件设计模式,目的是使得类的一个对象成为系统中的唯一实例,即一个类只有一个实例对象。
使用场景:
(1)要求生产唯一序列号。
(2)WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。
(3)创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。
编程题
去除列表中的重复元素(加分题:去除列表中的重复元素并保留原列表顺序[1, 3, 3, 4, 2, 2] -> [1, 3, 4, 2])
list1=[1,3,3,4,2,2]new_list = []for i in list1: if i not in new_list: new_list.append(i)print(new_list)
根据已有表结构,写出满足需求的SQL
学生表 student (student_id, student_name,student_age) 具体字段类型忽略
课程表 course (course_id, course_name, teacher_id) teacher_id 可为空,为空表示老师未确定
成绩表 student_score (student_id, course_id, score) score 可为空,为空表示选课还未考试
教师表 teacher (teacher_id, teacher_name)
列举所有课程情况,需要展示课程名,老师名,按课程名排序。(加分题:老师不确定的课程也需要列出来)
select teacher_name,course_name from teacher,course order by course_name
having teacher_id =teacher_id;
列举学过老师 A 所教的所有课的同学的学号、姓名
select student_id from student where student_id(select * from course where teacher_Id =(select teacher_id from teacher where teacher_name=A)) as P;
select student_id ,student_name from student where student_id = P;
删除课程 b。(还需要额外清理什么数据?)
delete from course where course=b;
事务的隔离级别有几种,分别是什么?MySQL默认隔离级别是什么?
(1)读未提交
(2)读已提交
(3)可重复读
(4)串行
Mysql的默认隔离级别是可重复读
什么是GIL?他会有哪些影响?如何解决?
GIL全称全局解释器锁,作用是在单核的情况下可以实现多并发。
影响:在使用多线程的时候无法实现并行。
解决方法:
(1)更换解释器
(2)使用多进程完成多任务的处理
(3)换成一个cpu,一个进程,进程池
简述一个你熟悉的web框架,及特点(如优缺点)。
Django优点:
(1)Django上手比较容易,开发文档详细、完善,相关资料丰富
(2)Django自带的模板引擎简单好用
(3)Django debug信息详尽: 很容易找出代码错误所在。
(4)自带后台管理系统admin
(5)自带大量常用工具和框架, 适合快速开发企业级网站。
Django缺点:
(1)Django在开发小型网站时给人一种“杀鸡焉用牛刀的感觉”
(2)过度封装,直接使用比较简单,但是需要改动时特别麻烦
(3)灵活程度不高,不如Flask轻便