自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

总结经验,与君共勉

总结经验,与君共勉

  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java通过jdbc连接hive

Java通过jdbc连接hive好久没有写博客了,今天开始会陆续将自己在工作中用到的工具及碰到的问题更新到博客中以做记录,期待和大家交流探讨。废话不多说,直接上代码,有问题可以评论区交流,如下为demo示例: <!-- jdbc连接hive所需依赖 --> <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc --> <dependency> <groupId>

2021-12-20 16:37:47 3086

原创 从一道面试题来认识Java类加载过程

下边是一道笔试题:class SingleTon { private static SingleTon singleTon = new SingleTon(); public static int count1; public static int count2 = 0; private SingleTon() { count1++; ...

2020-03-03 16:25:24 329

原创 JVM垃圾回收-如何判断对象是否是垃圾对象?

本章开始学习垃圾回收的过程,垃圾回收的过程首先就是要确定对象是否是垃圾对象,如果是垃圾对象,垃圾回收器才会进行回收。垃圾回收主要又两种算法:引用计数算法和可达性分析算法。一、引用计数算法引用计数算法就是在对象中添加了一个引用计数器,当有地方引用这个对象时,引用计数器的值就加1,当引用失效的时候,引用计数器的值就减1。当引用计数器的值为0时,jvm就开始回收这个对象。简单的来说,在JVM中的栈...

2020-02-27 14:20:21 2174

原创 JVM堆中对象是如何创建的?

一、什么时候会创建对象1、使用new关键字创建对象 Student student = new Student();2、使用Class类的newInstance方法(反射机制)Student student2 = (Student)Class.forName(“Student类全限定名”).newInstance(); // 或者Student stu = Student.class....

2020-01-13 11:43:05 579

原创 JVM内存区域划分

目录一、Java程序执行过程二、Java内存区域三、拓展一、Java程序执行过程首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data A...

2020-01-13 11:28:23 233

原创 Java中的Set集合详解

目录一、简介二、HashSet类三、TreeSet类一、简介Set集合中的元素是无序的且不可重复, 如果试图把两个相同元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入。二、HashSet类HashSet底层数据结构是哈希表,因此具有很好的存取和查找性能。哈希表:一个元素为链表的数组,综合了链表(存储速度快)和数组(查询速度快)的优点。哈希表的...

2020-01-13 10:35:17 5010

原创 Java中的HashMap详解

一、什么是HashMapHashMap继承了AbstractMap,实现了Map接口,存储的是一个键值对对象。二、HashMap数据结构解析1、继承关系:HashMap继承了AbstractMap,实现了Map接口。public abstract class AbstractMap<K,V> implements Map<K,V> {2、常量及构造方法 //...

2020-01-10 17:48:50 2677 1

原创 Java中重载和重写的区别

1、定义区别:①重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。②重写(也叫覆盖)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现不一样。2、类的关系区别重写是子类和父类之间的关系,是垂直关系;重载是同一个类中方法之间的关系,是水平关系。3、产生方法区别重写只能由一个方法或只能...

2020-01-10 16:03:37 406

原创 为什么重写equals方法需同时重写hashCode方法?

1. 为什么要重写equals()方法?因为object中的equals()方法比较的是对象的引用地址是否相等,如何你需要判断对象里的内容是否相等,则需要重写equals()方法。2. Java中有哪些类重写了equals()方法?java中的大部分类都重写了equals()方法,没有重写的类大部分都是自己定义的类,比如说自己定义了一个Person 类,这个就没有重写equals()方法。...

2020-01-10 15:39:48 342

原创 equals() 与 == 的区别?

一、简述区别1、"==",对于基本类型和引用类型的作用是不同的基本类型:比较的是值是否相同;引用类型:比较的是引用是否相同;2、重写后的equals()方法用来比较的是两个对象的内容是否相等,如果没有重写的equals()方法,作用等同于“==”请看一个小例子:String x = "string";String y = "string";String z = new Stri...

2020-01-10 14:28:05 189

原创 Java集合总结

文章目录一、简介二、Collection接口1、Collection接口2、Set集合3、List集合4、Queue集合三、Map集合四、总结一、简介Java集合主要由两个接口派生而来:Collection和Map。大致分为四个体系:List:有序、可重复 (主要有ArrayList、LinkedList、Vector)Set:无序、不可重复 (主要有HashSet、LinkedHash...

2020-01-10 11:24:12 358

原创 StringBuffer和StringBuilder的区别,从源码角度分析

引言很多人都知道String是不可变的,StringBuffer和StringBuilder是可变的,那么为什么呢?首先我们确定一个概念性问题,什么是不可变对象!什么是不可变对象:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态...

2020-01-10 10:16:04 1625

原创 Java并发编程之原子变量和CAS算法

一、简介原子变量最主要的一个特点就是所有的操作都是原子的,synchronized关键字也可以做到对变量的原子操作。只是synchronized的成本相对较高,需要获取锁对象,释放锁对象,如果不能获取到锁,还需要阻塞在阻塞队列上进行等待。而如果单单只是为了解决对变量的原子操作,建议使用原子变量。关于原子变量的介绍,主要涉及以下内容:原子变量的基本概念通过AtomicInteger了解原子变...

2019-12-15 15:51:01 391

原创 Java中 i++ 和 ++i 的区别,及其线程安全问题

一、关于区别,首先看两个j简单的小例子: public static void f4() { int a=0; for(int i=0;i<100;i++){ a = a++; } System.out.println(a); }public static void f4() { ...

2019-12-15 15:32:55 588

原创 i++是线程安全的吗?如何解决线程安全性?

i++是不安全的,前面我们讲解volatile关键字的时候,我们说过了i++是一个复合操作,可分为三个阶段:读值,从内存到寄存器+1,寄存器自增写值,写回内存在这三步之间的都可能会有CPU调度,造成i的值被修改。造成脏读脏写。如果是方法里定义的,一定是线程安全的,因为每个方法栈是线程私有的;如果是类的静态成员变量,i++则不是线程安全的,因为 线程共享栈区,不共享堆区和全局区如何解决线...

2019-12-15 15:24:46 4888

转载 Java关键字 volatile、synchronized和Lock

一、volatile:简介:用来声明变量的值可能随时会受到其它线程的修改,使用volatile修饰的变量被修改后会立即强制将修改后的值写入主存,主存中的值的更新会使缓存中的值失效 。也就是当一条线程修改了共享变量的值,新值对于其他线程来说是可以立即得知的三大特性:1. 可见性当多个线程访问同一个变量时,某一个线程修改了变量的值,其他线程能够立即读取到该变量修改后的值。2. 有序性(禁止指令...

2019-12-15 15:17:04 383

原创 一分钟读懂Java中的volatile关键字

一、volatile简介volatile意为,不稳定的,反复无常的。下边我们具体阐述volatile的三个特性:volatile能保证内存可见性volatile不能保证原子性volatile禁止指令重排序(有序性)它作为Java中的一个关键字,用来声明变量的值可能随时会受到其它线程的修改,使用volatile修饰的变量被修改后会立即强制将修改后的值写入主存,主存中的值的更新会使缓存...

2019-12-15 15:03:57 166

原创 Java中final、static关键字的作用

final关键字可用于三个地方: 用于修饰类、类属性和类方法。被final修饰的类不能被继承,被final修饰的类属性和类方法不能被覆盖(重写);一、final1. final修饰变量:final意为不可改变,修饰成员变量时可以在生命时初始化或者在构造函数中初始化,修饰局部变量时在使用之前初始化。要是企图改变final修饰等变量值则会编译错误2. final修饰方法:final修饰的方...

2019-12-15 14:57:40 3126

原创 String常见的方法

请问String常见的方法有哪些,列举几个?length(); //计算字符串长度equals(); //比较两个字符串subString(); //截取字符串concat();//连接两个字符串replace(); //替换valueOf(); //转换为字符串charAt(); //截取一个字符串getChars(); //截取多个字符串indexOf()...

2019-12-15 14:46:41 172

原创 String拼接字符串效率低,你知道原因吗?

为什么String用"+"拼接字符串效率低下,最好能从JVM角度谈谈吗?对于这个问题,我们先来看看如下代码:public class StringTest { public static void main(String[] args) { String a = "abc"; String b = "def"; String c = a + b; String d = "a...

2019-12-15 14:42:45 1093

原创 String s = new String("abc");产生了几个对象?

对于这个问题,老套路先上代码:public class StringTest { public static void main(String[] args){ String s1="Hello"; String s2="Hello"; String s3=new String("Hello"); System.out.println("s1和s2 引用地址是否相同:"+(s1...

2019-12-15 14:38:01 3824 3

原创 String为什么是不可变的

在介绍之前首先我们要知道什么 是不可变对象?如果一个对象,在它创建完成之后,不能再改变它的状态(指不能改变对象内的成员变量),那么这个对象就是不可变的。首先我们来看一段代码:public class Demo { String str = "ABC"; System.out.println("s = " + str); str = "123"; System....

2019-12-15 14:32:34 1152 1

原创 什么是字符串常量池?

一、什么是常量池为了提高性能和减少开销,JVM提供了一个特殊的内存——常量池常量池,顾名思义:就是存储常量的内存空间,有String字符串常量池、包装类常量池等String对象的创建形式:String str1 = new String(); String str2 = "abc";编译期与运行期:编译期:.java—>.class的过程,String str = “abc”...

2019-12-15 14:19:09 2001

原创 mysql报错:ORDER BY clause is not in GROUP BY clause and contains nonaggregated column

在mysql5.7之后的版本运行sql语句时,出现以下问题:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally de...

2019-12-05 13:35:48 12378

原创 【设计模式】Template 模板模式

是什么:顾名思义,就是通过模板拓印的方式, 定义模板采用抽象类来定义,公共的结构化逻辑需要在抽象类中完成,只将非公共的部分逻辑抽象成抽象方法,留待子类充实实现。AbstractClass:实现一个模板方法,定义了算法的骨架,具体子类将重定义PrimitiveOperation以实现一个算法的步骤。AbstractClass其实就是一个抽象模板,定义并实现了一个模板方法。ConcreteC...

2019-12-05 11:23:37 121

原创 【设计模式】Prototype 原型模式

概述:原型模式是创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的。原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。应用场景:资源优化场景,类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等。性能和...

2019-12-05 11:05:19 148

原创 【设计模式】Strategy 策略模式

策略模式是什么?策略是对算法的封装,是一种形为模式,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。为什么要用?优点:1.扩展性良好;2.避免使用多重条件判断,遵循开闭原则;3.算法可以自由切换。缺点:1.所有策略类都需要对外暴露;2.策略类会增多。怎么用?策略模式有以下几个概念:Strategy接口:定义每个策略或算法必须具有的方法和属性。Conc...

2019-12-05 10:20:44 135

原创 【设计模式】Delegate 委派模式

这里我以一个简单的例子来形容,公司有大boss和部门leader以及部门里的员工,现在大boss给部门leader下达了任务,而作为部门leader肯定是对任务进行具体的规划然后委派给部门里的员工去完成。这中间的关系就类似于委派模式。作为大boss他可以不知道任务具体是哪个员工做的,甚至可以不知道员工的存在,只要以结果为导向,最终能完成任务就可以。作为部门leader相当于一个中介,全程跟进员工的...

2019-12-05 10:04:53 166

原创 【设计模式】Factory 工厂模式

工厂是干嘛的?工厂肯定是生产东西的,在面向对象编程的世界里,工厂是用来生产对象实例的。一个工厂生产的东西是有共性的,比如生产手机的工厂,可以抽象出一个phone接口, 在Java世界中具有共性的东西叫什么:Interface或者abstract class。许多implements 一个interface或者extends 一个抽象类的子类因为其接口或者父类而具有了共性。下边借用生产手机...

2019-12-04 16:56:35 134

原创 【设计模式】Proxy 代理模式

我认为设计模式是:一种思想,一种模式,一种套路,一种解决问题的高效策略。下边借用网上常见的一种例子来解释代理模式。什么是代理模式:代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。为什么要用代理模式:一般是因为客户端不想直接访问实际的对象,或者访问实际的对象存在困难,因此通过一个代理对象...

2019-12-04 15:33:55 185

原创 【设计模式】Singleton 单例模式

所谓单例,就是整个程序有且仅有一个实例。该类负责创建自己的对象,同时确保只有一个对象被创建。使用单例模式可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收。特点 类构造器私有 持有自己类型的属性 对外提供获取实例的静态方法 一、应用场景:开发项目时候多个功能模块都需要写log。为了把log集中处理,便于分析,log对象可以是单例的。 有一个...

2019-12-04 14:18:14 131

原创 String str="i"与 String str=new String(“i”)一样吗?

String x = "张三";String y = "张三";String z = new String("张三");System.out.println(x == y); // trueSystem.out.println(x == z); // false为什么会输出上边的结果呢,String x = "张三" 的方式,Java 虚拟机会将其分配到常量池中,而常量池中没有重复的...

2019-05-24 10:16:35 16265 8

原创 RabbitMQ学习笔记(一):RabbitMQ入门及Linux安装RabbitMQ

一、RabbitMQ的基本概念RabbitMQ简介: RabbitMQ是一个消息代理:它接受和转发消息。你可以把它想象成一个邮局:当你把你想要发布的邮件放在邮箱中时,你可以确定邮差先生最终将邮件发送给你的收件人。在这个比喻中,RabbitMQ是邮政信箱,邮局和邮递员。 RabbitMQ和邮局的主要区别在于它不处理纸张,而是接受,存储和转发二进制数据块 - 消息。引自(htt...

2019-04-08 11:04:42 274

原创 Docker学习笔记(二): win7 安装Docker

获取Docker Toolbox打开官网https://docs.docker.com/点击Get Docker链接。在页面的左侧菜单中点击 Docker Toolbox(legacy) ->Install Toolbox on Windows。这里说了Docker Toolbox提供一种让老的windows操作系统使用Docker的方法,点击Get Docker Toolbox ...

2019-01-18 15:30:44 201

原创 Docker学习笔记(一): Docker概念整理

【前言】 在计算机技术日新月异的今天, Docker 在国内发展的如火如荼。特别是在一线互联网公司 Docker 的使用是十分普遍的。说到Doker,首先得先说一下虚拟机,它可以在一种操作系统里面运行另一种操作系统,比如在在Windows系统里运行Linux系统,但是虚拟机有几个缺点: 资源占用多。虚拟机会独占一部分内存和硬盘空间,需要几百MB的内存才能运行 冗余步骤多。虚拟机...

2019-01-18 15:30:23 228

原创 【MySQL】MySQL的安装与配置

目录一、Windows下MySQL的安装与配置二、Linux上MySQL的安装与配置一、Windows下MySQL的安装与配置1、下载安装包:下载地址:https://dev.mysql.com/downloads/mysql/这里一般显示的是mysql的最新版本-------------------------------------------------...

2018-10-29 14:18:06 531

原创 jdk安装和配置环境变量

1、jdk8官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html先点一下接受,然后下载相应的版本,如果不能下载,下去注册一个Oracle账号,以后也能用到。我的百度云下载地址:windows链接:https://pan.baidu.com/s/1qVg...

2018-10-29 10:50:21 416

springboot中RabbitMQ消息Demo

RabbitMQ是一个消息代理:它接受和转发消息。你可以把它想象成一个邮局:当你把你想要发布的邮件放在邮箱中时,你可以确定邮差先生最终将邮件发送给你的收件人。在这个比喻中,RabbitMQ是邮政信箱,邮局和邮递员。 本资源可以让初学者快速入门,注释清晰,使用过程中遇到问题可以一起交流。

2019-04-18

空空如也

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

TA关注的人

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