面试问题总结

本文探讨了爬虫如何突破反爬虫策略,包括修改请求头、更换IP、设置请求间隔等方法。同时,深入讲解了数据库优化策略,如合理选择数据类型、使用连接代替子查询、使用UNION替代临时表、事务管理、锁定表、外键使用、索引优化以及查询语句优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

爬虫突破反爬虫的常用方法

  1. 随机的修改请求头(User-Agent)模拟浏览器请求;
  2. 随机更改请求ip地址;
  3. 设置请求时间(不要请求过于频繁);
  4. 云打码识别图片验证码;
  5. 模拟人工操作对滑动解锁。

MVC与MTV

MVC(Model View Controller 模型-视图-控制器)

是一种Web架构的魔师。特点:把业务逻辑、模型数据、用户界面分离开来,让开发者将数据与表现解耦。

Model:代表数据存取层;

View:代表的是系统中选择显示什么和怎么显示的部分;

Controller:指的是系统中根据用户输入并视需要访问模型,以决定使用哪个视图的哪部分。

MTV(Model Templates View 模型-模板-视图)
  1. Model:数据存取层。该层处理与数据相关的所有事务:如何存取、如何验证有效,是一个·抽象层,用来构建和操作你的web应用中的数据。模型是你的数据的唯一的、权威的信息来源。它包含你所存储数据的必要字段和行为。通常,每个模型对应数据库中唯一的一张表;
  2. 模板(templates):即表现层。该层处理与表现相关的决定:如何在页面或其他类型文档中进行显示。模板层提供了设计友好的语法来展示信息给用户。使用模板方法可以动态地生成HTML。模块包含所需HTML输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入。
  3. 视图(view):业务逻辑层,该层包含存取模型及调取恰当模板的相关逻辑。用来封装负责处理用户请求以及返回响应的逻辑。视图可以看做是前端与数据库的中间人,他会将前端想要的数据从数据库中读取出来给前端。他也会将用户想要保存的数据写到数据库。

HTTP头有哪些

Accept:浏览器端可以接受的MIME类型;(MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。)

Host:表示服务器的域名以及服务器所监听的端口号。

Cookie:最重要的请求头之一,将cookie的值发送给HTTP服务器。

User-Agent:浏览器的身份标识字符串。

Authorization:授权信息,通常出现在对服务器发送WWW-Authenticate头的应答中。

From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。

Range:可以请求实体的一个或者多个子范围。

OOP

OOP:Object Oriented Programming,面向对象的程序设计。所谓“对象”在显示支持面向对象的语言中,一般是指类在内存中装载的实例,具有相关的成员变量和成员函数(也称为:方法),面向对象的程序设计完全不同于传统的面向过程的程序设计,它大大降低了软件开发的难度,使编程就像搭积木一样简单,是当今电脑编程的一股势不可挡的潮流。

OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。

面向对象的特征:

1.继承:继承是从已有类得到继承信息创建新类的过程。

2.封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。我们编写一个类就是对数据和数据操作的封装,我们在类中编写的方法就是对实现细节的一种封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。

3.多态性:多态性是指允许不同子类型的对象对同一信息作出不同的响应。简单的说就是对同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(overrride)实现的是运行时的多态性(也称为后绑定)。运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:方法重写和对象造型(用父类引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。

4.抽象:抽象是将对象的共同特性总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有那些属性和行为,并不关注这些行为的细节是什么。

ORM

对象关系映射(Object Relational Mapping,简称ORM),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

说简简单一点,就是OOP中,把对象的属性(带有get/set方法的字段)和数据库中标的字段名称对应起来。

关系型数据库与非关系型数据库

关系型数据库

关系型数据库有SQL、Oracle、MySQL等

特性
  1. 关系型数据库,是指采用了关系模型来组织数据的数据库;
  2. 关系型数据库的最大特点就是事物的一致性;
  3. 简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
优点
  1. 容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;
  2. 使用方便:通用的SQL语句使得操作关系型数据库非常方便;
  3. 易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率;
  4. 支持SQL,可用于复杂的查询。
缺点
  1. 为了维护一致性所付出的巨大代价就是其读写性能比较差;
  2. 固定的表结构;
  3. 高并发读写需求;
  4. 海量数据的高效率读写。
非关系型数据库

非关系型数据库NoSQL,MongoDB、Redis、HBase等

特性
  1. 使用键值对存储数据;
  2. 分布式;
  3. 一般不支持ACID特性;
  4. 非关系型数据库严格上讲不是一种数据库,应该是一种数据结构化存储方法的集合。
优点
  1. 无需经过sql层的解析,读写性能很高;
  2. 基于键值对,数据没有耦合性,容易扩展;
  3. 存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,而关系型数据库则只支持基础类型。
缺点
  1. 不提供sql支持,学习和使用成本较高;
  2. 无事物处理,附加功能和报表等支持也不好。

数据库的索引

什么是索引

索引就是对数据列上的值进行结构化排序的一个东西,能优化查找的效率。

索引的缺点

降低更新表的速度,在对表中数据进行更新操作的时候就会在更新索引上消耗一定的时间,所以会降低整体的效率。

数据库优化方式
  1. 选择最适合的数据类型,因为数据库中的表越小它的查询效率越高,我们应该将表中的字段类型尽可能设置的小,如果数据只有已知的几个选择,比如省份,那么我们可以考虑将其设置为enum类型,因为在MySQL中Enum类型被当做数值类型来进行处理。应当尽可能将字段设置成NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值;
  2. 使用连接(JOIN)代替子查询,使用join之所以效率高是因为MySQL不需要创建一个临时表来完成逻辑上需要两个步骤的操作;
  3. 使用UNION来代替手动创建临时表,它可以把需要使用临时表的两条或者多条select查询合并在一个查询中。在客户端查询后临时表会被自动删除,从而保证数据库整齐高效。使用UNION要保证各个查询中select字段的数目要相同;
  4. 事务,保证数据库操作的原子性,一致性,隔离性,持久性;
  5. 锁定表,表锁和行锁,不需要锁定整个数据库;
  6. 使用外键,表锁定可以保证数据完整性但是不能保证数据关联性,这个时候我们可以使用外键;
  7. 使用索引;
  8. 优化查询语句:最好是在相同类型的字段间进行比较,在建立有索引的字段上尽量不要使用函数,也尽量不要把索引作为表达式中的值,那样会降低索引的效率,在搜索字符类型的时候,使用LIKE和通配符会降低效率,应该尽可能少的使用。

索引类型

唯一性索引

主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键;
唯一性索引列允许空值,而主键列不允许空值;
主键列在创建时,已经默认为空值+唯一索引了;
主键可以被其他表引用为外键,而唯一索引不能;
一个表最多只能创建一个主键,但可以创建多个唯一索引;
主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。

聚类索引

每个表只能有一个聚类索引;
注意,主键也可以声明为非聚类索引!!但是默认是聚类索引。

复合索引,组合索引

用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引);
一般设计上,能使用窄索引就不要使用宽索引,这样可以使sql有更多的优化空间;
注意,复合索引是有顺序的。

主键

主键是表中的一个字段或多个字段,用来唯一的标识表中的一条记录。唯一性是主键最主要的特性。

外键

定义外键主要是为了保证数据的一致性。

触发建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值