![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
面试
文章平均质量分 88
面试相关
明月燃雨
人生没有白走的路,每一步都算数。
展开
-
面试文章合集
Java 面试题Java 面试题 001 - 010Java 面试题 011 - 020Java 面试题 021 - 030Java 面试题 031 - 040Java 面试题 041 - 050Java 面试题 051 - 060Java 面试题 061 - 070Java 面试题 071 - 080Java 面试题 081 - 090Java 面试题 091 - 100Java 面试题 101 - 110JVM 面试题JVM 面试题 001 - 010JVM 面试题 011原创 2021-03-03 20:30:47 · 224 阅读 · 1 评论 -
Kafka 面试题 001 - 010
001、kafka 的消息模型是什么?发布订阅模型。Topic 是通信载体,发布者发送消息到 Topic,订阅了 Topic 的消费者可以消费到消息。在 kafka 中一个 Topic 可以有多个分区。002、什么是Producer、Consumer、Broker、Topic、Partition?producer 是产生消息的一方consumer 是消费消息的一方broker 相当于一个 kafka 实例,多个 broker 可以组成集群topic:producer 将消息发送到 topic,原创 2021-03-15 01:08:11 · 325 阅读 · 0 评论 -
Redis 面试题 021 - 030
021、什么是哨兵模式?哨兵是一个独立的进程,它会监控所有 master 节点和 slave 节点,如果哨兵发现 master 节点宕机了,它会选择一个 slave 将其切换成 master,并通知其他 slave 节点。但是一个哨兵进程进行监控的时候还是可能会出现问题,因此可以设置多个哨兵进程进行监控,不同哨兵之间也能彼此感知到,如果一个哨兵感知到 master 节点宕机了并不会立马做出反应,而是会先询问其他哨兵,这种情况被称为主观下线,如果有超过指定数量的哨兵节点都认为 master 节点宕机了,那原创 2021-03-13 22:33:59 · 154 阅读 · 0 评论 -
Spring 家族面试题 031 - 040
031、什么是 Hystrix?服务熔断的意思是当某服务出现不可用或响应超时的情况时,为了防止整个服务出现雪崩,会暂停对该服务的调用。服务降级指的是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。Hystrix 提供的功能就是当服务 A 调用服务 B 失败次数达到一定阈值的时候,A 不会再去调用 B,而是会去执行本地的降级方法。032、什么是网关?网关就是一个专门处理外部请求的组件,一般都会提供请求转发、权限认证、流量控制、原创 2021-03-11 17:33:58 · 171 阅读 · 1 评论 -
Redis 面试题 011 - 020
011、Redis 内存淘汰机制有什么?volatile-lru(least recently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰allkeys-lru(least recently used原创 2021-03-07 21:31:14 · 185 阅读 · 0 评论 -
Redis 面试题 001 - 010
001、什么是 Redis?Redis 是一个使用 C 语言开发的内存数据库,读写速度非常快,它提供了多种数据类型来支持不同的业务场景,可以用作缓存、分布式锁甚至是消息队列。002、缓存数据的处理流程?如果用户请求的数据在缓存中存在的话就直接返回,如果不存在的话就看数据库中是否存在,数据库中有的话就更新缓存并返回对应的数据给用户,如果数据库中不存在的话就返回空数据。003、为什么要使用 Redis / 缓存?主要是为了满足系统高性能、高并发的要求。对于那种用户高频访问且不经常更改的数据,如果每原创 2021-03-07 21:28:45 · 122 阅读 · 0 评论 -
MyBatis 面试题 011 - 020
011、MyBatis 都有哪些 Executor 执行器?它们之间的区别是什么?MyBatis 内部维护了一个 Executor 接口,我们所进行的一系列增删改查操作实际上都是在调用这个接口,该接口有两个实现类,分别是 BaseExecutor 和 CachingExecutor,其中 BaseExecutor 是一个抽象类,它有三个实现 SimpleExecutor、ReuseExecutor、BatchExecutor,Executor 的继承结构如下图所示。SimpleExecutor:默认执原创 2021-03-03 17:57:07 · 127 阅读 · 2 评论 -
Spring 家族面试题 021 - 030
021、什么是 Spring 框架?有什么缺点?Spring 为企业级 Java 应用的开发提供了一种相对简单的方法,通过依赖注入和面向切面编程大大提高了开发效率,并且提高了系统的可维护性和可扩展性。Spring 的组件代码是轻量级的,但它的配置却是重量级的,为了简化配置,后来有创建了 Spring Boot。022、开发 RESTful 服务常用的注解有哪些?Spring Bean 相关@Autowired : 自动导入对象到类中,被注入进的类同样要被 Spring 容器管理。@RestCo原创 2021-03-03 17:53:39 · 283 阅读 · 1 评论 -
Spring 家族面试题 011 - 020
011、谈谈 Spring 中都用到了哪些设计模式?工厂模式:Spring 使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象。代理模式:Spring AOP 通过动态代理实现。单例模式:Spring 中的 Bean 默认都是单例的。模板模式:Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类都使用到了模板模式。适配器模式:Spring MVC 中用适配器模式适配 Con原创 2021-03-03 17:24:22 · 113 阅读 · 1 评论 -
Spring 家族面试题 001 - 010
001、@RestController vs @Controller?@Controller 直接返回一个视图,广泛应用于前后端不分离的开发。@RestController 只返回对象,对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中,广泛应用于前后端分离的开发模式。@Controller 和 @ResponseBody 配合使用效果和 @RestController 一样。002、谈谈你对 IoC 的理解?IoC(控制反转)是一种设计思想,就是将原本在程序中手原创 2021-03-03 14:31:05 · 138 阅读 · 1 评论 -
Java 面试题 101 - 110
101、什么是乐观锁和悲观锁?乐观锁是一种思想,在进行读写操作的时候都不会加锁,但在进行写操作的时候会判断数据是否被修改过。乐观锁适用于读多写少的场景,可以提高吞吐量。悲观锁是一种思想,每次读或写操作都会加锁,共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程,适用于写多读少的场景。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁、表锁、读锁、写锁等,都是在做操作之前先上锁。Java 中 synchronized 和 ReentrantLock 等独占锁都是悲观锁思想的实现。原创 2021-03-02 22:07:49 · 99 阅读 · 0 评论 -
Java 面试题 091 - 100
091、JUC 包中的原子类主要有哪些?基本类型使用原子的方式更新基本类型AtomicInteger:整形原子类AtomicLong:长整型原子类AtomicBoolean:布尔型原子类数组类型使用原子的方式更新数组里的某个元素AtomicIntegerArray:整形数组原子类AtomicLongArray:长整形数组原子类AtomicReferenceArray:引用类型数组原子类引用类型AtomicReference:引用类型原子类AtomicStampedRefe原创 2021-03-02 20:10:40 · 132 阅读 · 0 评论 -
Java 面试题 081 - 090
081、synchronized 关键字和 volatile 关键字的区别?volatile 是线程同步的轻量级实现,性能比 synchronized 好一些volatile 用于修饰变量,synchronized 用于修饰方法和代码块volatile 能保证可见性和有序性,但不能保证原子性;synchronized 能保证可见性和原子性,但不能保证有序性。082、ThreadLocal 是用来干什么的?通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的原创 2021-03-02 15:32:57 · 92 阅读 · 0 评论 -
MySQL 面试题 011 - 020
011、什么是快照读和当前读?不加锁的 select 操作就是快照读(即不加锁的非阻塞读),它读取的是事务开始后首次快照读的版本,有可能不是最新版本,基于 MVCC 实现,避免了加锁操作,降低了开销。但快照读有一个前提,隔离级别不能是SERIALIZABLE(可串行化),否则也会成为当前读。像 update,delete,insert,select lock in share mode(共享锁),select for update 这些操作都是当前读,读取的是记录的最新版本,会对读取的记录进行加锁,从而原创 2021-03-02 13:34:38 · 185 阅读 · 0 评论 -
MySQL 面试题 001 - 010
001、MyISAM 和 InnoDB 区别?是否支持行级锁 : MyISAM 只有表级锁(table-level locking),而 InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。是否支持事务和外键:MyISAM 不支持事务和外键,而 InnoDB 支持事务和外键。是否支持 MVCC(多版本并发控制):仅 InnoDB 支持。应对高并发事务,MVCC 比单纯的加锁更高效;MVCC只在 READ COMMITTED 和 REPEATABLE READ 两个隔原创 2021-03-01 14:23:39 · 211 阅读 · 0 评论 -
JVM 面试题 021 - 030
021、堆空间的划分?Java 堆被分为新生代和老年代,新生代又可进一步分为 Eden 区和 Survivor 区。当 Eden 区没有足够空间进行分配或者已经满了的时候,会触发一次 Minor GC,经过这次 GC 后,Eden 区和 From Survivor 区中还存活的对象会进入到 To Survivor 区,然后 Eden 区和 From Survivor 区将会被清空,并且 From Survivor 区和 To Survivor 区将会交换角色,每经过一次 GC,对象的年龄都会加一,当对原创 2021-02-18 21:31:36 · 222 阅读 · 2 评论 -
JVM 面试题 011 - 020
011、不可达对象非死不可吗?在可达性分析算法中被判定不可达的对象不一定非死不可,要宣告这个对象死亡,至少需要经历两次标记过程:在进行可达性分析时发现对象不可达,该对象将会被第一次标记;随后会再进行一次筛选,筛选的条件是此对象是否有必要执行 finalize() 方法,假如对象没有覆盖 finalize() 方法,或者 finalize() 方法已经被虚拟机调用过了,那么虚拟机就认为没有必要执行该对象的 finalize() 方法,如果对象被判定有必要执行 finalize() 方法,那么该对象将会被放在原创 2021-02-18 17:45:03 · 186 阅读 · 1 评论 -
JVM 面试题 001 - 010
001、介绍下 Java 运行时数据区域?Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分成若干个不同的数据区域。根据 Java 虚拟机规范,JVM 所管理的内存分为:虚拟机栈、本地方法栈、程序计数器、堆和方法区,其中虚拟机栈、本地方法栈和程序计数器是线程私有的,而堆和方法区是线程共享的。程序计数器主要有两个方面的作用:其一,字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如顺序执行、选择、循环、异常处理等;其二,在多线程情况下,程序计数器用于记录当前线程执行原创 2021-02-17 21:08:37 · 177 阅读 · 0 评论 -
Java 面试题 071 - 080
071、synchronized 常见的使用方法?public class MyService { public synchronized static void method1() { } public void method2() { synchronized (MyService.class) { } } public synchronized void method3() { }原创 2021-02-12 14:08:09 · 116 阅读 · 2 评论 -
Java 面试题 061 - 070
061、为什么要使用多线程?从计算机层面考虑,线程可以看做是轻量级进程,线程间切换和线程调度的成本远小于进程,此外,现在是多核 CPU 的时代,多个线程可以并发执行,极大降低了线程上下文切换的开销。从互联网的发展趋势来看,现在很多系统都要求百万级甚至千万级并发量,而多线程正式开发高并发系统的基础,利用好多线程机制可以极大地提高系统的并发能力和整体性能。062、使用多线程可能会带来什么问题?并发编程的目的是提高程序的执行效率,但如果使用不当的话是会带来很多问题的,如内存泄漏、内存溢出、死锁、线程不原创 2021-02-06 19:06:00 · 88 阅读 · 1 评论 -
Java 面试题 051 - 060
051、HashMap 常见的遍历方式?HashMap 遍历方式主要分为以下四大类,每一大类又分为很多小类:迭代器(Iterator)方式遍历EntrySetKeySetFor Each 方式遍历EntrySetKeySetLambda 表达式遍历Streams API 遍历单线程多线程public class Test { public static void main(String[] args) { Map<String, S原创 2021-02-01 21:38:05 · 142 阅读 · 1 评论 -
Java 面试题 041 - 050
041、ArrayList VS VectorArrayList 底层是数组,线程不安全,适合多读的场景使用Vector 底层是数组,线程安全,效率比较低042、ArrayList VS LinkedListArrayList 底层是数组,查询效率高,插入效率低LinkedList 底层是双向链表,查询效率低,插入效率高从内存空间占用的角度来看,ArrayList 主要使用空间浪费表现在列表结尾为预留一定的内存空间,LinkedList 空间花费主要表现在它的每一个元素都比 ArrayLi原创 2021-01-28 19:57:20 · 102 阅读 · 0 评论 -
Java 面试题 031 - 040
031、Exception 和 Error 的区别?在 Java 中,所有异常都有一个共同的祖先 Throwable 类,Throwable 有两个重要的子类 Exception 和 Error,Exception 和 Error 各自包含大量子类。Exception 是程序本身可以处理的异常,可以通过 catch 来进行捕获,Exception 可以分为可检查异常和运行时异常,可检查异常是可预知的,如果不进行处理程序是无法编译通过的,常见的有 IOException、SQLException 和 C原创 2021-01-27 16:11:58 · 95 阅读 · 0 评论 -
Java 面试题 021 - 030
021、成员变量和局部变量的区别?成员变量可以被访问控制修饰符及 static 修饰,但局部变量不可以。成员变量是对象的一部分,随着对象的创建而存在,局部变量随着方法的调用而存在,方法调用结束也就随之销毁了。成员变量一般跟随对象存储在堆中,局部变量存储在栈内存中。022、一个类的构造方法的作用是什么? 若一个类没有声明构造方法,该程序能正确执行吗? 为什么?构造方法的主要作用是完成实例对象的初始化工作。一个类即使没有声明任何构造方法,该程序也可以正确执行,因为在没有显示声明任何构造方法的情况原创 2021-01-18 13:35:02 · 406 阅读 · 1 评论 -
Java 面试题 011 - 020
011、Java 语言有哪些特点?面向对象编程,具有封装、继承、多态的特性。平台无关性,因为 JVM 的存在,Java 语言可以一次编译、到处运行。支持多线程和网络编程。简单易学。012、continue、break、和 return 的区别是什么?continue:跳出这一次循环,继续执行下一次循环。break:跳出整个循环体,继续执行循环体后面的代码。return:跳出所在方法,结束该方法的运行,常见用法如下。return;:不返回任何结果,直接结束方法的执行,用于没有返回值的原创 2021-01-17 18:13:33 · 120 阅读 · 1 评论 -
Java 面试题 001 - 010
001、基本数据类型有几种?byte:长 1 字节,8 比特,表示范围 -2^7 ~ 2^7-1char:长 2 字节,16 比特short:长 2 字节,16 比特,表示范围 -2^15 ~ 2^15-1int:长 4 字节,32 比特,表示范围 -2^31 ~ 2^31-1float:长 4 字节,32 比特long:长 8 字节,64 比特,表示范围 -2^63 ~ 2^63-1double:长 8 字节,64 比特boolean:boolean 只有两个值 true 和 false原创 2021-01-11 11:38:20 · 193 阅读 · 1 评论 -
MyBatis 面试题 001 - 010
001、#{} 和 ${} 的区别是什么?本质区别:#{} 是预编译处理,可以有效地防止 sql 注入,提高系统安全性;${} 是静态文本替换,无法防止 sql 注入。在 MyBatis 中,#{} 就是对 JDBC 中的 PrepareStatement 对象进行的封装处理,在处理 #{} 时,会将 sql 中的 #{} 替换为 ? 号,然后使用 PreparedStatement 对象的 set 方法来赋值;${} 就是对 Statement 对象进行的封装处理,而在处理 ${} 时,会直接把 $原创 2020-12-06 14:03:21 · 196 阅读 · 0 评论