Java基础
行万里路,读万卷书
工作三年
展开
-
认识异或运算
计算机异或运算原创 2023-03-03 21:06:16 · 960 阅读 · 0 评论 -
nginx-反向代理服务器
1.请求转发2.负载均衡3.静态分离原创 2022-02-04 11:40:11 · 2203 阅读 · 0 评论 -
字符集编码
ASCII:美国标准化信息交换码,用一个字节的7位可以表示ISO8859-1:拉丁码表,欧洲码表,用一个字节的8位表示GB2312:中国的中文编码表,最多两个字节编码所有字节GBK:中国的中文编码表升级,融合了更多的中文文字符号,最多两个字节编码Unicode:国际标准码,融合了目前人类使用的所有字符,为每个字符分配唯一的字符码,所有的文字都用两个字节来表示UTF-8:变长的编码方式,可用1-4个字节来表示一个字符...原创 2022-01-02 15:44:43 · 233 阅读 · 0 评论 -
线程的三种同步机制
1.同步代码块2.同步方法3.Lock锁 – JDK 5.0 新增转载 2021-12-19 17:28:49 · 609 阅读 · 0 评论 -
创建多线程的四种方式
1.继承Thread类2.实现Runnable接口3.实现Callable接口4.使用线程池原创 2021-12-19 16:39:09 · 193 阅读 · 0 评论 -
线程之间的通信
这里由一个金典例子引入题目:使用两个线程打印1-100,线程1,线程2,交替打印public class CommunicationTest { public static void main(String[] args) { Number number = new Number(); Thread thread1 = new Thread(number); Thread thread2 = new Thread(number);原创 2021-12-19 10:44:30 · 88 阅读 · 0 评论 -
线程的生命周期
JDK中用Thread.State类定义了线程的几种状态要想实现多线程,必须在主线程中创建新的线程对象,Java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态:新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已经具备了运行的条件,只是没有分配到CPU资源运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run()方法定义了线原创 2021-12-18 19:55:10 · 260 阅读 · 0 评论 -
==和equals的区别
1.==运算符可以使用在基本数据类型变量和引用数据类型变量中如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等(不一定类型要相同)如果比较的是引用数据类型变量,比较两个对象的地址值是否相等,即两个对象是否指向堆空间中的同一个实体...原创 2021-12-01 22:18:25 · 385 阅读 · 0 评论 -
sleep和wait的区别
1.所属类不同sleep()方法属于Thred类,而wait()方法属于Object类2.持有锁的状态不同sleep()方法导致了程序暂停执行指定的时间,让出cpu给其他线程,但是他的监控状态依然保持,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备。3.应用场景不同sleep可以在任何地方使用,而wait只能在原创 2021-11-29 22:27:12 · 2590 阅读 · 0 评论 -
synchronized和Lock区别
1.Synchronized 和 Lock的概念Synchronized是Java并发编程中很重要的一个关键字。被Synchronized修饰的代码段,一次只允许一个线程进入,当前线程处理完退出后,下一个线程才能调用该代码段。Lock 是 Java并发编程中很重要的一个接口,Lock需要手动加锁和手动解锁,一般通过 lock.lock() 方法来进行加锁, 通过 lock.unlock() 方法进行解锁。与 Lock 关联密切的锁有 ReetrantLock 和 ReadWriteLock。...原创 2021-11-28 10:45:05 · 132 阅读 · 0 评论 -
ArrayList、LinkedList和Vector的区别
1.三者之间的关系2.ArrayList和LinkedList之间的区别(1)相同点ArrayList和LinkedList都继承了AbstractList抽象类,都实现了Lits接口原创 2021-11-27 18:07:03 · 3072 阅读 · 0 评论 -
面向过程和面向对象
面向过程(POP)和面向对象(OOP)二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象内,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。面向对象的三大特征封装继承多态...原创 2021-10-17 19:50:54 · 124 阅读 · 0 评论 -
解释执行与编译执行语言有什么区别?
一、主题不同1.编译执行:由编译程序将目标代码一次性编译成目标程序,再由机器运行目标程序。2.解释执行:将源语言直接作为源程序输入,解释执行,解释一句后就提交计算机执行一句,并不形成目标程序。二、优势不同1.编译执行:相比解释执行编译执行效率高,占用资源小,适合复杂程序。2.解释执行:开发速度快,出现严重BUG的几率小。三、缺点不同1.编译执行:兼容性差,例如在windows平台上写的程序一般不可以在unix平台上运行。2.解释执行:解释需要时间,不生成目标程序而是一句一句的执行的方式会造成原创 2021-08-11 21:42:27 · 4525 阅读 · 0 评论 -
消息推送机制
1.长连接:在页面中嵌入一个隐藏的jframe,将其src属性设置为一个对长连接的请求或者采用xrh请求,服务器就能源源不断地往客户端输送数据(如gmail聊天)优点:消息及时到达,不发无用的请求,管理起来方便;缺点:服务器维护一个长连接会增加开销。...原创 2020-08-22 08:22:10 · 682 阅读 · 0 评论 -
内存溢出、内存泄漏
内存溢出:程序在申请内存时,没有足够的内存空间可供使用,比如说申请了Long类型的数据,但存了一个Integer类型的数内存泄漏:程序向系统申请了分配内存,无法释放已申请的内存空间,堆积起来最终会导致内存溢出...原创 2020-08-19 20:01:46 · 213 阅读 · 1 评论 -
与C和C++相比较,Java有什么优缺点?
1.简单易学:Java比C/C++简单,学起来比C/C++容易;2.面向对象:原创 2020-08-19 19:16:02 · 3859 阅读 · 3 评论 -
HTTP 1.0和HTTP 1.1的主要区别是什么?
HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。 主要区别主要体现在:长连接 : 在HTTP/1.0中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接。HTTP 是基于TCP/IP协议的,每一次建立或者断开连接都...原创 2019-05-22 15:22:08 · 6293 阅读 · 0 评论 -
深拷贝和浅拷贝
深拷贝和浅拷贝的区别1.浅拷贝:将原对象或原数组的引用直接赋值给新对象,新数组,新对象/新数组只是原对象的一个引用。2.深拷贝:创建一个新的对象和数组,将原对象的各项属性的值拷贝过来,是“值”而不是“引用”。为什么要使用深拷贝我们希望在改变新的数组(对象)的时候,不改变原数组(对象)。怎么验证深拷贝是否成功改变任意一个新对象/数组中的属性/元素,都不改变原对象/数组只对第一层级做拷贝...原创 2019-08-03 20:13:03 · 125 阅读 · 0 评论 -
容器
Java中的容器主要包括Collection和Map两种。Collection1.SetHashSet:基于哈希实现,支持快速查找原创 2019-08-04 10:56:56 · 200 阅读 · 0 评论 -
深入理解Java虚拟机
概念虚拟机:指以软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统 ,是物理机的软件实现。常用的虚拟机有VMWare,Visual Box,Java Virtual Machine(Java虚拟机,简称JVM)。Java虚拟机阵营Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google...原创 2019-07-22 20:11:53 · 198 阅读 · 0 评论 -
|与||,&与&&的区别
|、||、&、&&是java的逻辑运算符,分别表示|(或),||(短路或),&(与),&&(短路与)。&和&&都是表示与,区别是&&只要第一个条件为假,后面的条件就不再判断。|和||都是表示“或”。区别是||只要满足第一个条件,后面的条件就不在判断,而|要对所有的条件都进行判断。注意当他们进行运算的时候,...原创 2019-08-07 22:17:13 · 3724 阅读 · 0 评论 -
PriorityQueue
PriorityQueuePriorityQueue是基于优先级堆的极大优先级队列。此队列按照在构造时所指定的顺序对元素排序,即可以根据元素的自然顺序来指定排序方式,也可以根据Comparator来指定排序方式,这取决于使用哪种构造方法。优先级队列不允许null元素。依靠自然排序的优先级队列还不允许插入不可比较的对象(这样会导致ClassCastException)此队列的头是按指定排序方...原创 2019-08-15 16:53:59 · 180 阅读 · 0 评论 -
Java中Collection和Collections的区别
根本区别1.Collection是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供最大化的统一操作方式。以下接口实现了Collection接口:map、set、list、vector2.Collections是一个包装类。它包含各种有关集合操作的静态多态方法。此类不能...原创 2019-08-31 10:42:08 · 9741 阅读 · 4 评论 -
Java的三大特性解读
封装(1) 概念将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。(2) 好处只能通过规定的方法访问数据。隐藏类的实例细节,方便修改和实现。...原创 2019-08-31 15:09:59 · 2096 阅读 · 1 评论 -
Comparable和Comparator区别
Comparable和Comparator都是用于比较数据的大小的,实现Comparable接口需要重写compareTo方法,实现Comparator接口需要重写compare方法,这两个方法的返回值都是int,用int类型的值来确定比较结果,在Collections工具类中有一个排序方法sort,此方法可以只传一个集合,另一个重载版本是传入集合和比较器,...原创 2019-09-01 18:45:47 · 144 阅读 · 0 评论 -
Java中的序列化和反序列化
序列化java序列化是指把java对象转换为字节序列的过程。对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存着java对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建。反序列化java反序列化是指把字节序列恢复为java对象的过程。...原创 2019-09-03 19:36:26 · 154 阅读 · 1 评论 -
Java反射机制
一、什么是反射?Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。二、反射的三种方式(1)第一种方式这个方法其实是Object的一个方法,Class继承了Object,所以我们可以直接使用。public class Test { ...原创 2019-09-11 20:19:04 · 173 阅读 · 0 评论 -
JDK、JVM、JRE的区别
JVM(Java Virtual Machine),Java虚拟机,它只能认识.java类型的文件,它能将.class文件中的字节码指令进行识别并调动操作系统上的API完成动作。所以说,JVM是Java能够跨平台的核心。JRE(Java Runtime Environment),Java运行时环境。它主要包含两个部分,JVM的标准实现和Java的一些基本类库。它相对于JVM来说,多出来的是一部分...原创 2019-07-25 11:19:36 · 128 阅读 · 0 评论 -
I/O模型
模型分类Unix下可用的5中模型阻塞式I/O非阻塞式I/OI/O复用信号驱动I/O异步I/O原创 2019-07-18 22:21:30 · 76 阅读 · 0 评论 -
Java中常见的15种锁
- 公平锁VS非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。原创 2019-07-06 19:29:11 · 214 阅读 · 2 评论 -
如何判断对象已经死亡
引用计数法给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加 1;当引用失效,计数器就减 1;任何时候计数器为 0 的对象就是不可能再被使用的。可达性分析算法这个算法的基本思想就是通过一系列的称为 “GC Roots” 的对象作为起点,从这些节点开始向下搜索,节点所走过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链相连的话,则证明此对象是不可用的。再谈引用3...原创 2019-05-17 16:44:34 · 703 阅读 · 0 评论 -
JVM内存分配与回收
Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java 自动内存管理最核心的功能是 堆 内存中对象的分配与回收。Java 堆是垃圾收集器管理的主要区域,因此也被称作GC 堆(Garbage Collected Heap).从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以 Java 堆还可以细分为:新生代和老年代:再细致一点有:Eden 空间、From S...原创 2019-05-17 16:30:53 · 239 阅读 · 1 评论 -
String的使用
String对象的两种创建方式String str1 = “abcd”; //先检查字符串常量池中有没有"abcd",如果字符串常量池中没有,则创建一个,然后 str1 指向字符串常量池中的对象,如果有,则直接将 str1 指向"abcd"";String str2 = new String(“abcd”); //堆中创建一个新的对象String 类型的常量池比较特殊。它的主要使用方法...原创 2019-05-17 16:08:42 · 276 阅读 · 0 评论 -
Java创建对象的过程
类加载检查虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程。分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从 Java 堆中划分出来。分配方...原创 2019-05-17 15:52:59 · 237 阅读 · 0 评论 -
JVM分配内存的两种方式
当使用new关键字创建一个类的对象时,虚拟机需要为新生对象分配内存空间,而对象的大小在类加载完成后已经确定了,所以分配内存只需要在Java堆中划分出一块大小相等的内存。在Java虚拟机中有指针碰撞和空闲列表两种方式分配内存。1. 指针碰撞方式如果Java堆中内存是规整排列的,所有被用过的内存放一边,空闲的可用内存放一边,中间放置一个指针作为它们的分界点,在需要为新生对象分配内存的时候,只要将指...原创 2019-05-17 15:44:19 · 1708 阅读 · 0 评论 -
Cookie的作用是什么?和Session有什么区别?
Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。Cookie 一般用来保存用户信息 比如①我们在 Cookie 中保存已经登录过得用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了;②一般的网站都会有保持登录也就是说下次你再访问网站的时候就不需要重新登录了,这是因为用户登录的时候我们可以存放了一个 Token 在 Cookie ...原创 2019-05-22 15:17:20 · 6308 阅读 · 0 评论 -
BIO,NIO,AIO
Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。同步与异步同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求...原创 2019-05-20 16:17:21 · 188 阅读 · 0 评论 -
类加载器
类加载器总结JVM 中内置了三个重要的 ClassLoader,除了 BootstrapClassLoader 其他类加载器均由 Java 实现且全部继承自java.lang.ClassLoader:1)BootstrapClassLoader(启动类加载器) :最顶层的加载类,由C++实现,负责加载 %JAVA_HOME%/lib目录下的jar包和类或者或被 -Xbootclasspat...原创 2019-05-20 16:07:26 · 107 阅读 · 0 评论 -
类加载过程
系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。加载类加载过程的第一步,主要完成下面3件事情:1.通过全类名获取定义此类的二进制字节流2.将字节流所代表的静态存储结构转换为方法区的运行时数据结构3.在内存中生成一个代表该类的 Class 对象,作为方法区这些数据的访问入口连接2.1 验证2.2...原创 2019-05-20 15:51:59 · 187 阅读 · 0 评论 -
并发
进程是系统运行程序的基本单位,进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。线程线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进...原创 2019-05-14 22:05:02 · 101 阅读 · 0 评论