自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

海涛帅帅的博客

海涛帅帅

  • 博客(73)
  • 问答 (1)
  • 收藏
  • 关注

原创 前端、后端、nginx解决跨域的方案

项目地址前端:https://gitee.com/haitaoss/test_cross_vue后端:https://gitee.com/haitaoss/test_cross前端解决跨域变动的文件1:config/index.jsproxyTable: { '/api': { target: 'http://localhost:8080', // 目标服务器地址 pathRewrite: { '^/api': '' //

2021-03-27 19:07:23 608

原创 09_Jenkins 部署Node项目

部署Node项目相关脚本# 打包项目的脚本#!/bin/bashscnpm installcnpm run buildtar czf ./shell/dist.tar dist# DockerfileFROM nginx:1.19.8COPY ./nginx.conf /etc/nginx/nginx.confADD ./dist.tar /usr/share/nginx/html# 构建镜像 push 到harbor仓库echo "构建镜像并且push到harbor仓库

2021-03-25 17:01:00 604

原创 08_JenKins部署SpringBoot项目

部署SpringBoot 项目相关脚本项目的目录结构# 192.168.1.100:99/bs/haitao-centos7:v1 的构建代码(需要提前下载好jre和node)# 提前node 在项目里面没有用到可以不安装# 设置原始镜像FROM centos:7# 设置作者信息MAINTAINER haitao.chen<[email protected]># 创建目录RUN mkdir -p /opt/software /opt/module /opt/wor

2021-03-25 16:59:52 222 1

原创 07_Jenkins的初始化和安装插件

安装Jenkins# 设置1000:1000 是因为,容器内jenkins所属与1000:1000 。不需要管你本机是否有对应的用户和用户组,你这么设置就肯定不会出现权限问题[vagrant@jenkins ~]$ mkdir -p /opt/data/jenkins/jenkins_home && chown -R 1000:1000 /opt/data/jenkins/jenkins_home[vagrant@jenkins ~]$ docker run -d -p 8080:

2021-03-25 16:58:24 819

原创 06_harbor的快速使用

介绍harbor 是远程容器仓库安装# -f 指定docker-compose文件路径,默认就是当前路径# -d 后台运行# up 创建容器 down 删除容器 stop 停止运行的容器 start 将停止的容器启动docker-compose -f ./docker-compose.yml up -ddocker-compose -f ./docker-compose.yml down -ddocker-compose -f ./docker-compose.yml stop -ddoc

2021-03-25 16:57:21 154

原创 05_gitlab快速使用

默认的登录名是root$ sudo mkdir -p /opt/data/gitlab && sudo chmod -R 777 /opt/data && \docker run -d \--publish 443:443 --publish 80:80 --publish 222:22 \--hostname 192.168.1.101 \--restart always \--volume /opt/data/gitlab/config:/etc/gitlab

2021-03-25 16:56:10 76

原创 04_gitlab详细教程

gitlab 介绍gitlab 镜像分为两个版本:gitlab-ce 社区版(我们使用这个版本)、gitlab-ee 企业收费版docker镜像地址:https://hub.docker.com/r/gitlab/gitlab-cegitlab docker镜像使用文档:https://docs.gitlab.com/omnibus/docker/README.htmlgitlab 帮助文档:https://about.gitlab.com/get-help/使用docker 下载运行gitlab

2021-03-25 16:55:22 669

原创 03_nexus快速使用

安装步骤$ sudo mkdir -p /opt/data/nexus/nexus-data && sudo chown -R 200 /opt/data/nexus/nexus-data && \docker run -d -p 8081:8081 \-e INSTALL4J_ADD_VM_PARAMS="-Xms1g -Xmx1g -XX:MaxDirectMemorySize=1g" \-e NEXUS_CONTEXT=nexus \-v /opt/data/

2021-03-25 16:53:15 229

原创 02_nexus详细教程

官方文档nexus manager:https://guides.sonatype.com/repo3/quick-start-guides/proxying-maven-and-npm/docker 安装 nexus:https://hub.docker.com/r/sonatype/nexus3/nexus3 常用仓库类型的介绍在下面创建仓库的示意图里面会出现这三个仓库类型proxy:是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向

2021-03-25 16:51:02 1221

原创 01_启动所有容器的脚本

启动后端相关的容器nexus、gitlab、jenkinsversion: "3"services: # nexus # docker-compose run nexus "id" # 查看容器内nexus 所属的用户和用户组,或者去dockerhub 上面去看看这个容器的构建记录(IMAGE LAYERS),看看设置的uid gid是多少 # mkdir -p /opt/data/nexus/nexus-data && chown -R 200:200 /.

2021-03-25 16:49:25 118

原创 IDEA远程调试Java项目

源代码https://gitee.com/haitaoss/test-remote-debuggeridea 的配置docker-compose 启动Java项目# filename Dockerfile-webFROM openjdk:8COPY --chown=root:root ./*.jar /usr/src/myapp/web.jarWORKDIR /usr/src/myappCMD ["sh", "-c", "java -jar $JAVA_OPTS web.jar "]

2021-03-25 15:04:00 126

原创 使用Docker基于Nexus3 Manger快速搭建Maven私有仓库

官方文档nexus manager:https://guides.sonatype.com/repo3/quick-start-guides/proxying-maven-and-npm/docker 安装 nexus:https://hub.docker.com/r/sonatype/nexus3/Maven的获取依赖示意图本地maven私服指定的是一个私有仓库的情况本地maven私服指定的是一个私有仓库组的情况使用docker 安装nexus$ sudo mkdir -p /opt/d

2021-01-11 17:59:59 185

原创 17-垃圾回收器

GC分类与性能指标垃圾回收器概述垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。垃圾回收器分类按线程数分按线程数分,可以分为串行垃圾回收器和并行垃圾回收器。串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。在诸如单CPU处理器或者较小的应用内存等硬件平台不是特

2020-09-29 10:20:38 249

原创 16-垃圾回收相关概念

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

2020-09-28 22:23:40 208

原创 15-垃圾回收相关算法

垃圾标记阶段:引用计数算法垃圾标记阶段:对象存活判断在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。判断对象存活一般有两种方式:引用计数算法和可达性分析算法。引用计数算法概述引用计

2020-09-28 22:22:59 121

原创 14-垃圾回收概述

什么是垃圾常见问题垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战,这当然也是面试的热点。什么是垃圾?什么是垃圾(

2020-09-28 22:22:05 115

原创 13-StringTable

String的基本特性String: 字符串,使用一对""引起来表示。String s1 = “atguigu”; // 字面量的定义方式String s2 = new String(“hello”);String 声明为final的,不可被继承String 实现了Serializable 接口:表示字符串是支持序列化的。实现了Comparable 接口:表示String可比较大小String在jdk8 及以前内部定义了final char[] value 用于存储字符串数

2020-09-28 22:21:21 164

原创 12-执行引擎

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

2020-09-28 22:19:50 111

原创 11-直接内存

直接内存概述不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常,访问直接内存的速度会优于Java堆。即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区也可能导致OutOfMemoryError异常由于直接内存在Java堆外,因此它的

2020-09-28 22:19:02 77

原创 10-对象的实例化内存布局与访问定位

对象的实例化前面所述是从字节码角度看待对象的创建过程,现在从执行步骤的角度来分析:判断对象对应的类是否加载、链接、初始化虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。( 即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以ClassLoader+包名+类名为Key进行查找对应的.class文件。如果没有找到文件,则ClassNotFoundExcep

2020-09-26 16:58:03 104

原创 09-方法区

栈、堆、方法区的交互关系方法区的理解方法区在哪里《Java虚拟机规范》中明确说明: "尽管所有的方法区在逻辑上是属于堆的一部分, 但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以,方法区看作是一块独立于Java堆的内存空间。https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5.4方

2020-09-26 16:57:10 189

原创 08-堆

回顾学习jvm肯定是为了性能的优化,我们可以使用可视化工具查看项目的资源使用情况。根据资源耗费情况我们合理的规划内存的分配。如何合理的规划内存的分配这就需要学习jvm中内存的结构。要想对内存结构有更好的理解,需要知道class文件的加载过程和class文件的内容以及如何执行class文件。栈管运行,堆管存储堆的核心概述堆核心概述:概述heap一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM 管理的最大

2020-09-26 16:55:00 223

原创 07-本地方法栈

本地方法栈Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。本地方法栈,也是线程私有的。允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的)如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个StackOverflowError 异常。如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java虚拟机将会抛出一个OutOfMemoryErr

2020-09-26 16:53:54 70

原创 06-本地方法接口

什么是本地方法简单地讲,一个Native Method就是一个Java调用非Java代码的接口。一个Native Method是这样 一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “C” 告知C+ +编译器去调用一个C的函数。"A native method is a Java method whose implementation isprovided by non-java code.

2020-09-26 16:53:11 79

原创 05-虚拟机栈

虚拟机栈概述背景由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。内存中的栈与堆栈是运行时的单位,而堆是存储的单位。即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放、放在哪儿。虚拟机栈基本内容Java虚拟机栈是什么?Java虚拟机栈(Java Virtual Machine Sta

2020-09-26 16:51:50 127

原创 04-程序计数器

程序计数器(PC寄存器)PC Register介绍JVM中的程序计数寄存器( Program Counter Register) 中,Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。它是一块很小的内存空间,几乎可以忽略不记。也是运行速

2020-09-26 16:50:24 74

原创 03-运行时数据区概述及线程

概述内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。运行时数据区的详细图(来源:阿里手册 )线程线程的概念线程是一个程序里的运行单元。JVM允许一个应用有多个线程并行的执行。在HotspotJVM里,每个线程都与操作系统的本地线程

2020-09-26 16:49:03 62

原创 02-类加载子系统

内存结构概述内存图类加载器与类的加载过程类加载子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)类加载ClassLoader角色

2020-09-26 16:46:55 117

原创 01-JVM与Java体系结构

Java发展的重大事件1990年,在Sun计算机公司中,由Patrick Naughton、MikeSheridan及James Gosling 领导的小组Green Team, 开发出的新的程序语言,命名为0ak,后期命名为Java.1995年,Sun正式发布Java和HotJava产品,Java 首次公开亮相。1996年1月23日Sun Microsystems发布了JDK 1.0。1998年,JDK 1.2版本发布。同时,Sun发布了JSP/Servlet、 EJB规范,以及将Java分成了

2020-09-26 16:45:31 1371

原创 18_NIO

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

2020-09-17 09:01:35 147 1

原创 17_juc

Java JUC简介在 Java 5.0 提供了 java.util.concurrent (简称 JUC )包,在此包中增加了在并发编程中很常用 的实用工具类,用于定义类似于线程的自定义子 系统,包括线程池、异步 IO 和轻量级任务框架。 提供可调的、灵活的线程池。还提供了设计用于 多线程上下文中的 Collection 实现等。volatile关键字-内存可见性概述内存可见性(Memory Visibility)是指当某个线程正在使用对象状态 而另一个线程在同时修改该状态,需要确保当一个

2020-09-14 15:47:57 404

原创 16_java8的其他新特性

Java 8新特性简介新特性简介Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Java 8 是oracle公司于2014年3月发布,可以看成是自Java 5 以 来最具革命性的版本。Java 8为Java语言、编译器、类库、开发 工具与JVM带来了大量新特性。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-itrO2xSg-1600041602719)(/Users/haitao/Pictures/TyporaPic/16_java

2020-09-14 08:00:26 172

原创 15_反射

Java反射机制概述Java ReflectionReflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期 借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内 部属性及方法。加载完类之后 ,在堆内存的方法区中就产生了一个Class类型的对象( 一个 类只有一个Class 对象),这个对象就包含了完整的类的结构信息 。我们可以通过这个对象看到类的结构。这个对象就像一面镜子 ,透过这个镜子看 到类的结构,所以,我们形象的称之为:反射。[外

2020-09-14 07:59:54 130

原创 14_网络编程

网络编程概述Java是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序。Java提供的网络类库,可以实现无痛的网络连接,联网的底层 细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并 且 Java 实现了一个跨平台的网络库,程序员面对的是一个统一 的网络编程环境。网络通信要素概述IP和端口IP + 端口组成的地址叫做套接字(socket)如何实现网络中的主机互相通信通信双方地址IP端口号

2020-09-14 07:59:23 188

原创 13_IO流

List itemFile的使用java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关 File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。 如果需要访问文件内容本身,则需要使用输入/输出流。想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对 象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。File对象可以作为参数传递给流的构造器常用构造器public File(Str..

2020-09-14 07:58:53 224

原创 12_泛型

为什么要有泛型泛型:generic泛型:标签举例:中药店,每个抽屉外面贴着标签超市购物架上很多瓶子,每个瓶子装的是什么,有标签泛型的设计背景集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的 对象,所以在JDK1.5之前只能把元素类型设计为Object,JDK1.5之后使用泛型来 解决。因为这个时候除了元素的类型不确定 ,其他的部分是确定的,例如关于 这个元素如何保存 ,如何管理等是确定的,因此此时把元素的类型设计成一个 参数,这个类型参数叫做泛型。Co

2020-09-14 07:58:23 142

原创 11_集合

集合框架的概述开发中能用集合就不要用数组集合框架概述一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊 端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。数组在内存存储方面的特点:数组初始化以后,长度就确定了。数组声明的类型,就决定了进行元素初始化时的类型数组在存储数据方面的弊端:数组初始化以后,长度就不可变了,不便于扩展数组中提供的属性和方法少,不便于进

2020-09-14 07:57:51 129

原创 10_枚举类和注解

枚举类的使用概述枚举类的使用枚举类的理解:类中的对象的个数是确定的,有限个,构造器私有化,实例对象public static final,成员属性private final。我们称此类为枚举类当需要定义一组常量时,强烈建议使用枚举类如果枚举类中只有一个对象,则可以作为单例模式的实现方式。如何定义枚举类方式一:jdk5.0之前,自定义枚举类方式二:jdk5.0,可以使用enum关键字定义枚举类Enum类中的常用方法:## 我们使用enum 关键字定义枚举类,默认就继承

2020-09-14 07:57:16 86

原创 09_常用的类

字符串相关的类String类及常用方法String的特点String 里面的char[] value 是引用数据类型,所以存放的是地址值,地址指向的是常量池里面的地址String 不可变性:String的数据存放在char[] value中,数组是引用数据类型,然后value指向的地址是常量池。又因为String里面的value是final 类型的,所以不能重新指向新的地址,然后常量池里面不可能有相同的数据,所以要想重新赋值,只能重新造一个对象。1.当对字符串重新赋值时,需要重写指定内

2020-09-14 07:56:53 110

原创 08_多线程

基本概念:程序、进程、线程一个java程序运行至少需要3个线程:主线程、gc线程、异常处理线程一个线程有一份虚拟机栈和一份程序计数器。一个进程有一个方法区(类的加载信息、常量池、静态域)和堆。一个进程可以有多个线程。那么这多个线程就共享方法区和堆。程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。进程(process)是程序的一次执行过程,或是正在运行的一个程序。是一个动态 的过程:有它自身的产生、存在和消亡的过程。——生命周期

2020-09-14 07:56:10 161

空空如也

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

TA关注的人

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