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 ...
《LLM Engineers Handbook》读书笔记
写在前面:
本文章是关于《LLM Engineer’s Handbook》的部分学习笔记。原书以开发一个名为 LLM Twin 的、模仿某人的写作风格的端到端项目,展示如何运用 LLM 工程和 MLOps ,构建一个最小可行产品以解决特定问题。其中,作者使用较多笔墨来介绍 LLM 在工程化中的开发方法论,对于原理的探讨着墨较少。所以在以原书为主线的前提下会添加部分对于原理的介绍,作为对于方法论的补充说明。碍于本人学识有限,部分叙述难免存在纰漏,请读者注意甄别。感谢所有学者、工程师的开源帮助。
参考资料:
《LLM Engineer’s Handbook》书中示例代码:[Github]( https://github.com/PacktPublishing/ LLM-Engineers-Handbook)
张奇、桂韬、郑锐、黄萱菁,大语言模型理论与实践,https://intro-llm.github.io/, 2023.
零、前言
大型语言模型(Large Language Model, LLM)工程领域迅速崛起,已成为人工智能和机器学习中的关键领域。随着 LLM 持续革新自然 ...
mlx_tutorial
写在前面:
本文章是关于 Apple 公司开源人工智能框架 MLX 的部分学习笔记。碍于本人学识有限,部分叙述难免存在纰漏,请读者注意甄别。
参考资料:
代码托管仓库:GitHub: ml-explore/mlx
开发文档
零、前言
MLX 是苹果公司于 2023 年 12 月发布的、专为 Apple Silicon 芯片(Arm 架构)设计的开源机器学习框架,旨在支持在 Apple Silicon 芯片上高效地训练和部署模型。
但是针对苹果此次发布的 MLX,呈现了两种截然不同的声音。
从头造轮子 or 重复造轮子?
正方观点:MLX 作为一个针对苹果芯片优化的 PyTorch-style 神经网络架构,可能是苹果在 AI 开源领域,迄今为止最重要的举措。
反方观点:苹果本可以跟 PyTorch 合作,发布针对苹果芯片优化的 PyTorch 后端。而如今开发者不得不重复工作,同时支持 MLX 和 PyTorch。
类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 ...