自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 资源 (1)
  • 收藏
  • 关注

原创 华为自研数据库openGauss 环境搭建(docker容器启动方式)

华为自研数据库openGauss 环境搭建(docker容器部署方式)部署openGauss数据库官网提供安装包的方式,但这种方式,配置极易出错,需要编写相应的配置文件,如果在本地搭建的话,系统如果不符合官方标准,则是需要修改系统的配置,相对来说,比较复杂。我在这里介绍一种比较方便和快捷的部署方式——docker容器部署。有关安装包的部署方式,可以参考opengausshttps://opengauss.org/zh/docs/1.0.0/docs/Quickstart/%E5%AE%89%E8%A3

2020-09-22 16:55:46 7448 2

原创 JVM的运行时数据区域

什么是JVMJVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。换句话说,就是如果我们能够设计一个编译器将“中文程序”翻译成字节码,

2020-08-26 18:23:57 203

原创 带你手写红黑树——500行代码

手写一个红黑树既然红黑树如此的不友好,那么我就来手写一个红黑树,来细致地探究一下该如何实现一个属于自己的红黑树,这样自己也好有个底_。500+行代码实现一个红黑树:树的设计public class RBTree<Key extends Comparable<Key>, Value> { /****************颜色常量***************************/ private static final boolean RED = tr

2020-08-10 17:33:43 4579

原创 ArrayList的扩容机制和核心底层数据结构

ArrayList底层数据结构transient Object[] elementData; // 用于存储数据的buffer数组在 ArrayList集合的底层是由一个可变的动态 Object[]数组组成的,由于他是由数组构成的,所以该集合类框架对于随机访问的效率很高,时间复杂度为 O(1)。 public boolean add(E e) { modCount++;// 结构更改次数 add(e, elementData, size);// 套娃

2020-08-01 12:22:21 735

原创 数据结构与算法——背包、队列、栈简介

背包(Bag)简介背包(Bag)是一种不支持从中删除元素的一种数据结构——这种数据结构的主要用处就是收集元素,并且提供遍历所有集合中的元素的方法。他的迭代顺序是随机的,并不确定。APIBagpublic class Bag<Item> implements Iterable<Item> { Bag(); //创建一个背包 void add(Item item); //添加元素 boolean isEmpty(); //是否为空背包 int size()

2020-07-09 18:57:32 941

原创 利用HALO搭建一个自己的个人博客的正确姿势,亲测

效果图环境准备具有Linux系统基本操作能力具有可以进行部署的Linux环境CentOS 7.xDocker1G以上的内存MySQLjdk环境搭建Docker环境安装检查Linux内核版本,必须是3.10及以上[root@localhost ~]# uname -r3.10.0-1062.18.1.el7.x86_64安装docker[root@localhost ~]# yum install docker检查docker[root@localho

2020-06-23 12:48:55 5787 1

原创 操作系统中的线程、锁机制和PV操作

线程(Thread)线程是可由CPU直接运行的实体,是程序中的执行路径,一个进程可以创建多个线程,多个线程共享CPU可以实现并发运行。同时线程的并发粒度比进程的并发粒度更细。单线程程序整个进程中只有一个线程。Window程序缺省只有一个线程(主线程,main线程)多线程程序整个进程中至少有两个线程。主线程和至少一个用户线程。线程技术的典型应用场景程序的多个功能需要并发运行在线视频:并发的功能:视频的解码、音频的解码,网络接受,显示和播放音视频等等,这些都需要并发运行,才能给我们良好的体验

2020-06-14 20:25:12 2557

原创 系统调用和进程管理——看完不在蒙圈~~

文章目录操作系统的系统调用系统调用特点系统调用的中断过程操作系统的进程管理背景进程特点程序和进程动态和静态暂存和长存进程的状态运行状态(Running)就绪状态(Ready)阻塞状态(Block)【等待(wait)状态】进程状态的转换简单的三态转化具有新建和终止状态的进程转化Linux的进程状态转换图示进程控制块(Process Control Block,PCB)PCB的数据结构进程控制进程创建创建流程:进程撤销撤销的时机/事件撤销流程进程阻塞阻塞的时机/事件进程阻塞需要的参数进程阻塞的流程进程唤醒引起进

2020-06-07 12:28:10 997

原创 带你一分钟了解操作系统

操作系统概述发展历史用户需求提升和硬件技术的进步驱动操作系统的发展。硬件的四个发展阶段电子管时代【1946-1955】晶体管时代【1955-1965】集成电路时代【1965-1980】大规模集成电路时代【1980-至今】速度、容量、稳定性、可靠性得到逐步的提升。操作系统的四个发展阶段手工处理操作,50年代早期单道批处理时代多道批处理时代分时系统手工操作(电子管时代)结构特点硬件:电子管、接线面板(按钮、开关)程序:二进制程序,打孔:纸带或者卡片存储。使用特点

2020-05-28 12:35:14 3025

原创 Java实现二分法、牛顿(Newton)迭代法、快速弦截法方程求根的数值方法

问题场景假定在一次实际的建筑设计中,伟大的设计师经过一波辛苦的操作终于得到一个最终的函数f(x)f(x)f(x),只需要求出这个函数f(x)f(x)f(x)的零点,就可以完成整个项目的设计:y=f(x)=x2+lnx,(x>0).y=f\left(x\right)=x^2+lnx,(x>0).y=f(x)=x2+lnx,(x>0).对于这个问题很难入手,用一般的求解方式...

2020-04-25 17:06:53 3488

原创 改进的欧拉(Euler)公式&四阶龙格-库塔(Runge-Kutta)方法,解常微分方程初值问题

改进的欧拉(Euler)公式欧拉公式yn+1=yn+hf(xn,yn)n∈N\begin{array}{l}y_{n+1}=y_n+hf\left(x_n,y_n\right)n\in N\end{array}yn+1​=yn​+hf(xn​,yn​)n∈N​梯形公式yn+1=yn+h2[f(xn,yn)+f(xn+1,yn+1)],n∈N\begin{array}{l}y_{n+1...

2020-04-25 15:41:52 15905

原创 数值分析Java实现——拉格朗日(Lagrange)插值多项式&牛顿(Newton)插值多项式&线性拟合数据

插值方法——代数插值实际的问题中碰到的函数是各种各样的,有的表达式比较复杂如:f(x)=sin⁡xln⁡xxf\left(x\right)=\sqrt{\sin x}\frac{\ln x}xf(x)=sinx​xlnx​甚至有些根本无法得出解析解,只能得到一些离散的数据点或者一些点的导数值。这样一来研究原来的函数就显得比较吃力。而插值方法就是为了解决这一问题的诞生的。我们通过对有限个点...

2020-04-25 10:55:23 4412

原创 一张图搞定JDK动态代理实现原理——手绘实现动态代理Demo

动态代理模式说到动态代理模式,就一定要提到代理模式。代理模式类似于实际生活中的中介机构,可以给用户提供更好的服务,而不是直接与服务提供方交互。这种模式主要的目的有两个:1.保护目标对象2.增强目标对象动态与静态代理模式静态代理模式:源代码中需要声明代理类,单一的一对一的代理,可扩展性比较低。当需要代理的目标对象数量多的时候,这种模式的成本较高。动态代理模式:源代码中无需声明代理类,它可...

2020-04-18 17:18:06 756

原创 数值积分的龙贝格(Romberg)算法和梯形变步长算法的对比

数值积分在实际的应用设计过程中,比如进行桥梁,摩天大楼等的设计时,会出现许多无法直接求出积分的函数,如:而这些积分值对我们又十分重要,就可以利用计算机的高速的计算能力为我们提供一个达到我们预设的精度ε的数值值,这就叫数值积分。积分的方法计算数值积分的方式有很多,比如机械求积公式、牛顿——柯特斯公式(Newton-Cotes)等。Romberg算法举例首先数值积分的公式有很多,但存在一...

2020-04-15 10:13:42 3912

原创 DB-API——低代码数据库数据接口系统

DB-API——低代码数据库数据接口系统当前只支持MySQL数据库项目简介https://gitee.com/lengdanran/db-api可以通过只编写对应的SQL等数据查询语句(当前只支持MySQL), 即可生成对应数据接口API,用户可以通过API访问得到对应的数据线上体验地址:http://121.4.195.203/ 用户名:admin 密码:admin项目截图技术选型后端——dev分支Java 12MySQLSpring Boot 2.3.7mybat

2022-02-18 14:48:08 4771

原创 Java 手写一个线程池 - SimpleExecutor

Java 手写一个线程池 - SimpleExecutorb站视频讲解:https://www.bilibili.com/video/BV1jU4y1K7Tr/https://www.bilibili.com/video/BV1rF411z76U/什么是线程池 ?线程池可以简单理解为一个加工厂,里面有一定数量的加工机器。该加工厂可以执行各种加工任务,加工厂里面会有一定数量的加工机器一直运作,剩余的机器按照需要执行的任务量来动态的启动和关闭。这里的加工厂就是一个线程池,加工厂里面的机器就可以

2022-01-04 13:26:14 370

原创 从0开始混沌工程(ChaosToolkit)

Start Chaos Engineering by ChaosToolkitChaos Engineering 意为混沌工程,是检验一个复杂系统韧性的一种技术,通过该技术,可以以实验的方式来发现复杂系统中不足,特别是可以在生产环境中引入各种混乱,可以观测到系统应对混乱异常的能力,进而建立我们对系统的信心。这里以AWS开源的Chaos Engineering框架ChaosToolkit来简单体验一下如何开展一个简单的混沌工程。代码地址https://gitee.com/lengdanran/

2021-12-07 12:34:01 2162 3

原创 Java线程的内存不可见性

内存不可见性所谓内存不可见性,就是线程对某个共享变量在线程自己的缓冲中存在副本的时候对主内存中共享变量的值是不可见的,看不见主存中的值。如图是一个2CPU的架构系统,每个CPU都有自己的控制器和运算器,每个CPU也有自己的一级缓存,在图中的架构中,这两个CPU核心共享一个二级缓存。假设某个时刻,这两个CPU核心分别运行着两个线程A和线程B,都要去同时访问主存中的一个共享变量x线程操作一个共享变量时,它首先从主存中拉取并复制一份变量放置到自己的工作内存中,然后在工作内存中对变量进行修改,处理完之后

2021-12-01 14:41:49 649 1

原创 ThreadLocal基本使用与原理

ThreadLocalThreadLocal可以为不同的线程提供不同变量副本,线程访问threadlocal变量实际上是访问的线程本地的内存中数据副本,线程之间的treadlocal变量互不影响。基本使用Examplepublic class ThreadLocalDemo { private static ThreadLocal<String> local = new ThreadLocal<>(); public static void main(St

2021-12-01 12:59:24 404

原创 Java多线程-wait-notify-notifyAll-sleep-join-yield-中断

1.wait()函数当一个线程调用共享变量的wait()方法时,该调用线程会被阻塞挂起,并且释放共享变量的监视器锁。当发生如下几种情况,才会返回:其他的线程调用该共享对象的notify()/notifyAll()方法,被阻塞的线程会被重新唤醒,进入可运行状态。其他线程调用了被阻塞线程上的interrupt()方法,则被阻塞的线程会抛出InterruptException异常放回。如果一个线程在没有获取到共享对象上的监视器锁,就立即调用共享对象上的wait()方法,线程会抛出IllegalMo

2021-11-28 16:32:12 306

原创 一致性hash算法讲解——Java实现

一致性hash算法讲解hashhash(哈希):即是将一个大的集合中的元素映射到一个特定大小的集合中的操作。普通hash的弊端普通的hash一般采用求余的方式得到映射关系,在java中hashmap中的hash索引的策略就是hashcode % table.size()-->实际为 : hashcode & (table.size() - 1),但是这个是在节点的数量一定的情况下,在redis中的,redis主要是做缓存用的,如果一个redis集群需要增加或者删除一个节点,那么采用这种

2021-10-22 15:20:41 922 1

原创 跨域问题的解决方案

跨域问题的解决方案解决跨域问题的方式也有多种。1、前后端结合(JsonP)虽然jsonp也可以实现跨域,但是因为jsonp不支持post请求,应用场景受到很大限制,所以这里不对jsonp作介绍。2、纯后端方式一(CORS方式)@CrossOriginCORS 是w3c标准的方式,通过在web服务器端设置:响应头Access-Cntrol-Alow-Origin 来指定哪些域可以访问本域的数据,ie8&9(XDomainRequest),10+,chrom4,firefox3.5,safa

2021-10-22 15:13:45 191

原创 Centos 7安装Nginx

Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。参考:https://zhuanlan.zhihu.com/p/83890573下载http://nginx.org/en/download.htmlhttp://nginx.org/download/nginx-1.21.3.tar.gzNgin

2021-10-22 15:11:11 1153

原创 HDFS打开文件的流程——源码梳理

文件的读取流程我们一般使用FileSystem来打开HDFS中的一个文件,使用open()方法。对于HDFS来说,FileSystem是由其子类DistributeFileSystem的一个实例来完成的:我们可以进入其open()方法中:首先,DistributeFileSystem对象会对当前的读线程进行计数,这就跳过哈。然后就会将输入的路径进行转化一下,变成绝对路径,然后,会通过一个RPC远程服务调用和NameNode进行通讯,NameNode会返回文件块的起始位置,还有包含当前文件块的副本

2021-10-06 20:50:34 871

原创 HDFS概述

HDFS是以流式数据访问的模式来存储超大文件的一个文件系统,运行与集群上。流式数据访问:HDFS的构建思路是这样的:一次写入、多次读取是比较高效的访问模式。运行与商用的硬件中:商用的硬件在生产环境中出现故障的概率是比较大的。HDFS对数据进行数据备份,一般来讲,一份存储在HDFS集群中数据会有3份副本存储在不同的集群节点上,保证了单点数据损失的问题,HDFS保证了在集群中其中的节点发生故障后仍然可以稳定的运行,用户丝毫没有察觉。不适合低时延的数据访问:HDFS是为高数据吞吐量设计的,会以提高数据的访

2021-10-06 20:41:08 411

原创 Docker的底层实现架构

Docker的底层实现架构docker的底层核心技术包括Linux的命名空间(NameSpace)、控制组(control groups)、Union文件系统(Union file system)和容器格式(Container format)。传统的虚拟机通过宿主主机中运行hypervisor来模拟一套完整的硬件环境提供给虚拟机的操作系统。虚拟机的系统可以观测到的环境是受到限制的,也是彼此隔离的。这种直接的做法实现了对资源的完整封装,但很多时候往往意味着系统资源的浪费。打个比方,如果宿主机和虚拟机

2021-09-25 10:37:29 296

原创 Java手写一个RPC框架(Spring-boot-starter)——基于Netty、Zookeeper

Java基于Netty/Zookeeper实现的RPC框架基于Spring Boot Starter的小型RPC框架。编写这个RPC框架并不是为了重复造轮子,而是出于学习的目的,通过手写一款RPC框架来达到知识的学习和应用目的。简易的RPC框架(danran-rpc),底层使用Netty进行网络通信,使用Zookeeper为注册中心。该项目可以Maven打包直接加入其他项目运行。另外一个仓库:https://gitee.com/lengdanran/danran-rpc-debughttps://

2021-08-26 16:45:18 915

原创 CentOS 7 配置JDK和Maven和MySQL

配置JDK和Maven和MySQL示例项目使用Maven作为构建工具,所以需要配置JDK以及Maven环境。安装JDKhttps://repo.huaweicloud.com/java/jdkhttps://repo.huaweicloud.com/java/jdk/12.0.1+12/jdk-12.0.1_linux-x64_bin.tar.gz[root@9db20e678bb5 ~]# wget https://repo.huaweicloud.com/java/jdk/12.0.1+1

2021-08-23 11:18:59 221

原创 Docker容器间网络通讯

安装Dockeryum install -y dockersystemctl enable dockersystemctl start docker使用docker -v即可查看当前的docker的版本Docker version 1.13.1, build 7d71120/1.13.1容器间通讯由于是分布式环境,各个服务之间是需要进行通讯的,所以这里需要配置docker的网络,保证各个容器之间网络互通,确保服务正常地调用。虚拟ipDokcer在安装的时候,会默认创建一个内部的桥接网络d

2021-08-23 11:16:56 427

原创 CentOS(1核2G)安装RocketMQ

安装JDK可以到https://repo.huaweicloud.com/java/jdk/去查看对应的JDK安装包。这里使用JDK1.8:wget https://repo.huaweicloud.com/java/jdk/8u152-b16/jdk-8u152-linux-x64.rpm直接使用rpm命令安装即可:rpm -i jdk-8u152-linux-x64.rpm=============分割线====================[root@LengDanran ~]# r

2021-06-08 10:35:16 737 1

原创 操作系统——成组链接法

操作系统——成组链接法成组链接法是结合了空闲表和空闲链表法的,UNIX系统采用的就是成组链接法。成组链接法中保存的是当前可用的存储盘块的地址,具体的我们以一个简单的例子来阐述他的结构和分配回收原理。前提假设假设一个空闲的盘块可以存储另外5个盘块的地址和一个当前盘块可以用来存储盘块地址的变量N,结构如下:成组链接的基本结构每一个该结构中的盘块存储的都是可用盘块的地址,如下图,盘块25为空闲的盘块,可以用来存储数据,在盘块0中空间0存储的是下一个类似于盘块0结构的盘块1的地址,空间14存储的则是可以

2021-05-17 23:19:39 14254 17

原创 操作系统——虚拟内存

操作系统——虚拟内存传统的存储管理方式局部性定理虚拟存储器的定义和特征定义基于局部性定理,程序在装入部分后即可开始运行,另外一部分放在外存,当需要访问的时候才将其添加到内存空间中。这部分工作由操作系统来完成,将需要的加入到内存中,不需要的暂时放回到外存中。这样系统就为用户提供了一个看似比实际内存空间大得多的存储器,这就是 虚拟存储器的概念。虚拟存储器并不是一个实际存在的存储器,只是由系统提供了部分的装入、请求调出和置换功能之后(这部分功能对用户是完全透明的,用户无法感知),用户感觉内存空间

2021-05-16 10:25:27 1050 1

原创 操作系统——内存非连续分配方法

操作系统——内存非连续分配方法非连续的内存分配方式允许程序分散地分配在内存空间中,其按照不同的分类有不同的分类结果:基本分页存储管理方式分页管理不会产生外部碎片。思想:把主存分为相对很小的且固定的块结构,作为主存的基本单位,每个进程也按照这个单位进行内存的申请。分页存储管理的几个基本概念页面和页面大小进程中的块称为页,内存中的块称为页框,外存也是按照块分的,直接称为块。地址结构地址长度为32位,其中0-11位为页内偏移量(页内地址),即每页大小为4KB。最多可以有 220 2^{

2021-05-15 21:25:06 748

原创 操作系统——内存连续分配方式

操作系统——内存连续分配方式内存连续分配的意思就是进程在申请内存资源的时候,系统给他分配的内存资源地址是连续的不间断的。单一连续分配在该种方式下,内存分为系统区和用户区,系统区为操作系统专属,通常位于低地址区域;用户区为用户使用,位于高地址区。这种方式无需内存保护,因为内存中只有一道程序在运行。优点:简单,无外部碎片缺点:只能适用于单用户,单进程的系统中,有内部碎片(分配了但是没有利用到的),存储器利用率极低固定分区分配将用户内存空间分为若干个固定大小的区域,每个区域只装入一个作业。当

2021-05-15 21:24:34 870

原创 操作系统——死锁(银行家算法java实现)

#操作系统——死锁(银行家算法Java实现)package com.layui.book.IDL;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Scanner;/** * @Classname DeadLock * @Description TODO * @Date 2021/5/13 15:17 * @Created by ASUS */p

2021-05-15 21:24:02 360

原创 操作系统——内存管理的基本原理和要求

内存管理的基本原理和要求程序的装入和链接创建进程首先需要将进程对应的程序和数据加载到内存中,使其成为可执行的程序。需要三个步骤:编译:由源程序编译成各个目标模块链接:由链接程序将编译后的各个目标模块和库函数一起链接成一个完整的程序装入模块装入:由装入程序将装入模块程序装入内存内存保护需要保护操作系统不受用户进程的干扰,用户进程也不能受到其他用户进程的干扰,这就需要各个进程在各自的存储空间内运行,不能越界运行。...

2021-05-15 21:23:34 199

原创 操作系统——处理机调度

处理机调度为甚要调度在多道程序环境中,进程的数量往往会多于处理机的数量,必定会产生进程之间相互竞争处理机的情况,此时,为了能够使得各个进程可以正确的运行,以及提高系统的处理机的利用率和吞吐量,就必定需要调度。处理机调度是多道操作系统的基础,是操作系统设计的核心问题。调度的层次三级调度的联系作业调度从外存的后备队列中选择一批作业,载入内存,分配基本的资源,创建进程,加入到进程就绪队列中等待进程调度选择,分配处理机,运行。中级调度在内存空间有限制的条件下,为了提高内存的利用率,将需要其他资源

2021-05-15 21:23:01 149 1

原创 操作系统——进程同步

操作系统——进程同步进程同步的概念为甚要引入进程同步的概念?在多道程序的环境下,进程之间是并发运行的,进程之间存在着资源的共享和任务的制约关系,为了协调进程之间的相互制约关系,引入了进程同步的概念。临界资源一次仅允许一个进程使用的资源称为临界资源。对临界资源的访问,必须是互斥的。同步同步亦称为制约关系,指的是完成某种任务而建立的两个或者多个进程,这些进程需要一定的执行顺序才能够正确地完成任务,由此而产生的制约关系可称为同步。互斥互斥也称为间接制约关系,当一个进程想要访问临界资源的时候,如果

2021-05-15 21:22:24 432

原创 操作系统——进程与线程

进程与线程进程的概念多道程序环境下:多个程序并发执行,他们将会失去封闭性,具有间断性和不可再现性。为了更好地描述和控制程序的并发执行,实现操作系统的共享和并发的基本特征,引入进程的概念。进程控制块(PCB)为了能够使得并发的程序包含数据能够正常地运行,而设计的一种数据结构。进程控制块是进程存在的唯一标识!!进程的特征进程的状态和转换通常进程有5种状态,前3种为基本的状态:运行态进程在处理机上运行就绪态进程已经获得除处理机之外的所有资源,获得处理机后即可立即运行。

2021-05-15 21:21:58 375 3

原创 操作系统——计算机系统概述

title: 操作系统——计算机系统概述操作系统的基本概念计算机系统自下而上可分为:硬件、操作系统、应用程序和用户4个部分。操作系统:是指控制和管理整个计算机系统资源的硬件和软件资源,合理地组织、调度计算机工作和资源分配,为用户和其他的软件提供方便接口与环境的程序集合。是计算机系统中的最基本的系统软件。操作系统的特征并发操作系统的并发性是指计算机系统中同时存在多个运行的程序。并发和并行:并发:同一个时间段中,并行:同一个时间点中(时刻)并行性指的是在同一个时刻,可以同时执行不同的操作或.

2021-05-15 21:21:23 389

java代码的压缩包文件

包含了文章所提的算法具体实现,可以编译直接运行测试。代码的被积函数为f(x)=1/x;其原函数为F(x) = lnx

2020-04-15

空空如也

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

TA关注的人

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