自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 收藏
  • 关注

原创 SpringCloud开发的微服务项目

通过 MQ 对用户服务与积分服务之间的服务调用进行解耦,对于服务调用产生的分布式事务,采用最终一致性方案,发送端采用 MQ 消息确认 Confirm 机制,接收端采用手动 ACK 模式保证消息的可靠传输;通过监听来自用户服务对积分的操作消息实现对用户积分的修改,同时使用防重表保证操作的幂等性;采用接口隐藏技术,通过对积分地址重写为每个用户提供唯一的接口,可以防止网络爬虫。主要功能包括:登录及退出、活动空间的创建、内容的发布、评论、数据的检索、热点数据的推送、消息的推送、用户实时交流等功能。

2023-05-06 15:25:03 259 1

原创 Ribbon的自定义规则为什么不可以放在ComponentScan的包扫描路径中

对于一个Ribbon可以由多个访问url,如果被扫描到,就造成了所有访问url的规则都共享一个rule了。

2022-11-09 10:18:08 324

原创 js箭头函数

如果箭头函数中只有一句return,那么可以同时省略大括号与return;但如果使用了大括号,即使只有一句表达式,也必须有return。

2022-11-02 10:57:39 195

原创 redis页面缓存

redis做页面缓存时对于动态数据都会渲染成静态数据在缓存到redis中,所以必须设置过期时间,保证资源的有效性。

2022-10-20 23:08:13 279

原创 mybatis源码学习笔记

进行拦截,处理spring动态代理的逻辑,实现事务-->同一个事务获得的是同一个sqlSession对象(原生mybatis真正发起查询的对象),如果不进行动态代理,就需要在该类中的许多方法都实现构造DefaultSqlsession对象,代码冗余,所以就进行了动态代理,相对于抽取了公共的切面。一级缓存是sqlSession级别的,二级缓存是应用级别的,可以跨线程使用,流程-->会话->二级缓存->一级缓存,所以二级缓存的命中率更高,适合缓存一些修改较少的数据。二级缓存使用的是装饰器模式+责任链模式。

2022-09-26 21:21:19 164

原创 mybatis vs 线程安全

一次SqlSession的执行最终只会产生一个connection,所以我们设想一下,在两个线程通过同一个sqlsession来执行crud,那么就有可能,我先跑完的线程,把唯一的这一个连接给关闭掉,从而造成另一条线程的逻辑不被成功执行,所以通过DefaultSqlSession来执行数据库操作是线程不安全的。如果我每次 查询都新建DefaultSqlSession 就不会有线程安全问题了,说白了 线程不安全,就是使用同一个 DefaultSqlSession 实例而已。

2022-09-26 21:20:22 627

原创 Spring-security注解

PreFilter/@PostFilter能够过滤方法返回的以及传入方法的集合。

2022-09-26 21:19:40 152

原创 springscurity+scrf

CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于cookie中,因此攻击者可以在不知道用户验证信息的情况下直接利用用户的cookie来通过安全验证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,并且该信总不存在于cookie之中。token的值通过服务端生成,表单提交后token的值通过POST请求与参数一同带到服务端,每次会话可以使用相同的token,会话过期,则token失效,攻击者因无法获取到token,也就无法伪造请求。

2022-09-26 21:19:07 119

原创 ConcurrnetHashMap学习

如果只有一个cpu,就么必要划分,只由一个线程完成即可,否则,划分为至少16个格子一个任务块,不足的就是16),进行数据迁移时,如果该位置正在迁移,会在数组该下标赋值ForwardingNode节点(hashCode值是MOVED),表示该位置数据正在迁移,别往该位置插入元素了。走到插入的逻辑时,用的是CAS+自旋,在一个空单元格插入元素时,利用了CAS的方法插入,判断元素的值是否为null,为null才进行插入,否则下一轮循环(自旋中)走该位置不为空的逻辑,sizeCtl=0.75*size;

2022-09-26 21:17:59 566

原创 hashMap理解

太大了:空间利用率得到提高,但hash碰撞的概率太大了,因为扩容太晚了,容易形成链表,查询效率太低。1:h&(length-1)等效于h%length的前提是length必须2的n次幂。太小了:碰撞的概率低,很快就扩容,不易形成链表,查询效率高,但空间利用率太低。1.8 HashMap 列表进化为红黑树 阈值为8,退化阈值为6。2:防止hash冲突,多1就使得有效位更多。0.75是空间效率和时间效率的折中。

2022-09-26 21:17:08 123

原创 hashMap的bug

get可能取不到值,put可能丢失数据,极端情况hashmap会被清空。1.7还可能会死循环,1.8已解决。如果再并发的情况下,两个线程进行同一个key的put操作,最后一定会造成一个覆盖另一个就造成了数据的丢失。

2022-09-26 21:16:24 451

原创 ZooKeeper一致性

zookeeper使用的ZAB协议进行主从数据同步,ZAB协议认为只要是过半数节点写入成为,数据就算写成功了,然后会告诉客户端A数据写入成功,如果这个时候客户端B恰好访问到还没同步最新数据的zookeeper节点,那么读到的数据就是不一致性的,因此zookeeper无法保证写数据的强一致性,只能保证最终一致性,而且可以保证同一客户端的顺序一致性。但也可以支持强一致性,通过sync()方法与Leader节点同步后可保证当前节点数据与Leader一致。ZooKeeper是弱一致性,能保证最终一致性。

2022-09-26 21:13:33 1092

原创 spring configuration.class与xml的组合

以java为中心,@ImportResource 并根据需要定义XML。configuration.class与xml的组合,以xml为中心,在xml中引入conf,conf只是一个bean。

2022-09-23 15:09:09 228

原创 为什么spring不扫描controller层注解,springmvc不扫描sevice层注解

如果不用spring容器,同时扫描controller、service、dao层,但子容器controller进行扫描装配时装配了@service注解的实例,而该实例应该由父容器进行初始化以保证事务的增强处理,因为事务福利器配置在spring容器中,所以初始得到的将是原样的service(没有进攻事务加强处理,故而没有事务处理能力。再springmvc中,经常配置两个xml,一个spring专属,一个springmvc专属,再这两个xml中都可以配置bean的自动扫描。1、全部放到spring.xml。

2022-09-23 15:08:09 686

原创 Spring IOC vs SpringMVC IOC

SpringMVC的 IOC 容器是 Spring IOC 容器的子容器。

2022-09-23 15:06:51 241

原创 spring 初始化注解

通常,@PostConstruct和@PreDestroy注解被认为是在Spring应用程序中接收生命周期回调的最佳实践,这是java的注解。优先级:Constructor(构造器) > @PostConstruct > InitializingBean > init-method。使用这些注解意味着您的bean没有耦合到特定于Spring的接口。

2022-09-23 15:05:43 1194

原创 spring初始化

1.实现InitializingBean接口,继而实现afterPropertiesSet的方法。2.反射原理,配置文件使用init-method标签直接注入bean。3.@PostConstruct注解。spring初始化目前有三种方式。

2022-09-23 15:04:40 252

原创 Linux文件查找

通常,find不常用,因为速度慢,耗费硬盘空间。whereis命令不是通过查找磁盘上的所有文件来实现定位的,你可以随便指定一个可执行文件,估计whereis会找不到,这是因为whereis是根据环境变量PATH来查找文件的,而PATH通常设置成存放命令的那些路径,如 /bin、/usr/bin等,因此whereis的用途仅限于定位shell命令所在的位置。功能:查找文件 find命令可以用来从指定的目录开始查找文件,它的速度虽比不上whereis命令,但没有任何限制,而且功能要比whereis命令强。

2022-09-23 15:03:54 129

原创 set 家族

set是用来存储没有重复的元素的。所以,不同的时候我们自然需要考虑如何选择使用不同的set。一般来说,如果我们需要一个存取效率比较高的set,我们可以选择hashset,如果我们需要一个可以自动给元素排序的set,我们就需要使用treeset,如果我们想要元素按插入的样子保持顺序,那么我们就可以使用LinkedHashSet。hashset通过哈希表实现,元素是不排序的,所以输出set的时候元素的顺序是随机的,add,remove, and contains这三个方法的时间复杂度都是常数 O(1)。

2022-09-23 15:03:23 126

原创 LinkedList

LinkedList有get(int index)方法,但是不支持高效的快速随机访问,LinkedList没有索引,因为它本质上是链表,只能从头依次开始查找,只能顺序访问。

2022-09-23 15:02:30 537

原创 java 泛型方法

泛型方法的语法包括位于尖括号内部的类型参数列表,它置于方法返回类型之前。参数是泛型不是泛型方法。

2022-09-23 15:01:53 102

原创 泛型的类型擦除

如果允许创建泛型数组,将能在数组p里存放任何类的对象,并且能够通过编译,因为在编译阶段p被认为是一个Object[ ],也就是p里面可以放一个int,也可以放一个Pair,当我们取出里面的int,并强制转换为Pair,调用它的info()时会怎样?所以,Java不允许创建泛型数组。只能对原始类型进行类型检测,无法判断带泛型的类型,例如都是List类型的对象,因为根本就没有List类,不能实例化类型参数,因为在运行时无法确定具体类型。

2022-09-23 15:01:19 249

原创 java异常

运行时异常的特点是Java编译器不会对异常进行检查。也就是说,当程序中出现这类异常时,即使没有使用try...catch语句捕获或使用throws关键字声明抛出,程序也能编译通过。运行时异常一般是由程序中的逻辑错误引起的,在程序运行时无法恢复。在Exception类中,除了RuntimeException类及其子类外,Exception的其他子类都是编译时异常。编译时异常的特点是Java编译器会对异常进行检查,如果出现异常就必须对异常进行处理,否则程序无法通过编译,无法生成字节码文件。

2022-09-17 19:39:52 124

原创 为什么父类将子类需要覆盖的方法设置为protected

如果子类要覆盖(overwrite)了父类中定义的方法,那么不能降低其可见性。人可以讲话,但学生作为人的一种却不能讲话,这显然是不合理的。即如果在父类中定义一个protected方法,那么在子类中可以将其覆盖,并将访问控制属性改为public,反过来则不行。

2022-09-17 19:38:35 258

原创 Spring自动装配

Constructor 类似于byType,不过是调用构造函数进行依赖注入,如果一个bean的类型与构造函数的参数相同,则会自动装配。Autodetect 如果有默认的构造器,则通过constructor方式进行装配,否则通过byType方式。ByName 通过bean的名称装配。即属性名==某个bean的名称。no 缺省,默认,通过ref或value设定。Spring自动装配,给bean注入属性。ByType 根据类型进行装配。

2022-09-17 19:36:38 67

原创 spring事务失效

1、发生了自调用,调用了类中(this)的事务方法,但this指向的不是代理对象,而是对象本身,可以通过注入一个本类变量的引用调用方法。Spring事务的原理是AOP,进行了切面增强,失效的根本原因是AOP不起作用了。2、方法不是public的。4、没有被spring管理。3、数据库不支持事务。

2022-09-17 19:35:56 604

原创 BeanFactory vs ApplicationContext 初始化

BeanFactory在初始化的时候,不会加载任何bean实例;而ApplicationContext初始化的时候,会提前加载xml中配置的所有单例bean。

2022-09-17 19:35:23 70

原创 java类型升级

如果任一方为double,则另一方转换为double。否则如果任一方为float,则另一方转换为float。§否则如果任一方为long,则另一方转换为long。§否则两边都会转换为int。

2022-09-17 19:33:57 87

原创 java jdk 和 sdk ,有啥不一样 ?

这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”。SDK是一系列文件的组合,它为软件的开发提供一个平台(它为软件开发使用各种API提供便利)。3、可以认为jdk只是sdk的一种(子集),因为它是开发java程序的一个平台,开发其他程序的sdk可以没有jdk。但是只要开发java程序就必须使用jdk。JDK(Java Development Kit,Java开发工具包)是Sun Microsystems针对Java开发员的产品。

2022-09-17 19:32:55 1518

原创 为什么重写equals方法,还必须要重写hashcode方法

因为HashMap是用equals判断键是否相等的,用反证法,如果两个键 equals相等,而hashcode不等的话,那么就无法保证通过hashcode计算的下标值相等,下标值不等也就意味着相等的两个键却 到了不同的值,这肯定是不对的,同一个对象定位到了不同的value。是为了提高效率,采取重写hashcode方法,先进行hashcode比较,如果不同,那么就没必要在进行equals的比较了,这样就大大减少了equals比较的次数,这对比需要比较的数量很大的效率提高是很明显的。

2022-09-17 19:32:00 1041

原创 设计原则 接口vs抽象类

接口主要是对类的行为进行约束,该类到底能做什么,不限制如何实现。而抽象类是为了代码复用,抽取共性派生为抽象类。

2022-09-17 19:31:29 50

原创 String + final

String是被final修饰的,每一次修改都会生成一个新的对象,StringBuffer和StringBuilder都是在原对象上操作的,StringBuffer是线程安全的(sync修饰);StringBuilder是线程不安全的(多线程环境,共享变量)。

2022-09-17 19:30:51 142

转载 maven裁剪反应堆

假设有Email,Parent和SubModule 模块,其中Email 依赖于Parent,SubModule又依赖于Email模块。-amd, --also-make-dependents 同时构建所列模块的依赖模块和依赖此模块的模块。假设有Email和Parent模块,Email模块依赖与Parent模块。-pl, --projects 构建指定的模块,模块间用逗号分割。-am, – also-make 同时构建所列模块的依赖模块。-pl -amd 构建。-pl -am 构建。-pl -am 构建。

2022-09-04 23:08:18 149

原创 父maven工程可以继承的pom属性中dependences和dependencyManagement的区别

dependences都被子项目继承,而后者不会被引入子项目,不过会约束子项目对依赖的使用。

2022-09-04 22:36:12 154

转载 MAVEN中镜像和仓库的区别

但是并不是所有库都得去镜像下载,所以,可以配置mirrorOf,取消一些含有特殊jar包的仓库(例如企业私服,当然使用企业私服作为镜像的是另外一种类型,我们公司的企业私服不能联网,只是自己开发的一些jar包发布在那里)。镜像相当于起到拦截和请求转发的作用,而私服则起到加速下载构建和存储第三方构建,节省本地maven配置等作用,二者结合可以使maven的优点体现地淋漓尽致。如果镜像配置了 mirrorOf = *, 则不管项目的 pom.xml 配置了什么仓库, 最终都会被镜像到镜像仓库。

2022-09-04 15:11:01 1371 1

原创 把setting.xml放在conf和.m2目录的区别

前者又被叫做全局配置,后者被称为用户配置。如果两者都存在,它们的内容将被合并,并且用户范围的settings.xml优先。

2022-09-04 15:00:06 231

原创 为什么maven排除依赖时不需要指定版本号

一个项目经过maven解析后不会存在groupId和artifactId相同,而版本号不同的两个依赖,经过版本仲裁、依赖调解。

2022-09-04 10:40:49 737

原创 maven依赖调解

一、路径最近者优先。二、第一生命者优先。

2022-09-04 10:30:31 86

原创 局部内部类和匿名内部类只能访问final变量

内部类和外部类编译会生成两个平级的.class文件,对于在一个方法中定义的以上两种内部类,如果引用了方法中的变量,当方法执行完成之后,局部变量会被回收,但内部类中仍然引用了它,这就造成了内部类对象访问了一个不存在的变量。所以内部类会赋值局部变量的值作为内部类的成员变量,实际访问的是一份拷贝。但将局部变量复制为内部类的成员变量时,必须保证这两个变量的值是一样的,只能用final修饰,一旦赋值不允许在修改,保证了一致性。...

2022-08-26 13:37:47 375

原创 jar包 vs war包

如果一个Web应用程序的目录和文件非常多,那么将这个Web应用程序部署到另一台机器上,就不是很方便了,这时可以将Web应用程序打包成Web 归档(WAR)文件,这个过程和把Java类文件打包成JAR文件的过程类似。JAR文件的目的是把类和相关的资源封装到压缩的归档文件中,而对于WAR文件来说,一个WAR文件代表了一个Web应用程序,它可以包含 Servlet、HTML页面、Java类、图像文件,以及组成Web应用程序的其他资源,而不仅仅是类的归档文件。...

2022-08-26 13:37:08 244

空空如也

空空如也

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

TA关注的人

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