- 博客(20)
- 资源 (11)
- 收藏
- 关注
原创 MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据
1、MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis中的数据都是热点数据?redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。2、Redis 有哪些适合的场景?(1)会话缓存(Session Cache)最常用的一种使用 Redis 的情景是会话缓存(session cache)。用 Redis 缓存会话比其他存储(如 Memcached)的优势在于:Redis 提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物...
2022-01-18 17:26:50 1448
原创 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免
缓存穿透一般的缓存系统,都是按照 key 去缓存查询,如果不存在对应的 value,就应该去后端系统查找(比如DB)。一些恶意的请求会故意查询不存在的 key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。如何避免?1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该 key 对应的数据 insert 了之后清理缓存。2:对一定不存在的 key 进行过滤。可以把所有的可能存在的 key 放到一个大的 Bitmap 中,查询时通过该 bitmap 过滤。缓存雪...
2022-01-18 10:00:15 161
原创 spring事务的理解
spring的事务开启方式有两种,一个是声明式事务,一个是编程式事务,声明式事务是通过添加Transaction注解的方式开启事务,一般加在类或者方法上,事务控制粒度比较大,但使用上比较方便,编程式事务通过TransactionTemplate,控制事务的粒度小,但是代码侵入性比较强。使用spring aop实现。spring事务提供了7中传播机制:1. REQUIRED(必须的):是默认的传播机制,如果B方法中调用A,如果B中有事务,则A无论是否开启事务都会用B的事务,任何地方出现异常A和B都回滚2
2022-01-06 18:25:25 149
原创 spring Bean是如何创建的
在spring中,万物都是bean对象,每一个对象都可以封装成BeanDefinition,然后去生成bean对象。第一步,spring要找到哪些bean需要实例化,第一种是xml的方式,如果需要实例化bean就在xml中配置bean标签,找到所有需要创建的bean,第二种注解方式,扫描所有添加了spring注解的bean,把所有的bean封装成一个BeanDefinition放入一个list。第二步,循环list,通过BeanDefinition中的类全名称,通过反...
2022-01-02 09:30:00 554
转载 Spring Aop的理解和使用
Aop面向切面编程,在spring中,通过配置切面类和切点,切面类中主要有前置通知方法,后置通知方法,异常通知方法以及环绕通知方法,切面类中的方法的逻辑就是你要织入代码的逻辑,然后你需要判断哪些类需要进行前面切面,所以就要配置切入点,可以使用xml方式,也可以使用注解的方法。实现方式主要是通过动态代理给目标类生成代理对象,如果目标类实现了接口就使用jdk代理,如果没有实现接口使用cglib代理,如果配置了优先级,则默认使用cglib代理。在spring容器启动后,就会去扫描哪些需要进行aop的类,这些类有
2022-01-01 19:33:00 311
原创 idea 常用快捷键
实用快捷键:Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/*...*/ )Ctrl+D 复制行Ctrl+X 删除行快速修复 alt+enter (modify/cast)代码提示 alt+/ctr+G 定位某一行Shift+F6 重构-重命名Ctrl+R 替换文本Ctrl+F 查找文本Ctrl+E 最近打开的文件Ctrl+J 自动代码组织导入 ctr+alt+O格式化代码 ctr+alt+L大小写转化 ctr+shift+U--------------
2021-12-30 10:36:05 123
原创 spring ioc的理解和使用
以前没有spring的时候,我们需要得到一个对象,都是自己主动去new一个对象,然后通过set方法给对象注入属性,但是这种动作其实是一个重复的动作,所以spring提供ioc的容器解决方案,在容器启动的时候就把许多需要实例化和属性注入的bean都提前做好并放入到一个map中存储起来。这就是控制反转,原来的控制全在用户,现在的控制权完全交给了容器,在bean实例化后,通过反射对属性进行依赖注入。有两种使用方式,一种是xml的方式,一种是注解的方式:1、xml的加载方式,首先在spring的xml中通过
2021-12-28 18:05:47 167
原创 MyBatis插件原理。使用mybtais插件如何数据脱敏?
在mybtis中对外提供了4大对象供开发者拦截,分别是Excutor:查看mybatis的sql执行过程,ParameterHandler修改他的参数,ResultSetHandler拦截返回值,StatementHandler进行分页,开发者自己定义一个类,实现Interceptor接口,实现intercept方法,在类上通过@Intercepts注解和@Signature选择拦截哪个类中的哪个方法。比如:@Intercepts(@Signature(type = ResultSetH...
2021-12-27 18:41:47 381
原创 MyBatis只需要声明接口即可调用SQL是怎么做到的?JDK动态代理和CGLib代理区别?
mybatis是通过对dao接口进行代理,在启动mybatis的时候,会去加载在mybtais配置文件中配置的mapper文件,mapper文件中的每个sql语句都封装成一个statement,然后通过mapper文件中的namespace去得到到接口然后给他生成代理的工厂类放入到map中,注入mapper接口类时从该map中拿出对接口代理的对象,在代理对象中的invoke方法中除了object的方法,其他的所有方法都直接去找到相应的statment,然后去执行sql语句;Jdk动态代理的类必须要实现
2021-12-25 18:54:27 627
原创 java 一个对象是多少字节?在堆区都存了什么东西?对象头里面都有什么
对象在内存中的存储的布局可以分为三块区域:对象头(Header),实例数据(Instance Data)和对齐填充(Padding);对象头由 Markword + 类指针kclass(该指针指向该类型在方法区的元类型) 组成;普通对象头在32位系统上占用8bytes,64位系统上占用16bytes。64位机器上,数组对象的对象头占用24个字节,启用压缩之后占用16个字节。MarkWord用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、
2021-12-21 18:07:11 698
转载 接口怎么做的幂等
是指用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。第一种:插入之前先查询,在保存数据的接口中,我们防止产生重复的数据,一般会在 insert 前先根据 name 或 code 字段 select 一下数据,如果该数据已存在,则执行 update 操作,如果不存在,才执行 insert 操作缺点:该方案可能是我们平时在防止产生重复数据时,使用最多的方案。但是该方案不适用于并发场景。因为你查询的时候没有,准备插入,但是此时别的线程正好往里面插入就会有问题第二种:数据库
2021-12-16 18:11:04 454
原创 kafka 分布式(不是单机)的情况下,如何保证消息的顺 序消费
kafka 分布式(不是单机)的情况下,如何保证消息的顺 序消费kafka 分布式(不是单机)的情况下,如何保证消息的顺 序消费
2021-12-15 18:15:41 1219
原创 Java synchronized锁升级流程
JDK 1.6之前,synchronized 还是一个重量级锁,是一个效率比较低下的锁,但是在JDK 1.6后,Jvm为了提高锁的获取与释放效率对(synchronized )进行了优化,引入了 偏向锁 和 轻量级锁 ,从此以后锁的状态就有了四种(无锁、偏向锁、轻量级锁、重量级锁),并且四种状态会随着竞争的情况逐渐升级,而且是不可逆的过程,即不可降级。jdk1.6之前的synchronized实现方式是 “阻塞或唤醒一个Java线程需要操作系统切换CPU状态来完成,这种状态切换需要耗费处理器时间,如果同.
2021-12-14 18:08:50 454
原创 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
问题报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.test.mapper.cuxgljeimpmid.CuxGlJeImpMidMapper.importEbsCoaSegments at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235) ...
2021-12-14 17:01:22 483
原创 SpringBoot启动过程
SpringBoot启动时通过执行main方法中的SpringApplication.run方法去启动的,在run方法中调用了SpringApplication的构造方法,在该构造方法中加载了META-INFA\spring.factories文件配置的ApplicationContextInitializer的实现类和ApplicationListenerr的实现类,ApplicationContextInitializer 这个类当springboot上下文Context初始化完成后会调用。Appli.
2021-12-10 09:00:16 323
原创 java war 打包、解压命令
经常将工程打包成war包,打包如下:进入前目录打包成war包jar -cvf center_new.war ./*命令格式:java cvf 打包文件名称 要打包的目录 打包文件保存路径解压自然就是:jar xvf temp.war
2021-12-09 13:28:19 559
原创 PowerDesigner 大小写转换
打开一个PDM,在菜单栏找到:Tools – Excute Commands – Edit/Run Script,或者直接按Ctrl+Shift+X调出脚本执行窗口,输入下边的代码就可以了。下面提供段代码可以把PowerDesigner中的小写字母变为大写字母。代码如下:Option ExplicitValidationMode = TrueInteractiveMode = im_BatchDim mdl ' 当前模型' 获取当前模型Set mdl ...
2021-12-09 08:31:37 1430
原创 JDBC 连接不了数据库,数据库软件能连上
JDBC 连接不了数据库,数据库软件能连上,是由于IPV6导致的。解决方式,设置java vm参数:-Djava.net.preferIPv4Stack=trueIDEA 设置方式如图:
2021-12-08 15:08:24 721
原创 javaWeb定时器
//这是我的定时器类,用来定时执行某段任务;package com.my.time;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;public class BugXmlTimer { public Ti
2009-12-17 17:13:00 1463
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人