最近一个粉丝说,他面试了4个公司,有三个公司问他:"Spring Boot 中自动装配机制的原理" 他回答了,感觉没回答错误,但是怎么就没给offer呢? 对于这个问题,看看普通人和高手该如何回答. 普通人: 嗯- Spring Boot里面的自动装配,就是@EnableAutoConfiguration注解. 嗯-它可以实现Bean的自动管理,不需要我们手动再去配置. 高手: 自动装配,简单来说就是自动把第三方组件的Bean装载到Spring IOC器里面,不需要开发人员再去写Bea…
对于Spring Boot约定优于配置这个问题,看看普通人和高手是如何回答的? 普通人的回答: 嗯, 在Spring Boot里面,通过约定优于配置这个思想,可以让我们少写很多的配置, 然后就只需要关注业务代码的编写就行.嗯! 高手的回答: 我从4个点方面来回答. 1.首先, 约定优于配置是一种软件…
在前面的分析中,Spring Framework一直在致力于解决一个问题,就是如何让bean的管理变得更简单,如何让开发者尽可能的少关注一些基础化的bean的配置,从而实现自动装配.所以,所谓的自动装配,实际上就是如何自动将bean装载到Ioc容器中来. 实际上在spring 3.x版本中,Enable模块驱动注解的出现,已经有了一定的自动装配的雏形,而真正能够实现这一机制,还是在spirng 4.x版本中,conditional条件注解的出现.ok,我们来看一下spring boot的自动装配…
一个工作了2年的粉丝,私信了一个比较简单的问题. 说: "Spring中事务的传播行为有哪些?" 他说他能记得一些,但是在项目中基本上不需要配置,所以一下就忘记了. 结果导致面试被拒绝,有点遗憾! ok,关于这个问题,看看普通人和高手的回答. 普通人: 嗯........ 高手: 对于这个问题,需要从几个方面去回答. 首选, 所谓的事务传播行为,就是多个声明了事务的方法相互调用的时候,这个事务应该如何传播. 比如说,methodA()调用methodB(),两个方法都显示的开启了事务.…
一个工作了4年的小伙伴,他说他从线下培训就开始接触Spring,到现在已经快5年时间了. 从来没有想过,为什么要使用Spring 框架. 结果在面试的时候,竟然遇到一个这样的问题. 大脑一时间短路了,来求助我,这类问题应该怎么去回答. 下面我们来看看普通人和高手的回答 普通人: 嗯............. 高手: Spring是一个轻量级应用框架,它提供了IoC和AOP这两个核心的功能. 它的核心目的是为了简化企业级应用程序的开发,使得开发者只需要关心业务需求,不需要关心Bean的管理, 以及…
一个工作3年的小伙子,去面试被问到Spring里面的问题. 这个问题比较简单,但是他却没有回答上来. 虽然他可以通过搜索引擎找到答案,但是如果没有理解,下次面试还是不会! 这个面试题是: "Spring中的Bean,作用域有哪些?" 对于这个问题,看看普通人和高手的回答. 普通人: 嗯....... 高手: 好的,这个问题可以从几个方面来回答. 首先呢,Spring 框架里面的IOC容器,可以非常方便的去帮助我们管理应用里面的Bean对象实例. 我们只需要按照Spring里面提供的xm…
一个工作七年的小伙伴,竟然不知道"wait"和"notify"为什么要在Synchronized代码块里面. 好吧,如果屏幕前的你也不知道,请在评论区打上"不知道". 对于这个问题,我们来看看普通人和高手的回答. 普通人: 额............ 高手: wait和notify用来实现多线程之间的协调,wait表示让线程进入到阻塞状态,notify表示让阻塞的线程唤醒. wait和notify必然是成对出现的,如果一个线程被wait()方法阻…
AQS是AbstractQueuedSynchronizer的简称,是并发编程中比较核心的组件. 在很多大厂的面试中,面试官对于并发编程的考核要求相对较高,简单来说,如果你不懂并发编程,那么你很难通过大厂高薪岗位的面试. 今天来和大家聊聊并发编程中的AQS组件. 我们来看一下,关于"谈谈你对AQS的理解",看看普通人和高手是如何回答的! 先来看看普通人的回答: AQS全称是AbstractQueuedSynchronizer,它是J.U.C包中Lock锁的底层实现,可以用它来实现多线程…
前段时间一个小伙伴去面试,遇到这样一个问题. "Fail-safe机制与Fail-fast机制分别有什么作用" 他说他听到这个问题的时候,脑子里满脸问号.那么今天我们来看一下,关于这个问题,普通人和高手应该如何回答吧. 普通人的回答 额- . 嗯 - 高手的回答Fail-safe和Fail-fast,是多线程并发操作集合时的一种失败处理机制. Fail-fast : 表示快速失败,在集合遍历过程中,一旦发现容器中的数据被修改了,会立刻抛出ConcurrentModificationEx…
很多面试官都喜欢问一些"谈谈你对xxx技术的理解". 大家遇到这种问题时,是不是完全不知道从何说起. 那么我们来看一下,普通人和高手是如何回答这个问题的? 普通人: Seata是用来解决分布式事务问题的框架.是阿里开源的中间件. 实际项目中我没有用过,我记得Seata里面有几种事务模型,有一种AT模…
常用数据结构基本上是面试必问的问题,比如HashMap.LinkList.ConcurrentHashMap等. 关于HashMap,有个学员私信了我一个面试题说: "HashMap是怎么解决哈希冲突的?" 关于这个问题,我们来模拟一下普通人和高手对于这个问题的回答. 普通人: 嗯.... HashMap我好久之前看过它的源码,我记得好像是通过链表来解决的! 高手: 嗯,这个问题我从四个方面来回答. 1.要了解Hash冲突,那首先我们要先了解Hash算法和Hash表. (1)Hash算…
昨天一个3年Java经验的小伙伴私信我,他说现在面试怎么这么难啊! 我只是面试一个业务开发,他们竟然问我: 什么叫阻塞队列的有界和无界.现在面试也太卷了吧! 如果你也遇到过类似问题,那我们来看看普通人和高手的回答吧! 普通人 有界队列就是说队列中的元素个数是有限制的,而无界对接表示队列中的元素个数没有限制! 嗯!!! 高手 阻塞队列,是一种特殊的队列,它在普通队列的基础上提供了两个附加功能 当队列为空的时候,获取队列中元素的消费者线程会被阻塞,同时唤醒生产者线程. 当队列满了的时候,向队列中添加…
今天分享的面试题,几乎是90%以上的互联网公司都会问到的问题. "Dubbo的服务请求失败怎么处理"? 对于这个问题,我们来看一下普通人和高手的回答. 普通人: 嗯- 我记得, Dubbo请求处理失败以后,好像是会重试. 嗯! 高手: Dubbo是一个RPC框架,它为我们的应用提供了远程通信能力的封装,同时,Dubbo在RPC通信的基础上,逐步在向一个生态在演进,它涵盖了服务注册.动态路由.容错.服务降级.负载均衡等能力,基本上在微服务架构下面临的问题,Dubbo都可以解决. 而对于D…
之前分享过一期HashMap的面试题,然后有个小伙伴私信我说,他遇到了一个ConcurrentHashMap的问题不知道怎么回答. 于是,就有了这一期的内容!! 我是Mic,一个工作了14年的Java程序员,今天我来分享关于 "ConcurrentHashMap 底层实现原理" 这个问题, 看看普通人和高手是如何回答的! 普通人: 嗯.. ConcurrentHashMap是用数组和链表的方式来实现的,嗯- 在JDK1.8里面还引入了红黑树.然后链表和红黑树是解决hash冲突的.嗯--…
数据结构与算法问题,困扰了无数的小伙伴. 很多小伙伴对数据结构与算法的认知有一个误区,认为工作中没有用到,为什么面试要问,问了能解决实际问题? 图灵奖获得者: Niklaus Wirth 说过: 程序=数据结构+算法, 也就说我们无时无刻都在和数据结构打交道. 只是作为Java开发,由于技术体系的成熟度较高,使得大部分人认为:程序应该等于 框架 + SQL 呀? 今天我们就来分析一道数据结构的题目:"B树和B+树". 关于这个问题,我们来看看普通人和高手的回答! 普通人: 嗯. 我想想…
今天分享一道一线互联网公司高频面试题. "Redis和Mysql如何保证数据一致性". 这个问题难倒了不少工作5年以上的程序员,难的不是问题本身,而是解决这个问题的思维模式. 下面来看看普通人和高手对于这个问题的回答. 普通人: 嗯.... Redis和Mysql的数据一致性保证是吧?我想想. 嗯 , 就是,Mysql的数据发生变化以后,可以同步修改Redis里面的数据. 高手: 一般情况下,Redis用来实现应用和数据库之间读操作的缓存层,主要目的是减少数据库IO,还可以提升数据的I…
一个去阿里面试的小伙伴私信我说:今天被一个死锁的问题难到了. 平常我都特意看了死锁这块的内容,但是回答的时候就想不起来. 这里可能存在一个误区,认为技术是要靠记的. 大家可以想想,平时写代码的时候,这些代码是背下来的吗? 遇到一个需求的时候,能够立刻提供解决思路,这个也是记下来的吗? 所有的技术问题,都可以用一个问题来解决: "如果让你遇到这个问题,你会怎么设计" 当你大脑一篇空白时,说明你目前掌握的技术只能足够支撑你写CURD的能力. 好了,下面来看看普通人和高手是如何回答这个问题的…
一个工作了7年的Java程序员,私信我关于分布式锁的问题. 一上来就两个灵魂拷问: Redis锁超时怎么办? Redis主从切换导致锁失效怎么办? 我说,别着急,这些都是小问题. 那么,关于"分布式锁的理解和实现"这个问题,我们看看普通人高手的回答. 普通人: 嗯,分布式锁,就是可以用来实现锁的分布性,嗯- 就是可以解决跨进程的应用对于共享资源访问的冲突问题. 可以用Redis来实现分布式锁. 高手: 分布式锁,是一种跨进程的跨机器节点的互斥锁,它可以用来保证多机器节点对于共享资源访问…
一个工作了6年的Java程序员,在阿里二面,被问到"volatile"关键字. 然后,就没有然后了- 同样,另外一个去美团面试的工作4年的小伙伴,也被"volatile关键字". 然后,也没有然后了- 这个问题说实话,是有点偏底层,但也的确是并发编程里面比较重要的一个关键字. 下面,我们来看看普通人和高手对于这个问题的回答吧. 普通人: 嗯- volatile可以保证可见性. 高手: volatile关键字有两个作用. 可以保证在多线程环境下共享变量的可见性. 通过…
一个工作了 5年的程序员,在私信里面不断向我诉苦. 他说,他用了Mybatis这么久,怎么滴也算是精通Mybatis了吧. 结果竟然在Mybatis这个面试题上翻车了! 真的好烦! 好吧,我们今天来看看"Mybatis里面的缓存机制",普通人和高手的回答. 普通人: 嗯......... 高手: 这个问题,有点复杂,我打算从几个方面来说明. 首先,Mybatis里面设计了二级缓存来提升数据的检索效率,避免每次数据的访问都需要去查询数据库. 一级缓存,是SqlSession级别的缓存,也…
前天有个去快手面试的小伙伴私信我,他遇到了这样一个问题: "InnoDB如何解决幻读"? 这个问题确实不是很好回答,在实际应用中,很多同学几乎都不关注数据库的事务隔离性. 所有问题基本就是CRUD,一把梭~ 那么今天,我们来看一下 关于"InnoDB如何解决幻读"这个问题,普通人和高手的回答! 普通人: 嗯,我印象中,幻读是通过MVCC机制来解决的,嗯.... MVCC类似于一种乐观锁的机制,通过版本的方式来区分不同的并发事务,避免幻读问题! 高手: 我会从三个方面…
听说10个人去互联网公司面试,有9个人会被问到缓存雪崩和缓存穿透的问题. 听说,这9个人里面,至少有8个人回答得不完整. 而这8个人里面,全都是在网上找的各种面试资料去应付的,并没有真正理解. 当然,也很正常,只有大规模应用缓存的架构才会重点关注这两个问题. 那么如何真正理解这两个问题的底层逻辑,我们来看普通人和高手的回答. 普通人: 嗯................. 高手: 缓存雪崩,就是存储在缓存里面的大量数据,在同一个时刻全部过期, 原本缓存组件抗住的大部分流量全部请求到了数据库. 导…
MAVEN自动编译配置 热部署功能 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> Spring Boot的Plugin配置能够将应用自动打包为war或者jar应用.添加bui…
7.bean的自动装配 是spring满足bean依赖的一种方式 spring会在上下文中自动寻找,并自动给bean装配属性 spring的装配方式: (1)手动装配 在people类中依赖了cat和dog对象,所以属性中手动装配他们的属性 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns = "http://www.springframework.org/schema/beans&q…
面试过程中,场景类的问题更容易检测出一个开发人员的基本能力. 这不,一个小伙伴去阿里面试,第一面就遇到了关于"CPU飙高系统反应慢怎么排查"的问题? 对于这个问题,我们来看看普通人和高手的回答! 普通人: 嗯, CPU飙高的原因可能是线程创建过多导致的. 高手: 好的,关于这个问题,我从四个方面来回答. CPU是整个电脑的核心计算资源,对于一个应用进程来说,CPU的最小执行单元是线程. 导致CPU飙高的原因有几个方面 CPU上下文切换过多,对于CPU来说,同一时刻下每个CPU核心只能运…
今天来分享一道阿里一面的面试题,"lock和synchronized的区别". 对于这个问题,看看普通人和高手的回答! 普通人: 嗯,lock是J.U.C包里面提供的锁,synchronized是Java中的同步关键字. 他们都可以实现多线程对共享资源访问的线程安全性. 高手: 下面我从4个方面来回答 从功能角度来看,Lock和Synchronized都是Java中用来解决线程安全问题的工具. 从特性来看 Synchronized是Java中的同步关键字,Lock是J.U.C包中提供的…
说明:所有的代码基于SpringBoot 2.0.3版本 背景 在应用程序启动后,可以自动执行建库.建表等SQL脚本.下文中以要自动化执行people.sql脚本为例说明,脚本在SpringBoot工程中的路径为:classpath:people.sql,脚本的具体内容如下: CREATE TABLE IF NOT EXISTS people( persion_id BIGINT NOT NULL AUTO_INCREMENT, first_name VARCHAR(), last_name V…
一个工作了3年的Java程序员,遇到一个Spring Boot的问题. 他对这个问题有一些了解,但是回答得不是很好,希望参考我的高手回答. 这个问题是:"如何理解Spring Boot中的Starter". 对于这个问题,看看普通人和高手的回答. 普通人: 嗯............. 高手: Starter是Spring Boot的四大核心功能特性之一,除此之外,Spring Boot还有自动装配.Actuator监控等特性. Spring Boot里面的这些特性,都是为了让开发者在…
摘自:https://www.jianshu.com/p/ddb6e32e3faf Spring Boot的自动配置给开发者带来了很大的便利,当开发人员在pom文件中添加starter依赖后,maven或者gradle会自动下载很多jar包到classpath中.当Spring Boot检测到特定类的存在,就会针对这个应用做一定的配置,自动创建和织入需要的spring bean到程序上下文中. 在之前的文章中,我们只是在pom文件中增加各种starter的依赖,例如:spring-boot-st…
文章目录 添加Maven依赖 创建自定义 Auto-Configuration 添加Class Conditions 添加 bean Conditions Property Conditions Resource Conditions Custom Conditions 测试 停止自动配置 自定义spring boot的自动配置 上篇文章我们讲了spring boot中自动配置的深刻含义和内部结构,这篇文章我们讲一下怎么写出一个自己的自动配置.为了方便和通用起见,这篇文章将会实现一个mysql数…