自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(112)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java中用到的锁

一、乐观锁乐观锁,顾名思义,就是比较乐观的锁,当需要操作到共享数据时,它就认为没有其它的线程在操作该数据,态度比较乐观,乐观锁操作数据时不会上锁,在更新的时候会判断一下在此期间是否有其他线程去更新这个数据。乐观锁可以使用版本号机制和CAS算法实现。在 Java 语言中java.util.concurrent.atomic包下的原子类就是使用CAS 乐观锁实现的。适合读多写少的情况。二、悲观锁悲观锁就是和乐观锁截然不同的态度,当有一个线程操作共享数据时,它就会认为有其他线程也要和它做同样的事情,

2021-06-19 19:20:52 294

原创 Power Designer创建物理数据模型

今天来介绍一下物理数据模型, 以后经常使用的就是物理数据模型。 物理模型对应了一种具体的数据库类型。1、打开 PowerDesigner,然后点击 File --> New Model然后选择如下图所示的物理数据模型...

2021-06-06 22:25:31 1691 1

原创 Power Designer创建概念数据模型

上篇介绍了使用Power Designer可以创建的数据模型,今天就来实操一下,来演示怎么创建概念数据模型。1、首先使用Power Designer新建模型,然后选择概念数据模型

2021-06-05 21:34:44 5346

原创 PowerDesigner的十种建模文件

首先来介绍一下Power Designer工具,PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并为研发生命周期管理提供强大的分析与设计技术。PowerDesigner独具匠心地将多种标准数据建模技术(UML、业务流程建模以及市场领先的数据建模)集成一体,并与 .NET、WorkSpace、PowerBuilder、Java™、Eclipse 等主流开发平台集成起来,从而为传统的软件开发周期管理提供业务分析和规范的数据库

2021-05-30 18:10:37 2145

原创 工作流Activiti流程图各元素介绍

我们常见的工作流流程图,通过各元素的拖拽生成,如下图:要想生成根据业务需求制定的流程图,首先要知道这些构成元素代表的是什么,这篇就来将一下这些元素的作用。通过activiti集成eclipse,会在开发工具的右边显示这些元素:从一级分类中可以看出,分为开始事件、结束事件、任务、子流程和调用节点、网关、边界事件、捕获和触发事件、顺序流等,下面就来介绍一下里面的子元素:一、开始事件:1、StartEvent(空开始事件)空开始事件技术上意味着没有指定启动流程实例的触发条件。 这就

2020-11-22 20:58:00 4829

原创 工作流Activiti在数据库中生成的表

工作流Activiti内置了一些表,一共是28张,在我们项目启动的时候会在我们配置的数据库中创建这些表,下面就搭建一个小demo,去look一下Activiti生产的这些表。首先到Spring的官网,找到生成模板工程的地方(https://start.spring.io/),生成项目模板:把生成的模板工程,导入到开发工具中,这里以eclipse为例,导入的项目如下:在pom.xml中加入Activiti依赖、mybatis依赖、mysql驱动等jar包:<...

2020-11-14 20:18:26 644

原创 全文搜索引擎Elasticsearch的初体验:基本概念和操作

一、简介关于Java Web的开发周边技术,搜索引擎也是经常被用到的,其中solr和es是被当作技术选型经常出现的,他们都是基于lucene,但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。而今天所讲的es,它是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。一、简介关于Java Web的开发周边技术,搜索引擎也是经常被用到的,其中solr和es是被当作技术选型经常出现的,他们都是基于lucene,但是,你没法直接用 Lucene,必须自己

2020-06-14 18:43:45 342

原创 Redis的持久化机制:RDB快照和AOF追加文件

Redis本来作为缓存使用,但是现在数据越来越重要,或者是redis在系统建设中起到了至关重要的环节,特别是在机器学习中训练用的语料及相似度向量和索引,这样就不希望Redis重启之后,或者是宕机之后,数据丢失,所以Redis的持久化机制是我们不得不了解的一个内容。Redis提供了两种不同的持久化方法来将数据存储在硬盘里面,一种方法叫快照,这样会在磁盘上产生rdb文件。它可以将存在于某一时刻的所有数据都写入硬盘里面;另外一种方法叫做只追加文件,它会在磁盘上产生aof文件,这种持久化方式是...

2020-06-13 10:42:48 457

原创 Redis模糊匹配的命令,为什么要用scan而不能用keys

对于Redis服务器的维护,有时我们需要从成千上万的key中,找出我们指定的key,也就是模糊匹配出来的key,redis提供了一个简单粗暴的命令:keys,它可以用来列出所有满足特定正则字符串规则的 key。但是对于这个简单粗暴的命令,要是不想被同事吊,生产环境就忘记有这个命令的存在,或者是这个命令在生产环境已经被老大给和谐了,原因想必大家也知道,这个指令没有offset...

2020-05-08 13:48:21 4873

原创 Redis中地理位置GEO模块,非常便捷的来查找附近的人或物

从Redis3.2 版本以后,增加了地理位置 GEO 模块,这个模块提供了6个Geo指令,分别是geoadd、geodist、geopos、geohash、georadiusbymember及georadius,通过这个模块的这些命令,可以用来实现平时开发需求当中的“附近的什么什么”,例如即时通讯中附近的人、外卖中附近的餐馆、共享单车中附近的车等等。地图元素的位置数据使用经纬度表...

2020-05-06 09:19:02 1246

原创 Redis中位图和HyperLogLog的应用

在我们日常开发中,会遇到一些布尔类型数据存储的需求,说的直白一些,就是是与不是、做与没做的一些需求,像用户的签到并记录这些签到,和办公系统里面打卡是一样的,下面两张图就是我的支付宝与我的移动的签到应用。当接到这样的需求时,第一时间我想到的就是使用Redis来应对这样的需求,用户一年的签到记录, 签了是 1,没签是 0,要记录 365 天。如果使用普通的 key/...

2020-05-04 09:30:26 308

原创 缓存神器Redis的五种数据类型及使用

Redis作为Nosql的代表,想必大家已经再熟悉不过了,除了作为缓存来使用,Redis还提供了其他很多有用的功能,例如可作为消息队列、分布式锁、不隆过滤器、限流等功能使用。今天先来说一说redis作为缓存使用,提供了5 种基础数据结构,分别为:string (字符串)、list (列表)、set (集合)、hash (哈 希) 和 zset (有序集合)。一、strin...

2020-04-25 10:18:21 1517

原创 使用Docker创建镜像的三种方法

作为容器技术的代表作-Docker,给开发、运维、测试人员带来了极大的便利,作为一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。今天就给大家演示一下,如何打造属于自己的docker镜像,也就是docker的image。创建...

2020-04-11 11:36:32 14978 1

原创 Java内存映像工具jmap及虚拟机堆转储快照分析工具jhat

Java的内存映像工具,jmap,Memory Map for Java,用于生成堆转储快照,一般成为heapdump或者dump文件,出了获取dump文件,这个工具还可以查询finalize执行队列,Java堆和永久代的详细信息,如空间使用率、当前使用的是哪种收集器等。先来看一下这个命令是怎么用的:由此可见jmap的命令格式为:jmap [option] <pid&...

2020-04-06 10:48:27 1750

原创 JSTAT命令-对Java应用程序的资源和性能进行实时的监控

对于监控JVM,jdk也提供了很多工具,供我们来使用,其中命令jstat,是JDK自带的一个轻量级小工具,可以查看堆内存各部分的使用量,以及加载类的数量,对Java应用程序的资源和性能进行实时的监控,包括了对Heap size和垃圾回收状况的监控。命令行输入jstat可以查看这个命令的用法。用法格式为:jstat -<option> [-t] [-h<lin...

2020-03-29 13:30:44 354

原创 小窥微服务架构Spring Boot的监控与管理

学过马克思主义哲学的码友们都知道:事物具有两面性。那么微服务架构带给我们开发便利的同时,也会带来许多复杂的工作,比如对于运维人员来说,随着应用的不断增多,系统集群中出现故障的频率也会越来越高,虽然在高可用机制的保护下,个别故障不会影响系统的对外服务,但是这些频繁出现的故障需要被及时发现和处理才能保证系统处于健康可用的状态。为了能对这些成倍增长的应用做到高效运维,需要实现一套自动化的监控...

2020-02-13 22:25:46 343

原创 SpringBoot集成Spring Security安全认证框架

从事WEB开发以来,一般用的安全认证框架,最多就是有两种:Apache Shrio和Spring Security,而Spring Security作为Spring全家桶中的一员,相对于Spring集成起来更具有优势和更好的支持!Spring Security是一个强大且可定制的身份验证和访问控制框架,完全基于Spring的应用程序标准,它能够为基于Spring的企业应用系统提供...

2020-02-06 08:58:01 3153

原创 SpringBoot中的统一异常处理

在互联网时代,不管是面向广大用户的应用、WEB,还是公司内部管理系统,如果有了异常,而没有正确的去处理,那么出现的500服务器错误,那是非常不友好的,不友好的出现异常错误,都会可能导致用户的流失,程序中的bug导致的服务器错误是不可避免的,那么我们就要统一捕获这些异常来给用户展现友好的界面来提高用户体验,今天就来介绍一下SpringBoot的异常处理方式!启动一个简单的SpringBoot...

2020-02-03 10:42:34 931

原创 Celery:一个专注于实时处理和任务调度的分布式任务队列

一、celery简介Celery 是一个专注于实时处理和任务调度的分布式任务队列, 同时提供操作和维护分布式系统所需的工具,任务就是消息, 消息中的有效载荷中包含要执行任务需要的全部数据.它是一个分布式队列的管理工具, 可以用 Celery 提供的接口快速实现并管理一个分布式的任务队列.二、celery特性:1.方便查看定时任务的执行情况, 如 是否成功, 当前状态, 执行任务花...

2019-12-01 14:09:50 993

原创 Supervisor:进程管理工具的简单使用

Supervisor是用Python开发的一个client/server服务,是Unix系统和类Unix系统下的一个进程管理工具。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。在Mac系统下,...

2019-12-01 10:14:34 422

原创 Docker入门级介绍:Docker的简介、Docker的安装及常用的镜像命令和容器命令

程序员在项目部署的时候,经常会出现这种状况:运维人员说项目有问题,运行不起来;然后你就理直气壮的说,项目没一点问题,你来看看我本地,运行的十分良好......结果主要问题被搁置,讨论起无关紧要的责任问题。不过就这个结果,开发人员没错,运维人员也没错,错就错在没有打包起一套项目的运行环境,因为项目到生产环境中运行,不但要有代码,还要有基础运行环境,依赖的包,依赖的其他应用等,这时就要给大家...

2019-10-07 22:10:28 297

原创 MySQL执行计划分析工具EXPLAIN:分析一下你建立的索引真的起到作用了吗?

在我们使用MySQL的过程中,随着数据量越来越大,查询显得有些吃力,这时候就要针对查询就行优化,针对查询优化,通过给字段添加索引可以提高数据的读取速度,提高项目的并发能力和抗压能力。给数据库中的表添加索引,来提高它的查询速度,但是会有另外一种情况出现,那就是我们给表中字段加了索引,但是查询的时候依旧很慢,没有什么变化,这时就是因为建立的索引失效了,今天就来讲一讲索引失效的情况!对于查看索引...

2019-09-07 15:57:18 470

原创 RabbitMQ管理:我们应该了解的命令行工具rabbitmqctl

消息中间件RabbitMQ提供了强大的消息队列服务,在我们应用开发中起到了至关重要的作用,不但如此,从服务端的角度,RabbitMQ还提供了一些工具应用,对我们来管理RabbitMQ,提供了直观的操作。对于RabbitMQ提供的工具应用,包含rabbitmqctl工具和rabbitmq management插件:rabbitmqctl工具是一个系列的工具,运用这个工具可以执行大部分的Rab...

2019-07-07 12:02:16 2331

原创 RabbitMQ:消息一致性之持久化和消费者确认

在应用开发中,持久化也是经常被提起的,持久化就是存在在内存当中的数据,要写入到磁盘中,这样在内存中的数据由于各种原因丢失掉后,可以通过磁盘重新加载到内存中来,对于消息中间件,持久化也至关重要。在生产者发布消息到broker后,消费者消费消息之前,消息是存在于内存当中,倘若消息丢失,那么就会造成消息的不一致性,这时就要对生产之后消费之前的消息做一下持久化操作。 Ra...

2019-06-28 16:41:44 923

原创 RabbitMQ:消息一致性之生产者确认

对于消息中间件的使用,确保业务流程正确的进行下去的前提,就是要保证消息的一致性,也就是确保消息不回丢失。引入消息中间件的目的,无非就是异步、解耦和削峰,到达这样的目的,系统之间传递的消息就负有不可推卸的责任,假如消息跑丢了,轻则影响数据的完整性,重则影响整个系统的使用,所以保证消息的一致性是使用消息中间件至关重要的前提。 保证消息的一致性,大致可从三个方面入手:一是...

2019-06-27 15:06:15 741

原创 消息队列:从一个简单示例来解释RabbitMQ的相关概念

在Java语言(或者其他语言)中,经典的生产者-消费者模式,催生了消息队列这个中间件服务,常用的消息队列有ActiveMQ、RabbitMQ、RocketMQ和Kafka等,Redis也有提供消息队列的功能,不过很少用Redis当作消息中间件来使用。今天就通过一个简单的RabbitMQ的生产-消费示例,来解释一下消息队列的相关概念。 首先要有一个RabbitMQ的服务,服务怎么安装可...

2019-06-15 13:31:08 219

原创 Spring框架是怎么解决Bean之间的循环依赖的

在我们的开发中,会不可避免的遇到Bean之间循环依赖的,所谓循环依赖,就是两个或者两个以上的Bean互相持有对方,这样在程序运行调用中,会出现这种循环依赖的现象,假设是两个Bean,当程序调用Bean A时,Bean A中依赖Bean B,在Bean A中调用Bean B时,Bean B中又依赖了Bean A,这样就形成了循环依赖,如下图:先从一个小例子来说明,使用Spring框架如果...

2019-05-12 23:07:48 8909 3

原创 使用LinkedHashMap实现一个简易的LRU缓存

对于缓存系统,我们在开发中经常用到的,除了本地缓存,还有像memcached、redis这样优秀的分布式缓存服务器,在这些缓存服务器中,有一个经常听说的术语,叫做淘汰策略,也就是当系统中缓存越来越多时,需要执行一定的策略,来实现缓存的合理利用,下图是redis配置文件中关于淘汰策略的相关配置:在redis提供的这些可选择的淘汰策略中,有一个叫做LRU的组合策略,下面也有了说明:LRU ...

2019-05-12 10:46:32 5210

原创 Git rebase命令的作用

Git作为分布式的版本管理系统,对于代码版本的管理至关重要,使用git需要了解三个区域:暂存空间、本地仓库和远程仓库。使用git作为版本控制,都是要在各自的分支上,在本地开发,每天需要把当天完成的任务提交到本地仓库,需要版本迭代时需要推送到远程仓库,而暂存空间就是你在本地开发时,新增或者修改的文件使用git add会添加进暂存区,然后使用git commit才能提交到本地仓库。这是介绍了三个区...

2019-04-30 10:35:53 2910

原创 MySQL数据库中,同样是删除数据的命令,truncate与delete语句的区别

1、从概念上来讲,它们是不同的,truncate是DDL语句,会隐式提交,所以,不能回滚,不会触发触发器。delete是DML语句,这个操作会被放到rollbacksegment中,事务提交后才生效。如果有相应的触发器,执行的时候将被触发。2、语法结构不同,truncate会删除表中所有数据,delete后面可以跟where进行条件过滤,如果不跟任何条件,也会删除所有数据其他的不同,我...

2019-04-20 14:40:57 1629

原创 从Integer与int的各种比较来看Integer的缓存机制及包装类的拆箱装箱

首先来看下面一道程序,猜一猜它的运行结果?设定了一系列Integer与int的值,然后做各种比较,其中设定127与128是有缘故的,往下看!运行结果是什么?懒得猜咱们就直接运行,结果如下:对于这种结果,咱们一一解释:1、首先int是基本数据类型,Integer是包装类型,a与b做比较时,b会自动拆箱成基本数据类型与a做比较,所以他们的比较为true;2、a与c做比较的结...

2019-04-12 18:31:00 275

原创 Git常用的一些命令

1. git init (把当前目录变成Git可以管理的仓库)2. git add file (把文件file添加到git的暂存区--stage)3. git commit -m "备注" (把暂存区的文件提交到仓库)4. git status (查看仓库当前状态)5. git diff file (查看文件file的修改内容)6. git log (查看提交历史,以便确定要回退到哪个版...

2019-04-06 10:48:42 168

原创 HashMap初始容量为什么是2的n次幂及扩容为什么是2倍的形式

接着上一篇博客,上一篇博客说明了HashMap的初始容量都是2的n次幂的形式存在的,而扩容也是2倍的原来的容量进行扩容,也就是扩容后的容量也是2的n次幂的形式存在的,下面就来说明一下为什么是2的n次幂的形式! 先来看一下源码,也就是向HashMap中添加元素,或者扩容时是怎么存放元素的。 第一个截图是向HashMap中添加元素putVal()方法的部分源码,可以看出,向集合...

2019-03-31 21:43:49 41426 23

原创 HashMap的初始容量机制及扩容机制

通常在我们的应用中,HashMap是用到最多的数据结构之一,在JDK1.8之前,它的底层结构是数组+链表,而在JDK1.8之后,为了查询效率的优化(主要是当哈希碰撞较多的时候),它的底层结构变成了数组+链表+红黑树。今天就来探讨一下HashMap的扩容机制,这也是面试时被问到最多的问题。首先看一下源码中HashMap的四种构造方法。 从源码中可以看出:HashMap提供四种构...

2019-03-30 21:35:46 11201 7

原创 MySQL建立的联合索引,真的用到了吗?

当我们需要提高MySQL的查询性能的时候,一般想到的处理办法就是建立索引,当有多个条件进行查询的时候,需要建立联合索引进行查询,而联合索引需要符合最左匹配原则,今天就来探讨一下,你建立的联合索引真的用到了吗?首先建立一个学生表:CREATE TABLE `student` ( `id` varchar(10) NOT NULL COMMENT '编号', `num` varchar(...

2019-03-26 20:27:26 3139

原创 ThreadLocal的介绍及由其引发的内存泄露问题

一、ThreadLocal的定义ThreadLocal,通常被我们翻译为线程本地变量,这是一个以ThreadLocal对象为键、任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个值。二、ThreadLocal的源码解析及常用方法先来看一下ThreadLocal的源码:可以看出,ThreadLoc...

2019-02-13 14:48:04 475

原创 RMI:利用JDK中的Remote实现远程方法调用

 Java RMI:即Java远程方法调用,是针对Java语言的一种特殊RPC调用,一种用于实现远程过程调用的应用程序编程接口。下面用一个简单实例来说明Java RMI是怎样开发的。步骤一:编写远程服务接口,该接口必须继承 java.rmi.Remote 接口,方法必须抛出 java.rmi.RemoteException 异常;import java.rmi.Remote;impor...

2019-01-22 09:56:01 2884

原创 Java多线程中的等待/通知机制

  在Java语言中,任意的对象都有等待/通知的方法,因为这些方法被定义在所有对象的超类java.lang.Object上,对应的方法就是wait()/notify(),具体解释如下:wait():调用该方法的线程会进入WAITING状态,只有等待另外线程的通知或者被中断才会返回,调用wait()方法后会释放对象的锁,并且还提供了超时返回的方法wait(long)和wait(long,int)...

2018-12-29 11:38:05 1092

原创 Thread.join():我不但在你之前执行,并且你还要等我执行完才能执行

  Java中的线程提供了一个方法:Thread.join(),从单词上可以看出,是加入的意思。含义就是:如果在线程A的内部调用了线程B的join()方法,需要等到线程B执行完毕,才能继续执行!线程Thread除了提供join()方法外,还提供了join(long millis),join(long millis, int nanos)两个具备超时特性的方法。这两个超时方法,如果线程在给定的时间内...

2018-12-29 10:19:01 1048

原创 Java语言中的无锁化线程安全队列

  在并发编程中,有时候需要使用线程安全的队列。对于线程安全的队列,有两种实现方式:一种是阻塞(加锁),一种是非阻塞(无锁)。对于无锁化线程安全队列,实现要基于两个方面:原子性操作和内存访问控制。说的浅显一些,就是在JDK中,需要用到Unsafe类中的CAS操作,结合volatile关键字,来实现无锁化线程安全队列。具有代表性的就是ConcurrentLinkedQueue,当然还有其他的队列,诸...

2018-12-28 11:30:38 3296

统一建模语言

统一建模语言,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。

2018-01-09

空空如也

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

TA关注的人

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