- 博客(38)
- 资源 (19)
- 收藏
- 关注
转载 SpringBoot源码解析(一)------启动@SpringBootApplication注解
主程序类(主入口类)@SpringBootApplicationpublic class HelloWorldMainApplication { public static void main(String[] args) { //Spring应用启动 SpringApplication.run(HelloWorldMainApplication.class, args); }}@SpringBootApplication注解定义如下:@
2020-07-24 09:49:25
203
转载 Spring源码-Spring中循环依赖
Spring源码中的3个缓存map/** Cache of singleton objects: bean name to bean instance. *//** singletonObjects 一级缓存,可以理解为spring单利池 存放完整的bean*/private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);/** Cache of singleton f
2020-07-16 10:36:28
333
转载 Class.forName和ClassLoader区别
解释 Class.forName()和ClassLoader都可以对类进行加载。ClassLoader就是遵循双亲委派模型最终调用启动类加载器的类加载器,实现的功能是“通过一个类的全限定名来获取描述此类的二进制字节流”,获取到二进制流后放到JVM中。Class.forName()方法实际上也是调用的ClassLoader来实现的。Class.forName(String className)的源码是@CallerSensitivepublic static Class<?>..
2020-06-08 13:13:12
260
转载 B树和B+树
1.B树1.1 B树的定义每个节点最多有m-1个关键字(可以存有的键值对) 根节点最少可以只有1个关键字 非跟节点至少有m/2个关键字 每个节点的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它 所有叶子节点都位于同一层,或者说根节点到每个叶子节点的长度都相同 每个节点都存有索引的数据,就是对应的key和value 所以,跟节点的关键字数量范围:1<= k <= m-1,非根节点的关键字数量范围:m/2 <...
2020-06-02 16:58:19
766
转载 深入理解AQS
1. AQS实现原理 AQS中维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。这里volatile能够保证多线程下的可见性,当state=1则代表当前对象锁已经被占有,其他线程来加锁时则会失败,加锁失败的线程会被放入一个FIFO的等待队列中,比列会被UNSAFE.park()操作挂起,等地其他获取锁的线程释放锁才能被唤醒。 另外state操作是通过CAS来保证并发修改的安全性。描述图 ...
2020-06-02 08:52:16
297
转载 JVM垃圾回收
1 揭开 JVM 内存分配与回收的神秘面纱Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java 自动内存管理最核心的功能是 **堆** 内存中对象的分配与回收。Java 堆是垃圾收集器管理的主要区域,因此也被称作GC 堆(Garbage Collected Heap),从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以 Java 堆还可以细分为:新生代和老年代:再细致一点有:Eden 空间、From Survivor、To Survivor 空间等。进一步.
2020-05-24 16:29:20
133
转载 JVM最完整最深入解析
Java运行时数据区程序计数器:指向当前线程正在执行的字节码指令。线程私有的。 虚拟机站:虚拟机站是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压入栈,当方法正常返回或者抛出未捕获的异常时,栈帧就会出栈。 (1) 栈帧:栈帧存储方法的相关信息,包含局部变量表、返回值、操作数栈、动态链接 a) 局部变量表:包含了方法执行过...
2020-05-24 15:49:09
165
转载 Java内存区域
一、运行时数据区域JDK1.8之前:JDK1.8:线程私有:程序计数器 虚拟机栈 本地方法栈线程共享:堆 方法区 直接内存(非运行时数据区的一部分)1.1 程序计数器 程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来完成。 另外,为了线程切换后能恢复到正确的执行位置,每条...
2020-05-24 11:14:37
133
转载 HashMap面试
1.HashMap的数据结构?数组+链表实现,当链表长度超过8时,链表转换为红黑树2.HashMap的工作原理?底层是hash数组和单向链表实现,数组中每个元素都是链表,K/V存储put的过程1)调用hash(k)方法计算K的hash值,然后结合数组长度,计算数组下标;2)调整数组大小(当容器的元素个数大于capacity * loadfactor时,容器会进行扩容resize为2n);3)a)如果K的hash值在HashMap中不存在,则执行插入,若存在,则发生碰撞; ..
2020-05-08 21:57:58
358
1
转载 Synchronized面试
1.Synchronized关键字最主要的三种使用方式总结a)修饰实例方法,作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁b)饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁...
2020-05-08 15:34:59
372
转载 分布式锁
1.为何需要分布式锁主要两个场景:1)避免不同节点重复相同的工作:比如用户执行了某个操作有可能不同节点会发送多封邮件2)避免披怀数据的正确性:如果两个节点在同一条数据上同时进行操作,可能会造成数据错误或不一致的情况出现2.Java中实现的常见方法1)基于Mysql中的锁:Mysql本身有自带的悲观锁for update关键字,也可以自己实现悲观/乐观锁来达到目的;2)基于Z...
2020-04-26 21:40:04
104
转载 Redis-跳跃表
为什么选择跳表经常使用的平衡数据结构有:B树,红黑树,AV树,Splay Tree,Treep等有序表的搜索考虑一个有序表:从该有序表中搜索元素 < 23, 43, 59 > ,需要比较的次数分别为 < 2, 4, 6 >,总共比较的次数为 2 + 4 + 6 = 12 次。把一些节点提取出来,作为索引,得到如下结构:这里我们把 < 14,...
2020-04-26 21:21:58
229
原创 Redis总结
1.为什么要用redis/为什么用缓存1)高性能 第一次访问数据库的数据,非常慢,因为从磁盘上读,将用户访问的数据存在缓存中,这样可以直接从缓存中获取了,操作缓存就是直接操作内存,所以速度相当快。2)高并发 直接操作缓存能够成熟的请求远远大于直接访问数据库,所以把数据库中部分数据转移到缓存中。2.为什么要用redis而不用map/guava做缓存? 缓存分...
2020-04-25 21:16:30
170
转载 Java中fail-fast和fail-safe
1.同步修改 当一个或多个线程正在遍历一个集合Collection,此时另一个线程修改了这个集合的内容,就是并发修改。2.什么是fail-fast机制? fail-fast机制在遍历一个集合时,当集合机构被修改,会抛出Concurrent Modification Exception fail-fast会在以下两种情况抛出ConcurrentModificatio...
2020-04-22 10:41:51
190
转载 1.1 Spring源码解析——核心类介绍
1.DefaultListableBeanFactoryXmlBeanFactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册及加载bean的默认实现,而对于XmlBeanFactory与DefaultListableBeanFactory不同的地方就是XmlBeanFact...
2020-04-20 14:32:38
137
转载 Spring源码解析——refresh方法
refresh方法在ConfigurableApplicationContext类中定义的具体实现是在AbstractApplicationContext中实现。这个方法的原文描述信息是:由于这是一个启动方法,如果它调用失败,它应该销毁已创建的单例,以避免悬空资源。换句话说,在调用该方法之后,应该实例化所有单例或者不是单例的对象。接下来分析refresh方法public void ref...
2020-04-10 09:20:17
468
转载 Spring源码解析——ApplicationContext介绍
相比于BeanFactory接口,我们更多时候使用ApplicationContext接口来加载Bean,两个接口都是来加载Bean的,相比之下ApplicationContext提供了更多扩展功能。使用ApplicationContext方式加载XMLApplicationContext ctx = new ClassPathXmlApplicationContext("app.xml")...
2020-04-09 16:24:09
165
原创 第二章 Java并发机制的底层实现原理
1. volatile定义与实现原理1.1 定义 确保共享变量能够被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量,若一个字段被声明为volatile,Java线程内存模型确保所有线程看到这个变量的值时一致的。1.2 当volatile修饰变量,CPU会做什么事情?比如:volatile instance = new Singleton();转变成汇编代码如下:0...
2020-04-09 11:11:01
207
转载 Spring源码解析——createBean方法细节之doCreateBean
doCreateBean方法位于AbstractAutowireCapableBeanFactory方法中protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object[] args) { // Instantiate the bean. ...
2020-04-09 09:47:37
582
转载 Spring源码学习-getBean方法
getBean方法在BeanFactory中实现,实现的类有5个在这5个类中AbstractBeanFactory完成了getBean()方法的具体实现public Object getBean(String name) throws BeansException { return doGetBean(name, null, null, false);}public <...
2020-04-08 15:26:41
462
转载 Spring Bean的生命周期
1. 概要2. 生命周期的概要流程Bean的生命周期主要就是4哥阶段:实例化(Instantiation) 属性赋值(Populate) 初始化(Initialization) 销毁(Destruction)详解:实例化:第1步,实例化一个bean对象; 属性赋值:第2步,为bean设置相关属性和依赖 初始化:第3-7部,其中第5,6步为初始化操作,第3,4步为在初...
2020-04-07 11:20:01
159
原创 SSH实现的分页查询和分页实现
最近做项目,需要分页查询,自己在网上查了查,尝试了一下,下面给大家总结归纳一下,希望对大家有用-1)需要一个PageBean public class PageBean { private Integer page;//当前页数 private Integer totalCount;//总记录数 private Integer totalPa
2016-12-18 21:44:26
1725
原创 hibernate查询返回List
关于使用Hibetnate执行原始SQL,返回List SQL语句为:String hql = "select * from goods g where g.catelog_id =" + parameter; 执行:Query query = this.getSession().createSQLQuery(hql).addEntity(goods.class); 后面
2016-12-05 23:07:13
654
原创 关于Hibernate的查询的总结
最近在做SSH项目,用到了Hibernate的查询方式,自己总结了一下1.HQL查询方式 灵活直观,和SQL查询相差不大,唯一不同的就是把表名换成了类或者对象。其它的,包括一些查询函数(count(),sum()等)、查询条件的设定等,全都跟SQL语法一样。例子:Session session = SessionFactory.getCurrentSession();
2016-09-07 21:51:59
305
转载 关于HDFS与本地文件的一些总结
关于hadoop中HDFS与本地文件系统的一些操作FileSystem是HDFS文件系统,LocalFileSystem是本地文件系统LocalFileSystem local = FileSystem.getLocal(conf);对FileSystem进行读写操作 文件在本地有HDFS文件系统之间进行copy注意:在windows上使用FileOutputStream创建文件
2016-03-18 22:25:54
1237
HttpServletRequest和HttpServletResponse的讲解
2016-04-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人