Redis-实战篇
基于黑马程序员的讲义整理
视频链接
1. 内容概述
短信登录
使用redis共享session来实现
商户查询缓存
了解缓存更新策略,理解并编码解决缓存击穿、缓存穿透、缓存雪崩等问题
优惠卷秒杀
学会Redis的计数器功能, 结合Lua完成高性能的redis操作,同时学会Redis分布式锁的原理,包括Redis的三种消息队列
附近的商户
利用Redis的GEOHash来完成对于地理坐标的操作
UV统计
主要是使用Redis来完成统计功能
用户签到
使用Redis的BitMap数据统计功能
好友关注
基于Set集合的关注、取消关注,共同关注等等功能
打人探店
基于List来完成点赞列表的操作,同时基于SortedSet来完成点赞的排行榜功能
2. 短信登录2.1 导入黑马点评项目2.1.1 导入SQL
2.1.2 有关当前模型手机或者app端发起请求,请求我们的nginx服务器,nginx基于七层模型走的事HTTP协议,可以实现基于Lua直接绕开tomcat访问redis,也可以作为静态资源服务器,轻松扛下上万并发, 负载均衡到下 ...
Spring Boot原理解析
导言Spring Boot,旨在简化传统Spring应用的开发、配置和部署流程,通过约定优于配置的原则,使得开发者可以快速启动和运行基于Spring的应用。应用层使用方便的同时,底层对Spring MVC进行了深度集成,自动处理常见的配置项,也通过简化依赖管理、自动配置功能对各种第三方技术进行了整合。
Spring Boot主要有两个核心
自动装配
@EnableAutoConfiguration
META-INF/spring.factories、SPI机制
条件注解
启动原理
spring-boot-starter(分包上,将常用的依赖分组进行了整合,将其合并到一个依赖中)
SpringApplication.run
目前先只讲 SpringApplication.run中对Spring Framework、Spring MVC的集成,以整合前面所学的spring框架相关知识,了解主要的Spring Boot启动流程。
对比1. 传统Spring框架整合Spring MVC需要显式配置大量的组件
传统Spring框架集成Spring MVC的简单原理
idea集成Tom ...
mini-springmvc原理解析
导言Spring MVC是基于MVC架构(模型-视图-控制器)的高级Web框架,建立在Spring IOC容器之上,底层通过高度整合的组件实现了对Web应用中控制层的完整管理。基于Spring框架的强大基础,致力于提供一个高效、灵活的Web应用开发环境。
Spring MVC的核心组件包括处理器映射器、处理器适配器、拦截器等,核心组件的设计允许高度的模块化和可拓展性,通过共同协作,扩展并优化了请求的处理流程。
处理器映射器建立请求路径与处理器间的映射关系,返回处理器链对象,保证了请求能被正确分发至相应的处理器;
处理器适配器提供了强大的数据绑定机制,通过参数解析器与返回值处理器,自动将输入输出数据与Java应用的数据模型相连接,极大简化了前后端间流转数据的处理;
拦截器则在此基础上提供了请求处理前后的拦截功能,增加了处理流程的灵活性和安全性。
DispatcherServlet是整个MVC流程的中枢,负责协调各组件的执行,完成对HTTP请求的调度分发。
全局异常处理器处理整个应用中抛出的异常,通过集中处理所有控制器层面的异常,统一管理错误处理逻辑,返回结构化的错误响应,显著提升了程序的 ...
mini-spring原理解析
导言在Spring框架中,BeanFactory 是最基本的容器,负责依赖注入和 Bean 的生命周期管理;
ApplicationContext是建立在这个基础之上的更加丰富和完善的容器环境,不仅包含了 BeanFactory的所有功能,还扩展了很多企业级支持;
两个主要的后处理器 BeanFactoryPostProcessor和 BeanPostProcessor构成了Spring功能扩展的主要分支,通过介入Bean的生命周期和容器的配置处理,进一步增强了Spring容器的灵活性和功能性。
建议对于源码的阅读,每一个类就像一个螺丝钉,一定要大致了解每个类的用处,然后再去理解源码的执行流程。
一定要重视单元测试,debug打好断点一步步跟着走一遍,当然要先理清核心类的构建思路。
悟从疑得,乐自苦生。
BeanFactory主要负责单个bean的构建
bean实例化策略 InstantiationStrategy
构造函数实例化
无参构造
有参构造
工厂方式实例化
静态工厂方式
动态工厂方式
FactoryBean
作用域
懒加载
占位符解析(这个跟 BeanFac ...
Core technologies
SpringIOC思想inversion of Control 控制反转,强调的是原来在程序中创建bean的权利转给第三方
DI思想dependency injection 依赖注入,强调Bean之间的关系,这种关系第三方负责去设置
AOP思想aspect oriented programming,面向切面编程 功能的横向抽取 主要实现方式为Proxy
框架
Spring简介Spring Framework技术栈图示
BeanFactory ApplicationContext二者继承体系 红色框为常用实现类
Spring-xmlBean配置
id/class
name
scope
lazy-init
getBean的三个方法
配置非自定义Bean
Spring-后处理器
BeanFactoryPostProcessor
BeanPostProcessor
SpringBean-生命周期
对之前IOC的总结<span style="color:blue">两个Map集合
BeanDefinitionMap存储单纯的bean标签对 ...
SpringMVC
SpringMVC简介1. 概述2. 快速入门2.1 导入spring-mvc坐标pom.xml
1234567891011121314151617181920212223242526<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</gro ...
注解
Java注解是代码中的特殊标记,比如@Override、@Test等,作用是:让其他程序根据注解信息决定怎么执行该程序。
注解不光可以用在方法上,还可以用在类上、变量上、构造器上等位置。
自定义注解格式:
123public @interface 注解名称 { public 属性类型 属性名() default 默认值;}
注解的本质
12345public @interface MyTest{ String aaa(); boolean bbb() default true; //default true 表示默认值为true,使用时可以不赋值。 String[] ccc();}
使用XJad工具进行反编译
12345public interface MyTest1 extends Annotation { public abstract String aaa(); public abstract boolean bbb(); public abstract String[] ccc(); ...
网络编程基础
初始网络编程什么是网络编程
在网络通信协议下,不同计算机上运行的程序,进行的数据传输
应用场景
不管是什么场景,都是计算机跟计算机之间通过网络进行数据传输
Java中可以使用java.net包下的技术轻松来发出常见的网络应用程序
常见的软件架构
二者区别和优缺点
C/S: Client/Server 客户端/服务端(用户要在本地安装一个客户端程序,远程要有一个服务器端程序)(客户端+服务器)(一切的一切都在服务器,都要靠网络传输)
B/S Browser/Server 浏览器/服务器(只用浏览器,根据网址,访问不同的服务器)(浏览器+服务器)(例如:游戏的音乐、画面等都在安装包里,服务器只用告诉浏览器该怎么做就行)
不管是客户端还是浏览器,都只是负责将程序展示出来。
真正的核心逻辑都在服务器当中。
网络编程三要素确定对方电脑在互联网上的地址:IP
确定接收数据的软件:端口号
确定网络传输的规则:协议
IP
设备在网络中的地址,是唯一的标识
端口号
应用程序在设备中唯一的标识
协议
数据在网络中传输的规则,常 ...
特殊文件处理
特殊文件(框架源码用的多)
主要从三个方面学习
了解它们的特点、作用
学习使用程序读取它们里面的数据
学习使用程序把数据存储到这些文件里
properties属性文件
XML文件
都是放置键值对信息
二者对比,XML存储多个对象的信息非常方便,适合存储更加复杂的数据关系
properties属性文件1. 特点、作用都只能是键值对,键不能重复,文件后缀是.properties。用来存数据
2. 如何使用程序读取文件中的数据2.1 第一种方法自己写IO流代码来读取并解析(非常麻烦繁琐)
2.2 第二种方法Properties对象
是一个Map集合(键值对集合),但是我们一般不会当集合使用
核心作用:Properties是用来代表属性文件的,通过Properties可以读写属性文件里的内容
构造器
说明
public Properties()
用于构建Properties集合对象(空容器)
常用方法
说明
public void load(InputStream is)
通过字节输入流,读取属性文件里的键值对数据
public void load(Re ...
集合框架
1. Collection集合1.1 数组和集合的区别
相同点都是容器,可以存储多个数据
不同点
数组的长度是不可变的,集合的长度是可变的
数组可以存基本数据类型和引用数据类型集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类
1.2 Colletion集合体系结构graph TD;
A{Collection}-->B{List};
B-->B1(ArrayList);
B-->B2(LinkedList);
B-->B3(Vector);
A-->C{Set};
C-->C1(HashSet);
C-->C2(TreeSet);
C1-->C11(LinkedHashSet);
List系列集合:添加的元素是有序,可重复,有索引的
Set系列集合:添加到元素是无序,不重复,无索引的
1.3 Collection集合概述和使用常用API
方法名
说明
boolean add(E e)
添加元素
boolean remove(Object o)
从集合中移除指定的元素
boolean ...