挑战面试题一

所有面试题都是从网上收集的,知识面比较广,可能有重复的题目。所有的答案都是我自己查阅资料加上自己的理解所写的,难免有不详之处,希望大家不吝赐教! volatile的底层如何实现,怎么就能保住可见性了?volatile关键字修饰的变量可以确保内存可见性,禁止指令重排序。volatile修饰的变量不允许线程内存cache缓存和重排序,线程读取数据的时候直接读取内存,同时volatile不会对变量加锁,因此性能会比synchronized好。还有一种说法是:读取一个volatile关键字会使相应的处理器执行刷新处理器缓存的动作,写一个volatile关键字会使得相应的处理器执行冲刷处理器缓存的动作。 拓展:假如我们有一个使用volatile的变量instance.有如下代码: 1instance = new Singleton(); 它的汇编代码如下: 120x01a3de1d: movb $0x0,0x1104800(%esi);0x01a3de24: lock addl $0x0,(%esp); //使用volatile修饰的变量会多这行 使用lock前缀的指令会引发两件事情: 将当前处理器缓存含的数据写回到系统内存 这个写回内存的操作回引起在其它CPU里缓存了该内存地址的数据无效

Linux常用命令

查找文件find / -name filename.txt查找/目录下名字为filename.txt的文件。 find / -iname filename.txt忽略大小写。(忽略大小写都是在添加i) find /usr/ -path &q...

SpringMVC源码分析之一个请求的处理

概述SpringMVC是一种web层的mvc框架,用于替代Servlet,主要用于处理和相应请求,获取表单参数,表单校验。使用SpringMVC可以简化编程。 SpringMVC底层的执行流程首先通过一张流传广泛的图,来了解一下大致的流程。

SpringMVC源码分析一

什么是Servlet?Servlet实际是Server+Applet的缩写,表示一个服务器应用。Servlet是JavaEE规范的一部分。 在Servlet3.1中,它的结构图如下:

对秒杀系统的一些思考

秒杀系统的特点 高性能:秒杀涉及到大量的并发读和并发写,因此支持高并发访问这点非常的关键。 一致性:秒杀是有限数量的商品在同一时刻被很多倍的请求同时来减库存,在大并发更新的过程中都要保证数据的准确性。 高可用:秒杀时会在瞬间涌入大量的流量,为了避免系统宕机,保证高可用,需要做好流量限制。

JVM之G1和CMS收集器

CMS垃圾回收器什么是CMS垃圾回收器,CMS回收器的特点CMS即Concurrent Mark Sweep,是一款并发的、使用标记-清除算法的针对老年代的垃圾回收器。如果老年代使用CMS垃圾回收器,需要添加虚拟机参数-XX:+UseConcMarkSweepGCCMS垃圾回收器GC过程暂停短,适合对时延要求较高的服务,用户线程不允许长时间的停顿的场景。但是容易造成严重的内存碎片化,且对CPU资源非常的敏感,无法处理浮动垃圾,可能出现Concurrent Mode Failure失败而导致Full GC产生。

JVM之垃圾回收

需要回收的区域JVM的运行时内存可以分为5个区域:程序计数器,虚拟机栈,本地方法栈,方法区,堆区。其中程序计数器,虚拟机栈,本地方法栈都是与线程同生共死的,因此不要进行垃圾回收。垃圾回收主要关注的堆区和方法区。

JVM之概述

什么是java虚拟机?虚拟机是一种抽象化的计算机,通过在实际上的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令体系。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需要生成在java虚拟机上运行的目标代码,就可以在多种平台上不加修改地运行。做到了一次编译到处运行。在JVM启动之后,它实际上就是一个操作系统中的进程。 JVM的体系结构

mybatis源码分析之缓存机制

概述mybatis提供了缓存机制减轻数据库压力,提高数据库性能。mybatis的缓存分为两级:一级缓存、二级缓存。一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效。二级缓存是mapper级别的缓存,同一个namespace共用一个缓存,所以对SqlSession是共享的。

mybatis源码分析之插件机制

概述mybatis插件又被称为拦截器,mybaits采用责任链模式,通过动态代理组织多个插件,通过这些插件可以改变mybatis的默认行为。mybatis允许在映射语句执行的某一点进行拦截调用。默认情况下,mybatis使用允许使用插件来拦截方法的调用包括:

14567813