
java
文章平均质量分 88
爱吃土豆的小师傅
这个作者很懒,什么都没留下…
展开
-
RocketMQ安装与简单使用
写在前面: 1.消息中间件的发展:第一代以ActiveMQ为代表,遵循JMS(java消息服务)规范第二代以RabbitMQ为代表是一个有Erlang语言开发的AMQP(高...原创 2019-04-22 11:54:08 · 2455 阅读 · 0 评论 -
字节码操控框架ASM - 初识
写在前面:ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。简单点说,通过 javac 将 .java 文件编译成原创 2021-01-14 16:06:10 · 553 阅读 · 1 评论 -
Mybati源码解读|缓存介绍
写在前面:mybatis原理的话就几个技术点。反射,动态代理,缓存。一,原理分析最原始的mybatis示例代码。mybatis-config.xml:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><原创 2021-01-05 16:59:39 · 248 阅读 · 0 评论 -
设计模式 | 装饰者模式
写在前面:上班族大多都有睡懒觉的习惯,每天早上上班时间都很紧张,于是很多人为了多睡一会,就会用方便的方式解决早餐问题。有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么“加码”,都还是一个煎饼。在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等,都是装饰器模式。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰模式来实现。一,装饰者模式1.1.原创 2021-01-05 10:58:18 · 163 阅读 · 0 评论 -
设计模式 | 适配器模式
写在前面:在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成本又很高,这时用适配器模式能很好地解决这些问题。一,适配器模式1.1,概念适配器模式(Adapt.原创 2021-01-05 09:26:25 · 153 阅读 · 0 评论 -
设计模式 | 结构型模式
写在前面:结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。结构型模式分为以下 7 种:代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。 适配器(Adapter)模式:将一个类的接口转换原创 2021-01-04 15:55:33 · 182 阅读 · 0 评论 -
设计模式 | 原型模式
写在前面:在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。一,原型模式1.1,概念原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装.原创 2021-01-04 15:23:35 · 256 阅读 · 0 评论 -
设计模式 | 建造者模式
写在前面:在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 CPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计算机的采购员。以上所有这些产品都是由多个部件构成的,各个部件可以灵活选择,但其创建步骤都大同小异。这类产品的创建无法用前面介绍的工厂模式描述,只有建造者模式可以很好地描述该类产品的原创 2021-01-03 23:04:00 · 180 阅读 · 0 评论 -
设计模式 | 工厂模式
写在前面:现实生活中,原始社会自给自足(没有工厂),农耕社会小作坊(简单工厂,民间酒坊),工业革命流水线(工厂方法,自产自销),现代产业链代工厂(抽象工厂,富士康)。我们的项目代码同样是由简到繁一步一步迭代而来的,但对于调用者来说,却越来越简单。工厂模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。我原创 2021-01-03 14:18:57 · 195 阅读 · 0 评论 -
JAVA七大设计模式原则
写在前面:在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。一,开闭原则(Open-Closed Principle, OCP)1.1,定义开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。强调的是用抽象构建框架,用实现扩展细节。开闭原则,是面向对象设计中最基础的设计原则。它指导我们如何建立稳定灵活的原创 2021-01-02 17:25:32 · 400 阅读 · 0 评论 -
I/O流(3)-NIO
写在前面:NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。传统IO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。NIO和传统IO(一下简称IO)之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读原创 2020-12-28 17:58:50 · 238 阅读 · 0 评论 -
Java并发包之CountDownLatch,Semaphore,CyclicBarrier用法
写在前面:CountDownLatch计数器闭锁是一个能阻塞主线程,让其他线程满足特定条件下主线程再继续执行的线程同步工具。Latch闭锁的意思,是一种同步的工具类。类似于一扇门:在闭锁到达结束状态之前,这扇门一直是关闭着的,不允许任何线程通过,当到达结束状态时,这扇门会打开并允许所有的线程通过。且当门打开了,就永远保持打开状态。CountDowmLatch是一种灵活的闭锁实现,包含一个计数器,该计算器初始化为一个正数,表示需要等待事件的数量。countDown方法递减计数器,表示有一个事件发生原创 2020-12-21 16:08:53 · 198 阅读 · 0 评论 -
数据结构与算法—(java实现)
写在前面:一,冒泡排序 基本思想 对当前还未排好序的范围内的全部数,自左向右对相邻的俩个数依次进行比较和调整,让较大的数下沉,较小的数往上冒。即:每当俩相邻的数比较后发现他们的排序与排序的要求相反时,就将他们交换。每次遍历都可确定一个最大值放到待排数组的末尾,下次遍历,对该最大值以及它之后的元素不再排序。 java代码实现 public static void main(String[] args){ int arr[] = {11,2,3,5,6,8,9.原创 2020-12-09 14:11:04 · 220 阅读 · 0 评论 -
Java基础篇 - 强引用、弱引用、软引用和虚引用
前言:Java执行GC判断对象是否存活有两种方式其中一种是引用计数。引用计数:Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于(reachable)可达状态,程序才能使用它。从JDK 1.2版本开始,对象的引用被划分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。.翻译 2020-07-01 10:39:21 · 150 阅读 · 0 评论 -
java 锁 Lock接口详解
一:java.util.concurrent.locks包下常用的类与接口(lock是jdk 1.5后新增的) (1)Lock和ReadWriteLock是两大锁的根接口,Lock代表实现类是ReentrantLock(可重入锁),ReadWriteLock(读写锁)的代表实现类是ReentrantReadWriteLock。 Lock 接口支持那些语义不同(重入、公平等)的锁...原创 2020-04-01 10:18:40 · 329 阅读 · 0 评论 -
jstack分析线程状态
背景记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占用着cpu资源,那又如何查看占用cpu较高的线程?import java.util.concurrent.Executor;import java.util.concurrent.Executors;public clas...原创 2020-03-30 18:08:27 · 282 阅读 · 0 评论 -
java线程-wait,notify等方法详解以及状态转换
写在前面:一,解释一下wait(), wait(long minutes),notify(),notifyAll(),yield()的含义与区别:1. wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法”,当前线程被唤醒(进入“就绪状态”)2.wait(long...原创 2020-03-30 17:59:12 · 1523 阅读 · 0 评论 -
Java 之 AtomicReference
写在前面:AtomicReference类提供了一个可以原子读写的对象引用变量。 原子意味着尝试更改相同AtomicReference的多个线程(例如,使用比较和交换操作)不会使AtomicReference最终达到不一致的状态。 AtomicReference甚至有一个先进的compareAndSet(object expect. object update)方法,它可以将引用与预期值(引用...转载 2020-03-17 14:05:05 · 710 阅读 · 0 评论 -
【java8新特性】兰姆达表达式-2
一、函数式接口函数式接口(functional interface 也叫功能性接口,其实是同一个东西)。简单来说,函数式接口是只包含一个方法的接口。比如Java标准库中的java.lang.Runnable和 java.util.Comparator都是典型的函数式接口。 java 8提供 @FunctionalInterface作为注解,这个注解是非必须的,只要接口符合函数式接口的标准(...原创 2018-08-13 19:38:13 · 693 阅读 · 2 评论 -
Jenkins学习之自动构建部署maven项目
一、前置条件操作的机子上已经安装了tomcat、maven、git、jdk我的操作系统是windowsjenkins版本:2.150二、下载jenkins部署并启动点击jenkins下载jenkins war包将jenkins的war包放入tomcat目录下的webapps目录下启动tomcat,在浏览器输入http://127.0.0.1:8080/jenkins 进行...转载 2018-11-08 17:39:20 · 602 阅读 · 0 评论 -
java基础-JDK、JRE、JVM三者间的关系
JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。Java Runtime Environment(JRE)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核...原创 2019-01-19 17:46:23 · 327 阅读 · 0 评论 -
【java8新特性】兰姆达表达式-3
一、Java 8 Lambda 表达式Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用Lambda 表达式可以使代码变的更加简洁紧凑。1.1 语法lambda 表达式的语法格式如下:(parameters) -> expression或(parameters)...转载 2019-01-22 14:47:19 · 1116 阅读 · 0 评论 -
java基础-JVM(堆内存)
前言 与C语言不同,Java内存(堆内存)的分配与回收由JVM垃圾收集器自动完成,这个特性深受大家欢迎,能够帮助程序员更好的编写代码,本文以HotSpot虚拟机为例,说一说Java GC的那些事。 Java堆内存 我们知道Java堆是被所有线程共享的一块内存区域,所有对象实例和数组都在堆上进行内存分配。为了进行高效的垃圾回收,虚拟机把堆内存划分成新生代(...原创 2019-02-22 14:02:04 · 586 阅读 · 1 评论 -
Centos7搭建FastDfs,并实现java客户端连接
一、FastDFS介绍1、简介FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(St...原创 2019-03-20 10:10:58 · 980 阅读 · 2 评论 -
hibernate使用原生sql查询Hibernate原生SQL多表查询字段名重复问题以及解决方法
注:实际业务中可能比较复杂不得不用原生sql执行时可能会遇到该问题,为了描述问题,本例采用简单的举例表1:tbtask:具有如下列:taskId,name,groupId表2:tbtaskGroup:具有如下列:tbgroupId,name使用原生sql表连接获取task表和group表的name信息select task.name,group.name from ...翻译 2019-04-09 16:38:19 · 978 阅读 · 0 评论 -
redis实现消息队列&发布/订阅模式使用
在项目中用到了redis作为缓存,再学习了ActiveMq之后想着用redis实现简单的消息队列,下面做记录。 Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性能的优先队列。同时在更高层面上,Redis还支持"发布/订阅"的消息模式,可以基于此构建一个聊天系统。一、redis的列表类型天生支持用作消息队列。(类似于MQ的队列模型--任何时候都可以消费...转载 2019-04-16 14:51:38 · 298 阅读 · 0 评论 -
【java8新特性】兰姆达表达式-1
前言java8新特性,速度快,代码少,便于并行,强大的streamAPI,最大化减少空指针异常,本篇博客主要总结一下兰姆达表达式.核心WhyLambda是一个匿名函数,我们可以把Lambda表达式理解为一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁/更灵活的代码.作为一种更紧凑的代码风格,使java的语言表达能力得到了提升.WhatLambda表达式包含三部...原创 2018-08-13 19:33:10 · 1204 阅读 · 0 评论