Java
文章平均质量分 76
SweetWiner
这个作者很懒,什么都没留下…
展开
-
Java-集合-HashSet(2)
HashSet可以直接看HashMap1. 底层实现HashSet的底层实现是HashMapSet不能有重复的元素,HashMap不允许有重复的键Set中有且只有1个元素的值为nullHashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。在HashSet中:元素都存到HashMap键值对的Key上面,Value是有一个统一的值private static final Object PRESENT = new Object();定义原创 2022-03-21 17:14:44 · 624 阅读 · 0 评论 -
Java集合-(1)HashSet之不重复原理
Set集合的不重复性是怎么做到的(Set集合的不重复原理)因为当我们向Set集合加入数据时,要加入的数据会和集合里的数据比较会先比较hashCode()的值,如果不同那么jvm就会认为这是两个不同的数据 就会直接加入,而如果hashCode()的值相同,jvm会调用equals()来比较,如果相同就认为是一个数据,否则 就是两个数据。(当hashCode()的值不同时就不会继续调用equals()了)Set集合是一个无序的不可以重复的集合。Set是一个接口,最常用的实现类就是Has原创 2022-03-21 17:11:54 · 1393 阅读 · 0 评论 -
Java中volatile关键字
volatilevolatile关键字在Java面试中几乎是必考题单例模式的双重检查模式(DCL)一般会引申到synchronized关键字和volatile关键字volatile关键字了解吗?它保证了什么特性?用什么方式禁止指令重排的吗?1)volatile保证了什么特性保证线程可见性(多线程环境下保证内存可见性)线程修改后的共享变量值能够及时刷新,从工作内存中刷新回主内存;其它线程能够及时的把共享变量的值从主内存中更新到自己的工作内存中;Java 内存模型规定,对于多个线程共享原创 2022-03-20 17:08:39 · 296 阅读 · 0 评论 -
MVP 和 MVC架构的比较
MVP架构本人面试Android时被问到的问题。基于什么样的场景采用MVP架构模式?MVP解决了你什么问题?P层里面写的是什么?activity属于哪一层?activity中坐的事情太多,代码不美观Presenter:作为View和Model之间沟通的桥梁,它从Model层检索数据后返回给View层,使得View和Model之间没有耦合。activity属于View层MVC的activity属于哪一层Model-View-Presenter。在MVP中,M代表Model,V代表原创 2022-03-20 16:52:03 · 796 阅读 · 0 评论 -
Java重写和重载的区别
重写和重载的区别1、首先是含义不同1)方法重载是在同一个类中,声明多个同名方法,通过参数列表来区分不同的方法,与参数列表的数量、类型和顺序有关,与修饰符和返回值类型以及抛出异常类型无关2)方法重写(方法覆盖)的前提是发生在具有继承关系的两个类之间,方法重写有以下规则:参数列表,返回值,方法名必须保持一致重写方法的访问权限范围必须大于等于父类方法重写方法的抛出异常类型范围不能大于父类方法2、方法的重载和重写的作用不同重载:在同一个类中为一种行为提供多种实现方式并提高可读性重写:父类方法无原创 2022-03-20 16:48:26 · 2952 阅读 · 1 评论 -
Java集合-(2)HashMap
3. HashMap参考其他博主 + 自己总结3.1 什么是HashMapHashMap继承了AbstractMap,实现了Map接口,存储的是一个键值对对象。底层结构 数组+链表+红黑树,可以存储null键null值,线程不安全初始size为16,扩容:newSize = oldSize * 2,size一定为2的n次幂(元素分配更均匀)计算index方法:index = hash & (tab.length – 1)3.2 HashMap数据结构解析1、继承关系:H原创 2022-03-20 16:45:25 · 935 阅读 · 0 评论 -
Java集合-(1)hashCode
hashCode()public native int hashCode();【问题1】可以直接根据hashcode值判断两个对象是否相等吗?肯定是不可以的,因为不同的对象可能会生成相同的hashcode值。虽然不能根据hashcode值判断两个对象是否相等,但是可以直接根据hashcode值判断两个对象不等,如果两个对象的hashcode值不等,则必定是两个不同的对象。如果要判断两个对象是否真正相等,必须通过equals方法。默认情况下,hashCode方法是将对象的存储地址进行映射(通过对象原创 2022-03-20 16:17:03 · 245 阅读 · 0 评论 -
Java值传递和引用传递
Java值传递和引用传递基本数据类型传值,对形参的修改不会影响实参;引用类型传引用形参和实参指向同一个内存地址,所以对参数的修改会影响到实际的对象;形参和实参指向不同内存地址的,则对参数的修改不会影响到实际的对象;String 是引用类型 Integer m1 = 127; Integer m2 = 127;//当在-128~127范围内返回true,否则返回false int x1 = 500; int x2 = 500;//全都返原创 2022-03-20 15:34:14 · 175 阅读 · 0 评论 -
面试题解--Java(全)
Java线程不安全的线程安全的StringBuilderStringBufferArrayListVectorHashMapHashtable基本数据类型字符型:char布尔型:Boolean数值型:整数类型:byte(1字节), short(2字节), int(4字节), long(8字节)浮点型:float(4字节), double(8字节)byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。short:16位,原创 2021-08-08 21:54:09 · 2130 阅读 · 0 评论 -
深入理解Java虚拟机(全)
垃圾回收,类加载,线程安全问的比较多2,3,6,7,12,13第二章 Java内存区域与内存溢出异常2.2 运行时数据区域3个区域线程私有(不需要垃圾回收,因为它们随着线程结束而自动销毁),2个区域所有线程共享(需要垃圾收集回收)程序计数器(Programmer Counter Register):一块很小的内存,可以看做当前线程所执行的字节码的行号计数器。线程隔离的数据区(线程私有)为了多线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各线程之间计数原创 2021-08-08 21:52:36 · 1612 阅读 · 0 评论 -
synchronized用法(二):synchronized的底层实现原理
synchronized底层实现在Java里面,最基本的互斥同步手段是synchronized(1)原理synchronized关键字经过反编译之后,会在同步块的前后分别形成 monitorenter和monitorexit这两个字节码指令。这两个字节码指令都需要一个reference类型的参数来指明要锁定和解锁的对象。其中monitorenter指令指向同步代码块的开始位置,monitorexit指令则指明同步代码块的结束位置。当代码执行到monitorenter 指令时,将会尝试获取该对象对应原创 2021-05-31 22:39:53 · 173 阅读 · 0 评论 -
synchronized用法(一):synchronized的使用
synchronized的用法三种用法:修饰实例方法修饰静态方法修饰代码块synchronized的作用:原子性:synchronized保证语句块内操作是原子的可见性:synchronized保证可见性(通过“在执行unlock之前,必须先把此变量同步回主内存”实现)有序性:synchronized保证有序性(通过“一个变量在同一时刻只允许一条线程对其进行lock操作”)一、3种用法synchronized是Java中的关键字,是一种同步锁。修饰一个类:其作用的范围是s原创 2021-05-31 22:34:24 · 863 阅读 · 0 评论 -
Java中static的用法
static的用法static关键字涉及很多Java虚拟机相关内容,感兴趣的读者可以看看Java虚拟机相关内容哦!方便在没有创建对象的情况下来进行调用(方法/变量)。static:静态的,用于修饰成员(成员变量,成员方法);被static所修饰的变量或者方法会储存在数据共享区(静态存储区);被static修饰后的类成员变量只有一份!当成员被static修饰之后,就多了一种访问方式,除了可以被对象调用之外,还可以直接被类名调用,(类名.静态成员);使用:(一定要提到类加载)原创 2021-05-29 16:28:33 · 2891 阅读 · 0 评论 -
Java单例模式
单例模式定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点单例模式总共有5种实现饿汉模式懒汉模式DCL(双重检查模式)----很重要静态内部类单例模式枚举类单例(1)饿汉模式public class Singleton{ private static Singleton instance = new Singleton(); private Singleton(){ } public static Singleto原创 2021-05-29 16:22:27 · 62 阅读 · 0 评论 -
Java四种访问修饰符
Java四种访问修饰符public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不 仅可以跨类访问,而且允许跨包(package)访问。private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以 及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。protected: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、 属性以及方法原创 2021-05-29 16:13:09 · 513 阅读 · 0 评论 -
深入理解Java虚拟机(四):Java内存模型
Java内存模型一、概述二、硬件的效率与一致性计算机的存储设备与处理器的运算速度有着几个数量级的差距现代计算机系统都不得不加入一层或多层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲基于高速缓存的存储交互很好地解决了处理器与内存速度之间的矛盾,但是也为计算机系统带来更高的复杂度,它引入了一个新的问题:缓存一致性(Cache Coherence)。多路处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存(Main Memory),这种系统称为共享原创 2021-05-29 16:06:39 · 113 阅读 · 0 评论 -
深入理解Java虚拟机(三):Java类加载过程
Java类加载一、概述虚拟机的类加载机制:Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制与那些在编译时需要进行连接的语言不同在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的Java天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的二、类加载时机类的生命周期(从被加载到虚拟机内存开始,到卸载出为止):加载(Loading)原创 2021-05-29 15:20:24 · 263 阅读 · 0 评论 -
深入理解Java虚拟机(一):Java内存区域(运行时数据区域)
Java内存区域(运行时数据区域)主要参考书籍《深入理解Java虚拟机》运行时数据区域3个区域线程私有(不需要垃圾回收,因为它们随着线程结束而自动销毁),2个区域所有线程共享(需要垃圾收集回收)程序计数器(Programmer Counter Register):一块很小的内存,可以看做当前线程所执行的字节码的行号计数器。线程隔离的数据区(线程私有)为了多线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各线程之间计数器互不影响,独立存储如果线程正在执行一个Ja原创 2021-05-29 14:29:48 · 157 阅读 · 0 评论 -
深入理解Java虚拟机(二):Java内存回收及垃圾收集算法
Java内存回收 & 垃圾收集算法 & 垃圾收集器Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。本文重点:2 对象已死?(如何判断对象是否存活(回收已死亡的对象))3 垃圾收集算法5 垃圾收集器1 概述垃圾收集器(Garbage Collection, GC)程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每个栈帧中分配多少内原创 2021-05-29 14:51:11 · 288 阅读 · 0 评论