自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (6)
  • 收藏
  • 关注

原创 Spring事件发布原理

事件驱动机制其实是观察者模式(又称发布订阅)具体实现,事件对象(HtwBikeRoadSignEvent)相当于被观察对象, 事件监听(EventListener) 相当于观察者。@EventListener()括号里面是哪个对象就是监听哪个对象。实现ApplicationListener接口。自己定义的类,在方法中发布事件。注解@EventListener。

2024-01-22 23:39:50 548

原创 Springboot自动装配:三个注解、Selector、spring.factories文件、@ConditionalOnProperty注解

借鉴:这个链接是包含run方法进来debug看整个过程的,建议先看:https://www.cnblogs.com/starsray/p/15580915.htmlhttps://blog.csdn.net/fengxiandada/article/details/130080828Springboot自动装配1.创建springboot应用如何创建一个spring boot应用?这就很简单了,可以使用idea自带的spring initializr帮助我们选择相应的场景启动器也就是starter

2024-01-21 23:01:17 1108

原创 引用计数法和gcroot的优缺点

当一个引用被释放时,引用计数器减一。通过不断地增减引用计数器,系统可以动态地追踪对象的引用情况,并在适当的时候回收不再被引用的对象。不支持并发:引用计数法在多线程环境下需要进行额外的同步操作,以确保引用计数的准确性,这可能导致一定的性能损失。循环引用问题:当存在循环引用的情况下,对象之间的引用计数可能永远不会为零,导致内存泄漏的发生。实时性好:当没有引用指向一个对象时,该对象可以立即被回收,释放内存资源。额外开销:每个对象都需要维护一个引用计数器,这会带来一定的额外开销。

2024-01-12 12:00:39 453

原创 Spring依赖注入DI的方式、类型、作用

注意下面的示例:我在UserService中创建两个成员变量UserDAO和User,但是并不创建set方法,所以这里就不能支持第一中的set注入,此处的注入是在UserService的构造函数中实现的,即就是在创建UserService时就要将UserDAO和User两个参数传进来。在传统的编码方式中,对象需要自己创建它所依赖的对象,这会导致高度耦合的代码。那么就可以在UserService类中定义一个private的UserDAO成员变量,然后创建UserDAO的set方法(这是IOC注入的入口)

2024-01-04 16:52:23 861

原创 Spring Bean的生命周期(钩子函数)

调用 InitializingBean 的 afterPropertiesSet 或者没有实现这个接口,但指定了@Bean(initMethod=“不加括号的方法名”),会执行这个方法。12)、初始化 bean 之前执行 BeanPostProcessor#postProcessBeforeInitialization。12)、初始化 bean 后执行 BeanPostProcessor#postProcessAfterInitialization。钩子执行顺序与博文顺序一致,即 1->n。

2024-01-03 20:21:35 1151

原创 Mysql日志:undo log、redo log 、bin log、两阶段提交

记录undo log日志,MySQL不会直接去往磁盘中的xx.ibdata文件写数据,而是会写在undo_log_buffer缓冲区中,因为工作线程直接去写磁盘太影响效率了,写进缓冲区后会由后台线程去刷写磁盘。(1)数据恢复,如果MySQL数据库意外挂了,可以利用bin log进行数据恢复,因为该日志记录所有数据库所有的变更,保证数据的安全性。查看bin log最终输出的位置。也会导致主从不一致。log_bin_index: 是binlog文件的索引文件,这个文件管理了所有的binlog文件的目录。

2023-12-18 19:40:29 1140

原创 Java 8新特性:Lambda 表达式、函数式接口、Stream流、Optional 类

Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例。Lambda 表达式新的语法元素和操作符。这个操作符为 “->” ,被称 为 Lambda 操作符或剪头操作符。右侧:指定了 Lambda 体,即 Lambda 表达式要执行 的功能。orElse(T t) : 如果调用对象包含值,返回该值,否则返回t。map():映射,可以用lambda表达式获取里面对象的值。可以通过 Lambda 表达式来创建该接口的对象。

2023-12-01 15:30:33 605

原创 Mysql主从复制原理和三种复制:异步、同步、半同步(主的binlog、从的relaylog)

当主库执行完客户端提交的事务后,需要等到所有从库也都执行完这一事务后,才返回给客户端执行成功。因为要等到所有从库都执行完,执行过程中会被阻塞,等待返回结果,所以性能上会有很严重的影响。半同步复制模式,可以说是介于异步和同步之间的一种复制模式,主库在执行完客户端提交的事务后,要等待至少一个从库接收到binlog并将数据写入到relay。异步复制模式,主库在执行完客户端提交的事务后,只要将执行逻辑写入到binlog后,就立即返回给客户端,并不关心从库是否执行成功。log中才返回给客户端成功结果。

2023-11-29 19:39:14 870

原创 CAP概念和三种情况、Redis和分布式事务的权衡

A全称Availability(可用性):每一个非故障节点,都能够对每一个请求做出响应。说白了就是某个节点坏了,不能影响其他的节点业务。P全称Partition tolerance(分区容错性):当系统中有节点因网络原因无法通信时,系统依然可以继续运行。C全称Consistency(一致性):这个表示所有节点返回的数据是一致的。

2023-11-29 12:02:49 650

原创 Mysql分表根据两个字段同时进行hash算法分表:公共的id哈希

公共的id哈希,例如用户id的后几位作为公共id,用来生成订单id时拼接公共id,然后根据这个公共id哈希分表。

2023-11-19 21:20:56 148

原创 Mybatis用MapperScannerConfigurer,使用自定义注解实现多数据源配置

5.sqlSessionTemplateBeanName:指定在spring中定义的sqlSessionTemplate的bean名称。使用:配置多个datasource.xml和自定义注解AssetsPlatformMapper(Mapper文件不管在什么目录都可以生效,一个注解对应一种数据源)4.sqlSessionFactoryBeanName:指定在spring中定义的sqlSessionFactory的bean名称。assets-platform-datasource.xml:配置。

2023-10-09 16:49:33 1670

原创 Redis的伪事务、事务执行中三情况、不支持回滚的原因

在事务提交之前,客户端执行的命令缓存(队列)失败,比如命令的语法错误(命令参数个数错误,不支持的命令等等)。如果发生这种类型的错误,Redis将向客户端返回包含错误提示信息的响应,同时Redis会清空队列中的命令并取消事务。事务提交后开始顺序执行命令,之前缓存在队列中的命令有可能执行失败。命令正确,类型不正确这种,报错的命令执行失败,其他的命令正常执行。Redis会将一个事务中的所有命令序列化,然后按照顺序执行执行中不会被其他命令插入,不许出现加塞行为。:报错的命令执行失败,其他的命令正常执行。

2023-09-19 00:44:16 204

原创 Rdis使用lua脚本的作用、使用案例、保证原子性的原理、存在的问题和解决方法

作用:使用:

2023-09-11 20:18:02 206

原创 创建多线程的四种方式及代码、FutureTask的get方法原理(实现Callable接口情况下)

FutrueTask的get会先判断state的值是否大于comleting,也就是执行完,是的话就判断state为normal正常的话,就返回outcome结果,为cancel取消的话,就抛取消异常,为异常的话,就抛出outcome记录的异常。FutureTask有一个volatile的state变量,最初始的状态是new 新建状态,其他状态有completing完成中,normal正常执行完,还有其他取消、中断、异常之类的状态。将FutureTask的对象作为参数传递到Thread类的构造器中。

2023-08-27 16:07:04 116

原创 海量数据在内存小的情况下:单个文件去重(url)、两个文件获取共同的数据(url)、单个文件取Top K(整数)、

可以对 url 取hash,对 hash%100,即将所有 url 分进100个小文件中。重复的 url 一定会被分到同一个小文件中,再对小文件进行去重。如果 hash 算法做的足够好,不同 url 的hash值肯定不同,再小文件中可以对哈希值进行去重。也可以通过 set 对url本身进行去重。(就算不同小文件有可能相同,就再次重复分治+Hash的操作)

2023-08-07 17:33:08 131

原创 Mysql删除重复数据:百万级别数据

减新表存不重复的最小id,id列加索引;删除需要去重的表根据不在id不在新表的所有id中,根据字段对数据进行分组,查询出所有分组的最小ID(即要保留的不重复数据)(1):先把min(id)存到临时表(SZ_Building_id)(2):给临时表的id设置成主键或者创建索引(加快后面的查询速度)将查询出来的数据(所有不重复的数据)存放到临时表中。从原来的表中删除ID不在临时表中的重复数据。(3):删除id不在临时表的数据。

2023-08-07 16:37:22 322

原创 事务的四大特性ACID及保证的原理

保证:mysql保证一致性:事务、锁、分布式事务下的二次提交(本地提交和协调者统一提交)、主从下的一致性(主从复制保证)事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使是数据库发生故障有不会对其有任何影响。原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。(4)分布式事务下的一致性:本地提交和协调者统一提交保证整个事务的一致性。

2023-08-07 16:27:48 360

原创 HashMap同时重写hashCode和equals方法的原因

那么如果没有重写hashCode , 则此时两者都用的Object的hashcode去返回内存地址 , 两者hashcode比较肯定是不同的 ,原因在于不是同一个对象。没有重写的话,就会有两条数据 (“a” ,“123”) ,违背了HashMap的key不重复的特点。—> 存这个的时候调用key 的hashCode , 因为Object的hashcode返回的是内存地址 ,如果不重写hashcode , 那么同样的一个键值对 , 唯一性得不到保证。

2023-08-07 15:52:27 95

原创 Feign的使用、原理、协议和数据封装格式

一:Feign的使用二:原理三:协议和数据封装格式

2023-07-21 15:51:44 315

原创 Kafka生产和消费的代码例子、Kafka集群下生产者代码和发送数据的协议、与RocketMQ区别

3.多线程消费代码:(实现Runnable接口的消费类,实例中消费的topic或者分区不同)Kafka:单机写入百万/s、不支持定时消息、不支持分布式事务、使用短轮询(实时性差一点)RocketMQ:单机写入7万/s、支持定时消息、分布式事务、使用长轮询。P ( Partition Tolerance )表示分区容错性。C ( Consistency )表示强一致性。A ( Availability )表示可用性。是自行设计基于TCP之上的二进制协议。

2023-07-21 15:30:17 965

原创 Java普通接口协议HTTP、数据封装和序列化、长连接、状态码

超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是是一个应用层协议,HTTP协议是构建在TCP/IP协议之上的。HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;// Keep-Alive不会永久保持连接,它有一个持续时间,可以在不同的服务器软件中设定这个时间。HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成。HTTP 1.1:默认使用长连接,用以保持连接特性。3xx表示请求被重定向。

2023-07-20 17:28:32 317

原创 Dubbo使用、原理、协议和数据封装格式、高性能原因

高性能Java RPC框架。

2023-07-15 18:05:30 82

原创 Zookeeper原理(注册中心、分布式锁、配置中心、数据存储在内存和磁盘)

雅虎公司创建是web中间件。

2023-07-15 17:45:40 30

原创 Mybatis的执行流程和sql生成原理

运行环境(数据库连接的参数等)

2023-07-15 16:01:01 42

原创 Kafka发送数据流程、Topic分区个数、数据存储原理、数据保留机制、与Zookeeper的关系、Kafka消息队列的作用

Kafka是最初由linkedin公司开发的,使用 scala语言编写Kafka目前支持多种客户端的语言:java,python、c++、php等现在:Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。

2023-07-15 15:21:01 52

原创 Nacos注册中心和服务发现的原理和配置中心的原理、集群架构图和后端yml中配置、与Zookeeper的区别

Nacos作为微服务架构中的注册中心,其他服务的服务信息(ip,端口等信息)可以到Nacos服务端(其实也是一个Spingboot应用)。Nacos又为客户端提供了的功能。客户端会开启一个定时任务,定时向服务端获取最新的服务列表,加载到客户端本地缓存。客户端同时又开启一个定时心跳发送的任务,用于告知服务端,当前服务的健康状态。服务端启动的时候同样也会开启一个健康检查的定时任务,扫描服务列表,将长时间未与服务端发送心跳的服务的健康状态改为false,达到某个时间,会踢出该服务。

2023-07-14 15:30:08 52

原创 Timer类和TimerTask实现定时任务原理、Executors.newScheduledThreadPool(3)线程池定时任务原理

Timer类的线程 schedule() 方法加任务到优先队列,另启的单个线程TimerThread循环判断优先队列TimerTask[] 队首元素中的时间戳,当前时间匹配则更新任务的下次执行时间并插入优先队列(最小堆),然后执行任务。原理和Timer的差不多,也是一个优先队列(最小堆)存TimerTask,只不过线程池的方式是多个另启的线程循环判断优先队列(最小堆),加锁更新任务的下次执行时间并且重新构建最小堆,然后由成功加锁的线程执行任务,其他的线程继续循环判断。

2023-07-05 11:35:55 107

原创 CPU、内存100%排查;FullGC次数多怎么排查;接口慢怎么排查

常用命令:jstat、jmap、jstack这些命令可以追加生成到文件中。(所谓的dump文件)jps:查看Java 进程jstat:查看JVM状态信息-GC信息jmap:查看堆信息jstack:查看栈信息jinfo:查看jvm参数和动态修改部分jvm参数top:查看CPU和内存消耗情况,以及进程的运行情况统计。

2023-07-04 16:38:36 55

原创 关注专用232323

关注专用。

2023-06-17 21:07:37 50

原创 排序算法:冒泡排序,选择排序,插入排序,希尔排序,快速排序,堆排序,归并排序,桶排序,计数排序,基数排序

它的父节点下标是 (index - 1) / 2,得益于完全二叉树的结构,下标为index的节点,左子节点下标是 2 * index + 1,右子节点下标是 2 * index + 2。

2023-06-15 14:48:51 189

原创 Spring IOC和DI、bean的生命周期和作用域、循环依赖(三个缓存)、控制Bean的加载顺序

一:Spring IOC和DI二:bean的生命周期和作用域三:循环依赖

2023-06-13 16:24:27 17

原创 Mybatis的一级缓存和二级缓存

在同一个Mapper中,执行SQL查询时, 每次查询会先去缓存中取。如果取不到,再去数据库查询,并写在二级缓存中。当执行SQL执行insert、update、delete等操作commit后,则Mapper的二级缓存会被清空。在同一个SqlSession中,执行SQL查询时, 每次查询会先去缓存中取。如果取不到,再去数据库查询,并写在一级缓存中。当执行SQL执行insert、update、delete等操作commit后,则SQLSession的一级缓存会被清空。

2023-06-13 16:04:25 41

原创 SpringMVC核心组件、工作过程

SpringMVC:M是Model、V是View、C是Controller。

2023-06-13 15:46:42 37

原创 SpringAOP:应用场景、原理、五大通知、多个aop执行顺序、

值越小优先级越高。

2023-06-13 14:38:09 564

原创 ThreadLocal:使用例子、原理、应用场景、内存泄漏的原因

每次操作set、get、remove操作时,会相应调用 ThreadLocalMap 的三个方法,ThreadLocalMap的三个方法在每次被调用时 都会直接或间接调用一个 expungeStaleEntry() 方法,这个方法会将key为null的 Entry 删除,从而避免内存泄漏。ThreadLocal主要功能:每个线程提供一个专属的局部变量(一个线程的变量对应ThreadLocalMap中自己线程名字的Entry中的value)每个线程设置自己的变量,获取的也是自己的变量。

2023-06-13 13:55:11 25

原创 线程不安全的例子和解决:类中的int变量、操作同一个List

加锁 synchronized。

2023-06-13 12:17:09 18

原创 常见设计模式:单例模式、工厂模式、策略模式、代理模式、适配器模式、模板方法模式、原型模式

该原型对象来创建一个和原型对象相同的新对象(浅拷贝和深拷贝)

2023-06-13 10:17:07 85

原创 BIO、NIO、AIO、多路复用IO

一个线程可以监视多个文件句柄;(等待时非阻塞,数据就绪时阻塞)同步非阻塞IO:线程从内核空间获取数据这个过程是非阻塞的。内核空间有数据的情况下,是阻塞的。同步阻塞IO:线程从内核空间获取数据的整个过程**(等待和获取数据时)都是阻塞**的。优点:线程发起请求后,等待内核空间数据的过程中,立刻返回,线程无需阻塞,实时性好。异步非阻塞IO:线程从内核空间获取数据这个过程和拿数据时都是非阻塞的。缺点:线程需要不断轮询获取数据信息,占用大量CPU资源,效率低下。I/O :网络 I/O。复用:复用同一个线程。

2023-06-13 09:45:01 28

原创 静态代理、Jdk动态代理、Cglib动态代理、两种代理当目标类中有final和static和内部类的情况

【代码】静态代理、Jdk动态代理、Cglib动态代理。

2023-06-12 17:29:30 147

原创 反射:概念、获取Class对象的方式、Class的方法、优缺点、应用场景

6.getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes 参数指定方法的参数类型。8.getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。9.newInstance():通过类的不带参数的构造方法创建这个类的一个对象。4.getMethods():获得类的public类型的方法。

2023-06-12 16:51:40 33

bookmarks_2021_8_27.html

书签

2021-08-27

20210827背景.zip

背景

2021-08-27

pandas2222.7z

py安装包py安装包

2021-01-25

py安装包py安装包

py安装包py安装包

2021-01-25

整理总结20201225.txt

20210125++++++

2021-01-25

chrome---20210107

chrome---20210107

2021-01-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除