
2019年java面试
工作三年多,整理一下自己的面试准备和面试中遇到的一些问题。
walkmiss
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ArrayList遍历删除指定元素
第一种方式,基本原理是,每次list删除元素后,后面的元素都要往前移动一位,就相当于i多加了1,remove后继续遍历就会错过一个元素,所以就需要代码中的i--,抵消remove后,后面元素前移一位的影响 for (int i = 0; i < list.size(); i++) { if(list.get(i).equals("a")){ ...原创 2019-12-23 22:11:45 · 278 阅读 · 0 评论 -
ArrayList和LinkedList的区别
简单区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList是基于双向链表的数据结构。 2.ArrayList实现了RandomAccess,数组支持随机访问, 查询速度快, 增删元素慢;LinkedList 没有实现 RandomAccess 接口,链表支持顺序访问, 查询速度慢, 增删元素快; ...原创 2019-12-22 09:14:17 · 122 阅读 · 0 评论 -
springboot写一个自己的starter
@SpringBootApplication注解中主要包含@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注解。其中最重要的是@EnableAutoConfiguration注解,借助AutoConfigurationImportSelector,@EnableAutoConfiguration可以帮助Spri...原创 2019-12-16 19:28:24 · 623 阅读 · 0 评论 -
rabbitmq面试问题
rabbitmq如何保证消息不丢失 1.生产者弄丢了数据 开启comfirm机制 2.mq弄丢了数据 开启mq持久化机制 3.消费者弄丢了数据 ack机制 rabbitmq如何保证幂等性 得结合业务来思考 1.比如要往数据库写数据,先根据主键查一下,如果已经存在,就别插入了,upadte一下就好了 2.如果是写redis,每次都是set,天然幂等性 3.如果不是上面两个场景,那就生产者每次发送数...原创 2019-12-13 09:44:35 · 322 阅读 · 0 评论 -
Hystrix比trycatch好在哪里?
关于面试中被问到的Hystrix比trycatch好在哪里? 1.使用了滑动时间窗口提供断路 2.提供的度量和仪表板开箱即用,可以帮助您窥视您的系统和从属连接 3.使用不同的线程池实现BulkHead 仓壁模式 4.健康检查能力.它提供了一个运行状况监视API的运行状况检查类 ...原创 2019-12-08 20:56:03 · 474 阅读 · 0 评论 -
Hystrix工作流程
1.当调用出现错误时,开启一个时间窗口。(10s) 2.在这个时间窗内,统计调用次数是否达到最小请求数?如果没有达到,则重置统计信息,回到第一步。 如果达到最小请求数,则统计失败请求的占比是否达到阈值,如果达到则跳闸,没有达到,则重置统计信息,回到第一步。 3.如果跳闸,会开启一个活动时间窗口(默认5秒),每隔5秒,hystrix会让一个请求通过,到达那个有问题的服务,看是否调用成功。如果成...原创 2019-12-08 20:51:58 · 185 阅读 · 0 评论 -
java线程的几种状态
public enum State { /** * 新建状态,线程对象已经创建,但尚未启动 */ NEW, /** * 就绪状态,可运行状态,调用了线程的start方法,已经在java虚拟机中执行,等待获取操作系统资源如CPU,操作系统调度运行。 */ RUN...原创 2019-12-08 20:39:25 · 113 阅读 · 0 评论 -
基于redis实现分布式锁
package com.kuang.springcloud.util; import jdk.internal.org.objectweb.asm.tree.TryCatchBlockNode; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.connection...原创 2019-12-03 21:44:12 · 160 阅读 · 0 评论 -
redis过期删除策略
redis中zset的应用场景 排行榜 立即删除:在设置键的过期时间的同时,创建一个定时器,让定时器执行对键的删除操作 惰性删除:每次取的时候先判断 expires 对象里面的键是否已经过期,如果过期,则删除键,否则,返回该键 定期删除:每隔一段时间,程序对数据库遍历检查一遍,然后删除过期的键 定时删除占用过多cpu时间,影响服务器的响应时间和吞吐量。 惰性删除浪费过...原创 2019-11-28 20:01:01 · 441 阅读 · 0 评论 -
面试中问到的java程序中的加减乘除
原来浮点数是不适合精确计算的,原因是计算机里面数的计算都是二进制计算的,我们其实输入的十进制数,有些十进制数转换成二进制是可以精确转换,而有些转换则不是精确转换,得到的是一个最靠近它的数,所以这里面就存在一个误差。另外,如果浮点数不进行计算时,在十进制里面浮点数能正确显示,如果浮点数参与了计算,那么浮点数二进制与十进制间的转换过程就会变得不可而知,变得不可逆。 那么要想使得到的结果精确,可以使用...原创 2019-11-19 22:29:35 · 185 阅读 · 0 评论 -
关于java中的锁
问:知道哪些锁? 乐观锁和悲观锁。 问:乐观锁有哪些?悲观锁有哪些? cas是乐观锁,synchronize和Lock都是悲观锁 问:synchronize和Lock的区别 Lock是一个接口,而synchronized是关键字。synchronized会自动释放锁,而Lock必须手动释放锁。Lock可以让等待锁的线程响应中断,而synchronized不会,线程会一直等待下去。通过Lo...原创 2019-11-19 22:01:54 · 147 阅读 · 0 评论 -
面试被问到的关于springboot
springboot的特性有哪些? 1.快捷搭建spring的应用 2.starter简化构建依赖配置 3.自动配置 4.零xml配置 starter的作用可以说一下吗? 1.starter帮我们引入相关的jar依赖 2.starter自动完成bean的配置(内部通过@configuration和@Bean来实现注入) 如何去掉springboot内置的tomcat ...原创 2019-11-19 21:41:04 · 296 阅读 · 0 评论 -
java面试遇到的问题(springboot)
1.springboot内置了哪些容器? 默认tomcat,还有undertow以及jetty。 2.如何替换默认容器? 主要是修改pom文件的依赖。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starte...原创 2019-11-19 07:54:32 · 288 阅读 · 0 评论 -
线程池面试相关
你们项目中是如何创建线程池的呢? new ThreadPoolExcutor();ExcutorService service = Excutors.newFixPoolExcutor(n); ExcutorService service = Excutors.newCachePoolExcutor(); ExcutorService service = Excutors.newSingle...原创 2019-11-18 07:42:55 · 178 阅读 · 0 评论 -
常见的sql优化
其实常见的sql优化,就是保证索引不失效 1.like模糊查询时,去掉前面的% 2.where条件左边不加函数运算 3.尽量不使用or来连接,可以换成union all来联合查询实现 4.尽量不使用select * 5.not in替换成not exist 6.避免使用<>,!= 7.避免在索引列上使用is null , is not null 8.order by语句...原创 2019-11-17 14:35:57 · 142 阅读 · 0 评论 -
如何保证接口幂等性?
最近面试被问到的关于如何保证接口的幂等性问题: 首先,幂等需要唯一的业务单号来保证。以支付业务为例,在不考虑并发的情况下,实现幂等只需要两步: 1.判断订单是否已经支付过了, 2.如果已经支付成功则返回成功。待支付则进行支付流程,然后修改支付状态。 高并发下可能会出现问题,则需要将查询和更改操作加锁。 1.乐观锁 用version来实现乐观锁 UPDATE tab1 SET col...原创 2019-11-17 13:40:01 · 423 阅读 · 0 评论 -
jvm面试
1.jvm相关面试 (1)双亲委托机制:就是当一个类加载器加载一个类时,他首先会委托给自己的父类加载器去加载这个类,如果这个父类加载器还存在父类加载器,就继续向上委托,直到顶层的启动类加载器,如果父类加载器能够完成类加载,则成功返回。如果父类加载无法完成加载,那么子类加载器才会尝试自己去加载。 java默认有三种类加载器,分别是启动类加载器、扩展类加载器和应用程序类加载器。 bootstra...原创 2019-11-17 10:54:55 · 160 阅读 · 0 评论 -
spring ioc面试怎么答?
什么是ioc? ioc,Inversion of control。控制反转,即原来需要我们手动创建的对象交给spring来创建。对象的控制权在我们手上,引入spring后控制权反转到ioc容器。 ioc容器是spring的核心容器,主要是完成了对象的创建和依赖的管理注入等等。 什么是DI? DI,dependency injection。依赖注入,就是在容器运行期间,动态地将某种依赖关系注...原创 2019-11-13 10:18:34 · 311 阅读 · 0 评论 -
redis淘汰策略
如何保证redis中的数据都是热点数据? 1.volatile lru 从已设置过期时间的数据集中选择最近最少使用的数据淘汰 2.volatile ttl 从已设置过期时间的数据集中选择即将过期的数据淘汰 3.volatile random 从已设置过期时间的数据集中选择任意的数据淘汰 4.allkeys lru 从数据集中选择最近最少使用的数据淘汰 5.allke...原创 2019-11-12 14:24:16 · 147 阅读 · 0 评论 -
常用框架之Zookeeper面试(1)
1.Zookeeper是什么? Zookeeper = 文件系统 + 通知机制 Zookeeper是一个为分布式应用提供协调服务的Apache开源项目。Zookeeper提供一个多层级的节点命名空间(节点称为znode)。与文件系统不同的是,这些节点都可以设置关联的数据,而文件系统中只有文件节点可以存放数据而目录节点不行。Zookeeper为了保证高吞吐和低延迟,在内存中维护了这个树状的目录结...原创 2019-11-06 10:38:25 · 126 阅读 · 0 评论 -
spring面试之spring事务的隔离级别
spring事务共有五个隔离级别: ISOLATION_DEFAULT 默认隔离级别 使用数据库的默认隔离级别 2. ISOLATION_READ_UNCOMMITTED 最低隔离级别,它允许另一个事务可以看到这个事务还未提交的数据。可能产生脏读、幻读、不可重复读 3. ISOLATION_READ_COMMITTED 保证一个事务修改的数据修改后才能被另一个事...原创 2019-11-05 22:33:42 · 898 阅读 · 0 评论 -
常用框架面试之spring
1.说一下spring bean的生命周期 BeanDefinition-------->实例化----->属性赋值-------> 初始化------------>销毁 spring启动,查找并加载需要被spring管理的bean,进行bean的实例化 bean的属性注入 如果实现了BeanNameAware接口,会调用setBeanName(String b...原创 2019-11-05 22:16:43 · 133 阅读 · 0 评论 -
2019年java面试准备(序)
挺早就有了换工作的想法,不过之前上班太忙了一直没什么时间准备。最近项目事情少了很多,就想着应该好好学习总结一下。虽然错过了金九银十,今年大环境也没有那么好了,但我相信只要技术够扎实,一定还是可以找到满意的工作的。 准备从以下这个大方向开始复习,然后一个个去细化深入: 1.java基础 2.多线程 3.常用框架 4.数据库mysql 5.分布式相关 6.设计模式 ...原创 2019-11-05 21:39:48 · 125 阅读 · 0 评论