0Java基础

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。

0Java基础_第1张图片

为什么同字节数?浮点数范围更大,因为IEEE754标准。 

技术特征

7 位(bits)表示一个字符,共 128 字符

ASCII 扩展字符集

7 位编码的字符集只能支持 128 个字符,为了表示更多的欧洲常用字符,对 ASCII 进行了扩展,ASCII 扩展字符集使用 8 位(bits)表示一个字符,共 256 字符。

ASCII知识icon-default.png?t=N7T8https://baijiahao.baidu.com/s?id=1704767913015693638&wfr=spider&for=pc

 常记ASCII码:

0:48

A:65   +32  Z:90   a:97   z:122

0Java基础_第2张图片

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()直接唤醒。

你可能感兴趣的:(面试,java,开发语言)