1.Java基础篇
1.1基本
a.JDK 和 JRE 有什么区别?
JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。 JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。 具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的工具。简单来说:如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。
b.== 和 equals 的区别
== 解读 对于基本类型和引用类型 == 的作用效果是不同的,如下所示: 基本类型:比较的是值是否相同; 引用类型:比较的是引用是否相同; equals 解读 equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。
c.两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
不对,两个对象的 hashCode() 相同,equals() 不一定 true。 注:hashCode()可以看作散列值
d.Java 中的 Math. round(-1. 5) 等于多少?
等于 -1,因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃。
临界值:向右取整原则
区间原则:左开右闭原则
想起工作中遇到过的曾百思不得其解的问题,以为是我的算法有问题:
计算中有个容易忽略的问题,只有公式中有浮点数(除数或者被除数)这个取整函数才有效。
e.String 属于基础的数据类型吗?
String 不属于基础类型,基础类型有 8 种:byte、boolean、char、short、int、float、long、double,而 String 属于对象。
注:字节数----一拜不洽byte、boolean、char,二秀short,三映佛int、float,四浪搭long、double,不定斯君String。
为什么同字节数?浮点数范围更大,因为IEEE754标准。
技术特征
7 位(bits)表示一个字符,共 128 字符
ASCII 扩展字符集
7 位编码的字符集只能支持 128 个字符,为了表示更多的欧洲常用字符,对 ASCII 进行了扩展,ASCII 扩展字符集使用 8 位(bits)表示一个字符,共 256 字符。
ASCII知识https://baijiahao.baidu.com/s?id=1704767913015693638&wfr=spider&for=pc
常记ASCII码:
0:48
A:65 +32 Z:90 a:97 z:122
f.如何将字符串反转?
使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。
g.String 类的常用方法都有那些?
indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。
replace():字符串替换。
trim():去除字符串两端空白。
split():分割字符串,返回一个分割后的字符串数组。
getBytes():返回字符串的 byte 类型数组。
length():返回字符串长度。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字符。
substring():截取字符串。
equals():字符串比较。
h.抽象类必须要有抽象方法吗?
不需要,抽象类不一定非要有抽象方法。
i.普通类和抽象类有哪些区别?
普通类不能包含抽象方法,抽象类可以包含抽象方法。 抽象类不能直接实例化,普通类可以直接实例化。
2.Java容器篇
27集合容器概述及基本数据结构_邻接表是散列吗_Java_Eastlin的博客-CSDN博客
28java容器方法概述(第一级结构)-CSDN博客
29java容器方法概述(第二级结构)-CSDN博客
2.1基本
Java 容器都有哪些? 集合
16. Java 容器分为 Collection 和 Map 两大类,其下又有很多子类,如下所示: Collection List ArrayList LinkedList Vector Stack Set HashSet LinkedHashSet TreeSet Map HashMap LinkedHashMap TreeMap ConcurrentHashMap Hashtable
List、Set、Map 之间的区别是什么?
List 有序且重复 Set 无序且不可重复 Map key唯一,值可以不唯一
HashMap 和 Hashtable 有什么区别?三方面
存储:HashMap 允许 key 和 value 为 null,而 Hashtable 不允许。 线程安全:Hashtable 是线程安全的,而 HashMap 是非线程安全的。 推荐使用:在 Hashtable 的类注释可以看到,Hashtable 是保留类不建议使用,推荐在单线程环境下使用 HashMap 替代,如果需要多线程使用则用 ConcurrentHashMap 替代。
ArrayList 和 LinkedList 的区别是什么?
数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实现。 随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数据存储方式,所以需要移动指针从前往后依次查找。 增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其他数据的下标。 综合来说,在需要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除操作较多时,更推荐使用 LinkedList。
如何实现数组和 List 之间的转换?
数组转 List:使用 Arrays. asList(array) 进行转换。 List 转数组:使用 List 自带的 toArray() 方法。
3.线程篇
3.1基本
并行和并发有什么区别?
并行:多个处理器或多核处理器同时处理多个任务。 并发:多个任务在同一个 CPU 核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是同时执行。 并发 = 两个队列和一台咖啡机。 并行 = 两个队列和两台咖啡机。
线程和进程的区别?
一个程序下至少有一个进程,一个进程下至少有一个线程,一个进程下也可以有多个线程来增加程序的执行速度。
创建线程有哪几种方式?
创建线程有三种方式: 继承 Thread 重新 run 方法; 实现 Runnable 接口; 实现 Callable 接口。
说一下 runnable 和 callable 有什么区别?
runnable 没有返回值,callable 可以拿到有返回值,callable 可以看作是 runnable 的补充。
线程的 run() 和 start() 有什么区别?
start() 方法用于启动线程,run() 方法用于执行线程的运行时代码。 run() 可以重复调用,而 start() 只能调用一次。
什么是死锁?
当线程 A 持有独占锁a,并尝试去获取独占锁 b 的同时,线程 B 持有独占锁 b,并尝试获取独占锁 a 的情况下,就会发生 AB 两个线程由于互相持有对方需要的锁,而发生的阻塞现象,我们称为死锁。
怎么防止死锁?
尽量使用 tryLock(long timeout, TimeUnit unit)的方法(ReentrantLock、ReentrantReadWriteLock),设置超时时间,超时可以退出防止死锁。 尽量使用 Java. util. concurrent 并发类代替自己手写锁。 尽量降低锁的使用粒度,尽量不要几个功能用同一把锁。 尽量减少同步的代码块。
sleep() 和 wait() 有什么区别?
类的不同:sleep() 来自 Thread,wait() 来自 Object。 释放锁:sleep() 不释放锁;wait() 释放锁。 用法不同:sleep() 时间到会自动恢复;wait() 可以使用 notify()/notifyAll()直接唤醒。