JAVA
慢就是【快】
三律:律行、律言、律心
展开
-
Maven
文章目录概述简介定位Maven解决的问题项目构建Maven核心概念约定的目录结构POM文件坐标依赖依赖目的是什么依赖范围依赖的传递性依赖的排除统一声明版本号依赖的原则:解决jar包冲突仓库分类仓库中的文件生命周期什么是Maven的生命周期?Clean生命周期Site生命周期Default生命周期生命周期与自动化构建插件和目标继承为什么需要继承机制?创建父工程在子工程中引用父工程在父工程中管理依赖聚合为什么要使用聚合?如何配置聚合?概述简介Maven 是Apache 软件基金会组织维护的一款自动化构建原创 2020-11-06 15:33:35 · 189 阅读 · 0 评论 -
常见的位运算技巧
1. 利用或操作 | 和空格将英文字符转换为小写@Testpublic void test() { System.out.println(('a' | ' ') == 'a');//true System.out.println(('A' | ' ') == 'a');//true}2. 利用与操作 & 和下划线将英文字符转换为大写@Testpublic void test02(){ System.out.println(('b' & '_') == '原创 2020-08-25 15:40:05 · 336 阅读 · 0 评论 -
Java并发编程题库
文章目录并发编程三要素?实现可见性的方法有哪些?创建线程的有哪些方式?创建线程的三种方式的对比?Runnable 和 Callable 的区别Java线程具有五中基本状态什么是线程池?有哪几种创建方式?线程池的优点?常用的并发工具类有哪些?CyclicBarrier 和 CountDownLatch 的区别synchronized 的作用?volatile关键字的作用什么是CASCAS的问题ThreadLocal是什么?有什么用?Java死锁以及如何避免?死锁的原因怎么唤醒一个阻塞的线程不可变对象对多线程有原创 2020-07-03 00:23:42 · 408 阅读 · 0 评论 -
Java8的集合:HashSet的实现原理
HashSet 概述HashSet 实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。HashSet 的实现对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成, HashSet 的源代码如下:pub原创 2020-07-02 10:31:06 · 478 阅读 · 0 评论 -
Java8的集合:HashMap的实现原理
概述哈希表是基于 Map 接口的实现的,它允许 null 值和null 键,它不是线程同步的,同时也不保证有序。Map的这种实现方式为 get(取)和 put(存)带来了比较好的性能。但是如果涉及到大量的遍历操作的话,就尽量不要把 capacity 设置得太高(或 load factor 设置得太低),否则会严重降低遍历的效率。影响 HashMap 性能的两个重要参数:initial capacity(初始化容量)和load factor(负载因子)。简单来说,容量就是哈希表桶的个数,负载因子就是键原创 2020-07-02 10:27:27 · 392 阅读 · 0 评论 -
悲观锁VS乐观锁
悲观锁VS乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Ja原创 2020-07-01 15:40:30 · 181 阅读 · 0 评论 -
Java基础篇:反射
文章目录Java反射机制概述Java Reflection动态语言 VS 静态语言Java反射机制研究及应用反射相关的主要API理解Class类并获取Class实例Class类Class类的常用方法反射的应用示例获取Class类的实例(四种方法)哪些类型可以有Class对象?类的加载与ClassLoader的理解类的加载过程什么时候会发生类初始化?ClassLoader创建运行时类的对象获取运行时类的完整结构小结调用运行时类的指定结构调用指定的方法调用指定的属性关于setAccessible方法的使用J原创 2020-06-27 23:07:48 · 215 阅读 · 0 评论 -
Java多线程:线程8锁案例分析
线程8锁案例分析通过分析代码,推测打印结果,并运行代码进行验证1、两个线程调用同一个对象的两个同步方法被synchronized修饰的方法,锁的对象是方法的调用者。因为两个方法的调用者是同一个,所以两个方法用的是同一个锁,先调用方法的先执行。public class Demo { public static void main(String[] args) { Number number = new Number(); new Thread(() -&g转载 2020-06-22 16:28:45 · 453 阅读 · 1 评论 -
Java核心技术汇总
文章目录1、Java并发编程篇必考点汇总面试题汇总线程的生命周期与状态流转Java线程的6种状态线程的状态流转sleep、wait、notify、yield、join的区别线程同步与锁多线程同步与锁由来线程同步解决方案Synchronized简介和用法Synchronized源码实现Synchronized的锁存储位置Synchronized的锁升级ReentrantLock可重入锁ReentrantLock的实现原理ReentrantLock的公平锁源码实现ReentrantLock的非公平锁源码实现Re原创 2020-06-21 07:37:52 · 2776 阅读 · 0 评论 -
Java8的集合:LinkedList的实现原理
一、概述LinkedList 是通过一个双向链表来实现的,它允许插入所有元素,包括 null,同时,它是线程不同步的。下面是双向链表的结构:双向链表每个结点除了数据域之外,还有一个前指针和后指针,分别指向前驱结点和后继结点(如果有前驱/后继的话)。另外,双向链表还有一个 first 指针,指向头节点和last指针,指向尾节点。二、属性LinkedList中的属性如下: /** *链表的节点个数 */ transient int size = 0; /** *指向头节点原创 2020-06-12 09:50:00 · 241 阅读 · 0 评论 -
Java8的集合:ArrayList的实现原理
一、概述ArrayList 是一个动态数组,实现了 List 接口以及 list相关的所有方法,它允许所有元素的插入,包括 null。另外,ArrayList 和 Vector 除了线程不同步之外,大致相等。二、属性ArrayList 的属性非常少,就只有这些。其中最重要的莫过于 elementData ,ArrayList所有的方法都是建立在 elementData 之上/** * 默认容量大小 */ private static final int DEFAULT_C原创 2020-06-12 09:22:00 · 249 阅读 · 0 评论 -
Java基础篇:JDBC核心技术
文章目录第1章:JDBC概述1.1 数据的持久化1.2 JDBC介绍1.3 JDBC程序编写步骤第2章:获取数据库连接2.1 要素一:Driver接口实现类2.1.1 Driver接口介绍2.1.2 加载与注册JDBC驱动2.2 要素二:URL2.3 要素三:用户名和密码2.4 数据库连接方式举例2.4.1 连接方式一2.4.2 连接方式二2.4.3 连接方式三2.4.4 连接方式四2.4.5 连接方式五(最终版)第3章:使用PreparedStatement实现CRUD操作3.1 操作和访问数据库3.2原创 2020-06-08 23:25:57 · 1287 阅读 · 0 评论 -
Java基础篇:网络编程
文章目录概述通信要素之一:IP和端口号通信要素之二:网络协议TCP网络编程UDP网络编程URL编程总结概述Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。实现网络通信需要解决的两个问题如何准确地定位网络上一台或多台主机;定位原创 2020-05-19 10:50:12 · 343 阅读 · 0 评论 -
Java基础篇:IO流
文章目录一、File类的使用File类的概述File类的实例化File类的常用方法二、IO流原理及流的分类Java IO原理流的分类流的体系结构输入、输出的标准化过程三、节点流(文件流)四、缓冲流五、转换流六、标准输入、输出流七、打印流八、数据流九、对象流十、随机存取文件流一、File类的使用File类的概述File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)File类声明在java.io包下:文件和文件目录路径的抽象表示形式,与平台无关File类中涉及到关于文件或文件目录的创建、原创 2020-05-18 23:03:08 · 230 阅读 · 0 评论 -
Java8新特性整理篇
文章目录概述Lambda表达式函数式(Functional)接口Stream APIOptional类概述Java 8是oracle公司于2014年3月发布,可以看成是自Java 5 以来最具革命性的版本。Java 8为Java语言、编译器、类库、开发工具与JVM带来了大量新特性速度更快代码更少(增加了新的语法:Lambda表达式)Stream API便于并行最大化减少空指针异常:OptionalNashorn引擎,允许在JVM上运行JS应用并行流与串行流并行流就是把一个内容分成多个原创 2020-05-15 11:47:52 · 271 阅读 · 0 评论 -
Java基础篇:面向对象
文章目录学习面向对象内容的三条主线面向过程(POP)与面向对象(OOP)面向对象的思想概述Java类和对象创建Java自定义类对象的创建和使用对象的创建和使用:匿名对象类的成员之一:属性(Field)类的成员之二:方法类的成员之三:构造器类的成员之四:代码块类的成员之五:内部类面向对象特征之一:封装性面向对象特征之二:继承性面向对象特征之三:多态性Object类的使用包装类(Wrapper)的使用向上转型与向下转型向上转型向下转型方法的重写子类对象实例化全过程关键字关键字:this关键字:super关键字:原创 2020-05-12 00:45:48 · 564 阅读 · 0 评论 -
Java:基础面试题
文章目录面向对象三大特征的说明Java的内存管理之垃圾回收在程序中是否可以通知垃圾回收机制过来回收垃圾?调用了System.gc();或Runtime.getRuntime().gc();后是立刻执行垃圾回收吗?垃圾回收机制关键点构造器Constructor是否可被overridejava类是否可以多继承,怎么实现多继承?以下程序输出结果是什么重载(overload)和重写(overried,也叫做“覆盖”)的区别?Overload的方法是否可以改变返回值的类型?输出以下程序的结果比较两个String总是f原创 2020-05-11 00:42:08 · 228 阅读 · 0 评论 -
Java基础篇:异常处理
文章目录异常概述与异常体系结构常见异常异常处理机制异常处理机制一:try-catch-finally异常处理机制二:throws手动抛出异常:thow如何自定义一个异常类?总结异常概述与异常体系结构异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)Java程序在执行过程中所发生的异常事件可分为两类:Error:Java虚...原创 2020-05-07 17:29:54 · 471 阅读 · 0 评论 -
Java基础篇:Executor框架
文章目录概述Executor框架结构(三部分)Executor框架的使用示意图`ThreadPoolExecutor`类介绍`ThreadPoolExecutor` 类分析推荐使用 `ThreadPoolExecutor` 构造函数创建线程池`ThreadPoolExecutor`使用示例示例代码1:Runnable+ThreadPoolExecutor示例代码2:Callable+ThreadP...原创 2020-05-07 11:40:35 · 270 阅读 · 0 评论 -
Java基础篇:多线程
文章目录1、概念:程序、进程、线程2、线程的创建和使用3、线程的生命周期4、线程的同步5、线程的通信6、JDK5.0新增线程创建方法1、概念:程序、进程、线程程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象进程(process)是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程。——生...原创 2020-05-07 10:10:26 · 304 阅读 · 0 评论 -
Java基础篇:常用类
文章目录1、字符串相关的类1.1 String类及常用方法String的特性String对象的创建字符串对象是如何存储的String使用陷阱String常用方法1.2 StringBuffer 、StringBuilderStringBuffer类StringBuilder类2、 JDK8之前的日期时间API2.1 System静态方法2.2 Date类2.3 Calender类2.4 Simpl...原创 2020-05-07 00:23:05 · 348 阅读 · 0 评论 -
native 关键的理解
使用 native 关键字说明这个方法是原生函数,也就是这个方法是用 C/C++等非Java 语言实现的,并且被编译成了 DLL,由 java 去调用(1)为什么要用 native 方法java 使用起来非常方便,然而有些层次的任务用 java 实现起来不容易,或者我们对程序的效率很在意时,问题就来了。例如:有时 java 应用需要与 java 外面的环境交互。这是本地方法存在的主要原因,你可...原创 2020-05-05 23:11:48 · 171 阅读 · 0 评论 -
Java面试题
题目一: float a = 0.125f; double b = 0.125d; System.out.println((a - b) == 0.0); 代码的输出结果是什么?A. true √B. false首先浮点数是由符号位、指数位、有效数字三个部分组成,而0.125f、0.125d均可以精确的表示出来,不存在精度丢失,因而a-b==0.0。题目二: double c = 0...原创 2020-04-29 14:49:02 · 284 阅读 · 0 评论 -
Java基础篇:泛型
文章目录1、为什么要有泛型2、在集合中使用泛型3、自定义泛型结构4、泛型在继承上的体现5、通配符的使用1、为什么要有泛型泛型:标签泛型的设计背景集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象,所以在JDK1.5之前只能把元素类型设计为Object,JDK1.5之后使用泛型来解决。因为这个时候除了元素的类型不确定,其他的部分是确定的,例如关于这个元素如何保存...原创 2020-04-25 21:42:01 · 222 阅读 · 0 评论 -
Java基础篇:Java集合
文章目录1、概述2、Collection接口2.1 Collection接口方法2.2 Iterator迭代器接口2.3 Collection子接口之:List接口2.4 Collection子接口之:Set接口3、Map接口3.1 概述3.2 Map接口:常用方法3.3 Map实现类之:HashMap3.4 Map实现类之:LinkedHashMap3.5 Map实现类之:TreeMap3.6 ...原创 2020-04-25 21:31:13 · 367 阅读 · 0 评论 -
Guava学习笔记:缘起
缘起为什么要使用Guava呢?因为在几年前就是用过Guava的部分功能,当时有一个项目需要通过缓存来提升部分功能的性能,对本地应用缓存和分布式应用缓存进行了相关的调研,在调研本地应用缓存的时候,第一次看到了Guava这个词,在本地缓存中,Guava与Caffeine、Ehcache等技术都各有独特的应用场景。Guava是开源的、轻量级的、缓存算法采用的是LRU、JDK版本不低于1.6、不支持数...原创 2020-03-30 16:56:21 · 269 阅读 · 0 评论 -
使用oshi获取服务器的参数信息
背景最近我们负责的一个电网行业的业务平台,出现了一个非常奇葩的问题。这个项目涉及到软件平台厂家、服务器厂家、存储厂家以及真正的用户等四方关系,而我们主要负责软件平台的研发工作。平台正常运行了2年多了,去年年底如何改变文本的样式强调文本 强调文本加粗文本 加粗文本标记文本删除文本引用文本H2O is是液体。210 运算结果是 1024.插入链接与图片链接: link.图片...原创 2020-03-13 17:31:54 · 7265 阅读 · 6 评论 -
正则表达式那些事?
使用正则表达式的好处?一个正则表达式就是一个描述规则的字符串 只需要编写正确的规则,就可以让正则表达式引擎去判断目标字符串是否符合规则 正则表达式是一套标准、可以用于任何语言 JDK内置正则表达式引擎:java.util.regex小结正则表达式是一个字符串正则表达式用字符串描述一个匹配规则使用正则表达式可以快速判断给定的字符串是否符合匹配规则Java内建正则表达式引擎...原创 2020-03-17 11:05:00 · 429 阅读 · 0 评论 -
REST是什么
REST=Representational State Transfer的缩写。“表现层状态转化”。REST的名称“表现层状态转化”中,省略了主语。“表现层”其实指的是“资源(Resources)”的表现层。资源(Resources)所谓的资源,就是网络上的一个实体,或者说是网络上的一个具体信息。他可以是一段文本、一张图片、一首歌曲,总之就是一个具体的实在。可以用一个URI指向他,每种...转载 2020-03-02 17:23:54 · 595 阅读 · 0 评论 -
如何正确地使用参数
方法定义方并不能保证调用方会按照预期传入参数,因此在方法体中应该对传入的参数保持理性的不信任。方法的第一步骤并不是功能实现,而应该是参数预处理。参数预处理包括两种:入参保护“入参保护”被提及的频率和认知度远低于参数校验,但是其重要性却不能被忽略。入参保护实质上是对服务提供方的保护,常见于批量接口。虽然批量接口能处理一批数据,但其处理能力并不是无限的,因此需要对入参的数据进行判断...原创 2019-12-22 23:37:40 · 705 阅读 · 0 评论 -
类关系
关系是指事物之间存在单向或相互的作用力或者影响力的状态。如何确定类与类之间是否存在相互作用是非常困难的。证明类之间没关系是一个涉及业务、架构、模块边界的问题,往往由于业务模型的抽象角度不同而不同,是一件非常棘手的事情。如果找到了没有关系的点,就可以如庖丁解牛一样,进行架构隔离、模块解耦等工作。有关系的情况下,包括如下6中类型:继承:extends(is-a); 实现:implements(...原创 2019-12-06 14:49:28 · 249 阅读 · 0 评论 -
接口 VS 抽象类
类的定义由访问控制级别、类型、类名、是否抽象、是否静态、泛型标识、继承或实现关键字、父类或接口名称等组成。Java类主要由两部分组成:成员和方法。接口与抽象类正如面向对象四大特性(抽象、封装、继承、多态)所述,定义类的过程就是抽象和封装的过程,而接口与抽象类则是对实体类进行更高层次的抽象,仅定义公共行为和特征。接口与抽象类的共同点是都不能被实例化,但可以定义引用变量指向实例对象。...原创 2019-12-05 14:53:20 · 161 阅读 · 0 评论 -
Java:字符串
字符串类型是常用的数据类型,但它不是Java基本数据类型之一。字符串相关类型主要有三种:String、Stringbuilder以及Stringbuffer。(1)StringString是只读字符串,典型的immutable对象,对它的任何改动,其实都是创建一个新对象,再把引用指向该对象。String对象赋值操作后,会在常量池中进行缓存,如果下次申请创建对象时,缓存中已经存在,则直接...原创 2019-12-05 14:09:15 · 120 阅读 · 0 评论 -
Java数据类型
基本数据类型Java提供了9种基本数据类型,他们都不具备对象的特性,没有属性和行为。基本数据类型是指不可再分的原子数据类型,内存中直接存储此类型的值,通过内存地址即可直接访问到数据,并且此内存区域只能存放这种类型的值。Java的9种基本数据类型包括boolean、byte、char、short、int、long、float、double和refvar。前8种数据类型表示生活中的真假、字符、...原创 2019-12-03 22:49:11 · 161 阅读 · 0 评论 -
3、Java常用关键字
Java中的关键字很多,大约有50+,在日常开发中,自定义变量、类等不能喝这些关键字存在冲突,每个关键字都代表着不同场景下的不同含义,以下为使用频率高、容易混淆的几个关键字。1、staticstatic是静态的、全局的,一旦被修饰,说明被修饰的东西在一定范围内是共享的,谁都可以访问,这时候需要注意并发读写的问题。1.1 修饰的对象static只能修饰类变量、方法和方法块。(...原创 2019-12-02 15:27:48 · 132 阅读 · 0 评论 -
构造方法
概述构造方法(Constructor)是方法名与类名相同的特殊方法,在新建对象时调用,可以通过不同的构造方法实现不同方式的对象初始化。特征构造方法名称必须与类名相同; 构造方法是没有返回类型的,即使是void也不能有; 构造方法不能被继承,不能被覆写,不能被直接调用; 类定义时提供了默认的无参构造方法。如果显式定义了有参构造方法,则此无参构造方法就会被覆盖;如果依然想拥有,就需要...原创 2019-11-26 23:58:12 · 176 阅读 · 0 评论 -
泛型
概述泛型的本质是类型参数化,解决不确定具体对象类型的问题。在面向对象编程语言中,允许程序员在强类型校验下定义某些可变部分,以达到代码复用的目的。Java在引入泛型前,表示可变类型,往往存在类型安全的风险。泛型可以定义在类、接口、方法中,编译器通过识别尖括号和尖括号内的字母来解析泛型。在泛型定义时,约定俗成的符号包括:E代表Element,用于集合中的元素;T代表the type of ...原创 2019-11-26 19:27:09 · 282 阅读 · 0 评论 -
限制系统扩展能力的瓶颈有哪些?
1. 二阶提交通常当数据库中的数据有变化时,它会被写入本地服务器的内存和磁盘中。但是,当数据库是集群或者分布式系统的话,一个提交不仅会发生在本地,还会发生在远程。二阶提交意味着必须等待远程服务确认。然后由于网络和其他的延迟问题,这样的提交相比单机数据库的提交要慢很多。主从的同步复制也有这样的问题,因此,MySQL的解决办法是半同步(semi-synchronous:MySQL5.5才有的特...转载 2019-11-25 09:52:44 · 284 阅读 · 0 评论 -
Java集合知识:TreeMap
TreeMap是按照Key的排序结果来组织内部结构的Map类集合,它改变了Map类散乱无序的形象。虽然TreeMap没有ConcurrentHashMap和HashMap普及(毕竟插入和删除的效率远没有后者高),但是在Key有排序要求的场景下,使用TreeMap可以事半功倍。在TreeMap的接口继承树中,有两个与众不同的接口:SortedMap和NavigableMap。 Sorte...原创 2019-11-14 15:53:44 · 209 阅读 · 0 评论 -
JDK8:Lambda表达式操作List集合
JDK8的流对list的处理提供了很大的方便,特别是做报表的时候才能真正体现出来这个功能的强大;结合日常使用过程,有两个体会:一个是减少了数据库连接,最忌讳在循环中进行数据查询,特别是嵌套多层循环的时候;在循环中查表,严重影响整体性能;采用JDK8以后可以将所需的全部数据查询出来,然后通过流很方便的就过滤出想要的数据;二是减少了for循环以及多重的for循环。新建所需的实体类:LambdaFi...原创 2019-11-14 14:30:21 · 3145 阅读 · 1 评论