JavaSE
文章平均质量分 77
Java 基础知识记录
Darren i
这个作者很懒,什么都没留下…
展开
-
Integer和Int的比较,谈谈拆卸和装箱
示例代码public static void main(String[] args) { Integer a = new Integer(10111); int b = 10111; boolean equal1 = a == b;//自动拆箱,xxxValue() boolean equal2 = a.equals(b);//自动装箱, valueOf() System.out.println(equal1);原创 2021-06-24 09:39:11 · 411 阅读 · 0 评论 -
finally块不被执行的情况总结
finally块的作用通常用于处理善后工作。当try块里出现异常时,会立即跳出try块,到catch块匹配对应的异常,执行catch块里的语句。此时,可能在try块里存在打开的文件没关闭,连接的网络没断开,这部分资源是GC所不能自动处理的,所以finally的作用就是将它们及时释放回收。finally块不被执行的情况,总共有3种:不进入try块、程序中止、线程中止(带finally块的是守护线程,其非守护线程都执行完毕)。1. 未执行try块对于try-catch-finally或者try-fina转载 2021-05-30 09:51:10 · 1456 阅读 · 0 评论 -
一文理清HashMap的实现及细节
前言最近阅读了许多HashMap实现及源码分析的文章,特意此文记录HashMap的知识点。HashMap 底层由 数组 + 链表 组成,在 jdk1.7 和 1.8 中具体略有不同。JDK1.7下的HashMap数据结构:图片来源核心成员变量图片来源初始化桶大小(1<<4,即:16),因为底层是数组,所以这是数组默认的大小。桶最大值。默认的负载因子(0.75)table 真正存放数据的数组。Map 存放数量的大小。桶大小,可在初始化时显式指定。负载因子,可在初始化原创 2021-03-31 16:37:33 · 2065 阅读 · 1 评论 -
Java中synchronized同步块的执行流程
必要知识Java 对象的数据结构在 HotSpot 虚拟机中,Java 对象在内存中存储的布局可以分为 3 块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)对象头中的 Mark Word 部分,用于存储对象自身的运行时数据,如哈希码(HashCode)、GC 分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳等,其中的最后 2bit 是锁状态标志位(无锁、偏向锁、轻量级锁、重量级锁、GC 标识)synchronized 的执行过程原创 2021-03-05 22:00:28 · 1919 阅读 · 0 评论 -
Java IO(BIO, NIO, AIO) 总结
文章转载自:JavaGuideBIO,NIO,AIO 总结Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。同步与异步同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。异步: 异步就是发起一个调用后,立转载 2020-10-15 14:47:29 · 423 阅读 · 0 评论 -
高并发解决方案
扩容垂直扩容:提高系统部件能力水平扩容:增加更多系统成员(增加服务器数量)数据库扩容系统属于 读操作 频繁型,可采用垂直扩容采用 memcache, redis, CDN等缓存系统属于 写操作 频繁型, 可采用水平扩容采用 Cassandra, Hbase等缓存本地缓存:Guava Cache分布式缓存:Memcacha,Redis消息队列KafkaRabbitMQ应用拆分(多服务器)RPC框架应用限流服务降级含义:服务器无法处理某些请求时,返回.原创 2020-08-20 11:53:59 · 131 阅读 · 0 评论 -
实现简单的注解型MVC框架 —— 低配SpringMVC
目标与SpringMvc定义Controller类似效果最终效果展示主类package org.example;import com.zcj.Accepter;import com.zcj.annotation.SummerApplication;import java.io.IOException;//标注控制器类@SummerApplication("org.example.MainController")public class App{ public stat原创 2020-11-15 16:15:36 · 150 阅读 · 0 评论 -
volatile关键字的作用
总结:volatile关键字是用于保证有序性和可见性。当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。可见性: 指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。有序性: 即程序执行的顺序按照代码的先后顺序执行我们所写的代码,不一定是按照我们自己书写的顺序来执行的,编译器会做重排序,CPU也会做重排序的,这样的重排序是为了减少流水线的阻塞的,引起流水阻塞,比如数据相关性,提高C原创 2020-10-22 12:54:29 · 5655 阅读 · 0 评论 -
Java 泛型实现方法 — 擦拭法
所谓擦拭法是指,虚拟机对泛型其实一无所知,所有的工作都是编译器做的。例如,我们编写了一个泛型类Pair,这是编译器看到的代码:public class Pair<T> { private T first; private T last; public Pair(T first, T last) { this.first = first; this.last = last; } public T getFirst() {原创 2020-10-22 12:20:30 · 1835 阅读 · 0 评论 -
Java 流式编程stream
什么是Stream?Stream它并不是一个容器,它只是对容器的功能进行了增强,添加了很多便利的操作,例如查找、过滤、分组、排序等一系列的操作。并且有串行、并行两种执行模式,并行模式充分的利用了多核处理器的优势,使用fork/join框架进行了任务拆分,同时提高了执行速度。简而言之,Stream就是提供了一种高效且易于使用的处理数据的方式。特点:Stream自己不会存储元素。Stream的操作不会改变源对象。相反,他们会返回一个持有结果的新Stream。Stream 操作是延迟执行的。它会等到需转载 2020-10-16 12:02:30 · 759 阅读 · 0 评论 -
Java8 Lambda总结
什么是Lambda?Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像参数一样进行传递,称为行为参数化)。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中),要做到这一点就需要了解,什么是函数式接口,这里先不做介绍,等下一篇在讲解。首先先看一下lambda长什么样?正常写法:new Thread(new Runnable() { @Override public void run() { System.out.转载 2020-10-16 11:40:06 · 154 阅读 · 0 评论 -
JAVA并发知识
一、什么是线程和进程?进程:是程序的一次执行过程,是系统运行程序的基本单元(就比如打开某个应用,就是开启了一个进程),因此进程是动态的。系统运行一个程序即是一个程序从创建、运行到消亡的过程。在 Java 中,当我们启动 main 函数时其实就是启动了 JVM 进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。线程:线程与就进程相似,但线程是一个比进程更小的执行单位。一个进程在执行过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程转载 2020-08-20 11:46:11 · 93 阅读 · 0 评论 -
Java 集合类
List:一种有序列表的集合Set:一种保证没有重复元素的集合Map:一种通过键值(key-value)查找的映射表集合Java集合的设计有几个特点:一是实现了接口和实现类相分离,例如,有序表的接口是List,具体的实现类有ArrayList,LinkedList等,二是支持泛型,我们可以限制在一个集合中只能放入同一种数据类型的元素, 例如:List<String> list = new ArrayList<>(); // 只能放入String类型最后,Java访问集.原创 2020-08-20 11:22:49 · 117 阅读 · 0 评论