最近趁着金三银四面了五六家公司吧也整理了一些问题供大家参考一下适合经验三四年左右的。面试问题答案是我自己总结的不一定正确1.自我介绍简单一点吧把自己的情况说清楚一两分钟即可。2.微服务的组件答微服务是把一个类似单体项目根据某种维度进行拆分比如根据功能模块进行拆分。拆分之后具备了更好的抗压性/扩展性还可以更好的解耦但是维护相比之前会更麻烦了常用的组件有Spring Cloud。其中里面有Nacos用来做注册中心/配置中心Gateway用来做网关Hystrx:做限流、熔断、降级Dubbo做服务间的调用Feign:也是服务间的调用3.mq的运用答本项目中是用作削峰和解耦。4.项目的并发量5.机器搭建6.团队的规模7.查询优化答索引8.spring的知识点9.resource/Autowired区别答1来源不一样Autowired 是 Spring 定义的注解而 Resource 是 Java 定义的注解2依赖查找的顺序不同依赖注入的功能是通过先在 Spring IoC 容器中查找对象再将对象注入引入到当前类中Autowired 是先根据类型byType查找如果存在多个 Bean 再根据名称byName进行查找Resource 是先根据名称查找如果根据名称查找不到再根据类型进行查找3支持的参数不同Autowired 和 Resource 在使用时都可以设置参数其中 Autowired 只支持设置一个 required 的参数而 Resource 支持 7 个参数4依赖注入的用法不同Autowired 支持属性注入、构造方法注入和 Setter 注入而 Resource 只支持属性注入和 Setter 注入5编译器 IDEA 的提示不同Autowired 编译器会提示报错信息10.设计模式答单例模式、设配器模式、工厂模式、代理模式11.单例模式如何避免线程安全以及应用场景答单例模式在多线程的应用场合下必须小心使用。如果当唯一实例尚未创建时有两个线程同时调用创建方法那么它们同时没有检测到唯一实例的存在从而同时各自创建了一个实例这样就有两个实例被构造出来从而违反了单例模式中实例唯一的原则。解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁(虽然这样会降低效率)。应用场景对象需要被公用的场合适合使用如多个模块使用同一个数据源连接对象等等12.设计模式里面的工程模式答1简单工厂模式建立一个工厂类对实现了同一接口的一些类进行实例的创建。优点是比较好理解简单易操作。缺点是类的创建依赖工厂类如果想要拓展程序必须对工厂类进行修改2 工厂方法模式对简单工厂模式的改进使用一个工厂接口创建多个工厂类每个工厂创建对应的对象。创建一个工厂接口和创建多个工厂实现类一旦需要增加新的功能直接增加新的工厂类就可以了不需要修改之前的代码。有利于代码的维护和扩展。3 抽象工厂模式MyBatis中使用的比较多事务模块和数据源模块都使用了工厂方法模式。13.代码review工作的重点答1代码规范命名、格式、内容、位置包结构2耦合、性能、内存篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、场景题、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc需要全套面试笔记及答案【点击此处即可/免费获取】https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho13.sql xml语句实体字段和数据库怎么对应)14.修改表结构语句mysql中change和modify 的区别答ALTER TABLE ry-cloud.sys_user_role CHANGE role_id role_id1 bigint(20) NOT NULL COMMENT ‘角色ID’;1change 可以更改列名 和 列类型 (每次都要把新列名和旧列名写上, 即使两个列名没有更改,只是改了类型)2modify 只能更改列属性 只需要写一次列名, 比change 省事点15.数据库mvcc多版本解决的是读写并发冲突)答是数据库的多版本并发控制在读取数据不用加锁也可以提高读取效率和并发性的手段。实现原理一种读取操作, 使用数据在某个时间点的快照显示查询结果, 而不考虑同时运行的其他事务所执行的更改.如果查询的数据已被另一个事务更改, 则会根据undo log的内容重建原始数据. 该技术避免了一些锁定问题这些问题可以通过强制事务等待其他事务完成来减少并发性.隐含字段一个事务最新id回滚的指针16.不用or会导致索引失效如何改造答1)代码层面查两次2或者用UNION来代替17.数据库视图、序列化、存储过程答1数据库视图数据库一个或多个表导出的虚拟表方便用户对数据进行操作。视图的数据依赖原数据二者会互相影响。2数据库序列化是将数据结构或者对象转换成字节流、json等方便去存储或者是传输。318.数据库的事务19.分库分表答关系型数据库容易成为系统瓶颈链接数量存储容量都是有限的超过1千万之后因其查询维度的较多性能会下降严重。1垂直切分分库根据业务不同拆成不同库分表把不常用的字段或者长度比较大的字段拆到另一张表主键跟着走。缺点只能在代码里面去聚合增加了其复杂度2水平切分库内分表、分库分表。将按照不同的条件分散到多个数据库或者多个表中使单表数据量变小。缺点维护难度加大、跨分片的事务不好保证20.事务不生效的原因答1方法不是public2异常被方法吞掉了3抛出异常类型大于Transactional 默认回滚的是 RuntimeException 和 Error4非同一个线程21.jdk 1.8的新特性答Lambda表达式、Stream API、map数据结构优化22.java8函数式接口Functional Interface答函数式接口(Functional Interface)就是一个有且仅有一个抽象方法但是可以有多个非抽象方法的接口。为lambda表达式和方法引用(用冒号::来进行方法的调用)提供目标类型23.spring的知识点24.aop底层答面向切面的编程通过预编译和运行期间动态代理实现程序功能统一的技术。实现invocationHandle类则是JDK动态代理否则是CGLib动态代理。25.SpringCloud会出现那些安全问题26…SpringBoot监听器27.SpringBoot的优势以及创建方式答1主要是简化新spring应用的初始搭建和开发过程使用IntelliJ IDEA可以利用创建Spring Initializr的方式创建Spring Boot项目、使用官方文档创建项目在Spring官方文档上面提供了一种在线生成Spring Boot项目的方式、使用Spring Tool Suite可以直接新建Spring Starter Project项目2)嵌入式Web容器、自动化配置、可执行Jar部署28.SpringCloud的配置文件答nacos或者阿波罗都可以。29.springMVCModel(模型)、View(视图)、Controller(控制器)答是一种软件设计规范将业务逻辑、数据、显示分离的方法来组织代码降低了视图和业务逻辑之间的耦合。浏览器把请求放到试图层控制器收到请求模型处理数据返回视图响应给浏览器30.map的实现类答HashMap、TreeMap、31.流的并行和串行答串行Stream并行parallelStream其底层使用Fork/Join框架实现通过Fork把任务拆开Join把结果进行合并)32.环境切换idea的设置答spring.profiles.active》VM options两处改动33.Java中的值传递和引用传递答1值传递(pass by value)在调用函数时将实际参数复制一份传递到函数中这样在函数中对参数进行修改就不会影响到原来的实际参数2引用传递(pass by reference):在调用函数时将实际参数的地址直接传递到函数中。这样在函数中对参数进行的修改就会影响到实际参数个人认为在一个类中调用其他方法这个方法中如果是直接复制对象则是值传递如果是在参数基础上改则是引用传递34.反射应用场景答1可以动态的加载类并创建其实例。String className “com.example.MyClass”;Class clazz Class.forName(className);Object obj clazz.newInstance();2通过反射我们可以在运行时动态地获取类的信息。这样就可以获取类的构造方法、字段、方法等信息并进行相应的操作。35.异常处理finaly里面的执行答1不管try中是否出现异常finally块中的代码都会执行2当try和catch中有return时finally依然会执行3finally中如果包含return那么程序将在这里返回而不是try或catch中的return返回返回值就不是try或catch中保存的返回值了36.dubbo一次性数据量太大出现的情况答会出现Dubbo报错Data length too large首先看这种大数据是不是符合双方约定的如果是的话就去修改生产者xml payload参数否则可以加一些限制。37.throw 和 throws 的区别答throw代表动作表示抛出一个异常的动作throws代表一种状态代表方法可能有异常抛出throw用在方法实现中而throws用在方法声明中throw只能用于抛出一种异常而throws可以抛出多个异常38.多线程锁39.分布式锁原理答在多进程环境里面通过外部的工具来达到加锁功能40.redis的看门狗在没有自定义释放时间才会生效)答是redission提供的自动延期机制使得分布式锁可以自动延期默认30秒。41.分布式锁遇到的问题答1可能忘记了释放锁2释放了别人的锁3锁超时等问题42.分布式锁的方式答redission、zk、数据库43.线程池参数的设定答1) IO 密集型任务:2*核心数1(2) CPU密集型任务:核心数1即使当计算CPU密集型的线程偶尔由于页缺失故障或者其他原因而暂停时这个“额外”的线程也能确保 CPU 的时钟周期不会被浪费。44.网络状态的含义401等等答1401 Unauthorized请求要求身份验证。客户端需要进行身份验证才能获取请求的内容。如果请求未包含有效的身份验证凭据服务器可能返回此状态码。2400 Bad Request客户端发送的请求有错误。服务器不理解或无法处理客户端发送的请求。这可能是由于参数错误、缺少必要的信息或语法错误等引起的。3403 Forbidden服务器拒绝了客户端的请求。客户端没有访问请求的权限无法获取请求的资源。4404 Not Found请求的资源不存在。服务器未能找到请求的资源。这可能是由于资源被删除或请求的 URL 错误等引起的。5502 Bad Gateway服务器作为网关或代理从上游服务器接收到无效的响应。通常表示上游服务器发生了故障或响应超时。45.如何快速找到nginx目录答1在默认安装位置下查看大多数一般会安装在默认位置下/usr/local/openresty/nginx 或/usr/local/nginx2查看nginx进程ps -aux|grep nginx3nginx运行进程执行ls -l /proc/进程号/exe ,然后会打印出安装/运行位置46.docker答docker是一个开源的应用容器引擎开发者可以把程序及其依赖项打包到一个可移值的镜像中可以在任意的linux/Windows系统上运行这些镜像。47.主从复制48.jvm调优49.Linux命令50.消息中间件的原理Kafka、Pulsar等等以及项目运用情况篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、场景题、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc需要全套面试笔记及答案【点击此处即可/免费获取】https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho51.数据库死锁互斥条件、请求与保持条件、不剥夺条件、循环等待条件)答两个或多个事务竞争资源导致互相等待称为死锁52.如何查看死锁答查看错误日志、使用命令SHOW ENGINE INNODB STATUS53.死锁解决方法答手动解决回滚其中一个事务设置锁等待超时时间让其自动解除54.如何避免死锁答1避免大事务2合理设计索引减少表扫描3减少锁粒度55.vue的生命周期答1创建阶段beforeCreate进行数据侦听和事件/侦听器的配置之前同步调用created可以访问数据了2挂载阶段beforeMountdom马上被渲染mounteddom被渲染出来了3更新阶段beforeUpdate数据发送了变化dom还没更新)updated数据更改导致dom被更改)4销毁阶段beforeDestroy实例销毁前的调用)destroyed实例被销毁vue指令被解除)56.vue如何防抖答多次输入只提交最后一次主要思想就是定时器57.前端vue如何节流答多次点击只执行一次函数58.SpringBoot的自动装配答SpringBoot主要解决了Spring传统重量级xml配置bean启动类里面有SpringBootApplication注解包含了SpringBootConfigurationEnableAutoConfigurationComponentScan。其中SpringBootConfiguration注解标记启动类为配置类ComponentScan注解会去扫描启动类所在包及子包下面所标记的bean类由IOC去注册为beanEnableAutoConfiguration通过 Import 注解导入 AutoConfigurationImportSelector类然后通过AutoConfigurationImportSelector 类的 selectImports 方法去读取需要被自动装配的组件依赖下的spring.factories文件配置的组件的类全名并按照一定的规则过滤掉不符合要求的组件的类全名将剩余读取到的各个组件的类全名集合返回给IOC容器并将这些组件注册为bean59.nacos答用来做动态服务发现、配置管理、服务管理平台优点可以动态的添加、删除服务实例无须重启服务或者改代码可以提供不同环境、角色的配置支持流量管理可以进行控制、限流和熔断易于操作的管理界面社区活跃60.线程池队列类型LinkedBlockingDeque链表同步阻塞队列ArrayBlockingQueue数组同步阻塞队列SynchronousQueue同步阻塞队列61.如何引用bean除了Resource和Autowired出现了null什么原因静态类不会依赖管理答静态方法获取bean实例采用Resource和Autowired会导致空指针。首先说说场景我有一个工具类这个工具类要去调数据库mapper做一些处理静态方法里面要使用mapper这个mapper必须有static。分析原因静态方法属于类本身不依赖类的实例状态无法直接访问。解决办法在某个类持有ApplicationContext 引用通过他的上下文获取62.hashmap如果冲突了自身如何解决冲突答采用拉链法类似hashmap在数组内添加一个链表63.有一个Kafka配置页面页面有信息录入和是否消费开关按钮如何去设计如果用多线程如果管理答64.创建对象5种方式答省略65.if/else 和swatch case答swith/case使用跳转表来提高效率如果case数量较多性能优于if/elseif/else是去遍历每个条件如果分支少且条件复杂选择if/else更合适66.kafka分区和gourp答Kafka为了提高并发性生产者会把数据分发到多个分区多个消费者可以组成一个消费组一个分区数据只会被消费组的一个消费。建议消费组中的消费者数量和分区partition保持一致67.Kafka消息堆积处理答分析是消费数量不够还是消费处理时间较长68.同一个类一个方法调用带Transctional的方法会导致事务不生效答调用实际上是在当前类的实例内部发生的。因此它不会触发 Spring AOP 代理的拦截也就意味着不会触发事务管理器的拦截器69.冒泡算法答冒泡排序就是对待排序的的序列从前往后两两比较如果发现逆序则交换最终得到从小到大的顺序70.修改文件权限、查看系统端口Linux命令答1修改文件权限chmod 644 test.php #只有拥有者可以修改, 其他人只能看文件内容.chmod ow test.php文件所有者可以用字母 u user表示. 用户所在的组可以用字母 g group来表示. 其他人可以用字母 o other来表示. 所有人可以用字母 a all来表示.2查看系统端口netstat -ntlp//查看当前所有tcp端口·查看一台服务器上面哪些服务及端口netstat -lanp71.gateway断言、过滤器类型答断言功能可以决定http请求应该由那个Route来做路由。就是我们nacos的predicates匹配规则过滤器类型答1网关过滤器GatewayFilter一般放在配置文件里面比如nacosspring.cloud.routes.filters)作用在所有路由上面2全局过滤器GlobalFilter不用在配置文件中比如全局日志过滤器打印日志72.AQS答用于构建锁和同步器的基础框架用于并发编程基于FIFOFirst In, First Out等待队列的阻塞锁和同步器73.maven命令答mvn -v、mvn package依据项目生成 jar 文件 、mvn install在本地 Repository 中安装 jar 、mvn clean清除目标目录中的生成结果74.Kafka的Broker、Partition答1Broker是Kafka的实例2Topic是消息的主题可以理解为消息的分类数据就保存在里面每个Broker可以建立多个Topic3Partition是Topic的分区分区的作用就是负载提高Kafka的吞吐量75.java数据类型几种答八种基本数据类型byte、short、int、longfloat、doublecharboolean四种引用类型数组、接口、类、枚举、注解、字符串、76.docker答77.sa-token登录考虑答78.xml模糊查询的写法答select * form user where name like concat‘%’,#{name},‘%’79.用mybatis的插件需要实现什么答实现Interceptor80.redis list数据写入命令答lpush key value将元素添加到列表左边Rpush key value将元素添加到列表右边)81.ConcurrentHashMap的锁粒度答ConcurrentHashMap在jdk1.8采用CASsynchronized实现更加细粒度的锁锁的粒度指的是锁定共享资源的范围大小在jdk1.7锁粒度是每个段Segment1.8是每个链表或红黑树的根节点82.java内存答指的就是jvm内存模型83.多线程包JUC包答JUC是java.util.concurrent包的简称84.并发答85.多线程86.mysql批量插入答mybatis-plus实现批量插入开启insertBatchSomeColumn()自定义sql注入器继承DefaultSqlInjector将自定义sql注入器注册为bean新建mapper继承BaseMapper配置insertBatchSomeColumn()方法87.springboot的缺点答1升级困难每次升级变更较大2依赖大量第三方库管理复杂且容易冲突3资源占用较多88.SpringBoot读取配置的6种方式1使用Value注解2使用Environment接口3使用ConfigurationProperties注解4使用PropertySource注解89.对于一个大文件如何分批读取来减轻内存压力呢答采用OpenCsv来读取设置一个每次读取的行数如果集合size大于了这个行数就去处理数据并清空集合。90.dubbo如何熔断答使用mock机制Reference(mock “return 666”)配置熔断参数配置超时时间和重试次数来停止调用服务91.Kafka和RabbitMQ的区别答应用场景方面mq用于实时方面可靠性要求比较高Kafka用于活跃的流式数据适合处理大数据量消费模型92.mysql的符号答主要用于定义和使用用户变量93.vue3路由类型答1基本路由只包含一个路由对象参数2命名路由包含了多个路由参数94.v-for为什么要用key答key的作用可以通过diff算法提高页面的渲染效率95.left join 有大表和小表谁放在前面答让小表作为驱动表效率更高他的扫描rows会更少96.学生表姓名、科目、成绩找出全部科目都及格的学生答select name ,count(*) from student swhere grades 60 group by name having count(*)3 ;这里我限定三门了97.领域驱动DDDDomain-Driven Design简称 DDD)答他是一种面向对象的设计方法强调业务逻辑和领域模型置于软件设计中心。总结首先就是把自己的项目讲清楚特别是自己项目涉及的技术尽量把底层也弄懂现在的面试占比可能项目占70%八股文也就30%。如果有涉及笔试的话建议多看看表结构设计sql要能手写出来比较好。还有就是自己的简历可以多优化一下不要太简单了多找厉害的朋友参考参考。
2026年Java面试总结(持续更新)
最近趁着金三银四面了五六家公司吧也整理了一些问题供大家参考一下适合经验三四年左右的。面试问题答案是我自己总结的不一定正确1.自我介绍简单一点吧把自己的情况说清楚一两分钟即可。2.微服务的组件答微服务是把一个类似单体项目根据某种维度进行拆分比如根据功能模块进行拆分。拆分之后具备了更好的抗压性/扩展性还可以更好的解耦但是维护相比之前会更麻烦了常用的组件有Spring Cloud。其中里面有Nacos用来做注册中心/配置中心Gateway用来做网关Hystrx:做限流、熔断、降级Dubbo做服务间的调用Feign:也是服务间的调用3.mq的运用答本项目中是用作削峰和解耦。4.项目的并发量5.机器搭建6.团队的规模7.查询优化答索引8.spring的知识点9.resource/Autowired区别答1来源不一样Autowired 是 Spring 定义的注解而 Resource 是 Java 定义的注解2依赖查找的顺序不同依赖注入的功能是通过先在 Spring IoC 容器中查找对象再将对象注入引入到当前类中Autowired 是先根据类型byType查找如果存在多个 Bean 再根据名称byName进行查找Resource 是先根据名称查找如果根据名称查找不到再根据类型进行查找3支持的参数不同Autowired 和 Resource 在使用时都可以设置参数其中 Autowired 只支持设置一个 required 的参数而 Resource 支持 7 个参数4依赖注入的用法不同Autowired 支持属性注入、构造方法注入和 Setter 注入而 Resource 只支持属性注入和 Setter 注入5编译器 IDEA 的提示不同Autowired 编译器会提示报错信息10.设计模式答单例模式、设配器模式、工厂模式、代理模式11.单例模式如何避免线程安全以及应用场景答单例模式在多线程的应用场合下必须小心使用。如果当唯一实例尚未创建时有两个线程同时调用创建方法那么它们同时没有检测到唯一实例的存在从而同时各自创建了一个实例这样就有两个实例被构造出来从而违反了单例模式中实例唯一的原则。解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁(虽然这样会降低效率)。应用场景对象需要被公用的场合适合使用如多个模块使用同一个数据源连接对象等等12.设计模式里面的工程模式答1简单工厂模式建立一个工厂类对实现了同一接口的一些类进行实例的创建。优点是比较好理解简单易操作。缺点是类的创建依赖工厂类如果想要拓展程序必须对工厂类进行修改2 工厂方法模式对简单工厂模式的改进使用一个工厂接口创建多个工厂类每个工厂创建对应的对象。创建一个工厂接口和创建多个工厂实现类一旦需要增加新的功能直接增加新的工厂类就可以了不需要修改之前的代码。有利于代码的维护和扩展。3 抽象工厂模式MyBatis中使用的比较多事务模块和数据源模块都使用了工厂方法模式。13.代码review工作的重点答1代码规范命名、格式、内容、位置包结构2耦合、性能、内存篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、场景题、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc需要全套面试笔记及答案【点击此处即可/免费获取】https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho13.sql xml语句实体字段和数据库怎么对应)14.修改表结构语句mysql中change和modify 的区别答ALTER TABLE ry-cloud.sys_user_role CHANGE role_id role_id1 bigint(20) NOT NULL COMMENT ‘角色ID’;1change 可以更改列名 和 列类型 (每次都要把新列名和旧列名写上, 即使两个列名没有更改,只是改了类型)2modify 只能更改列属性 只需要写一次列名, 比change 省事点15.数据库mvcc多版本解决的是读写并发冲突)答是数据库的多版本并发控制在读取数据不用加锁也可以提高读取效率和并发性的手段。实现原理一种读取操作, 使用数据在某个时间点的快照显示查询结果, 而不考虑同时运行的其他事务所执行的更改.如果查询的数据已被另一个事务更改, 则会根据undo log的内容重建原始数据. 该技术避免了一些锁定问题这些问题可以通过强制事务等待其他事务完成来减少并发性.隐含字段一个事务最新id回滚的指针16.不用or会导致索引失效如何改造答1)代码层面查两次2或者用UNION来代替17.数据库视图、序列化、存储过程答1数据库视图数据库一个或多个表导出的虚拟表方便用户对数据进行操作。视图的数据依赖原数据二者会互相影响。2数据库序列化是将数据结构或者对象转换成字节流、json等方便去存储或者是传输。318.数据库的事务19.分库分表答关系型数据库容易成为系统瓶颈链接数量存储容量都是有限的超过1千万之后因其查询维度的较多性能会下降严重。1垂直切分分库根据业务不同拆成不同库分表把不常用的字段或者长度比较大的字段拆到另一张表主键跟着走。缺点只能在代码里面去聚合增加了其复杂度2水平切分库内分表、分库分表。将按照不同的条件分散到多个数据库或者多个表中使单表数据量变小。缺点维护难度加大、跨分片的事务不好保证20.事务不生效的原因答1方法不是public2异常被方法吞掉了3抛出异常类型大于Transactional 默认回滚的是 RuntimeException 和 Error4非同一个线程21.jdk 1.8的新特性答Lambda表达式、Stream API、map数据结构优化22.java8函数式接口Functional Interface答函数式接口(Functional Interface)就是一个有且仅有一个抽象方法但是可以有多个非抽象方法的接口。为lambda表达式和方法引用(用冒号::来进行方法的调用)提供目标类型23.spring的知识点24.aop底层答面向切面的编程通过预编译和运行期间动态代理实现程序功能统一的技术。实现invocationHandle类则是JDK动态代理否则是CGLib动态代理。25.SpringCloud会出现那些安全问题26…SpringBoot监听器27.SpringBoot的优势以及创建方式答1主要是简化新spring应用的初始搭建和开发过程使用IntelliJ IDEA可以利用创建Spring Initializr的方式创建Spring Boot项目、使用官方文档创建项目在Spring官方文档上面提供了一种在线生成Spring Boot项目的方式、使用Spring Tool Suite可以直接新建Spring Starter Project项目2)嵌入式Web容器、自动化配置、可执行Jar部署28.SpringCloud的配置文件答nacos或者阿波罗都可以。29.springMVCModel(模型)、View(视图)、Controller(控制器)答是一种软件设计规范将业务逻辑、数据、显示分离的方法来组织代码降低了视图和业务逻辑之间的耦合。浏览器把请求放到试图层控制器收到请求模型处理数据返回视图响应给浏览器30.map的实现类答HashMap、TreeMap、31.流的并行和串行答串行Stream并行parallelStream其底层使用Fork/Join框架实现通过Fork把任务拆开Join把结果进行合并)32.环境切换idea的设置答spring.profiles.active》VM options两处改动33.Java中的值传递和引用传递答1值传递(pass by value)在调用函数时将实际参数复制一份传递到函数中这样在函数中对参数进行修改就不会影响到原来的实际参数2引用传递(pass by reference):在调用函数时将实际参数的地址直接传递到函数中。这样在函数中对参数进行的修改就会影响到实际参数个人认为在一个类中调用其他方法这个方法中如果是直接复制对象则是值传递如果是在参数基础上改则是引用传递34.反射应用场景答1可以动态的加载类并创建其实例。String className “com.example.MyClass”;Class clazz Class.forName(className);Object obj clazz.newInstance();2通过反射我们可以在运行时动态地获取类的信息。这样就可以获取类的构造方法、字段、方法等信息并进行相应的操作。35.异常处理finaly里面的执行答1不管try中是否出现异常finally块中的代码都会执行2当try和catch中有return时finally依然会执行3finally中如果包含return那么程序将在这里返回而不是try或catch中的return返回返回值就不是try或catch中保存的返回值了36.dubbo一次性数据量太大出现的情况答会出现Dubbo报错Data length too large首先看这种大数据是不是符合双方约定的如果是的话就去修改生产者xml payload参数否则可以加一些限制。37.throw 和 throws 的区别答throw代表动作表示抛出一个异常的动作throws代表一种状态代表方法可能有异常抛出throw用在方法实现中而throws用在方法声明中throw只能用于抛出一种异常而throws可以抛出多个异常38.多线程锁39.分布式锁原理答在多进程环境里面通过外部的工具来达到加锁功能40.redis的看门狗在没有自定义释放时间才会生效)答是redission提供的自动延期机制使得分布式锁可以自动延期默认30秒。41.分布式锁遇到的问题答1可能忘记了释放锁2释放了别人的锁3锁超时等问题42.分布式锁的方式答redission、zk、数据库43.线程池参数的设定答1) IO 密集型任务:2*核心数1(2) CPU密集型任务:核心数1即使当计算CPU密集型的线程偶尔由于页缺失故障或者其他原因而暂停时这个“额外”的线程也能确保 CPU 的时钟周期不会被浪费。44.网络状态的含义401等等答1401 Unauthorized请求要求身份验证。客户端需要进行身份验证才能获取请求的内容。如果请求未包含有效的身份验证凭据服务器可能返回此状态码。2400 Bad Request客户端发送的请求有错误。服务器不理解或无法处理客户端发送的请求。这可能是由于参数错误、缺少必要的信息或语法错误等引起的。3403 Forbidden服务器拒绝了客户端的请求。客户端没有访问请求的权限无法获取请求的资源。4404 Not Found请求的资源不存在。服务器未能找到请求的资源。这可能是由于资源被删除或请求的 URL 错误等引起的。5502 Bad Gateway服务器作为网关或代理从上游服务器接收到无效的响应。通常表示上游服务器发生了故障或响应超时。45.如何快速找到nginx目录答1在默认安装位置下查看大多数一般会安装在默认位置下/usr/local/openresty/nginx 或/usr/local/nginx2查看nginx进程ps -aux|grep nginx3nginx运行进程执行ls -l /proc/进程号/exe ,然后会打印出安装/运行位置46.docker答docker是一个开源的应用容器引擎开发者可以把程序及其依赖项打包到一个可移值的镜像中可以在任意的linux/Windows系统上运行这些镜像。47.主从复制48.jvm调优49.Linux命令50.消息中间件的原理Kafka、Pulsar等等以及项目运用情况篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了Java面试、场景题、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafc需要全套面试笔记及答案【点击此处即可/免费获取】https://docs.qq.com/doc/DQXdYWE9LZ2ZHZ1ho51.数据库死锁互斥条件、请求与保持条件、不剥夺条件、循环等待条件)答两个或多个事务竞争资源导致互相等待称为死锁52.如何查看死锁答查看错误日志、使用命令SHOW ENGINE INNODB STATUS53.死锁解决方法答手动解决回滚其中一个事务设置锁等待超时时间让其自动解除54.如何避免死锁答1避免大事务2合理设计索引减少表扫描3减少锁粒度55.vue的生命周期答1创建阶段beforeCreate进行数据侦听和事件/侦听器的配置之前同步调用created可以访问数据了2挂载阶段beforeMountdom马上被渲染mounteddom被渲染出来了3更新阶段beforeUpdate数据发送了变化dom还没更新)updated数据更改导致dom被更改)4销毁阶段beforeDestroy实例销毁前的调用)destroyed实例被销毁vue指令被解除)56.vue如何防抖答多次输入只提交最后一次主要思想就是定时器57.前端vue如何节流答多次点击只执行一次函数58.SpringBoot的自动装配答SpringBoot主要解决了Spring传统重量级xml配置bean启动类里面有SpringBootApplication注解包含了SpringBootConfigurationEnableAutoConfigurationComponentScan。其中SpringBootConfiguration注解标记启动类为配置类ComponentScan注解会去扫描启动类所在包及子包下面所标记的bean类由IOC去注册为beanEnableAutoConfiguration通过 Import 注解导入 AutoConfigurationImportSelector类然后通过AutoConfigurationImportSelector 类的 selectImports 方法去读取需要被自动装配的组件依赖下的spring.factories文件配置的组件的类全名并按照一定的规则过滤掉不符合要求的组件的类全名将剩余读取到的各个组件的类全名集合返回给IOC容器并将这些组件注册为bean59.nacos答用来做动态服务发现、配置管理、服务管理平台优点可以动态的添加、删除服务实例无须重启服务或者改代码可以提供不同环境、角色的配置支持流量管理可以进行控制、限流和熔断易于操作的管理界面社区活跃60.线程池队列类型LinkedBlockingDeque链表同步阻塞队列ArrayBlockingQueue数组同步阻塞队列SynchronousQueue同步阻塞队列61.如何引用bean除了Resource和Autowired出现了null什么原因静态类不会依赖管理答静态方法获取bean实例采用Resource和Autowired会导致空指针。首先说说场景我有一个工具类这个工具类要去调数据库mapper做一些处理静态方法里面要使用mapper这个mapper必须有static。分析原因静态方法属于类本身不依赖类的实例状态无法直接访问。解决办法在某个类持有ApplicationContext 引用通过他的上下文获取62.hashmap如果冲突了自身如何解决冲突答采用拉链法类似hashmap在数组内添加一个链表63.有一个Kafka配置页面页面有信息录入和是否消费开关按钮如何去设计如果用多线程如果管理答64.创建对象5种方式答省略65.if/else 和swatch case答swith/case使用跳转表来提高效率如果case数量较多性能优于if/elseif/else是去遍历每个条件如果分支少且条件复杂选择if/else更合适66.kafka分区和gourp答Kafka为了提高并发性生产者会把数据分发到多个分区多个消费者可以组成一个消费组一个分区数据只会被消费组的一个消费。建议消费组中的消费者数量和分区partition保持一致67.Kafka消息堆积处理答分析是消费数量不够还是消费处理时间较长68.同一个类一个方法调用带Transctional的方法会导致事务不生效答调用实际上是在当前类的实例内部发生的。因此它不会触发 Spring AOP 代理的拦截也就意味着不会触发事务管理器的拦截器69.冒泡算法答冒泡排序就是对待排序的的序列从前往后两两比较如果发现逆序则交换最终得到从小到大的顺序70.修改文件权限、查看系统端口Linux命令答1修改文件权限chmod 644 test.php #只有拥有者可以修改, 其他人只能看文件内容.chmod ow test.php文件所有者可以用字母 u user表示. 用户所在的组可以用字母 g group来表示. 其他人可以用字母 o other来表示. 所有人可以用字母 a all来表示.2查看系统端口netstat -ntlp//查看当前所有tcp端口·查看一台服务器上面哪些服务及端口netstat -lanp71.gateway断言、过滤器类型答断言功能可以决定http请求应该由那个Route来做路由。就是我们nacos的predicates匹配规则过滤器类型答1网关过滤器GatewayFilter一般放在配置文件里面比如nacosspring.cloud.routes.filters)作用在所有路由上面2全局过滤器GlobalFilter不用在配置文件中比如全局日志过滤器打印日志72.AQS答用于构建锁和同步器的基础框架用于并发编程基于FIFOFirst In, First Out等待队列的阻塞锁和同步器73.maven命令答mvn -v、mvn package依据项目生成 jar 文件 、mvn install在本地 Repository 中安装 jar 、mvn clean清除目标目录中的生成结果74.Kafka的Broker、Partition答1Broker是Kafka的实例2Topic是消息的主题可以理解为消息的分类数据就保存在里面每个Broker可以建立多个Topic3Partition是Topic的分区分区的作用就是负载提高Kafka的吞吐量75.java数据类型几种答八种基本数据类型byte、short、int、longfloat、doublecharboolean四种引用类型数组、接口、类、枚举、注解、字符串、76.docker答77.sa-token登录考虑答78.xml模糊查询的写法答select * form user where name like concat‘%’,#{name},‘%’79.用mybatis的插件需要实现什么答实现Interceptor80.redis list数据写入命令答lpush key value将元素添加到列表左边Rpush key value将元素添加到列表右边)81.ConcurrentHashMap的锁粒度答ConcurrentHashMap在jdk1.8采用CASsynchronized实现更加细粒度的锁锁的粒度指的是锁定共享资源的范围大小在jdk1.7锁粒度是每个段Segment1.8是每个链表或红黑树的根节点82.java内存答指的就是jvm内存模型83.多线程包JUC包答JUC是java.util.concurrent包的简称84.并发答85.多线程86.mysql批量插入答mybatis-plus实现批量插入开启insertBatchSomeColumn()自定义sql注入器继承DefaultSqlInjector将自定义sql注入器注册为bean新建mapper继承BaseMapper配置insertBatchSomeColumn()方法87.springboot的缺点答1升级困难每次升级变更较大2依赖大量第三方库管理复杂且容易冲突3资源占用较多88.SpringBoot读取配置的6种方式1使用Value注解2使用Environment接口3使用ConfigurationProperties注解4使用PropertySource注解89.对于一个大文件如何分批读取来减轻内存压力呢答采用OpenCsv来读取设置一个每次读取的行数如果集合size大于了这个行数就去处理数据并清空集合。90.dubbo如何熔断答使用mock机制Reference(mock “return 666”)配置熔断参数配置超时时间和重试次数来停止调用服务91.Kafka和RabbitMQ的区别答应用场景方面mq用于实时方面可靠性要求比较高Kafka用于活跃的流式数据适合处理大数据量消费模型92.mysql的符号答主要用于定义和使用用户变量93.vue3路由类型答1基本路由只包含一个路由对象参数2命名路由包含了多个路由参数94.v-for为什么要用key答key的作用可以通过diff算法提高页面的渲染效率95.left join 有大表和小表谁放在前面答让小表作为驱动表效率更高他的扫描rows会更少96.学生表姓名、科目、成绩找出全部科目都及格的学生答select name ,count(*) from student swhere grades 60 group by name having count(*)3 ;这里我限定三门了97.领域驱动DDDDomain-Driven Design简称 DDD)答他是一种面向对象的设计方法强调业务逻辑和领域模型置于软件设计中心。总结首先就是把自己的项目讲清楚特别是自己项目涉及的技术尽量把底层也弄懂现在的面试占比可能项目占70%八股文也就30%。如果有涉及笔试的话建议多看看表结构设计sql要能手写出来比较好。还有就是自己的简历可以多优化一下不要太简单了多找厉害的朋友参考参考。