
Java面试
文章平均质量分 66
一蓑烟雨任平生2024
这个作者很懒,什么都没留下…
展开
-
【Java面试】——常见面试题汇总
JDK 是 Java 开发工具包,是 Java 开发环境的核心组件,并提供编译、调试和运行一个 Java 程序所需要的所有工具,可执行文件和二进制文件,是一个平台特定的软件。JRE 是 Java 运行时环境,是 JVM 的实施实现,提供了运行 Java 程序的平台。JRE 包含了 JVM,但是不包含 Java 编译器 / 调试器之类的开发工具。JVM 是 Java 虚拟机,当我们运行一个程序时,JVM 负责将字节码转换为特定机器代码,JVM 提供了内存管理 / 垃圾回收和安全机制等。这种独立于硬原创 2020-07-13 09:40:55 · 1104 阅读 · 1 评论 -
Synchronized锁升级过程
当一个线程首次访问同步块时,如果此对象无锁状态且偏向锁未被禁用,JVM 会将该对象头的锁标记改为偏向锁状态,并记录下当前线程的 ID。如果持有偏向锁的线程还活跃,则需要撤销偏向锁,升级为轻量级锁。进行偏向锁撤销时,会遍历堆栈的所有锁记录,暂停拥有偏向锁的线程,并检查锁对象。如果这个过程中发现有其他线程试图获取这个锁,JVM 会撤销偏向锁,并将锁升级为轻量级锁。轻量级锁通过线程自旋来等待锁释放。当有两个或以上线程竞争同一个偏向锁时,偏向锁模式不再有效,此时偏向锁会被撤销,对象的锁状态会升级为轻量级锁。原创 2024-04-02 22:02:38 · 368 阅读 · 0 评论 -
loadbalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别
在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。,客户端所有请求都会交给nginx,然后由nginx实现转发请求,即负载均衡是由服务端实现的。原创 2024-03-17 10:24:33 · 567 阅读 · 0 评论 -
分布式ID方案——雪花算法
ID是数据的唯一标识,传统的做法是利用UUID和数据库的自增ID,在互联网企业中,大部分公司使用的都是Mysql,并且因为需要事务支持,所以通常会使用Innodb存储引擎,UUID太长以及无序,所以并不适合在Innodb中来作为主键,自增ID比较合适,但是随着公司的业务发展,数据量将越来越大,需要对数据进行分表,而分表后,每个表中的数据都会按自己的节奏进行自增,很有可能出现ID冲突。这时就需要一个单独的机制来负责生成唯一ID,生成出来的ID也可以叫做分布式ID,或全局ID。下面来分析各个生成分布式ID的机制转载 2021-06-19 09:33:30 · 1540 阅读 · 0 评论 -
CPU飙升和OOM排查思路
CPU使用率高和OOM(Out of Memory)异常是两个不同但可能相互关联的问题。原创 2024-03-10 10:11:09 · 598 阅读 · 0 评论 -
栈实现队列 | 队列实现栈
https://www.cnblogs.com/labuladong/p/12320431.html原创 2021-07-01 09:59:30 · 157 阅读 · 0 评论 -
数据库连接池到底应该设置多大?
https://blog.youkuaiyun.com/ljheee/article/details/99127126https://www.cnblogs.com/javastack/archive/2020/03/26/12575435.html计算公式下面的公式是由PostgreSQL提供的,不过我们认为可以广泛地应用于大多数数据库产品。你应该模拟预期的访问量,并从这一公式开始测试你的应用,寻找最合适的连接数值。连接数 = ((核心数 * 2) + 有效磁盘数)核心数不应包含超线程(hy.原创 2021-06-30 08:04:33 · 1281 阅读 · 0 评论 -
零拷贝技术
https://baijiahao.baidu.com/s?id=1664128784220450138&wfr=spider&for=pchttps://zhuanlan.zhihu.com/p/258513662https://blog.youkuaiyun.com/weixin_42096901/article/details/103017044原创 2021-06-28 09:51:36 · 175 阅读 · 0 评论 -
Java OOM问题如何排查
目录OOM 问题 什么是OOM 导致OOM问题的原因 排查手段 实战 MAT分析 OOM 问题什么是OOMOOM为out of memory的简称,来源于java.lang.OutOfMemoryError,指程序需要的内存空间大于系统分配的内存空间,OOM后果就是程序crash;可以通俗理解:程序申请内存过大,虚拟机无法满足,然后自杀了。导致OOM问题的原因为什么会没有内存了呢?原因不外乎有两点:1)分配的少了:比如虚拟机本身可使用的内存(一般通过启动时原创 2021-06-26 19:45:20 · 2656 阅读 · 4 评论 -
七层协议和四层协议
物理层:网卡,网线,集线器,中继器,调制解调器 数据链路层:网桥,交换机 网络层:路由器 网关工作在第四层传输层及其以上原创 2021-06-26 16:25:54 · 599 阅读 · 0 评论 -
Java中字符串有长度限制吗?
字符串有长度限制吗?是多少?首先字符串的内容是由一个字符数组char[] 来存储的,由于数组的长度及索引是整数,且String类中返回字符串长度的方法length() 的返回值也是int ,所以通过查看java源码中的类Integer我们可以看到Integer的最大范围是2^31 -1,由于数组是从0开始的,所以数组的最大长度可以使【0~2^31-1】通过计算是大概4GB。但是通过翻阅java虚拟机手册对class文件格式的定义以及常量池中对String类型的结构体定义我们可以知道对于索引定义了.转载 2021-04-02 13:45:26 · 550 阅读 · 1 评论 -
Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度
ArrayList 是线性表(数组)get() 直接读取第几个下标,复杂度 O(1)add(E) 添加元素,直接在后面添加,复杂度O(1)add(index, E) 添加元素,在第几个元素后面插入,后面的元素需要向后移动,复杂度O(n)remove()删除元素,后面的元素需要逐个移动,复杂度O(n)LinkedList 是链表的操作get() 获取第几个元素,依次遍历,复杂度O(n)add(E) 添加到末尾,复杂度O(1)add(index, E) 添加第几个元素后,需要先查找到第几个元素原创 2021-03-24 09:13:53 · 849 阅读 · 0 评论 -
RocketMQ面试题
你们为什么使用mq?具体的使用场景是什么?mq的作用很简单,削峰填谷。以电商交易下单的场景来说,正向交易的过程可能涉及到创建订单、扣减库存、扣减活动预算、扣减积分等等。每个接口的耗时如果是100ms,那么理论上整个下单的链路就需要耗费400ms,这个时间显然是太长了。如果这些操作全部同步处理的话,首先调用链路太长影响接口性能,其次分布式事务的问题很难处理,这时候像扣减预算和积分这种对实时一致性要求没有那么高的请求,完全就可以通过mq异步的方式去处理了。同时,考虑到异步带来的不一致的问题,我们可以原创 2021-03-10 11:16:36 · 36269 阅读 · 16 评论 -
SpringCloud 和SpringBoot 的区别与相互依赖关系
SpringCloud 和SpringBoot 的区别与相互依赖关系一 . SpringBoot1.简介Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。Spri...转载 2021-02-10 10:08:01 · 4010 阅读 · 0 评论 -
Java创造对象的五种方式
五种方法创建java对象作为Java开发人员,我们通常每天都会创建许多对象,但是我们总是使用新的或依赖管理系统(例如Spring)来创建这些对象。但是,有更多方法可以创建本文中将要研究的对象。用Java创建对象的共有5种核心方式,下面将以其示例加以说明,然后介绍创建对象的行的字节码。但是,有很多API可以为我们创建对象,但是这些API还将间接使用这5种核心方式之一,例如Spring BeanFactory。如果您将执行最后给出的程序,则会看到方法1、2、3使用构造函数创建对象,而4、5没有调原创 2020-10-20 15:16:15 · 762 阅读 · 0 评论 -
serviceA调用serviceB,如果serviceB抛出异常,serviceA会不会回滚?
https://blog.youkuaiyun.com/J080624/article/details/74999858/问题描述serviceA中的methodA调用serviceB中的methodB,methodB抛出一个异常,然后methodA捕获掉这个异常,就会出现Transaction rolled back because it has been marked as rollback-only 异常(serviceA和serviceB都加了注解@Transactional(rollbackFor原创 2020-10-19 21:41:19 · 5880 阅读 · 0 评论 -
Spring注解事务不支持 protected private 方法的原因
疑惑@Transactional注解只能应用于 public方法,如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。大神说是由于Spring AOP 的本质决定的,暂时还不明白为什么。验证pom依赖 <dependencies> <dependency> <groupId>org.springframework.boot</gr..转载 2020-10-16 15:22:51 · 7064 阅读 · 0 评论 -
面试题:List<Integer> list = new ArrayList<>() 里面可以放String类型的数据吗?
可以通过反射将String放入List中。那什么是反射呢?在运行过过程中获取类的名称,方法,属性,注解,类型等。 获取任意对象的方法,属性等。并且可以改变对象属性 判断一个对象所属的类 实例化任意一个类的对象其实就是java提供的reflect包回到一开始的那个问题,List list = new ArrayList<>()里面可以放String类型的数据吗?很显然是可以的,因为list是一个对象,而反射可以获取对象的属性方法,并且改变对象属性。那我们就可以通过list原创 2020-10-16 14:58:40 · 5059 阅读 · 0 评论 -
面试题:Mysql如何保证一致性?
一,关于事务和一致性的理解事务的产生,其实是为了当应用程序访问数据库的时候,事务能够简化我们的编程模型,不需要我们去考虑各种各样的潜在错误和并发问题.可以想一下当我们使用事务时,要么提交,要么回滚,我们不会去考虑网络异常了,服务器宕机了,同时更改一个数据怎么办对吧?因此事务本质上是为了应用层服务的.而不是伴随着数据库系统天生就有的。ACID里的AID都是数据库的特征,也就是依赖数据库的具体实现.而唯独这个C,实际上它依赖于应用层,也就是依赖于开发者.这里的一致性是指系统从一个正确的状态,迁移到另一个正确转载 2020-10-13 22:21:22 · 709 阅读 · 1 评论 -
Java中short、int、long、float、double的取值范围
一、基本数据类型的特点,位数,最大值和最小值。1、基本类型:short二进制位数:16包装类:java.lang.Short最小值:Short.MIN_VALUE=-32768 (-2的15此方)最大值:Short.MAX_VALUE=32767 (2的15次方-1)2、基本类型:int 二进制位数:32包装类:java.lang.Integer最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)最大值:Integer.MAX_VALUE= 2147.原创 2020-10-03 11:32:49 · 911 阅读 · 0 评论 -
HashTable、ConcurrentHashMap为何不支持null键和null值
首先我们先运行一个例子来分析从例子中可以发现,hashmap毋庸置疑可以存储null键值对,hashtable和ConcurrentHashMap不可以存储null键值对,并且null值,null也不可以单独存储,其原因剖析源码如下:1.HashTable2.ConcurrentHashMap从分析中我们可以看到,hashtable,对于null值会抛出异常,而对于null键,则会调用null.hashCode(),而导致空指针异常,而concurrenthashmap则对于null键值对,.原创 2020-09-29 15:29:53 · 3377 阅读 · 0 评论 -
abstract的方法能否与static,native,synchronized连用?
1、abstract与static (what) abstract:用来声明抽象方法,抽象方法没有方法体,不能被直接调用,必须在子类overriding后才能使用 static:用来声明静态方法,静态方法可以被类及其对象调用java中抽象类中的抽象方法不可以使用static 构成静态抽象方法,抽象类是不能实例化的,即不能被分配内存;而static修饰的方法在类实例化之前就已经别分配了内存,这样一来矛盾就出现了:抽象类不能被分配内存,而static方法必须被分配内存。...转载 2020-09-16 22:32:16 · 1189 阅读 · 0 评论 -
Java基础面试题2020
目录Java 有哪些特点Java 的特性描述一下值传递和引用传递的区别== 和 equals 区别是什么String 中的 equals 是如何重写的为什么重写 equals 方法必须重写 hashcode 方法String s1 = new String("abc") 在内存中创建了几个对象String 为什么是不可变的、jdk 源码中的 String 如何定义的、为什么这么设计。static 关键字是干什么用的?谈谈你的理解final 关键字是干什么用的?谈谈你的转载 2020-09-13 20:17:35 · 1165 阅读 · 0 评论 -
java后端面试应该如何准备?
目录算法计算机网络Java基础MyBatisJava锁Java多线程Jvm内存模型MySQLSpring分布式zookpeerLinux如何复习刷题算法这个真的就只能靠刷题,不敢说每家公司对于笔试的重视程度怎么样,反正笔试基本上是必须要过的一关队列。 数组。 栈。 链表。 树。 散列表(哈希表)。 堆。 图。 无序树:树中任意节点的子结点之间没有顺序关系、这种树称为无序树、也称为自由树。 有序树:树中任意节点的子结点之间有原创 2020-09-10 20:42:22 · 1275 阅读 · 0 评论 -
并发编程面试题
synchronized 和 volatile 的区别是什么?volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的。volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性。volatile不...原创 2020-08-22 14:06:48 · 241 阅读 · 0 评论 -
理解一下5种I/O模型
目录1、IO2、5 种 IO 模型2-1、阻塞 IO 模型2-2、非阻塞 IO 模型2-3、IO 复用模型2-4、信号驱动 IO 模型2-5、异步 IO 模型3、IO 模型比较3-1、阻塞 IO 调用和非阻塞 IO 调用、阻塞 IO 模型和非阻塞 IO 模型3-2、同步 IO 和异步 IO5 种 IO 模型分别是阻塞 IO 模型、非阻塞 IO 模型、IO 复用模型、信号驱动的 IO 模型、异步 IO 模型;前 4 种为同步 IO 操作,只有异步 IO 模型是异步转载 2020-08-19 09:32:28 · 414 阅读 · 1 评论 -
Mysql常见面试题
CHAR 和 VARCHAR的区别?CHAR 是固定长度的字符类型,VARCHAR 则是可变长度的字符类型,下面讨论基于在 MySQL5.0 以上版本中。共同点CHAR(M) 和 VARCHAR(M) 都表示该列能存储 M 个字符,注意不是字节!!CHAR类型特点 CHAR 最多可以存储 255 个字符 (注意不是字节),字符有不同的编码集,比如 UTF8 编码 (3字节)、GBK 编码 (2字节) 等。 对于CHAR(M)如果实际存储的数据长度小于M,则 MySQL 会..原创 2020-08-19 09:01:42 · 1000 阅读 · 1 评论 -
Spring的Controller是单例还是多例?怎么保证并发的安全?
controller默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱。正因为单例所以不是线程安全的。我们下面来简单的验证下:packagecom.riemann.springbootdemo.controller;importorg.springframework.context.annotation.Scope;importorg.springframework.stereotype.Controller;importorg.springframework.web...原创 2020-08-18 22:14:16 · 286 阅读 · 0 评论 -
浏览器输入网址后发生了什么?
输入网址—DNS域名解析—建立TCP连接—发送HTTP请求—服务器处理并返回结果—浏览器生成页面域名解析:先查找本地host文件,如果有则跳过查询直接访问对应网站的ip地址,如果无则由本地dns服务器向根dns服务器发送查询请求,并逐级向下最后查询到具体的网址ip 建立tcp连接:三次握手(客户端向服务器发送带有syn标识的数据包、服务端返回ack/syn数据包、客户端发送ack数据包)确保建立连接 发送http请求:发送请求报文(报文首部、空行、主体),报文首部包含请求行和首部信息,...原创 2020-08-18 21:39:51 · 616 阅读 · 0 评论 -
spring的循环依赖
1. 什么是循环依赖?循环依赖其实就是循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。Spring中循环依赖场景有:(1)构造器的循环依赖(2)field属性的循环依赖其中,构造器的循环依赖问题无法解决,只能拋出BeanCurrentlyInCreationException异常,在解决属性循环依赖时,spri..转载 2020-08-17 21:17:23 · 537 阅读 · 0 评论 -
Cookie和Session的区别
Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。Cookie 一般用来保存用户信息比如①我们在 Cookie 中保存已经登录过得用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了;②一般的网站都会有保持登录也就是说下次你再访问网站的时候就不需要重新登录了,这是因为用户登录的时候我们可以存放了一个 Token 在 Cookie 中,下次登录的时候只需要根据 Token 值来查找用户即可(为了安全考虑,重新登录一般要将 Token 重写).原创 2020-06-23 22:21:33 · 187 阅读 · 0 评论 -
java异常面试题
文章目录 Java异常架构与异常关键字 Java异常简介 Java异常架构 1. Throwable 2. Error(错误) 3. Exception(异常) 运行时异常 编译时异常 4. 受检异常与非受检异常 受检异常 非受检异常 Java异常关键字 Java异常处理 声明异常 抛出异常 捕获异常 如何选择异常类型 常见异常处理方式 直接抛出异转载 2020-08-12 11:42:37 · 2629 阅读 · 0 评论 -
SpringBoot、SpringCloud常见面试题
Spring,SpringMVC,SpringBoot,SpringCloud有什么区别和联系?Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring使你能够编写更干净、更可管理、并且更易于测试的代码。Spring MVC是Spring的一个模块,一个web框架。通过Dispatcher Servlet, ModelAndView 和 View Resolver,开发web应用变得很容易。主要针对的是网站应用程序或者服务开发——URL路由、Session...原创 2020-07-30 19:42:05 · 894 阅读 · 0 评论 -
Spring、SpringMVC、Mybatis常见面试题总结
Spring篇spring是什么?Spring 是分层的 Java SE/EE 应用full-stack轻量级开源框架,以IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。优势...转载 2020-07-30 16:31:46 · 2100 阅读 · 0 评论 -
亚信科技——Java笔试题
(一)1.String str=new String("abc") 在内存中是怎么分配的?答:在运行时才在内存创建一个内存空间。2.String str1="abc" 和 String str1=new String("abc"); 这两个的区别是什么?答:String str1="abc"在编译时已经在一个常量池中生成一个拷贝,其中str1中的"abc"是字符串常量。而对于String str1=new String("abc")的话,它是在运行时才创建。这两句在内在中所产生的对象并不是同一个对原创 2020-07-29 08:10:52 · 4614 阅读 · 0 评论 -
Java-集合容器常见面试题
注:层次关系:实线边框为实现类,折现边框是抽象类,点线边框的是接口Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可...原创 2020-06-10 11:11:04 · 692 阅读 · 1 评论 -
史上最全HashMap面试题汇总
1.HashMap的数据结构?哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过8时,链表转换为红黑树。2.HashMap的工作原理?HashMap底层是hash数组和单向链表实现,数组中的每个元素都是链表,由Node内部类(实现Map.Entry<K,V>接口)实现,HashMap通过put&get方法存储和获取。存储对象时,将K/V键值传给put()方法: ①、调用hash(K)方法计算K的hash值,然后结合数组长度,计算得数组下标;转载 2020-07-13 19:44:14 · 23287 阅读 · 13 评论 -
事务——ACID和隔离级别
什么是事务?事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。事务的四大特性(ACID)原子性(Atomicity):事务是最小的执行单位,不允许分割。事务的原子性确..原创 2020-06-22 14:41:19 · 310 阅读 · 1 评论 -
事务四大特性-ACID
关系型数据库遵循ACID规则事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:1、A (Atomicity) 原子性原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其..转载 2020-06-17 20:02:21 · 444 阅读 · 0 评论 -
JVM 笔记
脑图原创 2020-07-20 19:47:12 · 218 阅读 · 0 评论