java基础
文章平均质量分 68
bingbingYang_88
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap 原理
如果线程竞争激烈,使用一个数组来维护元素个数,如果要增加总的元素个数,则直接从数组中随机取一个,在通过CAS实现原子递增,他的核心思想是引入数组来实现对并发更新的负载。1,在jdk1.8中,concurrentHashMap锁的粒度是数组中的某一个节点,而在JDK1.7中,锁定的是segment,锁的范围更大,因此性能会更低。4,concurrentHashMap中有一个Size()方法来获取总的元素个数,在多线程并发场景中,在保正原子性的情况下实现元素个数的累加,性能时非常低的。原创 2024-01-19 20:01:17 · 342 阅读 · 0 评论 -
subst命令将一个文件夹镜像成本地的一个磁盘
背景当你的电脑或者云盘只有一个盘时,因为这样安全性好,性能也好。那么有时候,我们是需要其他的系统盘来做一些事情的,比如远程的时候需要带过去一个系统盘,这个时候,就可以用subset这个命令来解决问题。镜像虚拟磁盘subst这个命令可以简化好多操作,比如一个常用的文件放在一个路径很深的文件夹中,每次我们想要操作这些文件就必须沿着这个文件夹的路径一级一级的打开,这样操作很费时【现在我的操作一般都是在根目录下写一个bat,然后每次找到那个目录时,运行这个bat。或者把这个路径记录在一个记事本中每次往地址栏上原创 2020-06-24 15:20:47 · 373 阅读 · 0 评论 -
一文彻底理解Java 17中的新特性密封类
在面向对象语言中,我们可以通过继承(extend)来实现类的能力复用、扩展与增强。但有的时候,有些能力我们不希望被继承了去做一些不可预知的扩展。所以,我们需要对继承关系有一些限制的控制手段。而密封类的作用就是限制类的继承。原创 2023-04-20 15:52:44 · 229 阅读 · 0 评论 -
高级java开发必问面试题
文章目录面向对象什么是面向对象?封装继承多态== 和equals比较hashCode与equals重载和重写的区别Finalspring是什么AOP的理解谈谈你对IOC的理解零拷贝RocketMQ 架构设计RocketMq 事务消息原理RockeMq顺序消息消费原理简述RockerMQ持久化机制RocketMQ如何保证不丢消息消息发送消息消费Mysql索引的基本原理mysql聚族和非聚族索引的区别业务系统里面的sql耗时,慢查询最左前缀原则是什么Innodb是如何实现事务的面向对象什么是面向对象?对比原创 2022-05-11 16:27:09 · 11650 阅读 · 0 评论 -
RocketMQ
RocketMQ的前世今生rocketMq在阿里内容叫做Metaq(最早名为Metamorphosis,中文意思“变形记”,是作家卡夫卡的中篇小说代表作,可见是为了致敬Kafka)。RocketMQ是Metaq3.0之后的开源版本。Metaq在阿里巴巴集团内部、蚂蚁金服、菜鸟等各个业务中被广泛使用,介入了上万个应用系统中,并平稳支撑了历年的双十一大促(万亿级的消息),在性能、稳定性、可靠性等方面表现出色,在整个阿里技术体系和大中台战略中发挥着举足轻重的作用。Metaq最早源于Kafka,早期借鉴了原创 2022-04-11 15:47:35 · 971 阅读 · 0 评论 -
xml读取properties中的属性值
背景线上日志路径由于某些原因需要改变路径,但是我们又需要可以根据不同环境做区分,所以这个我们不希望是写死的,可以在properties文件可配置。xml文件 修改1,引入properties文件2,引用log.home值<property resource="env-config.properties"/> <property name="LOG_SRV" value="basex" /> <property name="HOME_PATH" value="${l原创 2022-04-07 17:30:24 · 976 阅读 · 0 评论 -
正则表达式:要求6-20位
正则验证字母、数字、特殊字符三种以上组合,必须包含特殊字符/^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,20}$/# 正则验证字母、数字、特殊字符两种以上组合,必须包含特殊字符^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{6,20}$(?![a-zA-Z]+$):断言此位置之后,字符串结尾之前,所有的字符不能全部由26个英文字母组成。(?![a-zA-Z]+$):断言此位置之后,字符串结尾之前,所有的原创 2021-08-05 15:34:18 · 4654 阅读 · 0 评论 -
可以不要问我Spring Bean的生命周期吗
是的,Spring Bean的生命周期只有这四个阶段。把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有问题,但是这样非常凌乱,难以记忆。要彻底搞清楚Spring的生命周期,首先要把这四个阶段牢牢记住。实例化和属性赋值对应构造方法和setter方法的注入,初始化和销毁是用户能自定义扩展的两个阶段。在这四步之间穿插的各种扩展点,稍后会讲。1,实例化 Instantiation2,属性赋值Populate3,初始化Initialization4,销毁Destruction实例化-》属性赋值-》初始化原创 2020-05-26 18:13:36 · 174 阅读 · 0 评论 -
Spring Bean作用域
Singleton单例模式默认值,当ioc容器一创建就会创建bean的实例,而且是单例的,每次得到的都是同一个prototype原型模式原型的,当ioc容器创建不在实例化该bean,每次getBean方法时再实例化该bean,每次返回的都是一个新的实例。request(Http请求)该属性仅对HTTP请求产生作用,使用该属性定义Bean时,每次Http请求都会创建一个新的Bean,适用于WebApplicationContext环境。session(会话)该属性仅用于Http Session,原创 2020-05-26 17:51:50 · 169 阅读 · 0 评论 -
Spring中什么是循环依赖以及解决方式
1,什么是循环依赖?发生在bean A依赖于另一个bean B时,bean B依赖于bean A;2,Sping中发生了什么?当Spring上下文加载所有bean时,它会尝试按照它们完全工作所需的顺序创建bean。例如,如果我们没有循环依赖,如下例所示:A->B->CSpring将创建bean C,然后创建bean B(并将bean注入其中),然后创建bean A(并将bean B注入其中)。但是,当具有循环依赖时,Spring无法决定应该首先创建哪个bean,因为它们彼此依赖。在.原创 2020-05-19 22:00:24 · 992 阅读 · 0 评论 -
Java中的类加载和双亲委派原则
Java类加载过程1,加载–》2,验证–》3,准备–,4,解析–》5,初始化加载加载是指将类的class文件读到内存中,并为其创建一个java.lang.Class对象(每个类都有其独一无二的.Class对象),类加载由JVM中的类加载器完成,且其加载一般符合"双亲委派原则",(下文会简单的介绍类加载器和双亲委派原则,不要担心),除此之外,还可以自定义类加载器对类进行初始化;通过不同的类加载器,可以从不同的源加载类的二进制数据文件:1.从本地文件系统加载class文件。2.从JAR包加载cla.原创 2020-05-19 21:38:29 · 366 阅读 · 0 评论 -
面试XXX公司时问道 强引用-软引用-弱引用-虚引用时 一脸懵逼
四大引用级别的概念:- 强引用:就是正常的引用:Object obj=new Object();object就是一个强引用,gc是不会清理一个强引用引用的对象的,即使面临内存溢出的情况。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。如果不使用时,要通过如下方式来弱化引用, 如下:obj=null; //帮助垃圾收集器回收此对象强引用在实际中有非常重要的用处,举个ArrayList的实现源代原创 2020-05-18 17:43:26 · 143 阅读 · 1 评论 -
java高级工程师不得不知道的--集合底层实现原理
ArrayList实现原理要点概况底层是数组实现,线程不安全,允许包含null在内的所有元素,允许存放相同元素数组扩容默认长度是10,每次数组容量增长大约是其容量的1.5倍,会将老数组中的元素重新拷贝到新数组中。查询快,增删慢add、remove操作对于ArrayList其运行时间是O(N),因为在它当中在前端进行添加或移除构造新数组是O(N)操作;get方法的调用为O(1)操作。要是使用一个增强的for循环,对于任意List的运行时间都是O(N),因为迭代器将有效地从一项到下一项推原创 2020-05-17 20:43:19 · 231 阅读 · 0 评论 -
面试中不得不知的equals()和hashcode()
首先从源码的角度来看一看equals()方法和hashcode()方法含义equals()方法和hashcode()方法都属于Object类,在Java中,所有的类都是Object类的子类,也就是说,任何Java对象都可调用Object类的方法。equals()方法 public boolean equals(Object obj) { return (this == obj); }很明显,该方法就是用来判断两个对象是否是同一个对象。在Object类源码中,其底层是使用原创 2020-05-13 15:16:34 · 257 阅读 · 0 评论 -
简介表格让你牢牢记住spring的7种事务传播机制
事务行为说明Propagation_Required支持当前事务,如果当前没有事务则新建事务(默认)Propagation_Requred_New新建事务,如果当前存在事务则把当前事务挂起Propagation_Supports支持当前事务,如果当前没有事务,则以非事务执行Propagation_Not_Supported以非事务执行,如果当前存在事务...原创 2020-04-18 10:19:58 · 208 阅读 · 0 评论 -
Arraylist HashMap
集合的概述集合概念:集合是java中提供得一种容器,可以用来存储多个数据集合和数组的区别:数组的长度是固定的,集合的长度是可变的数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象类型可以不一致集合框架集合按照其存储结构可分为两大类,分别是单列集合java.util.Collection和双列集合java.util.MapCollecti...原创 2019-05-09 14:10:03 · 149 阅读 · 0 评论 -
生活其实就像乐观悲观锁一样
简单详解悲观锁乐观锁悲观锁:顾名思义就是总是假设最坏的情况,每次拿数据的时候都认为别人会修改,所以每次拿数据的时候都会上锁。乐观锁:总是假设最好的情况,每次拿数据的时候都认为别人不会修改,所以不会上锁,但是会在更新的时候判断一下在此期间别人有没有去更新这个数据。具体实现乐观锁版本控制乐观锁的话可以使用版本控制来实现,就是在数据库中添加一个version,当读取数据时一...原创 2019-05-17 17:47:49 · 198 阅读 · 0 评论 -
Lock和synchronized的选择
Lock是一个接口,synchronized是java关键字monitor,synchronized是内置的语言实现的CASsynchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁发生;而lock异常时没有主动通过unlock()释放锁,则很可能会造成假死现象,因此使用Lock需要在finally块中释放锁;Lock可以让等待锁响应中断,而synchronized却不行...原创 2019-07-10 15:35:52 · 339 阅读 · 0 评论 -
Java基础
java对象和类对象:对象是类的一个实例,有状态和行为类:类是一个模板,描述类对象的行为和状态类可以看成是创建java对象的模板public class Dog{ String breed; int age; String color; void barkin(){ } void hungry(){ } void sleeping(){ }}一个类可以包含以下类型变...原创 2019-09-19 18:25:33 · 180 阅读 · 0 评论 -
Java最快速的算出乘2 和除2的结果
Java 移位运算符:<< ,>>, >>>1.<< :左移运算符,num<< 1,不区分正负数,低位补0,相当于num*22.>> :右移运算符,num>>1,如果该数为正,则高位补0,若为负数,则高位补13.>>> :无符号右移,忽略符号位,空位都以0补齐import jav...原创 2019-05-06 12:43:48 · 2698 阅读 · 0 评论