自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (2)
  • 收藏
  • 关注

原创 固定值的字段该不该建立索引

索引

2022-11-30 17:07:41 330 1

原创 LIST 根据多个属性去重,并保留最新日期的数据

list去重默认保留第一个数据,如果有重复的会丢弃掉,所以如果想保留最新历史的数据,list要根据time 排序 倒排

2022-07-22 11:06:28 2896

原创 接口签名原理 以及反思

使用用户名 Appkey 密码 AppSecret (只有双方知道) 时间戳 所有拍过序的参数 组合起来,MD5加密,加密得到的签名因为MD5是hash 函数,根据hash函数的特性 单项性,反向计算是不可能的;比如sign=MD5(用户名 +密码+时间戳+参数)及时中间截获了sign 签名,没有办法反向 解密,只要在服务端验证签名再次MD5 计算一遍,看签名是否正确,实现接口安全性;密码是只有双方才知道的,及时知道参数,因为不知道密码所以 ,没法获得正确的签名;如果是密码也知道了,比如内部人员的恶意攻击

2022-06-10 10:45:11 388

原创 git 回退代码

Git push 在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了,如果不清楚版本库的构成,可以查看我的另一篇,git 仓库的基本结构。 git push的一般形式为 git push ,例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, orig...

2022-06-07 13:08:49 1507

转载 Jemeter 使用教程

作为一名开发工程师,当我们接到需求的时候,一般就是分析需要,确定思路,编码,自测,然后就可以让测试人员去测试了。在自测这一步,作为开发人员,很多时候就是测一下业务流程是否正确,会不会有逻辑上的错误,如果没有,几乎就完事了。然后到了测试人员去测的时候,很多时候测试人员也只是重复了一遍开发人员的步骤,更多就是把测试用例扩大了而已,特别是一些边界的用例。但是我们的接口在每秒10次请求没问题不代表在每秒1000次请求没问题,当接口部署到线上,当并发量增大的时候,很多在测试阶段没出现的问题在线上就有可能出现了。有

2022-03-11 14:47:17 4563 1

转载 深入理解数据库行锁与表锁

乐观锁和悲观锁这个不用再多说了,相信大家也都是知道的。Mysql中的锁机制基本上都是采用的悲观锁来实现的。我们先来看一下”行锁”。行锁顾名思义,行锁就是一锁锁一行或者多行记录,mysql的行锁是基于索引加载的,所以行锁是要加在索引响应的行上,即命中索引,如下图所示:如上图所示,数据库表中有一个主键索引和一个普通索引,Sql语句基于索引查询,命中两条记录。此时行锁一锁就锁定两条记录,当其他事务访问数据库同一张表时,被锁定的记录不能被访问,其他的记录都可以访问到。行锁的特征:锁冲突概率低,并

2022-03-10 11:22:19 2270

原创 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 4106

原创 Hash 算法原理和特性

概念:一般翻译做“散列”,就是把任意长度的输入通过散列函数变化成固定长度的输出,该输出就是散列值。散列的空间通常远远小于输入的空间,不同的输入会散列城相同的输出(散列冲突)。优秀hash特点:常见加密hash函数:-md5 -SHA1/256/512 -HMAC正向快速 逆向困难 输入敏感(输入一点改动,输出也会不一样) 冲突避免 应用: 数据结构 -对于数据空间的组织,散列开来,建立快速映射的关系,往往数据的插查询,插入,删除都比较迅速。接近于O(1)。 密

2022-03-01 16:27:26 1472

转载 B+ 树底层原理解析

B+树是B树的一种变体,有着比B树更高的查询性能。一个m阶B树具有如下特征:1、根节点至少有两个节点;2、每个中间节点都包含k-1个元素和k个孩子,其中m/2<=k<=m;3、每一个叶子节点都包含k-1个元素,其中m/2<=k<=m;4、所有的叶子节点都位于同一层;5、每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域划分。B+树和B树有一些共同特征,但是B+树也具备一些新的特征:1、有k个子树的中间节点包含有k个元素(B树中

2021-11-18 14:44:39 762

转载 mysql 分库分表动态扩容方案

昨天我们分享了怎么不停机进行分库分表数据迁移(数据库分库分表后,我们生产环境怎么实现不停机数据迁移)后来有好多朋友问我,说他们的系统虽然也到了差不多分表的地步了,但是,不知道具体拆分多少张表,分多了又怕浪费公司资源,分少了又怕后面怎么去扩容,还有另一些朋友说,所在的公司规模还不大,尚在发展中,公司压根就没这么资源给他们这么去拆分。这些朋友的问题提的很好,因为真正的结合自己公司的业务去思考了。所以,我今天就来帮助解答下,并且帮着更多有类似困扰的朋友进行统一的讲解,教大家该怎么去做,掌握这套思想之后,其实你

2021-11-18 12:01:24 1341 2

转载 基于RocketMQ实现分布式事务-案例

一、事务消息在这里,笔者不想使用大量的文字赘述 RocketMQ事务消息的原理,我们只需要搞明白两个概念。Half Message,半消息暂时不能被 Consumer消费的消息。Producer已经把消息发送到 Broker端,但是此消息的状态被标记为不能投递,处于这种状态下的消息称为半消息。事实上,该状态下的消息会被放在一个叫做 RMQ_SYS_TRANS_HALF_TOPIC的主题下。当 Producer端对它二次确认后,也就是 Commit之后,Consumer端才可以消费到;那么如果是Rol

2021-07-27 16:20:31 275

转载 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 402

原创 分布式事务,通过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 219

转载 git正确的删除远程仓库的文件并用.gitignore忽略提交此文件

我向远程仓库提交了如下文件src/ pom.xml target/ WebContent/,发现没必要提交target目录。于是做了如下操作:git rm -r --cached targetgit commit -m “delete target/”git push origin master打开github看一下,target目录是不是没有提交了!如果想把target目录以后都不用提交,可以作如下复制代码vi .gitignore#写入:target/#可以在.gitignore

2021-05-12 10:39:30 513

原创 git 删除 本地分支,删除远程仓库分支

删除本地分支tmp。git checkout dev 删除分支前先切换到其他分支git branch -D tmp删除远程分支git push origin --delete temp

2021-05-11 17:33:23 237

转载 gradle

api和compile关键字作用效果是一样的,使用时可以互相替换。实际上,api关键字是用来替代compile关键字的,因为compile关键字将来会被弃用。在高版本的gradle,使用compile关键字会报错并提示使用api关键字代替:api或compile关键字引用的包对于其他module来说是可见的,而implementation关键字引用的包对于其他module来说是不可见的。本地library模块依赖implementation project(":mylibrary")这种依赖方式是直

2021-04-27 18:17:44 173

原创 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 161

转载 开窗函数

一、什么是开窗函数开窗函数/分析函数:over()开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数。开窗函数的调用格式为:函数名(列名) OVER(partition by 列名 order by列名) 。如果你没听说过开窗函数,看到上面开窗函数的调用方法,你可能还会有些疑惑。但只要你了解聚合函数,那么理解开窗函数就非常容易了。我们知道聚合函数对一组值执行计算并返回单一的值,如sum(),count(),max(),min(), avg()等,这些函数常与grou

2021-03-30 16:39:25 8774 1

原创 查询更新

update ITM_ITEM_QUALIFY a ,(select item_code,item_code2,id from itm_item )b set a.item_code=b.item_code , a.item_code2= b.item_code2 where a.item_id=b.id and a.item_code is null and a.item_code2 is null;

2021-03-02 15:56:57 112

原创 mysq 死锁问题解决

1、查询是否存在死锁show OPEN TABLES where In_use > 0;2、查询死锁Itrx_mysql_thread_id ;SELECT * FROM information_schema.innodb_trx 命令是用来查看当前运行的所以事务:SELECT * FROM information_schema.INNODB_TRX;在执行结果中可以看到是否有表锁等待或者死锁,如果有死锁发生,可以通过下面的命令来杀掉当前运行的事务:KILL 165667 ; KI

2021-03-02 10:06:33 137

原创 window下 dos窗口 操作mysql命令

1 切换到mysql 安装目录下 bin目录下2 登录 连接mysqlmysql -u用户名 -p密码也可mysql -u用户名 -p 回车后再输入密码,这样操作比较安全3 use database;选定数据库进行操作4show tables;显示所有的表5 查询例如:select * from act_evt_log;特殊操作:创建只读用户,一般生产环境要创建一个只读账号,防止误删数据,或者对权限进行控制;1.创建用户,并授权SELECT查询权限,授权远程访问权限,注意,命令中us

2021-02-04 10:36:56 218

原创 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 808

原创 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 97

原创 logback 日志记录配置

RollingFileAppender详解logback中RollingFileAppender用于滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。属性:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类,"ch.q

2021-01-20 17:33:29 165

转载 git 关联远程分支

远程仓库中分支存在方法一:(已经创建了本地分支)git branch --set-upstream-to=origin/remote_branch your_branch//等同于git branch -u origin/remote_branch your_branch方法二:(本地分支不存在,本地名称与远程名称不同)git branch new_branch origin/remote_branch// 或者git fetch origin remote_branc

2021-01-15 13:57:59 6709 1

原创 Linux 写一个监控程序,监控某个进程是否在运行,如果停止,则自动重启

首先创建一个脚本 例如 touch start.sh然后付给权限 chmod 777 start.sh脚本内容:#!/bin/shwhile truedops -ef | grep “填入你自己的程序名” | grep -v “grep”if [ $? -eq 1 ]then./run.sh #启动应用,修改成自己的启动应用脚本或命令echo “process has been restarted!”elseecho “process already started!”fis

2021-01-14 17:35:55 1856

原创 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 1446

转载 LIst 中根据 对象的某几个属性去重

背景有一个list,实体包含多个字段,当其中两个字段值均相同时,就认为list中的这两条记录是一样的去重java8中有一个collectingAndThen可以根据多个字段去重依据姓名和年龄去重,当姓名和年龄相同时,认为这两个实体相同class FlightTicketInfo { private String orderNumber; private String userName; private String age; public Fl

2021-01-13 11:04:25 763

原创 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 2768 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 1508

转载 java AtomicLong 原理解析

JVM对CAS的支持:AtomicInt, AtomicLong.incrementAndGet()乐观锁与悲观锁独占锁是一种悲观锁,synchronized就是一种独占锁,它假设最坏的情况,并且只有在确保其它线程不会造成干扰的情况下执行,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。volatile的问题与锁相比,volatile变量是一和更轻量.

2020-10-30 17:58:40 460

转载 docker 原理

一篇不一样的docker原理解析转自:    https://zhuanlan.zhihu.com/p/22403015在学习docker的过程中,我发现目前docker学习最大的障碍,不是网上的资源太少,而是网上的资源太多,资源太多带来的噪声让学习效率降低不少。而在讲解docker原理上,所有的讲解都是关于cgroups,namespace,aufs以及deviceMapper,这对于一个初学者来说,就是用一堆名词替换另一堆名词,所以我打算写一篇不涉及太多api的原理解析,在这篇解析中,将不.

2020-09-23 11:50:38 219

原创 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 6358

转载 红黑树和平衡二叉树

很早之前就想写一篇关于红黑树的文章,但是由于担心自己理解的不透彻,就一直不敢下笔。于是在重新看了很多篇文章和资料之后,决定彻彻底底的把红黑树搞清楚。也希望让你在面试中游刃有余。OK,废话不多说,开始今天的文章。整篇文章的思路是这样的,红黑树其实就是一种数据结构,设计它的目的就是为了高效地进行增删改查,所以我们文章的顺序也会按照这个思路来进行。我们先从二叉查找树逐渐引入到红黑树,然后再详细的讲解。你如果看过其他文章想必也一定清楚,红黑树比较麻烦,希望你有点耐心,认真理解每一张图再往下分析。一、二叉查找

2020-08-24 20:45:58 231

转载 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 117

原创 shiro

那么 Realm 在 Shiro里到底扮演什么角色呢?当应用程序向 Shiro 提供了 账号和密码之后, Shiro 就会问 Realm 这个账号密码是否对, 如果对的话,其所对应的用户拥有哪些角色,哪些权限。所以Realm 是什么? 其实就是个中介。 Realm 得到了 Shiro 给的用户和密码后,有可能去找 ini 文件,就像Shiro 入门中的 shiro.ini,也可以去找数据库,就如同本知识点中的DAO查询信息。Realm 就是干这个用的,它才是真正进行用户认证和授权的关键地方。...

2020-06-28 17:41:31 116

转载 spu sku 电商商品模块设计

电商项目-商品表(spu)、规格表(sku)设计最近在做一个中小型购物商城,商品的种类繁多,每一种商品具有不同的规格,不同的规格有相应的价格和库存;这个设计的核心难点在于:不同商品具有不同的属性,如何设计通用的存储方案?这里拿iphone6s举例,它身上有很多的属性和值, 比如spu 指的是商品(iphone6s),spu属性就是不会影响到库存和价格的属性, 又叫关键属性,与商品是一对一的关系,比如sku指的是具体规格单品(玫瑰金 16G),sku属性就是会影响到库存和价格的属性, 又叫销售属性,

2020-05-19 14:34:09 1141

转载 Elasticsearch教程-从入门到精通(转)

原文:http://mageedu.blog.51cto.com/4265610/1714522?utm_source=tuicool&utm_medium=referral各位运维同行朋友们,大家好,非常高兴能有这么个机会与大家一起交流一些技术问题。此前的各位分享达人们在技术领域或管理领域均有十分精彩的分享,他们带给我们的是多个领域中研究或实践的最前沿知识。这使我本人获益良多,首先要郑重感谢他们。 开始之前,本人首先做一下自我介绍。 马永亮,马哥Linux运维培训创始人,已直接...

2020-05-14 11:21:21 233

原创 Java并发编程 三个核心概念及理解

1原子性一个操作或者多个操作要么全部执行,要么全部不执行,并且执行过程不能被打断!在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执行。x =10;//语句1y = x;//语句2x++;//语句3x = x +1;//语句4只有语句1是原子...

2020-04-07 11:16:59 215

转载 Java 并发编程以及volatile

一.内存模型的相关概念二.并发编程中的三个概念三.Java内存模型四…深入剖析volatile关键字五.使用volatile关键字的场景若有不正之处请多多谅解,并欢迎批评指正。请尊重作者劳动成果,转载请标明原文链接:http://www.cnblogs.com/dolphin0520/p/3920373.html一.内存模型的相关概念  大家都知道,计算机在执行程序时,每条指令都...

2020-04-07 10:53:50 108

ssm(spring springMVC mybatis)demo

spring整合mybatis springMVC案例 测试好了,运行在myeclipse中

2018-02-03

hibernate3 jar 包

hibernate 3 连接数据完整jar包,测试ok,commons-logging.jar和cglib.jar包与Spring中的包重复,由于Hibernate中的包版本低,因此去掉.

2018-02-03

空空如也

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

TA关注的人

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