Spring-BASE-1

Spring 框架基础1

转载:https://blog.csdn.net/qq_35843514/article/details/114287046?spm=1001.2014.3001.5501

一、什么是Spring?

1、什么是spring?(面试题)

Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Java应用程序中,但对Java EE平台上的Web应用程序有更好的扩展性。Spring框架的目标是使得Java EE应用程序的开发更加简捷,通过使用POJO为基础的编程模型促进良好的编程风格。

注:POJO和JavaBean的区别

(1)POJO 和JavaBean是我们常见的两个关键字,一般容易混淆,POJO全称是Plain Ordinary Java Object / Pure Old Java Object,中文可以翻译成:普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO,但是JavaBean则比 POJO复杂很多, Java Bean 是可复用的组件,对 Java Bean 并没有严格的规范,理论上讲,任何一个 Java 类都可以是一个 Bean 。但通常情况下,由于 Java Bean 是被容器所创建(如 Tomcat) 的,所以 Java Bean 应具有一个无参的构造器。

(2)通常 Java Bean 还要实现 Serializable 接口用于实现 Bean 的持久性。 Java Bean 是不能被跨进程访问的。JavaBean是一种组件技术,就好像你做了一个扳子,而这个扳子会在很多地方被拿去用,这个扳子也提供多种功能(你可以拿这个扳子扳、锤、撬等等),而这个扳子就是一个组件。一般在web应用程序中建立一个数据库的映射对象时,我们只能称它为POJO。POJO(Plain Old Java Object)这个名字用来强调它是一个普通java对象,而不是一个特殊的对象,其主要用来指代那些没有遵从特定的Java对象模型、约定或框架(如EJB)的Java对象。理想地讲,一个POJO是一个不受任何限制的Java对象(除了Java语言规范)。

JAVA-Stack-1

一、栈

1、栈的介绍

1. 栈的英文为(stack) 
2. 栈是一个先入后出(FILO-FirstInLastOut)的有序列表。 
3. 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的      一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。 
4. 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除 
5. 图解方式说明出栈(pop)和入栈(push)的概念------------------------------>

JAVA-Linked-List-1

链表

一、单向链表

1、基本介绍

1. 链表是有序的列表,但是他再内存中的存储如下 ----------->
2. 链表是以节点的方式来存储数据的,是链式存储
3. 每个节点包含data域(存数据) next域(存下一个节点的地址)
4. 链表中各个节点不一定是连续存储。(可以充分利用碎片内存)
5. 链表分为 带头节点链表 和 不带头节点链表,根据实际需求来确定

JAVA-Arrays-Queues-1

稀疏数组和队列

一、稀疏数组

1、稀疏数组实际需求

编写一个五子棋程序,有存盘退出和续上盘的功能。
分析问题:因为这个二维数组中很多的默认值都是0,因此记录了很多没有意义的数据,这时就可以用到稀疏数组

2、稀疏数组基本介绍

当一个数组中大部分元素都是0,或者都是同一个值的数组时,可以使用稀疏数组来保存该数组。

稀疏数组的处理方法是:

1. 稀疏数组的第一行是 记录数组一共有几行几列(这里不是索引,从1开始),有多少个不同的值
2. 把具有不同值得元素的行列及值记录在一个小规模的数组(稀疏数组)中,从而缩小程序的规模 --->
3. -------------------->原来的二维数组是42个值,使用稀疏数组后变成27个值(节省了很大空间)
4. 稀疏数组 永远是一个 行不确定(有效值的数量+1 = 真实行数),但是就三个列(行,列,值)的一个二维数组
5. 稀疏数组第二行及以下  都是存放原始二维数组中 有效值的坐标(行和列分别是 下标[索引])

JAVA-SE-1

多线程 & 反射 & 注解 & 网络编程 & 路径

一、多线程

1、概述

1.1 理解线程和进程

• 进程时一个应用程序(软件)
• 线程是一个进程的执行过程/执行场景
• 一个进程可以启动多个线程

JAVA-Spring-AOP-1

AOP面向切面编程

1. AOP

• AOP (Aspect Orient Programming) 面向切面编程是从动态角度考虑程序的运行过程
• AOP底层,就是采用动态代理模式实现的,采用了两种代理,JDK的动态代理和CGLib的动态代理
• 实际上AOP就是动态代理的一种规范化,因为动态代理种类繁多,掌握较难,所以就规范了一套统一的方式,这就是AOP
• AOP把动态代理的实现步骤,方式都定义好了,让开发人员用一种统一的方式,去用动态代理。

1.1 动态代理实现方式

JDK:
• jdk动态代理,要求jdk中有Proxy,Method,InvocationHandler创建代理对象
• jdk代理要求目标类必须实现接口

CGLib:
• 第三方的工具库,创建代理对象,原理是继承,通过继承目标类创建子类,子类就是代理对象
• CGLib要求目标类不能是final的 方法也不能是final的

JAVA-Spring

Spring框架

1. 了解Spring

1.1 spring是什么?

• Spring官网:https://spring.io/
• 容器框架
• Spring 是分层的javaee/javase应用,轻量级开源框架,以IOC(控制反转)和AOP(面向切面编程)为内核

1. 怎么使用spring

• spring也是一个容器,里面存放java对象
• 让容器完成对象的创建,对象之间关系的管理(属性赋值)
• 我们在程序中从容器中获取要使用的对象

JAVA-SpringMVC-1

SpringMVC

一、SpringMVC是什么

• 是基于spring的一个框架,实际上就是spring的一个模块,专门做web开发的
• 可以理解为Servlet的升级
• web开发底层就是Servlet,框架是在Servlet基础上面添加一些功能,做web项目更方便
• SpringMVC能够创建对象,放入到容器中(SpringMVC的容器) SpringMVC里面放的是控制器对象
• 我们要做的是使用@Controller注解创建控制器对象,把对象放入到SpringMVC容器中,把创建的对象作为控制器使用
• 这个控制器对象能接收用户的请求,显示处理结果,就当作是一个servlet使用【并不是servlet,就是普通对象】
    • 使用@Controller创建的对象,其实就是个普通的对象,springMVC赋予了他控制器的能力
• Springmvc底层访问依然是DispatcherServlet   他的两大作用:
    • 创建WebApplicationContext对象,读取配置文件,进而控制控制器对象
    • 本身就是一个Servlet,要接收请求,显示结果

JAVA-RabbitMQ-1

RabbitMQ

源码下载:下载
原文:https://blog.csdn.net/unique_perfect/article/details/109380996

MQ引言

1.1 什么是MQ

MQ(Message Quene) : 翻译为消息队列,通过典型的生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,轻松的实现系统间解耦。别名为 消息中间件通过利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。

1.2 MQ有哪些

当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。

SpringCloud-Snowflake-Algorithm

雪花算法

原文链接:https://blog.csdn.net/u011863024/article/details/114298270

为什么需要分布式全局唯一 ID 以及分布式 ID 的业务需求?集群高并发情况下如何保证分布式唯一全局 ID 生成?

在复杂分布式系统中,往往需婴对大量的数据和消息进行唯一标识,如在美团点评的金融、支付、餐饮、酒店,猫眼电影等产品的系统中数据日渐增长,对数据分库分表后需要有一个唯一 ID 来标识一条数据或消息。特别一点的如订单、骑手、优惠券也都雷要有唯一 ID 做标识。此时一个能够生成全局唯一 ID 的系统是非常必要的。

ID 生成规则部分硬性要求

全局唯一:不能出现重复的 ID 号,既然是唯一-标识,这是最基本的要求

趋势递增:在 MySQL 的 InnoDB 引擎中使用的是聚集索引,由于多数 RDBMS 使用 Btree 的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。

单调递增:保证下一个 ID 一定大于上一个 ID,例如事务版本号、IM 增量消息、排序等特殊需求

信息安全:如果 ID 是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定URL即可。如果是订单号就更危险了,竞对可以直接知道我们一天的单量。所以在一些应用场景下,需要ID无规则不规则,让竞争对手否好猜。

含时间戳:这样就能够在开发中快速了解这个分布式id的生成时间。

ID 号生成系统的可用性要求

高可用:发一个获取分布式 ID 的请求,服务器就要保证 99.999% 的情况下给我创建一个唯一分布式 ID。

低延迟:发一个获取分布式 ID 的请求,服务器就要快,极速。

高 QPS:假如并发一口气 10 万个创建分布式 ID 请求同时杀过来,服务器要顶的住且一下子成功创建 10 万个分布式 ID。
|