自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

原创 synchronized的原理及应用

本篇文章主要讲了`synchronized`的三个应用方式:修饰实例方法、修饰静态方法、修饰代码块,并且针对每种方式都从JVM角度讲解了其实现的底层原理。在扩展部分则详细讲解了Java6对`synchronized`的优化措施,以及底层的原理。

2021-05-27 22:03:09 274 3

原创 Java内存模型及其原理

本文主要讲了Java内存模型的原理及其构成,Java内存模型按照不同角度的划分,可以看到不同的内容,从JVM设计者的角度看,我们可以看到"主内存和工作内存的划分"以及"内存间的交互操作"。从程序员角度看,我们能够看到三个常用的关键字:volatile、synchronized以及final,并且简单介绍了这个三个关键字的作用,后续也会分别写出对应详细的文章,从原理角度进行阐述volatile和synchronized的原理以及使用。同时,对于Happens-Before 规则我们也有详细的介绍,分成了六部分

2021-05-26 21:58:02 280 4

原创 java方法在java虚拟机中的执行过程

Java虚拟机在执行一个方法时,首先需要对该方法分配空间,也就是对应的一个栈帧。然后需要确定实际要执行方法的版本,可以有**解析**和**分派**两种方法去做选择,确定完方法版本之后,Java虚拟机在实际执行对应方法时会基于栈解析器来进行执行(此处也简单讲了基于栈指令集和基于寄存器指令的区别),执行完成后返回对应结果。这个方法的执行过程完成。

2021-05-10 11:19:19 594

原创 类加载器及其加载原理

本文主要讲了常用的类加载器,比如启动类加载器、扩展类加载器、应用类加载器以及自定义类加载器,详细介绍了类加载器在加载一个类时的原理以及加载所使用的双亲委派机制。以及使用双亲委派机制的好处以及破坏该机制的一些情况。

2021-04-20 18:31:33 675

原创 Class文件结构分析

Class文件是Java虚拟机执行引擎的数据入口,也是Java技术体系的基础支柱之一,因而学习Class文件的结构很有意义。本文主要讲解了Class文件结构中的各个组成部分,以及每个部分的定义、数据结构和使用方法。并结合一个例子(文中有代码,引用处附带有链接),讲解了Class文件是如何被存储和访问的。

2021-04-19 19:55:15 279 1

原创 类的加载流程

概述什么是类加载呢?我们知道一个Class文件编译完成之后是存在于磁盘的一个普通文件,如果想要执行,必然需要将Class文件加载到内存中,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程其实就是类的加载机制。当然上述过程说的比较抽象,具体来说其实Class文件从开始加载到内存中开始到被卸载回收为止,整个过程分为五大步:加载加载是类加载过程的第一...

2021-04-14 16:03:00 140

原创 垃圾回收算法的原理及应用

概述有java开发经历的小伙伴必然对垃圾回收不陌生。垃圾回收简单来说就是一种自动的内存管理机制,当一个电脑上的某一块内存不在被使用时,就应该释放,供其他应用利用,而对该内存的回收过程,就称之为垃圾回收。那如何进行垃圾回收那?简单来说只有两步:第一步,找到垃圾。第二步,将垃圾扔掉。好,既然需要找到垃圾,那肯定需要对垃圾有一个判别标准,即"什么是垃圾?"什么是垃圾?就计算机而言,...

2021-04-07 23:37:00 448

原创 从零开始搭建solo个人博客系统

本篇博客记录自己搭建solo个人博客系统的流程包括服务器选购、域名申请与备案、安装solo、nginx进行反向代理以及ssl证书的申请与使用,以及踩过的坑,希望能给那些搭建个人博客系统的用户提供一定的帮助。当然可能个人水平有限,中间难免会出现一些错误,如若发现恳请指出,不胜赐教。如果按照本教程在配置过程中遇到什么问题,欢迎在博客下边留言,我若看到的话一定第一时间回复,谢谢!

2019-10-06 14:47:22 2420 1

原创 MYSQL之修改篇

本文主要承接数据查询篇,主要内容是关于数据库的增加、删除以及修改等部分sql语法的说明

2019-10-01 22:26:39 199

原创 浅谈布隆过滤器

本文主要是对隆过滤器的原理,实现方法进行解释,并且借助Guava中的BloomFilter类对布隆过滤器的使用方法进行详尽阐述,以期能帮助读者初步掌握布隆过滤器的基本原理和使用方法,由于作者水平有限,文中若有错误,敬请之处,不胜感激!

2019-09-22 15:51:04 298

原创 MYSQL之查询篇

数据教程第二部分,SQL的查询操作

2019-09-21 16:20:00 608 2

原创 MYSQL之概念基础篇

1数据库概述1.1 数据管理技术的产生和发展数据库技术是应数据库管理任务的需要而产生的。20世纪50年代中期以前,计算机主要是用于科学计算。当时的硬件状况是,外存只有纸带、卡片、磁带,没有磁盘等可以直接存取的设备;软件状况是,没有操作系统,没有管理数据的专门软件;数据处理的方式通常是批处理。对数据的管理主要通过人力来完成,这一阶段我们称为数据的人工管理阶段。在这一阶段具有以下特点数据不保存...

2019-09-14 14:40:38 130

原创 mysql基本数据类型

概述要想学好mysql,了解其支持的基本数据类型以及内部原理是极为重要的,只有这样,我们才能根据不同的业务要求来选择不同的数据类型,实现最佳的存储效果和查询性能,因而本文就着重总结一下mysql支持的数据类型以及内部的存储原理。总体来说,mysql一共分成了四类:数值类型、日期和时间类型、字符串类型、二进制类型等。数值类型数值类型是最为基础的类型,在业务开发中存储递增主键ID、金额、数量...

2022-04-13 16:11:00 1437

原创 MySQL各数据类型总结

要想学好mysql,了解其支持的基本数据类型以及内部原理是极为重要的,只有这样,我们才能根据不同的业务要求来选择不同的数据类型,实现最佳的存储效果和查询性能,因而本文就着重总结一下mysql支持的数据类型以及内部的存储原理。总体来说,mysql一共分成了四类:数值类型、日期和时间类型、字符串类型、二进制类型等。

2022-04-13 16:05:37 1030

原创 Numpy简单入门

概述Numpy是高性能科学计算好数据分析的基础包,提供了矩阵运算的功能,在深度学习和数据分析领域广泛应用。。使用创建array数组vector = np.asarray([1,2,3,4]);创建zero数组a = np.zeros(10) # 创建向量 a1 = np.zeros(shape=(5,3)) # 创建5行,3列的0矩阵创建one矩阵one = np.ones((3,4));创建自定义值的矩阵user_define = np.full((3, 5), 110) #

2022-01-02 16:09:42 1098

原创 线程本地存储ThreadLocal的原理及应用

概述通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK 中提供的ThreadLocal类正是为了解决这样的问题。 **ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。**每个线程都拥有了自己的数据这样也就避免了数据共享保证了线程安全。如何用?我们都知道SimpleDateFormat是线程不安全,但如果我们想在并发的场景中使

2021-09-02 20:03:52 418

原创 Atomic原子类的使用及其原理

本文总结了常用的原子类,及其内部实现的原理--CAS原理。Java 提供的原子类能够解决一些简单的原子性问题,但你可能会发现,上面我们所有原子类的方法都是针对一个共享变量的,如果你需要解决多个变量的原子性问题,建议还是使用互斥锁方案。原子类虽好,但使用要慎之又慎。

2021-08-02 21:18:36 1448

原创 Kafka的核心原理

本文主要以消息引擎的角度出发,介绍Kafka的设计原理,整篇文章分成四个大篇幅:一:Kafka消息格式以及演变过程,并且对消息的压缩也做了介绍二:Kafka实现消息传输的方式,包含了生产者和消费者如何建立连接,如果保障消息的传输的可靠性三:消息的保存方法,即Kafka是如何通过分区和副本机制来保证kafka的高可用四:消费者组以及重平衡问题即重平衡发生的过程,触发条件,以及可参考的解决方法

2021-07-31 19:52:56 767

原创 线程池使用与原理

Java线程池在设计的时候,是按照`生产者-消费者`的模式来设计的,整个过程遵循`Executor框架`,用`Runnable/Callable`来作为任务的抽象;用`Executor`接口作为任务执行的抽象,`Future`作为异步执行结果的抽象。在工程实践中,我们都推荐使用`ThreadPoolExecutor`的构造方法来创建线程k池,而不推荐`Executors`封装的方法去创建其他类型的线程池。`ThreadPoolExecutor`在创建线程时,一共有六个:* `corePoolSize

2021-07-29 20:29:57 174

原创 零拷贝技术的原理

`Copy-On-Write`本质上讲是一种**延迟复制**的思想,在执行读操作的时候,不进行复制,而只有真正执行写操作的时候才进行复制。它的应用也非常广泛,比如linux中的`fork()`方法,java中的`CopyOnWriteArrayList`。在使用时要注意其应用场景,因为其每次发生写操作都会复制新的空间,因此它天然适合**读多,写少的场景,并且能够忍受一定时间的读写不一致**。

2021-07-28 17:45:45 172

原创 零拷贝的原理

零拷贝技术,本质上讲就是通过减少非必要的内存拷贝以及上下文切换,来提高文件在通道间复制速度的一种技术。以本文中的`transferTo()`方法为例,通过该技术,可以将原来四次内存间拷贝减少成两次,将四次上下文切换减少成两次,大大提高复制的速度。但零拷贝技术并非万能的,它有自己的使用场景,对于将大量数据从一个 I/O 通道复制到另一个通道的情况(例如 Web 服务器),都是合适的。而对于磁盘文件间的复制,比如从一个磁盘位置复制到另一个磁盘位置,这种方式是不可用的。

2021-07-28 10:59:19 721

原创 skywalking agent插件开发过程中各种拦截点的写法

本文主要总结了自己写SkyWalking agent端插件的时候常用的匹配方法,并对每一个方法写了一个demo以供参考(所有demo均来自社区插件中的具体类),希望能给想开发SkyWalking插件的小伙伴以帮助。

2021-07-18 22:40:17 1392

原创 Java并发知识梳理

本文主要从分工、同步和互斥三类问题展开,从解决对应问题角度出发大致梳理了Java并发知识的学习前景图。后续将分若干部分来讲对应的内容。

2021-05-24 18:54:59 176 3

原创 回溯算法解决子集、组合和排列问题

本文主要讲了通过回溯法如何解决排列、组合、子集这三类问题的基本思路:组合问题关键点在于用一个start来保证每次选择的元素是之前未被选择过的排列问题关键点在于通过contains()来保证每次选择的元素都未被包含在trace中这两类问题回溯结束的时机都是搜索到的元素达到了预定的长度,即我们可以判断trace中元素的长度来判断是否终止此次回溯。而子集问题则不然,因为它的长度是变长的,所以每次进入搜索的第一件事情就是将结果加入到结果集中。

2021-04-30 17:10:50 608 2

原创 Java对象的创建过程

本文主要讲了对象创建的五大过程以及每一步的具体作用,后续为了使用Java对象因而讲了一些对象访问定位相关的知识。

2021-04-28 20:59:41 423

原创 Java运行时内存如何分配

本文主要讲了Java运行时内存的区域划分。按照线程私有还是共有分成两类,其中私有部分包含了程序计数器、Java虚拟机栈、本地方法栈这三部分区域,其他区域为线程共有,并且每个区域的具体作用,文中也有阐述。

2021-04-28 15:02:38 864

原创 手写LRU缓存淘汰算法

概述LRU算法全称为Least Recently Used是一种常见的页面缓存淘汰算法,当缓存空间达到达到预设空间的情况下会删除那些最久没有被使用的数据 。常见的页面缓存淘汰算法主要有一下几种:LRU 最近最久未使用FIFO 先进先出置换算法 类似队列OPT 最佳置换算法 (理想中存在的)NRU Clock置换算法LFU 最少使用置换算法PBA 页面缓冲算法LRU的原理L...

2021-04-03 17:35:00 396

原创 使用归并排序思想解决逆序对数量问题

概述归并排序算法,想必诸位都十分熟悉。其基本思想也就是分治。整个排序过程分成两部分--分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之。思路拆分阶段分的过程很容易看懂,即将一个大的数组拆分成若干个小的数组,减少问题规模。合并阶段实现public static void mergeSort(...

2021-03-15 14:03:00 236

原创 从生命周期的角度看线程和进程之间的异同

概述进程与线程想必都不陌生,两者有诸多相同点,甚至可以这样说,线程就是“轻量级的进程”。而且两者基本的五个状态也几乎一样,但进程和线程在状态切换时的触发条件却有诸多不同,因而本文从“生命周期”的角度去谈一谈两者之间的异同。联系就从状态本身而言,两者的状态类别和对应含义几乎是完全一致的分别为:初始状态:刚被创建的状态可运行状态(就绪状态):可以被分配CPU的状态运行状态:获取到CPU...

2021-01-01 17:04:00 236

原创 SkyWalking Agent端日志插件的编写历程与使用说明

概述前一段时间顺利完成了SkyWalking Agent端logger-plugin插件的开发,在此做个总结。一方面给插件的使用方法写一中文说明,另一方面分享一下该插件开发过程中的一些考量以及收获。logger-plugin插件,主要作用实现将将程序在调用过程中产生的日志比如错误日志信息,存入到span log中。然后可以通过web端直接查询,便于开发者排错与分析。同时为了提高使用的灵活性,...

2020-12-13 21:35:00 507

原创 Docker三种文件系统总结

概述容器持久化,相比小伙伴都不陌生。通过Docker的volume,我们可以非常方便的实现容器数据的持久化存储。但volume之下的文件系统,相比许多小伙伴并不是非常清楚。因而本文以Docker为例,重点讲述Docker底层所支持的三种文件系统。首先在说清楚Docker文件系统的具体功能之前,我们需要先了解一下,什么叫做联合文件系统。联合文件系统(Union File System,Un...

2020-12-08 10:54:00 1032

原创 回溯法套路总结与应用

概述回溯法常用于遍历一个列表元素的所有所有子集,比如全排列问题。可以说深度优先搜索就是回溯法的一种特殊形式。该方法的时间复杂度比较大一般为O(N!),它不像动态规划存在重叠子问题可以优化,当然在某些情况下,我们可以通过剪枝来进行优化,当然这个技巧性可能较高。本篇文章主要从回溯法的基本思想入手,总结出一套模板,灵活运用模板便可以讲解大部分回溯算法的问题。模板与算法回溯法其实核心思想就是以深度...

2020-11-17 22:31:00 241

原创 滑动窗口常用技巧总结

概述在解决字串问题时,滑动窗口技巧可能经常会使用,其本身思想并不难理解,难在灵活。因而本文从一个最小覆盖字串问题入手总结一个通用的算法框架以解决常见的滑动窗口问题。算法与框架下边我们先看一个最小覆盖子串问题:题目本身不难理解,主要就是从S(source)中找到包含T(target)中全部字幕的一个子串,顺序无所谓,个数相同且子串中一定是所有可能子串中最短的。最简单的思路是通过暴力法,...

2020-11-15 20:03:00 377

原创 贪心算法原理及其应用

概述贪心算法应该算是那种“只闻其声不见其人”的算法,我们可能在好多地方都会听到贪心算法这一概念,并且它的算法思想也比较简单就是说算法只保证局部最优,进而达到全局最优。但我们实际编程的过程中用的并不是很多,究其原因可能是贪心算法使用的条件比较苛刻,所要解决的问题必须满足贪心选择性质---所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心...

2020-11-03 15:19:00 1614

原创 视频语义分割基准数据集与评估方法

概述本文来源于《A Benchmark Dataset and Evaluation Methodology for Video Object Segmentation》,论文主要介绍了一种作者团队提供的针对视频语义分割算法进行评估的基准数据并提供了三种指标用于评估算法效果的优劣。本文主要是个人在阅读该论文的的一些所得,但由于论文内容所致,本文阅读起来更像一篇说明文档,提供与此,仅供参考。D...

2020-11-01 21:19:00 893

原创 二分查找及其应用

概述二分查找算法是一种效率极高的算法,也是为数不多时间复杂度在O(logn)量级的算法。算法思想并不难理解,但是某些细节却十分复杂,因而本文尝试从一个通用框架入手,通过对不同细节的填补,生成在三种情况下适用的不同框架。同时后边给了一些二分查找的里边,便于读者练习。框架与说明通用二分查找框架框架处理过程:1. 初始化:为left和right赋值2. 循环退出条件3. 比较中值和目标值...

2020-10-29 09:35:00 724 1

原创 常见的位操作及其应用

概述与、或、异或、取反或者移位运算这几种基本的位操作想必诸位读者并不陌生,如果我们能在某些合适场景下使用位运算,有些时候可以大大提高算法的效率。但由于本身位运算太过灵活,甚至某些技巧比较苦涩难懂,因而,本篇文章主要介绍几种常见的或者有趣的位操作,并且给出一些用到这些技巧的算法题目,便于读者练习。有趣的操作1. 大小写字母转换利用或操作和空格将英文字母转成小写('a' | ' ') ...

2020-10-27 20:51:00 446

原创 二叉树遍历的常用方法

概述二叉树的遍历可以说是解决二叉树问题的基础。我们常用的遍历方式无外乎就四种前序遍历、中序遍历、后续遍历、层次遍历这四种。其中前三种遍历方式在实现时,即便采用不同的实现方式(递归方式、非递归),它们的算法结构是有很大的相似性。因而针对前三种的遍历我们会总结出对应通用的解决框架,便于在解决二叉树问题时进行使用。递归方式递归方式遍历二叉树时,无论是前序遍历、中序遍历还是后续遍历的方式,它们最大...

2020-10-26 10:06:00 187

原创 BFS与DFS套路总结

概述深度优先遍历和广度优先搜索和广度优先搜索是解决图问题最常见的方式,并且在leetcode中有许多相关的变体,但万变不离其宗,其本质结构或者算法框架时固定的,因此本文BFS和DFS算法的原理总结了对应的算法框架,并提供了几道例题来解决如何使用这些框架。好,话不多少,我们下边正式开始。BFSBFS算法本质上就是从一个图的起点出发开始搜索找到目标终点完成搜索。当然在该算法上会有许多变体比...

2020-10-23 19:59:00 218

原创 链表问题一些常用的套路与方法

概述链表问题应该是数据结构中比较基础的一类问题,但同时也是在面试中常考的一类问题。但是围绕链表问题的一些基本方法或者处理思想,也无外乎那几类,因此本文尝试对链表常用的一些方法或者套路进行总结。常用方法1.头结点增加头结点或者说哑巴节点这种方式,应该是我们在处理链表问题最常用的处理方式。简单来说引入头结点有两个优点:由于开始结点的位置被存放在头结点的指针域中,所以在链表的第一个位置上的...

2020-10-16 16:56:00 172

支持IDEA中文输入的JRE环境

在linux平台下使用搜狗输入法在IDEA中输入中文时,输入法候选框总是静止在IDEA的左下角,而不能跟随光标进行移动。虽然不影响输入结果,但很影响输入体验。并且其实网上确实给了一些解决方法,但好多时候,这些解决方法对小白不太友好,因此提供一个修改过的IDEA的运行环境,从而解决该问题。如果感兴趣的可以参考个人博客自行编译

2020-09-28

编码规范认证.rar

文档是关于阿里编码规范认证的一些考试题目,希望能给大家一些帮助。压缩包里边一共有7套题,是自己准备考试的时候收集的,包括自己学习的时候一些笔记,相对来说应该是比较全面的。收集的时候各种文件类型都有,为了便于阅读我将所有的文件转成pdf另外存了一个文件夹。如果大家有什么疑问,欢迎到www.vcjmhg.top,上边留言。

2020-04-08

vim-galore-zh_cn.pdf

本文档主要是对开源项目vim-galore-zh_cn的整理,便于离线阅读。 [Vim](https://github.com/vim/vim) 是一个历史悠久的文本编辑器,可以追溯到 [qed]()。 [Bram Moolenaar](https://en.wikipedia.org/wiki/Bram_Moolenaar) 于 1991 年发布初始版本。 Linux、Mac 用户,可以使用包管理器安装 Vim,对于 Windows 用户,可以从 [我的网盘](https://share.we

2020-04-08

s3c6410中文手册

s3c6410的中文版开发文档

2017-07-04

s3c6410英文本手册_v1.2

s3c6410英文本手册,包含所有的接口说明,非常详细

2017-07-04

s3c6410测试程序

官方给定的OK6410的测试代码,包含所有组件的测试亲测可用

2017-07-04

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

TA关注的人

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