高级及架构师高频面试题-基础型

1、设计模式有哪些原则(待解释的更直白)

  • 单一职责原则:一个类或方法应只负责一项职责,避免一个类因为多个变化原因而改变。
  • 开闭原则:软件实体应对扩展开放,对修改封闭。比如要增加用户类别的时候可以新增一个类而不是只能去修改。
  • 里氏替换原则:子类型必须能够替换掉它们的父类型,而不会对程序造成逻辑错误。
  • 依赖倒置原则:高层模块不应依赖于低层模块,两者都应依赖于抽象;抽象不应依赖于细节,细节应依赖于抽象。
  • 接口隔离原则:使用多个专门的接口比使用单一的总接口更好。
  • 合成/聚合复用原则:尽量使用对象的组合/聚合,而不是继承关系达到复用的目的。
  • 迪米特法则(最少知道原则):一个对象应对其他对象有尽可能少的了解。在编程中,这意味着一个类不应该知道太多其他类的细节,只和直接相关的类交互。这样做可以减少系统中的耦合,使得修改一个部分的时候,不会影响到太多其他部分,保持代码的整洁和可维护性

2、spring源码中常见的设计模式有哪些?(待补充完整)

单例模式

SingletonBeanRegistry,有getSingleton()

工厂模式

DefaultListableBeanFactory getBean()

代理模式

Spring AOP中的JdkDynamicAopProxy(有接口)和CglibAopProxy(无接口情况)

策略模式

BeanPostProcessor接口定义了一系列策略,如InstantiationAwareBeanPostProcessor和BeanFactoryPostProcessor

观察者模式

ApplicationEventPublisher接口和ApplicationListener接口实现事件发布和监听,符合观察者模式;

装饰器模式:

BeanWrapper设计模式是一种装饰器设计模式的应用,‌它允许在运行时动态地给对象添加额外的职责或功能,‌而不影响其原有的结构或行为。‌这种模式通过组合而不是继承来实现功能的扩展,‌特别适用于需要为对象添加多个功能,‌并且这些功能可以灵活组合的情况。‌BeanWrapper设计模式遵循单一职责原则,‌每个装饰器类只关注一个特定的功能,‌从而保持类的职责清晰和可维护性。‌

在Spring框架中,‌BeanWrapper设计模式的应用体现在多个方面,‌其中之一是AOP(‌面向切面编程)‌的实现。‌Spring框架通过AOP提供了对应用程序的横切关注点的模块化处理,‌如日志记录、‌事务管理、‌安全检查等。‌这些功能的实现基于装饰器模式,‌通过定义切面(‌Aspect)‌和连接点(‌JoinPoint)‌,‌将横切关注点应用到程序执行过程中的关键点上。‌Spring框架中的AopProxy和Cglib2AopProxy等类就是代理模式的实现,‌它们为其他对象提供了一种代理,‌以控制对这个对象的访问,‌从而实现功能的增加或限制。‌

此外,‌Spring中的DataBinder类也体现了装饰器设计模式的应用。‌DataBinder实现了TypeConverter接口,‌该接口提供了类型转换服务,‌底层基于BeanWrapper实现。‌这意味着在数据绑定时,‌可以通过装饰器模式动态地添加类型转换功能,‌从而增强了数据的灵活性和可扩展性。‌

总的来说,‌BeanWrapper设计模式在Spring框架中的应用,‌通过动态地为对象添加额外的职责或功能,‌提高了系统的灵活性和可维护性。‌这种模式适用于需要动态扩展对象功能且希望保持对象原有结构不变的场景。

3、jvm模型

1、堆(Heap):
主要用于存储对象实例,包括程序中创建的对象以及Java虚拟机自动创建的对象。堆是JVM中最大的一块内存区域,主要用于动态分配内存。堆空间可以分为新生代和老年代,还包括持久代(JDK 7及之前版本)或元空间(JDK 8及之后版本)。

2、栈(Stack):
每个线程在创建时都会创建一个私有的栈,用于存储局部变量、操作数栈和方法出口等信息。每个方法调用都会创建一个栈帧,用于存储该方法的相关信息。栈的大小可以通过-Xss参数来调整。

3、方法区(Method Area):
用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。方法区的大小可以通过JVM参数来调整,例如使用-XX:MaxPermSize参数来设置永久代的最大容量。在JDK 8及之后的版本中,方法区被元空间(Metaspace)所取代。

4、本地方法栈(Native Method Stack):
与栈类似,用于存储执行本地(native)方法的数据。它是Java虚拟机内存模型中的一部分,用于支持本地方法的调用。
5、程序计数器(Program Counter Register):用于保存当前线程的行号,即线程执行的字节码的行号指示器。程序计数器是线程私有的,每条线程都有一个程序计数器。

4、jvm如何确认哪些是垃圾,哪些可以作为根?

1.虚拟机栈(栈帧中的本地变量表)中引用的对象;

2.方法区中的类静态属性引用的对象;

3.方法区中常量引用的对象;

4.本地方法栈中JNI(即一般说的Native方法)中引用的对象

5、生产上查看cpu、内存、IO、连接常用命令

        Linux命令查看CPU、内存、IO使用情况简单介绍_linux查看cpu核数和内存大小-CSDN博客文章浏览阅读1.1w次,点赞8次,收藏56次。linux cpu 内存 io_linux查看cpu核数和内存大小https://blog.csdn.net/weixin_43024834/article/details/132572708

  1. 查看CPU使用情况:‌

    • top:‌实时显示系统中各个进程的资源占用情况,‌包括CPU使用率。‌
    • htop:‌一个增强版的top命令,‌提供更丰富的信息和更友好的界面。‌
    • mpstat:‌显示多处理器的统计信息,‌包括每个CPU的使用情况。‌
  2. 查看内存使用情况:‌

    • free:‌显示系统的内存使用情况,‌包括总内存、‌已用内存、‌空闲内存等信息。‌
    • vmstat:‌显示虚拟内存统计信息,‌包括内存的使用情况。‌
  3. 查看IO使用情况:‌

    • iostat:‌监控系统的输入/输出情况,‌可以查看磁盘的读写速度和IOPS等信息。‌
    • iotop:‌实时监控磁盘IO使用情况,‌可以查看哪些进程在使用磁盘以及磁盘的使用率。‌
  4. 查看网络连接情况:‌

    • netstat:‌显示网络连接、‌路由表、‌接口统计等信息。‌
    • ss:‌显示类似netstat的信息,‌但提供更多的信息和更快的响应速度。‌
    • tcpdump:‌用于捕获并显示网络上的数据包,‌可以用于分析网络连接和通信数据。‌

6、jvm启动常用参数有哪些

  1. 堆内存设置:‌

    • -Xmx:‌指定Java堆内存的最大限制,‌例如-Xmx512m表示最大堆内存为512兆字节。‌
    • -Xms:‌指定Java堆内存的初始大小,‌例如-Xms256m表示初始堆内存为256兆字节。‌
    • -Xmn:‌指定年轻代的大小,‌例如-Xmn256m表示年轻代大小为256兆字节。‌
    • -XX:SurvivorRatio:指定年轻代中Eden区与Survivor区的大小比例。例如,-XX:SurvivorRatio=8 表示Eden区与每个Survivor区的大小比例为8:1。
    • -XX:NewRatio:指定年轻代与老年代的大小比例。例如,-XX:NewRatio=2 表示年轻代和老年代的比例为1:2
  2. 线程堆栈大小:‌

    • -Xss:‌指定每个线程的堆栈大小,‌例如-Xss256k表示每个线程的堆栈大小为256千字节。‌
  3. 垃圾回收器设置:‌

    • -XX:+UseConcMarkSweepGC:‌启用并发标记清除垃圾回收器。‌
    • -XX:+UseG1GC:‌启用G1(Garbage First)垃圾回收器。‌
  4. 元空间设置(‌针对Java 8及以后的版本)‌:‌

    • -XX:MaxMetaspaceSize:‌指定元空间的最大大小。‌
    • -XX:MetaspaceSize:‌指定元空间的初始大小。‌
  5. 其他参数:‌

    • -verbosegc 和 -XX:+PrintGCDetails:‌用于监视垃圾回收的运行。‌

7、redis缓存的使用场景

8、springboot的启动原理

9、是否做过mysql相关的集群部署?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

校车购票小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,我的乘车信息管理,车辆信息管理,座位管理,系统管理 微信端账号功能包括:系统首页,车辆信息,我的 开发系统…

【项目管理】高手项目经理都在用的6个SOP

SOP(Standard Operating Procedure)流程是一种标准化的操作指南,旨在确保组织或团队在各种情况下都能高效、一致地完成任务。SOP流程通常包括详细的步骤、关键控制点和责任分配,以确保质量和安全。SOP流程涉及从日常运营到危机管理…

28.x86游戏实战-初探XXX发包

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

GPT-4o mini小型模型具备卓越的文本智能和多模态推理能力

GPT-4o mini 是首个应用OpenAI 指令层次结构方法的模型,这有助于增强模型抵抗越狱、提示注入和系统提示提取的能力。这使得模型的响应更加可靠,并有助于在大规模应用中更安全地使用。 GPT-4o mini 在学术基准测试中,无论是在文本智能还是多模…

微信小游戏之三消(二)主要游戏控制方法

设计一个 game class。负责了游戏的核心控制逻辑,包括游戏状态管理、方块和道具的生成与效果处理,以及游戏的重新开始和复活流程。通过这些方法,脚本实现了游戏的基本玩法和用户交互。 主要游戏控制方法 gameStart():开始游戏&am…

Java学习Day16:基础篇6

1.静态和非静态 2.调用静态和非静态的过程 注:在Java中,同类中,确实可以使用类的对象来调用静态方法,尽管这不是推荐的做法。静态方法属于类本身,而不是类的任何特定实例。因此,理论上讲,你应该…

【iOS】—— KVO与KVC

KVO与KVC 1. KVOKVO底层实现分析如何验证上面的说法:NSKVONotifyin_Person内部结构didChangeValueForKey:内部会调用observer的observeValueForKeyPath:ofObject:change:context:方法 回答问题: 2. KVC简介:key和keyPath的区别key&#xff1a…

探索 Electron:如何进行网址收藏并无缝收录网页图片内容?

Electron是一个开源的桌面应用程序开发框架,它允许开发者使用Web技术(如 HTML、CSS 和 JavaScript)构建跨平台的桌面应用程序,它的出现极大地简化了桌面应用程序的开发流程,让更多的开发者能够利用已有的 Web 开发技能…

EtherNet/IP转CAN协议转化网关(功能与配置)

怎么样把EtherNet/IP和CAN两个协议连接起来?有很多朋友想要了解这个问题,那么作者在这里统一说明一下。其实有一个不错的设备产品可以很轻易地解决这个问题,名为JM-EIP-ECAT网关。接下来作者就从该设备的功能及配置详细说明一下。 一,设备主…

聊聊基于Alink库的主成分分析(PCA)

概述 主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维和特征提取技术,用于将高维数据转换为低维的特征空间。其目标是通过线性变换将原始特征转化为一组新的互相无关的变量,这些新变量称为主成分&…

TinyMCE一些问题

1.element 在el-dialog中使用tinymce导致富文本弹窗在el-dialog后面的问题 原因是富文本的弹窗层级太低了 在APP.vue中添加样式即可解决 /* 富文本菜单 */ .tox-tinymce-aux {z-index: 9999 !important; }2.element 在el-dialog中点击富文本的功能栏报错 由于 aria-hidden 属…

Midjourney、Sora和硅谷机密-《分析模式》漫谈15

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 “Analysis Patterns”的Preface(前言)有这么一句: Kent Beck, Ward Cunningham, and Jim Coplein encouraged me to get involved with the commu…

虚假的互联网信息?不妨从IT的角度理解【景观社会】

博主前言:“我思故我在”,笛卡尔的这一哲学命题,大抵上次还比较熟络的时光还是高中亦或复习考研政治的岁月里。这是一个光怪陆离的社会——或者说网络社会,形形色色的消息充斥在脑海之时,你是否还能认识真正的自己&…

YOLOV8-源码解读-SPP-SPPF

先给出YOLOV8中一键三连卷积模块 def autopad(k, pNone, d1): # kernel, padding, dilation"""Pad to same shape outputs."""if d > 1:k d * (k - 1) 1 if isinstance(k, int) else [d * (x - 1) 1 for x in k] # actual kernel-sizeif…

分布式事务解决方案(一) 2PC、3PC、TCC、Sega

目录 1.绪论 2.2PC 2.1 基本原理 2.1.1 组成 2.1.2 步骤 1.prepare阶段 2.commit阶段 2.2 2PC 存在的问题 2.2.1 阻塞问题 2.2.2 单点故障问题 1. 事务协调器宕机 2.部分数据不一致问题 2.资源管理器宕机 3. 事务协调器和资源管理管理器同时宕机 2.2 实现 2.2.1…

怎么将几个pdf合成为一个pdf?pdf合成为一个的常用方法

在现代的职场和学术环境中,如何将多个独立的PDF文档合并成一个统一的文件已经成为提高工作效率、优化文档管理和促进信息共享的重要手段。PDF格式以其卓越的跨平台兼容性、强大的数据保护能力以及清晰易读的版面设计,在全球范围内得到了广泛的应用和认可…

2-45 基于matlab的递归最小二乘法(RLS)对声音信号去噪

基于matlab的递归最小二乘法(RLS)对声音信号去噪,并对消噪前后的信号进行FFT分析,对比消噪前后的效果。可替换自己的声音信号进行分析。程序已调通,可直接运行。 2-45 递归最小二乘法(RLS) FFT分析 - 小红书…

系统移植(七)u-boot移植 ④ trusted版本

文章目录 一、U-boot源码适配(一)执行make stm32mp15_trusted_defconfig命令进行配置,生成.config文件(二)执行make menuconfig命令,对u-boot源码进行重新配置1. 对u-boot源码进行配置,移除pmic…

【C++进阶学习】第十弹——哈希的原理与实现——链地址法的原理与讲解

开放地址法:【C进阶学习】第九弹——哈希的原理与实现——开放寻址法的讲解-CSDN博客 前言: 哈希的整体思想就是建立映射关系,前面的开放地址法的讲解中,也对哈希的原理做了详细的讲解,今天就来讲解一下实现哈希的另一…