Java
healing97
热爱工作,热爱生活
展开
-
JDBC连接数据库
package dao;import java.io.FileInputStream;import java.io.IOException;import java.sql.*;import java.util.Properties;public class JdbcTest { private String jdbcDriver; private String jdbcUrl; private String userName; private String pa原创 2020-09-29 16:54:25 · 136 阅读 · 0 评论 -
JVM系列之初识JVM《三》
从上一篇博文中,我们了解到JVM内存模型、加载器等内容,这一篇我们了解一下类的加载阶段用到的双亲委派模型。类的加载过程一个类继承层次很多,这就是有时候JVM会很慢的原因。双亲委派模型1.先从子类加载器到顶级类加载器,查找当前类加载器在之前有没有加载过这个类,如果加载过,此时返回这个类的class对象。2.如果没有加载过这个类。那么此时,应该从父类到子类依次尝试加载。(加载是否成功,就看这个类是否在三种类加载器的管辖范围之内)。本人才疏学浅,如有错误烦请指出,谢谢!..原创 2020-06-15 13:35:13 · 143 阅读 · 0 评论 -
JVM系列之初识JVM《二》
从前面的博文中,我们了解到Java的跨平台性以及JVM的生命周期以及工作原理,接下来我们来了解JVM的加载系统等。JVM架构图基础介绍将JVM划分为三个主要的子系统类装载子系统(Class Loader Subsystem)运行时数据区(Runtime Data Areas)执行引擎(Execution Engine)类装载子系统Java的动态类装载功能是由类装载子系统实现,可以装载,连接,初始化文件加载:功能是加载类,共有三种类加载器,Boot Strap Class原创 2020-06-15 13:14:15 · 149 阅读 · 0 评论 -
JVM系列之初识JVM《一》
Java的跨平台性Java中提到跨平台,想到的是JVM,但是能跨平台的是Java程序,而不是JVM。JVM是用C/C++开发的,是编译后的机器码,是不能跨平台,不同的平台需要安装不同版本的JVM编写的Java文件,编译之后生成.class文件,称之为字节码文件,Java虚拟机(JVM)负责将字节码文件翻译乘法特定平台的机器码后才能运行。即只要在不同的平台上安装对应的JVM,然后运行字节码文件,即运行Java程序在这个过程中,编写的Java程序没有改变,仅仅是通过JVM这个中间层,就能在不同的平台上运原创 2020-06-15 13:00:41 · 169 阅读 · 0 评论 -
static 关键字
static 关键字1.static 修饰成员变量 类名.静态变量静态变量和成员变量之间的区别:成员变量:堆 一份对象对应一份成员变量 this.name静态变量:方法区 一个类对应一个静态变量(多个对象操作同一个静态变量)(类变量) People.name2.static 修饰成员方法静态方法和成员方法之间区别:有无this引用3.静态块static { ...原创 2020-05-07 21:36:11 · 90 阅读 · 0 评论 -
Iterator 怎么使用?有什么特点?
Java中的Iterator功能比较简单,并且只能单向移动:(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。(2) 使用next()获得序列中的下一个元素。(3) 使用...原创 2020-05-06 11:57:59 · 3334 阅读 · 0 评论 -
HashMap和HashTable的区别
HashMapt和HashTable的区别HashMap和HashTable的区别继承的父类不同HashTable继承自Dictionary类,实现Map接口HashMap继承自AbstractMap类,实现Map接口线程安全性不同HashTable中的方法时synchronized,而HashMap中的方法在缺省情况下是非synchronized是否提供contain...原创 2020-05-05 22:13:32 · 96 阅读 · 0 评论 -
StringBuffer和StringBuilder,String的区别
StringBuffer和StringBuilder,String的区别Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们都可以存储和操作字符串 String 一个Java对象,只读字符串,引用的字符串内容不能被改变;如下,str仅仅是一个引用对象,它指向一个字符串对象“abc”。而str = "def" 的含义是让str重新...原创 2020-05-05 22:07:12 · 90 阅读 · 0 评论 -
synchronized关键字
synchronized关键字线程安全的解决方案还有Synchronized,提供了线程同步的方式Synchronized的使用方式关键字可以修饰方法或者代码块,确保多个线程在同一时刻,只能有一个线程处理方法或者是同步块,保证线程对访问变量的可见性,有序性,原子性1.修饰普通方法 //修饰普通方法 public synchronized void add() { ...原创 2020-05-05 20:53:50 · 226 阅读 · 0 评论 -
Java继承、多态接口和抽象类总结
一、继承(extends)继承的理解:当我们定义很多部分具有相同属性和行为的类时,如果使用之前我们所讲类的定义方式进行定义,那么是不是发现有大量的代码重复书写,为了允许使用现有的类的功能,并在无须改写原来的类的情况下,引入了继承的概念。我们把允许重用现有类称为基类(或超类,父类),由基类派生出来的类称为派生类(子类)。Java类的继承主要通过extends关键字来完成的。一旦继承后,子类将获...原创 2020-04-29 18:15:37 · 527 阅读 · 0 评论 -
死锁详解
死锁的介绍目录死锁的介绍1.什么是死锁死锁是指两个或者两个以上的进程(线程)在执行的过程中,由于竞争资源而造成的阻塞问题,若无外力的作用下会无法继续推进,此时系统称之为死锁状态2.死锁的形成如图所示:将设存在两个线程SetThread和GetThread,现在SetThread持有了ObjectA资源请求资源ObjectB。GetThread持有了ObjectB资源...原创 2020-04-26 17:34:04 · 269 阅读 · 0 评论 -
ConcurrentHashMap详解
ConcurrentHashMap详解HashTable和Vector是线程安全的(本质是Synchronized),其他的集合(ArrayList…)是通过Collections.synchronized*()系列的方法来实现线程安全操作,JDK1.5后提供了线程安全的容器,在Java.util.concurrent包路径下通过继承图可知,线程安全的类在ConcurrentMap接口下,该...原创 2020-04-26 17:09:53 · 2903 阅读 · 0 评论 -
线程调度之用户级调度和系统级调度
用户级调度可以提供的调度方式:调整线程优先级:Java线程有优先级,优先级高的线程获得较多的运行机会(运行时间);static int Max_priority 线程可以具有的最高优先级,值为10;static int MIN_PRIORIYT 线程可以具有的最低优先级,值为1;static int NORM_PRIORITY 分配给线程的默认优先级,值为5;Thread类的setP...原创 2020-04-26 16:48:52 · 722 阅读 · 0 评论 -
Java面试中常被问到的进程与线程你知道多少呢?
1.进程和线程的概念进程是计算机上正在执行的一个独立的应用程序,进程是一个动态概念,必须是进行状态。如果一个应用程序没有启动,那就不是进程:进程是资源的分配的基本单位(内存、进程ID(PID))线程是组成进程的基本单位,可以完成特定的功能,一个进程是有一个后者多个线程组成的:线程是资源调度的单位2.进程和线程的区别内从空间的区别:进程有独立的内存空间,每个进程之间都是相互独立的。线程...原创 2020-04-26 16:41:43 · 225 阅读 · 0 评论 -
并发和并行的区别
首先我们需要知道,并发和并行都是CPU的手段1.并发是指多个任务在一个时间段呢重复的执行的结构设计运行起来的程序 .exeCPU快速切换给我们产生的同事执行的错觉2.并行真正的同时进行...原创 2020-04-26 16:31:39 · 153 阅读 · 0 评论 -
ReentrantLock源码分析
ReentrantLock的源码分析abstract static class Sync extends AbstractQueuedSynchronizerstatic final class FairSync extends Syncstatic final class NonfairSync extends SyncReentrantLock具体实现委托给内部类(Sync、FairS...原创 2020-04-23 11:36:34 · 207 阅读 · 0 评论 -
ReentrantLock你知道多少呢?
1、公平性锁和非公平性锁非公平性:如果一个线程因为CPU时间全部被其他的线程抢走而无法获得CPU的执行时间,这种状态称之为饥饿,而该线程被称为“饥饿致死”,非公平锁就存在“饥饿”,因为线程得不到CPU的运行时间机会。公平性:所有的线程均能公平性的获取到执行的机会2、Java的线程饥饿原因:1、高优先级的线程抢夺所有的低优先级的线程CPU时间2、线程被永久阻塞在一个等待进入同步块的状态3...原创 2020-04-23 11:24:01 · 180 阅读 · 0 评论 -
JVM面试总结
JVM面试总结1.Java内存区域Java 虚拟机在执行 Java 程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java 虚拟机规范将 JVM 所管理的内存分为以下几个运行时数据区:程序计数器Java 虚拟机栈本地方法栈Java 堆元数据区JDK8 之前,Hotspot 中方法区的实现是永久代(Perm)JDK8 开始使用元空间(Metaspace),以前永久代...原创 2020-04-03 20:47:51 · 105 阅读 · 0 评论 -
Java关键字整理
Java关键字总结1.this:(1)对象内部指代自身的引用(2)解决成员变量和局部变量同名问题(3)可以调用成员变量(4)不能调用局部变量(5)可以调用成员方法(6)在普通方法中可以省略 this(7)在静态方法当中不允许出现 this 关键字2.super:(1)代表对当前对象的直接父类对象的引用(2)可以调用父类的非 private 成员变量和方法(3)super()...原创 2020-04-03 20:19:04 · 215 阅读 · 0 评论 -
Java基本类型、包装类、==&&equals()、装箱&&拆箱
什么是包装类?为什么要有包装类?基本类型与包装类如何转换?1.Java 中有 8 个基本类型,分别对应的包装类如下byte – Byteboolean – Booleanshort – Shortchar – Characterint – Integerlong – Longfloat – Floatdouble – Double2.为什么要有包装类基本数据类型方便、简单、高...原创 2020-04-03 16:28:07 · 193 阅读 · 0 评论 -
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。 从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。import java.util.ArrayList;class BinaryTree<T extends Comparable<T>>{ static class BinaryTreeNode<T>{ private ...原创 2020-04-01 17:51:50 · 724 阅读 · 0 评论 -
《剑指offer》Java实现(11-20)
《剑指offer》Java实现(11-20)11.给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0public class Solution { public double Power(double base, int exponent) { double resul...原创 2020-03-30 16:56:42 · 88 阅读 · 0 评论 -
输入一个二叉树,输出它的镜像
输入一个二叉树,输出它的镜像class BinaryTree<T extends Comparable<T>>{ static class BinaryTreeNode<T>{ private T value; private BinaryTreeNode<T> leftchild; private BinaryTreeNode<...原创 2020-04-01 14:45:57 · 278 阅读 · 0 评论 -
关键字(final finally finalize static)
关键字(final finally finalize static)一、final修饰类:表示该类不能被继承修饰方法:表示该方法不能被重写修饰变量:表示该变量只能被赋值一次声明数据为常量,可以是编译时常量,也可以是在运行时被初始化后不能被改变的常量。(1)对于基本类型,final 使数值不变;(2)对于引用类型,final 使引用不变,表示该引用只有一次指向对象的机会,也就不能引用其...原创 2020-03-31 15:26:02 · 106 阅读 · 0 评论 -
输入两棵二叉树A,B,判断B是不是A的子结构。
输入两棵二叉树A,B,判断B是不是A的子结构。class BinaryTree<T extends Comparable<T>>{ static class BinaryTreeNode<T>{ private T value; private BinaryTreeNode<T> leftchild; private BinaryTr...原创 2020-03-28 00:11:08 · 144 阅读 · 0 评论 -
快排的优化
快排的优化快排的优化主要针对于递归来讲,快排有三种排序方式,两种优化方案:排序方式:(1):固定位置选取基准法 (2):随机选取基准法 (3):三分取中法优化方案:(1):一定数量的数据范围内采取直接插入排序,因为在排序的过程当中数据越来越有序,直接插入排序时间复杂度更快。(2):聚集相同基准元素法,因为:有可能选取的基准,在左右两面都有相同的元素,我们可以将他们聚集到一起,...原创 2020-03-26 11:00:13 · 383 阅读 · 0 评论 -
Java之接口总结以及和抽象类的区别
Java之接口总结1.接口:为了弥补Java中单根继承的不足,Java中引入了接口。一个类只能继承自一个类,但是可以实现多个接口。在抽象类中,可以包含一个或者多个抽象方法,但是在接口中,所有的方法必须是抽象的,不能有方法体,他比抽象类更加的抽象。接口规定一个雷必须做什么而不规定他如何做。2.接口的特性:接口中只定义抽象方法,默认为public abstract;接口中没有构造方法;接...原创 2020-02-14 16:15:12 · 130 阅读 · 0 评论 -
谈谈面向对象的三大性质
谈谈面向对象的三大性质一. 封装:封装性就是尽可能的隐藏对象内部细节,对外形成一道边界,只保留有限的接口和方法与外界进行交互。封装的原则是使对象以外的部分不能随意的访问和操作对象的内部属性,从而避免了外界对对象内部属性的破坏。可以通过对类的成员设置一定的访问权限,实现类中成员的信息隐藏。四种访问修饰符:**public:**类中限定为public的成员,可以被所有的类访问。protec...原创 2020-03-25 17:49:55 · 390 阅读 · 0 评论 -
线程池详解
线程池详解为什么要使用线程池呢?线程池属于对象池,所有线程池都有一个非常重要的共性,就是为了最大程度的复用对象,因此,线程池最重要的特征就是利用线程。其次,java线程池的编程模型相对于原有的多线程模式来说,还有一大改进,那就是线程代码和业务代码的分离。常用的线程池有几种?newSingleThreadExecutor:单线程化的线程池newCachedThreadPool:可缓存线程...原创 2020-03-25 16:47:37 · 161 阅读 · 0 评论 -
实现线程池
实现线程池通过以下方法去实现自定义线程池:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit un...原创 2020-03-22 21:48:27 · 163 阅读 · 0 评论 -
二分查找(递归&非递归)java
二分查找(递归&非递归)javapackage Test;public class binarysearch { //二分查找,递归实现 public static int binarysearch(int[] arr, int val) { int left = 0; int right = arr.length - 1; ...原创 2020-03-22 18:21:42 · 86 阅读 · 0 评论 -
Object里面有什么方法
Object里面有什么方法Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类。这里主要总结Object类中的三个常用方法:toString()、equals()、hashCode()。1.取得对象信息的方法:toString()该方法在打印对象时被调用,将对象信息变为字符串返回,默认输出对象地址。 class Pe...原创 2020-03-21 19:19:51 · 285 阅读 · 0 评论 -
GC算法及几种垃圾收集器
GC算法及几种垃圾收集器Java中垃圾回收算法有以下4种:标记-清除算法 复制算法 标记-整理算法 分代收集算法下面详细介绍:(1)标记/清除算法标记/清除算法的基本思想就跟它的名字一样,分为“标记”和“清除”两个阶段: 首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象标记阶段: 标记的过程其实就是前面介绍的可达性分析算法的过程,遍历所有的 GC Ro...原创 2020-03-20 18:11:08 · 732 阅读 · 0 评论 -
Java虚拟机的内存布局
Java虚拟机的内存布局JVM是Java提出的核心概念,其中的内存模型(JMM)是JVM的重点,需要我们重点了解掌握JVM内存划分:1、方法区 (线程共享) 常量 静态变量 JIT(即时编译器)编译后代码也在方法区存放2、堆内存(线程共享) 垃圾回收的主要场地3、程序计数器 当前线程执行的字节码的位置指示器4、Java虚拟机栈(栈内存) :保存局部变量,基本数据类型以及堆内存中对象的引...原创 2020-03-20 17:59:09 · 101 阅读 · 0 评论 -
生产者消费者模型
生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。 由于程序运行是线程不安全的,因此可能会出现以下问题: 1、假设生产者线程刚向数据存储空间添加了数据的名称,还没有加入该信息的内容,程序就切换到了消费者线程,消费者线程将把信息的名称和上一个信息的内容联系在一起; 2、生产者生产了若干次数据,消费者才开始取数据,或者是,消费者取完一次数据后,还没等生产者放入新的数据,又重复取出了已取过原创 2020-03-20 17:46:07 · 162 阅读 · 0 评论 -
编码实现一个死锁的例子
public class Test { public static void main(String[] args) { Object lockA = new Object(); Object lockB = new Object(); A a = new A(lockA, lockB); ...原创 2020-03-19 21:41:34 · 115 阅读 · 0 评论 -
List、Set、Map区别
List、Set、Map区别1. Set、List和 Map 的区别(1)Set 、List 和 Map 是 Java 容器框架的三个最重要的接口(2)List 提供了一个有序且有索引的容器,它允许重复值的出现(3)Set 提供了一个无序的唯一对象的容器,Set 不允许重复值(4)Map 提供的则是一个基于键值对以及哈希的数据结构(5) List、Set 和 Map 这三个都是 Jav...原创 2020-03-17 16:24:53 · 119 阅读 · 0 评论 -
重写(Override)和重载(Overlord)详解
重写(Override)和重载(Overlord)详解一.重写(Override)重写是子类对父类的允许访问的方法的实现过程进行编写,返回值和形参都不能改变;重写的好处在于子类可以根据需要,定义特定的自己的行为。也就是子类根据需要实现父类的方法;重写方法不能抛出新的检查异常或者比被重写方法声明更加宽泛的异常。例如:父类的一 个方法申明了一个检查异常 IOException,但是在重写这个...原创 2020-03-10 13:14:24 · 1011 阅读 · 0 评论 -
排序总结(Java实现)
排序总结(Java实现)1.冒泡排序冒泡排序(BubbleSort)算法是一种较简单的排序算法,它在重复访问要排序的元素列时,会依次比较相邻的两个元素,如果左边的元素大于右边的元素,就将二者交换位置,如此重复,直到没有相邻的元素需要交换位置,这时该列表的元素排序完成。该算法名称的由来是越大的元素会经过交换慢慢「浮」到数列的顶端(升序或降序排列),就如同水的气泡最终会上浮到顶端一样。代码实现...原创 2020-03-08 21:13:41 · 87 阅读 · 0 评论 -
二分查找Java实现
1.二分查找Java实现package Test00;//二分查找/* 二分查找又叫做折半查找,要求查找的序列有序,每次查找都取中间位置的值与待查的位置的值比较,如果中间的值比 待查的数值大,则在序列的左半部分继续查找;反之,在右半部分查找。直到查找到关键字位置。 如果没有查找到,则返回-1* */public class binarySearch { publ...原创 2020-03-22 17:18:36 · 238 阅读 · 0 评论