多线程创建方式一:继承Thread类 多线程创建方式二:实现Runnable接口 jdk5.0新增两种创建多线程的方式
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();
优先级
线程安全问题
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的使用
栈管运行,堆管存储
新建,可运行,阻塞,等待,时间等待,死亡
什么是线程安全问题?多个线程操作共享数据,就有可能出现安全问题。
如何解决线程的安全问题?有几种方式?
同步机制:1,同步代码块;2,同步方法
重点关注两个事:共享数据及操作共享数据的代码;同步监视器(保证唯一性)
在实现Runnable接口的方式中,同步监视器可以考虑使用:this
在继承Thread类的方式中,同步监视器要慎用this,可以考虑使用:当前类.class。
时间
排序
在 AMap(高德地图 JavaScript API)中,pitch
和 rotation
是与地图视角或透视关联的属性:
俯仰角(
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
});
集合框架
ArrayList
@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);
}
泛型
泛型在继承上的关系
数据结构
磁盘上不挨着的
原因:com.mysql.jdbc.exceptions.jdbc4。MySQLNonTransientConnectionException:无法创建数据库服务器连接。
从网盘导进来之前写的一个spring项目,执行的时候报错:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
翻译过来:无法创建到数据库服务器的连接。
错误原因:
Maven的pom.xml依赖的mysql版本与本机mysql版本不一致。
解决问题:
在mysql-console查询版本:select version();
ArrayList扩容
服务器内存爆满和 CPU 过高可能是由多种原因引起的。下面是一些可能的解决方法:
内存问题:
内存泄漏检查: 使用工具(例如VisualVM、YourKit、MAT等)来检查应用程序中是否存在内存泄漏。确保你的应用程序在使用完对象后释放它们。 JVM 配置优化: 调整 Java 虚拟机的内存参数,确保它们适合你的应用程序。可以通过修改启动脚本或使用 Spring Boot 的配置文件进行调整。
# 举例:设置最小堆和最大堆为512MB
java -Xms512m -Xmx512m -jar your-application.jar
使用内存分析工具: 使用内存分析工具识别哪些对象占用了大量内存,以便优化或解决内存问题。
代码优化: 通过优化代码,尽量避免使用复杂度高的算法和耗时的操作。确保你的代码在设计上是高效的。
并发控制: 如果你的应用程序涉及多线程,确保正确地管理线程,避免死锁和竞争条件。
负载均衡: 如果你的应用程序是通过多台服务器运行的,考虑使用负载均衡,以确保请求能够均匀地分布在不同的服务器上,防止某一台服务器负载过高。
数据库优化: 针对数据库操作,优化 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
加群联系作者vx:xiaoda0423
仓库地址:https://github.com/webVueBlog/JavaGuideInterview