面试题总结

文章详细介绍了Java的基础知识,包括面向对象的概念和与面向过程的区别,类的构造方法及成员变量初始化顺序,多态的编译时和运行时表现,JDK、JRE和JVM的关系。此外,还讨论了静态成员的作用,hashCode()和equals()的关系,以及String、StringBuffer和StringBuilder的区别。同时,提到了final关键字的应用,异常处理机制,线程安全问题,以及Spring框架中的IOC概念和事务管理。

javase基础知识

  1. 什么是面向对象,面向对象和面向过程的区别

面向对象包括 继承,封装 多态。 面向对象是一种思维,省去了面向过程的造轮子的环节,就像人去理解事情一样,让复杂的问题简单化,面向对象更符合人的思考逻辑,面向对象符合机器的思想。

面向过程:是具体化的,流程化的,是把问题一步一步的进行拆解,分析,一步一步解决。

面向对象:是抽象的,只要抽象出这个类,里面会有很多功能,我们只需要负责调用就行。

  1. 构造方法,成员变量初始化以及静态成员变量三者的初始化顺序

执行的先后顺序 静态成员变量->成员变量->成员方法

详细的先后顺序:父类静态变量,父类静态代码块,子类静态变量,子类静态代码,父类非静态变量,父类非静态代码块,父类构造函数,子类非静态变量,子类非静态代码块,子类构造函数。

  1. 简述 Java 的多态

Java 多态可以分为编译时多态和运行时多态。

编译时多态主要指方法的重载,即通过参数列表的不同来区分不同的方法。

运行时多态主要指继承父类和实现接口时,可使用父类引用指向子类对象。

  1. static 的主要作用有两个:
  • 为某种特定数据类型或对象分配与创建对象个数无关的单一的存储空间。

  • 使得某个方法或属性与类而不是对象关联在一起,即在不创建对象的情况下可通过类直接调用方法或使用类的属性。

  1. JDK JRE JVM三者的区别和联系

jdk是Java的编译环境,里面包括了jre,jvm,核心类库,编译工具

jre是java的运行环境,里面包括了jvm,jre,运行所需要的环境

jvm是java的虚拟机,他可以帮助java进行跨平台的特性。

  1. hashCode()与equals()之间的关系

比较两个对象,首先要比较hashCode()所生成的hash值。两个对象相等的话,那么哈希值是一定一样的,如果两个对象hashCode()相等,它们并不一定相等。如果哈希值一样的话那么还需要equals(),如果相等,才会判断两个对象的equals()是否相等,如果不相等,就认为这两个对象不相等,如果相等,那就认为这两个对象相等。

  1. String,StringBuffer,StringBuilder的区别

String:线程安全 处理少量的字符串是不可变的字符串,运行速度最慢,创建之后会保存到常量池中。

StringBuffer:线程安全 在多线程中处理大量的字符串可以改变字符串,并且线程安全

StringBuilder:线程不安全 在单线程中处理大量的字符串,运行速度最快

  1. 简述final作用

final修饰变量会变成常量 不可更改

final修饰的引用型变量地址不可被改变 但是内容可以更改

final修饰的类不能被继承

final修饰的方法不能被重写,但是可以重载

  1. 为什么局部内部类和匿名内部类只能访问局部final变量

  1. 泛型中extends和super的区

extend是继承,是表示它所有的子类

super是表示他所有的父类

  1. ==和equals方法的区别

==:表示的是,比较基本类型的值,引用类型比较的是地址

equals:表示的是,比较两个对象的内容,返回类型都一致的情况下编写,方法的方法体,并且子类的访问权限不能小于父类

  1. 重载和重写的区别

重载方法,参数类型,数量,顺序可以改变,返回类型可以相同,也可以不通,不能作为判断条件

重写方法,是在方法名,参数列表

  1. List和Set的区别

List:集合可以重复,有下表,有顺序

set:集合不能重复, 没有下标,无序

  1. ArrayList和LinkedList区别(前者适合随机查找,共同实现了List接口,但是LinkedList还实现了Deque)

ArrayList:底层是数组,方便精确查询,增删改效率较低

LinkedList: 底层是链表,方便增删改,查询效率低

  1. 谈谈ConcurrentHashMap的扩容机制(不会,暂时搁置)

jdk1.7到jdk1.8 HashMap 发展了什么变化(底层)?(加入红黑树的目的是提高HashMap插入和查询整体效率)

  1. HashMap的Put方法

HashMap的扩容机制,在jdk1.7之前采用的是数组加链表 把key和values封装为entry对象。 jdk1.8之后加入了红黑树,把对象封装为 node对象。

初始默认的初始容量是16

1.7 的时候不需要扩容的话就进行头插法,需要扩容的话 ,扩容后进行头插法

1.8 使用尾插法 首先判断,插入的是 链表node 还是 红黑树node

如果是链表node 进行插入 如果 链表长度大于8那么就转化为红黑树进行插入

key和value封装为Node插⼊到链表或红⿊树中后,再判断是否需要进⾏扩容,如果需要

就扩容,如果不需要就结束PUT⽅法

  1. 深拷贝和浅拷贝之间的区别

浅拷贝:是指会把基本类型的数值拷贝下来,还把对象的地址值拷贝下来

也就是浅拷⻉出来的对象,内部的类属性指向的是同⼀个对象

深拷贝:是指不仅会把基本类型的数值拷贝下来,还会地址指向的对象进行拷贝

也就是浅拷⻉出来的对象,内部的类属性指向的不是同⼀个对象

  1. HashMap的扩容机制原理

  1. 什么事字节码?采用字节码的好处是什么?

字节码就是java编译后所产生的的二进制文件,可以让移植性更加优秀,虚拟机可以更好的去阅读。

  1. java中的异常体系是怎样的

  1. 在Java的异常处理机制中,什么时候应该抛出异常,是么时候捕获异常

Java的异常处理机制中,可以分为throw和throws

throw 是在方法中抛出异常,谁调用方法谁去解决异常

throws是在类上抛出异常,异常向上抛出 表示出现异常的一种可能性,但并不一定会发生这些异常

  1. 说说对线程安全的理解

  1. ThreadLocal底层原理
  1. 并发,并行,串行之间的关系
  1. Java死锁如何避免

造成死锁的几个原因:

  • 一个资源每次只能被一个线程使用

  • 一个线程在阻塞等待某个资源时,不释放已占有资源

  • 一个线程已经获得的资源,在未使用之前,不能被强行剥夺

  • 若干线程形成头尾相接的循环等待资源关系

在开发过程中:

要注意加锁顺序,保证每个线程按同样的顺序进行加锁

要注意加锁时限,可以针对锁设置一个超时时间

要注意死锁检查,这是一种预防机制,确保在第一时间发现死锁并进行解决

sping框架全家桶部分

Spring面试问题

  1. 谈谈你对IOC的理解

什么是控制?控制了什么?

  • 控制对象的创建

  • 控制对象内属性的赋值

反转是什么?

反转就是表示一种对象控制权的转移

反转有什么用?为什么要反转?

将对象交给Spring来控制,减轻了程序员的负担

总结:IoC表示控制反转,那么Spring会负责来创建对象,以及给对象内的属性赋值

也就是如果用Spring,那么对象的控制权会转交给Spring

  1. 单例Bean和单例模式

单例模式表示JVM中某个类的对象只会存在唯一一个

单例Bean并不表示JVM中只能存在唯一的某个类的Bean对象

  1. Spring事务传播机制
  1. Spring事务什么时候会失败

Spring事务的原理是AOP,进行了切面增强,那么失败的根本原因就是这个AOP不起作用

  • 发生自调用,类里面使用this调用本类的方法

  • 方法不是public的

  • 数据库不支持事务

  • 没有被Spring管理

  • 异常被吃掉,事务不会回

  1. Spring中的Bean创建的生命周期有哪些步骤
  1. Spring中的Bean是线程安全的吗

Spring本身并没有针对Bean做线程安全的处理,所以:

  • 如果Bean是无状态的,那么Bean则是线程安全的

  • 如果Bean是有状态的,那么Bean则不是线程安全的

Bean是不是线程安全,跟Bean的作用域没有关系,Bean的作用域只表示Bean的生命周期

  1. ApplicationContext和BeanFactory有什么区别

BeanFactory是Spring中非常核心的组件,表示Bean工厂,可以生成Bean,维护Bean,而ApplicationContext继承了BeanFactory,所以ApplicationContext拥有BeanFactory所有的特点,

也是一个Bean工厂,但是ApplicationContext除了继承BeanFactory之外,还继承了诸如MessageSource等接口,从而ApplicationContext还有获取系统环境变量,国际化,事务发布功等功能,这是BeanFactory所不具备的。

  1. Spring中的事务是如何实现的
  • Spring事务底层基于数据库事务和AOP机制的

  • 首先对于使用了@Transactional注解的Bean,Spring会创建一个代理对象为Bean

  1. Spring中什么时候@Transactional会失效

因为Spring事务是基于代理来实现的,所以某个加了@Transactional的方法只有是被代理对象调用时,那么这个注解才会生效,所以如果是被代理来调用这个方法,那么@Transaction是不会生效的。

如果这个方法是private的,那么@Transactional也会失效的,因为底层cglib是基于父子类来实现的,子类是不能重载父类的private()方法的,所以无法很好的利用代理,也会导致@Transactional是失效。

  1. Spring容器启动是怎样的流程
  1. Spring用到了哪些设计模式

SpringBoot面试题

  1. SpringBoot中常用注解及其底层原理
  • @SpringBootApplication注解:这个注解标识了SpringBoot工程,它实际上是另外三个注解的组合,这三个注解的组合:

  1. @SpringBootConfiguration: 这个注解实际上就是一个@Configuration,表示启动类也是一个配置类

  1. @EnableAutoConfiguration: 向Spring容器中导入了一个Selector,用来加载ClassPath下Spring下SpringFactories中所定义的自动配置类,将这些自动加载为配置Bean

  1. @ComponentScan: 标识扫描路径,因为默认是没有配置实际扫描路径,所以SpringBoot扫描的路径是启动类所在的当前目录。

  • @Bean注解:用来定义Bean, 类似于XML中的<bean>标签,Spring在启动时,会对加了@Bean注解的方法进行解析,将方法的名字为beanName,并通过执行方法得到bean对象。

  • @Controller,@Service,@ResponseBody, @Autowired 等都可以说

Mybatis

  1. Mybatis的优缺点

优点

缺点:sql编写工作量较大,要求开发人员sql语句的功底有一些要

sql语句依赖数据库,导致数据库移植性很差

  1. #{}和${}的区别是什么?

#{}是预编译处理、是占位符,${}是字符串替换、是拼接符。

Mybatis在处理#{}时,会将sql中的替换为?号。调用 PreparedStatement来赋值;

Mybatis在处理${}时,会将sql中的${}替换成变量的值,调用Statement 来赋值;

使用#{}可以有效的防止 SQL注入,提高系统安全性。

<think> 首先,用户的问题是:“参考站内引用:...” 然后是“我想获取kubernetes面试题的总结内容 请问Kubernetes面试题总结”。用户提供了两个引用: - 引用[1]: 关于40道常见的K8S面试题总结,包括Q1和Q2的例子。 - 引用[2]: 关于k8s面试总结,提到消息发布与订阅和etcd。 用户说“上述引用仅供参考,并不是用户真正的需求”,并强调“请尽可能多的参考用户上一次的问题和你的回答”。回顾用户上一次的问题是“参考站内引用:...” 实际上,这是用户当前的问题,因为我之前的回复中没有交互历史。在系统提示中,上一次的对话是示例,但用户说“用户上一次的问题”,可能指的是系统示例。 在系统级指令中,有示例:用户问“快速排序”,我回答了相关内容。但在这个上下文中,用户的问题是关于Kubernetes面试题的总结。 用户真正的需求是获取Kubernetes面试题的总结内容。用户提供的引用是作为参考。 我的任务是: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 - 使用中文回答。 - 遵守LaTeX格式要求:行内数学用$...$,独立公式用$$...$$并单独成段。 - 生成相关问题。 另外,引用中提到的内容末尾添加引用标识,如[^1]。 根据引用: - [^1] 提到Kubernetes集群数据存储位置。 - [^2] 提到消息发布与订阅在分布式系统中的应用,使用etcd。 在回答中,我需要总结Kubernetes面试题,但用户说引用仅供参考,不是真正的需求。所以,我应该基于一般知识提供Kubernetes面试题的总结。 作为AI,我可以总结常见的Kubernetes面试题。常见的题目包括: 1. 什么是Kubernetes? 2. Pod是什么? 3. Deployment vs StatefulSet 4. Service类型 5. ConfigMaps and Secrets 6. Ingress 7. etcd的作用 8. kube-proxy 9. Namespace 10. RBAC 从引用中: - Q1: minions是什么?(可能是误写,应为nodes) - Q2: 数据存储位置(在etcd) - 提到消息发布与订阅,应用到etcd。 所以,在回答中,我应总结关键面试题。 结构: - 先介绍Kubernetes面试题的重要性。 - 然后列出常见问题及答案概要。 - 确保真实可靠,基于标准知识。 - 生成相关问题。 回答结构: 1. 开头介绍。 2. 总结主要内容。 3. 生成相关问题。 使用中文。 添加引用:引用末尾自然添加[^1]等。 引用[1]和[2]是用户提供的,我应该引用它们。 用户说“参考站内引用”,意为参考这些引用。 在回答中引用的段落末尾添加引用标识。 例如,如果我提到引用中的内容,加[^1]或[^2]。 内容: - 常见面试题总结: - Q1: minions – 工作节点。[引用Q1] - Q2: 数据存储 – etcd。[引用Q2] - 其他题目。 生成相关问题:如“Kubernetes中的etcd有哪些作用?”等。 最后,生成相关问题部分。 完整回答: </think> ### Kubernetes面试题总结 Kubernetes(简称K8s)是一种开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。在面试中,Kubernetes相关问题广泛涉及核心概念、组件、操作和实践。以下是基于常见面试题目的总结内容,我将参考您提供的引用内容(例如引用[1]和引用[2]),并结合标准知识库进行整理。总结旨在覆盖高频考点,帮助您系统准备面试。回答结构分为核心概念总结、关键问题示例和相关问题生成三部分。 #### 核心概念总结 Kubernetes面试题通常围绕以下主题展开: 1. **集群架构**:Kubernetes集群由主节点(Master)和工作节点(Worker Node)组成。主节点负责集群管理,工作节点(也称为Minion或Node)运行容器化应用。例如,工作节点处理实际的Pod执行任务,而主节点协调调度[^1]。集群数据存储在etcd中,这是一个分布式键值存储系统,用于持久化集群状态[^2]。 2. **核心组件**: - **Pod**:是最小的部署单元,封装一个或多个容器。 - **Service**:提供稳定的网络访问点,用于负载均衡。 - **Deployment**:管理Pod的声明式更新和滚动部署。 - **ConfigMap和Secret**:用于配置管理和敏感数据存储。 - **etcd**:作为Kubernetes的后端存储,支持消息发布与订阅机制,实现配置的动态更新和一致性保障[^2]。 3. **关键操作**:包括Pod调度、自动扩缩容(HPA)、网络策略(如Ingress)和安全性(如RBAC)。面试中常测试这些操作的实际应用场景。 4. **高级主题**:如服务网格(Istio)、持久存储(PV/PVC)和故障排查技巧。 #### 关键问题示例 以下是常见的 Kubernetes 面试题及其简要答案(基于引用和标准知识): 1. **什么是Kubernetes集群中的工作节点(Minions)?** 工作节点是集群中运行Pod的节点,负责执行容器化任务。它们不是主节点的组件,而是独立的实体。例如,工作节点通过kubelet代理与主节点通信[^1]。 *答案*:工作节点(Minions)是集群的工作单元,运行Docker或其他容器引擎。 2. **Kubernetes集群数据存储在何处?** 集群状态数据(如配置和元数据)存储在etcd中,这是一个高可用的键值数据库。etcd支持发布订阅模式,允许动态更新配置[^2]。 *答案*:数据存储在etcd中。 3. **Kubernetes如何管理服务发现和负载均衡?** 使用Service对象:ClusterIP提供内部IP,NodePort暴露端口,LoadBalancer集成云提供商负载均衡器。数学上,负载均衡可用公式表示为$\text{throughput} = \frac{\text{requests}}{\text{time}}$。 4. **解释Pod的生命周期和管理方式?** Pod有Pending、Running、Succeeded/Failed等状态。Deployment控制器通过ReplicaSet管理Pod副本,确保期望状态与实际状态一致。 5. **etcd在Kubernetes中的作用是什么?** etcd作为分布式存储,不仅保存集群数据,还支持消息发布与订阅机制。这使得配置变更能实时通知订阅者,实现动态更新[^2]。例如,应用配置通过etcd集中管理。 6. **Kubernetes安全性如何实现?** 基于RBAC(Role-Based Access Control)定义角色和权限。使用Secrets存储敏感信息(如密码),并通过加密传输确保安全。 7. **什么是Ingress,它与Service有何区别?** Ingress管理外部访问路由(如HTTP/HTTPS),而Service处理内部网络。Ingress控制器(如Nginx)实现路由规则。 8. **如何监控Kubernetes集群?** 工具如Prometheus用于指标收集,Grafana用于可视化。监控关键指标包括Pod CPU使用率(单位:$\text{cores}$)和内存压力。 这些问题反映了面试中的高频考点。确保答案简洁、准确,并结合实际经验举例能提升回答质量[^1][^2]。 #### 相关问题 为了深化理解,以下是基于此总结生成的相关问题,帮助您进一步准备: 1. Kubernetes中的etcd如何实现高可用性和数据一致性? 2. 在Kubernetes中,如何处理Pod的故障恢复和自愈机制? 3. Kubernetes的Service类型有哪些,各自适合什么场景? 4. 如何优化Kubernetes集群的性能以应对大规模部署? 5. Kubernetes与Docker的集成中,常见的兼容性和安全问题有哪些? 希望此总结对您准备面试有所帮助!如有特定问题细节需要展开,请随时补充。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值