Java
文章平均质量分 63
程序员迪迦
【我是谁?】本人23届双非普本毕业,在互联网寒冬中通过秋招收到多家大厂的录用offer:快手、米哈游、京东、滴滴等,经历过几十次的大厂面试,实习和秋招面试经验充足。【目的是?】在我的成长过程中,许多前辈大佬帮助过我,我也真诚的希望能给大家带来一些帮助,关注我,进大厂不迷路!
展开
-
一文教你Redis Cluster批量操作的所有姿势(附代码实操)
Redis Cluster 批量操作Key 技巧,用多种方式提供了批量操作的思路,各位可以根据自己的业务量级来选择合适的方法。原创 2023-03-18 15:44:36 · 1635 阅读 · 0 评论 -
JUC锁核心类AQS解析
JUC锁核心类AQS解析简介AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore等,它使用一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作,它是我们实现大部分同步需求的基础。AQS的主要使用方式是继承,子类通过继承同步器并实现它的抽象方法来管理同步状态,AQS的涉及是基于模板方法模式的,它内部定义好了所有跟锁相关的底层操作细节与算法骨架,只保留了几个方法让子类重写,子类原创 2022-04-13 11:58:21 · 985 阅读 · 2 评论 -
Java多线程编程技术实践
Java多线程编程技术实践最近笔者面试的时候被面试官问到了有关Java线程池源码方面的问题,没有回答上来,所以准备好好研究一下Java线程池底层源码。当我打开JDK源码的时候,我整个人就愣住了,像极了刘姥姥进大观园,Java线程池源码中的一些涉及到多线程相关的API,我竟然已经完全忘记了这些方法的作用,于是便准备总结一篇Java多线程编程技术相关的内容,用以对自己所学知识的总结。本文会总结常见的Java多线程基础练习和面试题,包括《Java多线程编程核心技术》、《Java并发编程的艺术》上的Code,以原创 2022-04-08 22:17:49 · 1393 阅读 · 5 评论 -
Docker启动Elasticsearch(挂载数据、配置文件、插件)
Docker启动Elasticsearch拉取镜像docker pull elasticsearch:7.4.2修改配置文件mkdir -p /mydata/elasticsearch/configmkdir -p /mydata/elasticsearch/data/mkdir -p /mydata/elasticsearch/pluginsecho "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearc原创 2021-10-15 22:08:20 · 7661 阅读 · 6 评论 -
Java字符串对象和常量池的总结
Java字符串对象和常量池的总结字符串对象当执行String str1= new String("123");时,虚拟机会创建几个对象呢,答案是两个。当一个字符串对象被new出来的时候,有两种情况,当字符串常量池中有常量池在JDK7以前,字符串常量池在方法区的实现永久代里面的。在JDK7以后,字符串常量池是在堆空间里面的。常量池里面保存intern方法JDK7以前JDK7以后...原创 2021-10-11 17:31:17 · 565 阅读 · 0 评论 -
取模与位运算的关系(实践出真知)
网上总有人说x对n取模就是x与n-1进行与运算直接上测试代码public class test { public static void main(String[] args) { //测试9和4取模 System.out.println(9&3); //测试1和4取模 System.out.println(1&3); //测试40和6取模 System.out.println(原创 2021-07-03 21:42:16 · 845 阅读 · 0 评论 -
HashMap容量为什么总是2的幂次方
为什么取余?为什么HashMap底层要用取余来计算每一个元素在数组里的位置呢?我们都知道,key的hash值映射到数组具体位置时可以用取模的操作,这样结果一定在[ 0 , n-1] (容量为n)之间,可是取模运算速度很慢,众所周知,位运算的执行速度很快,那么我们可不可以用位运算的方式来取代取模呢。答案是当然可以。我们只需要一种位运算,能让所有的数跟它运算的结果都在[ 0 , n-1]之间即可,于是我们想到了 与运算,所有的数跟一个数进行&运算的结果都会在0到这个数本身。例如 x &原创 2021-07-03 21:29:13 · 355 阅读 · 1 评论 -
BeanUtils.copyProperties复制对象结果为空的原因
细心比对,发现原来是导错了包导致的正确的包import org.springframework.beans.BeanUtils;错误的包import org.apache.commons.beanutils.BeanUtils;两个类的区别两者的copyProperties方法参数位置不同org.springframework.beans.BeanUtils: copyProperties(sourceDemo, targetDemo)org.apache.commons.beanu原创 2021-05-11 22:39:17 · 2539 阅读 · 2 评论 -
Java 中的bind 绑定
概念一个Java程序的执行要经过编译和执行(解释)这两个步骤,同时Java又是面向对象的编程语言。当子类和父类存在同一个方法,子类重写了父类的方法,程序在运行时调用方法是调用父类的方法还是子类的重写方法呢,这应该是我们在初学Java时遇到的问题。这里我们将确定这种调用何种方法实现或者变量的操作叫做绑定。可以将绑定理解成Java多态特性的底层原理。分类在Java中存在两种绑定方式,一种为静态绑定,又称作早期绑定。另一种就是动态绑定,亦称为后期绑定。区别静态绑定发生在编译时期,动态绑定发生在运行时转载 2021-05-09 19:44:59 · 3853 阅读 · 0 评论 -
String.intern()方法的内存占用分析
String.intern()使用原理String.intern()是一个Native方法,底层调用C++的 StringTable::intern方法实现。当通过语句str.intern()调用intern()方法后,JVM 就会在当前类的常量池中查找是否存在与str等值的String,若存在则直接返回常量池中相应Strnig的引用;若不存在,则会在常量池中创建一个等值的String,然后返回这个String在常量池中的引用。因此,只要是等值的String对象,使用intern()方法返回的都是常量池中原创 2021-04-09 15:52:00 · 459 阅读 · 0 评论 -
Java集合详解(三)——Map
Map的继承体系其下有HashMap,TreeMap,LinkedHashMapMap实现类的结构一、Map的实现类的结构: * |----Map:双列数据,存储key-value对的数据 ---类似于高中的函数:y = f(x) * |----HashMap:作为Map的主要实现类;线程不安全的,效率高;可存储null的key和value * |----LinkedHashMap:保证在遍历map元素时,可以按照添加的顺序实现遍历。 *原创 2021-04-09 15:17:01 · 137 阅读 · 0 评论 -
Java集合详解(二)——Set
Set接口继承体系Set接口继承自Collection接口,其有HashSet,LinkedHashSet,TreeSet三个实现类。Set 无序,不可重复HashSet底层数据结构是哈希表(数组和链表)。(无序,唯一)如何来保证元素唯一性?1.依赖两个方法:hashCode()和equals()LinkedHashSet底层数据结构是链表和哈希表。(FIFO插入有序,唯一)1.由链表保证元素有序2.由哈希表保证元素唯一TreeSet底层数据结构是红黑树。(唯一,有序)原创 2021-04-09 14:54:41 · 108 阅读 · 0 评论 -
Java集合详解(一)——List集合(核心源码分析)
List接口继承体系List接口继承自Collection接口,其下有三个实现类,ArrayList,Vector,LinkedList。ArrayList优点: 底层数据结构是数组,查询快,增删慢。缺点: 线程不安全,效率高底层:使用Object [ ] elementData数组存储Vector优点: 底层数据结构是数组,查询快,增删慢。缺点: 线程安全,效率低底层:使用Object[] elementData存储LinkedList优点: 底层数据结构是链表,查询慢,增删快。原创 2021-04-09 14:19:17 · 186 阅读 · 0 评论 -
java子类继承父类时实例化对象的内存创建关系
子类对象实例化时的特点在之前的博文JAVA中子类继承父类时构造方法的继承问题中,我们已经了解到了当子类对象实例化的时候,调用子类构造方法之前,会先调用父类的构造方法,在继承的机制中,创建一个子类对象,同样会创建一个父类子对象,这个对象与父类创建的对象是一样的。两者的区别在于后者来自外部,而前者来自子类对象的内部。当实例化子类对象时,父类对象相应被实例化。当用子类的构造方法创建一个子类的对象时,不仅子类中声明的成员变量被分配了内存,而且父类子对象的成员变量也都被分配了内存空间,但只将其中子类继承的那部分成原创 2020-10-17 13:37:15 · 967 阅读 · 0 评论 -
Java中静态方法的(可继承)与(不可重写)与(被隐藏)
静态方法可以继承当子类继承父类时,静态方法和普通的方法一样,都可以被子类所继承。静态方法不可以重写(覆盖)对于普通方法,可以在子类中重写父类的方法,重写的意义在于可以实现多态性,而重写则是在程序运行时,通过不同的对象实例,传来的不同的参数类型与数量,将不同的对象实例与不同的方法实现绑定,从而使该方法能有不同的实现,但对于静态方法,当JVM加载类时,就会把静态方法加载了,此时静态方法与类已经绑定在了一起,这也是静态方法被叫做类方法的原因之一,所以静态方法不能在子类中被重写。静态方法在子类中被隐藏当子原创 2020-10-10 14:51:06 · 361 阅读 · 0 评论 -
JAVA中子类继承父类时构造方法的继承问题(包括有参无参的情况)
当创建一个子类对象时,该对象是如何构造的呢?我们先做一个测试public class TestPersonStudentDemo1 { public static void main(String[] args) { Student s = new Student(); }}class Person { String name; int age; // 父类的构造方法 public Person() { System.o原创 2020-09-29 08:31:25 · 5667 阅读 · 2 评论