自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux 系统启动过程详解

Linux 的启动过程就像一辆老式汽车从熄火到轰鸣前进:从“钥匙转动”(开机)到“引擎点火”(内核加载),再到“油门踩下”(系统就绪)。整个过程高效、有序,通常只需几秒到几十秒。Linux的启动不是魔法,而是模块化的设计:每个环节独立、可调试。理解这个过程,能帮助我们更好地诊断启动问题、优化系统性能,甚至在定制系统时游刃有余。这意味着如果遇到“开机黑屏”或“引导失败”,我们能快速定位问题。比如,优化 GRUB 可以加速 20% 的启动时间;精简 systemd 服务,能让服务器停止运行不必要的服务。Lin

2025-10-10 16:44:10 819

原创 消息队列Apache Kafka教程

Apache Kafka 是一个开源的分布式流处理平台,最初由 LinkedIn 开发,后来捐赠给 Apache 软件基金会。它被设计用来处理大规模、实时的消息流,常用于构建数据管道、流处理应用和事件驱动架构。简单来说,Kafka 就像一个超级高效的“消息快递员”,可以在不同的系统之间快速、安全地传递大量数据。

2025-09-26 13:28:38 1390

原创 Go语言线程安全数据结构总结

在 Go 中,线程安全的数据结构主要用于在多个 goroutine 之间安全地共享和操作数据。Go 倡导通过 goroutine + channel 进行并发控制,但在一些场景下,需要锁或原子操作来保证数据结构的安全性。标准库工具sync.Mutexsync.Mapsync.Once、channel。自定义封装:用锁包装切片、队列、栈等结构。不要通过共享内存来通信,而是通过通信来共享内存。即优先使用 channel + goroutine 模型,只有在必要时再使用锁或原子操作,保持代码简洁与高效。

2025-09-24 00:15:08 468

原创 Go 语言 select 语句详解(并发编程)

在 Go 中,select语句允许一个 goroutine 同时监听多个通道操作(如发送或接收)。它会阻塞,直到至少一个 case 准备好执行;如果多个 case 同时就绪,则随机选择一个。这使得并发代码更简洁,避免了轮询通道的低效。select是 Go 并发编程的灵魂,能让你的代码更安全、高效。它不会执行所有 case,仅选择一个就绪的 case(或default),多 case 就绪时随机选择。要处理多个通道,需用循环。掌握select,你就能轻松处理多 goroutine 通信、超时和多路复用。

2025-09-22 01:17:54 794

原创 计算机系统性能指标综述

以下是计算机系统中关键性能指标的定义及量化说明,基于典型场景(如服务器、数据库、分布式系统)。正确性:通过错误率(例如0.02%)和测试覆盖率(例如95%)量化。一致性:通过一致性延迟(例如150毫秒)和冲突率(例如0.005%)量化。可靠性:通过MTBF(例如20,000小时)、故障率(例如0.2%)和可用性(例如99.999%)量化。可用性:通过可用性百分比(例如99.95%)和宕机时间(例如4.38小时/年)量化。性能:通过吞吐量(例如3000次/秒)和延迟(例如12毫秒)量化。可扩展性。

2025-09-20 11:26:19 1166

原创 线程安全说明

线程安全(Thread Safety)是指在多线程编程中,一个对象、方法或数据结构在被多个线程同时访问时,能够保持其正确性、一致性和可靠性,不会出现数据损坏、状态不一致或未定义行为的情况。

2025-09-20 11:05:05 316

原创 Git最佳实践(Golang示例项目)

假设我们开发一个简单的Go命令行程序,输出“Hello, World!”。以下是通过这个项目展示的Git最佳实践,涵盖初始化、分支管理、提交规范、代码审查、版本控制和紧急修复。实践:初始化Git仓库,配置以排除无关文件。示例:初始化Go模块:创建:创建文件:提交初始文件:2. 分支管理(简化的主干开发模型)实践:采用简化的分支策略,确保代码库整洁。示例:操作步骤:为新功能(添加用户输入问候语)创建功能分支:修改,添加中文注释:提交代码:合并回:删除功能分支:功

2025-09-19 11:08:58 784

原创 Golang的函数类型

函数类型本质上描述了函数的签名,包括参数类型列表和返回值类型列表。type 函数类型名 func(参数类型列表) 返回值类型列表参数类型列表:指定函数接受的参数及其类型,可以为空(如func()返回值类型列表:指定函数返回的值及其类型,可以为空(表示无返回值)、单个类型或多个类型(如如果函数无返回值,语法可以简化为func(参数类型列表)函数类型在 Go 中是强类型的:两个签名相同的函数类型,如果名称不同,则被视为不同类型。

2025-09-15 15:33:32 1015

原创 Golang引用类型

引用类型:Go 的引用类型(切片、映射、通道、接口、函数)存储底层数据的地址,多个变量共享数据,修改会相互影响。特性:值传递但共享底层数据,需初始化,通道并发安全,其他需同步。使用场景:动态数据结构、并发通信、动态类型处理。注意事项:检查nil、管理并发、注意切片扩容。

2025-09-15 10:14:45 741

原创 Golang指针用法

修改函数参数:使用指针传递(如swap性能优化:传递大结构体或数组的指针,减少复制。动态分配:用new或返回指针创建对象。引用类型操作:切片、映射、通道的修改可能需要指针来改变整体结构。方法接收者:结构体方法常使用指针接收者以修改字段。指针存储内存地址,类型为*T,通过取地址,解引用。用途:修改函数参数、优化性能、动态分配内存。特点:Go 指针简单安全,无指针算术,垃圾回收管理内存。注意:检查nil指针、选择合适的接收者类型、避免过度使用导致复杂性。

2025-09-15 00:45:26 947

原创 一个程序快速学完golang语言(一天速成golang)

这个Go程序演示了25个关键字的用法,实现了一个并发任务处理系统。程序创建3个任务,通过工作协程并发处理,使用通道进行通信。主函数从结果通道收集输出,并展示循环状态控制(包括goto、fallthrough等特殊逻辑)。程序还实现了接口、结构体、延迟执行、类型定义等特性,最后打印系统运行状态。该示例涵盖了Go语言的核心语法,包括并发控制、流程跳转、类型系统等关键功能。

2025-09-12 11:22:02 373

原创 Golang语言的文件组织方式

模块定义项目范围,包含go.mod和多个包。包按目录组织,同一目录下的.go文件属于同一包。运行多文件程序时,推荐使用go run .或go build,避免仅运行,因为后者可能导致编译错误。项目结构根据类型(包、命令、混合、服务器)灵活调整,使用internal/和cmd/保持模块化。

2025-09-10 15:51:55 693

原创 Golang关键字说明与快速记忆

Golang语言很简洁,只有25个关键字。

2025-09-08 01:41:42 243

原创 编程语言的构成

编程语言是一个完整的开发体系,由核心语言、工具链、标准库、生态系统和运行环境组成。核心语言包括语法、数据类型、抽象机制和并发模型。工具链涵盖编译器、调试器、构建工具等开发辅助设施。标准库提供基础功能支持,而生态系统则包含第三方库、框架和社区资源。运行环境决定了语言在不同平台上的执行能力。这些要素共同构成编程语言的完整面貌,决定了其表达能力和应用场景。

2025-09-07 13:36:19 360

原创 Golang语言设计理念

Go语言由谷歌工程师Robert Griesemer、Rob Pike和Ken Thompson于2007年设计,旨在解决C++、Java等语言的复杂性问题。2009年正式开源发布,核心设计理念强调简单性(25个关键字)、高性能(接近C++速度)、内置并发(goroutines/channels)和可靠性(垃圾回收)。Go 1.0(2012年)确立向后兼容承诺,2019年引入模块管理,2022年支持泛型。凭借快速编译和高效并发特性,Go被广泛应用于云计算(Docker/Kubernetes)、微服务和Dev

2025-09-05 19:15:20 759

原创 Java文件的组织方式

Java程序通过包(Package)、类(Class)和目录结构进行组织。包类似于文件夹,使用package关键字声明,通常采用公司域名反写格式(如com.example.myapp)。物理目录必须与包名对应,例如src/com/example/myapp/Main.java。每个.java文件通常只包含一个与文件名相同的公有类(public class),但允许包含多个非公有类。这种结构避免了类名冲突,并提供了清晰的代码组织方式。

2025-08-27 11:48:25 278

原创 windows安装wsl,出现错误WslRegisterDistribution failed with error: 0x8007019e的解决方案

笔者直接从Microsoft Store 安装 WSL后,没有其他操作,直接打开wsl,结果出现。(4)最终成功进入WSL。然后根据需要配置用户名,登录密码,进入命令行界面。(1)windows 设置搜索框里面搜索。(3)重启后,打开终端,在终端中输入。(2)启用功能需要重启系统。两个选项,然后点击确定。,点击确定,启用对应功能。这两个选项都需要打开。

2024-08-22 15:35:23 3734

原创 Linux设备相关信息查询

Linux内存相关信息内存容量查询$ cat /proc/meminfo | grep MemTotalMemTotal: 98548932 kB内存相关信息$ cat /proc/meminfoMemTotal: 131738232 kBMemFree: 123788612 kBMemAvailable: 124824304 kBBuffers: 190904 kBCached: 1597672 kBSw

2021-10-24 17:06:24 2664

原创 Git与Github常用操作整理

概要Git是一种专为处理文本文件而设计的版本控制系统。允许你通过提交对一个系统(或一组)文件的历史进行注释。这些提交便是在给定时间点对系统做出的差异“快照”。单机上的文件版本管理可以只用git,但是用多台机器来管理同一个文件的时候,就需要用到github了。GitHub是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHubGithub 获取 Git 中的提交历史,并存储在服务器上,因此可以从任一一台电脑访问它。我们可以在本机推送(push

2021-03-12 10:37:30 457 1

原创 Linux下文件夹大小和磁盘使用率查询

硬盘容量占用查询df命令(英文意思指disk free):统计磁盘整体情况,包括磁盘大小,已使用的容量和未使用的情况。df命令格式:df [选项]... [FILE]...一般使用df -lh$ df -lh文件系统 容量 已用 可用 已用% 挂载点devtmpfs 47G 0 47G 0% /devtmpfs 47G 4.0K 47G 1% /dev/shmtmpfs 47

2021-01-19 20:33:37 1044

原创 超级计算机榜单说明:TOP500、Green500、Graph500、IO500

TOP500TOP500始于1993年,由国际组织“TOP500”编制,每半年发布一次,是给全球已安装的超级计算机排名的知名榜单。Graph500评估超算系统遍历超大规模数据结构的能力,目前榜单分三个类别,BFS,SSSP,GREEN。Green500每年6月和11月各公布一次Green500榜单。Green500是节能超算排行榜单,榜单不以性能论英雄,而是以能效排名——每瓦性能比。下图是2020年11月的榜单:IO500自2017年11月起,每年在美国的SC和德国的ISC大会上各公布

2021-01-19 17:05:58 5773

原创 Linux存储性能观测——free命令详解

概要free命令报告系统中已经使用和未使用的内存容量信息。包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。这些信息是通过解析/ proc / meminfo收集的。安装方式#free属于procps软件包。#Ubuntuapt-get install procps#CentOSyum install procps-ngprocps软件包包含监视和终止系统进程的程序。它通过/proc目录搜集进程的信息.包含的程序: free, kill, pgrep, pki

2020-12-23 22:40:28 837

原创 source insight使用方法整理

阅读代码它可以将一个源码目录变成source insight工程,然后直接操作阅读源码:新建工程—>命名工程—>设置源码目录—>阅读新建工程之后是add and remove files这个窗口,一般add tree就把文件夹里的所有文件都加载进这个工程。那么Load文件完成之后,close对话框。当然还可以加不同路径的代码进入你的工程。功能支持语法高亮、符号跳转,还支持函数调用关系图显示。除支持完善的自定义功能外,几乎所有配置都能作个性化配置。有一套功能强大的宏语言(Mac

2020-12-18 16:54:19 1481 2

原创 Makefile文件编写快速入门

前言未完待续。。。开始MakefileMakefile是什么?:分布在Linux程序的源代码中,定义Linux 程序的编译规则,是一种程序构建工具。用户可以在 Makefile 中定义make的行为,来确定模块需要如何编译或重新编译在一起。Makefile有什么作用呢?:Makefile可以定义整个工程的编译规则。一个工程中的源文件不计其数,并且按类型、功能、模块分别放在若干个目录中,如果将这些源文件编译成可执行文件,需要处理非常复杂的文件依赖。而在makefile中,可以定义一系列的规则来指定,哪

2020-12-11 23:02:22 1010 1

原创 Shell 脚本编写快速入门

基本概念shell脚本(shell script):为shell编写的脚本程序, 与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件.Shell既是一种命令语言,又是一种程序设计语言(也就是shell脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。shell 脚本范例创建一个hello_world.sh的范例,内容如下:#!/bin/

2020-11-16 11:01:41 642

原创 Linux 文件I/O编程

基础概念I/O高级I/O:带缓冲区的I/O,比如ANSI C提供的标准I/O库,比如fopen,fread,fwrite等,会在系统调用前采用一定的策略。优点:比不带缓冲的I/O安全缺点:比不带缓冲的I/O速度慢低级I/O:不带缓冲区的I/O,是Linux提供的系统调用,比如函数open,read,write等。优点:速度快。文件描述符文件描述符:是一个非负整数。在linux中,所有对设备或者文件的操作都是通过文件描述符进行的。每当打开或者创建一个文件的时候,内核向进程返回一个文件

2020-11-12 16:18:29 247

原创 Linux性能观测——dstat命令详解

$ dstatYou did not select any stats, using -cdngy by default.----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--usr sys idl wai hiq siq| read writ| recv send| in out | int csw 3 0 96 0 0 0| 436k 879k| 0 0 |

2020-11-04 10:31:36 4330 1

原创 Linux存储性能观测——iostat命令详解

iostat(input/output statistics)报告中央处理器(CPU)统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输入/输出统计信息。特点不能单独对某个进程进行分析,仅能够分析系统的整体情况安装方式:#iostat属于sysstat软件包。yum install sysstat iostat常用命令格式:iostat [参数] [时间] [次数]参数说明:-c 显示CPU使用情况-d 显示磁盘使用情况-k 以K为单位显示-m 以M为单位显

2020-11-03 23:53:40 1305

原创 Linux存储性能观测——vmstat命令详解

功能:获得有关进程、虚存、页面交换空间及 CPU活动的信息特点:可以看到整个系统的负载情况,而不是单独看某个进程的负载情况。$ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 5 0

2020-11-03 16:34:02 746

原创 Linux进程与线程状态监测

线程当一个程序内有多个线程被拆分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间、打开的文件),以使拆分开销最小化,并避免大量高成本的IPC(进程间通信)通道。线程与进程之间的ID在Linux中,程序中创建的线程(也称为轻量级进程,LWP)会具有和程序的PID相同的“线程组ID”。然后,各个线程会获得其自身的线程ID(TID)。对于Linux内核调度器而言,线程不过是恰好共享特定资源的标准的进程而已。问题我的程序在其内部创建并执行了多个线程,我怎样才能在该程序创建线程后

2020-10-28 21:54:51 3081

原创 Linux后台运行程序的方法总结

概述使用场景:用终端软件登录远程Linux服务器时,假设执行的shell命令耗时特别长,这时候因为各种因素导致掉线(网络不稳定)就会导致之前的执行前功尽弃,运行的命令进程会被系统kill,我们想要的结果也丢失了。如果想让终端关闭和掉线的情况下,命令和相关进程也能在远程Linux主机上执行,我们需要以脱离终端的方式在后台运行这个shell命令。主要有三种方法:命令后加&作用:让命令在后台处于运行状态 。缺点:退出终端就会退出执行。nohup:可以记录发生日志。tmux:可

2020-10-28 16:15:14 2470

原创 Linux管理员常用命令

查看linux中所有用户的三种方式查看/etc/passwd 文件,getent命令,compgen命令cat /etc/passwd getent passwd compgen -u // bash 的内置命令,它将显示所有可用的命令,别名和函数。说明/etc/passwd文件:包含每个用户基本信息的文本文件。当我们在系统中创建一个用户,新用户的详细信息就会被添加到这个文件中。getent命令显示Name Service Switch 库支持的数据库中的条目。这些库的配置文件为/etc/

2020-10-07 16:40:21 557

原创 C++构造函数总结

构造函数作用:构造函数的工作是保证每个对象的数据成员具有合适的初始值创建一个类类型的对象时,编译器会自动使用一个构造函数来初始化该对象。形式:构造函数是一个特殊的、与类同名的成员函数,用于给每个数据成员设置适当的初始值。特点:构造函数是特殊的成员函数,只要创建类类型的新对象,都要执行构造函数。构造函数自动执行,只要创建该类型的一个对象,编译器就运行一个构造函数。构造函数不能声明为 const构造函数可以被重载。如何定义构造函数构造函数的名字与类的名字相同,并且不能

2020-10-02 17:20:36 605

原创 Linux下shell美化教程—oh my zsh

zsh安装先安装zsh# sudo apt install zsh然后运行下面的命令,下载一些zsh工具主题插件sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"效果如下# sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"Cloning Oh My Zsh

2020-09-27 20:43:27 1667 1

原创 进程和线程最通俗的形象比喻

前言让我们建立一些形象的比喻来讨论线程,进程,时间片以及操作系统中奇妙的“调度概念”线程和进程如何工作一个房子的过程让我们以一个日常的日常对象(一所房屋)为基础来进行进程程和线程的类比占用者为线程居住在房子里的人是活动的对象,他们是使用各种房间,看电视,做饭,洗澡的人。我们很快就会看到线程的行为。进程和线程就像一间房屋占用不动产一样,过程也要占用内存。正如房屋的占用者可以随意进入他们想要的任何房间一样,进程的线程都可以对该内存进行通用访问。如果某个线程分配了某些东西(妈妈出去玩游戏),那么

2020-08-28 21:50:26 1946 1

转载 Linux内核的整体架构

1. 前言本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。注:本文和其它的“Linux内核分析”文章都基于如下约定:a) 内核版本为Linux 3.10.29(该版本是一个long term的版本,会被Linux社区持续维护至少2年),可以从下面的链接获取:https://www.kernel.org/pub/linux/kernel/v3.x.

2020-07-13 23:34:35 218

原创 C++标准库常用算法

常用标准库算法:find(beg, end, val); 根据equal操作符,循序查找[first, last)内所有的元素,找出第一个匹配“等同条件者”。如果找到,就返回一个指向匹配元素的迭代器,否者返回迭代器end()。equal(beg1, end1, beg2); 确定两个序列是否相等。如果输入范围中的每个元素都与从beg2开始的序列中的对应元素相等,就返回true;min(val1, val2); 返回两个数中的大数max(val1, val2); 返回两个数中的小数min_e

2020-06-19 23:48:12 1408

原创 动态规划-剪绳子问题

题目给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m-1]。请问k[0]×k[1]×…×k[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。题目解析首先题目描述并不是很清楚,我看了一下,比较准确的描述是,绳子分成m个部分,也就是m段。默认的条件是绳子不能不被分割,也就是至少被分为两个部分m、n都是整数,n>1并且m&gt

2020-05-31 23:01:52 3003

原创 多线程编程之交替打印(leetcode 1115)

题目我们提供一个类:class FooBar { public void foo() { for (int i = 0; i < n; i++) { print("foo"); } } public void bar() { for (int i = 0; i < n; i++) { print("bar"); } }}两个不同的线程将会共用一个 FooBar 实例。其中一个线程将会调用 foo() 方法,另一个

2020-05-26 17:10:27 438

原创 多线程编程之按序打印(leetcode 1114)

题目描述提供了一个类:public class Foo { public void one() { print("one"); } public void two() { print("two"); } public void three() { print("three"); }}三个不同的线程将会共用一个 Foo 实例。线程 A 将会调用 one() 方法线程 B 将会调用 two() 方法线程 C 将会调用 three() 方法请设计修改

2020-05-26 16:35:10 439

计算机网络 应用层-思维导图-工程师小星星

计算机网络教程自顶向下方法—应用层—思维导图笔记(包含xmind,freemind格式) 《计算机网络教程:自顶向下方法》是计算机领域知名作者Forouzan按照目前计算机网络教学比较流行的自顶向下方法编写的一部重要教材。书籍写得非常棒,笔者阅读的时候做了一些思维导图笔记,在此分享给大家。

2020-12-11

空空如也

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

TA关注的人

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