0%

0x00 阅读源代码

下载源代码

  • 代码仓库地址 https://gitee.com/Z201/spring-framework.git
  • 阅读版本号 v5.1.5.RELEASE
  • 下载版本git clone -b v5.1.5.RELEASE https://github.com/spring-projects/spring-framework.git
    • 由于github下载速度是在太慢了,这里用gitee克隆一个镜像。
    • 下载版本git clone -b v5.1.5.RELEASE https://gitee.com/Z201/spring-framework.git
  • 官方提供的文档import-into-idea
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
➜  spring-framework git:(master) ./gradlew :spring-oxm:compileTestJava

Downloading https://services.gradle.org/distributions/gradle-4.10.3-bin.zip
..........................................................................

Welcome to Gradle 4.10.3!

Here are the highlights of this release:
- Incremental Java compilation by default
- Periodic Gradle caches cleanup
- Gradle Kotlin DSL 1.0-RC6
- Nested included builds
- SNAPSHOT plugin versions in the `plugins {}` block

For more details see https://docs.gradle.org/4.10.3/release-notes.html

Starting a Gradle Daemon (subsequent builds will be faster)

> Task :spring-beans:compileTestJava
注: 某些输入文件使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
注: 某些输入文件使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。

> Task :spring-context:compileTestJava
注: 某些输入文件使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
注: 某些输入文件使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。

> Task :spring-oxm:genJaxb
[ant:javac] : warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

BUILD SUCCESSFUL in 9m 18s
58 actionable tasks: 58 executed
➜ spring-framework git:(master)

如果显示BUILD SUCCESSFUL 说明构建成功了,但是由于项目太大了,所以下面就不介绍模块了。

本文主要是为了记录很久以前对Junit的回顾。

Junit

Java开发中使用的最多的测试框架,工作中经常会大量使用。

建议遵守约定

  • 测试类在test包下(如果是maven结构的项目建议建议不要方在源码中,早期的项目很多是没有区分开的)
  • 测试类命名xxxTest结尾。
  • 方法命名testxxxx命名。
  • 测试方法上必须使用@Test进行修饰。
  • 测试方法必须使用public void 进行修饰,不能带任何的参数。
  • 测试类的包应该和被测试类保持一致。
  • 测试单元中的每个方法必须独立测试,测试方法间不能有任何的依赖。

常用注解

  • @Test(expected = ArithmeticException.class) 预期将抛出一个算术异常。
  • @Test(timeout = 10) 改方法调用预期的时间范围 10毫秒,若超时算失败。
  • @Ignore 被改注解修饰的方法不会被执行。
  • @RunWith 可以更改测试运行器,制定的测试运行器需要继承 org.junit.runner.Runner。
Read more »

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。也就是说JWT是Token的一种表述性声明规范。

JWT(Json Web Token)

JWT生成编码后的样子

  • 结构类似 xxx.yyy.zzz
1
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6IuWkqeihjOWBpeeuoeeQhueUqOaItyIsImF1ZGllbmNlIjoid2ViIiwibmJmIjoxNTA3Njg0OTQyLCJpc3MiOiJ3d3cuMW9uZS5jbiIsImV4cCI6MTUwNzY4Njc0MiwiaWF0IjoxNTA3Njg0OTQyLCJqdGkiOjEwMDB9.GGF0kFbxNk2ezzuXEJVBZyyL4e4BYMdpse73cSDrUut7cbVyYuLG1CNr8RI7eI3VHz9sdCB14Kesi8rP-v3VJA
  • base64解析之后
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"body":{
"sub":"admin",
"aud":"XXX用户",
"audience":"web",
"nbf":1507684942,
"iss":"www.xxx.cn",
"exp":1507686742,
"iat":1507684942,
"jti":1000
},
"header":{
"typ":"JWT",
"alg":"HS512"
},
"signature":"GGF0kFbxNk2ezzuXEJVBZyyL4e4BYMdpse73cSDrUut7cbVyYuLG1CNr8RI7eI3VHz9sdCB14Kesi8rP-v3VJA"
}
Read more »

FastDfs介绍

  • FastDFS是由国人余庆所开发,其项目地址:FastDFS。FastDfs是一个轻量级的开源分布式文件系统,主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。文件存取时实现了负载均衡FastDFS实现了软件方式的RAID,可以使用廉价的IDE硬盘进行存储支持存储服务器在线扩容支持相同内容的文件只保存一份,节约磁盘空间。

  • FastDFS只能通过Client API访问,不支持POSIX访问方式。

  • FastDFS特别适合大中型网站使用,用来存储资源文件(如:图片、文档、音频、视频等等)。

  • 它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。它只能通过专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用。准确地讲,Google FS、HDFS、TFS(这三个都是底层上的实现,在文件系统上处理的是数据块)以及FastDFS、mogileFS(这两个是文件级上的实现,处理的是文件)等类Google FS都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。

  • 特性

    • 1、分组存储,灵活简洁、对等结构,不存在单点。
      2、文件ID由FastDFS生成,作为文件访问凭证。FastDFS不需要传统的name server(去重机制在服务端,导致不能达到秒传。)。
      3、和流行的web server无缝衔接,FastDFS已提供apache和nginx扩展模块。
      4、大、中、小文件均可以很好支持,支持海量小文件存储(实际上不建议存储超大文件(大于500M))。
      5、支持多块磁盘,支持单盘数据恢复(理论上,实际出现Storage合并丢操作失数据)。
      6、支持相同文件内容只保存一份,节省存储空间。
      7、存储服务器上可以保存文件附加属性。
      8、下载文件支持多线程方式,支持断点续传。

系统架构

Read more »

​ 衔接上一篇爬虫入门。为了更好爬输出,有必要Xpath用法有一定了解。

​ 了解Xpath之前先了解下XML、HTML。如果完全不知道是什么,建议系统学习HTML、XML下阅读下文。

XML

可扩展标记语言(英语:Extensible Markup Language,简称:XML),是一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用像XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从标准通用标记语言(SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言(XSL)、XBRL和XPath等。

示例-0

1
2
3
4
5
6
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

HTML

超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。HTML是一种基础技术,常与CSS、JavaScript一起被众多网站用于设计令人赏心悦目的网页、网页应用程序以及移动应用程序的用户界面。网页浏览器可以读取HTML文件,并将其渲染成可视化网页。HTML描述了一个网站的结构语义随着线索的呈现,使之成为一种标记语言而非编程语言。

HTML元素是构建网站的基石。HTML允许嵌入图像与对象,并且可以用于创建交互式表单,它被用来结构化信息——例如标题、段落和列表等等,也可用来在一定程度上描述文档的外观和语义。HTML的语言形式为尖括号包围的HTML元素(如<html>),浏览器使用HTML标签和脚本来诠释网页内容,但不会将它们显示在页面上。

HTML可以嵌入如JavaScript的脚本语言,它们会影响HTML网页的行为。网页浏览器也可以引用层叠样式表(CSS)来定义文本和其它元素的外观与布局。维护HTML和CSS标准的组织万维网联盟(W3C)鼓励人们使用CSS替代一些用于表现的HTML元素。

Read more »