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
<project>
<name>xxx-xxx-xxx</name>
<description>Xxx xxx xxx</description>
<url>https://duanjw.com</url>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
</license>
</licenses>
<developers>
<developer>
<name>duanjw</name>
<email>554343346@qq.com</email>
<organization>Personal</organization>
<organizationUrl>https://duanjw.com</organizationUrl>
</developer>
</developers>
<scm>
<url>https://github.com/duan847/spring-boot-learning</url>
</scm>

<properties>
<!--设置编码-->
<encoding>utf-8</encoding>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!--xxx版本-->
<xxx.version>x.y.z</xxx.version>
</properties>
</project>

使用Idea开发工具创建Maven父子工程,以创建Spring Boot学习项目为示例。

软件环境:
Idea:2020.2
Maven:Idea自带的Maven

阅读全文 »

ELK安装

准备工作

下载镜像

1
2
3
docker pull kibana:7.6.2
docker pull elasticsearch:7.6.2
docker pull logstash:7.6.2

创建网络

1
docker network create elk
阅读全文 »

Git 每次提交代码,都要写 Commit message(提交说明),否则就不允许提交。

1
git commit -m 'hello world'

上面代码的-m参数,就是用来指定 commit mesage 的。

阅读全文 »

十大经典排序算法

paste image

冒泡排序

算法描述

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

阅读全文 »

数组

什么是数组

数据是有限个相同类型的变量所组成的有序集合。数组中的每一个变量被称为元素。

paste image

数组的基本操作

读取O(1)、更新O(1)、插入O(n)、删除O(n)、扩容O(n)。

链表

什么是链表

链表是一种在物理上非连续、非顺序的数据结构,由若干个节点组成。

单向链表的每一个节点又包含两部分,一部分是存放数据的变量data,另一部分是指向下一个节点的指针next。
paste image

链表的基本操作

读取O(n)、更新O(1)、插入O(1)、删除O(1)。

阅读全文 »

前言

为什么要学习算法和数据结构

  • 解决特定问题;
  • 深度优化程序性能的基础;
  • 学习一种思想:如何把现实问题转化为计算机语言表示。

业务开发要掌握到程度

  • 了解常见数据结构和算法,沟通没有障碍;
  • 活学活用:遇到问题时知道要用什么数据结构和算法去优化。

数据结构基础

什么是数据结构

数据结构是数据的组织、管理和存储格式,其使用目的是为了高效的访问和修改数据。
数据结构是算法的基石。如果把算法比喻成美丽灵动的舞者,那么数据结构就是舞者脚下广阔而坚实的舞台。

阅读全文 »

键盘

F1、F2用作标准功能

默认情况按下F1、F2等键是使用印在各按键上的特殊功能,如:亮度高低、音量大小等。但是开发中代码调试我们会用到F7、F8等,默认设置影响调试,所以可以设置特殊功需要配合fn键触发。

系统偏好设置 -> 键盘 -> 将F1、F2等键用作标准功能 打上勾。

快捷键

新建位于文件夹位置的终端窗口

快捷键设置为command + shift + S,在文件夹直接按该快捷键就能打开位于文件夹位置的终端窗口。

触摸板

调快触摸板鼠标移动速度

默认触摸板鼠标移动速度太慢,建议把速度调到最高。

系统偏好设置 -> 触摸板 -> 跟踪速度 调到最右边。

ICloud

建议把文稿和桌面同步到ICloud

设置部分文件夹不同步到ICloud

在文件夹名字末尾加上.nosync,如:文件夹java改成java.nosync

程序坞

关闭最近使用的应用程序

日期与时间

导航显示日期

系统偏好设置 -> 日期与时间 -> 时钟 勾选显示日期

编译Tomcat源码,使用以下环境:

名称 版本
macOS 10.15.6
Git 2.24.3
IntelliJ IDEA 2020.1.2
JDK IntelliJ IDEA中的OpenJDK14
Maven IntelliJ IDEA中的Maven3.6.3
Tomcat源码 10.0

Tomcat项目是基于Ant + Eclipe构建的,但是现在很多开发人喜欢用Maven + IDEA,所以本文将基于这个环境来构建Tomcat源码。

阅读全文 »

Spring Framework是一个分层架构,每一层针对不同的应用场景,并被分为大约20模块,如图:
paste image

Spring-Framework整体架构图

Test

Test模块支持使用JUnit和TestNG对Spring组件进行测试。

Core Container

Core Container(核心容器)包含有Beans、Core、Context、Expressio Language模块。
Core和Beans模块是框架的基础部分,提供IoC(控制反转)和DI(依赖注入)。

  • Core 模决主要包含 Spring 框架基本的核心工具类, Spring 的其他模块都会用到这个包里的类,当然我们可以在自己的系统中使用这些工具类。
  • Beans 模块包含访问配置文件、创建和管理 bean 以及进行 IoC/DI 操作相关的所有类。
  • Context 模块构建于 Core 和 Beans 模块基础之上,提供了一种类似于 JNDI 注册器的框架式的对象访问方法。Context 模块继承了 Beans 的特性,为 Spring 核心提供了大量扩展,添加了对国际化(例如资源绑定)、事件传播、资源加载和对 Context 的透明创建的支持。 Context 模块同时也支持 J2EE 的一些特性, 例如:EJB、JMX和基础的远程处理。ApplicationContext 接口是 Context 模块的关键。
  • Expression Language 模块提供了强大的表达式语言,用于在运行时查询和操纵对象。它是 JSP 2.1 规范中定义的 unifed expression languag 的扩展 该语言支持设置/获取属性的值,属性的分配,方法的调用,访问数组上下文( accessiong the context of arrays )、容器和索引器、逻辑和算术运算符、命名变量以及从 Spring 的 IoC 容器中根据名称检索对象。它也支持 list 投影、选择和一般的 list 聚合。

Aop

AOP 模块提供了一个符合 AOP 联盟标准的面向切面编程的实现,它让你可以定义例如方法拦截器和切点,从而将逻辑代码分开,降低它们之间的耦合性。利用 source-level 的元数据功能,还可以将各种行为信息合并到你的代码中,这有点像 .Net 技术中的 attribute 概念。
通过配置管理特性, Spring AOP 模块直接将面向切面的编程功能集成到了 Spring 框架中,所以可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP ,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

  • Aspects 模块提供了对 AspectJ 的集成支持。
  • Instrumentation 模块提供了 class instrumentation 支持和 classloader 实现,使得可以在特定的应用服务器上使用。

Data Access Integration

Data Access/Integration 层包含JDBC、ORM、OXM、JMS和 Transaction 模块。

  • JDBC 模块提供了一个 JDBC 抽象层,它可以消除冗长的 JDBC 编码和解析数据库厂商特有的错误代码。这个模块包含了 Spring 对 JDBC 数据访问进行封装的所有类。
  • ORM 模块为流行的对象-关系映射 API ,如 JPA、JDO、Hibernate、iBatis 等,提供了一个交互层。利用 ORM 封装包,可以混合使用所有 Spring 提供的特性进行 O/R 映射,如前边提到的简单声明性事务管理。
    Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatisSQL Map 所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
  • OXM 模块提供了一个对 Object/XML 映射实现的抽象层,Object/XML 映射实现包括JAXB、Castor、XMLBeans、JiBX、XStrearm。
  • JMS ( Java Messaging Service )模块主要包含了一些制造和消 费消息的特性。
  • Transaction 模块支持编程和声明性的事务管理,这些事务类必须实现特定的接 口,并且对所有的 POJO 都适用。

Web

Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文 所以,
Spring 框架支持与 Jakarta Struts 的集成 Web 模块还简化了处理大部分请求以及将请求参数绑定
域对象的工作 Web 层包含 Web b-Servlet Web-S uts I] Web-Porlet 模块,具体说明如下

  • Web 模块:提供了基础的面向 Web 的集成特性 例如,多文件上传、使用 servlet listeners 初始化 IoC 容器以及一个面向 Web 的应用上下文。它还包含 Spring 远程支持中 Web的相关部分。
  • Web Servlet 模块 web.servlet.jar :该模块包含 Spring 的 model-view-controller ( MVC) 实现。 Spring MVC 框架使得模型范围内的代码和 web forms 之间能够清楚地分离开来,并与 Spring 框架的其他特性集成在一起。
  • Web-Struts 模块:该模块提供了对 Struts 的支持,使得类在 Spring 应用中能够与一个典型的 Struts Web 层集成在一起 注意,该支持在 Spring 3.0 中已被弃用。
  • Web-Porlet 模块:提供了用于 Portlet 环境和 Web-Servlet 模块的 MVC 的实现。