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

打印 上一主题 下一主题

主题 1010|帖子 1010|积分 3030

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

  • 查看CPU使用情况:‌

    • top:‌实时显示系统中各个历程的资源占用情况,‌包罗CPU使用率。‌
    • htop:‌一个增强版的top下令,‌提供更丰富的信息和更友爱的界面。‌
    • mpstat:‌显示多处理器的统计信息,‌包罗每个CPU的使用情况。‌

  • 查看内存使用情况:‌

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

  • 查看IO使用情况:‌

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

  • 查看网络连接情况:‌

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


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


  • 堆内存设置:‌

    • -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

  • 线程堆栈巨细:‌

    • -Xss:‌指定每个线程的堆栈巨细,‌例如-Xss256k表示每个线程的堆栈巨细为256千字节。‌

  • 垃圾回收器设置:‌

    • -XX:+UseConcMarkSweepGC:‌启用并发标记扫除垃圾回收器。‌
    • -XX:+UseG1GC:‌启用G1(Garbage First)垃圾回收器。‌

  • 元空间设置(‌针对Java 8及以后的版本)‌:‌

    • -XX:MaxMetaspaceSize:‌指定元空间的最大巨细。‌
    • -XX:MetaspaceSize:‌指定元空间的初始巨细。‌

  • 其他参数:‌

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

7、redis缓存的使用场景



8、springboot的启动原理


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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表