![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
记录java基础知识、以及项目开发中的经验总结
优惠券已抵扣
余额抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
fragrans
大数据、产品、运营
展开
-
内存OOM以及排查方法
Java OOM问题如何排查 - 南山饱虎 - 博客园Mysql分析-profile详解 - 飞龙在生 - 博客园翻译 2022-03-15 11:50:41 · 462 阅读 · 0 评论 -
Springboot事务及其失效场景
今日头条https://www.toutiao.com/i7069945992455651844/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1×tamp=1646134630&app=news_article&utm_source=weixin&utm_medium=toutiao_ios&use_new_style=1&req_id=202203011937090101511950转载 2022-03-01 20:22:28 · 190 阅读 · 0 评论 -
CPU居高不下的解决办法
cpu居高不下,排查方法转载 2022-02-27 13:31:51 · 1140 阅读 · 0 评论 -
MyBatis中井号与美元符号的区别
参考链接MyBatis中井号与美元符号的区别 - coderland - 博客园转载 2022-02-26 23:06:53 · 2511 阅读 · 0 评论 -
spring和springboot中使用缓存
Spring Boot 2.x基础教程:使用集中式缓存Redis | 程序猿DDSpring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解 | 程序猿DDredis与Spring Cache的整合_jonathan的专栏-CSDN博客Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解 | 程序猿DD...转载 2022-02-19 22:45:40 · 84 阅读 · 0 评论 -
SpringBoot 如何进行参数统一校验
SpringBoot 如何进行参数校验?老鸟们都是这么玩的!SpringBoot中实现业务校验,这种方式才叫优雅!https://github.com/jianzh5/cloud-blogfragrans/cloud-blog转载 2022-02-09 14:09:15 · 459 阅读 · 0 评论 -
设计模式-策略模式
今日头条https://www.toutiao.com/i7061563884594823694/?app=news_article&group_id=7061563884594823694&is_new_connect=0&is_new_user=0&req_id=202202081533380101511731940E67F6E3&share_token=B4EB0BA6-25BA-4A7E-B302-E52D40E41A2C×tamp=1644305619&am翻译 2022-02-08 16:37:08 · 92 阅读 · 0 评论 -
数据API低代码平台 magic-api使用手册
参考资料https://www.cnblogs.com/zys2019/p/14842918.html#_label5https://ssssssss.org/https://gitee.com/dove_usst/magic-api-example.git转载 2021-08-06 07:28:20 · 3233 阅读 · 1 评论 -
Bitmap原理及应用场景
目录1. 应用场景2. 参考资料1. 应用场景快速排序、快速查找、精准去重、2. 参考资料https://www.cnblogs.com/cjsblog/p/11613708.html转载 2021-07-11 09:51:18 · 314 阅读 · 0 评论 -
springboot项目集成mybatis
目录1. 参考资料2. 项目代码1. 参考资料* https://blog.csdn.net/u012702547/article/details/88643598* https://www.jianshu.com/p/5418747149072. 项目代码https://gitee.com/dove_usst/springboot-mybatis-integration.git转载 2021-07-07 22:43:09 · 107 阅读 · 0 评论 -
基于spring aop + validator实现接口请求参数校验
目录1. 概述2. 基于AOP在执行convert方法前进行参数校验3. 定义参数校验定义切面类和切点4. 参考链接1. 概述可以参考以前做过的项目mwp模块中的查询接口,json转ReqBean时根据reqbean中的校验注解进行参数校验在基于springboot项目时,可以借助于springboot + validator在controller层实现请求参数的自动校验功能。如下controller类中的请求方法:/*** 在controller层,自动实现接口参数校验原创 2021-05-17 18:49:35 · 279 阅读 · 0 评论 -
Sentinel基于并发线程数和QPS的流量控制
目录1、流控原理 2、并发线程数流控方式 3、 QPS方式1、流控原理 是监控应用流量的QPS或并发线程数等指标,到达阈值时对流量进行控制。避免被瞬间流量高峰冲垮。 其中并发线程数、QPS 值,都是由 StatisticSlot 实时统计获取的。可通过api获得: curl http://localhost:8719/cnode?id=resourceName 2、并发线程数流控方式并发数控制用于保护业务线程池不被慢调用耗...原创 2021-04-06 21:14:11 · 1934 阅读 · 0 评论 -
spring中bean循环依赖以及解决办法
目录1. 概述2. 循环依赖处理机制3. 参考资料1. 概述循环依赖的现象:循环依赖:A-->B->C->A,几个bean之间相互依赖,形成依赖闭环。Spring中循环依赖场景有: 构造器的循环依赖(构造器注⼊) Field 属性的循环依赖(set注⼊)其中,构造器的循环依赖问题⽆法解决,只能拋出 BeanCurrentlyInCreationException 异常,在解决属性循环依赖时,spring采⽤的是提前暴露对象的⽅法。..原创 2021-04-01 07:26:21 · 563 阅读 · 0 评论 -
Bean生命周期的几个关键时机
目录1. Bean生命周期的几个关键时机点2. 参考资料1. Bean生命周期的几个关键时机点(1)分析 Bean 的创建是在容器初始化时还是在 getBean 时单例模式的bean默认是非延迟加载,打断点后在applicationContext容器中可以看到bean对象实例(在调用getBean()方法前,就可以看到容器中存在的该bean对象实例)(2)分析构造函数调用情况容器实例化bean时,调用bean的构造方法的时机是在AbstractApplicationContext类r原创 2021-04-01 06:45:18 · 158 阅读 · 0 评论 -
ThreadLocal父子线程之间的数据传递问题
目录1. 概述和学习总结2. 参考资料1. 概述和学习总结(1)ThreadLocal的值,在父-子线程中不能传递(2)JDK的InheritableThreadLocal类可以完成父线程到子线程的值传递。但对于使用线程池等会池化复用线程的执行组件的情况,线程由线程池创建好,并且线程是池化起来反复使用的;这时父子线程关系的ThreadLocal值传递已经没有意义,应用需要的实际上是把任务提交给线程池时的ThreadLocal值传递到任务执行时。(3)阿里github上提供的Tra..转载 2021-03-31 22:44:06 · 461 阅读 · 0 评论 -
ThreadLocal作用、场景、原理
1. 概述ThreadLocal相当于提供了一种线程隔离,ThreadLocal提供了线程本地变量,保证了访问到的变量属于当前线程,每个线程都保存有一个变量副本,每个线程的变量的值都不同。使用于多线程场景下,实现传递数据,实现线程隔离。ThreadLocal的作用:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。ThreadLocal是解决线程安全问题一个很好的思路,它通过为每个线程提供一个独立的变量副本解决了变量并发访问的转载 2021-03-31 21:27:51 · 238 阅读 · 0 评论 -
spring中BeanFactory和FactoryBean
(1)BeanFactory,负责创建及管理spring中的bean对象。是容器的顶级接口,一般我们会使用它的子接口ApplicationContext(2)FactoryBean,工厂类,我们可以实现这个工厂类接口,自定义bean的生成逻辑。...原创 2021-03-31 19:04:43 · 98 阅读 · 0 评论 -
spring中bean的延迟加载
目录1. 延迟加载即延迟加载的意义2. 参考资料1. 延迟加载即延迟加载的意义Bean的延迟加载(延迟创建)ApplicationContext容器,默认是在启动容器时,将所有singleton bean提前创建。可通过lazay-init=true来设置,这样只有在第一次向容器通过getBean获取bean时,才会实例化bean。prototype类型的bean,是延迟加载的,使用时才会创建,向容器调用getBean时才会创建。BeanDefinition对象:我们在 XML...原创 2021-03-31 19:03:25 · 966 阅读 · 0 评论 -
Spring中bean依赖注入的2种方式
(1)构造函数注入使用 constructor-arg 标签(2)set方法注入:在开发中使用的最多。使用 property 标签原创 2021-03-30 22:25:42 · 118 阅读 · 0 评论 -
Spring中bean的作用范围,和其对应的生命周期
目录1. 概述2. 单例模式和多例模式介绍3. Bean的生命周期3.1 单例模式bean的生命周期(singleton)3.2 多利模式的bean生命周期4. 参考资料1. 概述spring中bean的作为范围scope一共有6种,其中最常见的有两种:singleton(单例模式)和prototype(多例模式)。下面主要介绍单例和多例模式。2. 单例模式和多例模式介绍在spring 框架管理bean对象创建时,bean 默认是单例的,即一个spring io.原创 2021-03-30 22:07:03 · 205 阅读 · 0 评论 -
Spring中创建bean的3种方式
目录1. 概述2. 实例化bean的3种方法2.1 使用无参构造方法(默认)2.2 使用静态方法创建2.3 使用实例方法创建(即工厂类中的非static 方法)3. 参考资料1. 概述在spring中bean的创建方式主要有3种,下面以xml为例来说明2. 实例化bean的3种方法2.1 使用无参构造方法(默认) <!--配置service对象--> <bean id="userService" class="com...原创 2021-03-30 21:31:30 · 559 阅读 · 0 评论 -
mysql jooin算法原理及优化建议
目录1. Mysql join算法原理 simple nested-Loop (简单嵌套循环连接)2. Blocked nested-Loop(缓存块嵌套循环连接,当关联的字段没有建索引时,默认是用这种关联算法)3. Indexed nested-Loop (索引嵌套循环连接)4. 总结5. 参考资料1. Mysql join算法原理 simple nested-Loop (简单嵌套循环连接) select * from user tb1 left join leve...转载 2021-03-28 11:42:11 · 136 阅读 · 0 评论 -
数据库 事务及事务的隔离级别
1. 事务基本概念介绍1、事务的隔离性多个事务操作同时操作一个数据,会造成干扰,因此需要对他们之间进行隔离(只需对操作同一数据的事务隔离即可),燃操作之间分开有序的执行。2、如果不对事务进行隔离,出现的问题(脏读、不可重复读、幻读)(1)脏读(重点突出在读,即读到的数据为脏数据,因为有其他人正在修改)出现原因:修改数据的时候,同时可以读取数据;以用户A和B同时对一张银行卡进行存、取操作为例来说明。(2)不可重复读(重点突出在同一个事务中,前后两次读取时,读到的结果不一样)查询原因:读取数转载 2021-03-23 22:00:57 · 94 阅读 · 0 评论 -
数据库事务的ACID
目录1. 复习总结2. 参考资料1. 复习总结1、事务定义事务是代表一个或者一系列操作的最小逻辑单元,单元内的所有操作要么都成功、要么都失败,不存在中间状态。2、事务机制存在的目的(数据最终的一致性)就是无论我们的操作过程中是成功、失败、异常、或是受到干扰的情况下,事务都能保证我们数据最终的一致性。3、举一个事务的案例(转账)案例:转账(以下事务中包含3个逻辑操作)A账户余额有1000元,B账户余额0元,在这个基础上A向B转账400元,流程如下:1、查询A账户余额,看金额转载 2021-03-22 20:56:27 · 116 阅读 · 0 评论 -
在用户登陆功能中使用策略模式和模板模式
目录1. 概述2. 第一次重构3. 第2次重构,使用策略模式4. 第3次重构5. 参考资料1. 概述以用户登陆功能,来演示如何使用策略模式,来处理多种登陆方式(用户名+密码、手机号+验证码、指纹登陆等)策略模式遵循的原则:“对修改关闭,对扩展开放的”对登陆方式loginType作判断, 分别有不同的登陆方法来处登陆逻辑。 if(loginType==1){ //密码登录 result= loginServ...转载 2021-03-21 19:30:47 · 623 阅读 · 0 评论 -
什么是IOC,手写代码实现Spring IOC的功能
目录1. 学习笔记总结2. 参考资料1. 学习笔记总结1、IOC(inversion of control):控制反转 我们的对象创建都交给了IOC,程序员从new 对象中解放出来,消除了大量冗余的代码。 创建对象的工作交给了spring ioc。我们只需要通过xml或者注解,告诉spring我们要什么对象即可。2、依赖注入 将被属性注解注释了的属性,从 bean 容器中取出该属性对应的实例,并赋值3、手写spring ioc功能,流程 (1)在...原创 2021-03-17 19:29:48 · 151 阅读 · 0 评论 -
并发理论基础:指令重排序问题
目录一、学习总结二、参考资料一、学习总结1、指令重排(编译器、处理器重排)目的就是把CPU的资源利用起来,这样就能就能提升整个计计算机的效率,性能优化。重排的原则:在不改变单线程语义情况下(即不改变单线程执行程序的结果,也就是程序结果不会改变),允许对程序执行顺序重排。 即遵循as-if-serial。同一个方法中,没有语句依赖关系的程序,执行顺序可能会被重排 a=1; //1 b=2; //2 c=a+1; //3 因位b=2;没有上下文...转载 2021-03-16 14:20:33 · 258 阅读 · 0 评论 -
并发工具(锁):深入Synchronized
目录1. 学习总结2. 参考资料1. 学习总结1、sychronized产生《并发问题》的三个根源在于“缓存可见性问题”,“原子性问题”,“指令顺序性问题”,java并发包里的《并发工具》,也都是围绕着解决这3个问题的解决方案。解决并发问题常用的就是使用锁 synchronized ,他同时解决了上述3个问题。理论上来说关键字synchronized可以解决Java里所有的并发问题。理清锁和共享资源之间的关系加锁的对象是什么、锁和对象的关系加锁的对象和资源的关系多把锁保护同.转载 2021-03-15 22:48:57 · 79 阅读 · 0 评论 -
并发基础理论:缓存可见性问题、MESI协议、内存屏障
目录1. 学习总结2. 参考资料1. 学习总结缓存锁、利用缓存一致性实现,MESI代表数据的几种不同状态。cpu通知其他cpu共享变量为Invalid状态时,通知优化策略如下:(1)Store Bufferes:解决同步等待其他cpu响应的问题(2)Store Forward(存储转发):解决当前cpu再次从内测读取共享变量的问题(还未将缓存值刷新到内测)(3)失效队列:同步Invalid通知到其他cpu时,将invalid消息发送到失效队列内存屏障提供了一套解决CPU缓存优化原创 2021-03-15 21:26:02 · 121 阅读 · 0 评论 -
并发理论基础:并发问题产生的三大根源
程序并发面临的3大问题:可见性、原子性、有序性(指令优化、指令重排)原文地址:https://zhuanlan.zhihu.com/p/64988344转载 2021-03-15 16:37:16 · 385 阅读 · 0 评论 -
互联网行业3高及多线程分析
目录1. 互联网3高问题2. 系统调优从这两个方面来做3. 使用线程池的时候,启动多少个线程给服务合适?4.并发编程的3大特性4.1 可见性4.2 缓存行4.3 有序性4.4 原子性5. 参考资料1. 互联网3高问题高可用、高扩展、高性能(高性能)系统性能优化,主要指两个方面:响应快(低延迟),吞吐量高。提高响应时间的例子:客户去银行柜台存款,一个人10秒,将响应时间降到5秒。2. 系统调优从这两个方面来做 单机压榨 + 集群优化...原创 2021-03-09 21:33:42 · 231 阅读 · 0 评论 -
java异常 java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
在项目中,引入以下依赖即可 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <depende.原创 2021-03-03 23:02:49 · 414 阅读 · 1 评论 -
Java 代理机制
静态代理、动态代理,请参考这里转载 2021-03-03 17:38:23 · 53 阅读 · 1 评论 -
在github上更新fork别人的代码
目录0. 概述1. 进入到new pull request页面2. 互换,将自己的项目放在前面,表示从别人仓库中拉去最新代码3. 发起 new pull quest请求4. 参考链接0. 概述在github中fork别人的仓库代码,当别人仓库更新后,如何更新对应的分支到自己仓库中,在github页面上的操作步骤参考下列步骤1. 进入到new pull request页面首先进入到new pull request页面,根据下图操作即可2. 互换,将自己的..原创 2021-02-09 09:33:01 · 524 阅读 · 0 评论 -
在Mybatis plus的querywrapper中使用oracle的to_date函数
1. 在代码中,使用to_date函数注意事项刚开始代码中是这样写的,//to_date的错误用法queryWrapper.le(column , "to_date(" + field.get(msgBody)+ ", 'yyyy/MM/dd HH24:mi:ss')");但是这种方法会有异常,代码不会把包含to_date的字符串解析为占位符。修改成下面的就可以了://to_date的正确用法queryWrapper.apply(column + " >= TO_DATE原创 2021-01-18 19:55:52 · 5126 阅读 · 1 评论 -
Git常用命令总结
1. Tag相关命令1.1 创建一个新的taggit tag -a tag名称 -m "分支备注信息"1.2将本地tag推送到远程仓库git push origin tag名称1.3 拉取远程仓库有的tag(本地没有)git fetch origin tag tag名称2. 分支相关命令2.1 拉去远程的分支(本地没有)git fetch origin 本地分支名称:远程分支名称...原创 2021-01-16 14:09:21 · 69 阅读 · 1 评论 -
window环境下在本地安装gitlab版本库
1. 参考资料https://blog.csdn.net/weixin_39231286/article/details/90214406默认登陆账号和密码:admin/admin转载 2021-01-12 22:54:58 · 553 阅读 · 0 评论 -
Oracle中数字字符串之间的比较时的注意事项
1. 概述在项目中使用mybatis-plus查询oracle时,有的数值字段(如金额、交易笔数的)是定义为varchar类型的,接口传过来的参数筛选值也是字符串类型的。例如:当筛选值是10000时,而数据库中对应的是 5006、4201等数值时,两个字符串比较 '10000'、'5006',这是5006是大于10000的。因此我们在比较时,可以把数据库中的varchar字段转化为number类型的,这样就可以了。如下面在代码里对字段进行to_number的转换操作即可。queryWr原创 2021-01-07 17:20:46 · 2501 阅读 · 0 评论 -
SpringBoot集成jasypt对数据库账号和密码加密处理
目录1. 概述2. 将账号和密码处理成密文2.1 引入jasypt的pom依赖2.2生成密文2.3将密文写到配置文件中3. 参考资料1. 概述在开发项目时,访问数据库的账号和密码,有时是需要加密后写在配置文件中的,这时候可以使用springboot + jasypt来轻松实现。2. 将账号和密码处理成密文2.1 引入jasypt的pom依赖项目中使用的springboot版本是2.1.8,使用的jasypt版本是2.1.2,如下 &l...原创 2021-01-05 22:50:52 · 468 阅读 · 1 评论 -
面试题目总结
1. Spring Boot面试题(2020最新版)转载参考这里转载 2021-01-05 22:01:40 · 92 阅读 · 0 评论