1.Linux基本指令
这张图片展示了一些常用的Linux命令及其用途,分为几个部分:
1.文件与目录操作
- ls:列出当前目录的文件和子目录,常用参数如
-l
(详细信息)、-a
(包括隐藏文件)。 - cd:切换目录,用于在文件系统中导航。
- mkdir:创建新目录。
- rm:删除文件或目录,用于删除文件时加上
-f
参数,删除目录时加上-r
参数。 - cp:复制文件或目录,
cp -r
用于递归复制目录。 - mv:移动或重命名文件或目录。
2.文件内容查看
- cat:查看文件内容,常用于查看小型文本文件。
- more / less:分页查看文件内容,
less
支持向上翻页,适合查看大文件。 - tail:查看文件末尾的若干行,
tail -f
用于实时监控文件内容变化,如日志文件。 - head:查看文件的开头几行。
3.系统管理
- ps:显示当前运行的进程列表,
ps aux
可以查看所有用户的进程。 - top / htop:实时查看系统中的进程状态和资源使用情况。
- kill / killall:终止进程,
kill
后跟进程ID,killall
后跟进程名。 - df:显示文件系统的磁盘使用情况。
- du:统计目录或文件所占用的磁盘空间,
du -h
以人类可读的格式显示。
4.网络配置与调试
- ping:测试与目标主机的连通性。
- ifconfig / ip:查看和配置网络接口信息,
ifconfig
已逐渐被ip
命令替代。 - netstat / ss:查看网络连接和端口使用情况,
ss
是netstat
的替代品,提供更详细的信息。 - curl / wget:发送HTTP请求或下载文件,
curl
更适合进行API调试,wget
则用于下载文件。
5.文件权限与用户管理
- chmod:修改文件或目录权限,常用模式如
chmod 755
。 - chown:更改文件或目录的所有者。
- useradd / userdel:添加或删除用户。
- passwd:修改用户密码。
这些命令是Linux系统管理和日常操作的基础,熟练掌握它们可以帮助你更高效地管理和维护Linux系统。
1.1 git常见指令
git查看历史提交记录的命令是什么?
git log - 查看历史提交记录。
git config --global user.name xxx:设置全局用户名,信息记录在~/.gitconfig文件中
git config --global user.email xxx@xxx.com:设置全局邮箱地址,信息记录在~/.gitconfig文件中
git init:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中
git add XX:将XX文件添加到暂存区
git add .:将所有待加入暂存区的文件加入暂存区
git rm --cached XX:将文件从仓库索引目录中删掉
git commit -m “给自己看的备注信息”:将暂存区的内容提交到当前分支
git status:查看仓库状态
git diff XX:查看XX文件相对于暂存区修改了哪些内容
git reflog:查看HEAD指针的移动历史(包括被回滚的版本)
git reset --hard HEAD^ 或 git reset --hard HEAD~:将代码库回滚到上一个版本
git reset --hard HEAD^^:往上回滚两次,以此类推
git reset --hard HEAD~100:往上回滚100个版本
git reset --hard 版本号:回滚到某一特定版本
git checkout — XX或git restore XX:将XX文件尚未加入暂存区的修改全部撤销
git remote add origin git@git.acwing.com:xxx/XXX.git:将本地仓库关联到远程仓库
git push -u (第一次需要-u以后不需要):将当前分支推送到远程仓库
git push origin branch_name:将本地的某个分支推送到远程仓库
git clone git@git.acwing.com:xxx/XXX.git:将远程仓库XXX下载到当前目录下
git checkout -b branch_name:创建并切换到branch_name这个分支
git branch:查看所有分支和当前所处分支
git checkout branch_name:切换到branch_name这个分支
git merge branch_name:将分支branch_name合并到当前分支上
git branch -d branch_name:删除本地仓库的branch_name分支
git branch branch_name:创建新分支
git push --set-upstream origin branch_name:设置本地的branch_name分支对应远程仓库的branch_name分支
git push -d origin branch_name:删除远程仓库的branch_name分支
git pull:将远程仓库的当前分支与本地仓库的当前分支合并
git pull origin branch_name:将远程仓库的branch_name分支与本地仓库的当前分支合并
git branch --set-upstream-to=origin/branch_name1 branch_name2:将远程的branch_name1分支与本地的branch_name2分支对应
git checkout -t origin/branch_name 将远程的branch_name分支拉取到本地
1.2.什么是 Docker?为什么要在项目中用到 Docker?
Docker是一种容器化技术,它允许开发者将应用程序及其所有依赖项打包到一个独立的容器中,包括操作系统、库、运行时环境等。这个容器可以在任何支持 Docker 的平台上运行,确保应用程序在不同环境中具有一致的行为。
在本项目中使用 Docker 主要是为了保证代码沙箱服务执行用户代码的安全性,防止影响宿主机。
docker常用指令
启动docker服务: systemctl start docker
- 镜像相关命令
docker images:列出本地所有的Docker镜像。
docker pull [OPTIONS] NAME[:TAG|@DIGEST]:从Docker Hub或其他注册表拉取一个镜像到本地。
docker build [OPTIONS] PATH | URL | -:使用Dockerfile构建一个新的镜像。
docker rmi [OPTIONS] IMAGE [IMAGE…]:移除一个或多个镜像。
docker image prune [OPTIONS]:删除所有未被使用的镜像,默认情况下只会删除悬空(dangling)镜像。 - 容器相关命令
docker ps [OPTIONS]:列出当前正在运行的容器。
docker ps -a:列出所有容器(包括停止的)。
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]:创建并启动一个容器。
docker start [OPTIONS] CONTAINER [CONTAINER…]:启动一个或多个已停止的容器。
docker stop [OPTIONS] CONTAINER [CONTAINER…]:停止一个或多个正在运行的容器。
docker restart [OPTIONS] CONTAINER [CONTAINER…]:重启一个或多个容器。
docker rm [OPTIONS] CONTAINER [CONTAINER…]:移除一个或多个容器。
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]:在运行中的容器内执行命令。 - 网络相关命令
docker network ls:列出所有Docker网络。
docker network create [OPTIONS] NETWORK:创建一个新的Docker网络。
docker network inspect [OPTIONS] NETWORK [NETWORK…]:查看指定网络的详细信息。
docker network connect [OPTIONS] NETWORK CONTAINER:将容器连接到一个网络。
docker network disconnect [OPTIONS] NETWORK CONTAINER:断开容器与网络的连接。 - 卷相关命令
docker volume ls:列出所有卷。
docker volume create [OPTIONS] [VOLUME]:创建一个新的卷。
docker volume inspect [OPTIONS] VOLUME [VOLUME…]:显示一个或多个卷的详细信息。
docker volume rm [OPTIONS] VOLUME [VOLUME…]:移除一个或多个卷。
docker volume prune [OPTIONS]:删除所有未被使用的卷。 - 其他命令
docker system df:显示Docker磁盘使用情况。
docker system prune [OPTIONS]:清理未使用的数据(包括容器、网络、镜像和构建缓存等)。
docker login [OPTIONS] [SERVER]:登录到Docker注册表。
docker logout [OPTIONS] [SERVER]:退出Docker注册表。
如何在 Docker 中实现数据卷(volume)的持久化存储?
2.用户态和内核态?
用户态(User Mode)和内核态(Kernel Mode)是操作系统中的两种运行模式,用于区分应用程序与操作系统内核的操作权限。
两者的区别在于权限级别:
用户态:应用程序在用户态下运行,权限较低,不能直接访问硬件或进行特权作。应用程序需要通过系统调用与内核进行通信,由内核代为执行敏感操作。用户态的优势是安全性高,即使程序出现问题也不会影响操作系统的稳定性。
内核态:内核态是操作系统内核运行的模式,县有最高的权眼,可以直接访问硬件资源和执行各种特权操作(如内存管理、进程调度)。当程序执行系统调用或硬件中断时,操作系统会将其切换到内核态。
java中的涉及用户态内核态转换的操作?
- I/O 操作
任何I/O操作(如文件读写、网络通信)都需要从用户态切换到内核态。这是因为这些操作需要访问硬件资源(比如硬盘或网卡),而这些资源只能通过操作系统内核提供的接口来访问。
文件I/O:当执行FileInputStream或FileOutputStream等类的操作时,底层会调用操作系统相关的API进行文件的读取和写入。
Socket通信:使用Socket类进行网络通信时,实际上是在利用操作系统的TCP/IP协议栈,这同样需要用户态到内核态的转换。 - 系统调用
系统调用是用户态程序请求操作系统服务的主要方式。例如,获取当前时间(System.currentTimeMillis())、创建线程(Thread.start())等,虽然看起来像是纯Java操作,但实际上它们最终都会触发系统调用来完成特定的功能。 - 线程调度
虽然Java提供了自己的并发模型和工具类(如ExecutorService, CountDownLatch等),但线程的实际调度是由操作系统完成的。这意味着每当一个新的线程被创建或者现有的线程状态发生变化时,都有可能发生用户态与内核态之间的转换。
3.Java写入文件到磁盘会经历哪些过程?
1.Java提供的I/O方法(起点)
通过 File0utputstream 或 Filewriter 类进行文件的写操作。
FileOutputStream fos = new FileOutputStream("example.txt");
String data = "Hello, World!";
fos.write(data.getBytes());
fos.flush();
2.JVM调用本地方法(中介)
当JVM执行这些写操作时命令时,实际会调用操作系统的写函数(write系统调用)
3.系统调用(cpu: dma,我给你放这了)
操作系统从用户态切换到内核态,CPU将要写的数据写入到内核缓冲区中,之后CPU通知DMA来将数据写入到磁盘
4.磁盘写入(磁盘:over)
4.CPU有几级缓存?
CPU缓存是一种位于处理器芯片内部或与之非常接近的高速存储器,用于减少处理器访问主内存所需的时间。它通过存储最近或频繁访问的数据副本来加速数据的读取速度,从而提高计算机的整体性能。
CPU缓存的层级
现代CPU通常包含多级缓存,最常见的是三级缓存结构(L1, L2, 和 L3),但某些设计中也可能存在四级缓存(包括L4)。每一级缓存都比下一级更快、更小且更靠近处理器核心。以下是典型的三级缓存架构:
-
L1 Cache (Level 1):这是最接近CPU核心的第一级缓存,也是最小和最快的缓存层。L1缓存通常分为两部分:指令缓存(用于存储即将执行的指令)和数据缓存(用于存储处理器可能需要的数据)。它的大小一般在几十KB左右。
-
L2 Cache (Level 2):第二级缓存比L1大但速度稍慢。每个核心通常都有自己的L2缓存。L2缓存的大小一般在几百KB到几MB之间。
-
L3 Cache (Level 3):第三级缓存是所有核心共享的缓存层,比L2更大但速度也相应减慢。L3缓存的大小可以从几MB到几十MB不等,在一些高端服务器CPU中甚至可以达到上百MB。
额外的缓存层级
- L4 Cache (Level 4):在某些高级别的处理器或特定应用场景下(如Intel的某些处理器型号),可能存在第四级缓存。L4缓存通常是eDRAM(嵌入式动态随机存取存储器)形式,主要用于进一步减少对主内存的访问延迟。
缓存的作用机制
CPU缓存是一种位于处理器芯片内部或与之非常接近的高速存储器,用于减少处理器访问主内存所需的时间。它通过存储最近或频繁访问的数据副本来加速数据的读取速度,从而提高计算机的整体性能。
CPU缓存的层级
现代CPU通常包含多级缓存,最常见的是三级缓存结构(L1, L2, 和 L3),但某些设计中也可能存在四级缓存(包括L4)。每一级缓存都比下一级更快、更小且更靠近处理器核心。以下是典型的三级缓存架构:
-
L1 Cache (Level 1):这是最接近CPU核心的第一级缓存,也是最小和最快的缓存层。L1缓存通常分为两部分:指令缓存(用于存储即将执行的指令)和数据缓存(用于存储处理器可能需要的数据)。它的大小一般在几十KB左右。
-
L2 Cache (Level 2):第二级缓存比L1大但速度稍慢。每个核心通常都有自己的L2缓存。L2缓存的大小一般在几百KB到几MB之间。
-
L3 Cache (Level 3):第三级缓存是所有核心共享的缓存层,比L2更大但速度也相应减慢。L3缓存的大小可以从几MB到几十MB不等,在一些高端服务器CPU中甚至可以达到上百MB。
额外的缓存层级
- L4 Cache (Level 4):在某些高级别的处理器或特定应用场景下(如Intel的某些处理器型号),可能存在第四级缓存。L4缓存通常是eDRAM(嵌入式动态随机存取存储器)形式,主要用于进一步减少对主内存的访问延迟。
缓存的作用机制
当CPU需要访问数据时,它首先检查L1缓存;如果未命中(即所需数据不在L1缓存中),则继续检查L2缓存,依此类推直到找到所需数据或者不得不从主内存获取。这种层次化的缓存结构有效地减少了平均访问时间,并提高了系统的整体效率。
总之,CPU缓存通过多层次的设计优化了数据访问的速度,使得处理器能够以更高的效率运行,特别是在处理重复性任务或访问模式可预测的应用场景中表现尤为突出。