社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
这就是一天坑,基本问不完,难度也是拉满的那种...
Q:进程和线程的区别?
Q:进程间通信方式?
核心目的是交换数据
Q:线程间通信方式?
核心目的是同步
Q:Callable、Runnable区别?
Q:Future和Callable的关系?
Q:创建线程的方法?
Q:volatile关键字的作用?
Q:synchronized的用法?
Q:讲一下Java内存模型?
网上一大堆,引用前人的清明上河图
Q:CountDownLatch和CyclicBarrier了解吗?
Q:Semaphore用法?
控制一组资源的使用,通过acquire()和release()获取和释放这组锁。
Q:ThreadLocal作用?
修饰变量,控制变量作用域,使变量在同一个线程内的若干个函数中共享。
Q:单例与多例的区别?
Q:锁释放的时机?
Q:notify唤醒时机?
notify后不会立刻唤醒处于线程等待池中的线程,而是等当前同步代码块执行完,才释放当前的对象锁,并唤醒等待线程。
Q:notify和notifyAll区别?
notify通知一个线程获取锁,而notifyAll通知所有相关的线程去竞争锁
Q:讲一下Lock?
Lock是为了弥补synchronized的缺陷而诞生的,主要解决两种场景
Lock是一个类,并非Java本身带的关键字,相对于synchronized而言,需要手动释放锁。
Q:锁的种类?
集合相对容易,常规送分题,基本都会问到HashMap
Q:TreeSet特性?
内部元素通过compare排序。
Q:LinkedHashMap特性?
内部有个双向链表维护了插入key的顺序,使得map能够依据插入key的顺序迭代。
Q:ArrayList与Vector的差别?
ArrayList是非线程安全的,Vector是线程安全的。
Q:LinkedList与ArrayList的差别?
Q:HashMap与HashTable的差别?
Q:Set与List的差别?各自有哪些子类?
Set不允许重复元素,List允许重复元素,List有索引
Q:hashCode()、equals()、==区别?
Q:Java容器中添加的对象是引用还是值?
引用
Q:Iterator和ListIterator的区别?
Q:HashMap实现?
内容巨多,引用大佬面经,值得一看,目录供大家参考
PS:HashSet是通过HashMap实现的
Q:ConcurrentHashMap和HashTable区别?
这块主要介绍JVM内存的划分以及GC算法
Q:什么是内存泄漏和内存溢出?
内存泄漏最后会导致没有足够的空间分配对象,从而导致内存溢出,当然也可能开始分配过大的对象导致内存溢出
Q:导致内存溢出的因素?
Q:JVM内存划分?
基本说出上面三条就可以了,更详细的见下图
Q:简单说一下垃圾回收?
这可不简单...
垃圾定义:
堆中内存分布:
垃圾回收算法:
Q:Minor GC、Major GC和 Full GC的区别?
Q:Full GC触发时机?
Q:什么是常量池?
常量池分为静态常量池和运行时常量池。
包含的信息:
该问题一般会引出字符串常量比较
String s1 = "Hello";
String s2 = "Hello";
String s3 = "Hel" + "lo";
String s4 = "Hel";
String s5 = "lo";
String s6 = s4 + s5;
String s7 = "Hel" + new String("lo");
String s8 = new String("Hello");
String s9 = s8.intern();
System.out.println(s1 == s2); // true,直接取自常量池
System.out.println(s1 == s3); // true,在编译时会优化成常量池内字符串的拼接,区别 s6
System.out.println(s1 == s6); // false,本质上是变量拼接,区别 s3
System.out.println(s1 == s7); // false,含有对象 new String("lo")
System.out.println(s1 == s8); // false,对象与字符串常量比较
System.out.println(s1 == s9); // true,字面量比较
复制代码
面试时有人问到过,回去大概查了下
Q:讲一下类加载过程?
加载:将*.class文件通过各种类加载器装载到内存中
链接:分为三步
初始化:对类变量初始化,执行类变量的构造器
Q:Java初始化顺序?
这是在爱奇艺碰到的一面试道题,当时差点两眼一抹黑过去了...头一次发现这么多东西要初始化
类内容(静态变量、静态初始化块) => 实例内容(变量、初始化块、构造器)
父类的(静态变量、静态初始化块)=> 子类的(静态变量、静态初始化块)=> 父类的(变量、初始化块、构造器)=> 子类的(变量、初始化块、构造器)
Q:Java类加载器的种类?
Q:双亲委派模式了解吗?
我理解的深度比较浅,个人理解,委派就是加载类时先看上层加载过没,如果加载过了,当前就不加载了,直接使用当成加载器加载的类。
其次是加载顺序,System->Extension->Boostrap
优点:
这些问题很弱鸡,但考的也比较多
Q:面向对象的三大特性?
顺口溜一般的背出来:封装、继承、多态
然后会让你讲讲这三个特性如何体现,大家自己想想吧,言之有理即可
Q:Java中接口和抽象类区别?
Q:重载和重写?
猪脑子,老记混
Q:例举一下你了解的设计模式?
一般说5、6个,有个样例就行了
Q:手撸单例?
撸完,让你讲讲内部细节,volatile或多例问题
public class Singleton {
private volatile static Singleton singleton;
private Singleton(){}
public static Singleton getSingleton(){
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
复制代码
Q:TCP3次握手4次挥手?
基本画张图就K.O.了,内部的问题也建议看一下
Q:TCP为什么是一定要是3次握手,而不是2次或3次以上?
2次挥手的问题
在第1次建立过程中,client请求链接在网络中滞留过久,导致client发送第2次请求,建立完毕后,这时第1次的请求到达server,server接收又维护一链接,但该链接实际上已经作废,浪费了server端的资源。
3次以上的方案
理论上,做到3次以上是可行的,但真正想做到一个完美可靠的通信是不可能的,因为每次答复都是对上次请求的响应,但该次答复在不可靠的信道中仍是会丢失的,考虑到现实效率问题,3次足以。
Q:TCP为什么是4次挥手,而不是3次呢?
Q:TCP半连接池与全连接池?
Q:TCP和UDP的区别?
Q:TCP和UDP的应用?
Q:TCP/IP与OSI模型?
TCP/IP模型,自下而上
OSI模型,自下而上
Q:ping命令基于哪种协议?
ICMP
Q:阻塞式和非阻塞式IO区别?
阻塞式
非阻塞式
用数据库做过开发,但是了解的不深入,面试问我会不会写SQL时,我多答“简单的可以,复杂的尝试一下”...SQL复杂起来真不是人写的...
Q:聚集索引和非聚集索引区别?
Q:where、group by、having执行顺序?
Q:星型、雪花结构?
Q:SQL纵向转横向,横向转纵列?
基本上,除了 group by + 聚集函数 外,这是最难的 SQL 题了
sum(case when A='a' then B else 0 end) as D
这里需要用sum或其他聚集函数,因为作用在一个group中
核心用union
记住这两条做到举一反三就可以了
Q:脏读、不可重复读、幻读?
这引出事务隔离级别
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交(read-uncommitted) | 是 | 是 | 是 |
不可重复读(read-committed) | 否 | 是 | 是 |
可重复读(repeatable-read) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
Q:join如何实现的?
等我有空来填坑...
需要面试方面的资料的朋友可以加一下交流分享群:838498680
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!