Linux期末复习_
在Linux系统中,通常需要创建以下两个分区:
根分区(/):根分区是Linux系统中最重要的分区,它包含了系统的所有文件和目录。在安装Linux系统时,必须创建根分区。通常建议将根分区单独分配一个分区,以便在系统出现问题时更容易维护和恢复。
交换分区(swap):交换分区是Linux系统用于虚拟内存的一种机制,用于在物理内存不足时暂时存储内存中的数据。在安装Linux系统时,也需要创建交换分区。通常,交换分区的大小应该是物理内存大小的2倍,但是如果系统内存非常大(例如64GB或更多),则可以考虑将交换分区的大小设置为物理内存的1.5倍或1倍。
-r:删除用户时删除用户的主目录及其中所有内容,如果不加这个选项,只删除此用户账号在Red Hat公司发布的Linux版本中,用户密码通常存储在/etc/shadow文件中。要启用用户登录验证,管理员需要修改PAM脚本来指定身份验证模块和参数,以便将用户输入的密码与/etc/shadow中存储的密码进行比较。如果密码匹配,则用户可以成功登录系统,否则登录将被拒绝。因此,在Red Hat公司发布的Linux版本中,要使得用户登录验证,需要修 ...
Linux学习扎记:
磁盘:
磁盘物理结构:
硬盘结构(图文展示) - chuyaoxin - 博客园越是外面的柱面,线速度越大,读取信息越快
Linux中的/表示什么?
在Linux中,/表示根目录。根目录是Linux系统中的最顶层目录,所有其他目录和文件都是在根目录下的子目录或文件。在Linux中,根目录是所有文件系统的起点,包括硬盘、光驱、USB设备等等,因此所有文件和目录都是相对于根目录的路径来表示的。例如,/etc表示根目录下的etc目录,/home/user表示根目录下的home目录下的user目录,以此类推。在Linux中,根目录还包含其他特殊的目录,例如/dev、/proc、/sys等等,分别用于存储设备文件、进程信息、系统信息等等。
主引导扇区:
主引导扇区(Master Boot Record,MBR)是硬盘上的第一个扇区,大小为512字节。MBR中包含了硬盘的分区表以及引导程序。当计算机开机时,BIOS会读取MBR中的引导程序,将控制权交给引导程序执行。引导程序会根据分区表找到操作系统所在的分区,并将操作系统的引导程序加载到内存中,最终启动操作系统。 MBR分为三个部分:引导程 ...
lambda表达式
写在前面
lambda表达式是一个匿名函数。在Java 8中,它和函数式接口一起,共同构建了函数式编程的框架。
lambda表达式乍看像是匿名内部类的一种语法糖,但实际上,它们是两种本质不同的事物。匿名内部类本质是一个类,只是不需要程序员显示指定类名,编译器会自动为该类取名。而 lambda 表达式本质是一个函数,当然,编译器也会为它取名。在JVM层面,匿名内部类对应的是一个 class 文件,而 lambda 表达式对应的是它所在主类的一个私有方法。
lambda 表达式可以在函数体中引用外部的变量,从而实现了闭包。但 Java 对进入闭包的变量有 final 的限制,当然我们可以绕开这个限制。
lambda表达式与匿名内部类
lambda表达式可以用来简化某些匿名内部类(Anonymous Inner Classes)的写法,但仅限于对函数式接口的简写。
无参的函数式接口
以最常用的Runnable接口为例:
在Java 7中,如果需要新建一个线程,使用匿名内部类的写法是这样:
1234567891011public static void createThreadWithAnon ...
JMS
阅读目录#
什么是Java消息服务
为什么需要JMS
JMS的优势
JMS消息传送模型
接收消息
JMS编程接口
JMS消息结构
JMS使用示例
译文链接(做了部分修改~~)
什么是Java消息服务 #
Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建、发送、读取消息等,用于支持JAVA应用程序开发。在J2EE中,当两个应用程序使用JMS进行通信时,它们之间并不是直接相连的,而是通过一个共同的消息收发服务连接起来,可以达到解耦的效果,我们将会在接下来的教程中详细介绍。
为什么需要JMS#
在JAVA中,如果两个应用程序之间对各自都不了解,甚至这两个程序可能部署在不同的大洲上,那么它们之间如何发送消息呢?举个例子,一个应用程序A部署在印度,另一个应用程序部署在美国,然后每当A触发某件事后,B想从A获取一些更新信息。当然,也有可能不止一个B对A的更新信息感兴趣,可能会有N个类似B的应用程序想从A中获取更新的信息。
在这种情况下,JAVA提供了最佳的解决方案-JMS,完美解决了上面讨论的问题。
JMS同样适用于基于事件的应 ...
Jenkis入门:
背景
在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试;
前后端分离后,经常会修改接口,然后重新部署;这些情况都会涉及到频繁的打包部署;
手动打包常规步骤:
git commit + git push 提交代码
问一下同组小伙伴有没有要提交的代码
拉取代码并打包(war包,或者jar包)
上传到Linux服务器
查看当前程序是否在运行
关闭当前程序
启动新的jar包
观察日志看是否启动成功
如果有同事说,自己还有代码没有提交…再次重复1到8的步骤。
基于以上的痛点,有一种工具能够实现,将代码提交到git后就自动打包部署勒,答案是肯定的:现在这里主要介绍jenkins
当然除了Jenkins以外,也还有其他的工具可以实现自动化部署,如Hudson、gitlab CI/CD等。只是Jenkins相对来说,使用得更广泛。
文章结构:
Jenkins服务器搭建及基本配置
简介
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易 ...
Jenkins
工作必用的Jenkins
Jenkins是一个可扩展的自动化服务器,Jenkins 可以作为一个简单的 CI 服务器使用,或者成为任何项目的持续交付中心。
CI/CD
图0 CI/CD概念图
通过上面这张图可以分三部分来理解CI/CD
第一部分
先看看软件开发生命周期(SDLC)和CI/CD是如何结合的。软件开发一般包含几个重要的阶段:开发(Develop),测试(Test),部署(Deploy),维护(Maintain)。CI/CD可以将上述的流程流程串联一起来形成一个自动化的闭环,使得每次发布都更快更可靠。
第二部分
Continuous Integration(CI) 持续集成会不断的监听仓库并且执行构建测试确保最后合并到发布分支是没问题的。这样可以提早的发现问题,而不是累计了多次提交等合并到发布分支的时候才发现问题,这样回滚的时候会比较麻烦。
Continuous Delivery(CD) 持续交付主要是在部署方面的自动化,它也会运行一些测试,每次发布分支有更新CD就会把CI构建好的代码部署到生产上。
第三部分
总结一下整体的流程可以有如下步骤
开发者提交代码到 ...
Java集合框架中的高阶函数
写在前面
随着Java 8引入了函数式接口和lambda表达式,Java 8中的集合框架(Java Collections Framework, JCF)也增加相应的接口以适应函数式编程。
本文的目标是带领大家熟悉Java 8中集合框架新增的常用接口,让我们的代码更简洁、更高级。
Java 8中的集合框架
首先,和大家从整体上了解Java集合框架。
Java集合框架,主要是由两个根接口派生出来的:一个是 Collecton接口,用于存放单个元素;另一个是 Map 接口,主要用于存放键值对。
Java集合框架的接口继承结构如下图:
Java 8中,主要是Collection、List和Map三个接口新增了一些方法,部分常用的新增函数如下表所示:
接口名
Java8新加入的方法
Collection
forEach(), removeIf(), stream(), parallelStream()
List
replaceAll(), sort()
Map
forEach(), replaceAll(), compute(), computeIfAbsent(), ...
Java线程模型
什么是Java线程模型因为Java字节码运行在JVM中,而JVM运行在各个操作系统上,所以当JVM想要进行线程创建和回收的这种操作时,是必须要调用操作系统的相关接口,也就是说JVM线程与操作系统线程之间存在着某种映射关系。这两种不同维度的线程之间的规范和协议呢,就是线程模型。有人可能要问了那为什么需要这种线程模型?我们在开发时如果直接调用操作系统的接口来创建和回收线程不是更加直接吗,这个问题的答案呢其实很容易理解就像我们现在为什么不常用汇编语言来进行开发而是使用更加简单更加容易上手的高级语言一样,这是一种自下而上的抽象方式。JVM线程对不同操作系统的原生线程进行了高级抽象,可以使开发者一般情况下可以不用关注下层的细节,而只要专注上层的开发就行了。但是对于我们个人来说还是需要秉持知其然并知其所以然的态度,就要去理解这种抽象方式,这也有助于我们在将来自己进行一些设计的时候,能够调用前人的思想。线程模型种类在说线程模型之前,我们先看看操作系统内核线程是怎样的。我们以Linux系统为例,在Linux系统中Linux线程KLT(Kernel Level Thread)又被称为轻量级进程LWP(L ...
Java引用
为了更灵活的控制对象的生命周期,在JDK1.2之后,引用被划分为强引用、软引用、弱引用、虚引用四种类型,每种类型有不同的生命周期,它们不同的地方就在于垃圾回收器对待它们会使用不同的处理方式。
基础:
为什么需要回收:
每一个Java程序中的对象都会占用一定的计算机资源,最常见的,如:每个对象都会在堆空间上申请一定的内存空间。但是除了内存之外,对象还会占用其它资源,如文件句柄,端口,socket等等。当你创建一个对象的时候,必须保证它在销毁的时候会释放它占用的资源。否则程序将会在OOM中结束它的使命。
在Java中不需要程序员来管理内存的分配和释放,Java有自动进行内存管理的神器——垃圾回收器,垃圾回收器会自动回收那些不再使用的对象。
在Java中,不必像C或者C++那样显式去释放内存,不需要了解其中回收的细节,也不需要担心会将同一个对象释放两次而导致内存损坏。所有这些,垃圾回收器都自动帮你处理好了。你只需要保证那些不再被使用的对象的所有引用都已经被释放掉了,否则,你的程序就会像在C++中那样结束在内存泄漏中。
虽然垃圾回收器确实让Java中的内存管理比C、C++中的内存管理容易许 ...
Java内存模型
Java内存结构参考:Java虚拟机的内存结构
文章目录
一、简述Java内存模型
二、CPU和缓存一致性
三、Java内存模型的实现
一、简述Java内存模型
Java内存模型(Java Memory Model,JMM)是java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现java程序在各种不同的平台上都能达到内存访问的一致性。可以避免像c++等直接使用物理硬件和操作系统的内存模型在不同操作系统和硬件平台下表现不同,比如有些c/c++程序可能在windows平台运行正常,而在linux平台却运行有问题。ps:JVM中的堆啊、栈啊、方法区什么的,是Java虚拟机的内存结构。内存模型概念如上,千千万万不要再搞混淆了。
二、CPU和缓存一致性
计算机在执行程序的时候,每条指令都是在CPU中执行的,而执行的时候,又免不了要和数据打交道。而计算机上面的数据,是存放在主存当中的,也就是计算机的物理内存。随着CPU技术的发展,CPU的执行速度越来越快。而由于内存的技术并没有太大的变化,所以从内存中读取和写入数据的过程和C ...