自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(145)
  • 收藏
  • 关注

原创 Homebrew使用

具体参考:https://blog.csdn.net/m0_67402970/article/details/126434901。简介:https://www.jianshu.com/p/f4c9cf0733ea。2、查看安装路径:brew list maven。官网:https://brew.sh/

2024-06-21 17:14:47 535

原创 遇上了redis的大key与热key怎么办

redis的大key和热key

2023-01-29 17:06:27 180

原创 MySQL灵魂拷问

为什么不能使用in?什么情况导致全表扫描?数据库优化思路?

2023-01-29 10:50:53 381

转载 常见索引使用的数据结构及使用场景

索引在软件中的应用

2022-11-09 09:45:17 402

转载 算法在索引中的应用

其实这篇文章只是从Kafka索引入手,来讲述算法在工程上基于场景的灵活运用。单单是因为看源码的时候有感而写之。

2022-11-08 20:26:45 128

原创 @ConditionalOnProperty 和@Conditional注解作用

spring常用注解

2022-09-19 21:34:08 1445

原创 MySQL如何实现隔离级别-MVCC

MySQL使用MVCC实现隔离级别

2022-09-07 12:40:21 619 2

原创 图解脏读、不可重复读、幻读

图解脏读、不可重复读、幻读

2022-09-07 00:01:23 246

原创 什么是行锁、间隙锁

什么是行锁、间隙锁

2022-09-06 21:23:41 1003

原创 list按汉字首字母排序

// 首字母排序 if (CollectionUtils.isNotEmpty(areaInfoList)){ Comparator comparator = Collator.getInstance(Locale.CHINA); Collections.sort(areaInfoList, (m1, m2) -> { return comparator.compare(PinyinUtil...

2022-04-11 10:10:57 434

转载 dependencies 与dependencyManagement 的区别

现在的项目基本上都是使用多module来管理的,这就涉及到一个问题,多module之间如何使用共同的第三方jar,或者说如何减少相同的jar导入的配置。首先介绍我们是这里引入了一个jar包之后,这里如果没有加上version版本号的话,那么maven就会去里找对应groupId和artifactId的jar,如果有就继承他,如果没有就会报错,这时候其实在我们配置的本地仓库中会真实的下载对应的jar包,这时候所有的子module都会默认继承这里面所有声明的jar这里其实是起到管理依赖jar版本

2021-03-31 16:34:22 243

原创 git常用命令

git顺利的提交代码流程查看修改的文件git status为了谨慎检查一下代码git diff添加修改的文件,新加的文件也是直接add就好了git add dirname1/filename1.py dirname2/filenam2.py添加修改的日志git commit -m “fixed:修改了上传文件的逻辑”提交代码git push,如果提交失败的可能原因是本地代码库版本不是最新。‘matching’ 参数是 Git 1.x 的默认行为,其意是如果你执行 git push 但没有

2020-10-16 12:54:53 253

转载 最通俗易懂明明白白的jvm内存结构

引用:https://blog.csdn.net/laomo_bible/article/details/83067810 Java内存结构是每个java程序员必须掌握理解的,这是Java的核心基础,对我们编写代码特别是并发编程时有很大帮助。由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM

2020-09-13 15:55:37 168

原创 MySql时间处理

update table_a set modified = date_add(modified, interval 1 second) where created >= ‘2020-08-25 00:00:00’ and created < ‘2020-08-26 00:00:00’

2020-08-26 14:20:56 139

原创 打印sql日志怎么在logback里配置

MyBatis 世界上流行最广泛的SQL 映射框架,由Clinton Begin 在2002 年创建,iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。其后,捐献给了Apache基金会,成立了iBatis 项目。2010 年5 月,将代码库迁致Google Code,并更名为MyBatis。(导包名:ibatis)MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置

2020-08-22 21:22:54 1260

原创 分布式事务

学习孙玄老师的公开课,企业级分布式事务,笔记。使用场景一次请求涉及数据分布多个存储系统:多个DB;DB和Redis;DB和MQ;…业务场景容忍度:购买商品,商品、订单、支付;不能失败,必须用分布式事务。–金融场景,要么都成功,要么都失败–要求最终一致性朋友圈发布信息,发布信息,朋友圈小红点;允许失败,对用户伤害不大,用分布式事务,那不是给自己找困难吗?– 社交场景– BASE理论即可满足(CAP理论不太适合,最终还是要数据一致性)分布式事务的本质以购买商品为例:

2020-07-12 20:27:06 298

转载 将本地项目上传至 Github

将本地项目上传至 Github欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何

2020-06-09 13:50:06 185 1

转载 ApplicationContextAware使用理解

问题背景在我们的web程序中,用spring来管理各个实例(bean), 有时在程序中为了使用已被实例化的bean, 通常会用到这样的代码:ApplicationContext appContext = new ClassPathXmlApplicationContext(“applicationContext-common.xml”);AbcService abcService = (Ab...

2020-03-02 10:02:37 507

转载 DATETIME与TIMESTAMP的区别,该不该使用自动更新

今天遇到一个问题,明明数据有更新,update_time字段却还停留在创建数据的时候。按常理来说这个字段应该是自动更新的才对。查了一下表结构,update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP发现update_time字段的类型是datetime由此牵扯出两个问题,(1)timestamp与datetime的区别;(2)CURRE...

2019-12-16 14:11:31 279

转载 一文弄懂Nginx最核心的配置

背景在日常的工作中,跟Nginx打交道的时候挺多的。之前对location的匹配规则是一知半解的,为了搞明白location是如何匹配的,查了些资料总结此文。希望能给大家带来帮助。语法规则location [ = | ~ | ~* | ^~ ] uri { ... }location @name { ... }语法规则很简单,一个location关键字,后面跟着可选的修饰符,后面是要匹...

2019-11-15 11:34:40 201

转载 使用CloseableHttpClient 模拟发送HttpGet和HttpPost请求

项目中经常会用到模拟Http请求,而jdk 下的 rt.jar核心库中也有 java.net提供了这方面的功能,但是总体而言,功能还是缺少灵活性和全面性,HttpClient的出现就是弥补了其缺失的功能。HttpClient不是浏览器客户端,而是一个客户端和服务端实现通信的Http组件库。本篇文章主要讲解Cl...

2019-11-08 15:34:57 2823

原创 动态改变日志级别

动态的修改线上环境的日志级别,在分布式环境,一次修改一台,改变的途径有:(1)通过http访问,处理请求,改变日志级别。可以使用轻量级的httpServer(推荐 NanoHTTPD)监听指定端口,http请求ip,访问到具体的机器上修改日志级别。(2)通过请求Zookeeper,修改节点上的日志级别信息,修改指定ip的日志级别。修改日志级别的代码:public static void m...

2019-11-06 18:50:12 337

原创 值判断的性能比较

经常写业务代码,会有对字段值的判断,首先要校验非空,然后做值判断。如果值为null,不校验直接判断会引起异常,如果异常处理不当会引发事故。所以,这样写会很简便:new Integer(8).equals(d)把比对的值放在Integer里,即便变量d为null也不会异常。但是,这种写法的性能就比较低,下面比较一下: public static void main(String[]...

2019-11-06 12:56:31 164

原创 logback实践总结

logback的日志滚动策略使用总结:1、如果日志打印的多的话,很容易占满磁盘,引起宕机。所以要配置日志滚动策略rollingPolicy,设置最大文件容量,超过最大值,再下一次产生新文件的时候,自动清空最早的文件。2、假设某logger对应路径的日志每天有3G,可以分配给该logger的最大空间是20G,可以使用rollingPolicy的TimeBasedRollingPolicy策略,每周生成一个文件,当第3周结束,日志大小为21G,超过最大限制,会自动删除第1周的文件,再创建第4周的日志文件。

2019-11-05 17:37:50 589

原创 使用maven Profile实现多环境构建

多环境是指,有多个profile环境,每个环境有自己不同的配置(有的定义在pom.xml中,有的定义在.properties文件中),总共分三步:1、在pom.xml中定义多个profile2、在resources里新建目录存放不同环境的配置文件3、在pom.xml中定义加载的环境的配置,指定到使用的profile文件

2019-10-29 20:21:47 275

转载 Nginx配置upstream实现负载均衡

转载:https://www.cnblogs.com/wzjhoutai/p/6932007.html1、在http节点下,加入upstream节点。upstream linuxidc {server 10.0.6.108:7080;server 10.0.0.85:8980;}2、将server节点下的location节点中的proxy_pass配置为:http:// + upstr...

2019-10-28 14:54:09 464

原创 并发中锁的分类

1、自旋锁线程状态及上下文切换消耗系统资源,当访问共享资源的时间短,频繁切换上下文不值得。jvm使线程在没有获得锁的时候,执行空循环,循环几次之后,如果还没获得锁,再被挂起。2、阻塞锁改变了线程的运行状态,让线程进入阻塞状态进行等待,当获得相应的信号(唤醒或者时间)时,才可以进去线程的准备就绪状态,转为就绪状态的所有线程,通过竞争,进去运行状态。3、重入锁支持线程再次进入的锁。4、读写...

2019-08-09 09:08:57 358

原创 volatile和synchronized

如何把非原子性操作变成原子性操作?1、volatile关键字只能保证可见性,并不保证原子性2、synchronized关键字,使操作具有原子性区分一下synchronize内置锁和互斥锁1、内置锁,在对象头,自动获取释放,获得的唯一方式,进入锁保护的同步代码块2、互斥锁,内置锁就是一个互斥锁,当有多个线程获取锁时,只有一个能获取成功,其他线程阻塞等待。synchronized修饰范围...

2019-08-07 09:34:28 119

原创 ReentrantLock源码分析

首先,想先梳理一下自己看源码的目的,最近有篇文章特别火《程序员12小时惊魂记:凌晨迁移数据出大事故!》,里面强调了解决问题的能力很重要,这给我一种只看源码和设计模式关键时刻不给力的感觉,周末去看了鲁能和恒大的比赛,那种在瞬间做出决策的压力只会比事故现场更紧张,而且不能有一点犹豫。我想竞技体育的魅力,就在于此吧,要把所有的技能都训练到潜意识层面,才会在瞬间爆发出来。所以,要不断的研究不断的实践,弄懂...

2019-08-06 00:17:46 172

原创 如何搭建一个前后端分离的项目

整体思路如下:动态请求,Client->Nginx->Tomcat->Nginx->Client静态请求,Client->Nginx->Client

2019-07-24 09:12:47 6091 3

原创 Iterator死循环

iterator不能放在循环里,每次都会获得一个新的迭代器,导致死循环。要先获取迭代器,然后对迭代器循环。 public static void main(String[] args) { //正确 Iterator<String> it = getList().iterator(); while(it.hasNext()){...

2019-07-17 21:44:31 1419

转载 偏向锁,轻量级锁与重量级锁的区别

转自:https://blog.csdn.net/choukekai/article/details/63688332锁的量级说明锁的竞争程度。偏向所锁,轻量级锁都是乐观锁,重量级锁是悲观锁。一个对象刚开始实例化的时候,没有任何线程来访问它的时候。它是可偏向的,意味着,它现在认为只可能有一个线程来访问它,所以当第一个线程来访问它的时候,它会偏向这个线程,此时,对象持有偏向锁。偏向第一个线程...

2019-07-16 22:04:23 576 2

原创 并发容器1 vs 同步容器

并发容器:CopyOnWrite系列、 Concurrent系列、 BlockingQueue系列特点:每个并发容器的设计都不一样,根据具体场景设计,尽量避免使用锁。 CopyOnWriteArrayList内部持有一个ReentrantLock lock = new ReentrantLock(),读写分离,写时复制出一个新的数组,完成插入、修改或者移除操作后将新数组赋值给array。只是在增删改上加锁,但是读不加锁,CopyOnWriteArrayList支持读多写少的并发情况。

2019-07-16 08:59:15 156

原创 Lock接口,和Synchronized区别,分布式锁

什么是锁:同步的本质是通过锁来实现的。为了实现多个线程在一个时刻同一个代码块只能有一个线程可执行,那么需要在某个地方做个标记,这个标记必须每个线程都能看到,当标记不存在时可以设置该标记,其余后续线程发现已经有标记了则等待拥有标记的线程结束同步代码块取消标记后再去尝试设置标记。这个标记可以理解为锁。在单进程情况下,多个线程访问同一资源,可以使用synchronized和lock实现。在多进程情况下...

2019-07-13 19:34:34 3801

转载 Java分布式锁看这篇就够了

原文出自:https://www.cnblogs.com/seesun2012/p/9214653.html https://blog.csdn.net/seesun2012### 什么是锁?在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。而同步的本质是通过锁来实现的。为了实现多个线程在...

2019-07-13 18:40:30 848

转载 SQL中# 与$ 的区别

转自:https://www.cnblogs.com/luohanguo/p/9122398.html区别:(1)#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是id,则解析成的sql为order by “id”。(2)$将传入的数据直接显示生成在sql中。如:order by useriduser_iduseri​d,...

2019-07-11 17:55:35 305

转载 Elasticsearch 如何做映射mapping

转自:https://blog.csdn.net/zhousenshan/article/details/82928827 1、什么是映射    映射:创建索引的时候,可以预先定义字段的类型以及相关属性(比如说让某字段是否存储、用那种分析器、重要级别)Elasticsearch可定义...

2019-07-09 17:30:01 311

原创 场景优化-工厂模式和策略模式(非常实用且常用的设计模式)

问题:随着业务代码的复杂度增加,我们的代码中出现了大量的 if-else,一坨一坨的,类特别大,非常难看,而且还伴随着大量的重复代码,特别容易隐藏坑,比如增加或修改场景时,需要把所有重复的代码都改一遍,如果有遗漏就会产生bug。目的:所以要拆解类,要对重复代码抽象。如何实现:使用工厂模式、策略模式、工厂+策略模式对代码拆解。...

2019-07-06 18:21:12 1125

转载 java并发-独占锁与共享锁

转自:https://blog.csdn.net/wojiushiwo945you/article/details/422929991 锁的独占与共享      java并发包提供的加锁模式分为独占锁和共享锁,独占锁模式下,每次只能有一个线程能持有锁,ReentrantLock就是以独占方式实现的互斥锁。共享锁,则允许多个线程同时获取锁,并发访问 共享...

2019-06-28 09:21:11 6394

原创 java并发等待/通知的经典范式

分为两部分,等待方和通知方:等待方:(1)获取对象的锁(2)如果条件不满足,那么调用对象的wait()方法,被通知后仍要检查条件。(3)条件满足则执行对应的逻辑。对应伪代码:synchronized(对象) { while(条件不满足) { 对象.wait(); } 对应的处理逻辑}通知方:(1)获得对象的锁(2)改变条件(3)通知所有等待在对象上的线程对应的伪...

2019-06-14 11:26:40 323

空空如也

空空如也

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

TA关注的人

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