一个工作了 5年的程序员,在私信里面不断向我诉苦. 他说,他用了Mybatis这么久,怎么滴也算是精通Mybatis了吧. 结果竟然在Mybatis这个面试题上翻车了! 真的好烦! 好吧,我们今天来看看"Mybatis里面的缓存机制",普通人和高手的回答. 普通人: 嗯......... 高手: 这个问题,有点复杂,我打算从几个方面来说明. 首先,Mybatis里面设计了二级缓存来提升数据的检索效率,避免每次数据的访问都需要去查询数据库. 一级缓存,是SqlSession级别的缓存,也…
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模…
对于Spring Boot约定优于配置这个问题,看看普通人和高手是如何回答的? 普通人的回答: 嗯, 在Spring Boot里面,通过约定优于配置这个思想,可以让我们少写很多的配置, 然后就只需要关注业务代码的编写就行.嗯! 高手的回答: 我从4个点方面来回答. 1.首先, 约定优于配置是一种软件…
常用数据结构基本上是面试必问的问题,比如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…
最近一个粉丝说,他面试了4个公司,有三个公司问他:"Spring Boot 中自动装配机制的原理" 他回答了,感觉没回答错误,但是怎么就没给offer呢? 对于这个问题,看看普通人和高手该如何回答. 普通人: 嗯- Spring Boot里面的自动装配,就是@EnableAutoConfiguration注解. 嗯-它可以实现Bean的自动管理,不需要我们手动再去配置. 高手: 自动装配,简单来说就是自动把第三方组件的Bean装载到Spring IOC器里面,不需要开发人员再去写Bea…
一个去阿里面试的小伙伴私信我说:今天被一个死锁的问题难到了. 平常我都特意看了死锁这块的内容,但是回答的时候就想不起来. 这里可能存在一个误区,认为技术是要靠记的. 大家可以想想,平时写代码的时候,这些代码是背下来的吗? 遇到一个需求的时候,能够立刻提供解决思路,这个也是记下来的吗? 所有的技术问题,都可以用一个问题来解决: "如果让你遇到这个问题,你会怎么设计" 当你大脑一篇空白时,说明你目前掌握的技术只能足够支撑你写CURD的能力. 好了,下面来看看普通人和高手是如何回答这个问题的…
一个工作了7年的Java程序员,私信我关于分布式锁的问题. 一上来就两个灵魂拷问: Redis锁超时怎么办? Redis主从切换导致锁失效怎么办? 我说,别着急,这些都是小问题. 那么,关于"分布式锁的理解和实现"这个问题,我们看看普通人高手的回答. 普通人: 嗯,分布式锁,就是可以用来实现锁的分布性,嗯- 就是可以解决跨进程的应用对于共享资源访问的冲突问题. 可以用Redis来实现分布式锁. 高手: 分布式锁,是一种跨进程的跨机器节点的互斥锁,它可以用来保证多机器节点对于共享资源访问…
一个工作了6年的Java程序员,在阿里二面,被问到"volatile"关键字. 然后,就没有然后了- 同样,另外一个去美团面试的工作4年的小伙伴,也被"volatile关键字". 然后,也没有然后了- 这个问题说实话,是有点偏底层,但也的确是并发编程里面比较重要的一个关键字. 下面,我们来看看普通人和高手对于这个问题的回答吧. 普通人: 嗯- volatile可以保证可见性. 高手: volatile关键字有两个作用. 可以保证在多线程环境下共享变量的可见性. 通过…
听说10个人去互联网公司面试,有9个人会被问到缓存雪崩和缓存穿透的问题. 听说,这9个人里面,至少有8个人回答得不完整. 而这8个人里面,全都是在网上找的各种面试资料去应付的,并没有真正理解. 当然,也很正常,只有大规模应用缓存的架构才会重点关注这两个问题. 那么如何真正理解这两个问题的底层逻辑,我们来看普通人和高手的回答. 普通人: 嗯................. 高手: 缓存雪崩,就是存储在缓存里面的大量数据,在同一个时刻全部过期, 原本缓存组件抗住的大部分流量全部请求到了数据库. 导…
一个工作七年的小伙伴,竟然不知道"wait"和"notify"为什么要在Synchronized代码块里面. 好吧,如果屏幕前的你也不知道,请在评论区打上"不知道". 对于这个问题,我们来看看普通人和高手的回答. 普通人: 额............ 高手: wait和notify用来实现多线程之间的协调,wait表示让线程进入到阻塞状态,notify表示让阻塞的线程唤醒. wait和notify必然是成对出现的,如果一个线程被wait()方法阻…
一个工作了4年的小伙伴,他说他从线下培训就开始接触Spring,到现在已经快5年时间了. 从来没有想过,为什么要使用Spring 框架. 结果在面试的时候,竟然遇到一个这样的问题. 大脑一时间短路了,来求助我,这类问题应该怎么去回答. 下面我们来看看普通人和高手的回答 普通人: 嗯............. 高手: Spring是一个轻量级应用框架,它提供了IoC和AOP这两个核心的功能. 它的核心目的是为了简化企业级应用程序的开发,使得开发者只需要关心业务需求,不需要关心Bean的管理, 以及…
一个工作了2年的粉丝,私信了一个比较简单的问题. 说: "Spring中事务的传播行为有哪些?" 他说他能记得一些,但是在项目中基本上不需要配置,所以一下就忘记了. 结果导致面试被拒绝,有点遗憾! ok,关于这个问题,看看普通人和高手的回答. 普通人: 嗯........ 高手: 对于这个问题,需要从几个方面去回答. 首选, 所谓的事务传播行为,就是多个声明了事务的方法相互调用的时候,这个事务应该如何传播. 比如说,methodA()调用methodB(),两个方法都显示的开启了事务.…
前天有个去快手面试的小伙伴私信我,他遇到了这样一个问题: "InnoDB如何解决幻读"? 这个问题确实不是很好回答,在实际应用中,很多同学几乎都不关注数据库的事务隔离性. 所有问题基本就是CRUD,一把梭~ 那么今天,我们来看一下 关于"InnoDB如何解决幻读"这个问题,普通人和高手的回答! 普通人: 嗯,我印象中,幻读是通过MVCC机制来解决的,嗯.... MVCC类似于一种乐观锁的机制,通过版本的方式来区分不同的并发事务,避免幻读问题! 高手: 我会从三个方面…
面试过程中,场景类的问题更容易检测出一个开发人员的基本能力. 这不,一个小伙伴去阿里面试,第一面就遇到了关于"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包中提供的…
最近一个学员去滴滴面试,在第二面的时候遇到了这个问题: "请你简单说一下Kafka的零拷贝原理" 然后那个学员努力在大脑里检索了很久,没有回答上来. 那么今天,我们基于这个问题来看看,普通人和高手是如何回答的! 普通人的回答: 零拷贝是一种减少数据拷贝的机制,能够有效提升数据的效率 高手的回答: 在…
一个工作3年的小伙子,去面试被问到Spring里面的问题. 这个问题比较简单,但是他却没有回答上来. 虽然他可以通过搜索引擎找到答案,但是如果没有理解,下次面试还是不会! 这个面试题是: "Spring中的Bean,作用域有哪些?" 对于这个问题,看看普通人和高手的回答. 普通人: 嗯....... 高手: 好的,这个问题可以从几个方面来回答. 首先呢,Spring 框架里面的IOC容器,可以非常方便的去帮助我们管理应用里面的Bean对象实例. 我们只需要按照Spring里面提供的xm…
[云盘资料]Sql注入从菜鸟到高手系列教程 ps:Sql注入从菜鸟到高手系列教程 链接:阅读原文获取资料:http://bbs.ichunqiu.com/thread-6851-1-1.html 反馈一致受欢迎,看如下:…
Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 欢迎大家加我微信itsoku一起交流java.算法.数据库相关技术. 这是Mysql系列第26篇. 本篇我们使用mysql实现一个分布式锁. 分布式锁的功能 分布式锁使用者位于不同的机器中,锁获取成功之后,才可以对共享资源进行操作 锁具有重入的功能:即一个使用者可以多次获取某个锁 获取锁有超时的功能:即在指定的时间内去尝试获取锁,超过了超时时间,如果还未获取成功,则返回获取失败 能够自动容错,比如:A机器获取锁l…
1 ======================1.零基础快速入门SpringBoot2.0 5节课 =========================== 1.SpringBoot2.x课程全套介绍和高手系列知识点     简介:介绍SpringBoot2.x课程大纲章节         java基础,jdk环境,maven基础 2.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 1.依赖版本jdk8以上, Springboot2…
深度解析互联网大厂面试难题自定义@EnableXX系列   其实是一个@Import的设计技巧 创建注解@EnableXX(任何名称注解都行,只是这个名字好一些) XXConfiguration类不能使用@Component,不然Bean就立即注册了,达不到开关的目的 使用@EnableXX注解的时候,一定是与@Component或者@Configuration进行复合使用,否则开关本身无效,换句话说就是让别的@Component或者@Configuration把自己的@Bean带进去. 实体类…
更多MyCat源码分析,请戳MyCat源码分析系列 BufferPool MyCat的缓冲区采用的是java.nio.ByteBuffer,由BufferPool类统一管理,相关的设置在SystemConfig中.先明确一下相关概念和配置: 每个Buffer单元称之为一个chunk,默认chunk的大小(DEFAULT_BUFFER_CHUNK_SIZE)为4096字节 BufferPool的总大小为DEFAULT_BUFFER_CHUNK_SIZE * processors * 1000,其中…
Java系列笔记(3) - Java 内存区域和GC机制 转载:原文地址http://www.cnblogs.com/zhguang/p/3257367.html 目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露…