Java知识点
2020-07-28 10:16:11 3 举报
AI智能生成
JAVA基础面试知识
作者其他创作
大纲/内容
Java
容器
集合
Collection
List
ArrayList
(1)底层原理是什么?
(2)add操作是怎样的?
(3)怎样实现扩容?
(4)set操作是怎样的?
(5)get操作怎样的?
(6)remove操作是怎样的?
(7)删除时容器会变小吗?
(8)有哪些属性,具体含义是什么?
LinkedList
(1)底层原理是什么?
(2)add操作是怎样的?
(3)remove操作是怎样的?
(4)get操作时怎样的?
(5)有哪些属性,具体含义是什么?
Vector
(1)底层原理是什么?
(2)如何扩容?
(3)为什么线程安全?
CopyOnWriteArrayList
(1)底层原理是什么?
(2)写原理?
(3)读原理?
(4)缺点?
Set
HashSet
(1)底层原理是什么?
(2)特点是什么?
TreeSet
(1)底层原理是什么?
(2)特点是什么?
LinkedHashSet
(1)底层原理是什么?
(2)特点是什么?
CopyOnWriteArraySet
(1)底层原理是什么?
映射
Map
HashMap
(1)底层原理是什么?
(2)key的hashCode和数组是怎么对应的?
(3)为什么计算hash值时要将hashCode做异或运算?
(4)put方法怎么操作的?
(5)如何扩容?
(6)get方法是怎样操作的?
(7)remove方法是怎样操作的?
(8)HashMap和HashTable的区别是什么?
HashTable
(1)底层原理是什么?
(2)保证线程同步的方式是什么?
(3)key的hashCode和数组下标是怎么对应的?
(4)特点?
TreeMap
(1)底层原理是什么?
(2)特点?
LinkedHashMap
(1)底层原理是什么?
(2)两种遍历顺序都是什么?
(3)特点?
ConcurrentHashMap
(1)底层原理是什么?
(2)如何保证线程安全?
(3)ConcurrentHashMap和HashTable的区别是什么?
容器中的设计模式
迭代器模式
适配器模式
多线程
进程与线程
(1)什么是进程?
(2)什么是线程?
(3)线程的基本状态?
并行与并发
(1)什么是并行?
(2)什么是并发?
(3)并行和并发的区别?
Java内存模型JMM
Thread
(1)创建线程的方式有哪些?
守护线程
(1)什么是守护线程?
(2)守护线程的特点?
(3)如何创建守护线程?
线程优先级
(1)如何设置线程的优先级?
生命周期
(1)有哪些常用方法?
(2)线程有哪些状态?
ThradLocal
(1)ThreadLocal什么作用?
(2)什么原理?
(3)怎么使用?
(4)使用案例有什么?
线程安全
(1)并发编程的三个问题
原子性问题
可见性问题
有序性问题
happen-before原则
(2)常用的解决线程安全问题的方法有哪些?
(3)加锁实现线程安全怎样操作?
(4)volatile
(1)解决了什么问题
(2)原理和实现机制
(3)使用场景
(5)锁
synchronized
(1)解决了什么问题
(2)synchronized的特性
(3)修饰方法、静态方法、代码块的区别是什么?
(4)访问锁的各种场景
(5)原理
(6)锁优化
锁升级
锁消除
锁粗化
(7)synchronized代码块的优化
Lock
怎么使用?
AQS
(8)Lock的常用子类介绍?
synchronized和Lock的区别?
(8)Aotmic系列
什么原理?
cas是什么原理?
Aotomic怎么实现?
线程池
(1)如何创建线程池?
死锁
(1)什么死锁?
(2)死锁有什么类型?
缓存一致性原则
反射
(1)反射的作用?
(2)优缺点?
Class
(1)Class类什么用?
(2)获取Class对象的方式有哪些?
(3)如何根据Class创建对象?
(4)获取构造器方法?
(5)获取成员变量方法?
(6)获取成员方法?
(7)如何判断类的类型?
(8)基本类型有可以获取Class对象吗?
Method
(1)可以获取方法的信息有哪些?
(2)如何使用?
(3)如何反射使用类的私有方法?
Field
(1)可以获取的变量信息有哪些?
(2)如何使用?
(3)如何反射使用类的私有变量?
Constructor
(1)如何使用?
泛型
(1)什么是泛型?
(2)泛型是如何工作的?
(3)什么是类型擦除?
(4)什么是泛型中的限定通配符和非限定通配符?
(5)如何编写一个泛型方法,让它能接受泛型参数并返回泛型类型?
(6)Java中如何使用泛型编写带有参数的类?
IO
IO模型
(1)有哪些?
(2)阻塞IO
(3)非阻塞IO
(4)多路复用IO
(5)信号驱动IO
(6)异步IO
IO设计模式
传统
多线程
线程池
高性能新型
Reactor
Proactor
磁盘操作
File
(1)File类的作用?
(2)有哪些操作?
网络操作
(1)怎样获取网络中的流?
BIO
字节流
InputStream
(1)如何使用字节流读文件?
FileInputStream
ByteArrayInputStream
ObjectInputStream
(1)使用读写对象?
PipedInputStream
FilterInputStream
DataInputStream
BufferedInputStream
LineNumberInputStream
PushbackInputStream
SequenceInputStream
StringBufferInputStream
OutPutStream
(1)如何使用字节流写文件?
FileOutputStream
ByteArrayOutputStream
FilterOutputStream
BufferedOutputStream
DataOutputStream
PrintStream
ObjectOutputStream
PipedOutputStream
字符流
Reader
InputStreamReader
FileReader
BufferedReader
LineNumberReader
CharArrayReader
FilterReader
PushbackReader
PipedReader
StringReader
Writer
OutputStreamWriter
FileWriter
BufferedWriter
CharArrayWriter
FilterWriter
PipedWriter
PrintWriter
StringWriter
(1)字节流和字符流的区别?
NIO
(1)IO和NIO的区别?
(1)流与块的含义?
(2)如何使用?
缓冲区
(1)缓冲区是什么?
(2)缓冲区的分类?
(3)缓冲区状态量有哪些?
(4)如何使用?
通道
(1)通道是什么?
(2)通道的种类?
(3)如何使用?
选择器
(1)什么是选择器?
(2)怎么使用选择器?
(3)注册事件有哪些?
AIO
示例
异常
(1)异常的继承体系
Throwable
Error
OutOfMemoryError
...
Exception
RuntimeException
NullPointerException
IllegalArgumentException
IOException
...
(2)必须捕获的异常
(3)不需要捕获的异常
(4)常见的运行时异常
(5)异常的捕获
(6)异常的处理
(7)try catch finally执行顺序
断言
注解
(1)什么是注解?
(2)用途有哪些?
(3)元注解作用是什么?
(4)元注解有哪些?
(5)内置注解有哪些?
正则表达式
序列化
Serializable
(1)Serializable是什么?
transient
(1)transient是什么?
TCP例子
UDP例子
JVM
运行时数据区
方法区
运行时常量池
class文件常量池
堆
堆内存划分
标记指针
虚拟机栈
栈帧
局部变量表
操作数栈
动态链接
方法出口信息
本地方法栈
程序计数器
垃圾回收
(1)如何判定对象为垃圾对象
(1)可作为GCRoot的对象
(2)如何回收垃圾
(1)回收策略有哪些
(2)内存区域与回收策略
(3)垃圾收集器有哪些
(4)HotSpot为什么要分为新生代和老年代?
(3)引用
(4)不可达的对象并非“非死不可”
(5)如何判断一个常量是废弃常量
(6)如何判断一个类是无用的类
(7)minor gc运行的很频繁可能是什么原因引起的?
(8)minor gc运行的很慢有可能是什么原因引起的?
(9) 请问java中内存泄漏是什么意思?什么场景下会出现内存泄漏的情况?
类加载过程
加载
类加载时机
类加载器
类加载器分类
类加载过程
类加载机制
双亲委派机制的好处
链接
初始化
数据库
关系型数据库
Mysql
基础
数据库操作
创建
查询
修改
删除
使用
表操作
创建
查询
修改
删除
数据操作
增
删
改
查
查类型
直接查数据
去重
计算
起别名
条件
排序
聚合函数
分组查询
分页查询
约束
主键
非空
唯一
外键
条件分支
if then elseif then else end if
case when then else end
变量
连接
内连接
交叉连接
相等连接
不等连接
自然连接
外连接
左外连接
右外连接
数据库设计规范
三大范式
第一范式
第二范式
第三范式
执行顺序
执行计划
https://www.cnblogs.com/wyq178/p/11576065.html
连接器
缓 存
分析器
优化器
执行器
存储引擎
存储引擎
InnoDB
存储:存储限制64TB
事务:支持事务
索引:聚簇索引/非聚簇索引
锁:支持行级锁和表级锁,默认使用行级锁
外键:支持外键
MyISAM
存储:存储限制256TB
事务:不支持事务
索引:非聚簇索引
锁:默认使用表级锁
外键:不支持外键
Memory
Merge
archive
事务
使用
基本要素/特性ACID
A原子性Actomicty
C一致性Consistency
I隔离性Isolation
D持久性Durability
事务的并发问题
脏读
幻读
不可重复读
丢失更新
事务的隔离级别
读未提交Read Uncommited
读已提交Read Commited
可重复读Repeatable Read
串行化Serialization
多版本并发控制MVCC
https://blog.csdn.net/Waves___/article/details/105295060
什么是多版本并发控制
隐藏字段
Read View结构
Undo log
insert undo log
update undo log
记录行修改的具体流程
Read View中的可见性算法
RR和RC的Read View产生区别
为什么尝试用读已提交级别?
autocommit
索引
创建索引
删除索引
数据结构
B+Tree
Page
单个page大小默认是16K
索引类型(逻辑分类)
主键索引
常规非主键索引
唯一索引
复合索引
前缀索引
全文索引
外键索引
覆盖索引
索引类型(叶子节点数据分类)
聚簇索引
为什么推荐使用int型自增字段作为主键
非聚簇索引(辅助索引)
索引扫描方式
紧凑索引扫描
松散索引扫描
覆盖索引扫描
锁
添加锁
锁的分类
表级锁与行级锁
共享锁与排他锁(手动)
意向锁(自动)
记录锁
间隙锁
Next-Key锁
sql优化
sql注入
面试题
(1)如何创建和删除数据库
(2)MyISAM与InnoDB的区别?
(3)char和varchar的区别?
(4)建表语句中varchar(50)中50的指是什么?
(5)int(10)中的10表示什么意思
(6)获取当前日期
(7)获取当前Mysql版本
(8)什么是触发器,MySQL都有哪些触发器?
(9)MySQL存储引擎
(10)MySQL中的锁机制
(11)MySQL中的事务
(12)Innodb引擎有什么特性?
(13)MySQL的存储过程
(14)什么是索引?什么场景使用?
(15)索引的种类有哪些?
(16)索引如何创建与删除?
(17)索引对性能有哪些影响?
(18)MySQL创建和使用索引的注意事项?
(19)创建MySQL联合索引应该注意什么?
(20)列值为NULL时,查询是否会用到索引?
(21)以下语句是否会使用索引?
(22)MyISAM索引与InnoDB索引的区别?
(23)MySQL如何进行慢SQL优化?
(24)索引失效的情况
(25)MySQL的乐观锁和悲观锁?
(26)脏读、幻读、不可重复读指什么?
(27)事务有哪些隔离级别?
(28)左连接、右连接、内连接和全外连接的区别
非关系型数据库
redis
数据结构与算法
算法
排序
交换排序
冒泡排序
快速排序
插入排序
插入排序
希尔排序
选择排序
选择排序
堆排序
归并排序
计数排序
桶排序
基数排序
查找
顺序查找
二分查找
深度优先搜索
广度优先搜索
贪心算法
分治算法
动态规划
回溯算法
分支限界算法
Dijkstra算法
Floyd
其他
扫描线
排序Map
滑动窗口
拒绝采样
随机数
数学
链表
哈希表
Map
数组
蓄水池抽样
几何
队列
栈
堆
位运算
树
并查集
图
设计
拓扑排序
字典树
树状数组
线段树
记忆化
二叉搜索树
递归
极小化极大
双指针
数据结构
线性表
顺序表
链式表
单向链表
双向链表
循环链表
栈
顺序栈
链栈
队列
顺序队列
循环队列
链队列
树
二叉树
分类
满二叉树
完全二叉树
堆
大顶堆
小顶堆
哈夫曼树
哈夫曼编码
平衡二叉树
AVL树
二叉搜索树
红黑树
遍历
先序遍历(根-左-右)
中序遍历(左-根-右)
后序遍历(左-右-根)
层次遍历
多叉树
B树
查找节点
插入节点
删除节点
左旋
B+树
查找节点
插入节点
删除节点
图
分类
有向图/无向图
完全/稠密/稀疏/网
术语
表示方法
邻接矩阵
邻接表
遍历
广度优先搜索
深度优先搜索
哈希表
哈希函数
直接定址法
数字分析法
平方取中法
折叠法
除留余数法
随机数法
处理哈希冲突
开放定址法
再哈希法
链地址法
建立一个公共溢出区
操作系统
计算机网络
OSI体系结构
TCP/IP体系结构
五层协议体系结构
网站通信过程
数据链路层
传输的是MAC帧,首部+IP数据报+尾部
网络层
(1)有无连接?
(2)与IP协议配套使用的协议有哪些?
(1)介绍地址解析协议ARP?
(2)介绍网际控制报文协议 ICMP?
(3)介绍网际组控制协议IGMP?
(3)各层的中专设备?
(4)IP地址的编址方式?
(1)介绍分类的IP地址?
(2)介绍子网?
(3)介绍无域间路由选择CRID(构成超网)?
(5)IP地址和硬件地址?
(6)主机间数据传输步骤?
运输层
(1)两个重要协议
TCP
特点
套接字
TCP连接
TCP数据报格式
可靠传输的协议
停止等待协议
滑动窗口协议(连续ARQ协议)
流量控制
三次握手
四次挥手
(1)为什么连接的时候是三次握手,关闭的时候却是四次握手?
(2)为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
(3)为什么不能用两次握手进行连接?
(4)如果已经建立了连接,但是客户端突然出现故障了怎么办?
UDP
特点
首部格式
(2)端口
(1)端口的分类
应用层
域名解析DNS
(1)域名解析到ip过程
(2)域名结构
(1)顶级域名
(2)中国二级域名
(3)域名服务器
文件传输协议FTP
远程终端协议
万维网
统一定位符URL
超文本传输协议HTTP
HTTP
(1)常用请求方法
(2)HTTP的无状态
(3)HTTP的持久连接
(4)HTTP的传输效率
(5)常见的响应状态码
(6)HTTP首部
请求首部常用字段
响应首部常用字段
(7)HTTP各版本的区别
HTTPS
(1)HTTPS和HTTP的区别
(2)HTTPS建立连接请求数据步骤
网络安全
两类加密体制
(1)说明对称密钥
(2)说明公钥私钥
(3)说明数字签名
(4)如何使用公钥私钥实现数字签名
(5)对称密钥如何分配
(6)公钥私钥如何分配
Linux
常用指令
文件夹及文件管理
查看
ls
ls、ls -l
pwd
pwd
创建
touch
touch 文件
mkdir
mkdir 文件夹、mkdir -p 文件夹路径
切换
cd
cd ..、cd ~、cd
转移
mv
mv 源文件 目标文件夹、mv 文件 文件(重命名)
复制
cp
cp 文件s 目标目录
链接
ln
ln 源文件 快捷方式名、ln -s 源目录 快捷方式名
输出
echo
echo 字符串、echo $PATH、echo 字符串 > 文件、echo `指令`
删除
rm
rm -s 文件/文件夹
rmdir
rmdir -p 文件夹路径
文件内容操作
cat
cat 文件、cat >文件名 <<EOF
head
head -n 数字 文件、head -c 数字 文件
tail
tail -n 数字 文件、tail -c 数字 文件
more
more 文件
less
less 文件
wc
wc -l 文件、wc -c 文件、wc -w 文件
cmp
diff
查找
find
find -name 文件名
which
which 指令名
whereis
whichis 指令名
locate
locate 名字
权限
chmod
chmod [u/g/o/a][=/+/-][r/w/x/s] 文件、chmod -R [u/g/o/a][=/+/-][r/w/x/s] 文件
chown
chown -c 拥有者:群组 文件、chown -R 拥有者:群组 文件
打包
tar
tar -cvf 目标名称 文件、tar -zcvf 目标名称 文件、tar -ztcf 文件
安装卸载软件
rpm
rpm -ivh XXX.rpm、rpm -e XXX.rpm、rpm -U XXX.rpm
网络
ssh
ssh -l 用户名 ip
ifconfig
ifconfig
ping
ping
netstat
netstat
系统信息
df
df -h
du
du -ah 文件
date
date
cal
cal
ps
ps
top
top
kill
kill pid
free
free
关机
shutdown
shutdown -h now、shutdown -c、shutdown +分钟数、shutdown -r +分钟数、shutdown -h 时:分
MVP
MVVC
JavaWeb
Tomcat
缺省端口是多少,怎么修改
有哪几种Connector运行模式
有哪几种部署方式
Servlet
生命周期
Get和Post的区别
HttpServlet介绍
Servlet的两个uri路径指定方式
Servlet域范围,以及域获取方式
Request
Response
Session/Cookie
Cookie和Session的区别
Session在客户端、服务端各自关闭的情况下是否能保证依然使用同一个
Cookie的存活时间
ServletContext
转发、重定向
编码
JSP
JSP的静态包含和动态包含的区别
内置对象
Mybatis
Spring
解释IOC
SpringBean生命周期
Bean初始化和销毁时的回调
Bean初始化前后调用的处理器
SpringBean作用域
SpringBean的继承
依赖注入的方式
构造器注入
Set注入
注入集合
注入null和""
Git
基本命令
git只能跟踪文本文件的修改
区间划分
工作区
版本库
暂存区
分支
HEAD指针
远程仓库
使用.ssh与Github建立连接
创建ssh
绑定ssh
添加远程仓库
分支管理
操作示例
创建
切换
查看
提交
解决冲突
合并
删除分支
分支策略
多人合作
抓取
忽略特殊文件
步骤
搭建Git服务器
搜集面试题
数据库
实践中如何优化MySQL
什么情况下设置了索引但无法使用/SQL优化
数据库索引底层结构
java
IO
IO多路复用机制
HashMap的实现原理、底层结构
反射中class.forName和classloader的区别
java中的队列有哪些,有什么区别
详谈下java的内存模型以及列举几种gc算法和算法执行原理
java是否会出现内存泄漏,怎么快速定位
数据结构
快速排序的思想、时间复杂度、实现
计算机网络
输入 www.baidu.com 在浏览器的完整过程,越详细越好
TCP三次握手、四次挥手
https原理
框架
springmvc的运行原理和spring的事务隔离级别
spring IOC和AOP的实现原理
springCloud和Dubbo的优缺点
笔试
输入
输出
Math类常用方法
Arrays类常用方法
收藏
收藏
0 条评论
下一页