自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

走过路过不要错过

欢迎来瞅瞅

  • 博客(26)
  • 资源 (24)
  • 收藏
  • 关注

原创 集合之TreeMap源码分析,简单介绍什么是红黑树,SortedMap和NavigableMap之间的关系和区别

TreeMap底层实现

2021-05-29 18:09:46 323

原创 详解集合之HashMap——HashMap内部结构,自动扩容机制,为什么需要重写hashcode和equals方法

1. HashMap对象的创建1.1 默认的构造方法

2021-05-28 22:34:17 193

原创 详解java集合之LinkedList——底层实现是头尾、双向节点,尽情地问我有没有看过集合源码吧!

LinkedList底层实现——头尾、双向节点1. LinkedList对象的创建1.1 参数为空的构造方法的方法体为空。

2021-05-28 15:59:37 264

原创 Integer及String的equals及==注意示例,涉及自动拆箱、自动装箱以及equals源码分析

1. Integer的缓存区是 -128——127,只要不是创建的Integer对象,那么这个范围内都是相等的。

2021-05-28 01:13:14 266

原创 详解java集合之ArrayList——底层实现是一个Object数组。分析ArrayList的自动扩容,原来不一定是1.5倍

1. ArrayList的创建1.1 参数为空的构造方法——ArrayList内部的Object数组为{}1.2 初始容量作为参数的构造方法——会直接创建相应大小的Object数组1.3 Collection对象作为参数的构造方法——内部Object数组指向Collection对象转换的数组2. ArrayList添加元素时的动态扩容机制2.1初始容量为0或者使用参数为空的构造方法创建的ArrayList对象自动扩容2.1.1 源码分析...

2021-05-27 23:08:55 1316 2

原创 为什么要使用内部类?非静态内部类和静态内部类的区别是什么?

1. 为什么要使用内部类?1.1 内部类继承某些类,然后外部类再通过内部类调用相应的功能,间接地使用多个父类的功能,可以弥补单继承的不足。这边假设一个场景,一个类需要继承网络连接类(自己定义的NetClass类)和线程类(Thread类),网络连接类拥有一个网络连接的方法;同时线程类是为了可以方便地异步执行任务。那么通过内部类的方式,外部类就可以间接地使用这两个类,弥补了单继承的不足,代码和运行结果如下。1.2私有权限的内部类仅仅可以被当前外部类访问,内部类的具体实现被隐藏。但是内部..

2021-05-27 17:06:09 568

原创 Future和CompletableFuture的区别和对比,以及Future主要的四个缺点——不能回调会阻塞、批量任务处理彼此依赖会阻塞、不能多个任务级联执行、得不到最先完成的任务

1. Future在执行结束后没法回调,调用get方法会被阻塞;CompletableFuture调用get方法获取结果也会被阻塞。2.但是CompletableFuture可以回调,可不通过get方法获取结果。3. Future模式执行批量任务,需要遍历Future列表依次获取结果,如果某个任务执行时间很长,那么会阻塞列表其它任务。4. CompletableFuture模式通过回调可以得到执行结果,不会阻塞其它任务。...

2021-05-27 00:58:32 8344 4

原创 设计模式之Future模式——提交任务后立即得到一个Future对象,后面利用该对象得到具体的执行结果。加上回调功能,任务执行结束通知调用者或直接回调相应方法

1. Future模式的实现逻辑1.1 在具体实现之前,我们先将Future模式的实现逻辑和流程理清楚,然后编写代码。1.2 以甜品店买奶茶为例。第一步:得先有服务员;第二步:我们提交一个奶茶订单,会得到一张票据,由于制作奶茶花费时间较长,此时我们可以去买串串或者逛逛商场;第三步:服务员制作奶茶。1.3 最后,我们回到甜品店,根据票据得到我们的奶茶。或者服务员没做好我们稍等一会。1.4 从上面的分析可得,最主要的几个因素是:服务员、奶茶订单、票据。2. Future模式的具体实现.

2021-05-26 18:37:24 279 1

原创 Executors框架——5种常用的线程池介绍及区别

1. CachedThreadPool线程池2. FixedThreadPool线程池3. SingleThreadExecutor线程池

2021-05-25 23:44:44 713

原创 ThreadPoolExecutor线程池,shutdown和shutdownNow关闭线程池方式对比,以及确保线程池能够彻底关闭的一种方式

1. ThreadPoolExecutor线程池1.1 创建线程池,构造方法的几个参数说明及创建如下。1.2 shutdown方式关闭线程池a. 空闲且能interrupt表示该线程处于阻塞等待状态,不包括工作中的阻塞状态,比如Thread.sleep()就不包括;b. 当前正在工作的,会在后期获取任务时根据线程池的状态调用processWorkerExit方法销毁线程。1.3 shutdownNow方式强制关闭线程池所有可被interrupt的线程既包括空闲处于阻塞..

2021-05-25 21:01:37 2532

原创 类加载的三个阶段——加载、链接以及初始化,类的主动使用和被动使用

1. 类加载1.1 加载:查找并加载字节码文件。1.2链接:分为三个阶段:①验证,对魔数(保证是字节码类型文件)以及编译时jdk版本等信息进行验证;②准备:为静态变量分配内存,并设定默认值;③解析:把类的符号引用转为直接引用。1.3初始化:为类的静态变量赋予正确的初始值。2. 类加载的条件——主动使用①new 对象;②操作静态成员;③反射;④加载子类;⑤程序入口类3. 类的被动使用不会类加载3.1 子类调用父类的静态成员3.2 创建数组3.3 访问...

2021-05-19 22:56:32 917 1

原创 当前线程等待某些线程运行结束再执行的几种方案。CountDownLatch机制简单解读以及简单实现

需求背景:如果没有采取什么措施,在开启分支线程后,当前线程继续往后执行,而不会阻塞等待分支线程,代码及运行结果如下。1. Thread类的join方法优点:如果当前线程需要指定某些线程结束后再执行,那么可调用对应线程的join方法。缺点:因为join是实例方法,所以得知道线程对象的名称,如果程序比较复杂时,线程很多,不好操作。2. Thread类的isAlive方法其实join方法底层也是调用isAlive方法,源码如下。3. Thread类的...

2021-05-19 17:09:14 367

原创 常用的设计模式——观察者设计模式?和发布者-订阅者设计模式的区别

1. 观察者设计模式观察者把自己“绑定”至目标,当目标发生变化时,目标“通知”观察者,然后观察者进行相应操作。你有没有觉得这种设计模式更像发布-订阅设计模式?其实这种设计模式和发布-订阅模式最大的区别就是观察者模式是目标发生变化,目标直接“通知”观察者;而发布-订阅模式中发布者和订阅者之间并没有直接联系,中间通过“消息中心”连接。3. 代码实现3.1 目标类和观察者接口代码如下。3.2 观察者两个实现类:StringObserverImpl和IntegerObserverImp.

2021-05-19 00:22:22 191

原创 为什么不使用volatile,其它线程也能得到当前线程修改后的值,不使用volatile也不存在可见性问题?原来解决可见性问题不一定需要volatile,println也可以

1. 可见性可见性指多线程编程下,其中一个线程修改了变量的值,其它的线程能得到修改后的值。2. 为什么不使用volatile,其它线程也能得到变量修改后的值实验代码分析:① 初始变量a=0,b=false;②然后,一个线程判断b 的值是否为false,是false那么循环输出“b is false and a is ”信息,直到 b 的值变为true,输出“b is true and a is”信息结束线程;③然后延迟2ms,为了让后面的线程晚于前面线程执行;④最后,另一..

2021-05-17 21:56:56 3185 9

原创 两个例子详解并发编程的可见性问题和有序性问题,通过volatile保证可见性和有序性以及volatile的底层原理——缓存一致性协议MESI和内存屏障禁止指令重排

1. 未加volatile关键字,由于缓存不一致性导致线程间数据交互失败public class Test { private static int INIT_VAL = 0; private static final Integer MAX_VAL = 5; public static void main(String[] args) { new Thread(){ @Override public void

2021-05-17 00:16:14 237

原创 java——自己实现基础的线程池及带有任务数过多拒绝策略、线程池销毁、自动扩充线程数量及闲时自动回收线程等操作的改进版线程池

1. 实现第一版基础的线程池1.1 首先我们定义一个线程池类ThreadPool,然后线程池有一个容器存放我们创建的线程,另一个容器则是存放当前线程池需要处理的任务队列,线程容器用ArrayList实现,任务队列容器用LinkedList实现。1.2 线程池功能分析:创建线程池时,往线程容器中加入默认数量的线程,但是由于此时的任务队列为空,所以线程处于等待状态;当往线程池提交任务时,唤醒正在等待的线程来处理任务,处理完任务后如果任务队列为空,线程又进入等待状态,代码及运行结果如下。import

2021-05-16 12:33:59 263 2

原创 单线程下的生产者--消费者模式详解,wait和sleep的区别

1. 单线程下的生产者--消费者模式1.1 该模式下,一个线程生产数据,另一个线程处理数据。当数据还没被处理,那么生产数据的线程进入等待状态;如果数据还没生产,那么处理数据的线程进入等待状态,代码及运行结果如下。// 生产者class Producer extends Thread{ private final List<Object> lst; public Producer(List<Object> lst){ this.ls

2021-05-15 20:00:07 483 1

原创 详解java中Thread类,线程和进程的基本区别,多线程的好处,线程的五个生命周期,主线程和IDEA创建的Monitor Ctrl-Break守护线程;优雅地终止线程。死锁的产生

1. 创建线程1.1 创建线程主要有三种方式,第一种就是创建一个类,该类继承Thread类并覆盖Thread类的run方法。1.2 启动线程1.3 主线程和分支线程部分运行结果1.4 创建线程的第二种方式,就是调用Thread构造方法时传入Runnable接口的实现类对象,...

2021-05-14 20:46:20 644 3

原创 IO流介绍、java常用的几个IO流类之间的区别,以及各自的用法、使用场景

1. IO流介绍IO流(Input Output Stream,输入输出流),表示数据在程序内存和磁盘之间的传输。按照数据流的流向不同分为输入、输出流,输入流表示程序从磁盘读入数据,输出流表示程序往磁盘写数据。按照数据读取、写的方式不同分为字节流和字符流,字节流(类名以Stream结尾)表示程序按字节读取数据,什么文件都可以读取;字符流表示程序按照字符方式读取,方便读取各种编码的文本文件,但是无法读取图片、音频及视频等文件。所有的流都实现了java.io.Closeable接口,都有close方法。所有

2021-05-12 01:29:38 1168

原创 复习java的java.io.File类,深入理解并熟练使用

1. java.io包的File类1.1 File类的对象不仅仅指磁盘上的文件,文件夹也是一个File对象。1.2 要使用和了解File类,那就从File对象开始。File类有4种public的构造方法,可通过指定磁盘路径或网址得到File对象。1.3 当创建的File对象并不在磁盘存在时,我们可以使用File对象的createNewFile方法在磁盘上创建文件。1.4 使用File对象的mkdir方法创建目录。1.5 使用File对象的mkdirs()方法可创建多级目录。

2021-05-07 19:34:26 160

原创 轻轻松松明白什么是反射,反射有什么用,简单上手反射以及反射的优缺点

1. 什么是反射反射可以动态获取类信息并创建对象、执行方法、属性赋值等,通过反射,我们就可以通过字节码文件反推得到源代码。2.反射怎么用2.1 在使用反射前,我们需要介绍4个类,分别是java.lang.Class、java.lang.reflect.Constructor、java.lang.reflect.Method以及java.lang.reflect.Field。因为对于一个字节码文件来说,其实就是一个类(先不考虑接口、数组等对象),一个类则主要是4部分:类信息、属性、构造器和方.

2021-05-06 23:18:52 1101

原创 深入理解java注解,java的4个元注解,注解三要素——定义、使用及读取执行,深入了解注解的底层本质,通过反射自动、动态获取注解所有属性以及属性值

1. 注解的定义2. 注解的使用3. 注解的读取执行3.1 得不到注解信息,得到的是null3.2 在MyAnnotation1注解 加上@Retention(RetentionPolicy.RUNTIME) 以及 MyAnnotation3注解 加上@Retention(RetentionPolicy.CLASS)后,得到了MyAnnotation1注解信息,但没得到MyAnnotation3注解信息,如下图。4. java中的4个元注解:@D...

2021-05-06 05:46:18 319

原创 Java浅克隆与深克隆区别详解与实现,以及String类型属性克隆为什么不受影响?克隆clone()方法中为什么是super.clone()

1. 浅克隆实现public class CloneTest { public static void main(String[] args) throws CloneNotSupportedException { Student s = new Student(18, new String("lhj"), new Hobby("ping-pang")); Student s1 = s.clone(); System.out.println(s)

2021-05-04 21:13:03 640 1

原创 多态的优势、使用多态的好处,面向对象优势的最佳体现。OCP原则的高拓展性怎么体现?OCP原则怎么降低了程序的耦合度?

示例场景:主人起初只养了狗,需要实现喂养狗的一个功能;之后主人又养了猫,需要实现喂养猫的功能。1. 不使用多态的实现1.1 主人起初只养了狗,需要实现喂养狗的一个功能,示例代码如下。1.2 后来,主人又养了猫,那么实现喂养狗、猫的示例代码如下。总结:随着宠物的增加,主人这个类需要针对不同宠物添加不同参数的feed方法。当我们修改系统程序越多,那么出bug也就越容易。2. 使用多态实现1.1 主人起初只养了狗,需要实现喂养狗的一个功能,示例代码如下。1.2 后来,.

2021-05-03 16:39:04 177 1

原创 lua脚本简单编辑及常用指令

1. 获取请求参数2. 获取nginx缓存3. 发起请求4. 在nginx/conf/nginx.conf中设置共享缓存区名字及大小,在lua脚本中使用缓存并设置过期时间5. json字符串转为json对象6. 渲染模板7. 设置模板...

2021-05-01 22:25:26 1629

原创 安装OpenResty,实现分发层、应用层nginx+lua开发(附加问题:bad argument #2 to ‘set_keepalive‘ (number expected, got nil)

1. 安装OpenResty1.1 在 /usr 目录下创建servers目录,并进入该目录执行 yum install -y readline-devel pcre-devel openssl-devel gcc 指令安装第三方库。1.2 使用 wget http://openresty.org/download/ngx_openresty-1.7.7.2.tar.gz 指令下载Nginx并解压1.3 进入ngx_openresty-1.7.7.2/bundle/LuaJIT-2.1-201.

2021-05-01 15:07:20 545

个人论文个人论文的修改版

个人论文个人论文的修改版

2022-08-24

AirSim项目需要的rpclib库文件

这是Unity3D项目AirSIm仿真的一个x64平台release版本的lib文件,因为lib文件需要从源代码编译,有点复杂,所以上传供大家直接使用,需要编译成其它类型的lib文件,可以给我博客留言

2020-09-20

OpenFace专家数据cen_data.rar

在使用OpenFace时,进行人脸定位时,需要加载cen_patches.dat数据文件,为了方便大家下载dat文件,特此上传。

2020-09-07

dexnet_database.zip

这是Dex-Net显示抓取的mesh模型数据obj文件,由于需要外网,所以国内不好下载,希望可以帮助大家。

2020-09-07

山大19英语课本翻译及课后资料.rar

山东大学2019年研究生英语课文翻译及课后翻译以及作文资料

2020-01-06

山大19线性系统PPT及考题资料.rar

山东大学2019年线性系统课程PPT及课后习题答案以及考题资料。

2020-01-06

山大19工程伦理资料

山东大学2019年工程伦理上课PPT及考试资料

2020-01-06

山大19工程矩阵考题及PPT资料

山东大学2019年工程矩阵上课PPT以及课后习题答案及历年考题资料山东大学2019年工程矩阵上课PPT以及课后习题答案及历年考题资料

2020-01-06

CRC算法,动态存储

CRC算法,使用VS开发环境使用C++语言进行编写控制台程序,通过与用户交互操作确定待校验码以及监督码序列,然后动态地给数组分配内存,并且真正实现长除法的除法运算,不仅仅是CRC算法的异或简单操作

2018-08-02

计算机控制技术课程实验报告

计算机控制技术课程实验报告,系统认识与程序调试练习,D/A转换实验,A/D转换实验,最小拍控制系统

2018-08-02

计控之电机PID仿真报告

计算机控制技术实验仿真报告,计控技术之电机PID仿真报告

2018-08-02

配电网读书报告PPT

配电网大作业,读书报告,分布式储能在配电网中的应用技术.pptx

2018-08-02

配电网读书报告

配电网读书报告,有关分布式储能在配电网中的应用技术

2018-08-02

过控串级实验报告

过程控制系统实验报告,串级仪表控制系统,掌握串级控制系统的基本概念和组成

2018-08-02

过程控制实验二报告

过程控制系统实验报告,单回路仪表控制系统,熟悉单回路反馈控制系统的组成和工作原理

2018-08-02

过程控制系统实验报告

过程控制系统实验报告,系统认识及对象特性测试,了解实验装置结构和组成及组态软件的组成和使用

2018-08-02

电力电子装置大作业

电力电子装置大作业,运用SD4844设计BUCK主电路输入AC207~253V,输出DC36V

2018-08-02

电力电子装置及系统实验报告之Flyback电路讨论

电力电子装置及系统实验报告之Flyback电路讨论,能否实现PFC功能,如何解决该MOSFET的驱动问题?

2018-08-02

电力电子装置BUCK电路

电力电子装置实验报告,设计DC 200V-DC 50V的降压变换电路

2018-08-02

单片机期末复习题及答案

单片机期末复习题及答案单片机期末复习题及答案单片机期末复习题及答案

2018-02-04

单片机大型试验,老鼠穿墙吃蛋糕

单片机大型试验,老鼠穿墙吃蛋糕单片机大型试验,老鼠穿墙吃蛋糕

2018-02-04

计算机控制工程期末复习题及答案

计算机控制工程期末复习题及答案计算机控制工程期末复习题及答案

2018-02-04

计算机控制工程,TTY接受程序

计算机控制工程,TTY接受程序计算机控制工程,TTY接受程序计算机控制工程,TTY接受程序

2018-02-04

计算机控制工程,上位机与单片机通信程序

计算机控制工程,上位机与单片机通信程序计算机控制工程,上位机与单片机通信程序

2018-02-04

自控,16,17学年试卷及答案

自控,16,17学年试卷及答案 自控,16,17学年试卷及答案

2018-02-04

空空如也

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

TA关注的人

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