- 博客(145)
- 资源 (3)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 我设计开发的第一个产品发布了,微信小程序“集美装修效果图“
我是一名php程序员,在一家建材公司上班,因为市场和公司技术架构的变化,我全面转型做了java程序员,在学习java过程中,为了快速提升自己的开发能力,利用业余时间开发了一个项目"集美装修效果图",提供丰富的装修效果图和建材计算工具,帮助建材行业从业者和需要装房子的用户,如果你需要装修的话,可以看看,也许能找到你喜欢的装修风格,小弟在此感谢关注。...
2020-10-25 10:29:09
1357
6
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 开启mybatis开启二级缓存
Mybatis中有一级缓存和二级缓存,默认情况下一级缓存是开启的,而且是不能关闭的。一级缓存是指SqlSession级别的缓存,当在同一个SqlSession中进行相同的SQL语句查询时,第二次以后的查询不会从数据库查询,而是直接从缓存中获取,一级缓存最多缓存1024条SQL。二级缓存是指可以跨SqlSession的缓存,是mapper级别的缓存,对于mapper级别的缓存不同的sqlsession是可以共享的,mapper以命名空间为单位创建缓存数据结构,需要手动开启。一、开启二级缓存和一级缓存默认开
2020-08-19 17:49:56
5511
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 springboot+mysqlrouter+mybatis+mysql实现读写分离架构完全技术方案
1、安装Mysql8https://blog.csdn.net/atongmu2017/article/details/90610444解决: You are not allowed to create a user with GRANThttps://blog.csdn.net/mxskymx/article/details/887650722、配置一主多从数据库架构https://b...
2020-04-25 23:18:32
1793
转载 Spring事务异常回滚,发生异常事物不回滚的解决
最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了…为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志。但是这边情况来了,当这个方法异常时候 日志是打印了,但是加的事务却没有回滚。原因是我的代码分层没有严格按照MVC结构区分,我省略了Controller,而我们在配置SpringAop事务的时候一般情况下都是配到service层,所以在service层进行try catch进行捕获异常是不可以的,因为在service层发生的异常被捕获以后,AOP事务就是不会回滚
2021-06-09 16:48:20
2594
转载 export 和 export default 的区别
export命令用于规定模块的对外接口。一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。下面是一个 JS 文件,里面使用export命令输出变量。// profile.jsexport var firstName = 'Michael';export var lastName = 'Jackson';export var year = 1958;上面代码是profile.js文件,保存了用户信息。
2021-05-19 16:19:33
348
原创 安装激活JRebel热部署插件
1、Idea离线或在线安装Jrebel插件(教程很多)2、配置激活服务器使用已经封装好的jar包,保持一直运行即可(放到服务器上或者本地),用于激活JRebel。链接: https://pan.baidu.com/s/1rrn-6F26JpD5RSsbJV3-hQ 密码: dscu使用如下命令启动应用:java -jar JrebelBrainsLicenseServerforJava-1.0-SNAPSHOT-jar-with-dependencies.jar -p 1008 &3、激
2021-05-19 09:45:14
507
原创 离线安装sass_node解决,Failed at the node-sass@4.14.1 postinstall scritpt
因为一些原因,开发环境无法连接外网,npm install 时无法下载安装sass_node,我们需要采用离线安装的方式解决吃问题:1、去Github上下载对应的node-sass版本,下载地址:https://github.com/sass/node-sass/releases2、将下载的文件放入磁盘3、配置sass路径:set SASS_BINARY_PATH=放入磁盘的路径4、安装vue项目:npm install node-sass --save5、启动项目:npm run dev..
2021-05-17 10:59:05
1463
原创 多表左链接查询sql结构
如果想对多个表进行链接查询,可以采用如下sql结构:select gc.common_id,gc.bom_id,gc.goods_state as '商品状态 0-下架 1-上架',gc.goods_name as '商品名称',gc.material_type as '物料类型',c1.category_name as '一级分类名称',c2.category_name as '二级分类名称',c3.category_name as '三级分类名称'from goods_common gclef
2021-05-06 08:49:12
2672
转载 高并发下如何保证接口的幂等性?
一、前言接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考。不知道你有没有遇到过这些场景:1、有时我们在填写某些form表单时,保存按钮不小心快速点了两次,表中竟然产生了两条重复的数据,只是id不一样。2、我们在项目中为了解决接口超时问题,通常会引入了重试机制。第一次请求接口超时了,请求方没能及时获取返回结果(此时有可能已经成功了),为了避免返回错误的结果(这种情况不可能直接返回失败吧?),
2021-04-01 10:52:31
121
原创 mysql count可以按条件统计
有时,我们需要统计统计总数,符合不同条件的统计总数,我们就可以通过count函数携带条件的统计方式。常规用法select COUNT(*) from user group by id;有条件count(),关键是不参与统计的返回 nullselect COUNT(IF(id > 0 , id, null)) from user group by id;...
2021-03-31 16:51:05
1008
原创 float和double浮点数精度丢失问题,导致0.9f-0.8f不等于0.1f
1、首先请看代码块,想想输出的结果是什么? float a = 1.0f-0.9f; float b = 0.9f-0.8f; System.out.println("res1:"+(a==b)); float x = 0.5f-0.25f; float y = 0.25f; System.out.println("res2:"+(x==y));2、输出结果res1:falseres2:true
2021-03-31 11:08:32
1257
原创 hibernate的使用
一、Hibernate定义是一个ORM对象关系映射框架,对JDBC进行了封装,将java实体类映射到数据库表中,将java实体类成员变量数据类型映射到数据库表字段数据类型中,开发人员直接操作对象,避免大量数据编程(SQL编写),提升了开发效率。二、Hibernate使用过程1、根据配置信息,创建配置对象.2、通过配置对象创建sessionFactory 对象,来配置hibernate。3、通过sessionFactory 对象用来创建Session 对象,进行数据库物理连接,与数据库进行交互。
2021-03-25 15:20:07
3298
转载 52条SQL语句性能优化策略,建议收藏
本文会提到 52 条 SQL 语句性能优化策略。1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 WHERE 及 ORDER BY 涉及的列上建立索引。2、应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,创建表时 NULL 是默认值,但大多数时候应该使用 NOT NULL,或者使用一个特殊的值,如 0,-1 作为默认值。3、应尽量避免在 WHERE 子句中使用 != 或 <> 操作符。MySQL 只有对以下操作符才使用索引:<,<=,=,>,>=,
2021-03-21 08:47:17
106
转载 rabbitmq启动方式
1、以应用方式启动rabbitmq-server -detached 后台启动Rabbitmq-server 直接启动,如果你关闭窗口或者需要在改窗口使用其他命令时应用就会停止关闭:rabbitmqctl stop2、以服务方式启动(安装完之后在任务管理器中服务一栏能看到RabbtiMq)rabbitmq-service install 安装服务rabbitmq-service start 开始服务Rabbitmq-service stop 停止服务Rabbitmq-service ena
2021-03-14 09:44:15
4691
原创 常见索引原则有
1.选择唯一性索引,唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。2.为经常需要排序、分组和联合操作的字段建立索引.3.为常作为查询条件的字段建立索引。4.限制索引的数目,越多的索引,会使更新表变得很浪费时间。5.尽量使用数据量少的索引,如果索引的值很长,那么查询的速度会受到影响。6.尽量使用前缀来索引,如果索引字段的值很长,最好使用值的前缀来索引。7.删除不再使用或者很少使用的索引8. 最左前缀匹配原则,非常重要的原则。9. 尽量选择区分度高的列作为索引,区分度的公式是表示
2021-03-09 10:44:42
1168
原创 rsync远程文件传输、复制、同步命令
#rsync是常用的远程传输命令,支持断点传输,它远程传输命令如下:rsync -avzP xxxx.tar.gz root@127.0.0.1:/data/
2021-01-27 17:19:50
534
1
原创 无感知验证码和点击验证码实现原理
一、无感知验证码实现原理1、安全用户“点击完成验证”,安全用户验证通过。2、风险用户根据风险程度触发二次验证,比如滑动拼图、图片点选等,验证通过之后再允许进行下一步操作。无感知验证核心在于判断访问用户否是安全用户:需要根据用户行为数据、访问代理、IP、环境变量等等数据建模,用户点击验证按钮之后去后端接口验证,验证通过才可进行下一步操作。安全用户判断模型:1、用户行为数据:页面停顿时间、点击按钮时长,其他输入事件(埋点)、点击事件(埋点)等等。2、访问代理:建立白名单机制,非白名单代理触发
2020-12-26 16:05:48
3635
转载 Windows下查看进程及结束进程命令
1)查看占用8080端口的进程号netstat –aon | findstr “8080” 或者 netstat –aon | find “8080”结果:TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 6900可知,进程号为 6900的进程占用了8080端口可以使用命令 tasklist | findstr “ 6900”进一步查看 6900进程的具体信息。tasklist | findstr “6400” 或者 taskl
2020-12-23 17:49:25
4119
转载 满二叉树、完全二叉树、平衡二叉树、最优二叉树
一、满二叉树一棵二叉树的结点要么是叶子结点,要么它有两个子结点(如果一个二叉树的层数为K,且结点总数是(2^k) -1,则它就是满二叉树。)二、完全二叉树若设二叉树的深度为k,除第 k 层外,其它各层 (1~k-1) 的结点数都达到最大个数,第k 层所有的结点都连续集中在最左边,这就是完全二叉树。三、平衡二叉树它或者是一颗空树,或它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。四、最优二叉树(哈夫曼树)树的带权路径长度达到最小,称这样的二叉
2020-12-04 14:17:59
215
转载 SpringBoot项目接口第一次访问慢的问题
SpringBoot的接口第一次访问都很慢,通过日志可以发现,dispatcherServlet不是一开始就加载的,有访问才开始加载的,即懒加载。2019-01-25 15:23:46.264 INFO 1452 — [nio-8080-exec-1] Initializing Spring FrameworkServlet ‘dispatcherServlet’2019-01-25 15:23:46.265 INFO 1452 — [nio-8080-exec-1] FrameworkServlet
2020-12-02 09:55:51
1589
原创 如何再nginx上配置https证书
https://support.huaweicloud.com/scm_faq/scm_01_0023.html
2020-10-18 21:57:40
120
1
原创 java -cp JAVA_OPTS环境变量不起作用的处理方法
原因:JAVA_OPTS只对tomcat/weblogic等Web服务器中间件有效,以“java -cp [*.jar] test.Main”方式运行的不会去读取JAVA_OPTS,所以通过java -cp执行相关文件会报错。JAVA_OPTS在 tomcat/bin/catalina.sh或tomcat/bin/catalina.bat文件配置,这可配置java进程虚拟机的启动参数 。解决方案:1、如果在运行java类,需要设置Heap Size的话,需要如下方式:java -Xmx2048m
2020-10-04 10:42:19
1971
1
转载 Java8 新特性之流式数据处理
一. 流式处理简介在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现。比如我们希望对一个包含整数的集合中筛选出所有的偶数,并将其封装成为一个新的List返回,那么在java8之前,我们需要通过如下代码实现:List<Integer> evens = new ArrayList<>();for (final Integer num : nums) { if (num % 2
2020-09-21 17:15:38
171
原创 springboot 小程序 配置https
springboot相关配置server: port: 8089 #ssl ssl: #证书,可以存放在resoucrs目录下classpath:tomcat.keystore key-store: classpath:name.jks #别名 key-alias: 1 #证书加密方式 key-store-type: JKS #证书密码 key-store-password: 123456 #是否开启https e
2020-08-28 17:28:09
332
原创 Spring中使用变量${}的方式进行参数配置
Spring中使用变量${}的方式进行参数配置在使用Spring时,有些情况下,在配置文件中,需要使用变量的方式来配置bean相关属性信息,比如下面的数据库的连接使用了${}的方式进行配置,如下所示:<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" va
2020-08-17 17:43:41
1605
转载 tomcat设定shared lib共享同样的jar
在项目越来越多的时候,部署在tomcat的发布包也会越来越多,这样难免有很多相同的jar会被加载,占用大量的永久存续区内存,通过设定shared lib来控制相同的jar只加载一个,这样有以下好处:1、避免不同项目加载相同的jar,减少对永久存续区的内存占用2、提高tomcat的启动速度,因为少加载了许多重复的jar一、如何设定shared lib方式一:修改conf文件下的catalina.properties文件,配置shared.loader的路径:配置绝对路径:shared.loade
2020-08-17 15:36:11
353
原创 记录使用jmeter测试扣减库存和修改库存高并发执行是否发生数据不一致问题
问题描述:ERP系统业务方反馈调取修改商城库存接口后,商城库存没有改变,需要验证修改库存和扣减库存并发执行时,是否发生了覆盖,导致数据不一致的问题。1、测试demo从代码分析,扣减库存,使用的是悲观锁。2、使用jmeter高并发扣减库存一个商品初始化库存5000,并发执行100个线程同时扣减库存,循环40次,预期累计扣减库存4000,经过测试库存扣减正常,并没有多扣或少扣,商品最后库存1000,说明扣减库存的悲观锁是正常运行的。3、高并发执行扣减库存操作时,同时调取修改库存接口,验证修改
2020-08-17 15:16:34
843
原创 Spring Bean 作用域
Spring 3 中为 Bean 定义了 5 中作用域,分别为 singleton(单例)、prototype(原型)、request、session 和 global session,5 种作用域说明如下:singleton:单例模式(多线程下不安全)1、 singleton:单例模式,Spring IoC 容器中只会存在一个共享的 Bean 实例,无论有多少个Bean 引用它,始终指向同一对象。该模式在多线程下是不安全的。Singleton 作用域是Spring 中的缺省作用域,也可以显示的将 Be
2020-08-14 11:35:02
100
原创 bean作用域为singleton(单例模式)引起多线程安全问题
华为云OBS整合了Ueditor,但是在批量上传文件时,只能部分上传成功,很多文件会上传失败。错误代码:@Service@Slf4jpublic class FileServiceImpl implements FileService { @Value("${files.path}") private String filesPath; @Value("${files.prefix}") private String FilesPrefix; @Value("${huaWeiObs
2020-08-11 18:08:58
1185
原创 使用uglifyjs压缩JS
1、安装node.js2、安装当前应用 – uglifyjs 如何安装node.js就不再介绍了, 百度一下一大把.安装uglifyjs如下:npm install uglify-js -g3、演示如何使用uglifyjs压缩JS打开一个用于存放JS文件的文件夹,进入到cmd此时输入命令对lazyLoad.js文件进行压缩并输出文件名为lazyLoady.min.js的文件:uglifyjs lazyLoad.js -o lazyLoad.min.js也可以运行如下代码, 测试一下-m
2020-08-09 17:16:12
143
转载 BeanFactory和FactoryBean的区别与联系
1、 BeanFactoryBeanFactory定义了 IOC 容器的最基本形式,并提供了 IOC 容器应遵守的的最基本的接口,也就是 Spring IOC 所遵守的最底层和最基本的编程规范。在 Spring 代码中, BeanFactory 只是个接口,并不是 IOC 容器的具体实现,但是 Spring 容器给出了很多种实现,如 DefaultListableBeanFactory 、 XmlBeanFactory 、 ApplicationContext 等,都是附加了某种功能的实现。packa
2020-08-08 17:51:01
134
原创 定义@Valid全局异常,返回自定义错误信息
@Valid的注解要求对变量进行验证,直接加在变量之前,在变量中添加验证信息的要求,当不符合要求时就会在方法中返回message 的错误提示信息。但@Valid默认返回信息非常长,我们可以定义全局异常子定义我们需要返回的信息和格式。@valid使用方法:https://blog.csdn.net/weixin_38118016/article/details/80977207/** * @Author: thunder * @Date: 2020/8/7 14:56 * @ControllerA
2020-08-08 10:53:36
3615
1
转载 SpringMVC 中 @ControllerAdvice 注解的三种使用场景!
@ControllerAdvice ,很多初学者可能都没有听说过这个注解,实际上,这是一个非常有用的注解,顾名思义,这是一个增强的 Controller。使用这个 Controller ,可以实现三个方面的功能:1、全局异常处理2、全局数据绑定3、全局数据预处理灵活使用这三个功能,可以帮助我们简化很多工作,需要注意的是,这是 SpringMVC 提供的功能,在 Spring Boot 中可以直接使用,下面分别来看。全局异常处理使用 @ControllerAdvice 实现全局异常处理,只需要定义
2020-08-07 15:17:09
174
原创 Java序列与反序列实现深度复制
在 Java 语言里深复制一个对象,常常可以先使对象实现 Serializable 接口,然后把对象(实际上只是对象的一个拷贝)写到一个流里,再从流里读出来,便可以重建对象。import org.apache.commons.io.output.ByteArrayOutputStream;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.spr
2020-08-05 17:25:42
155
原创 CyclicBarrier的使用-赛马程序
import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;/** * @Author
2020-07-30 16:47:36
198
转载 synchronized的四种用法
一 修饰方法Synchronized修饰一个方法很简单,就是在方法的前面加synchronized,synchronized修饰方法和修饰一个代码块类似,只是作用范围不一样,修饰代码块是大括号括起来的范围,而修饰方法范围是整个函数。例如:方法一//Synchronized修饰方法时,锁住的是对象实例,如果是不同的对象实例,则锁不住public synchronized void test_sync() throws InterruptedException { SimpleDat
2020-07-26 17:14:26
4629
RabbitMQ和Erlang软件安装包
2020-06-16
PHPSerializer.java
2019-06-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人