Java100道面试题

1.JVM内存结构

1. 方法区(Method Area)

方法区是JVM内存结构的一部分,用于存放类的相关信息,包括:

  • 类的结构(字段、方法、常量池等)。
  • 字段和方法的描述,如名称、类型、访问修饰符等。
  • 静态变量。
  • Java虚拟机在运行时加载的类的信息。

方法区通常在堆区的外部,与堆区是分开的。因为主要存放的是类的信息和静态数据,所以这一部分数据的生命周期与类本身相同。

2. 堆(Heap)

堆是JVM中用于动态分配内存的区域,是对象和数组的存储区。堆内存是JVM运行过程中最大的内存区域,所有对象实例和数组都是在这个区域中分配的。堆区又可以分为几个部分:

  • 新生代(Young Generation):用于存放新创建的对象,年轻代又可以分为三个部分:Eden空间和两个Survivor空间。新创建的对象首先在Eden区分配,经过垃圾回收后存活下来的对象会被移动到Survivor区。
  • 老年代(Old Generation):用于存放长期存活的对象。经过多次垃圾回收,仍然存活的对象会被转移到老年代。
  • 持久代(PermGen)/元空间(Metaspace):在旧版本的JVM中,方法区使用持久代来存储类元信息。在Java 8及其之后的版本中,持久代被元空间替代,主要用于存储类的元数据,不再属于Java虚拟机的堆内存,而是使用本地内存。
3. 虚拟机栈(VM Stack)

虚拟机栈用于存储局部变量、操作数栈、动态链接等信息。每个线程都有自己的虚拟机栈。栈是先进后出(LIFO)的结构,栈中的每一个栈帧(Stack Frame)对应一个方法的调用。在方法调用时,相关的局部变量、参数值以及方法返回地址等都会被推入栈中,而在方法返回时,栈帧会被弹出。

4. 本地方法栈(Native Method Stack)

本地方法栈用于支持JVM调用本地(Native)方法,类似于虚拟机栈。它存储的是本地方法的栈帧。不同的JVM实现可能会有所不同,但其功能主要是协助执行 Java 与其他语言(如C、C++)交互的本地方法。

5. 程序计数器(Program Counter Register)

程序计数器是一个较小的内存区域,保存着当前线程所执行的字节码的地址。它是线程私有的,每个线程都有一个程序计数器,以便在多线程环境中跟踪每个线程的执行点。可以理解为一个指针,指向当前正在执行的指令。

2.垃圾回收机制(GC)

垃圾回收算法

垃圾回收算法有多种,常见的有:

  • 标记-清除(Mark-and-Sweep)

    • 该算法分为两个阶段。第一阶段“标记”会遍历所有可达对象并标记它们,第二阶段“清除”会删除没有被标记的对象。尽管这个方法简单有效,但它可能导致内存碎片。
  • 复制(Copying)

    • 该算法将内存分为两个空间(通常称为“From”和“To”区域),在进行垃圾回收时复制所有活跃对象到另一个区域。复制后,原来的区域会被清空。该方法避免了内存碎片,但需要更多内存。
  • 标记-整理(Mark-and-Compact)

    • 该算法与标记-清除结合。首先,它会标记所有可达对象,然后将它们移动到一端,以消除内存碎片,并清理未使用的内存。
  • 分代收集(Generational Collection)

    • 根据对象的生命周期将内存分为若干代(通常为年轻代和老年代)。新创建的对象通常会在年轻代中变化较快,因此通过频繁回收年轻代来提高效率。而老年代中的对象较少变化,因此不需要频繁检查和回收。

JVM的垃圾回收机制:GC,是Java提供的对于内存自动回收的机制。

GC(Garbage Collection)是Java虚拟机(JVM)中的一项重要功能,用于自动管理堆内存中不再使用的对象,释放其占用的内存空间。GC通过标记和回收无效对象来实现内存的回收和释放,以避免内存泄漏和溢出。

        下面是GC的主要工作原理和过程:

        1、对象的标记:GC首先标记出所有活动对象,即仍然被引用或可达的对象。它从一组根对象开始,逐步遍历对象图,将可达的对象标记为活动对象,未标记的对象则被认为是无效的。

        2、垃圾回收:在标记完成后,GC会对未标记的对象进行回收。具体的回收算法可以是不同的,常见的算法包括标记-复制算法、三色标记算法等。

        3、内存压缩和整理:某些垃圾回收算法在回收完对象后,可能会产生内存碎片。为了优化内存使用,GC可能会进行内存压缩和整理操作,使得分配的对象在内存中连续存放,减少内存碎片的影响。

        GC的优点是可以自动管理内存,减少了手动内存管理的复杂性,避免了内存泄漏和溢出的问题。但是,GC也会带来一定的性能开销。因此,在开发Java应用程序时,需要合理配置GC的参数和调整垃圾回收策略,以平衡性能和内存的使用。
 

3.JVM调优的方法?

1. 内存管理调优
  • 堆内存大小设置:可以通过 (初始堆大小)和 (最大堆大小)参数来设置堆内存的大小。例如:。根据应用程序的需求来调整堆的大小

  • 选择合适的垃圾回收器:不同的垃圾回收器适用于不同的场景,例如:

    • G1垃圾回收器():适合大堆内存和低延迟的应用。
    • Parallel垃圾回收器():适合高吞吐量的应用。
    • CMS垃圾回收器():适合需要最小停顿的应用。
    • ZGC和Shenandoah:适合需要极低延迟的应用,但需要JVM版本支持。
  • 调整新生代和老年代的比例:可以通过 或 参数来调整新生代与老年代的比例,以优化对象的存活率和垃圾回收频率。

2. 垃圾回收调优
  • 影响GC频率和停顿时间的参数

    • MaxGCPauseMillis:设置最大GC停顿时间。GC会尝试满足这个时间限制。
    • GCTimeRatio:调整应用可用时间与GC时间的比例。
  • 监控和分析:使用JVM提供的工具(如JVisualVM、JConsole、GC日志)来监控和分析垃圾回收的情况,识别GC问题。

3. JIT编译优化
  • 开启Tiered Compilation:使用,可以提高启动性能。

  • 调整JIT编译行为:通过设置编译阈值,以控制何时将方法编译为机器代码。-

4. 线程调优
  • 线程栈大小:可以用参数设置每个线程的栈大小。例如:。适当调整以减少栈溢出和内存使用。

  • 线程池管理:如果应用使用线程池,确保合理配置线程数,避免因过多线程上下文切换引起的性能问题。

5. 其他优化选项
  • 类加载与内存优化

    • 使用 可保持对象引用的压缩,有助于减少堆内存的使用。
  • 禁用或调整assertions:在生产环境中,可以禁用不必要的断言以提高性能:。-da

6. 性能监控与分析
  • 使用JVM监控工具:如Java Mission Control(JMC)和Flight Recorder来分析应用性能,查找瓶颈。

  • Profiling:使用工具(如YourKit、VisualVM等)进行代码剖析,找到性能开销较大的热点代码。

7. 配置文件与启动参数
  • 合理配置启动参数:根据具体的应用场景和服务器配置调整JVM的启动参数,比如开启JIT、选择合适的GC、调整堆内存大小等。

4.堆和栈的区别?

1. 结构和用途:
  • 栈(Stack)

    • 栈是一种先进后出(LIFO, Last In First Out)的数据结构。
    • 用于存储局部变量、函数参数和函数调用信息等。在函数调用时,函数的局部变量会压入栈中,函数返回时会将这些变量从栈中弹出。
    • 每个线程都有自己的栈,用于跟踪函数调用和局部变量。
  • 堆(Heap)

    • 堆是一种基于动态存储分配的内存区域,没有特定的结构(可以认为是自由存储区)。
    • 用于存储动态分配的对象和数据,如使用 关键字在C++中分配的对象,或在Java中创建的对象。
    • 堆内存可以由程序员直接管理,程序员需要手动申请和释放内存,或者由垃圾回收机制(如Java、C#)自动管理。
2. 存储管理:
    • 存储在栈内存中的数据管理简单,入栈和出栈操作的时间复杂度都是O(1)。
    • 由于栈的大小是固定的(通常由操作系统限定),栈溢出(Stack Overflow)可能导致程序崩溃。
    • 堆内存的大小通常只受到系统内存的限制,算法的复杂性和速度依赖于内存分配和回收的实现。
    • 堆内存分配需要更多的时间,且容易出现内存泄漏或内存碎片问题。
3. 生命周期:
    • 数据的生命周期由函数调用决定。函数结束后,栈上的数据会自动释放。
    • 数据的生命周期由程序员控制,只有在不再需要对象时,才能显式地释放空间。如果没有释放,则会造成内存泄漏。
4. 访问速度:
    • 由于其结构简单,内存访问速度较快,通常会比堆更快。
    • 由于堆内存的管理要复杂得多,非顺序访问可能导致较慢的访问速度。

5.JVM使用命令

jvm 的一些命令_jvm命令-CSDN博客

jinfo 

描述:输出给定 java 进程所有的配置信息。包括 java 系统属性和 jvm 命令行标记等。

jstat

jstat -gcutil <pid> <interval>

查看java进程的gc情况

以百分比显示每个区域的内存使用情况;

参数interval表示每多少毫秒刷新一次

6.class.forName和Classload的区别

1.相同点
两者都可以对类进行加载。
对于任意一个类/对象,我们都能够通过反射能够调用这个类的所有属性方法。

2.不同点
抽象类ClassLoader中实现的方法loadClass,loadClass只是加载,不会解析更不会初始化所反射的类。常用于做懒加载,提高加载速度,使用的时候再通过.newInstance()真正去初始化类。 

7.谈谈JDK1.8特性有哪些

Lambda表达式 类似于ES6中的箭头函数
接口的默认方法和静态方法
新增方法引用格式
新增Stream类
新的日期API,Datetime,更方便对日期的操作
引入Optional,在SpringData中使用较多,然后再通过get获取值,主要用于防止NPE。
支持Base64
注解相关的改变
支持并行(parallel)数组
对并发类(Concurrency)的扩展。
JavaFX。

JDK1.8常用新特性_jdk1.8的新特性-CSDN博客

8.反射获取类中的所有方法和获取类中的所有属性

  • getDeclaredMethods() 和 getDeclaredFields() 允许你访问类的所有方法和字段,包括私有的。
  • getMethods() 和 getFields() 只返回公共方法和字段,且包括继承的父类方法和字段。

9.懒汉和饿汉模式的区别?口述两种模式。 

在饿汉式单例模式中,“饿” 体现的是一种急切的状态。就好像一个很饿的人,在看到食物(这里类比于单例对象)的时候,会迫不及待地先把食物拿到手(创建单例对象)。在这个模式下,单例对象在类加载阶段就被创建出来,而不是等到真正需要使用这个对象的时候才去创建。这种方式比较急切,所以被称为 “饿汉模式”。

在懒汉模式下,实例在第一次使用时才进行创建,因此称为“懒汉”,在需要被用的时候被创建,突出一个字“懒”

10.如何保证单例模式在多线程中的线程安全

私有构造函数:通过将构造函数设置为私有,我们禁止了外部类直接实例化Singleton类。这确保了只能通过getInstance()方法来获取实例。

volatile关键字:volatile关键字确保了instance变量的可见性。当一个线程修改了一个volatile变量的值时,其他线程能够立即看到这个变化。这样可以避免线程之间的缓存不一致问题。

双重检查锁定(Double-Checked Locking):为了减少同步开销,我们在第一次检查instance是否为空后,才进入同步块。这是因为大多数情况下,实例已经被创建,不需要进入同步块。只有在第一次创建实例时才会需要同步。

同步块:在同步块内部,我们再次检查instance是否为空,以确保只有一个线程能够创建实例。这是为了防止多个线程同时通过了第一个空检查并尝试创建多个实例。

11.spring运用了什么设计模式?讲一下哪些部分运用到了这些设计模式

  • 一、简单工厂模式(Simple Factory)
  • 定义:

    简单工厂模式:并不属于 GoF(四人组)总结的 23 种设计模式,但它却在实际开发中被频繁使用。其核心是 由一个工厂类根据传入的参数,动态决定创建哪一个产品类的实例。

    举例:

    Spring 中的 BeanFactory 就是简单工厂模式的体现,根据传入一个唯一的标识来获得 Bean 对象。但是,在传入参数后创建 Bean 还是传入参数前创建 Bean,这个要根据具体情况而定。

  • 二、工厂方法模式(Factory Method)
  • 定义:

    工厂方法模式:定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。

    举例:

    Spring 使用工厂模式可以通过 BeanFactory 或 ApplicationContext 创建 Bean 对象。两者对比如下:

    BeanFactory:延迟注入(使用到某个 Bean 的时候才会注入),相比于 ApplicationContext 来说会占用更少的内存,程序启动速度更快。
    ApplicationContext:容器启动的时候,不管你用没用到,一次性创建所有 Bean。BeanFactory 仅提供了最基本的依赖注入支持,ApplicationContext 扩展了 BeanFactory,除了有 BeanFactory 的功能还有额外更多功能,所以一般开发人员使用 AplicationContext 更多。

  • 三、单例模式(Singleton)
  • 定义:

    单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

    举例:

    在我们系统中,有一些对象其实我们只需要一个,比如说:线程池、缓存、对话框、注册表、日志对象、充当打印机、显卡等设备驱动程序的对象。事实上,这一类对象只能有一个实例,如果制造出多个实例就可能会导致一些问题的产生,比如;程序的行为异常、资源使用过量、或者不一致性的结果。

  • 四、适配器模式(Adapter)
  • 定义:

    适配器模式:将一个接口转换成客户希望的另一个接口,适配器使接口不兼容的那些类可以一起工作。

    举例:

    Spring AOP 中的适配器模式:

    我们知道 Spring AOP 的实现是基于代理模式,但是 Spring AOP 的增强或通知(Advice)使用到了适配器模式,与之相关的接口是 AdvicorAdapter。

  • 五、代理模式(Proxy)
  • 定义:

    代理模式:为其他对象提供一个代理以控制对这个对象的访问。

    举例:

    代理模式在 AOP 中的应用:

    AOP(Aspect-Oriented Programming,面向切面编程):能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如:事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可扩展性和可维护性

  • 七、观察者模式(Observer)
  • 定义:

    观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新。

    举例:

    Spring 事件驱动模型就是观察者模式很经典的一个应用。Spring 事件驱动模型非常有用,在很多场景都可以解耦我们的代码。比如我们每次添加商品的时候都需要重新更新商品索引,这个时候就可以利用观察者模式来解决这个问题

  • 八、策略模式(Strategy)
  • 定义:

    策略模式:定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法独立于使用它的客户。

    举例:

    Spring 框架的资源访问 Resource 接口。该接口提供了更强的资源访问能力,Spring 框架本身大量使用了 Resource 接口来访问底层资源。

  • 九、模板方法模式(Template Method)
  • 定义:

    模板方法模式:在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。

    举例:

    Spring 中 JdbcTemplate、HibernateTemplate 等以 Template 结尾的对接入内容进行操作的类,它们就使用到了模板方法。一般情况下,我们都是使用继承的方法来实现模板模式,但是 Spring 并没有使用这种方式,而是使用 Callback 模板与模板方法模式配合,既达到了代码复用的效果,同时增加了灵活性。

12.说说你都知道哪些设计模式?最常用的有哪些?总共有几种设计模式?

23种设计模式 - 知乎

13.redis可以储存哪几种数据类型?你的项目里都用redis存储哪些数据

14.redis有哪些常用操作?(命令)

15.redis缓存和数据库怎么保持一致?

16.redis可以持久化么?如何持久化?

17.redis分布式锁怎么使用?

18.redis缓存数据丢失怎么使用?

19.redis如果崩溃了如何快速恢复?

20.redis是如何部署的?是单个部署还是集群部署?为什么这么做?

21.什么是缓存穿透、缓存击穿、缓存雪崩?如何解决?

22.List和set和map的区别?

23.arrarylist,linkedlist;arraylist内部扩容机制是怎样的?

24.hashmap扩容机制,HashMap的底层原理

25.hashmap的底层用什么储存的?线程是否安全?

26.final和finally和finalize的区别

27.String、StringgBuilder、StringBuffer的区别

28.重写equals已经能比较两个对象了,为什么还要重写hashcode方法

29.基本数据和包装数据类型的区别?

30.什么是多态?举个例子

31.抽象类和接口的区别

抽象类是半抽象的,有构造方法,抽象类可以包含抽象方法和非抽象方法,也可以有成员变量(不仅仅是常量)
类和类之间只能单继承,一个抽象类只能继承一个类(单继承)

接口是完全抽象的,没有构造方法,接口和接口之间支持多继承,一个类可以同时实现多个接口
这在Java 8之前基本正确,但在Java 8及之后,接口可以包含默认方法和静态方法

32.java中的几种基本类型,各占用多少字节?

33.运行时异常有哪些?

34.对面向对象的理解?面向对象有的特征有哪些?
35.HTTP报文有哪几部分组成?Get/Post有什么区别

36.转发(forward)和重定向(redirect)的区别

37.什么是AOP?什么是IOC?

38.AOP用到什么设计模式

39.SpringBean的生命周期

40.SpringIOC是怎么实现了依赖注入,有几种依赖注入方式?

41.SpringMVC的执行流程

42.SpringMVC与springboot的区别?

43.SpringMVC的事物有过哪几种?怎么处理的?

44.SpringBoot在初始化以前执行一个方法,应该怎么做?初始化以后在执行一个方法应该怎么做,有哪几种方法去做

45.在项目中会经常用到哪些注解?讲出十个

46.@Autowired注入和自己new一个对象有什么区别?

47.myBaties防sql注入的操作

48.Mybaties都要用到哪些标签

49.#和$的区别

#原样输出

$占位符

50.Mybaties如何实现循环?

51.@Component,@Controller,@Repository,@Service有何区别?

52.SpringBoot中的注解?SpringBoot的核心注解是什么?

53.springBoot要发布一个接口需要几个注解?

54.SpringBoot的运行原理/启动流程?

55.SpringBoot项目启动类上有什么注解?除了常用的还有什么注解?

56.SpringBoot配置文件怎么配?

57.SpringBoot怎么整合MyBatis

58.SpringBoot项目启动时配置文件加载顺序

59.事物的隔离级别

60.事物的七种传播方式

61.过滤器和拦截器的区别?

62.Spring运用了什么设计模式?讲一下哪些部分用到了这些设计模式

63.去重SQL语句怎么写

64.MYSQL大批量数据如何导入

65.mysql如何做大数据量分页

66.mysql索引类型

67.怎么避免索引失效

68.了解过MySQL数据库储存引擎么?

69.讲讲mysql最左匹配原则

70.笛卡尔积是什么

71.脏读、幻读、不可重复读

72.数据库的优化方案?一个SQL语句如何让他搜索变快?你们遇到的数据量最大的表是什么样,有多少条数据。

73.慢日志怎么使用?MYSQL怎么发现动作速度慢的SQL语句?

74.分库分表是怎么做的?数据库分表分库后怎么保证其一致性?

75.MySQL表为何产生死锁?如何避免死锁?

76.oracle与mysql的区别?mysql分页和oracle分页的区别?

77.Mysql默认的事务隔离级别?

78.Mysql的索引的数据结构?

79.Mysql中count()和count(1)区别

80.Sql看执行计划?

81.创建线程的方式及其区别

82.mysq1锁的粒度?并发编程锁到行还是表?(介绍页级、表级、行级)

83.什么是线程和进程?它们之间的区别是什么?

84.请解释一下线程的几种状态以及状态之间的转换关系

85.什么是线程上下文切换?

86.项目中是否用到过多线程?怎么用的?

87.Sleep()和wait()区别?Start()和run()区别?wait,sleep, notify的区别?

88.线程安全指的是什么?如何保障线程安全

89.线程锁有几种方式?使用的关键字?

90.什么是乐观锁和悲观锁?

91.synchronized和]ock的区别。Synchronize关键字修饰方法和修饰代码块的区别

92.如何保证单例模式在多线程中的线程安全性

93.线程池的常见类型石那些?

94.线程池中线程的停止?

95.线程池中的线程数多少合适?

96.线程池一般是自动创建的还是手动?为什么?

97.ReentrantLock和synchronized的别是什么

98.什么是死锁?如何避免死锁?

99.Java 中线程间通信有哪些方式

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

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

相关文章

【优选算法 分治】深入理解分治算法:分治算法入门小专题详解

快速排序算法 (1) 快速排序法 (2) 快排前后指针 (3) 快排挖坑法 颜色分类 题目解析 算法原理 算法原理和移动零非常相似 简述移动零的算法原理 cur 在从前往后扫描的过程中&#xff0c;如果扫描的数符合 f 性质&#xff0c;就把这个数放到 dest 之…

【前端系列01】优化axios响应拦截器

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、axios响应拦截器&#xff1a;☀️☀️☀️2.1 为什么前端需要响应拦截器element ui的消息组件 一、前言&#x1f680;&#x1f680;&#x1f680; ☀️ 回报不在行动之后&#xff0c;回报在行动之中。 这个系列可…

Requests聚焦爬虫-数据解析

原理:定位到对应标签,获取标签内的东西 解析三种方法: 1:正则 58二手房。获取图片列表,二进制content。展开,每个图片是一个内容,正则从头取到尾,不同之处用 .*? 替换掉。 import requests import re import os if __name__ == "__main__":# url=https://…

性能测试工具的原理与架构解析

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 在软件开发与运维领域&#xff0c;性能测试是确保系统稳定、高效运行的关键环节。性能测试工具作为实现这一目标的重要工具&#xff0c;通过模拟真实用户行为和负载…

【insert 插入数据语法合集】.NET开源ORM框架 SqlSugar 系列

系列文章目录 &#x1f380;&#x1f380;&#x1f380; .NET开源 ORM 框架 SqlSugar 系列 &#x1f380;&#x1f380;&#x1f380; 文章目录 系列文章目录一、前言 &#x1f343;二、插入方式 &#x1f4af;2.1 单条插入实体2.2 批量 插入实体2.3 根据字典插入2.4 根据 Dat…

记一次k8s下容器启动失败,容器无日志问题排查

问题 背景 本地开发时&#xff0c;某应用增加logback-spring.xml配置文件&#xff0c;加入必要的依赖&#xff1a; <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>8…

【PPTist】批注、选择窗格

前言&#xff1a;本篇文章研究批注和选择窗格两个小功能 一、批注 批注功能就是介个小图标 点击可以为当前页的幻灯片添加批注&#xff0c;还能删除之前的批注 如果我们增加了登录功能&#xff0c;还可以在批注上显示当前的用户名和头像&#xff0c;不过现在是写死的。 左侧…

使用Paddledetection进行模型训练【Part1:环境配置】

目录 写作目的 安装文档 环境要求 版本依赖关系 安装说明 写作目的 方便大家进行模型训练前的环境配置。 安装文档 环境要求 PaddlePaddle &#xff1e;&#xff1d;2.3.2OS 64位操作系统Python 3(3.5.1/3.6/3.7/3.8/3.9/3.10)&#xff0c;64位版本pip/pip3(9.0.1)&am…

C++ scanf

1.scanf概念解释&#xff1a; C语言兼容C语言中的基本语句语法,scanf语句是C语言中的输入语句,在C语言环境中也可以使用。对于大数据的输入使用scanf比C的输入cin效率高、速度快。 scanf称为格式输入函数,其关键字最末一个字母f即为是格式"(format)之意",其意义是按指…

数学建模入门——描述性统计分析

摘要&#xff1a;本篇博客主要讲解了数学建模入门的描述性统计分析&#xff0c;包括基本统计量的计算、数据的分布形态、数据可视化和相关性分析。 往期回顾&#xff1a; 数学建模入门——建模流程-CSDN博客 数学建模入门——数据预处理&#xff08;全&#xff09;-CSDN博客 …

30、论文阅读:基于小波的傅里叶信息交互与频率扩散调整的水下图像恢复

Wavelet-based Fourier Information Interaction with Frequency Diffusion Adjustment for Underwater Image Restoration 摘要介绍相关工作水下图像增强扩散模型 论文方法整体架构离散小波变换与傅里叶变换频率初步增强Wide Transformer BlockSpatial-Frequency Fusion Block…

Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s

前言&#xff1a;纯个人记录使用。 搭建 Zero to JupyterHub with Kubernetes 上篇 - Kubernetes 离线二进制部署。搭建 Zero to JupyterHub with Kubernetes 中篇 - Kubernetes 常规使用记录。搭建 Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s。 官方文档…

Matlab回归预测大合集(不定期更新)-188

截至2025-1-2更新 1.BP神经网络多元回归预测&#xff08;多输入单输出&#xff09; 2.RBF神经网络多元回归预测&#xff08;多输入单输出&#xff09; 3.RF随机森林多元回归预测&#xff08;多输入单输出&#xff09; 4.CNN卷积神经网络多元回归预测&#xff08;多输入单输…

【读书与思考】历史是一个好东西

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 导言 以后《AI日记》专栏我想专注于 AI 相关的学习、成长和工作等。而与 AI 无关的一些读书、思考和闲聊&#xff0c;我打算写到这里&#xff0c;我会尽量控制自己少想和少写。 下图的一些感想…

Git使用mirror备份和恢复

Git使用mirror备份和恢复 使用到的命令总结备份1.进入指定代码仓库&#xff0c;拷贝地址2.进入要备份到的文件夹&#xff0c;右键打开git命令行&#xff0c;输入以下命令3.命令执行完成后会生成一个新文件夹 恢复1.在gitee上创建代码仓库![请添加图片描述](https://i-blog.csdn…

人工智能的可解释性:从黑箱到透明

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​ ​ 人工智能&#xff08;AI&#xff09;的快速发展和广泛应用&#xff0c;带来了许多革新的成果&#xff0c;但也引发了对其透明性和可解释…

Nacos注册中心介绍及部署

文章目录 Nacos注册中心介绍及部署1. 注册中心简介2. 注册中心原理3. Nacos部署-基于Docker3.1 Nacos官网下载3.2 基础数据信息3.3 环境信息3.4 docker安装部署3.5 测试3.5 测试 Nacos注册中心介绍及部署 1. 注册中心简介 Spring Cloud注册中心是Spring Cloud微服务架构中的一…

Nginx与frp结合实现局域网和公网的双重https服务

背景&#xff1a; 因为局域网内架设了 tiddlywiki、 Nextcloud 等服务&#xff0c;同时也把公司的网站架设在了本地&#xff0c;为了实现局域网直接在局域网内访问&#xff0c;而外部访问通过frps服务器作为反向代理的目的&#xff0c;才有此内容。 实现的效果如下图琐事 不喜欢…

zephyr移植到STM32

Zephy如何移植到单片机 1. Window下搭建开发环境1.1 安装Choncolatey1.2 安装相关依赖1.3创建虚拟python环境1.4 安装west1.4.1 使用 pip 安装 west1.4.2 检查 west 安装路径1.4.3 将 Scripts路径添加到环境变量1.4.4 验证安装 1.5 获取zephyr源码和[安装python](https://so.cs…

【分糖果——DFS】

题目 代码1 #include <bits/stdc.h> using namespace std; set<string> s; void dfs(int num1, int num2, int u, string ans) {if (u 7){if (num1 num2 > 5)return;ans (char)((num1) * 17 num2);s.insert(ans);return;}for (int i 0; i < num1; i){f…