![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java学习笔记
文章平均质量分 91
qq_25106373
这个作者很懒,什么都没留下…
展开
-
redis源码分析之AOF重写
一、背景 AOF是Redis增量模式的持久化方式,随着redis的持续运行,会不断有新的数据写入AOF文件中,逐渐占用大量磁盘空间,还会降低Redis启动时候的回放加载效率。Redis中有rewrite机制来合并AOF历史记录。 说明:阅读此文需要对redis有一定的了解,比如redis配置文件、redis持久化概念、redis事件。 本文基于朋友发来的一份AOF重写日志,本文源码围绕此日志展开,通过日志+源码的方式来分析AOF重写过程,重写日志截图如下:为了后续看代码方便,...转载 2022-01-27 17:32:15 · 2260 阅读 · 0 评论 -
juc并发包整理
目录JUC提供了java并发编程需要的类,主要分几个大模块1 原子类操作2 锁3 阻塞队列4 并发集合5 同步器6 线程池7异步组合编程JUC的作者Doug Lea神一样的人物,其中以上很多类的实现底层实现都是基于AQS,对于想了解JUC包的思想,建议先看看AQS的实现.可以参考这篇文章AQS什么是AQSaqs全称为AbstractQueuedSynchronizer,它提供了一个FIFO队列,可以看成是一个用来实现同步锁以及其他涉及到同步功能的核心组件,常见的有:Reentran原创 2021-04-06 18:33:02 · 794 阅读 · 0 评论 -
【Redis】批量删除Key的三种方式
Redis 中有删除单个 Key 的指令 del,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux的 xargs 指令来完成这个动作一.使用命令行批量删除redis的key语法./redis-cli -h IP -p PORT -a PASSWORD -n NUM keys ‘key*’ | xargs ./redis-cli -h IP -p PORT -a PASSWORD -n NUM delIP:redis服务器的IP地址PORT:redis服务的端口PASSWO转载 2021-04-02 18:00:26 · 16331 阅读 · 0 评论 -
Spring事务失效的 8 大原因,与事物传播行为对比测试!!!
https://mp.weixin.qq.com/s/1TEBnmWynN4nwc6Q-oZfvw原创 2021-04-02 13:55:38 · 368 阅读 · 0 评论 -
Mysql事务实现原理
开篇相信大家都用过事务以及了解他的特点(事物的四大特性),如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等。今天想跟大家一起研究下事务内部到底是怎么实现的,在讲解前我想先抛出个问题:事务想要做到什么效果?按我理解,无非是要做到可靠性以及并发处理。可靠性:数据库要保证当insert或update操作时抛异常或者数据库crash的时候需要保障数据的操作前后的一致,想要做到这个,我需要知道我修改之前和修改之后的状态,所以就有原创 2021-03-24 14:47:32 · 355 阅读 · 0 评论 -
dubbo的SPI
SPI(Service Provider Interface)本质是 将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。在Java中SPI是被用来设计给服务提供商做插件使用的。基于策略模式 来实现动态加载的机制。我们在程序只定义一个接口,具体的实现交个不同的服务提供者;在程序启动的时候,读取配置文件,由配置确定要调用哪一个实现;通过 SPI 机制为我们的程序提供拓展功能,在dubbo中,基于 SPI,我们可以很容易的对 Du原创 2021-03-16 17:29:04 · 135 阅读 · 0 评论 -
hashmap中为什么使用红黑树?
在回答这个问题之前,我们先了解一下有关二叉树的基本内容。①二叉排序树(又称二叉查找树):1)若左子树不为空,则左子树上所有结点的值均小于根结点的值。2)若右子树不为空,则右子树上所有结点的值均大于根节点的值。3)左右子树也为二叉排序树。②平衡二叉树(AVL树):是一种二叉查找树,当且仅当两个子树的高度差不超过1时,这个树是平衡二叉树。③红黑树:是许多二叉查找树中的一种,不严格的平衡二叉树,即不像AVL那样要求节点的 |balFact| <= 1,它只要求部分达到平衡,但是提出了为节点增原创 2021-03-11 14:55:01 · 4073 阅读 · 2 评论 -
ES索引结构、存储原理及 增量添加索引
ES索引结构及存储原理ES(ElasticSearch)是一款分布式全文检索框架,底层基于基于Lucene实现。Elasticsearch中的字段类型可以分为两类:精确值和全文。精确值 如它们听起来那样精确。例如日期或者用户 ID,但字符串也可以表示精确值,例如用户名或邮箱地址。对于精确值来讲,Foo 和 foo 是不同的,2014 和 2014-09-15 也是不同的。另一方面,全文 是指文本数据(通常以人类容易识别的语言书写),例如一个推文的内容或一封邮件的内容。精确值很容易查询。结果是二进制的:原创 2021-03-08 19:32:23 · 4722 阅读 · 1 评论 -
MongoDB的索引与执行计划
索引定义索引(Index)是帮助数据库高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。索引的数据结构现在的数据库(mongo,mysql等)索引多采用B-Tree数据结构,不懂BTree的同学先自行去了解下,个人觉得这篇文章比较易懂一些,http://www.cnblogs.com/coder2012/p/5309197.html为什么使用B-Tree(B+Tree)红黑树等数据结构也可以用来实现索引,但是文件系统及数据库系统普遍采用B-/+Tree作为索引结构。为什么原创 2021-03-04 18:55:24 · 878 阅读 · 2 评论 -
Java服务内存泄漏的排查
一、内存溢出和内存泄露一种通俗的说法。1、内存溢出:你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,出现溢出。2、内存泄漏:你用new申请了一块内存,后来很长时间都不再使用了(按理应该释放),但是因为一直被某个或某些实例所持有导致 GC 不能回收,也就是该被释放的对象没有释放。下面具体介绍。1.1 内存溢出java.lang.OutOfMemoryError,是指程序在申请内存时,没有足够的内存空间供其使用,出现OutOfMemoryError。产生原因产生该错误的原因主转载 2021-03-02 18:39:05 · 532 阅读 · 1 评论 -
BIO、NIO和AIO的区别和应用
先弄清几个概念:1.同步:使用同步IO时,Java自己处理IO读写。2.异步:使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS,完成后OS通知Java处理(回调)。3.阻塞:使用阻塞IO时,Java调用会一直阻塞到读写完成才返回。4.非阻塞:使用非阻塞IO时,如果不能立马读写,Java调用会马上返回,当IO事件分发器通知可读写时在进行读写,不断循环直到读写完成。下面是重点了(敲黑板!)!1.BIO:同步并阻塞,就是传统的 java.io 包,它是基于流模型实现原创 2021-02-25 17:19:02 · 249 阅读 · 0 评论 -
java类加载过程(双亲委派模型)和 破坏双亲委派 及 tomcat类加载器
一、java类加载过程(双亲委派模型)我们先来看一张图片,有助于理解类加载器与类加载过程。概念虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接时候用的Java类型。类的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、(验证、准备、解析)连接、初始化、使用、卸载。其中验证、准备、解析统称为连接上图中,加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须严格按照这种顺序开始。解析阶段原创 2021-02-22 18:38:06 · 495 阅读 · 0 评论 -
SpringAOP配置与使用
SpringAOP简介 面向切面编程(Aspect Oriented Programming)提供了另一种角度来思考程序的结构,通过这种方式弥补面向对象编程(Object Oriented Programming)的不足。除了类以外,AOP提供了切面,切面对关注点进行模块化,例如横切多个类型和对象的事务管理(这些关注点术语通常称作横切(crosscutting)关注点)。Spring AOP是Spring的一个重要组件,但是Spring IOC并不依赖于Spring AOP,这意味着你可以自由选择...转载 2021-02-09 19:28:14 · 102 阅读 · 0 评论 -
java学习笔记——商城项目练习——Activemq整合spring、添加商品时同步到索引库、商品详情页面展示(向业务逻辑中添加缓存)
Activemq整合spring1.1. 使用方法第一步:除了引用activemq的依赖外,还要引用相关的jar包。 <dependency> <groupId>org.springframework</groupId> <...原创 2019-12-19 17:37:22 · 234 阅读 · 0 评论 -
java学习笔记——商城项目练习——solrCloud集群搭建,使用solrJ管理集群,全局异常处理,ActiveMQ基础
solrCloud集群搭建什么是SolrCloudSolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCl...原创 2019-12-17 11:35:23 · 209 阅读 · 0 评论 -
java学习笔记——商城项目练习——solr服务的安装与使用,数据库数据导入solr索引库,solrJ的使用,商城项目搜索功能实现
1,Solr服务搭建1.1. Solr的环境Solr是java开发。需要安装jdk。安装环境Linux。需要安装Tomcat。1.2. 搭建步骤第一步:把solr 的压缩包上传到Linux系统第二步:解压solr。第三步:安装Tomcat到目录/usr/local/solr/下,解...原创 2019-12-09 14:18:11 · 230 阅读 · 0 评论 -
java学习笔记——商城项目练习——redis的安装与使用,Redis集群,Jedis工具类的使用,商场项目使用Redis做缓存
Redis的安装1. Redis的安装 redisd的安装还是比较简单的,直接源码安装也很快。Redis是c语言开发的。安装redis需要c语言的编译环境。如果没有gcc需要在线安装。yum install gcc-c++安装步骤:第一步:redis的源码包上传到linux系统。第二...原创 2019-12-04 14:30:32 · 217 阅读 · 0 评论 -
java学习笔记——mysql的安装与卸载、基本的 SELECT 语句、多表连接查询
mysql的安装与卸载、基本的 SELECT 语句、多表连接查询mysql的安装与卸载图中分别是windows系统下mysql 的64位与32位版本,以及客户端软件,我的系统是64位,所以安装啦64的。卸载找到mysql的安装路径并删除如图:然后打开mysql的安装程序 进行卸载(mysql的安装与卸载都是同一个exe)1.使用360卸载,并强力删除相关东东2.清理注册表: A.HKEY_LOCA...原创 2018-07-02 21:51:28 · 342 阅读 · 0 评论 -
java学习笔记——众筹项目练习——后台manager程序的用户模块-管理员登录功能、树形结构显示插件zTree的简单使用、RBAC权限模型介绍
用户模块-管理员登录功能有了前边我们练习管理员注册功能的基础,这个登录功能就简单多了,无非就是在登录页面取得用户的登录信息,在程序中进行查询数据库的操作,查到了表示,表示用户登录信息正确,登录成功并携带查询到的所有用户信息跳转到控制面板main.jsp,以供后序页面使用。如果没有查到,表示用户登录信息不正确,登录失...原创 2019-04-02 17:13:51 · 2087 阅读 · 0 评论 -
java学习笔记——众筹项目练习——后台manager程序的用户模块-管理员注册功能、form表单校验插件jquery-validation-1.13.1的使用、数据库表保存唯一账号设置
用户模块-管理员注册功能不管是前台程序,还是后台程序都是可以独立运行web服务程序,只是面向的用户不同而已,前台的用户更加广泛(所有需要此功能的用户)。后台的用户则是管理员,用于对整个程序平台的管理。不管是前台还是后台都需要数据库表存储各种信息,都需要界面来与用户进行互动,所以前边我们介绍了数据建模工具(PowerDesig...原创 2019-03-26 20:24:02 · 1769 阅读 · 0 评论 -
java学习笔记——众筹项目练习——数据建模工具(PowerDesigner)与前端框架bootstrap体验
数据建模工具(PowerDesigner)之前我们在生成数据库表的时候生成了许多的数据库表,如果我们在数据库中一张一张的创建每个表,实在是太麻烦了,并且也容易出错。所以这里我们需要使用数据建模工具(PowerDesigner)。(PowerDesigner)为我们提供了方便的数据库表设计方法,这里简单了解一下吧! 安装 安...原创 2019-03-20 19:27:12 · 802 阅读 · 0 评论 -
java学习笔记——众筹项目练习——基于maven的基础环境搭建
基于maven的基础环境搭建前面我们学习了如何使用maven,今天我们就使用maven来搭建一个基础的开发环境:根据项目模块进行拆分与依赖、根据maven整合ssm。 项目模块间的分包与依赖 为了在项目开发时更加简洁与快速,我们会对整个项目进行拆分,拆分的方式有两种:横线拆分与纵向拆分,横向拆分是...原创 2019-03-14 20:28:54 · 835 阅读 · 0 评论 -
java学习笔记——众筹项目练习——maven的安装与使用
Maven经过前面ssm等知识的学习,从这篇开始打算着手众筹小项目的练习,用于融合之前学过的知识,以此来记录自己的学习过程;首先来学习使用maven。1.Maven简介 1.1 Maven翻译为“专家”,“内行”1.2 Maven是跨平台的项目管理工具。作为Apache组织提供...原创 2019-02-12 11:38:34 · 783 阅读 · 0 评论 -
java学习笔记——mybatis 之 ssm整合
SSM整合前面我们学习了spring 、springmvc和 mybatis,今天我们来整合一下,集成开发环境,让他们能够一起为我们工作;SSM;Spring+SpringMVC+MyBatis1、导包 1)、Spring【aop核心】com.spri...原创 2019-01-23 16:23:50 · 204 阅读 · 0 评论 -
java学习笔记——mybatis 之 两个关于mybatis知识的补充(MBG-逆向工程 与 分页插件pageHelper)
MBG-逆向工程 MBG:MyBatis Generator:代码生成器;MyBatis官方提供的代码生成器;帮我们逆向生成;正向:table----javaBean---BookDao---dao.xml---xxx逆向工程:(table表需要我们自己创建)根据数据表t...原创 2019-01-28 17:14:33 · 295 阅读 · 0 评论 -
java学习笔记——众筹项目练习——后台manager程序--权限管理的全部功能,模糊查询数据的分页显示,全选与单选的联动,模态框与zTree的联合使用,RBAC权限模型的简单使用
权限管理在前面我练习了管理员的注册和登录,并成功的登录到了控制面板main.jsp页面,今天我们就来试着实现一下控制面板页面中的功能。在控制面板中,我们最先注意到的也是最重要的功能就是权限管理,并且在前面的文章中也介绍了RBAC权限模型的概念与数据库中表的实现。好,我们一起一点一点的来完...原创 2019-05-22 19:30:02 · 688 阅读 · 0 评论 -
java学习笔记——众筹项目练习——邮件开发
邮件开发前一篇文章我们完成了众筹项目中manager程序当中的整个权限管理的开发,项目中普通的增删改查,RBAC权限模型、以及页面中树形结构的显示,模态框的显示,我们都已经了解啦!接下来呢!我们应该尝试新的功能啦,也是很多程序都拥有的基本功能,(忘记密码与自动登录功能),相信这两个功能对我们来说...原创 2019-05-30 20:33:49 · 1621 阅读 · 0 评论 -
java学习笔记——众筹项目练习——项目中的忘记密码(密码找回)与记住我(自动登录)功能 和 返回json数据低版本浏览器显示下载问题的解决、众筹系统架构重构
忘记密码(密码找回) 忘记密码(密码找回)这个功能可以说是目前所有为别人提供服务的软件系统都具备的基础功能啦!很普遍,因为总会有人忘记了自己的密码,这个时候就会选择忘记密码功能,根据自己注册账号时使用的证件号码(比如邮箱地址、手机号码、身份证号等)以某种方式(比如发邮件、发送手机短信息等)来重新设...原创 2019-06-10 16:02:04 · 1648 阅读 · 0 评论 -
java学习笔记——众筹项目练习——工作流程框架Activiti5
工作流程框架Activiti5在我们实际的项目开发中,有时业务流程很复杂,类似的业务也很多。这样我们开发起来就会很复杂。像我们练习的众筹网项目中的资质认证模块,开发时的功能不过就是简单的增删改查,可是业务流程很繁琐,同时又有很多种情况。如果我们不使用工具自己来开发的话就会很麻烦!这时我们就需要使用工作流程框架啦!Acti...原创 2019-06-18 16:16:08 · 691 阅读 · 0 评论 -
java学习笔记——众筹项目练习——后台manager程序广告管理、使用ajax发送数据
manager程序广告管理我们的众筹项目是由两个子系统组成的,管理员使用的manager系统和会员使用的众筹系统。在前面的文章中我们基本上已经将manager程序中的正删改查功能都介绍完啦!今天本来打算开始实行前台会员使用的众筹系统,可是打开众筹系统首页的原型页面时想到,首页展示的3个广告哪里来的???靠!当...原创 2019-06-26 17:53:41 · 373 阅读 · 1 评论 -
java学习笔记——众筹项目练习——前台web系统的注册、登录功能(使用httpclient进行远程调用),后台系统中的流程管理功能(activiti在项目中的使用)
前台web系统的注册、登录功能(httpclient的使用)现在我们来实现一下前台web端系统的注册与登录功能!在前边的文章中,我们对整个众筹系统的组织机构有了一些了解,整个系统中manager-web、scw-portal、scw-restapi三个项目时可以独立运行的war项目。manager-web是专门为系统管理人员提供服务的后台系统。scw-...原创 2019-07-24 19:47:10 · 602 阅读 · 0 评论 -
java学习笔记——众筹项目练习——前台系统的实名认证功能、ajax发送跨域请求、后台manager系统的实名认证人工审核
实名认证功能前面的文章中我们实现了后台manager系统中的流程管理功能,并且将实名认证的流程上传到了服务器并完成部署。不过,仅仅是长传和部署当然不是我们的目的啦!我们上传这个实名认证流程时为了可以让前台的广大用户可以使用这个流程,怎么才能使用这个功能呢?那当然是每个用户都需要的实名认证功能啦!...原创 2019-08-09 20:01:26 · 1760 阅读 · 1 评论 -
java学习笔记——众筹项目练习——文件上传进度条、quartz石英调度
文件上传进度条 还记得在前面的文章我们实现的功能当中有文件上传的功能吗?今天我们来为文件上传美化一下,添加一个文件上传的进度条来实时显示文件上传的进度。说干就干!实现方法很简单,也就不使用任何插件了,我们的文件上传是使用ajax实现的。那我们就在ajax中获取到文件上传的实时信息,并这些实时信息显示在...原创 2019-08-16 19:58:33 · 340 阅读 · 2 评论 -
java学习笔记——mybatis 之 动态SQL、_parameter变量与_databaseId 变量、OGNL了解、缓存与添加第三方缓存库EHChache
前面学习使用mybatis时会发现,我们之前自己在程序中写sql访问数据库时,有时候情况会很复杂,需要程序自己根据实际的情况,进行各种判断,进行拼接字符串,最终生成响应的sql语句,列如:string sql;sql += "select * from t_cat";if(name != null && name != ""){sql += "name =...原创 2018-12-24 18:20:23 · 422 阅读 · 0 评论 -
java学习笔记——mybatis 之 mybatis介绍 、 helloworld程序 、全局配置文件 、SQL映射文件
1、MyBatis简介 希望:最好有一个框架能支持定制化sql,而且还功能强大;sql也不要硬编码在java文件中(导致维护修改起来比较麻烦); 1)、MyBatis将重要的步骤抽取出来可以人工定制,其他步骤自动化;2)、重要步骤都是写在配置文件中(好维护);3)、完全解决数据库的优化问题;4)、MyBatis底层就是对原生JDBC的一个简...原创 2018-09-25 18:19:10 · 198 阅读 · 0 评论 -
java学习笔记——概述、与开发环境搭建
java代码: class HelloJava { /* 程序的入口:main 方法 */ public static void main(String[] args) { //打印个人信息 System.out.print...原创 2018-06-21 20:46:16 · 129 阅读 · 0 评论 -
java学习笔记——集合与泛型
Collection系列集合1. 数组的弊端:①数组的长度不可变 ②数组中没有提供可以查看有效元素个数的办法2. 集合的特点: ①集合的长度是可变的②集合可以添加任意类型的对象③集合中只能存对象 3.集合框架 java.util.Collection 接口: 是集合层次的根接口 |-- java.util.List 接口:有序的,允许重复的。因为 List 系列集合都具有索引值 ...原创 2018-06-27 21:08:24 · 949 阅读 · 0 评论 -
java学习笔记——xml的使用
xml的使用 先贴代码:books.xml:<?xml version="1.0" encoding="UTF-8"?><books> <book sn="SN12341232"> <name>辟邪剑谱</name> <price&原创 2018-07-16 20:41:57 · 256 阅读 · 0 评论 -
java学习笔记——mysql的单行函数、分组函数、子查询、表的创建与管理
mysql的单行函数#单行函数-- 1. 日期函数SELECT NOW();-- 2. 字符函数SELECT LOWER('HelloWorld'), UPPER('HelloWorld');SELECT LOWER(last_name), UPPER(last_name)FROM employees;/*CONCAT('Hello', 'World')SUBSTR('HelloWorld',1,...原创 2018-07-03 22:33:42 · 370 阅读 · 0 评论 -
java学习笔记——IO流
一、IO 流的分类:按数据不同:字节流、字符流(字符流用于操作文本文件 .txt .java 字节流用于操作非文本文件 .avi .jpg .mp3)按流向不同:输入流、输出流(以程序为主体)按角色不同:节点流、处理流二、IO 流的结构:抽象基类 节点流 缓冲流(处理流的一种)InputStream ...原创 2018-06-28 17:09:53 · 224 阅读 · 0 评论