![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java 开发
文章平均质量分 53
John_desheng
因真理得自由,以服务!
展开
-
固定值的字段该不该建立索引
索引原创 2022-11-30 17:07:41 · 376 阅读 · 1 评论 -
LIST 根据多个属性去重,并保留最新日期的数据
list去重默认保留第一个数据,如果有重复的会丢弃掉,所以如果想保留最新历史的数据,list要根据time 排序 倒排原创 2022-07-22 11:06:28 · 3076 阅读 · 0 评论 -
接口签名原理 以及反思
使用用户名 Appkey 密码 AppSecret (只有双方知道) 时间戳 所有拍过序的参数 组合起来,MD5加密,加密得到的签名因为MD5是hash 函数,根据hash函数的特性 单项性,反向计算是不可能的;比如sign=MD5(用户名 +密码+时间戳+参数)及时中间截获了sign 签名,没有办法反向 解密,只要在服务端验证签名再次MD5 计算一遍,看签名是否正确,实现接口安全性;密码是只有双方才知道的,及时知道参数,因为不知道密码所以 ,没法获得正确的签名;如果是密码也知道了,比如内部人员的恶意攻击原创 2022-06-10 10:45:11 · 410 阅读 · 0 评论 -
Jemeter 使用教程
作为一名开发工程师,当我们接到需求的时候,一般就是分析需要,确定思路,编码,自测,然后就可以让测试人员去测试了。在自测这一步,作为开发人员,很多时候就是测一下业务流程是否正确,会不会有逻辑上的错误,如果没有,几乎就完事了。然后到了测试人员去测的时候,很多时候测试人员也只是重复了一遍开发人员的步骤,更多就是把测试用例扩大了而已,特别是一些边界的用例。但是我们的接口在每秒10次请求没问题不代表在每秒1000次请求没问题,当接口部署到线上,当并发量增大的时候,很多在测试阶段没出现的问题在线上就有可能出现了。有转载 2022-03-11 14:47:17 · 4661 阅读 · 1 评论 -
深入理解数据库行锁与表锁
乐观锁和悲观锁这个不用再多说了,相信大家也都是知道的。Mysql中的锁机制基本上都是采用的悲观锁来实现的。我们先来看一下”行锁”。行锁顾名思义,行锁就是一锁锁一行或者多行记录,mysql的行锁是基于索引加载的,所以行锁是要加在索引响应的行上,即命中索引,如下图所示:如上图所示,数据库表中有一个主键索引和一个普通索引,Sql语句基于索引查询,命中两条记录。此时行锁一锁就锁定两条记录,当其他事务访问数据库同一张表时,被锁定的记录不能被访问,其他的记录都可以访问到。行锁的特征:锁冲突概率低,并转载 2022-03-10 11:22:19 · 2296 阅读 · 0 评论 -
idea 中 gradle 使用
Gradle home指定了gradle文件目录Service directory path指定了gradle工作主目录gradle仓库设置建议如下设置repositories { mavenLocal() maven { url "http://maven.aliyun.com/nexus/content/groups/public/"} mavenCentral() jcenter() maven { url "https://repo.spring.i...原创 2022-03-02 11:43:57 · 4145 阅读 · 0 评论 -
Hash 算法原理和特性
概念:一般翻译做“散列”,就是把任意长度的输入通过散列函数变化成固定长度的输出,该输出就是散列值。散列的空间通常远远小于输入的空间,不同的输入会散列城相同的输出(散列冲突)。优秀hash特点:常见加密hash函数:-md5 -SHA1/256/512 -HMAC正向快速 逆向困难 输入敏感(输入一点改动,输出也会不一样) 冲突避免 应用: 数据结构 -对于数据空间的组织,散列开来,建立快速映射的关系,往往数据的插查询,插入,删除都比较迅速。接近于O(1)。 密原创 2022-03-01 16:27:26 · 1525 阅读 · 0 评论 -
mysql 分库分表动态扩容方案
昨天我们分享了怎么不停机进行分库分表数据迁移(数据库分库分表后,我们生产环境怎么实现不停机数据迁移)后来有好多朋友问我,说他们的系统虽然也到了差不多分表的地步了,但是,不知道具体拆分多少张表,分多了又怕浪费公司资源,分少了又怕后面怎么去扩容,还有另一些朋友说,所在的公司规模还不大,尚在发展中,公司压根就没这么资源给他们这么去拆分。这些朋友的问题提的很好,因为真正的结合自己公司的业务去思考了。所以,我今天就来帮助解答下,并且帮着更多有类似困扰的朋友进行统一的讲解,教大家该怎么去做,掌握这套思想之后,其实你转载 2021-11-18 12:01:24 · 1399 阅读 · 2 评论 -
基于RocketMQ实现分布式事务-案例
一、事务消息在这里,笔者不想使用大量的文字赘述 RocketMQ事务消息的原理,我们只需要搞明白两个概念。Half Message,半消息暂时不能被 Consumer消费的消息。Producer已经把消息发送到 Broker端,但是此消息的状态被标记为不能投递,处于这种状态下的消息称为半消息。事实上,该状态下的消息会被放在一个叫做 RMQ_SYS_TRANS_HALF_TOPIC的主题下。当 Producer端对它二次确认后,也就是 Commit之后,Consumer端才可以消费到;那么如果是Rol转载 2021-07-27 16:20:31 · 286 阅读 · 0 评论 -
rocketmq 实现分布式事务
之前讲过有关分布式事务2PC、3PC、TCC的理论知识,博客地址:1、分布式事务(1)---2PC和3PC原理2、分布式事务(2)---TCC原理这篇讲有关RocketMQ实现分布式事务的理论知识,下篇也会示例 通过SpringCloud来实例RocketMQ实现分布式事务的项目。一、举个分布式事务场景列子:假设A给B转100块钱,同时它们不是同一个服务上。目标:就是A减100块钱,B加100块钱。实际情况可能有四种:1)就是A账户减100 (成功),B账户...转载 2021-07-19 17:57:04 · 421 阅读 · 0 评论 -
分布式事务,通过MQ保持事务一致性
A(存在DB操作)、B(存在DB操作)两方需要保证分布式事务一致性,通过引入中间层MQ,A和MQ保持事务一致性(异常情况下通过MQ反查A接口实现check),B和MQ保证事务一致(通过重试),从而达到最终事务一致性。作者:彦帧链接:https://www.jianshu.com/p/2838890f3284来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。...原创 2021-06-03 18:10:44 · 226 阅读 · 0 评论 -
gradle
api和compile关键字作用效果是一样的,使用时可以互相替换。实际上,api关键字是用来替代compile关键字的,因为compile关键字将来会被弃用。在高版本的gradle,使用compile关键字会报错并提示使用api关键字代替:api或compile关键字引用的包对于其他module来说是可见的,而implementation关键字引用的包对于其他module来说是不可见的。本地library模块依赖implementation project(":mylibrary")这种依赖方式是直转载 2021-04-27 18:17:44 · 187 阅读 · 0 评论 -
window 查看哪个进程占用端口
netstat -ano|findstr 端口号 查找到 端口对应的PIDtasklist|findstr PID 根据PID 找到对应的进程名称例如我想找到8080 端口被哪个应用进程占用netstat -ano|findstr 8080 得到PID 为14828 的占用8080端口tasklist|findstr 14828最终可以看到是java 程序占用了8080端口这个其实是zookeeper 占用了,可以采用排除法,依次关闭本地应用查看端口...原创 2021-04-09 10:20:29 · 164 阅读 · 0 评论 -
IDEA提交代码忽略文件配置
左上角 File=》Setting=》Editor=》File Types添加.iml;.idea;.gitignore;.sh;.classpath;.project;.settings;target;mvn;.cmd;我现在添加的是.properties,.yml点击加号,输入.properties 回车 应用 即可原创 2021-01-26 11:30:40 · 864 阅读 · 0 评论 -
linux 下安装软件总结
yum与apt的区别一般来说著名的 Linux 系统基本上分两大类:RedHat 系列:Redhat、Centos、Fedora 等Debian 系列:Debian、Ubuntu 等yum是一种安装工具。如果你想安装软件,可以使用yum安装的时候,建议使用yum安装最好,基本上是一步完成。比如安装Linux的rz/sz命令工具:直接输入:yum install -y lrzsz 就会安装了。wget是一种下载工具。可以下载网络上的资源,有点类似于迅雷。比如安装redis时需要.原创 2021-01-24 22:29:56 · 105 阅读 · 0 评论 -
idea 中cherry pick 的使用
有分支1 分支2 ,现在需要把分支2的某些提交摘出来提交到分支1上,不是合并2到1上,因为可能我们只需要2上的某些提交而已!使用cherry pickgit cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了,其实也就是对已经存在的commit 进行再次提交.原创 2021-01-14 10:44:52 · 1494 阅读 · 0 评论 -
LIst 中根据 对象的某几个属性去重
背景有一个list,实体包含多个字段,当其中两个字段值均相同时,就认为list中的这两条记录是一样的去重java8中有一个collectingAndThen可以根据多个字段去重依据姓名和年龄去重,当姓名和年龄相同时,认为这两个实体相同class FlightTicketInfo { private String orderNumber; private String userName; private String age; public Fl转载 2021-01-13 11:04:25 · 774 阅读 · 0 评论 -
Collectors.toMap 参数的意义
使用toMap()函数之后,返回的就是一个Map了,自然会需要key和value。toMap()的第一个参数就是用来生成key值的,第二个参数就是用来生成value值的。第三个参数用在key值冲突的情况下:如果新元素产生的key在Map中已经出现过了,第三个参数就会定义解决的办法。在你的例子中.collect(Collectors.toMap(UserBo::getUserId, v -> v, (v1, v2) -> v1));第一个参数UserBo::getUserId 表示选择U原创 2021-01-05 17:14:29 · 2903 阅读 · 1 评论 -
git pull 时如何解决冲突
Git出现冲突error: Your local changes to the following files would be overwritten by merge: xxx/…等不来的期待22018.08.13 16:58:31字数 668阅读 112,070由于公司目前实行开发模块化,所以原来用的SVN代码管理器全部迁移到Git上去了,原来用过git现在已经忘的差不多了,目前暂时用的是SourceTree来管理代码的类似与SVN的Cornerstone的,今天在拉取服务器的代码的出现了转载 2020-11-26 09:17:35 · 1509 阅读 · 0 评论 -
docker 原理
一篇不一样的docker原理解析转自: https://zhuanlan.zhihu.com/p/22403015在学习docker的过程中,我发现目前docker学习最大的障碍,不是网上的资源太少,而是网上的资源太多,资源太多带来的噪声让学习效率降低不少。而在讲解docker原理上,所有的讲解都是关于cgroups,namespace,aufs以及deviceMapper,这对于一个初学者来说,就是用一堆名词替换另一堆名词,所以我打算写一篇不涉及太多api的原理解析,在这篇解析中,将不.转载 2020-09-23 11:50:38 · 225 阅读 · 0 评论 -
win10 系统无法通过本地IP访问本地web应用
通过localhost:8080/aaa/doc.html 访问本地swagger 可以通过127.0.0.1:8080/aaa/doc.html 访问本地swagger 也可以但是本地IP 192.168.1.167 却不可以前提 防火墙已关闭 ,项目没有问题,其他同事的可以通过本地IP访问解决方法win10 设置 --更新和安全---window 安全中心----防火墙和网络保护--高级设置---入站规则----新建规则tcp端口---选择固定端口 o...原创 2020-09-10 16:09:33 · 6946 阅读 · 0 评论 -
红黑树和平衡二叉树
很早之前就想写一篇关于红黑树的文章,但是由于担心自己理解的不透彻,就一直不敢下笔。于是在重新看了很多篇文章和资料之后,决定彻彻底底的把红黑树搞清楚。也希望让你在面试中游刃有余。OK,废话不多说,开始今天的文章。整篇文章的思路是这样的,红黑树其实就是一种数据结构,设计它的目的就是为了高效地进行增删改查,所以我们文章的顺序也会按照这个思路来进行。我们先从二叉查找树逐渐引入到红黑树,然后再详细的讲解。你如果看过其他文章想必也一定清楚,红黑树比较麻烦,希望你有点耐心,认真理解每一张图再往下分析。一、二叉查找转载 2020-08-24 20:45:58 · 237 阅读 · 0 评论 -
classloader 双亲委派
java文件会被编译成class文件,而class文件就是通过类加载器classloader进行加载的,java中有BootStrapClassLoader、ExtClassLoader、AppClassLoader三类加载器。BootStrapClassLoader是使用c++编写的,用于加载java核心类库,是由jvm在启动时创建的,主要是加载JAVA_HOME/jre/lib目录下的类库;ExtClassLoader用于加载java扩展类库,主要是jre/lib/ext包下的类;AppCla转载 2020-07-16 20:50:11 · 119 阅读 · 0 评论 -
shiro
那么 Realm 在 Shiro里到底扮演什么角色呢?当应用程序向 Shiro 提供了 账号和密码之后, Shiro 就会问 Realm 这个账号密码是否对, 如果对的话,其所对应的用户拥有哪些角色,哪些权限。所以Realm 是什么? 其实就是个中介。 Realm 得到了 Shiro 给的用户和密码后,有可能去找 ini 文件,就像Shiro 入门中的 shiro.ini,也可以去找数据库,就如同本知识点中的DAO查询信息。Realm 就是干这个用的,它才是真正进行用户认证和授权的关键地方。...原创 2020-06-28 17:41:31 · 122 阅读 · 0 评论 -
spu sku 电商商品模块设计
电商项目-商品表(spu)、规格表(sku)设计最近在做一个中小型购物商城,商品的种类繁多,每一种商品具有不同的规格,不同的规格有相应的价格和库存;这个设计的核心难点在于:不同商品具有不同的属性,如何设计通用的存储方案?这里拿iphone6s举例,它身上有很多的属性和值, 比如spu 指的是商品(iphone6s),spu属性就是不会影响到库存和价格的属性, 又叫关键属性,与商品是一对一的关系,比如sku指的是具体规格单品(玫瑰金 16G),sku属性就是会影响到库存和价格的属性, 又叫销售属性,转载 2020-05-19 14:34:09 · 1149 阅读 · 0 评论 -
Elasticsearch教程-从入门到精通(转)
原文:http://mageedu.blog.51cto.com/4265610/1714522?utm_source=tuicool&utm_medium=referral各位运维同行朋友们,大家好,非常高兴能有这么个机会与大家一起交流一些技术问题。此前的各位分享达人们在技术领域或管理领域均有十分精彩的分享,他们带给我们的是多个领域中研究或实践的最前沿知识。这使我本人获益良多,首先要郑重感谢他们。 开始之前,本人首先做一下自我介绍。 马永亮,马哥Linux运维培训创始人,已直接...转载 2020-05-14 11:21:21 · 246 阅读 · 0 评论 -
Java并发编程 三个核心概念及理解
1原子性一个操作或者多个操作要么全部执行,要么全部不执行,并且执行过程不能被打断!在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执行。x =10;//语句1y = x;//语句2x++;//语句3x = x +1;//语句4只有语句1是原子...原创 2020-04-07 11:16:59 · 222 阅读 · 0 评论 -
Java 并发编程以及volatile
一.内存模型的相关概念二.并发编程中的三个概念三.Java内存模型四…深入剖析volatile关键字五.使用volatile关键字的场景若有不正之处请多多谅解,并欢迎批评指正。请尊重作者劳动成果,转载请标明原文链接:http://www.cnblogs.com/dolphin0520/p/3920373.html一.内存模型的相关概念 大家都知道,计算机在执行程序时,每条指令都...转载 2020-04-07 10:53:50 · 113 阅读 · 0 评论 -
groovy 闭包
Groovy学习之——闭包原创little-motor 最后发布于2018-05-21 21:47:46 阅读数 1641 收藏展开一、简介:Groovy是动态弱类型语言,即Groovy不要求声明变量的类型、方法的参数或者方法的返回值。这意味着在不同环境下,变量可以以多种方式使用。闭包是一个类型为groovy.lang.Closure的代码块,与其他语言的lambdas特性类似。闭包...转载 2020-01-20 10:57:09 · 184 阅读 · 0 评论 -
公钥和私钥-RSA 非对称加密
一、一点历史1976年以前,所有的加密方法都是同一种模式:(1)甲方选择某一种加密规则,对信息进行加密;(2)乙方使用同一种规则,对信息进行解密。由于加密和解密使用同样规则(简称"密钥"),这被称为"对称加密算法"(Symmetric-key algorithm)。这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。保存和传递密钥,就成了最头疼的问题。...转载 2020-01-20 10:20:19 · 633 阅读 · 0 评论 -
spring mvc 和webflux 区别
Spring MVC is built on the Servlet API and uses a synchronous blocking I/O architecture whth a one-request-per-thread model.Spring MVC 构建于 Servlet API 之上,使用的是同步阻塞式 I/O 模型,什么是同步阻塞式 I/O 模型呢?就是说,每一个请...原创 2019-11-11 13:24:19 · 8812 阅读 · 0 评论 -
java 导出Excel乱码解决方案,以及内在的原因
错误方式:response.setHeader("Content-Disposition", "inline;filename="+ new String(fileName.getBytes(),"utf-8"));String fileName = aicaseNodeDeptService.getFilename(request)+".xlsx";response.setCha...原创 2019-01-22 15:28:29 · 17883 阅读 · 3 评论 -
mysql中key 、primary key 、unique key 与index区别
索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行。表越大,花费时间越多。如果表对于查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要考虑所有数据。如果一个表有1000行,这比顺序读取至少快100倍。注意你需要存取几乎所有1000行,它较快的顺序读取,因为此时我们避免磁盘寻道。 所有的...转载 2018-11-30 17:08:11 · 552 阅读 · 0 评论 -
pragma autonomous transaction
编译自治性事务,子事务不会影响主事务,子事务也不影响主事务;主事务和子事务互相独立,互不影响;主事务中如果有未提交的数据,子事务中无法查询到;同时,子事务提交,不影响主事务,事务依然需要提交;自治事务的特点第一,这段程序不依赖于原有Main程序,比如Main程序中有未提交的数据,那么在自治事务中是查找不到的。第二,在自治事务中,commit或者rollback只会提交或回滚当前自治事务中的DML,...原创 2018-02-09 13:50:49 · 418 阅读 · 0 评论 -
Java POI 实现文件下载预览功能
/** * 下载附件 * @param adtpaccid * @param request * @param response * @return */ public String downLoadWriteAccService(String adtmainaccsid,HttpServletRequest request,HttpServl原创 2018-01-18 10:51:01 · 1616 阅读 · 0 评论 -
Java文件操作总结
//先写接口,可以对文件进行哪些操作即:创建新文件,删除文件 ,复制文件public interface XfileInterface { /** * 删除文件或文件夹 * @param path 文件夹完整绝对路径 * @return */ public void delete(String path) throws Exception;原创 2018-01-18 10:41:51 · 646 阅读 · 0 评论 -
java poi 导入excel
从本机电脑导入excel到服务器中 ,首先要把文件上传到服务器中,这时候,我使用的是strus2 接受上传的文件;package ht.humanResources.action;import ht.humanResources.model.HtglNew;import ht.humanResources.service.HrHtglService;import java.io.File...原创 2017-11-10 10:19:12 · 318 阅读 · 0 评论