java面试知识体系
-
JAVA基础
- java中有几种基本类型?
Java的基本类型有8种:四种基本类型(byte,short, int, long)。两种浮点类型(float,double)。一种字符类型(char),一种布尔类型(boolean)
- String能被继承吗?
不可以,因为String类有final修饰符,而final修饰的类是不能被继承的。
- String,StringBuffer, StringBuilder的区别
两种维度来说:第一个维度:可变与不可变。String字符串因为被final修饰,所以他是不可变对象。StringBuffer,StringBuilder都继承AbstractStringBuilder,这两种对象都是可变的。第二个维度:是否线程安全。String的对象是不可变的,可以理解为常量,显然是线程安全的。StringBuffer字符串常量也是线程安全的,他也是final类别的,synchronized修饰。
StringBuilder 线程不安全,并没有对方法进行加同步锁。
- ArrayList和LinkedList的区别
首先,ArrayList和LinkedList都实现了list接口,它们有以下不同点: ArrayList是基于索引的数据接口,它的底层是数组,而LinkedList是以元素列表的形式存储数据的,linkedList的插入、添加、删除操作速度更快。LinkedList比ArrayList更占内存。
- HashMap和HashTable区别
hashMap不是线程安全的,它允许null key和null value ,而HashTable不允许,所以它是线程安全的,从执行效率上来看,因为hashMap允许null key,null value,要高于HashTable。
- BIO和NIO的区别
BIO(IO)是面向流的,NIO是面向缓冲区的。
BIO: 同步阻塞式IO,就是我们平时使用的传统IO, 它的特点是模式简单,使用方便,并发处理能力低。
NIO: 同步非阻塞Io, 是传统IO的升级,客户端和服务器端通过channel(通道)通讯,实现了多路复用。
- java中的IO流分为几种?
按功能来分:分为输入流(input)输出流(outPut)
按类型来分:字节流和字符流
字节流和字符流的区别:字节流按8位传输字节为单元输入输出数据,字符流按16位传输以字符为单位输入输出数据。
-
多线程应用
-
-
JVM知识
- 什么情况下会发生栈内存溢出
如果线程请求的栈深度大于虚拟机所允许的深度,将抛出*Error异常。如果虚拟机在动态扩展栈时,无法申请到足够的内存空间。则抛出OutOfMemoryError异常。
- JVM原理
Jvm是java的核心和基础,在java编译器和OS平台之间的虚拟处理器,他可以在上面执行java的字节码程序,java编译器只要面向JVM,生成JVM能理解的代码或字节码文件。Java源码文件经编译后成字节码程序,通过JVM将每一条指令翻译成不同平台的机器码,通过特定平台运行。
- JVM体系结构
类加载器:加载class文件;执行引擎:执行字节码或者本地方法。运行时数据区:包括方法区,堆,java栈,pc寄存器,本地方法栈。
- 垃圾收集算法
标记清除算法,复制算法,标记整理算法。
- JVM调优
调优手段主要是通过控制堆内存的各个部分的比例和GC策略来实现。
-Xms: 初始堆大小
-Xmx: 最大堆大小
-XX:NewSize=n:设置年轻代大小
-
数据库调优
- Mysql定位慢sql
Show variables like ‘%query%’
在要执行的sql前加上explain
-
微服务架构
- Spring Cloud全家桶组件
Spring cloud Netflix Eureka: 服务注册与发现:我们将自己定义的API接口注册到spring cloud Eureka上,Eureka负责服务的注册与发现。
Spring cloud Netflix Ribbon: 客户端负载均衡(简单轮询负载均衡,加权响应时间负载均衡,随机负载均衡)
Spring cloud Netflix Hystrix: 断路器
Spring cloud Netflix Zuul: 服务网关
Spring cloud Config: 分布式配置
-
Redis
- 缓存雪崩
设置失效时间时,再加上一个随机的时间数,避免在同一个时间点去查询数据库
- 缓存穿透
布隆过滤器可解决
-
Kafka
-
-
高并发
-
什么是高并发
高并发是互联网分布式架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。
高并发相关常用一些指标有:响应时间,吞吐量,每秒查询率QPS,并发用户数
- 如何提升系统的并发能力?
垂直扩展:如果预算不是问题的话,通过“增强单机硬件性能”的方式来提升系统的并发能力。
水平扩展:
-
分布式
-
本文地址:https://blog.csdn.net/jackethans/article/details/109610861
上一篇: phpwind Exp 漏洞利用