JAVA
Wangwq.
这个作者很懒,什么都没留下…
展开
-
== 和 equals() 的区别
对于==如果作用于基本数据类型的变量,则比较其存储位置的 “值” 是否相等。如果作用于引用类型的变量,则比较的是所指向对象的地址。对于 equals()注:equals() 方法不能作用于基本数据类型的变量,equals() 继承 Object 类,比较是否为同一对象。如果没有对 equals() 方法进行重写,则比较的是引用类型的变量所指向的对象的地址。诸如 String、Date类对 equals() 方法进行重写的话,比较的是所指向的对象是否为同一对象。面试题:"" .eq原创 2020-08-08 11:45:08 · 110 阅读 · 0 评论 -
进程与线程
进程和线程的区别是什么?进程是资源分配的最小单位,线程是CPU调度的最小单位。一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线。进程有自己独立的地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段等。线程共享进程中的数据,使用相同的地址空间。因此线程的切换与创建比进程要容易的多。多进程程序更为健壮,多进程程序中每个进程之间都有自己的...原创 2020-02-28 18:12:09 · 130 阅读 · 0 评论 -
synchronized 和 volatile 的区别
前置知识:这两个关键字多用于线程安全中,首先需要理解线程安全的两个方面:执行控制和内存可见。执行控制的目的是控制代码执行(顺序)及是否可以并发执行。内存可见控制的是线程执行结果在内存中对其它线程的可见性。根据Java内存模型的实现,线程在具体执行时,会先拷贝主存数据到线程本地(CPU缓存),操作完成后再把结果从线程本地刷到主存。synchronized 关键字解决执行控制的问题,它会阻止其它线程获取当前对象的监控锁,这样就使得当前对象中被synchronized关键字保护的代码原创 2020-08-07 16:50:42 · 486 阅读 · 0 评论 -
Java 线程池
什么是线程池?答:多线程编程不简单,难点在于多线程代码的执行顺序。所以我们把要执行的多线程交给线程池来处理,通过维护一定数量的线程池来达到多个线程的复用。为什么要使用线程池以及线程池的优势?降低系统的资源消耗。通过重用已存在的线程,降低线程创建和销毁的损耗。提高系统的响应速度。当有任务需要执行时,复用已存在的线程,无需等待新线程的创建便可立即执行。方便线程并发数的管控。若是无限制的创建线程,必定会导致内存占用过多和CPU切换过度。(CPU切换的时间成本:需要保持当前执行线程的现场,并恢复要执行线原创 2020-07-18 14:58:02 · 77 阅读 · 0 评论 -
重写和重载的区别
重写(Overload)重载是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同的参数个数或者类型的同名函数(返回值类型可随意,不能以返回类型作为重载函数的区分标准)同时存在于同一个类中,是一个类中多态性的一种表现(调用方法时通过传递不同参数个数和参数类型来决定具体使用哪个方法的多态性)。重载(Override)重写是父类与子类之间的多态性,实质是对父类的函数进行重新定义,如果在子类中定义某方法与其父类有相同的名称和参数则该方法被重写,不过子类函数的访问修饰权限不能小于父类的;若子类原创 2020-07-12 09:51:41 · 137 阅读 · 0 评论 -
创建线程的三种方式
理解进程和线程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进原创 2020-07-06 21:37:18 · 255 阅读 · 0 评论 -
ArrayList 、Vector 和 LinkedList 的区别
1. 存储结构ArrayList:数组,可直接根据下标来快速查找;但增删慢,需要修改后面的元素Vector:数组,可直接根据下标来快速查找;但增删慢,需要修改后面的元素LinkedList:双向链表,增删方便,仅需处理结点之间的引用;查询慢,需要遍历对比2. 并发安全与否ArrayList:采用异步处理,线程不安全,性能较高Vector:采用 synchronized 修饰增删查改方法,线程安全,性能较低(锁的粒度太粗)LinkedList:采用异步处理,线程不安全3. 初始化大小,原创 2020-07-06 11:47:07 · 216 阅读 · 0 评论 -
HashMap和Hashtable的区别
我们知道,HashMap和HashTable都是基于哈希表完成的,那我们首先来回顾哈希表的知识。哈希表散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Has原创 2020-07-03 15:27:07 · 327 阅读 · 0 评论 -
HashSet源码
转载至 源码分析HashSet、TreeSet以LinkedHashSetpublic class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable{ static final long serialVersionUID = -5024744406713321676L; // 底层使用HashMap来保存Hash转载 2020-07-02 11:08:57 · 101 阅读 · 0 评论 -
Java中的深拷贝和浅拷贝
对象拷贝是指将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去。例如:对象A 和 对象B 都属于 类S,具有属性 a 和 b ,那么B.a = A.aB.b = A.bJava中的拷贝主要分为 深拷贝 和 浅拷贝。注意: Java中的数据类型分为基本数据类型和引用数据类型。对于这两种数据类型,在进行赋值操作、用作方法参数或返回值时,会有值传递和引用(地址)传递的差别。浅拷贝(Shallow Copy)一、对于数据类型是基本数据类型的成员变量浅拷贝会直接进行值传原创 2020-05-10 17:39:00 · 119 阅读 · 0 评论 -
Java中 Collection 和 Collections 的区别
java.util.Collection是一个集合接口,集合类的顶级接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。Collection是最基本集合接口,它定义了一组允许重复的对象。Collection接口派生了两个子接...原创 2020-03-31 15:29:45 · 231 阅读 · 0 评论 -
JVM --- 类加载机制
原文链接:https://blog.csdn.net/m0_38075425/article/details/81627349类的生命周期:类被加载到 JVM 虚拟机内存开始,到卸载出内存为止。他的生命周期可以分为:加载->校验->准备->解析->初始化->使用->卸载。一、类加载过程1.加载加载过程主要完成三件事情:通过类的全限定名来获取定...转载 2020-03-26 15:36:14 · 105 阅读 · 0 评论 -
JVM --- 垃圾回收机制
前言:首先JVM的内存结构包括五大区域: 程序计数器、虚拟机栈、本地方法栈、方法区、堆区。其中程序计数器、虚拟机栈(Java栈)和本地方法栈三个区域是线程私有的,随线程启动与销毁, 因此这几个区域的内存分配和回收都具有确定性,不需要过多考虑回收的问题。而Java堆区和方法区则不一样,这部分内存的分配和回收是动态的,是垃圾回收需要关注的部分。一、判断对象是否存活Java堆中存放着几乎...原创 2020-03-18 22:01:46 · 188 阅读 · 0 评论 -
抽象类和接口的区别
一、抽象类抽象类用来描述一种类型应该具备的基本特征与功能, 具体如何去完成这些行为由子类通过方法重写来完成。抽象类往往用来表示对问题领域进行分析、设计中得出的抽象概念。其存在的意义在于其设计性、复用性与扩展性。抽象类方便了具体类的定义。抽象类仅是对功能和属性的声明,表示这类事物应该具备这些内容。限制程序员不能直接创建该抽象类对象,必须定义其子类才可使用。如我们可以听一只狼的叫声,也可以...原创 2020-03-02 19:50:56 · 182 阅读 · 0 评论 -
面向对象 --- 多态
概念:多态: 一种事物以多种形态存在,同样的引用调用同样的方法却做了不同的事情。概述:在Java里,多态是同一个行为具有不同表现形式或形态的能力,即对象多种表现形式的体现,就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序...原创 2020-03-01 15:30:12 · 250 阅读 · 0 评论 -
面向对象 --- 继承
概念:继承是Java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承实现软件复用的重要手段。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。继承的优点:提高代码的重用性.代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性。提高代码的可扩展性,提高产品或项目的开放性。继承的...原创 2020-02-29 22:30:37 · 369 阅读 · 0 评论 -
面向对象 --- 封装
11111原创 2020-02-29 21:21:36 · 157 阅读 · 0 评论 -
面向对象三大特征
我们通常听到Java是面向对象的编程语言,C是面向过程的。那么什么是面向对象、什么是面向过程呢?面向过程: 当需要实现一个功能的时候,每一个步骤我们都需要自己去做,处理实现功能的每一个细节。面向对象: 当需要实现一个功能的时候,我们不需要自己去做,可以直接找一个已经具有该功能的东西,来帮我解决问题。举个栗子:我饿了,想吃咖喱饭面向过程:买菜 - 洗菜 - 做菜 - 装盘 - 吃面向...原创 2020-02-29 21:20:27 · 378 阅读 · 0 评论 -
JVM --- 内存管理
JVMJVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节...原创 2020-02-29 20:43:41 · 154 阅读 · 0 评论 -
Java转型问题(向上转型和向下转型)
父类引用指向子类引用。比如说现在有两个类:Father 类 和 Son 类。(1)Father f1 = new Son(); //向上转型(2)Son s1 = (Son)f1; //向下转型(1)向上转型,f1 引用指向一个 Son 对象。(2)向下转型,现在的 f1 依然指向 Son 对象。(1)Father f2 = new Father(); ...原创 2020-02-27 17:43:28 · 336 阅读 · 1 评论 -
组成最小的数
题目:给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。输入描述:每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50...原创 2019-11-21 15:46:54 · 1263 阅读 · 0 评论 -
超长正整型相加
请设计一个算法完成两个超长正整数的加法。接口说明 /* 请设计一个算法完成两个超长正整数的加法。 输入参数: String addend:加数 String augend:被加数 返回值:加法结果 */ public String AddLongInteger(String addend, String augend) { /*在这里实现功能*/ retu...原创 2019-11-20 19:30:58 · 333 阅读 · 0 评论 -
非递归实现n*n阶螺旋矩阵
什么是螺旋矩阵?螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。现给定一个整数n,要求打印向内旋的n*n阶螺旋矩阵。我们发现:当n为奇数时,打印圈数为:n/2+1 圈当n为偶数时,打印圈数为:n/2 圈非递归来打印螺旋矩阵,我们得分为四个步骤:(1)从左向右打印(2)从上到下打印(3)从右向左打印(4)...原创 2019-11-19 22:47:58 · 522 阅读 · 0 评论 -
递归实现格雷码GrayCode
什么是格雷码?在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。现要求,给定一个整数n,请返回n位的格雷码,顺序从0开始。那我们现在来列一下n位的格雷码:(1)n=101(2)n=2000111...原创 2019-11-18 13:07:53 · 626 阅读 · 0 评论 -
浅谈类的加载
1.类的加载过程一个java文件从被加载到被卸载这个生命过程,总共要经历5个阶段,JVM将类加载过程分为: (加链初使卸) 加载->链接(验证+准备+解析)->初始化(使用前的准备)->使用->卸载(1)加载首先通过一个类的全限定名来获取此类的二进制字节流。再将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。最后在java堆中生成一个代表这个类的cl...原创 2019-09-06 09:17:53 · 121 阅读 · 0 评论 -
FileItemFactory 接口
转自 https://www.cnblogs.com/Lonnn/p/6866314.html将请求消息实体中的每一个项目封装成单独的DiskFileItem (FileItem接口的实现) 对象的任务由org.apache.commons.fileupload.FileItemFactory 接口的默认实现由org.apache.commons.fileupload.disk.DiskF...转载 2020-02-21 10:26:28 · 296 阅读 · 0 评论 -
浅谈static关键字
static是一个修饰符通常用在以下四个场景:(1)修饰成员变量(2)修饰成员方法(3)静态代码块(4)静态导包现在就以上四个方面讨论static关键字一、static修饰成员变量static修饰的成员变量---->静态变量(1)静态变量属于类,被所有对象共享,不属于任何一个对象(和对象解绑)。(2)静态变量存储在共享数据区的方法区中。(3)静态变量在内存中只有一个副本...原创 2019-11-12 18:16:56 · 235 阅读 · 1 评论 -
浅谈冯诺依曼体系
冯诺依曼体系一、冯诺体系的要点:1.把程序本身当作数据来对待,程序和该程序处理的数据都用同样的方式存储。2.计算机的数制采用二进制。3.计算机应该按照程序顺序执行。二、冯诺依曼的组成1.输入设备:键盘、鼠标2.存储器:内存3.中央处理器:由运算器和控制器组成4.输出设备:显示器注意:1.冯诺依曼体系中的存储器指的是内存。2.不考虑缓存的情况下,CPU只能对内存进行读写,不...原创 2019-11-04 22:30:17 · 714 阅读 · 0 评论 -
JavaSE之数据类型与运算符
1.JDK(Java Development Kit)JRE(Java Runtime Environment)JVM(虚拟机)翻译官2.环境变量(设置)JAVA_HOMEPath(找到程序并运行)绝对路径 / 相对路径3.面向对象的语言类 / 对象类(class):蓝图,设计图稿对象(object):依据蓝图制造出的实例(1)public class HelloWorld...原创 2019-07-17 09:35:43 · 148 阅读 · 0 评论