自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (8)
  • 收藏
  • 关注

原创 Java知识概览

TransferValueStream流式计算NIO

2020-12-19 18:32:42 276 1

原创 Java并发编程知识概览

基础知识线程池集合类锁JUC辅助工具类JMMCASvolatile阻塞队列ThreadLocalForkJoin框架

2020-12-19 18:28:16 355 1

原创 JVM知识概览

JVM体系结构:第1篇:内存与垃圾回收篇第2篇:字节码与类的加载篇第3篇:性能监控与调优篇第4篇:大厂面试篇

2020-07-23 12:37:19 280

原创 Hashtable源码剖析

1. 属性package java.util;import java.io.*;import java.util.concurrent.ThreadLocalRandom;import java.util.function.BiConsumer;import java.util.function.Function;import java.util.function.BiFunction;import sun.misc.SharedSecrets;/** * HashTable是一个古老的

2021-09-23 21:38:56 148

原创 LinkedHashMap源码剖析

1. 属性package java.util;import java.util.function.Consumer;import java.util.function.BiConsumer;import java.util.function.BiFunction;import java.io.IOException;public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V&gt

2021-09-23 21:24:36 164

原创 HashMap源码剖析

1. 属性package java.util;import java.io.IOException;import java.io.InvalidObjectException;import java.io.Serializable;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.function.BiConsumer;import java.util.func

2021-09-23 20:53:26 141

原创 LinkedList源码剖析

1. 属性package java.util;import java.util.function.Consumer;/** * LinkedList是通过一个双向链表来实现的,它允许插入所有元素,包括null.同时,它是线程不同步的.*/public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java

2021-09-23 14:49:12 119

原创 ArrayList源码剖析

1. 属性package java.util;import java.util.function.Consumer;import java.util.function.Predicate;import java.util.function.UnaryOperator;import sun.misc.SharedSecrets;/** * Resizable-array implementation of the List interface. Implements all optional

2021-09-20 18:32:26 83

原创 Java并发编程:定时任务

自 JDK 1.5 开始,JDK 提供了 ScheduledThreadPoolExecutor 类用于计划任务 / 定时任务,这个类有两个用途:在给定的延迟之后运行任务周期性重复执行任务在此之前是使用 Timer 类来完成定时任务的,但是 Timer 有缺陷:Timer 是单线程模式;如果在执行任务期间某个 TimerTask 耗时较久,那么就会影响其它任务的调度;Timer 的任务调度是基于绝对时间的,对系统时间敏感;Timer 不会捕获执行 TimerTask 时所抛出的异常,.

2021-07-25 19:55:31 246

原创 Optional类

到目前为止,臭名昭著的空指针异常是导致 Java 应用程序失败的最常见原因。以前,为了解决空指针异常,Google 公司著名的 Guava 项目引入了 Optional 类,Guava 通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码。受到 Google Guava 的启发,Optional 类已经成为 Java 8 类库的一部分。Optional 类 (java.util.Optional) 是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原.

2021-07-22 16:54:20 73

原创 方法引用&构造器引用&数组引用

1. 方法引用当要传递给 Lambda 体的操作,已经有实现的方法了,可以使用方法引用!方法引用可以看做是 Lambda 表达式深层次的表达。换句话说,方法引用就是 Lambda 表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是 Lambda 表达式的一个语法糖。要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致!格式:使用操作符 “::” 将类(或对象)与 方法名分隔开来。对象::实例方法名类::静态方法名类::

2021-07-22 16:28:57 79

原创 函数式接口

函数式接口:只包含一个抽象方法的接口。我们可以通过 Lambda 表达式来创建该接口的对象。若 Lambda 表达式抛出一个受检异常(非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明。我们可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口。同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口。在 java.util.function 包下定义了 Java 8 的丰富的函数式接口。在 Java8 中,Lambda 表.

2021-07-22 16:17:11 118

原创 Lambda表达式

1. 概述Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。2. 语法Lambda 表达式:在Java 8 语言中引入的一种新的语法元素和操作符。这个操作符为 “->” , 该操作符被称为 Lambda 操作符或箭头操作符。它将 Lambda 分为两个部分:左侧:指定了 Lambda 表达式需要的参数列表。右侧:指定

2021-07-22 16:02:36 118

原创 CentOS7重置root用户密码

首先启动系统,进入开机页面,在界面中按键盘 e 键进入编辑界面。进入编辑界面后利用键盘上的上下键把光标向下移动到以 linux16 开头的所在行的行尾,输入:init=/bin/sh 。输入完成后,直接按快捷键:Ctrl + X 进入单用户模式。在光标闪烁位置处输入:mount -o remount,rw / 接着按回车键。在新的一行最后面输入:passwd 接着按回车键,输入密码,然后再次确认密码即可。密码修改成功后,会显示 passwd… 的样式,说明密码修改成功。在光标.

2021-07-21 15:12:16 138

原创 Nginx启动报错:error while loading shared libraries: libpcre.so.1

1. Nginx的安装1.1 准备安装包pcre-8.37.tar.gzopenssl-1.0.1t.tar.gzzlib-1.2.8.tar.gznginx-1.17.1.tar.gz利用 xftp 将上述安装包拷贝到 Linux 系统(CentOS 6.8)的 /opt 目录下1.2 安装pcre解压缩 pcre-xx.tar.gz 包:tar -zxvf pcre-8.37.tar.gz进入解压缩目录,执行 ./configure(如果提示,需要提前安装gcc++)./c

2021-04-29 11:03:12 4314

原创 Java多线程基础知识

1. 程序、进程、线程程序(program)是为完成特定任务、用某种语言编写的一组指令的集合,指一段静态的代码,是静态对象。进程(process)是程序的一次执行过程,或是正在运行的一个程序,是一个动态的过程。进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域。线程(thread)是一个程序内部的一条执行路径。线程作为调度和执行的基本单位。进程调度算法:先到先服务短作业优先时间片轮转优先级调度多级反馈队列(既能使高优先级的作业得到响应,又能使短作业进程迅速完成。)

2021-03-08 15:11:07 685

原创 Java并发编程:线程池

1. 基础知识1.1 线程池的特点降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。(线程复用)提高响应速度。当任务到达时,任务可以不需要等待线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配、调优和监控。(控制最大并发数)1.2 异步回调同步和异步通常用来形容一次方法调用。同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。异步方法调用一旦开始,方法调

2020-12-04 21:24:01 1042

原创 Java并发编程:JUC辅助工具类

1. CountDownLatch:等待多线程完成CountDownLatch允许一个或多个线程等待其他线程完成操作。CountDownLatch可以实现的功能和join()方法类似。join方法用于让当前执行线程等待join线程执行结束。其实现原理是不停的检查join线程是否存活,如果join线程存活则让当前线程永远等待(wait(0);),直到join线程终止后,当前线程的this.notifyAll();方法才会被调用,调用notifyAll方法是在JVM里实现的。CountDow

2020-12-04 12:20:20 141

原创 Java并发编程:ThreadLocal

1. 概述ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文。ThreadLocal的作用:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度。线程并发:在多线程并发的场景下。传递数据:可以通过Th

2020-12-03 20:52:29 137

原创 Stream流式计算

1. 概述Stream API ( java.util.stream ) 把真正的函数式编程风格引入到Java中。Stream 是 Java8 中处理集合的接口,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用 Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简言之,Stream API 提供了一种高效且易于使用的处理数据的方式。Stream 和 Collection 集合的区别:

2020-12-03 20:45:36 665

原创 Java并发编程:ForkJoin框架

分支合并,分而治之。Fork/Join框架:在必要的情况下,将一个大任务,拆分成若干个小任务(拆到不可再拆时),再将一个个的小任务运算的结果进行合并。大任务:任务递归分配成若干小任务。小任务:并行求值后结果合并。Fork/Join框架与线程池的区别:Fork/Join框架采用工作窃取模式(Work-Stealing)。相对于一般的线程池实现,Fork/Join框架的优势体现在对其中包含的任务的处理方式上。在一般的线程池中,如果一个线程正在执行的任务由于某些原因无法继续运行,那么该线.

2020-12-03 17:10:08 108

原创 Java并发编程:阻塞队列

阻塞队列:必须要阻塞 / 不得不阻塞当队列是空的,从队列中获取元素的操作将会被阻塞;当队列是满的,往队列中添加元素的操作将会被阻塞。试图从空的队列中获取元素的线程将会被阻塞,直到其他线程往空的队列中插入新的元素。试图往满的队列中添加元素的线程将会被阻塞,直到其他线程从队列中移除一个或多个元素或者完全清空队列。在多线程领域,所谓阻塞,在某些情况下会挂起线程,一旦条件满足,被挂起的线程又会自动被唤醒。为什么需要BlockingQueue呢?好处是我们不需要关心什么时候需..

2020-12-03 16:10:23 133

原创 Java并发编程:集合类

1. CopyOnWriteArrayListpackage java.util.concurrent;public class CopyOnWriteArrayList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { //The lock protecting all mutators. final transient ReentrantLock lock = new

2020-12-03 15:19:46 285

原创 Java并发编程:CAS

CAS 全称 Compare And Swap(比较与交换),是一种无锁算法。在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。CAS是一种硬件对并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令,用于管理对共享数据的并发访问。java.util.concurrent.atomic包中的原子类就是通过CAS来实现了乐观锁。CAS算法涉及到三个操作数:需要读写的内存值 V进行比较的值 A要写入的新值 B当且仅当 V 的值等于 A 时,CAS通过原子方式用新值B来更新V的..

2020-12-02 23:13:46 299

原创 Java并发编程:volatile

package com.juc.test;public class NumberTest { public static void main(String[] args) { MyNumber myNumber = new MyNumber(); new Thread(() -> { System.out.println("********** A start **********"); try {

2020-12-02 23:08:40 101

原创 Java并发编程:JMM

JMM(Java Memory Model)表示Java内存模型。JMM屏蔽掉了各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致性的内存访问效果。JMM的特点:可见性(通知机制)原子性有序性JMM本身是一种抽象的概念并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段、静态字段和构成数组对象的元素)的访问方式。JMM关于同步的规定:线程解锁前,必须把共享变量的值刷新回主内存;线程加锁前,必须读取主内存最新的值到自己.

2020-12-02 23:06:46 93

原创 Java并发编程:锁

1.1 LockLock接口的实现基本都是通过聚合了一个队列同步器AQS的子类来完成线程访问控制的。package java.util.concurrent.locks;import java.util.concurrent.TimeUnit;public interface Lock { //调用该方法的当前线程将会获取锁 void lock(); //可中断的获取锁,即在锁的获取中可以中断当前线程 void lockInterruptibly() throws Inte

2020-12-02 23:00:22 885

原创 Java NIO

1. JavaNIO简介Java NIO(New IO / Non Blocking IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。IONIO面向流 (Stream Oriented)面向缓冲区 (Buffer Oriented)阻塞IO (Blocking IO)非

2020-11-22 21:02:06 283 1

原创 16 JVM性能监控与故障处理工具

1. 基础故障处理工具1.1 jps:虚拟机进程状况工具jps:JVM Process Status Tool,用于列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)。jps还可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,参数hostid为RMI注册表中注册的主机名。jps命令格式:jps options hostidjp

2020-11-12 15:12:33 206

原创 15 Class文件结构

1. 概述Java是跨平台的语言,JVM是跨语言的平台。JVM不与Java语言绑定,JVM只与Class文件这种特定的二进制文件格式相关联。.java → .class:前端编译器(javac)的主要任务就是负责将符合Java语言规范的Java源代码编译为符合JVM规范的字节码文件。除了javac之外,还有一种前端编译器是内置在Eclipse中的ECJ(Eclipse Compiler for Java),和javac的全量式编译不同,ECJ是一种增量式编译器。ECJ编译器采取的编译方案是把未编译

2020-11-12 15:12:06 199

原创 14 实战OOM

1. Java堆溢出Java堆用于存储对象实例,我们只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么随着对象数量的增加,总容量触及最大堆的容量限制后就会产生内存溢出异常。JVM参数设置:-Xms5m -Xmx5m -XX:+HeapDumpOnOutOfMemoryError-Xms5m:将堆的最小值设置为5m;-Xmx5m:将堆的最大值设置为5m;将堆的最小值参数-Xms与堆的最大值参数-Xmx设置为一样的,此堆即不可自动扩展;-XX:+

2020-11-12 15:04:37 171

原创 13 垃圾回收器

GC分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。Java不同版本新特性语法层面:Lambda表达式、switch、自动拆箱装箱、enumAPI层面:Stream API、新的日期时间、Optional、String、集合框架底层优化:JVM优化、GC的变化、元空间、静态域、字符串常量池位置变化垃圾收集器

2020-11-12 15:00:41 276

原创 12 垃圾回收相关概念

1. System.gc()的理解在默认情况下,通过system.gc()者Runtime.getRuntime().gc() 的调用,会显式触发FullGC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然而system.gc() )调用附带一个免责声明,无法保证对垃圾收集器的调用。(不能确保立即生效)JVM实现者可以通过system.gc() 调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦了。在一些特殊情况下,如我们正在编写一个性能

2020-11-10 12:19:26 229

原创 11 垃圾回收相关算法

1. 垃圾回收概述图8-1 2. 垃圾回收相关算法3. 垃圾回收相关概念4. 垃圾回收器

2020-11-09 13:34:40 266

原创 10 垃圾回收概述

1. 垃圾回收概述1.1 什么是垃圾?图8-1 JVM知识概览图8-2 Java和C++的区别垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?蚂蚁金服你知道哪几种垃圾回收器,各自的优缺点,重点讲一下CMS和G1?JVM GC算法有哪些,目前的JDK版本采用什么回收算法?G1回收器的回收过程?GC是什么?为什么要有GC?GC的两种判

2020-11-03 15:00:56 159

原创 09 StringTable

1. String的基本特性String:字符串,使用一对""引起来表示。String s1 = "StringTable"; // 字面量的定义方式String s2 = new String("StringTable");public final class String implements java.io.Serializable, Comparable<String>, CharSequence { ... }String声明为final的,不可被继承;String实

2020-11-03 12:03:56 157

原创 08 执行引擎

1. 执行引擎概述执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM所识

2020-11-01 22:46:38 307

原创 07 直接内存

直接内存(Direct Memory)不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO(JDK1.4引入NIO,JDK1.7引入NIO2),通过存在堆中的DirectByteBuffer操作Native内存。package com.coder.java;import java.nio.ByteBuffer;import java.util.Scanner;/** * IO .

2020-10-31 23:21:12 228

原创 06 对象的实例化&内存布局&访问定位

1. 对象的实例化美团对象在JVM中是怎么存储的?对象头信息里面有哪些东西?蚂蚁金服Java对象头里有什么?图4-1 对象的实例化创建对象的步骤:判断对象对应的类是否加载、链接、初始化虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、链接和初始化(即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以ClassLoader + 包名 + 类名为Ke

2020-10-30 23:39:18 141 1

原创 05 运行时数据区3

6. 方法区图3-42

2020-10-30 17:13:38 256 2

Python入门课件及源码.rar

Python入门课件及源码Python入门课件及源码

2019-12-31

第8章-工业机器人的控制.pdf

工业机器人应用技术

2019-12-31

第7章-轨迹的生成.pdf

工业机器人应用技术

2019-12-31

第6章-操作臂动力学.pdf

工业机器人应用技术

2019-12-31

第5章-速度和静力.pdf

工业机器人应用技术

2019-12-31

第4章-操作臂逆运动学.pdf

工业机器人应用技术

2019-12-31

第3章-操作臂运动学.pdf

工业机器人应用技术

2019-12-31

第2章-空间描述和变换.pdf

工业机器人应用技术

2019-12-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除