java基础
文章平均质量分 85
java基础总结
carroll18
你想要拥有你从未有过的东西,你必须去做你从未做过的事情。
展开
-
Java程序会产生死锁?如何定位、修复?
死锁是一种特定的程序状态,在实体之间,由于循环依赖导致彼此一直处于等待之中,没有任何个体可以继续前进。死锁不仅仅是在线程之间会发生,存在资源独占的进程之间同样也可能出现死锁。通常来说,我们大多是聚焦在多线程场景中的死锁,指两个或多个线程之间,由于互相持有对方需要的锁,而永久处于阻塞的状态。原创 2023-07-01 11:05:27 · 560 阅读 · 0 评论 -
动态代理:JDK Proxy 和 cglib
首先,它是一个代理机制。如果熟悉设计模式中的代理模式,我们会知道,代理可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成。其实很多动态代理场景,也可以看作是装饰器(Decorator)模式的应用。* 通过代理可以让调用者与实现者之间解耦。比如进行 RPC 调用,框架内部的寻址、序列化、反序列化等,对于调用者往往是没有太大意义的,通过代理,可以提供更加友善的界面。利用动态代理机制,相应的 stub 等类,可以在运行时生成,对应的调用操作也是动态完成,极大地提高原创 2023-07-01 11:43:31 · 418 阅读 · 0 评论 -
JVM内存模型及JAVA程序运行原理
JVM------Java Virtual Machine.JVM是Java平台的基础,与实际机器一样,他有自己的指令集(类似CPU通过指令操作程序运行),并在运行时操作不同的内存区域(JVM内存体系)。Java虚拟机位于操作系统之上(如下图所示),将通过JAVAC命令编译后的字节码加载到其内存区域,通过解释器将字节码翻译成CPU能识别的机器码行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。JVM是运行在操作系统之上的,它与硬件没有直接交互。原创 2023-06-23 10:34:49 · 643 阅读 · 0 评论 -
ThreadLocal了解
ThreadLocal提供线程的局部变量,这种变量与普通变量的区别在于,每个访问这种变量的线程都有自己的、独立的变量副本。用于解决多线程间的数据隔离问题。原创 2023-06-14 13:43:08 · 501 阅读 · 0 评论 -
项目实战:一个由多线程引起的线程安全问题(附:解决方案)
当上游一次推送属于一个运单下的两个订单过来的时候,如果没有在数据库表的运单号字段添加唯一索引,会出现两条运单号一样的数据。线程1将步骤b的判断结果等信息保存到线程1的工作内存中,就处于就绪状态,线程2处于运行状态。如果没有在数据库表的运单号字段添加唯一索引,会出现两条运单号一样的数据。线程2也需要执行步骤a,由于线程1没有对运单号做新增操作。线程1将工作内存中的之前存储的查询结果等数据恢复,执行步骤c(CPU执行线程2,线程2将工作内存中的之前存储的查询结果等数据恢复,执行步骤c(线程1先去执行步骤a(..原创 2022-07-30 12:03:25 · 607 阅读 · 0 评论 -
基本类型的包装类在调用方法时引用传递的坑
结果如下你知道的越多,你不知道的越多。原创 2022-07-12 23:47:39 · 248 阅读 · 0 评论 -
SpringBoot中处理校验逻辑的两种方式
文章目录Hibernate Validator常用注解使用方式自定义注解优缺点全局异常处理使用到的注解使用方式优缺点总结在开发接口的时候,常常会需要对参数进行校验,这里提供两种处理校验逻辑的方式。一种是使用Hibernate Validator来处理,另一种是使用全局异常来处理。Hibernate ValidatorHibernate Validator是SpringBoot内置的校验框架,只要集成了SpringBoot就自动集成了它,我们可以通过在对象上面使用它提供的注解来完成参数校验。常原创 2022-05-10 15:53:36 · 246 阅读 · 0 评论 -
2020校招Java笔试题
写在前面,几个月没怎么看过Java,昨天上午突然决定参加一下这个笔试,然后立马投了简历。晚上参加远程笔试,题目不算难,算是普通水平,算法题也没有难到不会写。但我还是把实现栈 (会写的写错最气人)的那题写错了,交完答案,重新看了一眼题,瞬间就骂自己sb,脑子当时不知道在想什么???这么简单的题,都给写错,怕是没机会参与面试了。不过也好,趁着最后一个月,多投几个简历,复习一下自己几个月没看的Java。最后,吐槽一下,纸上写代码简直是活受罪啊啊啊,强烈推荐算法题还是在线上编程比较好,另外就是我写的字太难看了(我.原创 2020-12-03 09:36:23 · 4332 阅读 · 0 评论 -
HashMap相关知识(持续补充中...)
什么是哈希表呢?在JDK1.8之前,哈希表底层采用数组+链表实现,即使用数组处理冲突,同一hash值的链表都存储在一个数组里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,哈希表存储采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。简单的来说,哈希表是由数组+链表+红黑树(JDK1...原创 2020-07-28 17:22:27 · 161 阅读 · 0 评论 -
Java操作Excel的几种方式(内有示例代码)
Poi<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> //下面是07(xlsx)版本的,上面是03(xls) <dependency> <groupId>org.a原创 2020-07-10 09:35:40 · 1648 阅读 · 0 评论 -
Java内存模型(JMM)
文章目录Java内存模型(JMM)问题分析JMM模型下的线程间通信:Java内存模型(JMM)概述:JMM(Java Memory Model)Java内存模型,是java虚拟机规范中所定义的一种内存模型。Java内存模型(Java Memory Model)描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取变量这样的底层细节。所有的共享变量都存储于主内存。这里所说的变量指的是实例变量和类变量。不包含局部变量,因为局部变量是线程私有的,因此不存在竞原创 2020-07-07 22:34:38 · 497 阅读 · 0 评论 -
jdk安装后报错Error: could not open D:\developerkits\java\lib\amd64\jvm.cfg
原因:重新装JDK1.8报错Error: could not openD:\developer kits\java\lib\amd64\jvm.cfg’`,猜测可能是之前装过的缓存原因。解决方案:把路径C:\ProgramData\Oracle\Java\javapath 下的文件,删除java.exe、javaw.exe 、javaws.exe三个文件夹运行java java-version正常你知道的越多,你不知道的越多。有道无术,术尚可求,有术无道,止于术。如有其它问题,欢迎大家留言原创 2020-05-30 08:14:19 · 551 阅读 · 0 评论 -
Java关键字总结
文章目录this关键字static关键字super关键字final关键字instanceof关键字this关键字this代表所在类的当前对象的引用(地址值),即代表当前对象。this出现在实例方法中,谁调用这个方法(哪个对象调用这个方法),this就代表谁(this就代表哪个对象)。this出现在构造器中,代表构造器正在初始化的那个对象。static关键字当 static 修饰成...原创 2020-05-17 21:05:18 · 293 阅读 · 0 评论 -
JVM性能调优的关键参数详解
方法区(Method Area)-XX:PermSize=64MB 最小尺寸,初始分配-XX:MaxPermSize=256MB 最大允许分配尺寸,按需分配XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled 设置垃圾不回收默认大小-server选项下默认MaxPermSize为64m-client选项下默认MaxP...原创 2020-05-16 23:48:27 · 233 阅读 · 0 评论 -
多线程常见面试题最全汇总,没有之一
说明类java.lang.ThreadLocal的作用和原理。列举在哪些程序中见过ThreadLocal的使用?作用:要编写一个多线程安全(Thread-safe)的程序是困难的,为了让线程共享资源,必须小心地对共享资源进行同步,同步带来一定的效能延迟,而另一方面,在处理同步的时候,又要注意对象的锁定与释放,避免产生死结,种种因素都使得编写多线程程序变得困难。尝试从另一个角度来思考多线程共...原创 2020-05-16 23:38:38 · 800 阅读 · 0 评论 -
大厂真实面试之面试题(一)
文章目录1.TCP和UDP的区别,为什么UDP快2.TCP三次握手和四次挥手的原因3.Java集合类用的有哪些,说一下各自特点4.hashmap的底层数据结构5.hashmap的扩容,put,rehash过程6.这个链表会一直扩大吗,为什么?红黑树好在哪?红黑树特点(JDK1.8)7.并发的话你知道哪些锁?8.那你说下synchronized锁升级过程?每个锁都适用于什么场合?9.synchronized和lock都是用于什么场合?10.volatile的原理是什么,实现了什么,怎么实现的?11.公平锁什么原创 2020-05-11 15:53:16 · 632 阅读 · 1 评论 -
Java面试必备知识查缺补漏(一)
文章目录线程池的常用的参数和含义线程池的拒绝策略Java线程停止的几种方法和对比ThreadLocal原理ThreadLocal和Synchonized区别局部变量存在线程安全问题吗公平锁和非公平锁ReentrantLock和synchronized区别写再前面,希望大家在看下面的具体内容之前,对照目录依次询问自己是否清楚这个问题。看完之后,在对照我写的查看相关知识点。本人水平有限,有些地方写...原创 2020-04-25 18:33:47 · 465 阅读 · 2 评论 -
一文深入浅出聊聊BIO、NIO和AIO
传统的IOBIO、NIO、AIO的区别以及传统的 Socket 实现(BIO)、NIO 的Socket 实现、AIO 的 Socket 实现。IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。原创 2020-04-22 21:59:30 · 614 阅读 · 0 评论 -
深入理解Java锁升级:无锁 → 偏向锁 → 轻量级锁 → 重量级锁
JDK1.6为了减少获得锁和释放锁所带来的性能消耗,引入了“偏向锁”和“轻量级锁”,所以在JDK1.6里锁一共有四种状态,无锁状态,偏向锁状态,轻量级锁状态和重量级锁状态,它会随着竞争情况逐渐升级。锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向锁。原创 2020-04-18 15:30:14 · 12786 阅读 · 11 评论 -
HashMap的前世今生(从JDK1.7到JDK1.8)
我们都知道HashMap是线程不安全的,在多线程的环境下不建议使用它。那么,它到底是哪里线程不安全呢?HashMap在JDK1.7和1.8做了很多改变,你都知道吗?原创 2020-04-18 14:34:33 · 611 阅读 · 0 评论 -
Spring的这些常见面试题,你都知道吗?
文章目录BeanFactory 和 ApplicationContext 有什么区别Spring Bean 的生命周期Spring IOC 如何实现说说 Spring AOPSpring AOP 实现原理动态代理(CGLIB 与 JDK)Spring 事务实现方式Spring 事务底层原理如何自定义注解实现功能Spring MVC 运行流程Spring MVC 启动流程Spring 的单例实现原理...原创 2020-04-12 17:38:56 · 475 阅读 · 0 评论 -
int和Integer有什么区别?(自动装箱和拆箱类型的面试题)
自动装箱实际上算是一种语法糖。可以简单理解为 Java 平台为我们自动进行了一些转换,保证不同的写法在运行时等价,它们发生在编译阶段,也就是生成的字节码是一致的。原创 2020-01-03 16:03:04 · 688 阅读 · 0 评论 -
一文总结Java I/O流基础知识
本文主要总结了Java的File类 ,字节流,字符流,缓冲流等基础知识,适合初学者来初步入门,也适合Java大佬们用来复习基础知识。原创 2020-04-14 14:15:20 · 211 阅读 · 0 评论 -
常见数据结构总结(经典)
文章目录栈队列数组链表树二叉树二叉查找树/二叉排序树平衡二叉树红黑树数据存储的常用结构有:栈、队列、数组、链表和树。栈栈:stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。简单的说:采用该结构的集合,对元素的存取有如下的特点先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元...原创 2020-04-08 14:42:38 · 997 阅读 · 0 评论 -
Stream:从入门到精通,这篇你不能错过
文章目录引言流式思想概述获取流方式常用方法函数拼接与终结方法forEach : 逐一处理count:统计个数filter:过滤limit:取用前几个skip:跳过前几个map:映射concat:组合Stream综合案例收集Stream结果收集到集合中收集到数组中在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。引言传...原创 2020-04-07 12:00:46 · 427 阅读 · 0 评论 -
多线程下的并发包:这些面试必问的,你都知道吗?
文章目录ConcurrentHashMapCountDownLatchCyclicBarrierSemaphoreExchanger在JDK的并发包里提供了几个非常有用的并发容器和并发工具类,供我们在多线程开发中进行使用。并发包的来历:在实际开发中如果不需要考虑线程安全问题,大家不需要做线程安全,因为如果做了反而性能不好!但是开发中有很多业务是需要考虑线程安全问题的,此时就必须考虑...原创 2020-04-06 14:45:17 · 946 阅读 · 0 评论 -
Lambda:Java代码简化神器,程序员必备
文章目录方法引用方法引用基本使用函数式编程思想概述Lambda的前提条件Lambda的优化Lambda的格式标准格式参数和返回值省略格式综合案例方法引用方法引用使得开发者可以直接引用现存的方法、Java类的构造方法或者实例对象。方法引用和Lambda表达式配合使用,使得java类的构造方法看起来紧凑而简洁,没有很多复杂的模板代码。方法引用基本使用方法引用使用一对冒号 :: 。代码示...原创 2020-04-06 14:44:36 · 5809 阅读 · 20 评论 -
面试官:谈谈你对并发编程下原子性操作的认识
文章目录引出问题(代码示例)问题原理说明问题解决方法1:使用锁机制方法2:原子类AtomicInteger原子类CAS机制实现线程安全概述源码分析CAS与Synchronized:乐观锁,悲观锁。概述:所谓的原子性是指在一次操作或者多次操作中,要么所有的操作全部都得到了执行并且不会受到任何因素的干扰而中断,要么所有的操作都不执行。引出问题(代码示例)class VolatileAtomi...原创 2020-04-06 08:42:57 · 1338 阅读 · 0 评论 -
面试官:怎么解决并发变量下变量不可见性问题?
文章目录引出问题(代码示例)Java内存模型(JMM)问题分析问题处理方案一:加锁方案二:volatile关键字volatile的原理和实现机制volatile与synchronized区别问题:子线程修改了某个成员变量的值,但是在主线程中读取到的还是之前的值修改后的值无法读取到。引出问题(代码示例)public class VolatileThread extends Thread {...原创 2020-04-05 18:13:50 · 1656 阅读 · 0 评论 -
多线程安全问题:一文深入理解以及解决方案
线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。原创 2020-04-05 13:18:55 · 750 阅读 · 0 评论 -
Java线程相关的基础知识【必备】
文章目录推荐阅读什么是线程Thread线程特点线程和进程的区别线程的创建和启动线程的创建线程的启动两种线程创建方式的比较第三种方式:实现Callable接口线程的生命周期线程控制方法线程同步线程同步的实现方案同步监视器锁机制优缺点线程通信线程池什么是线程池线程池的好处线程池的应用场合线程池参数推荐阅读JVM从入门到地狱,你想要的样子它都有(O(∩_∩)O)~~~Java集合的这些知识,20...原创 2020-04-04 17:47:29 · 608 阅读 · 0 评论 -
Java反射机制:一文深入理解(概念+代码示例)
文章目录推荐阅读Java的动态性反射机制:框架设计的灵魂Class类介绍获取Class对象的方式Class对象功能获取功能案例反射机制的常见作用反射机制操作注解反射机制性能问题动态语言:程序运行时,可以改变程序结构或变量类型。JAVA不是动态语言,JAVA可以称之为“准动态语 言”。但是JAVA有一定的动态性,我们可以利用反射机制、 字节码操作获得类似动态语言的特性。推荐阅读JV...原创 2020-04-04 11:34:45 · 439 阅读 · 0 评论 -
Java集合相关知识总结
文章目录集合架构CollectionCollection方法迭代器---IteratorListListIteratorListIterator方法ArrayListArrayList遍历方式LinkedListLinkedList 遍历方式ArrayList 与 LinkedList 区别VectorArrayList 与 Vector 区别SetHashSetLinkedHashSetTree...原创 2020-04-03 16:40:56 · 766 阅读 · 0 评论 -
JVM相关的基础知识,持续完善中...
文章目录入门JVM是什么?JVM结构及各个模块作用分析程序计数器(Program Counter Register)Java虚拟机栈(Java Virtual Machine Stacks)本地方法栈(Native Stack)Java 堆(Heap, Garbage Collection Heap)方法区(Method Area)类信息(Class Data)运行时常量池(Run-Time Co...原创 2020-04-02 21:00:38 · 644 阅读 · 0 评论 -
JVM大厂高频面试题,连这些都不知道,还敢说自己学过JVM?
文章目录1. 内存模型以及分区,需要详细到每个区放什么。2. 堆里面的分区:Eden,survival (from+ to),老年代,各自的特点。3. 对象创建方法,对象的内存分配,对象的访问定位。4. GC 的两种判定方法:5. SafePoint 是什么6. GC 的三种收集方法的原理与特点,分别用在什么地方?7. GC 收集器有哪些?CMS 收集器与 G1 收集器的特点。8. Minor G...原创 2020-04-02 20:49:37 · 845 阅读 · 0 评论 -
RESTful最佳实践【通俗解释】
RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。REST 是一种很笼统的概念,它代表一种架构风格。原创 2020-03-30 11:51:14 · 465 阅读 · 1 评论 -
在服务器上(Linux)部署应用程序
安装JDK解压缩并移动到指定目录上传jdk压缩包到linux根目录解压缩tar -zxvf jdk-8u152-linux-x64.tar.gz创建目录mkdir -p /usr/local/java移动安装包mv jdk1.8.0_152/ /usr/local/java/设置所有者chown -R root:root /usr/local/java/...原创 2020-03-22 09:25:08 · 1239 阅读 · 0 评论 -
java基础(三)
泛型泛型:可以将类型在类、方法、接口之间进行传递泛型遵循大驼峰命名,一般只一个大写字母表示泛型,只能在当前类中使用。子类不能继承使用集合存储数据的容器数组长度不可变;集合长度可变,动态进行调整数组可以存储任意数据类型的元素,集合只能存储引用类型的元素collection接口详细请戳:https://blog.csdn.net/qq_40722827/article/det...原创 2020-03-06 17:33:27 · 176 阅读 · 0 评论 -
java基础(二)
排序几大排序算法选择排序冒泡排序快速排序二分排序希尔排序桶排序堆排序Arrays工具类Arrays.sort(array) : 排序Arrays.toString(array) : 将数组中内容拼接成字符串Arrays.binarySearch(array,5) : 使用二分查找法,查询元素的下标Arrays.copyOf(array,10) : 从数组中拷...原创 2020-03-06 17:32:15 · 439 阅读 · 0 评论 -
java基础(一)
进制转换进制转换辗转相除法累加法原反补原码:直接计算得出的二进制形式反码:正数的原码与反码相同,负数的反码符号位不变,其他位按位取反补码:正数的补码和反码相同,负数的补码是反码+1字符转换整形可以和字符型进行转换。位运算参与运算的一定是整型一个数字与另外一个数字异或两次,一定得到自己(算法中常用到)交换两个变量的值 a = a^b; b = a ...原创 2020-03-06 17:26:52 · 175 阅读 · 0 评论