java架构课程笔记
文章平均质量分 99
ww0peo
这个作者很懒,什么都没留下…
展开
-
2019.12.10笔记——Spring Boot热部署的使用和实现自己的热部署(类加载器相关)
https://www.processon.com/view/link/5c10c089e4b0fd48199548fdspringboot热部署依赖如下热部署添加后我们在项目启动的时候如果更改了代码,也不需要重新启动,只需要从重新编译一下更改的文件就可以直接反映更新的代码,就是点击下面的锤子按钮类加载器https://blog.csdn.net/qq_35262405/a...原创 2019-12-15 11:47:43 · 446 阅读 · 0 评论 -
2019.12.5笔记——Spring中监听器的使用与分析、模拟实现监听器和配置线程池
spring中的监听事件自定义的事件事件发布监听器自己实现一个监听器和事件spring是如何实现的从spring工厂中找到所有监听器1.实现ApplicationEvent接口的类2.带有@EventListener注解的ApplicationEventMulticaster 事件驱动器如果在spring中设置了线程池会异步触发监听器的事件这样监听器的逻辑出错也...原创 2019-12-12 11:01:53 · 1030 阅读 · 0 评论 -
2019.12.8笔记——Spring Boot中的web容器分析和使用
配置监听器的线程池这个线程池在spring的其他逻辑中也会使用比如下面加了@Async注解的方法会实现异步调用配置tomcat容器配置web容器,可以使用其他容器web容器的自动配置类可以看到通过Import注解注入了三种web容器类,这时存在顺序的,按顺序注入,如果注入了一个后面的就不会注入了,所以第一个就是tomcat容器,这也是为什么spring boot默认使用的是...原创 2019-12-12 11:01:20 · 687 阅读 · 1 评论 -
2019.12.1笔记——springboot应用
tomcatServletWebServerFactory可以用来配置tomcat容器打成jar包的插件以war包形式启动(web项目)springboot自动配置yml配置文件日期转换器配置读取配置下面这种支持松散模式${}可以去读取配置文件中的配置项,但不支持松散模式#{}用来读取spel表达式外部的配置文件读取(非application.yml)自...原创 2019-12-12 10:59:57 · 432 阅读 · 0 评论 -
2019.12.3笔记——与spring的整合方式和spring boot的自动配置
将其他项目整合进spring这样只需要加上一个注解就可以控制是否整合springboot自动配置springmvcspringboot自动配置spriongmvc参数springboot可以直接通过@Bean的方式配置springmvc的配置转换器...原创 2019-12-12 10:59:45 · 209 阅读 · 0 评论 -
2019.11.17笔记——SpringMVC应用
spring官网,springmvc的配置描述https://docs.spring.io/spring/docs/5.2.1.RELEASE/spring-framework-reference/web.html#mvc-servlet提供的两种配置方式public class MyWebApplicationInitializer implements WebApplicationIn...原创 2019-11-25 23:06:04 · 117 阅读 · 0 评论 -
2019.11.14笔记——模拟SpringMVC
springmvc依赖包含了core和context依赖配置springmvc1.xml方式mvc配置spring配置配置扫描2.javaConfig方式模拟springmvc需要一个servlet拦截所有请求模拟配置扫描tomcat配置在init方法中首先解析配置扫描的文件dom4j解析找到需要扫描的路径扫描指定的路径,递归解析指定的路径,找到所...原创 2019-11-25 23:05:53 · 110 阅读 · 0 评论 -
2019.8.22笔记——Reactor模型
单线程reactorattachwakeup使下一次selector的select方法立即返回可以让刚加入的事件加入监听就是唤醒select阻塞,刷新监听的事件多线程reactor主从reactor...原创 2019-11-16 13:55:24 · 170 阅读 · 0 评论 -
2019.11.12笔记——合并BeanDefinition
在扫描的时候完成的bd合并,在扫描的时候调用了三次getBeanNamesForType方法,这个方法的本意是通过类型找到对应的bd的名字,但是我们不能直接从bd的map中去找,在找之前需要合并bd,这样可以避免漏找,所以在找之前会见bd合并,并把合并的bd放到一个map中去。在扫描的过程中调用了三次getBeanNamesForType方法,对所有可能的bd完成了合并将合并的bd放到me...原创 2019-11-15 12:02:17 · 819 阅读 · 1 评论 -
2019.8.20笔记——NIO
堆外内存 操作系统的内存堆内内存 在JVM管理的内存 在使用时需要先拷贝到堆外 性能较差allocateDirect创建的是堆外内存allocate创建的是堆内wrap创建的源数据和buffer之间会相互影响selector有bug jdk的bug可能出现空轮询select有参数轮询参数时间没参数就会一直阻塞到有事件触发selectNow立刻轮询一次,不阻塞...原创 2019-11-04 22:00:42 · 173 阅读 · 0 评论 -
2019.8.18笔记——BIO和NIO
BIO输入流输出流redisresp协议aofAPI层客户端层协议层NIO没有流的概念bufferselectorchannel原创 2019-11-04 22:00:25 · 179 阅读 · 0 评论 -
2019.10.24笔记——mybatis-spring新老版本的mapper扫描分析
在invokeBeanFactoryPostProcessors方法中就使用了策略模式mybatis在@Import中传递了ImportBeanDefinitionRegistrar的实现类,在回调方法中在旧版中完成了dao的扫描,拿到了所有的mapper放到bean工厂中在新版中只是往bean工厂中注册了一个MapperScannerConfigurer的bd这个MapperScanne...原创 2019-11-03 23:50:53 · 359 阅读 · 0 评论 -
2019.10.27笔记——@Configuration的底层实现
@Configuration的底层实现cglibpublic Class<?> enhance(Class<?> configClass, @Nullable ClassLoader classLoader) { //判断是否被代理过 if (EnhancedConfiguration.class.isAssignableFrom(configClass)) {...原创 2019-10-29 20:20:51 · 415 阅读 · 0 评论 -
2019.10.15笔记——spring源码编译缓慢和BeanDefinition分析
这里是spring5.1源码的编译BeanDefinition在spring容器中扮演一个很重要的角色,spring之于bean就相当于java之于对象,那么spring之于BeanDefinition就相当于java之于class在BeanDefinition中的属性都有与之对应的xml配置属性AttributeAccessor 扩展属性 setAttribute方法添加扩展属性Ab...原创 2019-10-27 11:39:45 · 1003 阅读 · 0 评论 -
2019.10.17笔记——BeanDefinition的分析
BeanDefinition有很多实现类其中还有一个抽象类AbstractBeanDefinition,这个抽象类相当于所有BeanDefinition的模板类,其之类基本包括全部的BeanDefinition实现类,其中GenericBeanDefinition可以描述现在版本的所有BeanDefinition,它的子类分别表示不同的类型的BeanDefinitionAbstractBean...原创 2019-10-27 11:40:06 · 265 阅读 · 0 评论 -
2019.9.29笔记——mybatis源码解析之总结和面试题
mybatis流程spring开启了事务mybatis的一级缓存可以生效因为session关闭了事务也就消失了,而且开启事务spring就知道需要在哪里关闭事务二级缓存不能存一直增加的数据,因为二级缓存的数据几乎不会被回收...原创 2019-10-19 22:35:53 · 241 阅读 · 0 评论 -
2019.9.22笔记——mybatis源码解析之缓存实现原理
在mybatis以前的版本在mapper类的方法中传递多参数时如果不用@Param传递参数名就会报错因为jdk的bug得不到参数名,因为jdk8以前反射得到的方法参数名默认都是arg0、arg1、、、、、、在jdk8以后可以通过加上这个参数-parameters,并且使用maven主动用complie去编译项目在eclipse中可以通过勾选如下选项拿到参数名(同样需要jdk8以上)在s...原创 2019-10-12 14:43:01 · 149 阅读 · 0 评论 -
2019.9.10笔记——netty解码器源码分析
DelimiterBasedFrameDecoder这是一个基于分隔符的解码器,并且可以自定义分隔符第一个参数是能够接收数据的最大长度,后面的可变参数是分隔符,可以传递多个。DelimiterBasedFrameDecoder delimiterBasedFrameDecoder = new DelimiterBasedFrameDecoder(10, Unpooled.wr...原创 2019-10-05 22:50:40 · 172 阅读 · 0 评论 -
2019.9.24笔记——mybatis源码解析之插件开发(分页)
正在原创 2019-10-09 20:54:30 · 115 阅读 · 0 评论 -
2019.7.14笔记——java并发线程相关
java object对象头mark word 64 bit前56位存储的hashcode最后一个字节第一位无意义,后面4位是分代年龄,klass 32 bit指向了方法区的模板类,字节码JOL小端存储对象的实例数据对齐字节 padding偏向锁比轻量级锁效率高很多轻量级锁比重量级锁效率高锁的标志和锁的释放没有关系...原创 2019-09-20 22:34:27 · 164 阅读 · 0 评论 -
2019.9.8笔记——netty解码器源码分析
FixedLengthFrameDecoder长度解码器传递的参数是接收数据的长度只有指定长度的数据才能接收ByteToMessage解码器的抽象类如果没有达到解码的条件会保存这一次的数据知道满足解码条件,并把新老的数据组合并向下传递如果没有满足条件就向下传递空的数据LineBasedFrameDecoder基于换行的解码器如果超过最大长度就会直接丢弃数据并抛异常,还会设置为丢...原创 2019-10-04 23:00:00 · 147 阅读 · 0 评论 -
2019.8.27笔记——netty应用
处理器(Handler)生命周期回调函数一个特殊的group存储着每一个客户端和服务端连接产生的socketchannel,不过需要手动添加socketchannel,但是当通道关闭后会自动删除group里的通道聊天室特殊处理器基于分隔符的解码器心跳检测RPC远程调用...原创 2019-10-03 16:39:46 · 227 阅读 · 0 评论 -
2019.7.7笔记——java线程并发相关
interrupt方法interrupt是一种优雅结束线程的方法一个线程很长时间没有结束一般有两种原因:1.线程陷入了一个死循环(如while(true))2.线程被阻塞(如Thread.sleep())如果想结束一个线程,jvm的想法并不是让你直接stop这个线程,而是想让你抛出异常或者将while循环的条件置为false。 @Override public void run() ...原创 2019-09-23 16:50:38 · 115 阅读 · 0 评论 -
2019.7.11笔记——java线程并发相关
守护进程守护的线程报错会中断其他线程在静态方法上加synchronized锁的是类对象ThreadLocal——线程的本地变量每个线程一一对应这个对象和线程绑定了,线程封闭变量是线程私有的Vector 同步容器Queue 队列ConcurrentLinkedQueue 并发单向链表队列 线程安全的 无界的 可设置边界 add和pollConcurrentArray...原创 2019-09-23 16:50:13 · 169 阅读 · 0 评论 -
2019.7.18笔记——java并发线程相关
在下面这段代码,按照之前的原理,因为各个线程是交替执行的,而且也设置了偏向锁延时为0,所以除了第一个线程是偏向锁,后面的线程都是轻量锁。但是有些时候会发现后面两个线程的锁却是偏向锁那么这是不是重偏向呢,我们发现这三个线程打印的对象头mark word都是一样的,我们可以假设,造成这种现象是因为前一个线程已经死亡,后一个线程被分配的id和前一个一样,所以就可以直接用前一个的锁。这样看来并没有发...原创 2019-09-23 16:49:43 · 127 阅读 · 0 评论 -
2019.7.9笔记——java线程并发相关
应用synchronized的基本应用1.锁的是类的实例或者类的字节码而不是对象的引用如果synchronized关键字加在了方法前,含义和锁this是一样的,下面两端代码含义是一致的。2.手动上锁,自动释放3.不要用常量当锁,容易发生死锁下面两个string引用的是同一个字符串,所以如果认为是两把锁的话会出现问题,所以尽量不要用常量当锁。public class Demo2 ...原创 2019-09-20 22:33:04 · 85 阅读 · 0 评论 -
spring的扩展点总结
zzzz原创 2019-09-17 23:13:59 · 1238 阅读 · 2 评论 -
spring笔记②——springIOC
spring bean声明周期回调一共三种方式第一种bean初始化的回调,实现下面的接口bean销毁的回调,实现下面的接口第二种xml,可以自定义函数第三种注解,同样可以自定义函数如果同一个接口有两个实现,如果用了@AutoWired注解注入的,因为这个注解默认按type注入的,那么会报错,解决办法有在需要注入的实现上加注解@Primary在注入时加注解@Qualifi...原创 2019-09-17 23:12:42 · 109 阅读 · 0 评论 -
2019.7.21笔记——java并发线程相关
executor创建线程的接口executorserviceexecutor的服务callable有返回值,可以抛出异常executors操作executor的工具类newFixedThreadPool可以设置线程池大小,队列式的shutdown方法会关闭线程池,但线程池的线程还是会执行完,并回收线程shutdownNow方法会关闭线程并且直接停止线程newCachedTh...原创 2019-09-24 18:49:25 · 184 阅读 · 0 评论 -
2019.7.23笔记——java并发线程相关
锁有几种sync语法方便、简单 经过优化后与lock性能相当 实现不了高级功能 非公平锁lock手动释放锁 能够实现高级功能了sync使用的频率远高于lock重偏向遇到sync关键字就执行monitorenter jvm提供了规范 虚拟机自己实现hotspot用moniter实现aqscountDownLatch让多个线程同时执行让某个线程等其他的线程执...原创 2019-09-24 18:50:24 · 120 阅读 · 0 评论 -
2019.8.25笔记——netty入门
ByteBuf三个指针0 <= readIndex <= writeIndex <= capacity分成三个区域读过可读可写可以自动扩容pipelineInboundOutbound各自有自己的顺序粘包拆包就是客户端做分包处理,加上总长度发到服务端,服务端就根据那个总长来做粘包处理,应该是这样,返回写数据的时候就反过来...原创 2019-10-02 21:15:24 · 219 阅读 · 0 评论 -
2019.8.1笔记——java并发线程相关
JMMmesi硬件保证了缓存一致性编译优化才导致了java线程间所谓的“不可见”编译优化是java1.5之后happens-before原则happens-before原则如果一个操作happens-before另一个操作,那么第一个操作的执行结果将对第二个操作可见,而且第一个操作的执行顺序排在第二个操作之前。两个操作之间存在happens-before关系,并不意味着一定要按照ha...原创 2019-09-26 15:56:26 · 89 阅读 · 0 评论 -
2019.7.30笔记——java并发线程相关
读写锁读读并行读写串行写写串行ReentrantReadWriteLockreadLock方法 读锁writeLock方法 写锁都是同一把锁锁不能升级(读锁到写锁)可以降级(写锁到读锁)升级可能造成死锁升级会在升级到写锁时等待其他持有锁的线程释放锁如果两个以上的线程升级的话,及会互相等待升级,造成死锁降级可以避免二次排队,提高效率读锁不能加条件(Conditaion)...原创 2019-09-25 23:12:43 · 127 阅读 · 0 评论 -
2019.7.28笔记——java并发线程相关
ReentrantLock源码分析在没有竞争的情况下会公平锁效率会更高些在有竞争的情况下公平锁会比非公平锁效率高一点(可以忽略不计),只是多了个CAS判断unpark执行后,从park的方法处继续执行...原创 2019-09-25 23:12:26 · 153 阅读 · 0 评论 -
2019.7.25笔记——java并发线程相关
reentrantLocksync是实现的具体类子类有公平锁和非公平锁aqs类似于一个队列队列里的元素Node首先虚拟一个队列头tryAcquire尝试加锁线程进入公平锁是进入队列,非公平锁是直接尝试拿到锁公平锁和非公平锁唯一的区别就是公平锁会有一个判断...原创 2019-09-25 23:12:08 · 135 阅读 · 0 评论 -
2019.7.4笔记——java线程并发相关
hostpot----------jvm虚拟机java的线程和操作系统的线程是一一对应的jdk包括java库、c文件、jvmc文件pthread_create为linux系统开启线程的函数pthread_mutex_lock为linux操作系统实现锁总结: java 通过jvm hotspot作为代理,调用操作系统函数结论: java创建一个线程 = 操作系统一个线程...原创 2019-09-17 20:17:57 · 206 阅读 · 0 评论