秋招面试Java开发遇到的基础知识总结

https://github.com/hhive/MyJava/tree/master/Interview

主要是针对在面试Java开发,web后端两个岗位时遇到的面试或笔试内容的解决方法,因为内容较多,我就把内容分类做成了word,放在github里,点击链接直达,希望有更多人能一起补充一起成长,以下是内容目录。打开word-视图-导航窗格,可以很方便的进行内容间的跳转。

秋招面试Java开发遇到的基础知识总结_第1张图片

目录

问题:... 6

一、       Java面向对象概述和三大特性... 6

1、面向对象思想... 6

2、类和对象的关系... 6

3、封装思想... 7

4、继承和类实例化过程... 9

5、多态、反射和组件解耦... 13

6、重写和重载... 14

A.    重写... 14

方法的重写规则... 14

B.    重载... 17

重载规则: 17

C.    重写与重载之间的区别... 18

二、       Java基础... 19

1.    变量的创建... 19

2.    访问控制... 20

3.    代码块... 22

A.    普通代码块... 22

B.    构造代码块... 22

C.    静态代码块: 23

4.    Static. 25

5.    Final 25

6.    Transient 26

7.    Volatile. 27

8.    并发编程的三大特性... 27

9.    Interface与abstract类... 27

10.         数据类型的默认值和长度... 29

A.    数据类型分类... 29

B.    默认值... 29

C.    长度... 29

D.    不同数据类型运算转换... 30

E.    包装器类型... 31

11.         Java中创建对象的5种方式... 31

12.         Java运算符优先级... 32

13.         Super 33

14.         强引用,软引用,弱引用,虚引用?... 33

15.         Java中final、finally和finalize的区别... 34

16.         进程间通信... 35

17.         补码... 35

三、       多线程... 36

1.    状态... 36

2.    创建线程的方法... 37

A.    通过实现 Runnable 接口... 37

B.    通过继承 Thread 类本身... 39

C.    通过 Callable 和 Future 创建线程。... 41

D.    创建线程的三种方式的对比... 42

E.    线程池... 42

a)    线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。(是什么)... 42

b) 那么,我们为什么需要用到线程池呢?每次用的时候手动创建不行吗?... 42

c)    线程池都是通过线程池工厂创建,再调用线程池中的方法获取线程,再通过线程去执行任务方法。... 43

d)    这里介绍两种使用线程池创建线程的方法... 43

3.    线程间的通信方式... 45

A.    synchronized同步... 45

B.    while轮询的方式... 47

C.    wait/notify机制... 49

D.          管道通信... 52

4.    产生死锁的四个必要条件... 52

5.    线程的优先级... 53

6.    JAVA多线程和并发基础面试问答... 53

1)    进程和线程之间有什么不同?... 53

2)    多线程编程的好处是什么?... 53

3)    用户线程和守护线程有什么区别?... 54

4)    我们如何创建一个线程?... 54

5)    有哪些不同的线程生命周期?... 54

6)    可以直接调用Thread类的run()方法么?... 54

7)    如何让正在运行的线程暂停一段时间?... 55

8)    你对线程优先级的理解是什么?... 55

9)    什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing)?... 55

10)         在多线程中,什么是上下文切换(context-switching)?... 55

11)         你如何确保main()方法所在的线程是Java程序最后结束的线程?... 56

12)         线程之间是如何通信的?... 56

13)         为什么线程通信的方法wait(), notify()和notifyAll()被定义在Object类里?    56

14)         为什么wait(), notify()和notifyAll()必须在同步方法或者同步块中被调用?    56

15)         为什么Thread类的sleep()和yield()方法是静态的?... 57

16)         如何确保线程安全?... 57

17)         volatile关键字在Java中有什么作用?... 57

18)         同步方法和同步块,哪个是更好的选择?... 57

19)         如何创建守护线程?... 58

20)         什么是ThreadLocal?. 58

21)         什么是Thread Group?为什么不建议使用它?... 58

22)         什么是Java线程转储(Thread Dump),如何得到它?... 59

23)         什么是死锁(Deadlock)?如何分析和避免死锁?... 59

24)         什么是Java Timer类?如何创建一个有特定时间间隔的任务?... 59

25)         什么是线程池?如何创建一个Java线程池?... 60

7.    Java并发面试问题... 60

1)    什么是原子操作?在Java Concurrency API中有哪些原子类(atomic classes)?... 60

2)    Java Concurrency API中的Lock接口(Lock interface)是什么?对比同步它有什么优势?... 61

3)    什么是Executors框架?... 61

4)    什么是阻塞队列?如何使用阻塞队列来实现生产者-消费者模型?... 62

5)    什么是Callable和Future?. 62

6)    什么是FutureTask?. 63

7)    什么是并发容器的实现?... 63

8)    Executors类是什么?... 63

9)    为什么说ConcurrentHashMap是弱一致性的?以及为何多个线程并发修改ConcurrentHashMap时不会报ConcurrentModificationException?... 64

四、       集合... 64

Map的实现原理... 64

1. HashMap的数据结构... 64

数组... 64

链表... 64

哈希表... 65

2. HashMap的存取实现... 66

1)put 66

2)get 67

3)null key的存取... 68

4)确定数组index:hashcode % table.length取模... 68

5)table初始大小... 69

3. 解决hash冲突的办法... 69

4. 再散列rehash过程... 70

Map集合的四种遍历方式... 71

ArrayList和LinkedList的大致区别:... 72

五、       异常... 73

1.    异常类型... 73

2.    finally关键字... 73

3.    Java内置异常... 73

4.    异常方法... 75

5.    使用throws抛出异常... 76

6.    使用throw抛出异常... 76

Java7增强的throw语句:... 77

7.    自定义异常类... 78

8.    catch和throw同时使用... 78

9.    异常链... 79

10.         Java的异常跟踪栈... 79

11.         异常处理规则... 80

六、       设计模式... 80

1.    单例模式 Singleton. 80

2.    简单工厂模式 StaticFactory Method. 80

3.    工厂模式 Factory Method. 80

A.    介绍... 81

B.    实现... 82

4.    抽象工厂模式 Abstract Factory Method. 84

介绍... 84

实现... 85

5.    代理模式 Proxy Method. 91

6.    命令模式 Command Method. 91

7.    策略模式 Strategy Method. 91

8.    观察者模式 Observer Method. 91

介绍... 91

实现... 96

9.    生产者消费者模式 ProducerConsumer Method. 96

七、       Java内存模型... 96

1.    简介... 96

2.    堆、栈、方法区... 97

堆区: 97

栈区: 97

堆和栈的联系... 98

方法区: 98

3.    分代... 100

A.    年轻代(Young Generation)... 100

B.    年老代(Old Generation)... 100

C.    持久代(Permanent Generation)... 101

4.    常量池... 101

1.字符串常量池(String Constant Pool): 102

1.1:字符串常量池在Java内存区域的哪个位置?... 102

1.2:字符串常量池是什么?... 102

1.3:字符串常量池里放的是什么?... 102

2.class常量池(Class Constant Pool):... 103

2.1:class常量池简介:... 103

2.2:什么是字面量和符号引用:... 103

3.运行时常量池(Runtime Constant Pool):... 103

5.    垃圾回收... 103

A.    Java垃圾回收概况... 103

B.    算法... 104

a)    引用计数法(Reference Counting Collector) 104

b)    最基础的收集算法 — 标记/清除算法... 105

c)    复制算法... 107

d)    标记/整理算法... 108

e)    GC Roots 的对象... 109

f)     七种垃圾回收器... 109

g)    对象A和B循环引用,最后会不会不被GC回收?... 110

八、       JDBC.. 111

1.    JDBC是什么?... 111

2.    数据库驱动与常用接口... 111

3.    JDBC使用步骤... 113

4.    SQL语法... 117

5.    MySQL 事务... 118

事务控制语句:... 118

MYSQL 事务处理主要有两种方法:... 119

四种事务隔离级别... 119

6.    MySql索引... 120

A.    索引介绍... 120

索引原理... 120

索引的类型... 122

索引的操作... 123

B.    B+树索引原理... 126

b+树的查找过程... 126

b+树性质... 127

慢查询优化... 127

C.    建索引的几大原则... 127

D.    数据库索引和选择性的关系... 128

怎么计算索引的选择性?... 128

选择性对数据库索引有什么影响?... 129

什么时候不应该使用数据库索引?... 129

“选择性”等于多少才会使用索引?... 129

九、       反射... 130

1.    反射的概述... 130

2.    查看Class类在java中的api详解(1.7的API)... 130

3.    反射的使用(这里使用Student类做演示)... 132

A.    获取Class对象的三种方式... 132

B.    通过反射获取构造方法并使用:... 133

C.    获取成员变量并调用... 136

D.    获取成员方法并调用... 139

E.    反射main方法... 142

F.    反射方法的其它使用之---通过反射运行配置文件内容... 143

G.    反射方法的其它使用之---通过反射越过泛型检查... 145

十、       时间复杂度... 146

1.    概述... 146

时间频度... 146

2.    常见算法时间复杂度:... 147

3.    算法的时间复杂度(计算实例)... 147

部分整理的网上的内容都附有链接,需要的可以直接看原内容。

 

你可能感兴趣的:(秋招面试Java开发遇到的基础知识总结)