Bootstrap

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

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

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

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

单例模式 SingletonBeanRegistry,有getSingleton()

工厂模式DefaultListableBeanFactory getBean()

代理模式Spring AOP中的JdkDynamicAopProxy和CglibAopProxy

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

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

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相关的集群部署?

;