
Java
昨日的桥
这个作者很懒,什么都没留下…
展开
-
【操作系统】怎么避免死锁?
怎么避免死锁?银行家算法。当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量,则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请资源数之和是否超过了该进程对资源的最大需求量,若超过则拒绝分配资源,若没超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若满足则按当前的申请量分配资源,否则也要推迟分配。安全序列是指系统能按某种进程推进顺序(P1,P2, P3, …, Pn),为每个进程原创 2020-06-17 19:58:21 · 251 阅读 · 0 评论 -
Java异常相关知识汇总
一、异常体系结构Java把异常作为一种类,当做对象来处理。所有异常类的基类是Throwable类。1. Throwable的子类有2个:Error和Exception。1.1 Exception的子类主要的有2个:IOException和RuntimeException1.1.1 IOException的子类主要的有:(1)EOFException,表示在输入中意外地到达文件或者流的...原创 2020-04-12 00:14:29 · 980 阅读 · 0 评论 -
Java中的静态代理与动态代理
转载自:https://blog.youkuaiyun.com/u014381710/article/details/49407527代理就是为一个对象提供一种代理以控制对这个对象的访问。代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。根据代理类的生成时间不同可以将代理分为静态代...转载 2020-04-01 11:23:04 · 127 阅读 · 0 评论 -
Unsafe和CAS
01、UnsafeJava无法直接访问底层操作系统,而是通过本地(native)方法来访问。不过尽管如此,JVM还是开了一个后门,JDK中有一个类Unsafe,它提供了硬件级别的原子操作。比如说获取某个属性在内存中的位置,比如说修改对象的字段值。这个类尽管里面的方法都是public的,但是并没有办法使用它们,JDKAPI文档也没有提供任何关于这个类的方法的解释。02、CASCAS指令需要有...原创 2020-03-28 18:34:42 · 207 阅读 · 0 评论 -
泛型的实现原理
一、泛型是什么?Java泛型(generics)是JDK 5中引入的一个新特性,泛型提供了编译时类型安全监测机制,该机制允许我们在编译时检测到非法的类型数据结构;泛型的本质就是参数化类型,也就是所操作的数据类型被指定为一个参数;二、泛型的好处1、类型安全。泛型的主要目的就是提高Java程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型...原创 2020-03-23 14:40:35 · 1315 阅读 · 0 评论 -
ArrayList和LinkedList的相同点和不同点
一、相同点1、ArrayList和LinkList都实现了以下接口:java.util.List、Cloneable、java.io.Serializable。由于实现了java.util.List接口,支持泛型,ArrayList和LinkList都能够用来存放各种数据类型的对象;实现了Cloneable接口,能够支持克隆;实现了java.io.Serializable接口,能够支持序列化。...原创 2020-03-23 14:37:59 · 1762 阅读 · 1 评论 -
Java中的自动装箱、拆箱
自动装箱与自动是Java语言中经常遇到的语法糖,属于早期(编译期)优化的技术。以下介绍了自动装箱和自动拆箱的底层原理、触发条件等。01、自动装箱和自动拆箱1、自动装箱:自动将基本数据类型转换成包装器类型;2、自动拆箱:自动将包装器类型转换成基本数据类型;02、自动装箱的底层原理自动装箱的时候实际调用的是各个包装器类型的valueOf()方法,所以只需要搞明白各个包装器类型的valueOf...原创 2020-03-10 18:58:53 · 323 阅读 · 0 评论 -
synchronized关键字详解
从synchronized的用法,到synchronized的底层实现原理,以及锁优化后,对各种优化策略的灵活使用。01、synchronized作用synchronized可以实现线程安全的3个方面:1、原子性:确保线程互斥地访问同步代码。2、可见性:保证共享变量的修改能够及时可见。其实是通过Java内存模型中的 “对一个变量unlock操作之前,必须要同步到主内存中;如果对一个变量进行...原创 2020-03-10 13:51:02 · 174 阅读 · 0 评论 -
Java线程池的关键知识点总结
在熟悉线程池之前,其实应该先了解一下池化技术。什么是池化技术呢?就是将用过的资源保存起来,等下一次需要这种资源的时候,再拿出来重复使用。常见的池化技术有:线程池、连接池、内存池、常量池、对象池等。所以,可以类比着来学习。01、为什么要使用线程池?1、降低资源消耗。通过重复使用线程池中已经创建好的线程,来避免频繁的线程创建和销毁所带来的资源消耗。2、提高响应速度。减少CPU的空闲时间,提高系统...原创 2020-03-07 21:21:15 · 226 阅读 · 0 评论 -
HashMap关键知识点总结
HashMap也算是面试经常问的问题了,常见的HashMap数据结构、指针碰撞、线程不安全以及解决策略都是Java程序员必须熟悉的内容,这里简单归纳一下啦。一、HashMap的数据结构简单来说,HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。当链表长度大于8时,链表会转换成红黑树,当小于6时,又会退化为链表。二、HashMap的工作原理H...原创 2020-02-27 15:13:06 · 337 阅读 · 0 评论 -
Java中的线程安全与锁优化
如果一个对象可以被多线程同时使用,那他就是线程安全的。01、线程安全的定义当多个线程访问一个对象时,如果不用考虑这些线程在运行环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。02、Java语言中的线程安全按照线程安全的安全程度由强至弱来排序,我们可以将Java语言中各种操作共享的数据分为以...原创 2020-02-13 10:55:13 · 151 阅读 · 0 评论 -
Java内存模型与线程
并发处理的广泛应用使得Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类“压榨”计算机运算能力的最有利武器。计算机的运算速度与它的存储和通信子系统速度的差距太大,让计算机同时处理几项任务则是最容易想到、也被证明是非常有效的“压榨”手段。01、硬件的效率与一致性由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理...原创 2020-02-10 14:35:18 · 116 阅读 · 0 评论 -
Java虚拟机晚期(运行期)优化知识总结
01、为什么使用即时编译器Java程序最初是通过解释器进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,简称JIT编译器)。02、解释器与编译器两者各自的优势...原创 2020-02-02 17:06:50 · 144 阅读 · 0 评论 -
Java虚拟机早期(编译期)优化
从计算机程序出现的第一天起,对效率的追求就是程序天生的坚定信仰,这个过程犹如一场没有终点、永不停歇的F1方程式竞赛,程序员是车手,技术平台则是在赛道上飞驰的赛车。01、3种编译器Java语言有3类编译过程,分别对应着3种编译器:1、前端编译器:把*.java文件转成*.class文件(字节码文件),比如Javac。2、JIT编译器:把字节码转成机器码。3、AOT编译器:把*.java文件...原创 2020-01-31 23:28:21 · 143 阅读 · 0 评论 -
虚拟机类加载机制
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。01、虚拟机类加载机制是什么?虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,...原创 2020-01-30 15:54:53 · 114 阅读 · 0 评论 -
垃圾收集器与内存分配策略
你知道么?GC的历史比Java还要久远。1960年诞生于麻省理工的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。目前内存的动态分配与内存回收技术已经相当成熟。但是,当需要排查各种内存溢出、内存泄露问题时,当垃圾收集成为系统达到高并发量的瓶颈时,我们需要对这些内存动态分配和垃圾收集技术进行必要的监控和调节。以下对Java垃圾收集器与内存分配策略进行了归纳总结。01、哪些内存需要回收...原创 2020-01-17 17:09:35 · 149 阅读 · 0 评论 -
HotSpot虚拟机在Java堆中对象分配、布局和访问的全过程
三个过程:对象创建、内存布局、访问定位。1、对象的创建(1)虚拟机遇到一条new指令时,首先将取检查这个指令的参数是否能在常量池中定位到一个类的引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。(2)在类加载检查通过后,虚拟机将为新生对象分配内存。假设Java堆中内存时绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存...原创 2020-01-14 15:47:42 · 183 阅读 · 0 评论 -
LinkedHashMap是什么?
大家都知道,HashMap是一个无序的集合,所有存入HashMap的元素都会根据它的key值对应的hashCode来映射到一个Entity数组上,而不是根据存入的顺序进行排列的。对于一些需要使用排序的情况,HashMap是无能为力的,为了可以应对这种需要HashMap并且需要排序的情况,JDK 便推出了LinkedHashMap。LinkedHashMap继承了HashMap,通过使用一个双向...原创 2020-01-06 23:44:07 · 399 阅读 · 0 评论 -
Java虚拟机管理的内存包括哪些运行时数据区?
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。主要包括以下几个运行时数据区域。1、程序计数器(Program Counter Register)程序计数器是一块很小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程...原创 2020-01-02 14:59:27 · 560 阅读 · 0 评论 -
如何删除指定文件名的文件夹
一、问题需要删除指定文件夹内包含“视频”名称的文件夹,保留其他文件夹及文件。二、方法由于删除一个文件夹夹之前必须保证文件夹内没有文件。所以,需要构建两个方法,一个用来删除夹内部的文件,一个用来删除文件夹本身。删除文件夹内部文件需要使用递归。判断文件内部某一个文件是否是目录,如果不是目录,直接删除;如果是目录,对该目录继续调用递归函数,最后再将文件夹删除。三、代码public cla...原创 2019-12-25 16:30:25 · 1060 阅读 · 0 评论 -
【Java基础】集合为null与集合长度为0的区别
集合长度为0声明一个集合,但不赋值,指向一个新建、未初始化的集合对象。则该集合长度为0,但是不为空。List temp = new ArrayList();集合为null声明一个集合,直接赋值为空。则该集合为null,没有长度,如果调用temp.size()会抛出空指针异常。List temp = null;...原创 2019-12-25 11:12:56 · 1557 阅读 · 1 评论 -
正则表达式基础
一、概述其实,在最早的时候,正则表达式是被用在了Unix的工具集里面。我们所熟知的Python,Perl都是很典型的例子。从一定程度上来说,Perl的成功正是由于正则表达的成功应用。正则表达式可以实现一种灵活的文本处理,解决各种字符串处理相关的问题:匹配、选择、编辑和验证。二、String中的应用应用正则表达式的一个简答途径,就是使用String类的内建功能。比如,检查一个String是否...原创 2019-12-11 23:40:55 · 97 阅读 · 0 评论 -
基本数据类型与包装器类型
包装器类型Java中强调“一切都是对象”。因此,数据类型也都有对应的对象类型(也就是包装器类型),比如Boolean布尔类型、Character字符类型、Byte字节类型、Short短整型等。基本类型但是在用new方式创建一个对象——特别是小的、简单的变量,往往不是很** 高效 **。所以,在Java中数据类型就有一个特例——基本类型。基本类型不用new来创建变量,而是创建一个并非是引用...原创 2019-12-10 10:53:18 · 293 阅读 · 0 评论 -
Java中printf()方法里的%d和%s是什么意思?
一、格式化输出首先,这是Java中格式化输出部分的内容。Java中的printf()方法是类似于C语言的printf()风格的一种格式化输出功能。printf()并不使用重载的 “+” 操作符(C没有重载)来连接引号内的字符串或者字符串变量,而是使用特殊的占位符来表示数据将来的位置。而且它将插入格式化字符串的参数,按照顺序以逗号隔开,在字符串后面顺次排列。这些占位符在Java中被称为 格式修...原创 2019-11-24 11:38:19 · 16654 阅读 · 0 评论 -
使用java.swing制作一个计算综合成绩的桌面程序
使用java.swing制作一个计算综合成绩的桌面程序一、程序逻辑1、计算综合成绩2、获取用户名3、窗体界面4、事件监听器二、源码三、小程序效果图四、分析总结一、程序逻辑CalculateGPA小程序主要是为了方便Windows用户计算自己的综合成绩。开发的想法源于群里有人用C++或者VB实现了计算综合成绩的小程序,这让自己感觉Java也不能落后。其实,也就是晚上花了一点时间就做出来了,整个程...原创 2019-09-27 10:59:00 · 660 阅读 · 0 评论