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知识

  • 什么情况下会发生栈内存溢出

如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常。如果虚拟机在动态扩展栈时,无法申请到足够的内存空间。则抛出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(服务注册与发现)

  1. 常见的注册中心解决方案有:Eureka,Consul,Zookeeper,Nacos,redis
  2. 推送方式:push/pull
  3. 非持久化存储、AP(模型)、集群节点的角色是相等的。
  4. 2.X停止开源 -Netflix oss
  5. 替换方案:spring cloud zookeeper spring cloud consul
  6. Eureka 数据同步,主从/高低水位,AP特性
  7. 三级缓存、自动保护机制、续约、服务注册
  8. 自我保护机制:心跳失败的比例在15分钟之内,低于85%的节点,Eureka server会认为这个实例出现了网络故障,直接剔除这个有问题的服务。
  • Spring cloud Netflix Ribbon (客户端负载均衡)

  1. 解析配置中的服务列表
  2. 基于负载均衡的方法来实现请求的分发(默认是用轮询的算法)
  3. 涉及到算法有轮询、随机、根据响应时间来计算、权重的轮询
  • Spring Cloud Netflix OpenFeign(声明式伪RPC)

  1. 通过接口注入@FeignClient(“目标接口”)
  2. Openfeign默认通过HttpClient方式请求目标服务地址,也可以通过配置更改为其他的方式请求。
  3. Controller层则调用注入了@FeignClient的接口,生成动态代理,从而实现调用目标服务地址。
  4. Http通信:ip/port/url;  method type: post/get  parameter: 参数
  5. 参数的解析和装载
  6. 针对指定的feignclient中的方法描述进行解析
  7. 组装成一个Request对象,发起请求。
  • Spring cloud Netflix Hystrix: 断路器

  • Spring cloud Netflix Zuul: 服务网关

  • Spring cloud Config(分布式配置中心)

  1. 配置文件application.properites: 数据库连接、常量、线程池大小等等。
  2. Apoll(携程),spring cloud,nacos(alibaba)都可以做分布式配置中心
  3. 配置的后缀写法:/{application}/{profile}/{lable} 或{application}-{profile}
  4. application-应用名称,profile-不同的配置分组,label-分支
  5. 外部更改配置文件后,可调用monitor接口实现动态刷新数据,从而达到配置客户端获取到的都是最新数据
  6. Environment远程加载配置实现

  • Redis

  • 缓存雪崩

设置失效时间时,再加上一个随机的时间数,避免在同一个时间点去查询数据库

  • 缓存穿透

布隆过滤器可解决


 

  • Mybatis

  • mybatis的框架结构

  • mybatis和数据库的交互有两种方式:
  • 1、通过传统的传递statement id和查询参数给sqlsession对象。使用sqlsession对象完成和数据库的交互。
  • mybatis提供了非常方便和简单的API,供用户实现对增删改查数据操作。
  • 2、面向接口调用方式:mybatis将配置中的每一个<mapper>节点抽象为一个Mapper接口,而接口声明的方法跟<mapper>节点中的<select/update/delete/insert>
  • 节点中的id值为Mapper接口中的方法,parameterType值表示Mapper对应方法的入参类型,resultMap值对应Mapper接口表示的返回值类型。
  • mybatis的实现原理

  • 利用反射打通java类与sql语句之间的相互切换
  • Configuration Mybatis:所有的配置信息都保存在Configuration对象中。
  • SqlSession:作为Mybatis工作的主要顶层API,表示和数据库交互时的会话,完成必要的数据库增删改查功能。
  • Executor Mybatis:执行器,是Mybatis调度的核心,负责SQL语句的生成和查询缓存的维护。
  • StatementHandler:封装了JDBC statement操作,负责对JDBC statemnet操作,如设置参数等。
  • ParameterHandler:负责对用户传递的参数转换成JDBC statement所对应的数据类型。
  • ResultSetHandler:负责将JDBC返回的ResultSet结果集对象转换成List类型的集合。
  • TypeHandler:负责java数据类型和jdbc数据类型之间的映射和转换。
  • Kafka


  • 高并发

  •   什么是高并发

高并发是互联网分布式架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。

高并发相关常用一些指标有:响应时间,吞吐量,每秒查询率QPS,并发用户数

  • 如何提升系统的并发能力?

垂直扩展:如果预算不是问题的话,通过“增强单机硬件性能”的方式来提升系统的并发能力。

水平扩展:


  • 分布式


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值