
Java
Java
IT_10-
我爱编程 编程爱我❤️
展开
-
Mycat基本使用
MycatMycat属于数据库中间件,用于连接Java应用程序和MySQL数据库。主要作用如下:读写分离数据分片垂直拆分(分库)、水平拆分(分表)、垂直+水平拆分(分库分表)多数据源整合原理Mycat原理主要是拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。安装Mycat官网:http://www.mycat.org.cn/我这里选原创 2020-11-17 16:23:53 · 1340 阅读 · 0 评论 -
Java-JSR303 注解使用(普通校验、分组校验、自定义校验)
校验注解(1)给Bean的属性添加注解:javax.validation.constraints.xxx(2)在Controller方法参数上加注解:@Valid@TableName("brand")public class BrandEntity implements Serializable { private static final long serialVersionUID = 1L; // 品牌id @Null(message = "新增不能指定id") @TableId原创 2020-10-10 15:26:14 · 1370 阅读 · 2 评论 -
显示三级列表-数据库设计和查询方法
数据库表设计:CREATE TABLE `pms_category` ( `cat_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分类id', `name` char(50) DEFAULT NULL COMMENT '分类名称', `parent_cid` bigint(20) DEFAULT NULL COMMENT '父分类id', `cat_level` int(11) DEFAULT NULL COMMENT '层级', `s原创 2020-10-05 17:03:26 · 1763 阅读 · 0 评论 -
Listener之实现网站在线人数统计
Java web三大核心组件之一Listener用来监听其他对象的状态改变然后触发相应的事件,三个被监听的域对象:ServletContext、HttpServletRequest、HttpSessionServletContextListener监听器中提供两个方法:public interface ServletContextListener extends EventListener { // 容器初始化的时候执行一次 default void contextInitialized(原创 2020-08-18 22:34:05 · 1536 阅读 · 0 评论 -
让线程按指定顺序执行
课外之余,突然想着用一用win7的家庭组玩玩,让旁边一人访问我电脑上的某个有共享权限的文件夹,然后就开始各种百度。由于每个人的电脑多多少会有些设置的不同,比如防火墙的开关状态、HomeGroup Listener和HomeGroup Provider的启动状态等没有设置好,都会影响到Win7家庭组的建立,当你自己的电脑设置好了,那么另一台电脑也要做类似的设置才能正确访问到你电脑上的共享文件夹。倒...原创 2019-12-17 20:51:04 · 628 阅读 · 0 评论 -
线程池使用总结
不是线程的安全面试官问:“什么是线程安全”,如果你不能很好的回答,那就请往下看吧。论语中有句话叫“学而优则仕”,相信很多人都觉得是“学习好了可以做官”。然而,这样理解却是错的。切记望文生义。同理,“线程安全”也不是指线程的安全,而是指内存的安全。为什么如此说呢?这和操作系统有关。目前主流操作系统都是多任务的,即多个进程同时运行。为了保证安全,每个进程只能访问分配给自己的内存空间,而不能访问...原创 2019-12-02 19:30:15 · 871 阅读 · 0 评论 -
SpringMVC的注解配置原理
META-INF\services\javax.servlet.ServletContainerInitializerweb容器启动的时候,会扫描每个jar包中META-INF\services\javax.servlet.ServletContainerInitializer文件, 加载其中指定的ServletContainerInitializer的实现类,并调用onStartup方法。@HandlesTypes(value = {HelloServlet.class})用于指定一个接口,所有该接口的原创 2020-05-28 21:25:32 · 677 阅读 · 0 评论 -
JUC——ReentrantLock源码简读(中)
前言《JUC——ReentrantLock源码简读(上)》提到会在这篇讨论hasQueuedPredecessors() 方法,为了方便看,再来贴下源码和上篇写的注释:package java.util.concurrent.locks;public class ReentrantLock implements Lock, java.io.Serializable { // ....忽略很多源码 /** * Sync object for fair locks */原创 2020-05-21 12:44:55 · 287 阅读 · 0 评论 -
JUC——ReentrantLock源码简读(上)
先简单说下ReentrantLock的起源最开始Java自带Synchronized关键字保证并发安全,但是它最大的缺点就是它是个重量级锁,线程唤醒和挂起会进行系统调用,触发用户态和内核态的转换,主要是这个过程很耗费资源和性能。基于这个问题,ReentrantLock出现了,在JDK层面上解决线程安全问题。并发模式有两种:交替执行和并发执行。在JDK1.6之前,即使是交替执行模式,Synchronized的做法也是当一个线程来了,就要加锁,执行完了,就要释放锁。而ReentrantLock的做法是,使原创 2020-05-21 11:36:08 · 462 阅读 · 0 评论 -
Spring源码——AOP
文章目录准备分析@EnableAspectJAutoProxy创建MathCalculator的代理对象-前期流程创建MathCalculator的代理对象-中期流程(执行后置处理器)创建MathCalculator的代理对象-后期流程(开始创建)用代理对象执行目标方法拦截器链chainCglibMethodInvocation.proceed()执行拦截器链准备public class MathCalculator { public int div(int i, int j) {原创 2020-05-15 12:34:38 · 560 阅读 · 0 评论 -
Spring源码——容器创建
Spring5.0.2准备public class Blue { public Blue() { System.out.println("Blue---Constructor"); }}@ComponentScan("cn.example.ext")@Configurationpublic class ExtConfig { @Bean public Blue blue() { return new Blue(); }.原创 2020-05-14 20:38:33 · 320 阅读 · 0 评论 -
Spring源码——ApplicationListener
注:摘抄自《阿里巴巴Java开发手册》命名规范代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。说明:定义JQuery变量时,可以用$开头表示该变量为JQuery对象,和JavaScript对象区分。代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。类名使用 UpperCamelCase 风格,必须遵从驼峰形式。 除特殊情形外。方法名、参数名...原创 2019-06-08 16:39:06 · 1543 阅读 · 0 评论 -
Spring源码——BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor
同步和异步同步:一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成。即如果B任务依赖于A任务,则只有当A任务完成后,B任务才算完成,A、B任务要么都成功,要么都失败。异步:不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也是立即执行的,只要自己完成了整个任务就算完成了。即如果B任务依赖于A任务,但是B任务可以在A任务未完成之前完成,...原创 2019-06-27 19:52:35 · 302 阅读 · 0 评论 -
Spring常用注解总结
最近在做项目的时候,用到$.ajax()进行数据交互,然后遇到一个问题,data参数中包含一个提前定义的数组(vararray=[];)这个数组可能为空,只有符合某条件才会向其中插入元素。然后后台接受数据的时候,会去获取array这个参数,但是当array为空的时候,后台无法获取array参数而报错。于是,我去浏览器中产看HTTP请求,发现的确没有将空的array参数传过去。如下: data...原创 2018-09-22 12:34:56 · 5268 阅读 · 0 评论 -
RabbitMQ死信队列详解和使用
死信队列死信,在官网中对应的单词为“Dead Letter”“死信”是RabbitMQ中的一种消息机制,当你在消费消息时,如果队列里的消息出现以下情况:消息被否定确认,使用 channel.basicNack 或 channel.basicReject ,并且此时requeue 属性被设置为false。消息在队列的存活时间超过设置的TTL时间。消息队列的消息数量已经超过最大队列长度。那么该消息将成为“死信”。“死信”消息会被RabbitMQ进行特殊处理,如果配置了死信队列信息,那么该消息将原创 2020-05-09 20:01:53 · 1458 阅读 · 1 评论 -
RabbitMQ之消息确认机制(事务、Confirm)
概述在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的消息丢失,除此之外我们还会遇到一个问题,当消息的发布者在将消息发送出去之后,消息到底有没有正确到达broker代理服务器呢?如果不进行特殊配置的话,默认情况下发布操作是不会返回任何信息给生产者的,也就是默认情况下我们的生产者是不知道消息有没有正确到达broker的,如果在消息到达broker之前已经丢失的话,持久化操作也解决不了这个问题,因为消息根本就没到达代理服务器,你怎么进行持久化,那么这个问题该怎么解决呢?转载 2020-05-09 16:18:59 · 379 阅读 · 0 评论 -
JVM 垃圾回收
如何判断垃圾引用计数给对象设置一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。但是循环引用的对象没法回收。Java中没有采用这种方式。可达性分析哪些对象可以作为根对象?JVM中的根对象分为这几类:【System Class】启动类加载器加载的类对象,如Object、System、String等核心类对象【Native Class】本地方法栈,JVM运行的时候会调用系...原创 2020-04-11 14:30:53 · 1083 阅读 · 0 评论 -
常量池、运行时常量池、字符串常量池
文章目录常量池运行时常量池字符串常量池(StringTable)第一个例子第二个例子JDK8常量池存在于字节码文件中二进制字节码中有:类基本信息、常量池、类方法定义(其中包含虚拟机指令)常量池用于存放编译期生成的各种字面量和符号引用字面量:字面量类似与我们平常说的常量,主要包括:文本字符串:就是我们在代码中能够看到的字符串,例如String a = “aa”。其中”aa”...原创 2020-04-04 21:41:53 · 1201 阅读 · 0 评论 -
synchronized原理详解
文章目录synchronized关键字保证并发三大特性synchronized的两个特性可重入特性不可中断特性synchronized原理monitor监视器锁monitor竞争monitor等待monitor释放monitor是重量级锁JDK6开始对synchronized的优化CASCAS原理CAS适用场景synchronized锁升级过程偏向锁轻量级锁synchronized小结synchr...原创 2020-04-02 13:54:47 · 776 阅读 · 0 评论 -
Java内存模型(JMM)
Java内存模型概念Java内存模型(Java Memory Mode,JMM)用来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下能够达到一致的内存访问效果。Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。Java内存模型和CPU缓存模型类似,是基于CPU缓存模型来建立的,CPU缓存模型如下图,...原创 2020-03-30 23:49:15 · 445 阅读 · 0 评论 -
BIO、NIO、Netty
IO与NIOIONIO面向流(Stream Oriented)面向缓冲区(Buffer Oriented)单线传输双向传输阻塞IO(Blocking IO)非阻塞IO(Non Blocking IO)–选择器(Selectors)传统IO中,“流”就是一个用于数据传输的管道,是一个单向管道,即读取加载磁盘\网络数据时,需要建立一个输入流,将数据...原创 2020-03-27 21:08:22 · 671 阅读 · 0 评论 -
可重入锁和不可重入锁
锁锁就是把代码块、资源或数据(称为临界资源)锁上,访问临界资源的时候只允许一个线程去操作,其他线程必须等待或者放弃,这是为了保证最终程序的正确运行。不可重入锁public class Lock { private boolean isLocked = false; // 标识锁是否被线程获得 public synchronized void lock() throws In...原创 2020-03-15 23:40:22 · 284 阅读 · 0 评论 -
Java中的Serializable接口
SerializableSerializable接口的定义:public interface Serializable {}该接口没有任何属性和方法,这样的接口称为标识接口。标识接口:只是起标识作用,而不解决实际问题,实际问题交给其他机制处理。如上课的时候,学生举手问老师问题,老师帮他解答,其实学生举手就是一个标识,说明自己无法解决某个问题,请求帮助。Java中的Serializabl...原创 2020-03-15 22:05:43 · 741 阅读 · 0 评论 -
Java 遍历集合时删除元素 快速失败和安全失败
遍历集合时删除元素的五种操作import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class Test { public static void main(String[] args) { List<String> list = new Arr...原创 2020-03-14 11:31:44 · 1419 阅读 · 1 评论 -
Comparable接口和Comparator接口的使用和区别
ComparableComparable接口在JDK8中的源码:package java.lang;import java.util.*;package java.lang;public interface Comparable<T> { public int compareTo(T o);}用法:public class User implements C...原创 2020-03-09 11:30:29 · 33359 阅读 · 3 评论 -
MyBatis使用总结
1. MyBatis环境搭建导入jar包坐标:<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4....原创 2020-02-17 23:58:32 · 808 阅读 · 0 评论 -
Dubbo(中篇)
《Dubbo+Zookeeper入门(上篇)》1. Dubbo核心功能Remoting:远程通讯,提供对多种 NIO(Dubbo使用了著名的通信框架:Netty) 框架抽象封装,包括“同步转异步”和“请求-响应”模式的信息交换方式。通讯模型BIO:同步并阻塞;NID:异步并阻塞;AIO:异步非阻塞Cluster:服务框架,提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡...原创 2020-01-29 22:16:21 · 313 阅读 · 0 评论 -
Dubbo+Zookeeper(上篇)
RPC概念RPC(Remote Procedure Call)是指远程过程调用,是一种进程间通信方式,是一种技术思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器)的过程或函数,而不是程序员显示编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。RPC基本原理假设A服务器上的程序要调用B服务器上的程序,A、B服务器上执行的...原创 2020-01-27 00:20:11 · 1500 阅读 · 0 评论 -
JVM 运行时数据区
内存结构图解在《Java类的加载》中学习了类加载器子系统的相关知识,这篇文章学习运行时数据区相关知识。上图运行时数据区中,方法区和堆是一个进程对应一个,其他三个是一个线程对应一个。即假设一个进程有五个线程,则有五组虚拟机栈、程序计数器和本地方法栈,共享一个方法区和堆。程度计数器(PC寄存器)这里并非广义上所指的物理寄存器,JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。寄存器存储指...原创 2020-01-25 15:25:06 · 703 阅读 · 0 评论 -
JVM
虚拟机(Virtual Machine)虚拟机就是一台虚拟的计算机,是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。系统虚拟机,如VMware,完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台程序虚拟机,如JVM,它专门为执行单个计算程序而设计,在JVM中执行的指令称为Java字节码指令Java虚拟机(JVM)Java虚拟机是一...原创 2020-01-23 09:41:06 · 362 阅读 · 0 评论 -
Java类的加载
Java虚拟机与程序的生命周期Java虚拟机结束生命周期的几种情况:执行了System.exit()方法程序正常执行结束程序在执行过程中遇到了异常或错误而异常终止由于操作系统出现错误而导致Java虚拟机进程终止类的加载概念类的加载是指将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法去内,然后在内存中创建一个java.lang.Class对象用来封装类...原创 2020-01-21 23:08:31 · 498 阅读 · 0 评论 -
Lucene简介和使用
全文检索数据分类:结构化数据:格式、长度、类型等固定,如数据库中的数据非结构化数据:格式、长度、类型等不固定,如pdf、html文件数据查询:结构化数据:sql语句非结构化数据:将非结构化数据转换为结构化数据,建立索引然后查询全文检索就是先创建索引然后查询索引的过程全文检索的应用场景:搜索引擎,如百度、谷歌站内搜索,如微博、csdn文章电商搜索,如淘宝、京东等等L...原创 2020-01-19 17:19:10 · 477 阅读 · 0 评论 -
Eureka、Ribbon、Feign简介和使用
Eureka注册中心Spring Cloud中提供服务注册中心来管理微服务信息,解决了如下问题:微服务的ip和端口管理在前后台分离大型架构中,服务层被拆成了很多的微服务,前端要进行远程调用后台提供的接口就需要知道服务端的ip地址和端口,注册中心帮助我们管理这些服务器的ip和端口。微服务的状态管理微服务会实时上报自己的状态,注册中心统一管理这些微服务的状态,将存在问题的服务踢出服务列表,...原创 2020-01-19 00:42:28 · 1958 阅读 · 0 评论 -
实现分布式文件系统FastDFS
分布式文件系统分布式文件系统指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连组成一个文件系统。分布式文件系统解决了海量文件存储及传输、访问速度的瓶颈问题,对海量视频、图片的管理。主流的分布式文件系统有NFS、GFS、HDSFNFS在客户端上映射NFS服务器的驱动器客户端通过网络访问NFS服务器的硬盘完全透明GFSGFS采用主从结构,一个GFS...原创 2020-01-16 13:02:43 · 618 阅读 · 0 评论 -
RabbitMQ简介以及在Spring Boot中使用
在JavaScript中,false类型有: 1.undefined 2.‘ ’ //空字符串 3.null 4.false 5.NaN //值NaN是一个数值,表示一个不能产生正常结果的运算结果,它不能等任何值,包括它自己 6.数字0 其他值都被当做真 true,包括true、字符串“false”、所有对象...原创 2018-07-29 13:55:09 · 1808 阅读 · 0 评论 -
Java new一个对象的过程中发生了什么
java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载。加载并初始化类完成后,再进行对象的创建工作。我们先假设是第一次使用该类,这样的话new一个对象就可以分为两个过程:加载并初始化类和创建对象。一、类加载过程(第一次使用该类)java是使用双亲委派模型来进行类的加载的,所以在描述类加载过程前,我们先看一下它的工作过程:双亲委托...转载 2020-01-13 12:04:45 · 265 阅读 · 0 评论 -
GridFS持久化文件到MongoDB
GridFS是MongoDB提供的用于持久化存储文件的模块。GridFS存储文件是将文件分块存储,文件会按照256KB的大小分割成多个块进行存储,GridFS使用两个集合(collection)存储文件,一个集合是chunks, 用于存储文件的二进制数据;一个集合是files,用于存储文件的元数据信息(文件名称、块大小、上传时间等信息)。GridFS存取文件示例需要的依赖:<depen...原创 2020-01-12 14:37:33 · 513 阅读 · 0 评论 -
Spring Boot+Freemarker
FreemarkerFreemarker是一个用Java开发的模板引擎,一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。也就是说模型+数据=输入(HTML等)Spring Boot+Freemarker目录结构:引入依赖:<dependency> <groupId>org.springframe...原创 2020-01-12 11:42:24 · 1794 阅读 · 0 评论 -
RestTemplate请求http接口示例
SpringMVC提供 RestTemplate请求http接口,RestTemplate的底层可以使用第三方的http客户端工具实现http 的请求,常用的http客户端工具有Apache HttpClient、OkHttpClient等。这里以OkHttpClient为例讲解RestTemplate的用法1.添加依赖<dependency> <groupId>c...原创 2020-01-11 23:08:26 · 543 阅读 · 0 评论 -
Spring IOC容器、Bean对象(基于XML和注解的配置)、依赖注入DI
先通过工厂模式解耦和控制反转的概念引出Spring的IOC容器工厂模式解耦提前将程序所需要的对象信息配置在配置文件中,程序最初运行的时候,利用一个类(工厂类)读取配置文件,把这些对象创建出来并保存(保存在容器中)。程序的其他地方需要用某个对象的时候,这容器中取这个对象即可。工厂类负责读取配置文件、创建并保存对象、提供获取对象的方法Object getBean(id)。控制反转IOC(In...原创 2020-01-07 21:30:43 · 1065 阅读 · 0 评论