写点什么

巩固 Java 基础,备战来年跳槽——你的薪资自己说了算

用户头像
马小乎
关注
发布于: 3 小时前


相关概念

面向对象的三个特征

封装,继承,多态,这个应该是人人皆知,有时候也会加上抽象。

多态的好处

代码中如何实现多态

虚拟机是如何实现多态的

接口的意义

接口的意义用三个词就可以概括:规范,扩展,回调。

抽象类的意义

抽象类的意义可以用三句话来概括:

  1. 为其他子类提供一个公共的类型

  2. 封装子类中重复定义的内容

  3. 定义抽象方法,子类虽然有不同的实现,但是定义时一致的

接口和抽象类的区别


父类的静态方法能否被子类重写

什么是不可变对象

静态变量和实例变量的区别?

静态变量存储在方法区,属于类所有。实例变量存储在堆当中,其引用存在当前线程栈。

能否创建一个包含可变对象的不可变对象?

java 创建对象的几种方式

switch 中能否使用 string 做参数

switch 能否作用在 byte, long 上?

String s1=”ab”, String s2=”a”+”b”, String s3=”a”, String s4=”b”, s5=s3+s4 请问 s5==s2 返回什么?

你对 String 对象的 intern()熟悉么?

Object 中有哪些公共方法?

  1. equals()

  2. clone()

  3. getClass()

  4. notify(),notifyAll(),wait()

  5. toString

java 当中的四种引用

WeakReference 与 SoftReference 的区别?

为什么要有不同的引用类型

java 中==和 eqauls()的区别,equals()和`hashcode 的区别

equals()和 hashcode()的联系

a.hashCode()有什么用?与 a.equals(b)有什么关系

有没有可能两个不相等的对象有相同的 hashcode

可以在 hashcode 中使用随机数字吗?

a==b 与 a.equals(b)有什么区别

3*0.1==0.3 返回值是什么

a=a+b 与 a+=b 有什么区别吗?

short s1= 1; s1 = s1 + 1; 该段代码是否有错,有的话怎么改?

short s1= 1; s1 += 1; 该段代码是否有错,有的话怎么改?

& 和 &&的区别

首先记住 &是位操作,而 &&是逻辑运算符。另外需要记住逻辑运算符具有短路特性,而 &不具备短路特性。

public class Test{ static String name; public static void main(String[] args){ if(name!=null&userName.equals("")){ System.out.println("ok"); }else{ System.out.println("erro"); } }}
复制代码

以上代码将会抛出空指针异常。

一个 java 文件内部可以有类?(非内部类)

只能有一个 public 公共类,但是可以有多个 default 修饰的类。

如何正确的退出多层嵌套循环?

  1. 使用标号和 break;

  2. 通过在外层循环中添加标识符

内部类的作用

final, finalize 和 finally 的不同之处

clone()是哪个类的方法?

深拷贝和浅拷贝的区别是什么?

static 都有哪些用法?

final 有哪些用法

数据类型相关

java 中 int char,long 各占多少字节?


64 位的 JVM 当中,int 的长度是多少?

int 和 Integer 的区别

int 和 Integer 谁占用的内存更多?

String, StringBuffer 和 StringBuilder 区别

String 和 StringBuffer

StringBuffer 和 StringBuilder

什么是编译器常量?使用它有什么风险?

java 当中使用什么类型表示价格比较好?

如何将 byte 转为 String

可以将 int 强转为 byte 类型么?会产生什么问题?


关于垃圾回收

你知道哪些垃圾回收算法?

垃圾回收从理论上非常容易理解,具体的方法有以下几种:

1. 标记-清除

2. 标记-复制

3. 标记-整理

4. 分代回收

如何判断一个对象是否应该被回收

简单的解释一下垃圾回收

调用 System.gc()会发生什么?


进程,线程相关

说说进程,线程,协程之间的区别

你了解守护线程吗?它和非守护线程有什么区别

什么是多线程上下文切换

创建两种线程的方式?他们有什么区别?

Thread 类中的 start()和 run()方法有什么区别?

怎么检测一个线程是否持有对象监视器

Runnable 和 Callable 的区别

什么导致线程阻塞

阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪),学过操作系统的同学对它一定已经很熟悉了。Java 提供了大量方法来支持阻塞,下面让我们逐一分析。


wait(),notify()和 suspend(),resume()之间的区别

产生死锁的条件

为什么 wait()方法和 notify()/notifyAll()方法要在同步块中被调用

wait()方法和 notify()/notifyAll()方法在放弃对象监视器时有什么区别

wait()与 sleep()的区别

为什么 wait, nofity 和 nofityAll 这些方法不放在 Thread 类当中

怎么唤醒一个阻塞的线程

什么是多线程的上下文切换

synchronized 和 ReentrantLock 的区别

FutureTask 是什么

一个线程如果出现了运行时异常怎么办?

Java 当中有哪几种锁

如何在两个线程间共享数据

如何正确的使用 wait()?使用 if 还是 while?

什么是线程局部变量 ThreadLocal

ThreadLoal 的作用是什么?

生产者消费者模型的作用是什么?

写一个生产者-消费者队列

使用阻塞队列来实现

//消费者public class Producer implements Runnable{ private final BlockingQueue<Integer> queue; public Producer(BlockingQueue q){ this.queue=q; } @Override public void run() { try { while (true){ Thread.sleep(1000);//模拟耗时 queue.put(produce()); } }catch (InterruptedException e){ } } private int produce() { int n=new Random().nextInt(10000); System.out.println("Thread:" + Thread.currentThread().getId() + " produce:" + n); return n; }}//消费者public class Consumer implements Runnable { private final BlockingQueue<Integer> queue; public Consumer(BlockingQueue q){ this.queue=q; } @Override public void run() { while (true){ try { Thread.sleep(2000);//模拟耗时 consume(queue.take()); }catch (InterruptedException e){ } } } private void consume(Integer n) { System.out.println("Thread:" + Thread.currentThread().getId() + " consume:" + n); }}//测试public class Main { public static void main(String[] args) { BlockingQueue<Integer> queue=new ArrayBlockingQueue<Integer>(100); Producer p=new Producer(queue); Consumer c1=new Consumer(queue); Consumer c2=new Consumer(queue); new Thread(p).start(); new Thread(c1).start(); new Thread(c2).start(); }}
复制代码

使用 wait-notify 来实现

如果你提交任务时,线程池队列已满,这时会发生什么

为什么要使用线程池

java 中用到的线程调度算法是什么

Thread.sleep(0)的作用是什么

什么是 CAS

什么是乐观锁和悲观锁

ConcurrentHashMap 的并发度是什么?

ConcurrentHashMap 的工作原理

jdk 1.6:

ConcurrentHashMap 是线程安全的,但是与 Hashtablea 相比,实现线程安全的方式不同。Hashtable 是通过对 hash 表结构进行锁定,是阻塞式的,当一个线程占有这个锁时,其他线程必须阻塞等待其释放锁。ConcurrentHashMap 是采用分离锁的方式,它并没有对整个 hash 表进行锁定,而是局部锁定,也就是说当一个线程占有这个局部锁时,不影响其他线程对 hash 表其他地方的访问。

具体实现:ConcurrentHashMap 内部有一个 Segment.

jdk 1.8

在 jdk 8 中,ConcurrentHashMap 不再使用 Segment 分离锁,而是采用一种乐观锁 CAS 算法来实现同步问题,但其底层还是“数组+链表->红黑树”的实现。

CyclicBarrier 和 CountDownLatch 区别

java 中的++操作符线程安全么?

你有哪些多线程开发良好的实践?


关于 volatile 关键字

可以创建 Volatile 数组吗?

volatile 能使得一个非原子操作变成原子操作吗?

volatile 类型变量提供什么保证?


关于集合

Java 中的集合及其继承关系

关于集合的体系是每个人都应该烂熟于心的,尤其是对我们经常使用的 List,Map 的原理更该如此.这里我们看这张图即可:


poll()方法和 remove()方法区别?

LinkedHashMap 和 PriorityQueue 的区别

WeakHashMap 与 HashMap 的区别是什么?

ArrayList 和 LinkedList 的区别?

ArrayList 和 Array 有什么区别?

ArrayList 和 HashMap 默认大小?

Comparator 和 Comparable 的区别?

如何实现集合排序?

如何打印数组内容

LinkedList 的是单向链表还是双向?

TreeMap 是实现原理

遍历 ArrayList 时如何正确移除一个元素

什么是 ArrayMap?它和 HashMap 有什么区别?

HashMap 的实现原理

Fail-fast 和 Fail-safe 有什么区别


关于日期

SimpleDateFormat 是线程安全的吗?

如何格式化日期?


关于异常

简单描述 java 异常体系

什么是异常链

throw 和 throws 的区别


关于序列化

Java 中,Serializable 与 Externalizable 的区别


关于 JVM

JVM 特性

简单解释一下类加载器

简述堆和栈的区别

简述 JVM 内存分配


其他

java 当中采用的是大端还是小端?

XML 解析的几种方式和特点

JDK 1.7 特性

JDK 1.8 特性

Maven 和 ANT 有什么区别?

JDBC 最佳实践

IO 操作最佳实践

为了让学习变得轻松、高效!帮助大家在成为架构师的道路上披荆斩棘。


需要全部面试题及答案的朋友们 点击这里 即可啦~~~








同时希望大家获取到之后不要做收藏党!而是能够花一些时间认真看完文档,让它真正发挥出价值来。

用户头像

马小乎

关注

程序不是年轻的专利,但是,它属于年轻! 2021.06.04 加入

java知识分享,更多免费资料,大厂面试,数据架构,分布式,spring,JVM,加:maxiao-112

评论

发布
暂无评论
巩固Java基础,备战来年跳槽——你的薪资自己说了算