JVM学习总结
¶一、什么是JVM
¶定义
Java Virtual Machine,JAVA程序的运行环境(JAVA二进制字节码的运行环境)
¶好处
一次编写,到处运行
自动内存管理,垃圾回收机制
数组下标越界检查
多态,使用虚方法机制调用实现
¶比较
JVM JRE JDK的区别
¶二、内存结构
¶0、整体结构
方法区:类保存位置
堆:实例、对象保存位置
虚拟机栈、程序计数器、本地方法栈:实例对象调用方法时用到
解释器:解释字节码变为机器码
JIT即时编译器:对热点数据优化处理
本地方法接口:Java无法实现的部分,根操作系统底层打交道的接口
¶1、程序计数器
¶定义
Program Counter Register 程序计数器(寄存器)
¶作用
用于保存JVM中下一条所要执行的指令的地址
¶特点
线程私有
CPU会为每个线程分配时间片,当当前线程的时间片使用完以后,CPU就会去执行另一个线程中的代码
程序计数器是每个线程所私有的,当另一个线程的时间片用完,又返回来执行当前线程的代码时,通过程序计数器可以知道应该执行哪一句指令
不会存在内存溢出
JVM中唯一一个内存不会溢出的 ...
计算机操作系统 - 详细版
¶一、操作系统概述
¶1、操作系统定义
操作系统(Operating System,OS):是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。
是系统最基本最核心的软件,属于系统软件
控制和管理整个计算机的硬件和软件资源
合理的组织、调度计算机的工作与资源的分配
为用户和其它软件提供方便的接口和环境
¶2、操作系统功能和目标
¶作为系统资源的管理者
处理机调度(管理):在多道程序环境下,cpu的分配和运行都以进程(或线程)为基本单位,因此对cpu的管理可理解为对进程的管理。进程管理的主要功能包括进程控制、进程同步、进程通信、死锁处理、处理机调度等
存储器管理:为多道程序的运行提供良好的环境,方便用户使用及提高内存的利用率,主要包括内存分配与回收、地址映射、内存保护与共享和内存扩充等功能。
文件管理:计算机中所有的信息都是以文件的形式存在的,操作系统中负责文件的管理的部分称为文件系统,文件管理包括文件存储空间的管理、目录管理及文件读写管理和保护等。
设备管理:主要任务是完 ...
计算机网络
¶一、计算机网络体系结构
¶0、脑图
¶1、计算机网络概述
¶脑图
¶概念
计算机网络是 互连的、自治的 计算机系统的集合。
互连:互联互通
自治:无主从关系
计算机网络是一个将分散的、具有独立功能的计算机系统,通过通信设备和线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。
网络把许多计算机连接在一起,而互联网则把许多网络连接在一起,因特网是世界上最大的互联网。
¶功能
数据通信(连通性)
资源共享(硬件、软件、数据)
分布式处理
提高可靠性(容错性)
负载均衡
¶组成
组成部分:
硬件(主机(端系统)、链路(双绞线、光纤)、通信设备(路由器、交换机))
软件
协议(约定和规则)
工作方式:
边缘部分(用户直接使用)
C/S方式
P2P方式
核心部分(为边缘部分服务)
大量网络和连接这些网络的路由器组成
功能组成:
通信子网:实现数据通信
资源子网:实现资源共享(数据处理)
¶分类
按分布范围分
广域网WAN(交换技术)
城域网MAN
局域网LAN(广播技术)
个人区域网PAN
按使用者分
公用网(指电信公司出资建造的大型 ...
计算机操作系统
¶一、操作系统结构
¶1、操作系统定义
从用户、控制的角度,操作系统是个控制软件,管理应用程序、为应用程序提供服务、杀死应用程序。
从资源分配的角度来说,操作系统进行资源管理、管理各种外设、对资源进行分配。
操作系统将物力资源进行抽象:CPU抽象成进程、磁盘抽象成文件、内存抽象成地址空间提供给应用程序使用。
¶2、操作系统地位
硬件之上、应用程序之下。是个中间层的系统软件。
操作系统位于应用软件之下、为应用软件提供服务支撑,完成对硬件的管理。
操作系统有两层对外的接口:对外暴露的接口外壳(Shell),和面向内部的内核(Kernel)。
¶3、操作系统分类
¶4、操作系统软件的组成
shell:命令行接口,方便用户操作
gui:图形用户接口
kernel:内核,执行资源管理。
Kernel:操作系统内部组件,包括:CPU调度、物理内存管理、虚拟内存管理(给上层应用提供相对独立而且尽可能大的内存)、文件系统管理(存储和访问永久保存的数据)、中断处理与设备驱动(和底层设备直接打交道)等。
¶5、操作系统内核特征
并发:计算机系统中同时存在多个运行的程序,需要OS管理和 ...
在线教育-谷粒学苑项目总结
项目GitHub地址:https://github.com/niuxvdong/Guli_Project
¶零、在线教育项目简介
¶工程结构
¶模块说明
guli-parent:在线教学根目录(父工程),管理四个子模块:
canal-client:canal数据库表同步模块(统计同步数据)
common:公共模块父节点
common-util:工具类模块,所有模块都可以依赖于它
service-base:service服务的base包,包含service服务的公共配置类,所有service模块依赖于它
spring-security:认证与授权模块,需要认证授权的service服务依赖于它
infrastructure:基础服务模块父节点
api-gateway:api网关服务
service:api接口服务父节点
service-acl:用户权限管理api接口服务(用户管理、角色管理和权限管理等)
service-cms:cms api接口服务
service-edu:教学相关api接口服务
service-msm:短信api接口服务
service-order ...
前端知识点总结
¶一、Es6基础入门
更加全面的阮一峰Es6教程!
¶1、简介
ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
¶ECMAScript 和 JavaScript 的关系
一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系?
要讲清楚这个问题,需要回顾历史。1996 年 11 月,JavaScript 的创造者 Netscape 公司,决定将 JavaScript 提交给标准化组织 ECMA,希望这种语言能够成为国际标准。次年,ECMA 发布 262 号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为 ECMAScript,这个版本就是 1.0 版。
因此,ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现(另外的 ECMAScript方言还有 Jscript 和ActionScript)
¶ES ...
基于异步的、事件驱动的网络应用程序框架、快速开发高性能、高可靠性的网络服务器和客户端程序Netty介绍
¶一、BIO编程
¶1、I/O 模型
I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能
Java 共支持 3 种网络编程模型 IO 模式:BIO、NIO、AIO
Java BIO : 同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销
Java NIO : 同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求就进行处理
Java AIO(NIO.2) : 异步非阻塞,AIO 引入异步通道的概念,采用了 Proactor 模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多且连接时间较长的应用
¶2、适用场景分析
BIO 方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序简单易理解。
NIO ...
处理线程的工具包、JUC并发编程
¶一、JUC概述
**推荐博客:https://blog.csdn.net/TZ845195485/article/details/109210095**
¶1、JUC简介
在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的。JUC就是 java.util .concurrent 工具包的简称。这是一个处理线程的工具包,JDK
1.5 开始出现的。
¶2、进程和线程
进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
总结来说:
进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。
线程:系统分配处理器时间资源的基本单元,或者说进程之 ...
分布式微服务架构的一站式解决方案、多种微服务架构落地技术的集合体、俗称微服务全家桶的 SpringCloud
¶一、微服务架构概述
¶1、微服务
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相协作(通常是基于HTTP协议的RESTful API)。每个服务都围绕着具业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。
¶2、架构图
¶3、SpringCloud技术栈
SpringCloud = 分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶!
¶4、版本选择
官网版本依赖关系:https://start.spring.io/actuator/info
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 ...
进一步封装Spring、为简化Spring开发而生的SpringBoot框架
¶一、SpringBoot概述
¶1、能做什么
¶Spring能力
微服务开发
响应式编程(异步非阻塞)
分布式云开发
web开发
无服务开发(FAAS:函数级开发)
事件驱动(使用数据流利用响应式编程)
批处理开发
¶Spring生态
web开发
数据访问
安全控制
分布式
消息服务
移动开发
批处理
…
¶Spring5升级
响应式编程:占用少量线程,使用少量资源就可以处理大量的并发和需要的业务!
内部源码设计:基于Java8的一些新特性,如:接口默认实现(适配器模式)。重新设计源码架构。
¶2、为什么用
能快速创建出生产级别的Spring应用!
¶SpringBoot优点
SpringBoot是整合Spring技术栈的一站式框架!
SpringBoot是简化Spring技术栈的快速开发脚手架!
创建独立Spring应用
内嵌web服务器
自动starter依赖,简化构建配置
自动配置Spring以及第三方功能
提供生产级别的监控、健康检查及外部化配置
无代码生成、无需编写XML
¶SpringBoot缺点
人称版本帝,迭代快,需要时刻关注变化
封装太深, ...
高级消息队列、开源消息代理软件、面向消息的中间件 RabbitMQ 介绍
¶一、MQ相关概念
¶1、什么是 MQ
MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。
¶2、为什么要用 MQ
¶流量消峰
举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订单超过一万后不允许用户下单。使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好。
¶应用解耦
以电商应用为例,应用中有订单系统、库存系统、物流系统、支付系统。用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障,都会造成下单操作异常。当转变成基于消息队列的方式后,系统间调 ...
高性能、轻量级开源分布式RPC服务框架Dubbo使用介绍
¶一、分布式介绍
¶1、是什么
《分布式系统原理与范型》定义:
“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”
分布式系统(distributed system)是建立在网络之上的软件系统。
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。
¶2、发展演变
¶单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。
缺点:
性能扩展比较难
协同开发问题
不利于升级维护
¶垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
通过切分业务来实现各个模块独立部署,降低了维护和部署的难度,团队各司其职更易管理,性能扩展也更方便,更有针对性。
缺点:
公用模块无法重复利用,开发 ...