
面试精选
面试精选
猫巳
2006年《时代周刊》年度人物
2008年“感动中国年度人物”特别奖获得者
2019年度“地球卫士奖”联合获奖人
2020年感动中国特别致敬奖——抗疫英雄
2022年”奥林匹克奖杯“获奖者
展开
-
【Java面试题】Tomcat容器是如何创建servlet类实例?用到了什么原理?
当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对 xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过 反射的方式实例化。(有时候也是在第一次请求时实例化)在servlet注册时加上1如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。...原创 2020-12-18 14:55:00 · 611 阅读 · 0 评论 -
【Java面试题】注解原理是什么?
注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池。...原创 2020-12-14 17:16:20 · 635 阅读 · 0 评论 -
【Java面试题】服务注册和发现是什么意思?Spring Cloud 如何实现?
当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降,而某些位置可能会发生变化。手动更改属性可能会产生问题。Eureka 服务注册和发现可以在这种情况下提供帮助。由于所有服务都在 Eureka 服务器上注册并通过调用 Eureka 服务器完成查找,因此无需处理服务地点的任何更改和处理。...原创 2020-12-11 14:21:26 · 796 阅读 · 0 评论 -
【Java面试题】NIO的组成?
Buffer:与Channel进行交互,数据是从Channel读入缓冲区,从缓冲区写入Channel中的flip方法 :反转此缓冲区,将position给limit,然后将position置为0,其实就是切换读写模式clear方法 :清除此缓冲区,将position置为0,把capacity的值给limit。rewind方法 :重绕此缓冲区,将position置为0DirectByteBuffer可减少一次系统空间到用户空间的拷贝。但Buffer创建和销毁的成本更高,不可控,通常会用内存池来提高性能原创 2020-12-09 14:17:44 · 207 阅读 · 0 评论 -
【Java面试题】JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?
1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。解决:在mybatis-config.xml中配置数据链接池,使用连接池管理数据库连接。2、Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。3、向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。解决:Mybatis自动将j原创 2020-12-03 14:07:34 · 1107 阅读 · 0 评论 -
【Java面试题】简单的说一下集合框架底层数据结构
CollectionListArraylist:Object数组Vector:Object数组LinkedList:双向循环链表SetHashSet(无序,唯一):基于 HashMap 实现的,底层采用 HashMap 来保存元素LinkedHashSet:LinkedHashSet 继承与 HashSet,并且其内部是通过 LinkedHashMap 来实现的。有点类似于我们之前说的LinkedHashMap 其内部是基于 Hashmap 实现一样,不过还是有一点点区别的。TreeS原创 2020-12-02 14:31:30 · 332 阅读 · 0 评论 -
【Java面试题】HotSpot虚拟机是如何为对象分配内存的?
类加载完成后,接着会在Java堆中划分一块内存分配给对象。内存分配根据Java堆是否规整,有两种方式:指针碰撞:如果Java堆的内存是规整,即所有用过的内存放在一边,而空闲的的放在另一边。分配内存时将位于中间的指针指示器向空闲的内存移动一段与对象大小相等的距离,这样便完成分配内存工作。空闲列表:如果Java堆的内存不是规整的,则需要由虚拟机维护一个列表来记录那些内存是可用的,这样在分配的时候可以从列表中查询到足够大的内存分配给对象,并在分配后更新列表记录。选择哪种分配方式是由 Java 堆是否规整原创 2020-12-02 14:29:06 · 296 阅读 · 2 评论 -
【Java面试题】运行时异常和一般异常(受检异常)区别是什么?
运行时异常包括 RuntimeException 类及其子类,表示 JVM 在运行期间可能出现的异常。Java 编译器不会检查运行时异常。受检异常是Exception 中除 RuntimeException 及其子类之外的异常。Java 编译器会检查受检异常。RuntimeException异常和受检异常之间的区别:是否强制要求调用者必须处理此异常,如果强制要求调用者必须进行处理,那么就使用受检异常,否则就选择非受检异常(RuntimeException)。一般来讲,如果没有特殊的要求,我们建议使用Ru原创 2020-12-02 14:20:54 · 1572 阅读 · 1 评论 -
【Java面试题】Linux 开机启动过程?
了解即可。主机加电自检,加载 BIOS 硬件信息。读取 MBR 的引导文件(GRUB、LILO)。引导 Linux 内核。运行第一个进程 init (进程号永远为 1 )。进入相应的运行级别。运行终端,输入用户名和密码。...原创 2020-12-02 14:19:56 · 226 阅读 · 0 评论 -
【Java面试题】Dubbo 和 Spring Cloud 有什么关系?
Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用,流量分发、流量监控和熔断。而 Spring Cloud 诞生于微服务架构时代,考虑的是微服务治理的方方面面,另外由于依托了 Spring、Spring Boot 的优势之上,两个框架在开始目标就不一致,Dubbo 定位服务治理、Spring Cloud 是打造一个生态。...原创 2020-11-26 14:03:12 · 317 阅读 · 0 评论 -
【Java面试题】Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?
综上,各种对比之后,有如下建议:一般的业务系统要引入 MQ,最早大家都用 ActiveMQ,但是现在确实大家用的不多了,没经过大规模吞吐量场景的验证,社区也不是很活跃,所以大家还是算了吧,我个人不推荐用这个了;后来大家开始用 RabbitMQ,但是确实 erlang 语言阻止了大量的 Java 工程师去深入研究和掌控它,对公司而言,几乎处于不可控的状态,但是确实人家是开源的,比较稳定的支持,活跃度也高;不过现在确实越来越多的公司会去用 RocketMQ,确实很不错,毕竟是阿里出品,但社区可能有突然黄.原创 2020-11-24 16:26:21 · 265 阅读 · 0 评论 -
【Java面试题】如何开启一个线程,开启大量线程会有什么问题,如何优化?
这道题想考察什么?是否了解线程开启的方式?开启大量线程会引起什么问题?为什么?怎么优化?考察的知识点线程的开启方式开启大量线程的问题线程池考生应该如何回答1、首先,关于如何开启一个线程,大多数人可能都会说3种,Thread、Runnable、Callback嘛!但事实却不是这样的。看JDK里怎么说的。/** * ... * There are two ways to create a new thread of execution. One is to * declare a原创 2020-11-24 13:28:15 · 1807 阅读 · 2 评论 -
【Java面试题】说一下 runnable 和 callable 有什么区别?
相同点:都是接口都可以编写多线程程序都采用Thread.start()启动线程主要区别:Runnable 接口 run 方法无返回值;Callable 接口 call 方法有返回值,是个泛型,和Future、FutureTask配合可以用来获取异步执行的结果Runnable 接口 run 方法只能抛出运行时异常,且无法捕获处理;Callable 接口 call 方法允许抛出异常,可以获取异常信息注:Callalbe接口支持返回执行结果,需要调用FutureTask.get()得到,此原创 2020-11-24 09:32:08 · 5742 阅读 · 0 评论 -
【Java面试题】服务端处理 Watcher 是怎么实现的?
服务端接收 Watcher 并存储接收到客户端请求,处理请求判断是否需要注册 Watcher,需要的话将数据节点的节点路径和 ServerCnxn(ServerCnxn 代表一个客户端和服务端的连接,实现了 Watcher 的 process 接口,此时可以看成一个 Watcher 对象)存储在WatcherManager 的 WatchTable 和 watch2Paths 中去。Watcher 触发以服务端接收到 setData() 事务请求触发 NodeDataChanged 事件为例:封装原创 2020-11-20 15:47:22 · 323 阅读 · 0 评论 -
【Java面试题】Spring 应用程序有哪些不同组件?
Spring 应用一般有以下组件:接口 - 定义功能。Bean 类 - 它包含属性,setter 和 getter 方法,函数等。Bean 配置文件 - 包含类的信息以及如何配置它们。Spring 面向切面编程(AOP) - 提供面向切面编程的功能。用户程序 - 它使用接口。...原创 2020-11-19 19:16:03 · 528 阅读 · 0 评论 -
【Java面试题】Tomcat有几种部署方式?
在Tomcat中部署Web应用的方式主要有如下几种:利用Tomcat的自动部署:把web应用拷贝到webapps目录。Tomcat在启动时会加载目录下的应用,并将编译后的结果放入work目录下。使用Manager App控制台部署:在tomcat主页点击“Manager App” 进入应用管理控制台,可以指定一个web应用的路径或war文件。修改conf/server.xml文件部署:修改conf/server.xml文件,增加Context节点可以部署应用。增加自定义的Web部署文件:在conf原创 2020-11-19 19:12:21 · 631 阅读 · 0 评论 -
【Java面试题】ThreadLocal是什么?
这道题想考察什么?是否了解ThreadLocal的使用?是否了解ThreadLocal的原理?考察的知识点ThreadLocal的使用ThreadLocal的原理考生应该如何回答1、首先,我们先简单介绍一下ThreadLocal的定义与使用。ThreadLocal,线程本地变量,顾名思义,它是每个线程私有的本地变量。通俗点讲,当你创建了一个ThreadLocal变量,每个线程在访问该变量时,都会拷贝一个副本至本地内存,所以多线程下操作ThreadLocal变量时,其实各自都是在操作自原创 2020-11-18 13:09:05 · 665 阅读 · 5 评论 -
【Java面试题】MVC是什么?MVC设计模式的好处有哪些?
mvc是一种设计模式(设计模式就是日常开发中编写代码的一种好的方法和经验的总结)。模型(model)-视图(view)-控制器(controller),三层架构的设计模式。用于实现前端页面的展现与后端业务数据处理的分离。mvc设计模式的好处分层设计,实现了业务系统各个组件之间的解耦,有利于业务系统的可扩展性,可维护性。有利于系统的并行开发,提升开发效率。...原创 2020-11-18 13:05:01 · 2691 阅读 · 0 评论 -
【Java面试题】SpringBoot和SpringCloud的区别?
SpringBoot专注于快速方便的开发单个个体微服务。SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务SpringBoot可以离开SpringCloud独立使用开发项目, 但是SpringCloud离不开SpringBoot ,属于依赖的关系SpringBoot专注于快速、方便的开发单个微服务个体,S..原创 2020-11-18 13:04:15 · 546 阅读 · 0 评论 -
【Java面试题】为什么要用 Redis 而不用 map/guava 做缓存?
缓存分为本地缓存和分布式缓存。以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。使用 redis 或 memcached 之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持 redis 或 memcached服务的高可用,整个程序架构上较为复杂。...原创 2020-11-12 16:40:34 · 665 阅读 · 0 评论 -
【Java面试题】BIO、NIO和AIO有什么区别?
BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。伪异步IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源。NIO:一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。AIO:一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,BIO是面向流的,NIO是面向缓冲区的;BIO的各种流是阻塞的。而NIO是非阻塞的;BIO的S..原创 2020-11-11 15:15:31 · 839 阅读 · 0 评论 -
【面试题】MySQL的binlog有有几种录入格式?分别有什么区别?
有三种格式,statement,row和mixed。statement模式下,每一条会修改数据的sql都会记录在binlog中。不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。由于sql的执行是有上下文的,因此在保存的时候需要保存相关的信息,同时还有一些使用了函数之类的语句无法被记录复制。row级别下,不记录sql语句上下文相关信息,仅保存哪条记录被修改。记录单元为每一行的改动,基本是可以全部记下来但是由于很多操作,会导致大量行的改动(比如alter table),因此这种模式原创 2020-11-10 15:15:09 · 1713 阅读 · 0 评论 -
【面试题】BASH和DOS之间的基本区别是什么?
BASH和DOS控制台之间的主要区别在于3个方面:BASH命令区分大小写,而DOS命令则不区分;在BASH下,/ character是目录分隔符,\ 作为转义字符。在DOS下,/ 用作命令参数分隔符,\ 是目录分隔符DOS遵循命名文件中的约定,即8个字符的文件名后跟一个点,扩展名为3个字符。BASH没有遵循这样的惯例。...原创 2020-11-09 13:42:00 · 825 阅读 · 0 评论 -
【Java面试题】Error 和 Exception 区别是什么?
Error 和 Exception 区别是什么?Error 类型的错误通常为虚拟机相关错误,如系统崩溃,内存不足,堆栈溢出等,编译器不会对这类错误进行检测,JAVA 应用程序也不应对这类错误进行捕获,一旦这类错误发生,通常应用程序会被终止,仅靠应用程序本身无法恢复;Exception 类的错误是可以在应用程序中进行捕获并处理的,通常遇到这种错误,应对其进行处理,使应用程序可以继续正常运行。...原创 2020-11-06 16:58:45 · 278 阅读 · 0 评论 -
【Spring Cloud】Spring Cloud主要项目有哪些?
Spring Cloud主要项目有哪些?参考答案:Spring Cloud的子项目,大致可分成两类,一类是对现有成熟框架"Spring Boot化"的封装和抽象,也是数量最多的项目;第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是kafka, ActiveMQ这样的角色。1. Spring Cloud Config集中配置管理工具,分布式系统中统一的外部配置管理,默认使用Git来存储配置,可以支持客户端配置的刷新及加密、解密操作。2. Spring原创 2020-10-22 14:52:11 · 1021 阅读 · 3 评论 -
【消息队列】为什么使用消息队列?
为什么使用消息队列?参考答案:面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务场景有个什么技术挑战,如果不用MQ可能会很麻烦,但是你现在用了MQ之后带给了你很多的好处。消息队列的常见使用场景,其实场景有很多,但是比较核心的有3个:解耦、异步、削峰。 ...原创 2019-11-01 10:34:48 · 117 阅读 · 0 评论 -
【并发编程】以下哪个不属于java.util.concurrent.locks.Lock里面的方法
以下哪个不属于java.util.concurrent.locks.Lock里面的方法A. waitB. lockC. trylockD. newCondition正确答案 A:Lock答案解析:接口里面的方法有lock、lockInterruptibly、tryLock、tryLock(long time, Tim...原创 2019-11-02 10:36:45 · 300 阅读 · 0 评论 -
【MySql】MySql 默认的隔离级别是?
MySql 默认的隔离级别是?A 读未提交B 读已提交C 可重复读D 序列化 正确答案 C: mysql的默认隔离级别是可重复读,而其他的数据库oracle, sql server等默认是读已提交 ...原创 2019-11-03 10:37:45 · 279 阅读 · 0 评论 -
【Redis】请简单谈谈Redis 持久化机制
请简单谈谈Redis 持久化机制答:Redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化。当Redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的。RDB是Redis默认的持久化方式。按照一定的时间周期策略把内存的数据以快照的形式保存到硬盘的二进制文件。即Snaps...原创 2019-11-04 10:38:45 · 190 阅读 · 0 评论 -
【JVM】垃圾收集有哪些算法,各自的特点?
垃圾收集有哪些算法,各自的特点?答:1.标记-清除算法标记-清除算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。它是最基础的收集算法,效率也很高.空间问题(标记清除后会产生大量不连续的碎片).2.复制算法它可以将内存分为大小相同的两块,每次使用其中的一块。当这一块的内存...原创 2019-11-05 10:38:45 · 222 阅读 · 0 评论 -
【MyBatis】使用 MyBatis 的 mapper 接口调用时有哪些要求?
使用 MyBatis 的 mapper 接口调用时有哪些要求?答:1)Mapper接口方法名和 mapper.xml 中定义的每个 sql 的 id 相同;2)Mapper接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的 parameterType 的类型相同;3)Mapper接口方法的输出参数类型...原创 2019-11-08 10:38:45 · 1277 阅读 · 0 评论 -
【Java】在工作中,你会如何选择ArrayList,LinkedList呢?
在工作中,你会如何选择ArrayList,LinkedList呢?答:ArrayList的底层是数组,所以在内存中的空间是连续的(指的是虚拟的空间)LinkedList的底层是双向链表在ArrayList的中间插入元素不方便,而在LinkedList的中间插入或者删除元素方便LinkedList不支持高效的随机元素访问...原创 2019-11-10 10:38:45 · 267 阅读 · 0 评论 -
【Spring】请问Spring有几种自动装配模式?
请问Spring有几种自动装配模式?答:自动装配提供五种不同的模式供Spring容器用来自动装配beans之间的依赖注入:no:默认的方式是不进行自动装配,通过手工设置ref 属性来进行装配bean。byName:通过参数名自动装配,Spring容器查找beans的属性,这些beans在XML配置文件中被设置为byName...原创 2019-11-21 10:39:45 · 990 阅读 · 0 评论 -
【Java】关于构造方法的说法哪个正确?
关于构造方法的说法哪个正确?A、一个类只能有一个构造方法B、一个类可以有多个不同名的构造方法C、构造方法与类同名D、构造方法必须自己定义,不能使用父类的构造方法答:正确答案:C答案解析:A,构造器可以重载B,构造器必须与类同名D,构造器中第一行默认调用父类无参构造super() ...原创 2019-11-09 10:38:45 · 6801 阅读 · 0 评论 -
【Redis】Memcache与Redis的区别都有哪些?
Memcache与Redis的区别都有哪些答:1.存储方式 Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。 Redis有部份存在硬盘上,redis可以持久化其数据2.数据支持类型 memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 ,提供list,set...原创 2019-11-06 10:38:45 · 178 阅读 · 0 评论 -
【Dubbo】Dubbo的泛化调用是什么?
Dubbo的泛化调用是什么?答:一般调用,Dubbo必须依赖服务端提供的api包,如果服务端升级了api包,客户端也必须跟着升级。泛化接口调用方式主要用于客户端没有 API 接口及模型类元的情况,参数及返回值中的所有 POJO 均用 Map 表示。某种原因没有服务接口,而要发起服务的调用,就需要使用泛化调用。 ...原创 2019-11-21 10:50:45 · 764 阅读 · 0 评论 -
【Tomcat】什么是Tomcat的Valve?
什么是Tomcat的Valve?答:在一个大的组件中直接处理这些繁杂的逻辑处理,使用管道(pipeline)可以把把多个对象连接起来,而Valve(阀门)整体看起来就像若干个阀门嵌套在管道中,而处理逻辑放在阀门上。管道(Pipeline)就像一个工厂中的生产线,负责调配工人(valve)的位置,valve则是生产线上负责不同...原创 2019-11-07 10:38:45 · 656 阅读 · 0 评论 -
【并发编程】为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?
为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?答:这是另一个非常经典的 java 多线程面试问题,而且在面试中会经常被问到。很简单,但是很多人都会答不上来!参考答案:new 一个 Thread,线程进入了新建状态;调用 start() 方法,会启动一个线程并使线程进...原创 2019-11-11 10:38:45 · 283 阅读 · 0 评论 -
【Mybatis】请描述Mybatis的插件对主体功能增强的全过程?其中使用了什么设计模式?
请描述Mybatis的插件对主体功能增强的全过程?其中使用了什么设计模式?答:插件对主体功能增强是基于责任链模式实现的。在mybatis初始化过程中,所有的插件会被加载到Configuration对象的插件注册中心,当configuration对象创建Executor、StatementHandler、ParameterHan...原创 2019-11-11 10:39:45 · 259 阅读 · 0 评论 -
【JVM】请描述下JVM中对象创建需要的几个步骤?
请描述下JVM中对象创建需要的几个步骤?答:1)检查加载先执行相应的类加载过程。如果没有,则进行类加载。2)分配内存分配方式两种:指针碰撞和空闲列表,java堆空间规整的话采用指针碰撞,不规整采用空闲列表3)内存空间初始化JVM需要将分配到的内存空间都初始化为零值(如int值为0,boolean值为false等等)。4)...原创 2019-11-21 11:50:45 · 233 阅读 · 0 评论