1,什么是线程安全 (参考书:https://book.douban.com/subject/10484692/)
不对共享变量进行修改
2,都说String是不可变的,为什么我可以这样做呢
String a = "1";
a = "2";
a只是一个引用 当a=2时候 a指向a=2 此时 a=1照样在内存中并没有改变。
3,HashMap的实现原理
jdk1.7 数组+链表
jdk1.8 数据+链表+红黑树
4,写出三种单例模式,如果能考虑线程安全最好
/**
* 描述:单利模式
*
* @author
* @create 2018-05-02 15:18
*/
public class Singleton {
/**
* 懒汉模式
*/
private static final Singleton singleton = new Singleton();
public static Singleton getInstance() {
return singleton;
}
/**
* 双重校验
*/
private static volatile Singleton singleton1 ;
public static Singleton getInstance1(){
if (null == singleton1) {
synchronized (Singleton.class) {
if (null == singleton1) {
return new Singleton();
}
}
}
return singleton1;
}
/**
* 静态内部类
*/
private static class LazyHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static final Singleton getInstance2() {
return LazyHolder.INSTANCE;
}
5,ArrayList和LinkedList有什么区别
ArrayList的实现用的是数组,LinkedList是基于链表,ArrayList适合查找,LinkedList适合增删
6,实现线程的2种方式
1、继承Thread类创建线程 2、实现Runnable接口创建线程
7,JVM的内存结构
JVM内存结构主要有三大块:堆内存、方法区和栈。堆内存是JVM中最大的一块由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下年轻代按照8:1:1的比例来分配;
8,Lock与Synchronized的区别
Synchronized Java的关键字,在jvm层面上实现通过对象头的监入监出 ,锁的释放是以获取锁的线程执行完同步代码,释放锁 线程执行发生异常,jvm会让线程释放锁假设A线程获得锁,B线程等待。如果A线程阻塞,B线程会一直等待,无法获取锁的状态
可重入 不可中断 非公平
Lock 是一个类 在finally中必须释放锁,不然容易造成线程死锁、 可以判断锁的状态
9,数据库隔离级别有哪些,各自的含义是什么,MYSQL默认的隔离级别是是什么。
1.READ UNCIMMITTED(未提交读)
2.READ COMMITTED(提交读)
3.REPEATABLE READ(可重复读)
4.SERIALIZABLE(可串行化)
默认是可重复读
10,请解释如下jvm参数的含义:
-server -Xms512m -Xmx512m -Xss1024K
-XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=20 XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly。
-Xms512m JVM最小内存
-Xmx512m JVM最大内存
-Xss1024K 每个线程的堆栈大小
-XX:PermSize=256m 表示非堆区初始内存分配大小,其缩写为permanent size(持久化内存)
XX:MaxPermSize=512m 表示对非堆区分配的内存的最大上限。
-XX:MaxTenuringThreshold=20 对象年龄标记次数
XX:CMSInitiatingOccupancyFraction 是指设定CMS在对内存占用率达到80%的时候开始GC(因为CMS会有浮动垃圾,所以一般都较早启动GC);
-XX:+UseCMSInitiatingOccupancyOnly 只是用设定的回收阈值(上面指定的70%),如果不指定,JVM仅在第一次使用设定值,后续则自动调整.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构