- 博客(24)
- 收藏
- 关注
原创 mybatis多数据库兼容改造
##配置databaseiddatabaseId 是用于项目中存在多种数据库 SQL 时区分同一条 SQL 对应的数据库。可以这样认为,在 Mybatis 中 SQL 的 id 和 databaseId 组合才是一条 SQL 的唯一标识。实际上 MyBatis 只会选择性加载指定 databaseId 的 SQL ,还有一些没有指定 databaseId 的 SQL。这里说的有点不是很准确,我们来慢慢分析便可以知晓。mybatis在进行mapper注入时,会出现3种情况。
2023-06-21 17:10:16
1092
原创 ELasticSearch简单入门(一)
定义ES是一个全文搜索引擎、分布式文档数据库,每个字段皆是被索引的数据且可被搜索,能够在短时间内存储、搜索、分析大量数据。这里提一下全文搜索,百度可得:是指计算机搜索程序通过扫描文章的每个词,对每个词建立一个索引,指明该词在文章中出现的位置和次数,当用户进行搜索时,就会通过事先建立的索引进行查找,并将结果反馈给用户。ES的全文搜索功能是基于Lucene构建的,Lucene是一个开源的全文搜索引擎工具包。为高可用、可扩展而生。用于全文搜索、结构搜索、分析。将Elasticsearch和
2021-05-19 23:06:40
80
原创 activiti学习记录(一)
Activiti介绍Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出...
2019-12-29 14:52:19
185
原创 springboot整合redis踩坑记录
今天试着用springboot整合redis,过程中遇到了一些小问题,遂将其记录下来。问题虽小,不过碰上了也很是恶心。springboot整合redis步骤我们先来说如何整合redis,首先你需要在springboot的pom.xml文件里添加springboot的依赖。 <dependency> <groupId>org.springf...
2019-12-14 15:46:00
488
1
原创 java虚拟机的二三事之运行时数据区
运行时数据区是jvm比较重要的一部分,它主要包括方法区、堆、程序计数器、虚拟机栈、本地方法栈,可以根据是否是线程私有将它们分成两部分,其中方法区跟堆是线程共享的,其他三个是线程私有的。...
2019-11-14 20:14:52
95
原创 java虚拟机的二三事之类加载器及双亲委派模型
与C或C++不同的是,我们写的java文件并不是可执行文件,而是又许多独立的类文件组成,要经过编译成class文件才会被jvm加载,那在jvm中类是如何加载的呢?今天我们就来聊一聊。首先我们要知道的是,并不是所有的类都会被加载,而是根据程序的需要逐步加载。而类的加载都是通过类加载器来完成的。类加载器bootstrap classloader(启动类加载器):加载java核心API,满足...
2019-11-06 16:03:03
133
1
原创 java虚拟机的二三事之java的跨平台性
大家都知道java是跨平台的语言,那什么是跨平台呢?就是一种语言在计算机上的运行不受平台的约束,一次编译,到处执行。在计算机的世界里,计算机只认0和1,而我们编写的java代码是如何在计算机上运行起来的呢,它需要经过编译的过程,将我们编写的java文件变成计算机能够识别的机器语言,就能够执行了。而这个编译的过程又分成两部分,一是前端编译,先将java文件编译成class文件,比如javac命令就...
2019-11-03 15:25:01
345
原创 细说java内存模型
记得之前在说volitile的时候,曾经讲到过java内存模型,当时只是提到volitile可以保证变量在不同线程之间的可见性。今天我们就来详细说一下java的内存模型,聊一聊为什么同一个共享变量在不同的线程的值是不同的,以及volitile是如何做到保证共享变量在不同线程之间的其可见性的。java内存模型的定义java内存模型描述的是主内存与线程工作内存的关系,它规定了所有的变量存储在...
2019-11-03 13:11:02
103
原创 静态代理与动态代理
首先,我们先讲一下为什么要用代理模式。举个例子,在我们的项目开发中,除了有业务模块,还有公共领域模块,比如权限校验、日志处理等。如果我们在业务模块中想要实现添加用户的功能,而且还想知道是谁添加了用户,我们该怎么去实现我们的代码呢?直接在service层去修改代码吗?这样会导致公共模块与业务模块掺杂在一起了,如果以后我们不想要这部分公共模块了,我们还需要去业务模块中去修改代码,这不利于程序的升级维...
2019-08-28 17:30:57
92
原创 AQS原理简介以及利用AQS简单实现一个共享锁
AQS指AbstractQueuedSynchronizer类。AQS是java中管理“锁”的抽象类,锁的许多公共方法都是在这个类中实现。AQS是独占锁(例如,ReentrantLock)和共享锁(例如,Semaphore)的公共父类。AQS也被称为队列同步器,是用来构建锁或者其他同步组件的基础框架。使用一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。...
2019-07-17 10:32:43
637
原创 解决CAS算法的"ABA"漏洞问题
在将如何去解决去解决CAS的ABA问题时,我们先来说一下什么是CAS,CAS全称 compare-and-swap ,CPU并发原语。执行是连续的,不允许被中断,不会造成数据不一致问题。CAS算法:它包含三个参数CAS(V,E,N): V表示要更新的变量,E表示预期值,N表示新值。仅当V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么都不做。最后...
2019-07-15 11:16:36
447
原创 浅析Java线程池
系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互。在这种情况下,使用线程池可以很好的提高性能,尤其是当程序中需要创建大量存在周期很短暂的线程时,更应该考虑线程池。与数据库连接池比较相似的是,线程池在系统启动时即创建大量空闲的线程,程序将一个Runnable对象或者Callable对象传递给线程池,线程池就会启动一个线程来执行它们的run方法或者call方法。当run方法或者call方...
2019-07-14 21:02:37
76
原创 可重入锁的理解与应用
可重入锁重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。synchronized 和 ReentrantLockd都是重入锁 。首先我们来看一个用synchronized实现的例子,例子如下。public class Test implements Runnable { public synchronized void get()...
2019-07-13 16:37:19
309
原创 volatile同步机制
volatile——java中稍弱的同步机制在讲volatile之前,大家先看这样一个例子public class VolatileTest { public int i = 0; public void go() { new Thread(new Runnable() { @Override public void run() { // TODO Auto-gen...
2019-07-11 23:41:56
132
原创 解决get请求中文乱码的方法
href="${pageContext.request.contextPath}/AdminServlet?method=changeCategory&cname=${category.cname }&cid=${category.cid}"这几天在试着去写一个web项目的时候,碰到了用上述方法传参,传到servlet后通过request.getParameter(“cnam...
2019-06-06 15:23:21
253
原创 Servlet转发与重定向的区别
Servlet转发与重定向的区别定义转发重定向区别定义转发1、页面发出的请求发送到Servlet,经过处理后将request和response对象发送到当前项目下的某个页面。2、一次转发过程中有一次请求相应,request域中的数据不会丢失。重定向1、页面发出的请求发送到Servlet,Servlet向页面发回一个重定向响应信息,信息包含需要重定向到的地址信息。页面接收到信息后再向...
2019-05-31 18:00:48
165
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人