面试题1
数据库:
数据库优化
1.符合三范式
2.建立索引,单表不超过五个
3.sql优化
4.加缓存
5.历史数据迁移,把长期不用的数据放到mongodb中
6.读写分离
7.分库分表
8.分布式
sql优化
1.查询中不要使用*
2.尽量使用关联查询代替子查询
3.先查大表在查小表
4.减少使用in,lnot,in,or,!=,<>
5.update语句,如果只跟新一两个字段,不要update全部字段,否则频繁调用会引起频繁的性能消耗,也会产生大量日志信息
关系型数据库和非关系型数据库
常用的:
关系型:MySQL,SQL Server ,Oracle
非关系型:Redis,MongoDB
关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织
关系型
优点:
1.易于维护,都使用表结构,格式一致
2.使用方便,sql语句通用
3.支持复杂查询
缺点:
1.读写性能查,尤其是海量数据的高效读写
2.表结构固定,灵活性欠缺
3.高并发读写时,硬盘I/O是很大的瓶颈
非关系型
非关系型数据库严格上不是一种数据库,是数据结构化存储方法的集合,可以是文档或键值对
优点:
1.格式灵活:可以使键值对,文档,图片等
2.速度快:可以使用硬盘使用硬盘或随机存储器作为载体,关系型数据库只能使用硬盘
3.高扩展性
4.基本都是开源软件,成本低
缺点:
1.不提供sql支持,学习和使用成本较高
2.无事务处理
3.数据结构相对复杂,复杂查询方面稍欠
mongodb和redis的区别
1.内存管理:
redis数据全部存在内存,定期写入磁盘
mongodb数据存在内存,当内存不够是,只将主要数据放入内存,其他数据存在磁盘
2.支持数据结构:
redis支持的数据结构丰富,包括hash,set,list等
mongodb数据存在内存,当内存不够时,只将主要数据放入内存,其他数据存在磁盘
3.事务:
redis事务支持比较弱,只能保证事务中的每个操作连续执行
mongoDB不支持事务
5.使用场景:
redis:秒杀,缓存,热门搜索,二级菜单
mongoDB:日志,通知,推送(数据不是很重要,或表结构变化频繁,或数据量大时)
MySQL如何支持事务?
用begin,rollback,commit来实现
begin开始一个事务
rollback事务回滚
commit 事务确认
orm框架
通过对象和数据库之间的映射,将二者联系起来,使面向对象与关系数据库互相匹配
MySQL索引类型:
1.普通索引
2.唯一索引:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一
3.主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引
4.全文索引
常用的mysql引擎有哪些?各引擎间有什么区别?
主要MyISAM与InnoDB两个引擎,其主要区别如下:
1.InnoDB支持事务,MyISAM不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要那个出错还可以回滚还原,而MyISAM就不可以了
2.InnoDB支持外键,MyISAM不支持
3.MyISAM是默认引擎,InnoDB需要指定
解决高并发
1.页面静态化
2.前端拦截,ip限制
3.图片服务器分离
4.缓存
5.数据库集群
爬虫
scrapy数据流是由执行的核心引擎控制的,流程如下:
1.爬虫引擎或缺初始请求开始抓取
2.爬虫引擎开始请求调度程序,并准备对下一次的请求进行抓取
3.爬虫调度器返回下一个请求给爬虫引擎
4.引擎将请求发送给下载器,下载器中间件下载网络数据
5.一旦下载器完成页面下载,将下载结果返回给引擎
6.引擎将下载器的响应通过中间件返回给爬虫进行处理
7.爬虫处理响应,并通过中间件返回处理后的items,以及新的请求给引擎
8.引擎发送处理后的items到项目管道,然后把处理结果返回给调度器,调度器计划处理下一个请求抓取
9.重复该过程,直到爬取完所有的url请求