- 博客(224)
- 收藏
- 关注
原创 Java异常处理和设计
异常的英文单词是exception,字面翻译就是“意外、例外”的意思,也就是非正常情况。事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误。比如使用空的引用、数组下标越界、内存溢出错误等,这些都是意外的情况,背离我们程序本身的意图。错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误,在编译期间出现的错误有编译器帮助我们一起修正,然而运行期间的错误便不是编译器力所能及了,并且运行期间的错误往往是难以预料的。...
2022-08-27 10:14:56
267
原创 2022年整理最详细的java面试题、掌握这一套八股文、面试基础不成问题[吐血整理、纯手撸]
java中的编译器和解释器java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟机的机器。这台虚拟机的机器在任何平台上都提供给编译程序一个共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转化为特定系统的机器码执行。在java中,这种提供虚拟机理解的代码叫做字节码(即扩展名为.class的文件),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。...
2022-08-27 10:07:09
184
原创 java集合之HashTable分析
Hashtable 与 HashMap 都是 Map 族中较为常用的实现,也都是 Java Collection Framework 的重要成员,它们的本质都是 链表数组。Hashtable 和 HashMap 既是 Java Collection Framework 的重要成员,也是 Map 族(如下图所示)的核心成员,二者的底层实现都是一个链表数组,具有寻址容易、插入和删除也容易的特性。...
2022-08-26 16:34:12
153
原创 Java多线程
进程是程序执行的实体,每一个进程都是一个应用程序(比如我们运行QQ、浏览器、LOL、网易云音乐等软件),都有自己的内存空间,CPU一个核心同时只能处理一件事情,当出现多个进程需要同时运行时,CPU一般通过时间片轮转调度算法,来实现多个进程的同时运行...
2022-08-26 16:13:10
758
1
原创 Java实体映射工具MapStruct使用详解
通常在后端开发中经常不直接返回实体Entity类,经过处理转换返回前端,前端提交过来的对象也需要经过转换Entity实体才做存储;通常使用的BeanUtils.copyProperties方法也比较粗暴,不仅效率低下(使用反射)而且仅映射相同名的属性,多数情况下还需要手动编写对应的转换方法实现。插件MapStruct以接口方法结合注解优雅实现对象转换,MapStruct生成器生成代码以更贴近原生的Setter、Getter方法处理属性映射更为高效...
2022-08-26 16:02:48
7263
原创 各种排序算法的分析及java实现
思想:初始时把要排序的数的序列看作是一棵顺序存储的二叉树,调整它们的存储序,使之成为一个 堆,这时堆的根节点的数最大。(3)在希尔排序开始时增量较大,分组较多,每组的记录数目少,故各组内直接插入较快,后来增量di逐渐缩小,分组数逐渐减少,而各组的记录数目逐渐增多,但由于已经按di-1作为距离排过序,使文件较接近于有序状态,所以新的一趟排序过程也较快。1、基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。...
2022-08-26 14:05:31
105
原创 【无标题】
在前面的学习集合中只是介绍了集合的相关用法,我们想要更深入的去了解集合那就要通过我们去分析它的源码来了解它。希望对集合有一个更进一步的理解!
2022-08-26 13:49:36
47
原创 Java虚拟机5:Java垃圾回收(GC)机制详解
哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无非就是那些不可能再被任何途径使用的对象。那么如何找到这些对象?
2022-08-26 13:30:40
341
原创 Java并发之AQS详解
谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronized(AQS)
2022-08-26 13:25:26
89
原创 JAVA中的“抽象接口”
在程序设计过程中,读者很可能遇到这样一种困境:设计了一个接口,但实现这个接口的子类并不需要实现接口中的全部方法,也就是说,接口中的方法过多,对于某些子类是多余的,我们不得不浪费的写上一个空的实现...
2022-08-26 13:16:54
189
原创 Java内存模型之happens-before
happens-before原则非常重要,它是判断数据是否存在竞争、线程是否安全的主要依据,依靠这个原则,我们解决在并发环境下两操作之间是否可能存在冲突的所有问题。下面我们就一个简单的例子稍微了解下happens-before ...
2022-08-26 13:11:12
476
原创 【Java】一文认识IO操作流
这个我想大家都知道,ppt啊,world文件,都是文件文件是在程序中已流的形式来操作的实在不行你们就理解为下面的 (杯子是文件)(水是数据)水到胃就是输入流,往肚子里面输,胃到水就是输出流,往肚子外吐。...
2022-08-26 11:55:09
64
原创 JAVA【常见基础知识】
get方式隐私性,安全性较差,这是由于get的参数会放到url的后面,get是把参数数据列加到提交表单的属性所指的url中,值和表单内各个字段一一对应,以name=value的方式,添加到前端界面action所指的url后面,并且用"?SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中,攻击者在界面的表单信息或URL上输入一些奇怪的SQL片段( 例如“or ‘1’=‘1’”这样的语句),有可能入侵参数检验不足的应用程序。它的参数不在url中。
2022-08-25 13:35:32
45
原创 JAVA中PRIORITYQUEUE详解
前面以JavaArrayDeque为例讲解了Stack和Queue,其实还有一种特殊的队列叫做,即优先队列。优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(),也可以通过构造时传入的比较器(Comparator,类似于C++的仿函数)。Java中实现了Queue接口,不允许放入null元素;其通过堆实现,具体说是通过完全二叉树()实现的。
2022-08-25 10:35:09
224
原创 Java内存管理:深入Java内存区域
对于Java程序员来说,在虚拟机的自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,而且不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存一切都很美好。不过,也正是因为Java程序员把内存控制的权力交给了Java虚拟机,一旦。
2022-08-25 10:31:35
99
原创 java中的反射
Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的內部信息,并能直接操作任意对象的内部属性及方法。在运行时构造任意一个类的对象在运行时获取任意一个类所具有的成员变量和方法在运行时调用任意一个对象的方法(属性)生成动态代理Class 是一个类;一个描述类的类.封装了描述方法的 Method,描述字段的 Filed,描述构造器的 Constructor 等属性.
2022-08-25 10:27:02
77
原创 LRU缓存实现(Java)
LRU是Least Recently Used 的缩写,翻译过来就是“最近最少使用”,LRU缓存就是使用这种原理实现,简单的说就是缓存一定量的数据,当超过设定的阈值时就把一些过期的数据删除掉,比如我们缓存10000条数据,当数据小于10000时可以随意添加,当超过10000时就需要把新的数据添加进来,同时要把过期数据删除,以确保我们最大缓存10000条,那怎么确定删除哪条过期数据呢,采用LRU算法实现的话就是将最老的数据删掉,废话不多说,下面来说下Java版的LRU缓存实现。
2022-08-25 09:58:10
530
原创 Java源码分析 | Object
Object 类是类层次结构的根。每个类都有 Object 类作为超类。所有对象,包括数组等,都实现了这个类的方法
2022-08-25 09:47:05
74
转载 【Java】深拷贝和浅拷贝,Cloneable接口
Cloneable是标记型的接口(空接口),它们内部都没有方法和属性,实现 Cloneable来表示该对象能被克隆,能使用Object.clone()方法。如果没有实现 Cloneable的类对象调用clone()就会抛出CloneNotSupportedException异常。可以理解为Cloneable接口发挥的是标记功能,自定义类型需要用户自己标记出哪些类是可以clone的,这个标记就是去实现Cloneable接口,实现了Cloneable接口后就表明该类创建的对象可以被克隆。
2022-08-25 09:38:09
74
原创 java 向上转型和向下转型
向上转型后父类的引用所指向的属性是父类的属性,如果子类重写了父类的方法,那么父类引用指向的或者调用的方法是子类的方法,这个叫动态绑定。3、upcasting 会丢失子类特有的方法,但是子类overriding 父类的方法,子类方法有效,向上转型只能引用父类对象的属性,要引用子类对象属性,则要写getter函数。好,终于也理解了为什么要向上转型,一旦向上转型了,当需要用到子类的方法时,就需要向下转型,也就是为什么要向下转型也解决了。非要调用子类扩展的方法,比如speak方法,就只能向下转型了。
2022-08-24 13:53:33
297
原创 深入理解Java引用类型
在上图中引用类型在传参时不是在heap中再分配一块内存来存变量c 所指向的A(),而是让a 指向同一个A 的实例,这就与C++ 中的指针一样,先声明指针变量a,b,c,d 在传参的时候让a 指向c所指向的内存,让 d 指向 b 所指向的内存。很明显Java中的引用与C++中的指针在原理上是相类似的,但记住Java没有指针,只有引用。以参数形式传递简单类型的变量时,实际上是将参数的值作了一个拷贝传进方法函数的,那么在方法函数里再怎么改变其值,其结果都是只改变了拷贝的值,而不是源值。还是String a;
2022-08-24 13:43:09
825
1
原创 【java】java反射初探 ——“当类也学会照镜子”目录
(反射机制)照出(反射)了人的全貌(类的全方位的信息,例如方法,成员变量和构造器等的相关信息)
2022-08-24 13:26:21
79
原创 Java Main如何被执行?
x86-64的所有寄存器都是与机器字长(数据总线位宽)相同,即64位的,x86-64将x86的8个32位通用寄存器扩展为64位(eax、ebx、ecx、edx、eci、edi、ebp、esp),并且增加了8个新的64位寄存器(r8-r15),在命名方式上,也从”exx”变为”rxx”,但仍保留”exx”进行32位操作,下表描述了各寄存器的命名和作用。(1).前4个参数的int类型分别通过rcx、rdx、r8、r9传递,多余的在栈空间上传递(从右向左依次入栈),寄存器所有的参数都是向右对齐的(低位对齐)
2022-08-24 10:44:10
239
原创 Java SPI详解
SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。SPI的作用就是为这些被扩展的API寻找服务实现。
2022-08-24 10:32:50
96
原创 Thymeleaf(Java模板引擎)
Thymeleaf是Web和独立环境的开源的Java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至纯文本
2022-08-24 10:29:36
2795
原创 Java虚拟机(JVM)-- Dump内存快照
Settings–Tools–JProflier–JProflier executable选择JProfile安装可执行文件。(如果系统只装了一个版本,启动IDEA时会默认选择)保存。注意:安装路径,建议选择一个文件名中没有中文,没有空格的路径 ,否则识别不了。补充: 文件Dump完后,如果这些文件闲置了可以清理删掉。vm参数 : 把初始内存设置为1MB 总内存设置为8MB。安装之后可以看见多了一个JProfiler的Icon。使用JProfiler。
2022-08-24 09:59:25
499
原创 Java精进-20分钟学会mybatis使用
希望现在的你无论有明确具体的目标还是没有,都能重视自己的需求和目标,并且常常回顾,或许可以找一个你习惯的方式写出来,挂在哪里,电脑或日记本都好。当你疲惫或迷茫的时候拿出来看一下,这在情怀领域大概可以叫“不忘初心”
2022-08-24 09:55:46
171
原创 JVM(一):jvm中的数据结构(内存模型):Java Virtual Machine Specification Runtime Data Areas
jvm会将内存划分为若干个区域进行管理,这些区域有各自的用途以及生命周期。根据各个数据区的作用,可以将这些区域分为两大类,即线程间共享的数据区和线程间私有的数据区,其中方法区和堆是由所有线程共享的数据区域,虚拟机栈、本地方法栈和程序计数器为各个线程私有。
2022-08-23 14:23:19
54
原创 别再乱打日志了,这份 Java 日志规范,应有尽有,建议收藏!!
日志是快速定位问题的好帮手,是撕逼和甩锅的利器!打印好日志非常重要。今天我们来聊聊日志打印的 15 个好建议~常见的日志级别有5种,分别是 error、warn、info、debug、trace。日常开发中,我们需要选择恰当的日志级别,不要反手就是打印 info 哈~正在上传…重新上传取消error:错误日志,指比较严重的错误,对正常业务有影响,需要运维配置监控的;warn:警告日志,一般的错误,对业务影响不大,但是需要开发关注;
2022-08-23 13:50:28
576
原创 Java四种引用类型
虚引用是最弱的一种引用关系,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收,在 JDK1.2 之后,用 PhantomReference 类来表示,通过查看这个类的源码,发现它只有一个构造函数和一个 get() 方法,而且它的 get() 方法仅仅是返回一个null,也就是说将永远无法通过虚引用来获取对象,虚引用必须要和 ReferenceQueue 引用队列一起使用。如果想中断强引用与对象之间的联系,可以显示的将强引用赋值为null,这样一来,JVM就可以适时的回收对象了。
2022-08-23 13:38:00
38
原创 Java自定义注解
编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时将被读取(请注意并不影响class的执行,因为Annotation与class在使用上是被分离的)。这个约束使得处理器很难表现一个元素的存在或缺失的状态,因为每个注解的声明中,所有元素都存在,并且都具有相应的值,为了绕开这个约束,我们只能定义一些特殊的值,例如空字符串或者负数,一次表示某个元素不存在,在定义注解时,这已经成为一个习惯用法。作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
2022-08-23 09:48:53
47
原创 Java性能优化的七个方向
了解了优化目标后,那接下来应该从哪些方面入手呢?本文主要侧重于理论分析,我们从整体上看一下 Java 性能优化都有哪些可以遵循的规律。本文主讲理论。关于实践,后续的文章会用较多的案例来细化本文的知识点,适合反复思考和归纳
2022-08-23 09:20:38
59
原创 【Java性能调优】(性能调优流程)从系统评估到性能调优
调优前首先要做的是 衡量系统现状 ,这包括目前系统的请求次数、响应时间、资源消耗等信息,例如A系统目前95%的请求响应时间为1秒。在有了系统现状后可 设定调优目标 ,通常调优目标是根据用户所能接受的响应速度或系统所拥有的机器以及所支撑的用户量制定出来的,因此通常会设定出调优目标:95%的请求要在500ms 内返回。在设定了调优的目标后,需要做的是 寻找出性能瓶颈 ,这一步最重要的是找出造成目前系统性能不足的最大瓶颈点。找出后,可结合一些工具来找出造成瓶颈点的代码,到此才完成了这个步骤。在寻找到了造成瓶颈点的
2022-08-23 09:18:43
385
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人