Spring(二) Inversion of Control (IoC)
参考文献
什么是IoC?
控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法;
将对象的创建和组装的主动控制权都交给Spring容器来完成,使用这只需要从Spring容器中查找需要的使用的对象.
主要是为了降低系统代码的耦合度,让系统利于维护和扩展.
Spring容器主要负责容器中对象的创建,组装,对象查找,对象生命周期的管理等等操作.
IoC容器的职责
实现与执行的任务之间要解耦;
实现bean的管理,让应用程序不用过渡关注bean的生命周期以及依赖;
IoC容器是具有依赖注入功能的容器,负责对象的实例化,对象的初始化,对象和对象之间依赖关系配置,对象销毁,对外提供对象的查找等操作,对象的整个生命周期都是由容器来控制.
通用职责
依赖处理
依赖查找
依赖注入
生命周期管理
容器的生命周期(启动,停止…);
托管的资源(Java Beans或其他资源的生命周期);
配置
容器的配置
外部化配置
托管的资源(Java Beans或其他资源)
如何实现IoC?
IoC主要实现策 ...
Spring-面试题
什么是Spring Framework?
Spring 是一个开源应用框架,旨在降低应用程序开发的复杂度.
它是轻量级、松散耦合的.
Spring核心主要两部分:
IOC - 控制反转
AOP - 面向切面编程可以将应用业务逻辑和系统服务分离,以实现高内聚.
Spring Framework有哪些核心模块?
spring-core: Spring基础API模块,如资源管理,泛型处理;
spring-beans: Spring Bean相关,如依赖查找,依赖注入;
spring-aop: Spring AOP处理,如动态代理,AOP字节码提升;
spring-context: 事件驱动,注解驱动,模块驱动等;
spring-expression: Spring表达式语言模块;
什么是IoC?
IoC是反转控制,类似好莱坞原则,主要实现有依赖注入(DI)和依赖查找;
IoC: 将类的对象的创建交给Spring容器来管理创建
DI: 将类里面的属性在创建类的过程中给属性赋值
依赖查找和依赖注入的区别?
依赖查找是通过容器或上下文来查找所需的依赖关系,并将其注入到所需的 ...
Kafka-副本和ISR
参考文献
Apache Kafka实战–胡夕
ISR
就是Kafka集群动态维护的一组同步副本集合(in-sysn replicas);
每个topic分区都有自己的ISR列表,ISR中的所有副本都与leader保持同步状态.
值得注意的是,leader副本总是包含在ISR中的,只有ISR中的副本才有资格被选举为leader.而 producer写入的一条Kafka消息只有被ISR中的所有副本都接收到,被视为"已提交"状态.由此可见,若ISR中有N个副本,那么该分区最多可以忍受N-1个副本崩溃而不丢失已提交的消息;
foller副本同步
foller副本只做一件事情:向leader副本请求数据.
起始位移(base offset): 表示该副本当前所含第一条消息的offset;
高水印值(high watermark,HW): 副本高水印值.它保存了该副本最新一条已提交消息的位移.
leader分区的HW值决定了副本中已提交消息的范围,也确定了consumer能够获取的消息的上限,超过HW值的所有消息都被视为"未提交成功的" ...
Spring(一) SpringFramework总览
参考文献
小马哥讲Spring核心编程思想
核心特性(Core)
IoC容器(IoC Container)
Spring事件(Events)
资源管理(Resources)
国际化(i18n)
校验(Validation)
数据绑定(Data Binding)
类型转换(Type Conversion)
Spring表达式(Spring Express Language)
面向切面编程(AOP)
数据存储(Data Access)
JDBC
事务抽象(Transactions)
DAO支持(DAO Support)
O/R映射(O/R Mapping)
XML编列(XML Marshalling)
Web技术
Web Servlet技术栈
Spring MVC
WebSocket
SocketJS
Web Reactive 技术栈
Spring WebFlux
WebClient
WebSocket
技术整合(Integration)
远程调用(Remoting)–(同步)
Java RMI
基于Hessian协议
Java消息服务(JMS)–( ...
MySQL(七)-存储过程,视图,触发器
参考文献
存储过程
123456789101112131415161718-- 修改最外层语句结束符delimiter 自定义结束符号 SQL语句自定义结束符号delimiter ; -- 修改回原来的分号-- 语句块包裹begin 语句块end-- 特殊的执行1. 只要添加记录,就会触发程序。2. Insert into on duplicate key update 语法会触发: 如果没有重复记录,会触发 before insert, after insert; 如果有重复记录并更新,会触发 before insert, before update, after update; 如果有重复记录但是没有发生更新,则触发 before insert, before update3. Replace 语法 如果有记录,则执行 before insert, before delete, after delete, after insert
123456789101112131415161718192021222324252627282930313233 ...
MySQL(四)-常见函数
MySQL常见函数
字符函数
数值运算符与函数
比较运算符与函数
日期时间函数
信息函数
聚合函数
加密函数
字符函数
函数名称
描述
CONCAT()
字符连接
CONCAT_WS()
使用指定的分隔符进行字符连接
FORMAT()
数字格式化函数
LOWER()
转换为小写字母
UPPER()
转换为大写字母
LEFT()
获取左侧字符
RIGHT()
获取右侧字符
LENGTH()
获取字符串长度
LTRIM()
删除前导空格
RTRIM()
删除后导空格
SUBSTRING()
字符串截取
[NOT] LIKE
模式匹配
REPLACE()
字符串替换
数值运算符与函数
函数名称
描述
CEIL()
进一取整(向上取整)
FLOOR()
舍一取整(向下取整)
DIV
整数除法
MOD
取模
POWER()
幂运算
ROUND()
四舍五入
TRUNCATE()
数字截取
ABS()
取绝对值
比较运算符与函数
函数名称
描述
[NOT] BETW ...
MySQL(三)-理论
参考文献
MySQL 数据库面试题(2021最新版)
极客时间–MySQL实战45讲
MySQL技术内幕 InnoDB存储引擎
MySQL 设计与开发规范,很详细,你该注意了
MySQL技术内幕 SQL编程
SQL四种语言: DDL,DML,DCL,TCL
DDL
DDL(Data Definition Language ) 数据库定义语言 statements are used to define the database structure or schema.
DDL是SQL语言的四大功能之一.用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性、安全控制等约束DDL
不需要commit.
123456CREATEALTERDROPTRUNCATECOMMENTRENAME
DML
DML(Data Manipulation Language)数据操纵语言statements are used for managing data within schema objects.
由DBMS提供,用于让用户或程序员使用, ...
Java多线程(四)-线程池
参考文献
Java 线程池必备知识点:工作流程、常见参数、调优、监控
以面试官视角万字解读线程池10大经典面试题!
线程池
合理使用线程池的好处
降低资源消耗.
通过重复利用已经创建的线程降低线程创建的和销毁造成的消耗.例如,工作线程Woker会无线循环获取阻塞队列中的任务来执行.
提高响应速度.
当任务到达时,任务可以不需要等到线程创建就能立即执行.
提高线程的可管理性.
线程是稀缺资源,Java的线程池可以对线程资源进行统一分配、调优和监控.
实现线程池
一般的线程池主要分为以下4个组成部分
线程池管理器:用于创建并管理线程池
工作线程:线程池中的线程
任务接口:每个任务必须实现的接口,用于工作线程调度其运行
任务队列:用于存放待处理的任务,提供一种缓冲机制
自定义拒绝策略接口
1234@FunctionalInterfacepublic interface RejectPolicy<T> { void reject(BlockingQueue<T> queue, T task);}
...
无题
参考文献
3W 字详解 Java 集合
源码阅读(1):Java中主要的List结构——概述
集合框架
所有集合实现类的最顶层接口为Iterable和Collection接口,再向下Collection分为了三种不同的形式,分别是List,Queue和Set接口,然后就是对应的不同的实现方式.
List
ArrayList: Object[] 数组
Vector:Object[] 数组
LinkedList: 双向链表(JDK1.6 之前为循环链表,JDK1.7 取消了循环)
Set
HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素
LinkedHashSet: LinkedHashSet 是 HashSet 的子类,并且其内部是通过 LinkedHashMap 来实现的。有点类似于我们之前说的 LinkedHashMap 其内部是基于 HashMap 实现一样,不过还是有一点点区别的
TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树)
Queue
PriorityQu ...
MySQL中utf8与utf8mb4的区别
MySQL中utf8与utf8mb4的区别
utf8mb4是MySQL在5.3.3后增加的编码,其中mb4的意思是: most byte 4,专门兼容四字节的Unicode
原来的MySQL支持的utf8编码最大字符长度为3字节,若遇到4字节的宽字符就会插入异常
3字节的utf8最大能编码的Unicode字符为Oxffff,即Unicode中基本多文种平面(BMP),即任何不在基本多文种平面的Unicode字符都无法使用MySQL的utf8字符集进行存储,包括Emoji表情和很多不常用的汉字
当使用utf8字符集时,需要保留长度就是utf8最长字符乘以字符串长度,例CHAR(100),MySQL会保留300字节长度
utf8升级utf8mb4步骤
首先将数据库默认字符集有utf8改为utf8mb4,对应的表默认字符集也要改为utf8mb4,已经存储的字段默认字符集也要进行相应调整;
123456-- 修改数据库ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;- ...