叮咚买菜抓包教程 本文仅供学习交流使用,请勿用于非法用途。本文以叮咚买菜为例,学习一下微信小程序如何抓包,获取叮咚买菜接口的参数以及返回值。叮咚买菜API抓包教程工具列表Windows微信客户端Fiddler抓包工具Python环境(任意版本)Pycharm(或者其它PythonIDE)环境准备微信环境准备步骤一:登录Windows微信,这一步比较简单,就不详细介绍了;步骤二:在windows微信搜索叮咚买菜;步骤三:打开叮咚买菜小程序;步骤四:登录叮咚买菜;Fiddler环境准备步
SpringMVC 解析(五)URI链接处理 URI在网络请求中必不可少,Spring提供了一些工具类用于解析或者生成URL,比如根据参数生成GET的URL等。本文会对Spring MVC中的URI工具进行介绍,本文主要参考Spring官方文档。工具类UriComponentsUriComponentsBuilder可以用于根据URL和参数来构建路径,比如我们需要一个带GET参数的URL,通常情况下我们需要自己去拼接URL,添加"&"和"?等参数"。UriComponentsBuilder提供一种
SpringMVC 解析(四)编程式路由 多数情况下,我们在使用Spring的Controller时,会使用@RequestMapping的形式把请求按照URL路由到指定方法上。Spring还提供了一种编程的方式去实现请求和路由方法之间的路由关系,这种关系在Spring启动时确定,运行过程中不可变。编程式路由和注解式路由可以使用同一个DispatcherServlet。本文会对Spring编程式Endpoint进行介绍,本文主要参考了Spring官方文档。总览在Spring MVC编程式路由中一次请求会被一个处理方法进行处理,处理方法在Spri
SpringMVC 解析(三) Controller 注解 我在前面的文章中介绍了Spring MVC最核心的组件DispatcherServlet,DispatcherServlet把Servlet容器(如Tomcat)中的请求和Spring中的组件联系到一起,是SpringWeb应用的枢纽。但是我们在日常开发中往往不需要详细知道枢纽的作用,我们只需要处理枢纽分发给我们的请求。Spring中处理请求业务逻辑最常见的组件是Controller,本文会对Spring的Controller及相关组件做详细介绍。Controller的定义Controller是Spri
SpringMVC 解析(二)DispatcherServlet 在我的关于Tomcat容器介绍的文章中,介绍了Tomcat容器的工作原理,我们知道Tomcat容器在收到请求之后,会把请求处理为Request/Response对象,交给Servlet实例处理。对于Spring的Web应用,得到Tomcat容器的请求之后会交给DispatcherServlet去处理。DispatcherServlet是Spring Web应用处理请求的核心组件,本文会介绍DispatcherServlet的工作原理及关键源码,本文主要参考了Spring的官方文档。Servlet简介
SpringMVC 解析(一)概览 Spring MVC是Spring提供的构建Web应用程序的框架,该框架遵循了Servlet规范,负责接收并处理Servelt容器传递的请求,并将响应写回Response。Spring MVC以DispatcherServlet为核心,众多组件如HandlerMapping为辅助,为用户封装了请求映射等底层逻辑,让用户可以更专注与业务逻辑的处理。本文会对Spring MVC整体结构做简单介绍。Spring MVC结构图Spring MVC是一个基于Servlet容器的Web应用框架,这里的Servlet
Maven插件开发教程 Maven是一个一个优秀的项目管理开源框架,其插件机制为其功能扩展提供了非常大的便捷性。大多数情况下,我们不需要自己开发Maven插件,因为Maven本身提供了很多便捷的官方插件。但是对于某些特殊场景和特殊需求,开发一个自定义的Maven插件能大大提高开发效率。本文以一个简单的例子,展示如何创建一个自定义的Maven插件。Maven插件开发本文会以一个自制的Maven插件为例,展示如何使用Idea从0开始构建自制的Maven插件。Maven插件目标Maven本质是一个插件执行框架,所有的工作都是通过
SpringBoot自动装配 SpringBoot是对Spring的一种扩展,其中比较重要的扩展功能就是自动装配:通过注解对常用的配置做默认配置,简化xml配置内容。本文会对Spring的自动配置的原理和部分源码进行解析,本文主要参考了Spring的官方文档。自动装配的组件SpringBoot自动装配通过多部分组件协调完成,这些组件主要有下面几种,这几种组件之间协调工作,最终完成了SpringBoot的自动装配。@EnableAutoConfiguration:用于根据用户所引用的jar包自动装配Spring容器,比如用户在Cl
InnoDB学习(八)之 聚簇索引 InnoDB中,表数据文件本身就是以主键为索引的B+树,树的叶子节点存放一条条表数据,此索引树被称为表的聚簇索引。聚簇索引也称为聚集索引,聚类索引,簇集索引,聚簇索引确定表中数据的物理顺序。InnoDB聚簇索引InnoDB表主键InnoDB中每张表都会有一个主键,表中的每一行数据都是按照主键的顺序在聚簇索引中存储的,InnoDB中有两种方式确定一行数据的主键:显式声明:用户可以在建表的时候通过primary key关键字来声明主键列;唯一索引:如果用户没有声明主键列,那么InnoDB会使用第一个
InnoDB学习(七)之索引结构 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。可以将数据库索引和书的目录进行类比,通过书的目录我们可以快速查找到章节位置,如果没有目录就只能一页页翻书查找了。索引数据结构可以用于提升查询效率的索引结构很多,常见的有B树索引、哈希索引和B+树索引。接下来我们会对这些索引一一进行介绍,并说明InnoDB为什么采用B+树作为索引。磁盘IO文件是存储在硬盘上面的。当下硬盘的读取速度十分有限,所以在进行查询定位某个数据的时候,应该尽可能地减少磁盘I/O次数。磁盘
InnoDB学习(六)之数据库锁 InnoDB存储引擎的默认隔离级别事可重复读,MVCC多版本并发控制仅仅解决了快照读情况下的数据隔离,而对于当前读,InnoDB通过锁来进行并发控制。InnoDB锁本文主要参考了MySQL官方文档,并在上面添加了一些自己的理解,有兴趣看英文的也可以看MySQL官方文档。本文分为以下章节:共享锁和独占锁;意向锁;行锁;间隙锁;Next-Key锁插入意向锁;自增锁;共享锁和排他锁InnoDB锁的最小粒度是行锁,行锁可以分为两大类:共享锁(S)和独占锁(X)。共享锁:持有某行数据共享
InnoDB学习(五)之MVCC多版本并发控制 MVCC多版本并发控制,是一种数据库管理系统并发控制的方法。MVCC多版本并发控制下,数据库中的数据会有多个版本,分别对应不同的事务,从而达到事务之间并发数据的隔离。MVCC最大的优势是读不加锁,读写不冲突,在读多写少场景中,读写不冲突可以大幅提升数据库的并发性能。MVCC多版本并发控制在MYSQL中,MyISAM存储引擎使用的是表锁,InnoDB存储引擎使用的是行锁。而InnoDB的事务分为四个隔离级别,其中默认的隔离级别是可重复读,可重复读要求两个并行的事务之间数据的修改互不影响,通过添加行锁的方式
InnoDB学习(四)之RedoLog和UndoLog BinLog是MySQL Server层的日志,所有的MySQL存储引擎都支持BinLog。BinLog可以支持主从复制和数据恢复,但是对事务的ACID特性支持比较差。InnoDB存储引擎引入RedoLog和UndoLog事务日志,用于提升事务场景下的数据库性能。本文会对RedoLog和UndoLog进行介绍。RedoLog和UndoLogChangeBuffer和WAL我们以一条SQL更新语句来介绍RedoLog的作用,首先在数据库中创建user_info表,该表包含主键列id和姓名列,并向数据库中
InnoDB学习(三)之BinLog BinLog又称为二进制日志,是MySQL服务层的数据日志,MySQL所有的存储引擎都支持BinLog。BinLog记录了MySQL中的数据更新和可能导致数据更新的事件,可以用于主从复制或数据恢复。本文会对BinLog的原理进行详细介绍。BinLogMySQL的BinLog用于记录MySQL的所有数据变更和可能造成数据变更的事件,这些BinLog以二进制日志的形式顺序存储在磁盘中。用户不能直接通过文本编辑器查看BinLog的内容,需要借助MySQL提供的mysqlbinlog工具才能查看文件。需要注意