Java 并发多线程编程 (JUC)
本文主要通过以下几个方面来系统的介绍 Java 并发多线程编程:
线程与进程
Java 线程
共享模型之 Monitor
共享模型之 JMM
共享模型之 无锁(乐观锁)
并发工具之 线程池
【参考资料】:
视频课程: BiliBili - 黑马程序员Java并发编程 JUC
笔记参考: Java并发 - Nyima’s Blog
注:本课程笔记基于 JDK8,采用 lsf4j 打印日志
1 线程与进程
1.1 进程
程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。
当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。
进程就可以视为程序的一个实例(程序是静态的,进程是动态的)。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器 等),也有的程序只能启动一个实例进程(例如网易云音乐、360 安全卫士等)
1.2 线程
一个进程可以分为一到多个线程。
一个线程就是一个指令流,将指令流中的一条条指令以 ...
Java 虚拟机 - JVM
本文主要通过以下几个方面来系统的介绍 JVM :
第一章:JVM 结构
第二章:JVM 内存结构
第三章:JVM 垃圾回收
第四章:类加载与字节码技术
第五章:JMM 内存模型
【参考资料】
视频课程:BiliBili - 黑马程序员 JVM 完整教程
The Java® Virtual Machine Specification - Java SE 8 Edition 官方文档
零、什么是 JVM?
JVM (Java Virtual Machine) 是 Java 程序的运行环境(Java 二进制字节码的运行环境)
好处:
可以提供一个跨平台的一致的运行环境, 达到平台无关性;
提供内存管理, 垃圾回收功能;
JRE = JVM + 基础类库
JDK = JVM + 基础类库 + 编译工具
一、JVM 结构
总体分为三大部分:
ClassLoader 类加载器:Java 代码编译成二进制后,会经过类加载器,这样才能加载到 JVM 中运行。
JVM 内存结构
执行引擎
二、JVM 内存结构
程序计数器 (Program Counter Register) ...
MySQL 相关笔记
MySQL 基础知识
1 数据库相关概念
名称
简称
作用
数据库
DataBase (DB)
存储数据的仓库,数据是有组织的进行存储
数据库操作系统
DataBase Management System (DBMS)
操纵和管理数据库的大型软件
SQL
Structured Query Language
操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一语言
常见的 DBMS:Oracle、MySQL、SQL Server 等。我们以 MySQL 作为课程的讲解的管理系统。
2 MySQL 数据库的数据模型
关系型数据库(RDBMS):建立在关系模型基础上,由多张相关联的二维表 Table 组成的数据库。如
MySQL 数据库的结构为:
MySQL客户端→DBMS→DB→表 (Table)→记录\text{MySQL客户端} \to \text{DBMS} \to \text{DB} \to \text{表 (Table)} \to \text{记录}
MySQL客户端→DBMS→DB→表 (Table)→记录
3 SQL 语句
3 ...
类UNIX常用设置
zsh 相关配置
1234567891011121314151617181920212223242526# 更新软件源sudo apt update && sudo apt upgrade -y# 安装 zsh git curlsudo apt install zsh git curl -y# GitHub proxygit config --global http.proxy http://127.0.0.1:7890chsh -s /bin/zshsh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"# 查看bash配置文件,并手动复制自定义配置cat ~/.bashrc# 编辑zsh配置文件,并粘贴自定义配置nano ~/.zshrc# 启动新的zsh配置source ~/.zshrcgit clone --depth=1 https://github.com/romkatv/powerlevel10k.gi ...
ROS 学习笔记
写在前面:
本文章是根据 ROS 官方文档以及其他相关资料翻译、整理而来。碍于本人学识有限,且非本专业人士,部分叙述难免存在纰漏,请读者注意甄别。
使用版本:
Linux 20.04 LTS
ROS Noetic (ROS1)
参考资料:
ROS 官方网站
ROS Wiki
ROS (NOETIC) 官方教程
ROS2 (HUMBLE) 官方文档
张虎(2022):《机器人SLAM导航:核心技术与实战》,北京:机械工业出版社。
0. 安装
ROS Noetic / linux 20.04
ROS Noetic 环境安装及配置:官方教程(EN)
Ubuntu 20.04.6 LTS 官方镜像文件
以下提供一个基于 Ubuntu20.04.6 系统版本的 ROS Noetic 安装脚本:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 ...
RabbitMQ 学习笔记
本文主要通过以下几个方面来系统的介绍 RabbitMQ 框架:
一、MQ 基本概念
二、RabbitMQ 的入门程序
三、RabbitMQ 的工作模式
四、Spring 整合 RabbitMQ
参考资料
哔哩哔哩:“黑马程序员”2020 版 RabbitMQ 全套教程
一、MQ 的基本概念
1 MQ 的概述
MQ 全称 Message Queue(消息队列),是在消息的传输过程中保存的容器。多用于分布式系统之间进行通信。
下图是两种分布式的数据通信方式:
直接通信(耦合)
graph
subgraph 直接调用
a[A系统] --"远程调用"--> b[B系统]
end
间接通信(解耦合)
graph LR
subgraph 消息生产者
a[A 系统]
end
subgraph 中间件
MQ[(MQ 消息队列)]
end
subgraph 消息消费者
b[B 系统]
end
a ---> MQ ---> b
2 MQ 的优劣势
【MQ 的优势】
应用解耦:提升容错性和可维护性。
graph LR
p[顾客]
...
Prolog_学习笔记
写在前面:
本文章旨在介绍一种有关逻辑推理的、描述性语言 Prolog,以及其在语义网络(Semantic Web)相关领域的应用。碍于本人学识有限,部分叙述难免存在纰漏,请读者注意甄别。
参考资料:
Learn Prolog The Hard Way
Prolog Tutorial - Tutorialspoint
SWI-Prolog RDF parser
SWI-Prolog Semantic Web Library 3.0
0 准备工作
搭建开发环境
主流的 Prolog 解释器有两个:
SWI Prolog : 点击此处跳转官方网站
GNU Prolog : 点击此处跳转官方网站
关于他们的区别,请参考如下两篇文章及其相关内容。总的来说,两者在执行效率和提供的资源库等方面存在着些许差异,但对于初学者影响甚微。
参考:
Quora : “What is the difference between SWI-Prolog and GNU prolog?”
Stack overflow : “atom_concat works on swi-prolog but ...
【笔记】Concepts for Automating Systems Integration (edtion 2003)
1. 背景
许多大型制造企业通过专注于最强大的产品市场和专业化能力,降低了内部成本并增加市场和灵活性,并将“非核心”职能(许多零部件和子组件的设计和生产、成品分销和备件)转移到供应商组织。随着产品部件的设计和生产越来越多地被分配给供应商,而且这个过程对客户需求的变化反应更加迅速,整合问题变成了在企业边界的系统(制造的信息现在通常分布在几十个甚至几百个独立公司的软件系统)之间建立信息流。
也就是说,由于在供应商组织间的多种系统间传递的信息流,是的决策层对于需求变化的感知不明显、也不及时。
在此背景下,美国国家标准与技术研究所(NIST)开始了一项研究项目:集成系统的自动化方法(AMIS)。旨在研究我们现在是否有技术来实现一些制造软件集成过程的自动化。项目的目标:
to identify integration activities that may benefit from automation (自动化对于集成有益)
to identify methods and technologies that may be brought to bear on automatio ...
【笔记】Modelling Control Systeme Using IEC61499
写在前面:
本文章是根据 Robert Lewis 所著《Modelling Control Systems Using IEC 61499》翻译、整理而来。碍于本人学识有限,同时并非本专业人士,部分叙述难免存在纰漏,请读者注意甄别。
参考资料:
《Modelling Control Systems Using IEC 61499》, Lewis R. W., ISBN:978-0-85296-796-6
IEC 61499-1:2012
IEC 61499-2:2012
IEC 61499-4:2013
1. 介绍
背景
目前为止,工业控制系统分成了两大阵营。一类是基于传统的分布式控制系统(DCS),另一类是基于可编程逻辑控制器(PLC)。
现行的DCS 主要应用于化工厂和炼油厂。它们是由少量的大型中央处理器构成,提供监控和数据采集。通过本地网络和部署在工厂中的众多控制器,仪表,传感器和执行部件相联。
系统可以具有分立的仪表和超级工作站。超级工作站由本地控制器和一串仪表构成。在一个DCS 中,许多的监控来自于一个或者多个中心处理器。工厂中的仪表提供本地的闭环控 ...