Java基础
1. 说⼀下final关键字和final的4种⽤法? 常见的四种用法:
① 可以用来修饰一个类 ② 可以用来修饰一个方法 ③ 可以用来修饰一个局部变量 ④ 可以用来修饰一个成员变量
2. public 、protected和private区别?private能被继承吗? 1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用
2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。
3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。
3.switch 和 if 的区别 能用switch语句实现的就一定可以使用if来实现,但是反之不一定,如果是区间范围就采用if,如果是等值判断请使用switch
4. 讲下多态? 引用多态和方法多态
引用多态就是指:(1)父类的引用可以指向本类的对象;(2)父类的引用也可以指向子类的对象。
方法多态就是指:即我们创建了父类的引用指向子类的对象,调用的方法就是子类中重写的方法或着继承的方法。
5.重写和重载区别? 重载:在同一个类中,允许存在一个以上的同名方法,只要同名的参数个数或者参数类型不同即可。 总结:"两同一不同":同一个类、相同方法名
重写:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作
6.如何实现⼀个不可变类 使用final关键字修饰类,让类中属性变成private类;
7. 怎么判断两个整数是否相等 相等即可使用equals或==判断,如果是基本数据类型,==会直接比较他们的值,如果是引用数据类型,==会比较他们的地址,equals也是使用==来判断的,不过一些类会对equals进行重写,让他去比较引用数据类型的值(如String)。
8.String类可不可以继承
不能,因为String类是被final修饰的类型,final类是不能被继承的,String类是不可变类型(Immutable)类。
9. equals和hashcode的区别 equals():反应的是对象或变量具体的值,及两个对象包含的具体的值(可能是对象的引用,也可能是值类型的值)
hashcode():计算两个对象的哈希值,并返回哈希码,也叫散列函数。根据Object的hashcode()方法计算出的哈希值是根据其地址进行计算的, 其返回值是唯一的,但重写的hashcode()方法就不一定了,有可能会出现哈希冲突。
之所以出现hashcode()方法来比较两个对象,是因为hashcode()比equals()的速度快很多。
equals()相同,hashcode()一定相同;hashcode()相同,equals()不一定相同。
11. int和Integer的区别?为什么要有包装类?
Integer 是 int 的包装类,它们的区别主要体现在 5 个方面:数据类型不同、默认值不同、内存中存储的方式不同、实例化方式不同以及变量的比较方式不同。包装类的存在解决了基本数据类型无法做到的事情泛型类型参数、序列化、类型转换、高频区间数据缓存等问题。
12. ==和equals⽐较的区别 如果是基本数据类型,==会直接比较他们的值,如果是引用数据类型,==会比较他们的地址,equals也是使用==来判断的,不过一些类会对equals进行重写,让他去比较引用数据类型的值(如String)。
13.抽象类和接⼝的区别 一个类可以实现多个接口,但只能继承一个类。
抽象类中可以有具体的方法,接口在jdk1.8之前只能有抽象方法。
接口没有构造方法,抽象类可以有构造方法。
抽象类中可以有变量,接口中只能有静态常量。
14. Object类的原⽣⽅法有哪些? 1、实现对象的浅复制的clone方法; 2、获得运行时类型的getclass方法; 3、释放资源的finalize方法; 4、用于哈希查找的hashCode方法; 5、使当前线程等待该对象的锁wait方法。
15.java泛型
保证类型安全,消除强制类型转换,避免了不必要的装箱、拆箱,提高了性能。
16. String/StringBuffer/StringBuilder 区别
String不可改变,另外两个可以改变。
StringBuffer是线程安全的,效率相对较低,不需要考虑线程安全的时候一般使用StringBuilder。
17. java的static关键字有什么⽤
被static关键字修饰的方法或者变量成为了类方法或类变量,生命周期与类相同,不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
18. Java基本类型与引⽤类型的区别
基本数据类型变量的具体内容是存储在栈中的。只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址
传递参数时基本数据类型传递的是值,而引用数据类型传递的是地址。
19. super和this的区别
1、代表的对象不同;this:本身调用这个对象;super:调用的是父类对象。
2、前提不同;this:没有继承也可以使用;super:只能在继承条件下才可以使用。
3、构造方法;this() 本类的构造;super() 父类的构造。
20. ArrayList LinkedList区别
ArrayList是基于数组的,LinkedList是基于链表的。
ArrayList随机访问效率更高,LinkedList对中间进行增加和删除是更有效率。
LinkedList实现了Deque接口,可以用于创建队列之类的。
21. Set如何保证不重复?
1.根据对象的哈希值计算存储位置如果当前位置没有元素则直接存入如果当前位置有元素存在,则进入第二步。
2.当前元素的元素和已经存在的元素比较哈希值如果哈希值不同,则将当前元素进行存储如果哈希值相同,则进入第三步通过equals()方法比较两个元素的内容。
3.如果内容不相同,则将当前元素进行存储,如果内容相同,则不存储当前元素。
22. map熟悉吗?说⼀下,哈希冲突有哪些好的解决办法
1. 开放地址法
(1)线性探测再散列
放入元素,如果发生冲突,就往后找没有元素的位置;
(2)平方探测再散列
如果发生冲突,放到(冲突+1平方)的位置,如果还发生冲突,就放到(冲突-1平方)的位置;如果还有人就放到(冲突+2平方)的位置,以此类推,要是负数就倒序数。
2. 拉链法
如果发生冲突,就继续往前一个元素上链接,形成一个链表,Java的hashmap就是这种方法。
3. 再哈希
如果发生冲突,就用另一个方法计算hashcode,两次结果值不一样就不会发生hash冲突;
4. 建立公共溢出区
将哈希表分为基本表和溢出表两部分,与基本表发生冲突的元素,一律填入溢出表。
23. HashMap 有⼏种遍历的⽅法?推荐使⽤哪种?
1.EntrySet 遍历2.KeySet 遍历3.EntrySet 迭代器遍历4.KeySet 迭代器遍历5.Lambda 遍历6. Stream 单线程遍历7. Stream 多线程遍历 答案不固定。
24. hashmap的底层实现
hashmap基于数组、链表+红黑树。插入时通过哈希算法和与运算计算下标,若当前下标没有值,封装后直接插入,若有值则比较key,key不同使用尾插法插入链表中,相同替换value。尾插法时会遍历链表,若长度大于8则转变为红黑树。
25. hashmap扩容机制
hashmap在插入时会判断是否超过阈值,若超过则会扩容,长度为原数组的两倍,原来时链表的会直接计算下标之后放入新数组,原来是红黑树的计算时会统计下标的数量,8以上生成红黑树,以下是链表,结束后指向新数组,扩容就完成了。
26. hashmap和hashtable的区别
hashmap基于数组、链表+红黑树,hashtable基于数组、链表。
hashmap线程不安全,hashtable线程安全。
hashmap键值可以为空,hashtable不可以。
hashmap初始容量为16,hashtable初始容量为11。
hashmap扩容机制为当前容量翻倍,hashtable扩容机制为当前容量翻倍+1。
27. ConcurrentHashMap
他与hashmap的区别在于是线程安全的,在扩容时可以使用多线程,每个线程负责一部分。
28. Java反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性,这种功能叫做反射机制。
29. 内部类和静态类的本质区别是什么?
静态内部类不需要有指向外部类的引用;非静态内部类需要持有对外部类的引用
静态内部类可以有静态方法、属性;非静态内部类则不能有静态方法、属性
静态内部类只能访问外部类的静态成员,不能访问外部类的非静态成员;非静态内部类能够访问外部类的静态和非静态成员
静态内部类不依赖于外部类的实例,直接实例化内部类对象;非静态内部类通过外部类的对象实例生成内部类对象
30.BIO,AIO和NIO的区别?
BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
AIO:异步非阻塞式IO,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。
31.get 和post区别
post采用隐式传参,get采用显示传参。get传输数据有长度的限制,而post没有长度的限制。get常用来获取数据,post常用来提交数据。get请求会被浏览器主动缓存,post请求不会被浏览器主动缓存,可手动设置缓存。get请求只支持url编码,post请求支持多种编码方式
32.对象new过程
首先判断类是否被加载,若没有被加载,先进行类加载,加载、验证、准备、解析、初始化。
类加载完成后进行分配内存空间、实例变量赋默认值、设置对象头、执行初始化方法。
33.同步IO和异步IO的区别?
同步的意思是在要做的事情完成前一直等结果。
异步则是等结果出来后收到通知,不会一直等结果。
36. Linux中常⽤的命令有哪些? 1.Is:可以查看 linux 文件夹包含的文件,而且可以查看文件权限。
2.cd:切换目录。
3.pwd:用于查看当前工作目录路径。
4.mkdir:用于创建文件夹。
5.rm:删除一个目录中的一个或多个文件或删除目录。
6.rmdir:删除目录。
7.mv:移动文件、目录;修改文件名或目录名。
8.cp:复制,将多文件或目录复制至目标目录.
9.cat:文本输出命令。
10.more:阅读命令,与 cat 类似, more 会以一页一页的显示方便逐页阅读。
11.touch:可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的
文件。
12.head:用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
13.tail:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
14.date:指定格式显示时间。
15.grep:用于查找文件中是否包含指定字符串, 并显示对应的行。
16.ps:用于查看当前系统上运行的进程。
17.netstat:查看系统上的网络状态。
创建用户:useradd [用户名]
设置或修改密码:passwd [用户名]
切换用户:su [用户名]
37. Linux的软链接和硬链接
2.1 什么是软链接?
软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式。
软链接可以 跨文件系统 ,硬链接不可以。
软链接可以对目录进行链接。
在Linux下,可以很方便的通过 ln 命令创建对文件和对文件夹的软链接。
当原文件出现问题后,该链接不可用。
语法:ln -s [源文件或目录] [目标文件或目录]
3. 硬链接
硬链接,以文件副本的形式存在。但不占用实际空间。
不允许给目录创建硬链接。
硬链接只有在同一个文件系统中才能创建。
语法:ln [源文件] [目标文件]
删除源文件后,硬链接依然可用(相当于备份)。所以,硬连接的作用是允许一个文件拥有多个有效路径名,这样就可以建立硬连接到重要文件,以防止“误删”文件的功能。
当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。即:文件真正删除的条件是与之相关的所有硬连接文件均被删除。
#面经#常见的四种用法:
① 可以用来修饰一个类 ② 可以用来修饰一个方法 ③ 可以用来修饰一个局部变量 ④ 可以用来修饰一个成员变量
2. public 、protected和private区别?private能被继承吗?
1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。
3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。
3.switch 和 if 的区别
能用switch语句实现的就一定可以使用if来实现,但是反之不一定,如果是区间范围就采用if,如果是等值判断请使用switch
4. 讲下多态?
引用多态和方法多态 引用多态就是指:(1)父类的引用可以指向本类的对象;(2)父类的引用也可以指向子类的对象。
方法多态就是指:即我们创建了父类的引用指向子类的对象,调用的方法就是子类中重写的方法或着继承的方法。
5.重写和重载区别?
重载:在同一个类中,允许存在一个以上的同名方法,只要同名的参数个数或者参数类型不同即可。
总结:"两同一不同":同一个类、相同方法名
重写:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作
6.如何实现⼀个不可变类
使用final关键字修饰类,让类中属性变成private类;
7. 怎么判断两个整数是否相等
相等即可使用equals或==判断,如果是基本数据类型,==会直接比较他们的值,如果是引用数据类型,==会比较他们的地址,equals也是使用==来判断的,不过一些类会对equals进行重写,让他去比较引用数据类型的值(如String)。 8.String类可不可以继承
9. equals和hashcode的区别
equals():反应的是对象或变量具体的值,及两个对象包含的具体的值(可能是对象的引用,也可能是值类型的值) hashcode():计算两个对象的哈希值,并返回哈希码,也叫散列函数。根据Object的hashcode()方法计算出的哈希值是根据其地址进行计算的,
其返回值是唯一的,但重写的hashcode()方法就不一定了,有可能会出现哈希冲突。
之所以出现hashcode()方法来比较两个对象,是因为hashcode()比equals()的速度快很多。
equals()相同,hashcode()一定相同;hashcode()相同,equals()不一定相同。
11. int和Integer的区别?为什么要有包装类?
Integer 是 int 的包装类,它们的区别主要体现在 5 个方面:数据类型不同、默认值不同、内存中存储的方式不同、实例化方式不同以及变量的比较方式不同。包装类的存在解决了基本数据类型无法做到的事情泛型类型参数、序列化、类型转换、高频区间数据缓存等问题。
12. ==和equals⽐较的区别
如果是基本数据类型,==会直接比较他们的值,如果是引用数据类型,==会比较他们的地址,equals也是使用==来判断的,不过一些类会对equals进行重写,让他去比较引用数据类型的值(如String)。 13.抽象类和接⼝的区别
一个类可以实现多个接口,但只能继承一个类。
抽象类中可以有具体的方法,接口在jdk1.8之前只能有抽象方法。
接口没有构造方法,抽象类可以有构造方法。
抽象类中可以有变量,接口中只能有静态常量。
14. Object类的原⽣⽅法有哪些?
1、实现对象的浅复制的clone方法; 2、获得运行时类型的getclass方法;
3、释放资源的finalize方法;
4、用于哈希查找的hashCode方法;
5、使当前线程等待该对象的锁wait方法。
15.java泛型
保证类型安全,消除强制类型转换,避免了不必要的装箱、拆箱,提高了性能。
16. String/StringBuffer/StringBuilder 区别
String不可改变,另外两个可以改变。
StringBuffer是线程安全的,效率相对较低,不需要考虑线程安全的时候一般使用StringBuilder。
17. java的static关键字有什么⽤
被static关键字修饰的方法或者变量成为了类方法或类变量,生命周期与类相同,不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
被static关键字修饰的方法或者变量成为了类方法或类变量,生命周期与类相同,不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
18. Java基本类型与引⽤类型的区别
基本数据类型变量的具体内容是存储在栈中的。只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址
基本数据类型变量的具体内容是存储在栈中的。只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址
传递参数时基本数据类型传递的是值,而引用数据类型传递的是地址。
19. super和this的区别
1、代表的对象不同;this:本身调用这个对象;super:调用的是父类对象。
2、前提不同;this:没有继承也可以使用;super:只能在继承条件下才可以使用。
3、构造方法;this() 本类的构造;super() 父类的构造。
20. ArrayList LinkedList区别
ArrayList是基于数组的,LinkedList是基于链表的。
ArrayList随机访问效率更高,LinkedList对中间进行增加和删除是更有效率。
LinkedList实现了Deque接口,可以用于创建队列之类的。
ArrayList是基于数组的,LinkedList是基于链表的。
ArrayList随机访问效率更高,LinkedList对中间进行增加和删除是更有效率。
LinkedList实现了Deque接口,可以用于创建队列之类的。
21. Set如何保证不重复?
1.根据对象的哈希值计算存储位置如果当前位置没有元素则直接存入如果当前位置有元素存在,则进入第二步。
2.当前元素的元素和已经存在的元素比较哈希值如果哈希值不同,则将当前元素进行存储如果哈希值相同,则进入第三步通过equals()方法比较两个元素的内容。
3.如果内容不相同,则将当前元素进行存储,如果内容相同,则不存储当前元素。
22. map熟悉吗?说⼀下,哈希冲突有哪些好的解决办法
1. 开放地址法
(1)线性探测再散列
放入元素,如果发生冲突,就往后找没有元素的位置;
(2)平方探测再散列
如果发生冲突,放到(冲突+1平方)的位置,如果还发生冲突,就放到(冲突-1平方)的位置;如果还有人就放到(冲突+2平方)的位置,以此类推,要是负数就倒序数。
2. 拉链法
如果发生冲突,就继续往前一个元素上链接,形成一个链表,Java的hashmap就是这种方法。
3. 再哈希
如果发生冲突,就用另一个方法计算hashcode,两次结果值不一样就不会发生hash冲突;
4. 建立公共溢出区
将哈希表分为基本表和溢出表两部分,与基本表发生冲突的元素,一律填入溢出表。
1.根据对象的哈希值计算存储位置如果当前位置没有元素则直接存入如果当前位置有元素存在,则进入第二步。
2.当前元素的元素和已经存在的元素比较哈希值如果哈希值不同,则将当前元素进行存储如果哈希值相同,则进入第三步通过equals()方法比较两个元素的内容。
3.如果内容不相同,则将当前元素进行存储,如果内容相同,则不存储当前元素。
22. map熟悉吗?说⼀下,哈希冲突有哪些好的解决办法
1. 开放地址法
(1)线性探测再散列
放入元素,如果发生冲突,就往后找没有元素的位置;
(2)平方探测再散列
如果发生冲突,放到(冲突+1平方)的位置,如果还发生冲突,就放到(冲突-1平方)的位置;如果还有人就放到(冲突+2平方)的位置,以此类推,要是负数就倒序数。
2. 拉链法
如果发生冲突,就继续往前一个元素上链接,形成一个链表,Java的hashmap就是这种方法。
3. 再哈希
如果发生冲突,就用另一个方法计算hashcode,两次结果值不一样就不会发生hash冲突;
4. 建立公共溢出区
将哈希表分为基本表和溢出表两部分,与基本表发生冲突的元素,一律填入溢出表。
23. HashMap 有⼏种遍历的⽅法?推荐使⽤哪种?
1.EntrySet 遍历2.KeySet 遍历3.EntrySet 迭代器遍历4.KeySet 迭代器遍历5.Lambda 遍历6. Stream 单线程遍历7. Stream 多线程遍历 答案不固定。
24. hashmap的底层实现
hashmap基于数组、链表+红黑树。插入时通过哈希算法和与运算计算下标,若当前下标没有值,封装后直接插入,若有值则比较key,key不同使用尾插法插入链表中,相同替换value。尾插法时会遍历链表,若长度大于8则转变为红黑树。
25. hashmap扩容机制
hashmap在插入时会判断是否超过阈值,若超过则会扩容,长度为原数组的两倍,原来时链表的会直接计算下标之后放入新数组,原来是红黑树的计算时会统计下标的数量,8以上生成红黑树,以下是链表,结束后指向新数组,扩容就完成了。
26. hashmap和hashtable的区别
hashmap基于数组、链表+红黑树,hashtable基于数组、链表。
hashmap线程不安全,hashtable线程安全。
hashmap键值可以为空,hashtable不可以。
hashmap初始容量为16,hashtable初始容量为11。
hashmap扩容机制为当前容量翻倍,hashtable扩容机制为当前容量翻倍+1。
27. ConcurrentHashMap
他与hashmap的区别在于是线程安全的,在扩容时可以使用多线程,每个线程负责一部分。
28. Java反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性,这种功能叫做反射机制。
29. 内部类和静态类的本质区别是什么?
静态内部类不需要有指向外部类的引用;非静态内部类需要持有对外部类的引用
静态内部类可以有静态方法、属性;非静态内部类则不能有静态方法、属性
静态内部类只能访问外部类的静态成员,不能访问外部类的非静态成员;非静态内部类能够访问外部类的静态和非静态成员
静态内部类不依赖于外部类的实例,直接实例化内部类对象;非静态内部类通过外部类的对象实例生成内部类对象
30.BIO,AIO和NIO的区别?
BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
AIO:异步非阻塞式IO,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。
31.get 和post区别
post采用隐式传参,get采用显示传参。get传输数据有长度的限制,而post没有长度的限制。get常用来获取数据,post常用来提交数据。get请求会被浏览器主动缓存,post请求不会被浏览器主动缓存,可手动设置缓存。get请求只支持url编码,post请求支持多种编码方式
32.对象new过程
首先判断类是否被加载,若没有被加载,先进行类加载,加载、验证、准备、解析、初始化。
类加载完成后进行分配内存空间、实例变量赋默认值、设置对象头、执行初始化方法。
33.同步IO和异步IO的区别?
同步的意思是在要做的事情完成前一直等结果。
异步则是等结果出来后收到通知,不会一直等结果。
36. Linux中常⽤的命令有哪些?
1.Is:可以查看 linux 文件夹包含的文件,而且可以查看文件权限。2.cd:切换目录。
3.pwd:用于查看当前工作目录路径。
4.mkdir:用于创建文件夹。
5.rm:删除一个目录中的一个或多个文件或删除目录。
6.rmdir:删除目录。
7.mv:移动文件、目录;修改文件名或目录名。
8.cp:复制,将多文件或目录复制至目标目录.
9.cat:文本输出命令。
10.more:阅读命令,与 cat 类似, more 会以一页一页的显示方便逐页阅读。
11.touch:可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的
文件。
12.head:用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
13.tail:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
14.date:指定格式显示时间。
15.grep:用于查找文件中是否包含指定字符串, 并显示对应的行。
16.ps:用于查看当前系统上运行的进程。
17.netstat:查看系统上的网络状态。
创建用户:useradd [用户名]
设置或修改密码:passwd [用户名]
切换用户:su [用户名]
37. Linux的软链接和硬链接
2.1 什么是软链接?
软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式。
软链接可以 跨文件系统 ,硬链接不可以。
软链接可以对目录进行链接。
在Linux下,可以很方便的通过 ln 命令创建对文件和对文件夹的软链接。
当原文件出现问题后,该链接不可用。
语法:ln -s [源文件或目录] [目标文件或目录]
3. 硬链接
硬链接,以文件副本的形式存在。但不占用实际空间。
不允许给目录创建硬链接。
硬链接只有在同一个文件系统中才能创建。
语法:ln [源文件] [目标文件]
删除源文件后,硬链接依然可用(相当于备份)。所以,硬连接的作用是允许一个文件拥有多个有效路径名,这样就可以建立硬连接到重要文件,以防止“误删”文件的功能。
当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。即:文件真正删除的条件是与之相关的所有硬连接文件均被删除。
软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式。
软链接可以 跨文件系统 ,硬链接不可以。
软链接可以对目录进行链接。
在Linux下,可以很方便的通过 ln 命令创建对文件和对文件夹的软链接。
当原文件出现问题后,该链接不可用。
语法:ln -s [源文件或目录] [目标文件或目录]
3. 硬链接
硬链接,以文件副本的形式存在。但不占用实际空间。
不允许给目录创建硬链接。
硬链接只有在同一个文件系统中才能创建。
语法:ln [源文件] [目标文件]
删除源文件后,硬链接依然可用(相当于备份)。所以,硬连接的作用是允许一个文件拥有多个有效路径名,这样就可以建立硬连接到重要文件,以防止“误删”文件的功能。
当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。即:文件真正删除的条件是与之相关的所有硬连接文件均被删除。