springboot第49集:【思维导图】多线程,常用类与基础API,集合框架,泛型,数据结构源码

科技   其他   2024-01-15 21:47   广东  
  • 多线程创建方式一:继承Thread类
  • 多线程创建方式二:实现Runnable接口
  • jdk5.0新增两种创建多线程的方式
image.png
image.png
image.png
image.png
image.png
new Thread(new Runnable() {
    public void run() {
        for (int i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName() + ":" + i);
            }
        }
    }
}).start();
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

优先级

image.png
image.png
image.png
image.png
image.png
image.png

线程安全问题

image.png
image.png
image.png
image.png
image.png
image.png
public static Bank getInstance() {
    if (instance == null) {
        synchronized(Bank.class) {
            if (instance == null) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                instance = new Bank();
            }
        }
    }
}

Lock的使用

image.png
image.png
image.png

栈管运行,堆管存储

image.png

新建,可运行,阻塞,等待,时间等待,死亡

什么是线程安全问题?多个线程操作共享数据,就有可能出现安全问题。

如何解决线程的安全问题?有几种方式?

同步机制:1,同步代码块;2,同步方法

重点关注两个事:共享数据及操作共享数据的代码;同步监视器(保证唯一性)

在实现Runnable接口的方式中,同步监视器可以考虑使用:this

在继承Thread类的方式中,同步监视器要慎用this,可以考虑使用:当前类.class。

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

时间

image.png

排序

image.png
image.png
image.png
image.png

在 AMap(高德地图 JavaScript API)中,pitchrotation 是与地图视角或透视关联的属性:

  1. 俯仰角(pitch):

  • pitch 属性定义了地图倾斜的角度,表示相机从上方往地图底部的视角。0 度的俯仰角表示俯视图(2D),逐渐增加的值会以三维的方式倾斜地图,提供更倾斜的视图。
  • 旋转角度(rotation):

    • rotation 属性指定地图的旋转角度,允许您围绕地图中心旋转。旋转以顺时针度数来衡量。0 度的旋转表示无旋转,随着值的增加,地图将以顺时针方向旋转。

    这些属性通常结合使用,以创建地图的三维透视和方向。它们可以根据应用程序的要求进行调整,以提供基于用户需求的自定义视图。选项 viewMode: '3D' 启用了地图的 3D 视图模式,为显示的地图特征增添了深度感。buildingAnimation 属性设置为 true 时,在建筑物出现在地图上时会启用动画效果。

    amap-jsapi-loader

    amap-jsapi-loader 是高德开放平台官网提供的地图 JSAPI 的加载器,可帮助开发者快速定位、有效避免加载引用地图 JSAPI 各种错误用法。

    该加载器具有以下特性:

    • 支持以 普通JS 和 npm包 两种方式使用;
    • 有效避免错误异步加载导致的 JSAPI 资源加载不完整问题;
    • 对于加载混用多个版本 JSAPI 的错误用法给予报错处理;
    • 对于不合法加载引用 JSAPI 给予报错处理;
    • 支持指定 JSAPI 版本;
    • 支持插件加载;
    • 允许多次执行加载操作,网络资源不会重复请求,便于大型工程模块管理;
    AMapLoader.load({
        "key""",              // 申请好的Web端开发者Key,首次调用 load 时必填
        "version""2.0",   // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
        "plugins": []           // 需要使用的的插件列表,如比例尺'AMap.Scale'
        "AMapUI": {             // 是否加载 AMapUI,缺省不加载
            "version"'1.1',   // AMapUI 缺省 1.1
            "plugins":[],       // 需要加载的 AMapUI ui插件
        },
        "Loca":{                // 是否加载 Loca, 缺省不加载
            "version"'1.3.2'  // Loca 版本,缺省 1.3.2
        },
    }).then(()=>{
        window.AMap.xx;
        window.AMapUI.xx;
        window.Loca.xx
    });
    image.png

    集合框架

    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png

    ArrayList

    image.png
    image.png
    image.png
    image.png
    image.png
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return age == user.age && Objects.equals(name, user.name);
    }
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png

    泛型

    image.png
    image.png
    image.png

    泛型在继承上的关系

    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png

    数据结构

    image.png
    image.png
    image.png
    image.png

    磁盘上不挨着的

    image.png
    image.png

    原因:com.mysql.jdbc.exceptions.jdbc4。MySQLNonTransientConnectionException:无法创建数据库服务器连接。

    image.png

    从网盘导进来之前写的一个spring项目,执行的时候报错:

    com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.

    翻译过来:无法创建到数据库服务器的连接。

    错误原因:

    Maven的pom.xml依赖的mysql版本与本机mysql版本不一致。

    解决问题:

    在mysql-console查询版本:select version();

    image.png
    image.png
    image.png
    image.png
    image.png

    ArrayList扩容

    image.png
    image.png
    image.png

    服务器内存爆满和 CPU 过高可能是由多种原因引起的。下面是一些可能的解决方法:

    内存问题:

    1. 内存泄漏检查: 使用工具(例如VisualVM、YourKit、MAT等)来检查应用程序中是否存在内存泄漏。确保你的应用程序在使用完对象后释放它们。
    2. JVM 配置优化: 调整 Java 虚拟机的内存参数,确保它们适合你的应用程序。可以通过修改启动脚本或使用 Spring Boot 的配置文件进行调整。
    # 举例:设置最小堆和最大堆为512MB
    java -Xms512m -Xmx512m -jar your-application.jar

    1. 使用内存分析工具: 使用内存分析工具识别哪些对象占用了大量内存,以便优化或解决内存问题。

    2. 代码优化: 通过优化代码,尽量避免使用复杂度高的算法和耗时的操作。确保你的代码在设计上是高效的。

    3. 并发控制: 如果你的应用程序涉及多线程,确保正确地管理线程,避免死锁和竞争条件。

    4. 负载均衡: 如果你的应用程序是通过多台服务器运行的,考虑使用负载均衡,以确保请求能够均匀地分布在不同的服务器上,防止某一台服务器负载过高。

    5. 数据库优化: 针对数据库操作,优化 SQL 查询,使用索引等方法来提高数据库查询效率。

    • 查看磁盘空间:df -h
    # df -h
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        1.9G     0  1.9G   0/dev
    tmpfs           1.9G   84K  1.9G   1% /
    dev/shm
    tmpfs           1.9G  5.7M  1.9G   1/run
    tmpfs           1.9G     0  1.9G   0% /
    sys/fs/cgroup
    /dev/vda1        50G   34G   14G  72/
    tmpfs           379M     0  379M   0% /
    run/user/0
    tmpfs           379M     0  379M   0/run/user/1002
    overlay          50G   34G   14G  72/var/lib/docker/overlay2/852d1c6c3303c7583e3bc35c1f5448c261849c8b2d140adb630ce4dce6a46bd1/merged
    shm              64M     0   64M   0/var/lib/docker/containers/02f6dbaaf309e944564e73a31725a71559f52ef33cc0ad4b54a70b29c77ce643/shm
    overlay          50G   34G   14G  72/var/lib/docker/overlay2/cc72601533b86cdd891bb01e6a596c454c76f6f4454158bf94907ae58466b608/merged
    shm              64M     0   64M   0/var/lib/docker/containers/eeb058d801e8c5707d0b86db119fde4497e0304f7930c3335b0ea6a83380bb7a/shm
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png

    加群联系作者vx:xiaoda0423

    仓库地址:https://github.com/webVueBlog/JavaGuideInterview

    算法猫叔
    程序员:进一寸有一寸的欢喜
     最新文章