面试题30天打卡-day13

简介: 面试题30天打卡-day13

1、Linux 中的硬链接和软连接是什么,二者有什么区别?

在Linux系统下,有两种链接文件,一种是硬链接(Hard Link),一种是软链接,也称为符号链接(Symbolic Link)。它们的区别如下:


硬链接:


硬链接通过文件系统中的inode节点进行链接,因此,硬链接和源文件具有相同的inode节点号。

硬链接只能在同一文件系统中的文件之间创建,不能对目录进行创建。

可以有多个硬链接指向同一个inode节点,或者说一个文件可以拥有多个路径名,因此一个文件可以对应多个文件名。

删除源文件或任何硬链接都不会影响其他链接的可用性,只有当所有链接都被删除后,inode节点才会被释放。

软链接:


软链接是一个包含了另一个文件的路径名的文件,它通过一个文件名引用另一个文件。

软链接可以链接不同文件系统的文件。

在对软链接进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作。

删除软链接时,仅仅删除链接文件,不会删除源文件本身。

软链接可以指向一个不存在的文件。

二者的区别如下:


文件系统中,一个硬链接是指向同一个 inode 的不同文件名,而一个软链接是一个包含目标文件路径的文件(快捷方式)。

硬链接只能链接到同一文件系统中的文件,软链接可以链接到不同的文件系统上的文件。

删除一个硬链接并不会影响其他硬链接或者真正的文件,而删除一个软链接会使得链接的目标文件或目录成为孤儿文件,除非该目标文件或目录也有其他链接。

2、请你介绍下 JVM 内存模型,分为哪些区域?各区域的作用是什么?

JVM内存区域分为五个部分,分别是堆,方法去、虚拟机栈,本地方法栈,程序计数器

  • 堆。 堆是Java对象的存储区域,任何用new字段分配的Java对象实例和数组,都被分配在堆上,Java堆可使用-Xms -Xmx进行内存控制,值得一提的是从JDK1.7版本之后,运行时常量池从方法区移到了堆上。

方法区。它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据,方法区包括运行时常量池(Runtime Constant Pool),用于存储编译时生成的各种字面量和符号引用。方法区在JDK1.7版本及以前被称为永久代,从JDK1.8永久代被移除。

虚拟机栈。虚拟机栈中执行每个方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每个线程都有一个独立的虚拟机栈,栈的大小可以通过-Xss参数设置。虚拟机栈分为栈帧(Stack Frame),每个方法执行时都会创建一个栈帧用于存储局部变量和操作数栈等信息。

本地方法栈。与虚拟机栈发挥的作用相似,相比于虚拟机栈为Java方法服务,本地方法栈为虚拟机使用的Native方法服务,执行每个本地方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。

程序计数器。程序计数器是一块较小的内存区域,它用于记录当前线程所执行的字节码指令的地址,指示Java虚拟机下一条需要执行的字节码指令。每个线程都有一个独立的程序计数器,用于保证线程切换后能恢复执行的位置。

以上五个区域是Java虚拟机内存划分情况,其中方法区和堆被JVM中多个线程共享,比如类的静态常量就被存放在方法区,供类对象之间共享,虚拟机栈,本地方法栈,pc寄存器是每个线程独立拥有的,不会与其他线程共享。

所以Java在通过new创建一个类对象实例的时候,一方面会在虚拟机栈中创建一个该对象的引用,另一方面会在堆上创建类对象的实例,然后将对象引用指向该对象的实例。对象引用存放在每一个方法对应的栈帧中。

3、有哪些注解可以注入 Bean?@Autowired 和 @Resource 的区别?


在 Spring 框架中,常用的注入 Bean 的注解包括:


@Autowired:自动注入,按照类型自动装配,如果有多个同类型的 Bean,则需要通过 @Qualifier 指定具体的 Bean。

@Resource:Java 自带的注入方式,按照名称自动装配,默认是按照属性名称进行匹配,如果需要按照 Bean 的名称进行匹配,可以使用 @Resource(name=“beanName”)。

@Inject:和 @Autowired 类似,也是按照类型进行自动装配,但是 @Inject 注解是 JSR-330 提供的,而 @Autowired 注解是 Spring 框架提供的。

@Value:用于注入配置文件中的属性值,可以指定默认值。

@Component:用于声明一个 Bean,作用类似于 XML 中的 标签。

以上注解都可以用于注入 Bean,不同的注解之间的区别主要在于注入方式和实现方式的不同。@Autowired 和 @Resource 最常用,其中 @Autowired 按照类型自动装配更为常用,而 @Resource 按照名称自动装配则比较适合需要明确指定 Bean 名称的情况。


百度的答案:


@Autowired:Spring 官方推荐使用的注入 Bean 的方式,通过自动装配方式将 Bean 注入到需要使用的类中。

@Resource:JSR-250 规范中提供的注入 Bean 的方式,可以通过指定 Bean 的名称或类型进行注入。

@Inject:JSR-330 规范中提供的注入 Bean 的方式,与 @Autowired 类似,但更加灵活。

@Qualifier:与 @Autowired 搭配使用,通过指定 Bean 的名称进行注入。

@Value:通过配置文件中的属性值注入 Bean 中的字段或方法参数。

@Component:用于声明一个 Bean,作用类似于 XML 中的 标签。

@Autowired 和 @Resource 的区别


@Autowired注解是Spring提供的,而@Resource注解是J2EE本身提供的

@Autowird注解默认通过byType方式注入,而@Resource注解默认通过byName方式注入

@Autowired注解注入的对象需要在IOC容器中存在,否则,需要加上属性 required=false,表示忽略当前要注入的bean,如果有直接注入,没有则跳过,不会报错

在IOC容器中存在,否则,需要加上属性 required=false,表示忽略当前要注入的bean,如果有直接注入,没有则跳过,不会报错

目录
相关文章
|
存储 算法
摩尔投票的原理详解
摩尔投票的原理详解
390 1
|
算法 安全 网络安全
【网络安全】第3章,公钥密码体制
【网络安全】第3章,公钥密码体制
|
移动开发 JavaScript 安全
js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结
js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结
971 0
SVG pattern 使用(patternUnits、patternContentUnits)
SVG pattern 使用(patternUnits、patternContentUnits)
530 0
|
小程序 JavaScript Java
基于微信小程序的教育培训微信小程序的设计与实现(源码+lw+部署文档+讲解等)
基于微信小程序的教育培训微信小程序的设计与实现(源码+lw+部署文档+讲解等)
337 1
|
SQL 数据库 数据库管理
数据库关系运算理论:关系数据操作与关系完整性概念解析
数据库关系运算理论:关系数据操作与关系完整性概念解析
616 0
|
机器学习/深度学习 人工智能 监控
低代码平台的崛起:开发的未来还是过渡阶段?
低代码平台通过可视化界面和预构建模块,让非技术用户也能快速开发应用,引起广泛关注。其兴起源于快速应用开发需求、技术人才短缺及业务与IT融合。然而,定制化限制、性能问题和依赖性是主要挑战。未来,低代码平台将提升技术成熟度,集成更多先进技术,并提供个性化服务,在软件开发中扮演更重要角色。
|
SQL 关系型数据库 MySQL
0基础学习SQL注入之万能账号密码(BUUctf例题-[极客大挑战 2019]EasySQL1)
0基础学习SQL注入之万能账号密码(BUUctf例题-[极客大挑战 2019]EasySQL1)
|
API 开发者 微服务
RPC和 HTTP协议
【8月更文挑战第8天】RPC(远程过程调用)使程序能像本地调用般请求远程服务,简化网络通信细节。其优点包括高效的数据传输及严格的类型定义,适合微服务间的高效通信。HTTP(超文本传输协议)则是用于万维网数据传输的通用协议,以文本为基础,易于理解和调试,并被广泛支持。两者各有侧重,RPC偏高速服务通信,HTTP则更适用于多样化的网络场景。选择时需根据具体需求决定。
264 2