学习笔记杂记 学记的笔记
lipiwang 2024-10-31 15:23 17 浏览 0 评论
一: Mybatis相关:
1. Mybatis的动态标签:trim/set/where/foreach/if/chose/when/otherwise/bind
2. Mybatis的标签:上面9个动态标签+select/insert/update/delete/resultmap/parametemap/sql/include/selectkey
二、 spring相关
1. 包括五个模块:核心模块、AOP、数据访问、web、测试
核心模块:core、beans、context、context-support、expression共5个模块;
AOP: aspects、aop、instrument三个模块;
数据访问:jdbc、tx、orm、oxm四个模块;
web: webmvc、webflux、web、websocket四个模块;
测试: test;
2. java中依赖注入有:setter方法注入、构造器注入、接口注入。
3. BeanFactory和ApplicationContext的区别:
BeanFactory是所有Bean集合的工厂类,包含了bean的定义,以便接受到客户端的请求时将Bean实例化;BeanFactory还能在实例化对象时生成写作类之间的关系,此举将Bean从Bean客户端解放出来;BeanFactory还包含Bean生命周期的控制,调用客户端的初始化方法和销毁方法;
ApplicationContext具有BeanFactory定义Bean定义、Bean关联关系设置、以及根据请求分发Bean的功能,但是ApplicationContext具有以下更多的扩展功能:
1. 提供了国际化文本信息;
2. 统一的资源文件读取方式;
3. 已在监听器中已注册的Bean的事件;
ApplicationContext有三种常用的实现方式:ClassPathApplicationContext、XMLWebApplicationContext、FileSystemApplicationContext;
4. Spring提供三种方式来设置元数据:通过XML的配置、通过注解的配置、基于Java的配置。
5. Spring对Java配置的支持是由@Configuration注解和@Bean注解来实现的。由@Bean注解的方法将会实例化、配置和初始化一个新对象,这个对象将由Spring的IOC容器来管理。@Bean声明所起到的作用与元素类似。被@Configuration所注解的类则表示这个类的主要目的是作为Bean定义的资源。被@Configuration声明的类可以通过在同一个类的内部调用@bean方法来设置嵌入Bean的依赖关系。
6. 怎样用注解的方式配置Spring:
2.5版本后支持注解的方式来配置依赖注入,可以用注解的方式来替代XML方式的Bean描述,可以将Bean描述转移到组件类的内部,只需要在相关类上、方法上或者字段声明上使用注解即可。注解注入将会被容器在XML注入之前处理,所以后者会覆盖前者对于同一个属性的处理结果。注解装配在Spring中是默认关闭的,需要在Spring文件中配置一下才能使用基于注解的装配模式。如果你想要在应用程序中使用注解的方式,请参考如下配置:
<beans>
<context:annotation-config/>
</beans>
标签配置完成以后,就可以用注解的方式在Spring中向属性、方法和构造方法中自动装配变量。
下面是几种比较重要的注解类型。
(1)@Required:该注解应用于设值方法。
(2)@Autowired:该注解应用于有值设值方法、非设值方法、构造方法和变量。
(3)@Qualifier:该注解和@Autowired注解搭配使用,用于消除特定Bean自动装配的歧义。
(4)JSR-250 Annotations:Spring支持基于JSR-250 注解的注解,@Resource、@PostConstruct 和 @PreDestroy。
7. SpringBean的作用域:singleton、prototype、request、session、global-session;
8. Spring Inner Bean:Bean被使用时,当且紧调用一个属性,setter注入“属性”和用构造方法注入“构造参数”的方式来实现。
9. Spring中注入一个Java 集合:
(1)<list>标签用来装配可重复的list值。
(2)<set>标签用来装配没有重复的set值。
(3)<map>标签可用来注入键和值,可以为任何类型的键值对。
(4)<props>标签支持注入键和值都是字符串类型的键值对。
10. 自动装配的局限性,可以设置在每个Bean上,也可以设置在指定的Bean上:
1. 重写:你仍然需要使用和< property>设置指明依赖,这意味着总要重写自动装配。
2. 原生数据类型:你不能自动装配简单的属性,如原生类型、字符串和类。
3. 模糊特性:自动装配总是没有自定义装配精确,因此如果可能尽量使用自定义装配。
11. 在Spring框架中共有5种自动装配:
(1)no:这是Spring框架的默认设置,在该设置下自动装配是关闭的,开发者需要自行在Bean定义中用标签明确地设置依赖关系。
(2)byName:该选项可以根据Bean名称设置依赖关系。当向一个Bean中自动装配一个属性时,容器将根据Bean的名称自动在配置文件中查询一个匹配的Bean。如果找到就装配这个属性,如果没找到就报错。
(3)byType:该选项可以根据Bean类型设置依赖关系。当向一个Bean中自动装配一个属性时,容器将根据Bean的类型自动在配置文件中查询一个匹配的Bean。如果找到就装配这个属性,如果没找到就报错。
(4)constructor:它的自动装配和byType模式类似,但是仅适用于有与构造器相同参数的Bean,如果在容器中没有找到与构造器参数类型一致的Bean,那么将会抛出异常。
(5)autodetect:该模式自动探测使用构造器自动装配或者byType自动装配。首先会尝试找合适的带参数的构造器,如果找到就是用构造器自动装配,如果在Bean内部没有找到相应的构造器或者是无参构造器,容器就会自动选择byTpe的自动装配方式。
12. @Qualifier注解意味着可以在被标注Bean的字段上自动装配。Qualifier注解可以用来取消Spring不能取消的Bean应用。
13. ClassPathResource在环境变量中读取配置文件,FileSystemResource在配置文件中读取配置文件。
14. Spring框架中使用了大量的设计模式,下面列举了比较有代表性的:
(1)代理模式:在AOP和remoting中被用得比较多。
(2)单例模式:在Spring配置文件中定义的Bean默认为单例模式。
(3)模板模式:用来解决代码重复的问题。比如RestTemplate、JmsTemplate、JpaTemplate。
(4)委派模式:Srping提供了DispatcherServlet来对请求进行分发。
(5)工厂模式:BeanFactory用来创建对象的实例,贯穿于BeanFactory / ApplicationContext接口的核心理念。
(6)代理模式:AOP思想的底层实现技术,Spring中采用JDK Proxy和CgLib类库。
15. Spring的架构组成:Spring AOP、Spring ORM、Spring Web、Spring Web MVC、Spring DAO、Spring Core、Spring Context;
16. AOP的通知类型有:before前置通知、after后置通知、after returning后置返回通知、after throwing目标方法抛出异常时通知,异常通知、around环绕通知;
17. IOC的实现原理是:反射机制+工厂模式
18. AOP的底层为动态代理,动态代理包括JAVA JDK和CGLIB,JDK动态代理的类必须是有实现接口的,所以AOP会根据是否有实现的接口,去选择使用JDK动态代理还是CGLIB。
19. Bean的生命周期:
1. 根据配置文件实例化Bean
2. 根据配置信息填充属性
3. 检查是否实现Aware接口,如实现BeanNameAware,则调用setBeanName(),如实现BeanFactoryAware,则调用setBeanFactory,如实现ApplicationContextAware,则调用setApplicationContextAware()
4. 实现BeanPostProcessors的postProcessorsInitalization()
5. Bean的init-method
6. initalingBean的afterPropertiesSet()
7. 实现BeanPOSTProcessors的postProcessorAfterInitalization()
8. DisposableBean的destory()
9. Bean定义的destory-method
20. Spring的装配方式:no、byName、byType、autoDetect、构造函数
21. 打开注解:<context:annotation-config>
22. 三种类型自动代理:BeanNameAutoProxy、DefaultAdvisorAutoProxy、metadata autoproxying
三、Nginx相关:
1. HTTP连接建立和请求处理过程:Nginx启动时,Master进程,加载配置文件-》Master进程,初始化监听的Socket-》Mster进程,fork出多个worker进程->worker进程,竞争新的连接,获胜方通过三次握手,建立Socket连接,并处理请求。
2. 采用多进程+异步非阻塞方式(IO多路复用Epoll)。
3. 请求的完整过程:建立连接-》读取请求-》解析请求-》处理请求-》响应请求。请求的完整过程对应到底层就是:读写Socket事件。
4. Nginx的模块根据其功能基本上可以分为以下几种类型:
4.1 event module:搭建了独立于操作系统的事件处理机制的框架,及提供了各种具体事件的处理,包括ngx_events_moduls,ngx_event_core_module,ngx_epoll_module等,Nginx具体使用何种事件处理模块,这依赖于具体的操作系统和编译选项;
4.2 phase handler:此类型的模块也被直接成为handler模块。主要负责处理客户端请求并产生待响应内容,比如ngx_http_static_module模块,负责客户端的静态页面请求处理并将对应的磁盘文件准备为响应内容输出。
4.3 outer filter:也成为filter模块,主要是负责对输出的内容进行处理,可以对输出进行修改,如可以实现对输出的所有html页面增加预定义的footbar一类的工作,或者对输出的图片的URL进行替换之类的工作。
4.4 upstream:upstream模块实现反向代理的功能,将真正的请求转发到后端上,并从后端服务器上读取响应,发回客户端。upstream模块是一种特殊的handler,只不过响应内容不是真正由自己产生的,而是从后端服务器上读取的。
4.5 load-balancer:负载均衡模块,实现特定的算法,在众多的后端服务器中,选择一个服务器出来作为 某个请求的转发服务器。
5. Nginx和Apache的对比:
5.1 Nginx特点:IO多路复用,Epoll(freebsd上是kqueue)、高性能、高并发、占用系统资源少。
5.2 Apache特点:阻塞+多进程/线程、更稳定,bug少、模块更丰富。
6. Nginx的组成部分:
6.1 全局块:设置一些影响Nginx性能的配合指令,如woker_process、进程pid存放路径、日志存放路径以及配置文件引入等;
6.2 events块:主要设置Nginx服务器和用户的链接,比如每个woker的最大链接数worker_connections。
6.3 http块:最频繁的部分,如代理、缓存和日志定义等绝大数功能和第三方模块的配置都在这里,分为http全局块和server块。
四、JVM
1. 垃圾回收根元素:局部变量(Local variables)、活动线程(Active thread)、静态域(static fields)、JNI引用(JNI Referance)
2. 设置阈值:-XX:MaxTenuringThreshold来指定上线,ps+p0默认是15,cms默认是6。
3. 设置永久代大小:-XX:MaxPermSize;
4. 设置元数据区大小:-XX:MaxMetaSpaceSize;
5. JVM进程的GC日志:-XX:PrintGCDetails;
6. 设置并发标记清除器(Concurrent Mark and Sweep):-XX:UseConMarkSweepGC;
7. GC算法:标记-清除(Mark-and-Sweep会产生碎片问题)、标记-清除-整理(Mark-sweep-compact,解决碎片问题,但是会增加GC时间)、标记复制(Mark-copy:需要额外的空间进行存储)。
8. Serial GC(串行GC):Serial年轻代使用标记-复制算法,Serial Old年老代使用标记-清除-整理算法,-XX:UseSerialGC。
9. Parallel GC(并行GC):Parallel Scavenge年轻代使用标记-复制算法,Parallel Old 年老代使用标记-清除-整理算法,--XX:UseParrallelGCThread=**來設置b并行线程数,默认值为CPU数,需要STW。
10. -XX:UseG1GC:设置使用G1垃圾回收器。
11. G1过程:初始标记(init mark)、Root区扫描(Root Region scan)、并发标记(Concurrent Mark)、再次标记(Mark)、清理(Cleanup)。
12. CMS(Compact Mark Sweep):使用多线程标记清除算法,目标是获取最短的垃圾回收停顿时间,过程为初始标记-》并发标记-》重新标记-》并发清除,不需要STW。
13. G1:Garbage First,里面有连续的几个独立区域,
14. 队列:
ArrayBlockingQueue:由数组组成的有界阻塞队列;
LinkedBlockingQueue:由链表组成的有界阻塞队列;
SynchronousQueue:不存储元素的阻塞队列;
PriorityBlockingQueue:支持优先级排序的无界阻塞队列;
DealyQueue:支持优先级队列实现的无界阻塞队列;
LinkedTransferQueue:由链表组成的无界阻塞队列;
LinkedBlockingDeque:由链表组成的无界双向阻塞队列;
15. 对象在内存的存放为:对象头、实例数据、对象补齐;
五、 SpringBoot
1. @SpringBootApplication:包含了@SpringBootConfiguration(打开是@Configuration),@EnableAutoConfiguration,@ComponentScan注解。
六、软件架构设计原则:
1. 单一职责原则(Simple Responsibility Principle)、开闭原则(Open-Close Principle)、依赖倒置原则(Dependence Inversion Principle)、接口隔离原则(Interface Seqreqation Principle)、迪米特原则(Law of Demeter)、里式替换原则(Liskov Substitution Principle)、合成复用原则(Composite/Aggregate Reuse Principle)。
2. 设计模式:
2.1 创建型模式:简单工厂模式(Simple Factory Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂(Abstract Factory Pattern)、建造者模式(Builder Pattern)、单例模式(Single Pattern)、原型模式(Prototype Pattern)
2.2 结构型模式:享元模式(Flyweight Pattern)、组合模式(Component Pattern)、桥接模式(Bridge Pattern)、适配器模式(Adapter Pattern)、门面模式(Facade Pattern)、装饰器模式(Decorater Pattern)、代理模式(Proxy Pattern)
2.3 行为型模式:
七、JVM:
1. 包括:线程私有:虚拟机栈(栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息,随着方法调用而创建,随着方法结束而销毁,执行JAVA方法服务)、本地方法栈(执行Native方法服务)、程序计数器(当前线程所执行的字节码的行号指示器,记录的是虚拟机所执行的字节码的行号指示器) 线程公有:堆(创建的对象和数组的存储区域)、方法区(永久代:存储JVM加载的类信息、常量、静态变量、即时编译后的代码等信息 运行时常量池:用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中)、直接内存。
2. 在JAVA8中,永久代已经被移除,被元空间所替代,元空间与永久代的区别是:元空间并不在虚拟机中,而是使用本地内存,因此元空间的大小受本地内存限制。类的元数据放入native memory,字符串池和类的静态变量放入java堆中,这样可以加载多少类的元数据就不再由MaxPermSize控制,而由系统的实际可用空间来控制。
3. 标记清除算法(Mark-Sweep):效率低,碎片化严重。 复制算法(Copying):内存效率高,不产生碎片,但可用内存被压缩一半,当存活对象多的时候,复制算法的效率会大大降低。 标记整理算法(Mark-Compact):标记后不是清理对象,而是将存活对象移向内存的一端,然后清除端边界外的对象。
4. IO模型:
4.1 阻塞IO模型
4.2 非阻塞IO模型(需不断轮询,CPU占用率高)
4.3 多路复用IO模型(一个线程不断轮询多个socket的状态,只有当socket有真正的读写时间时,才真正调用实际的IO读写操作,与非阻塞IO相比,之所以效率高的原因是,非阻塞IO模型轮询的是用户线程,而多路复用IO模型轮询的则时内核线程)
4.4 信号驱动IO
4.5 异步IO模型(最理想的IO模型,只需要先发起一个请求,当接收到内核返回的成功信号时表示IO操作已经完成,可以直接去使用数据,异步IO是需要操作系统的底层支持,在Java 7中,提供了Asynchronous IO)
5. JAVA NIO模型:
1. 三大核心部分:Channel(通道)、Buffer(缓冲区)、Selector(选择器),传统的IO是直接面向字符流进行操作,而NIO基于Channel和Buffer进行操作,数据总是从缓存区到通道,或者是从通道到缓冲区。Selector用于监听多个通道的事件,比如通道的打开,数据到达等,因此,单个线程可以监听多个通道。IO是面向流,NIO是面向缓冲区的。
2.
八、JAVA SE:
1. 内部类
1.1:静态内部类:这种和外部类关系密切,且不依赖外部实例化的成为静态内部类,可以访问外部类的所有静态的方法和变量,实例化:Out.inner inner =new Out.inner();
1.2 成员内部类: 在类内部的非静态类,就是成员内部类,不能定义静态方法和变量;
1.3 局部内部类:定义在方法中的类,就是局部类,如果一个类只在某个方法中使用,则可以考虑使用局部类。
1.4 匿名内部类:要继承一个父类或者实现一个接口、直接使用new来生成一个对象的引用。
九、Dubbo
1. 容错机制:
FailOver Cluster:失败自动切换,当出现失败,重试其他服务器,通常用于读操作,当重试会带来更长延迟;
FailFast Cluster:快速失败,只发起一次调用,失败立即报错,通常用于非幂等性的写操作,如新增记录;
FailSafe Cluster:安全失败,出现异常,直接忽略,通常用于写入审计日志等操作;
FailBack Cluster:失败自动恢复,后台记录失败请求,定时重发,通常用户消息通知操作;
ForKing Cluster:并行调用多个服务器,只要一个返回成功即可,通常用户实时性比较高的读操作,但需要浪费更多我的服务器资源,可通过fork=2来设置最大并行数;
Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错,通常用于所有提供者更新缓存或日志等本地资源信息。
Dubbo默认的容错机制为FailOver Cluster。
十、MYSQL
1. 锁:行级锁(会出现死锁,锁冲突概率低,并发高)、页锁(会出现死锁,并发度介于行级锁和表锁之间)、表锁(不会出现死锁,并发度低)。
2. 文件类型:索引文件、数据文件、表结构文件。
3. 事务级别:read uncommited读未提交、read commited读提交、repeated commited 可重复读、serializable序列化。
十一、其他
1. 创建对象步骤:分配空间-》初始化-》引用
相关推荐
- 一个简单便捷搭建个人知识库的开源项目(MDwiki)
-
这里我通过自动翻译软件,搬运总结MDwiki官网的部署和使用方法。第一步:下载编译好的后MDwiki文件,只有一个HTML文件“mdwiki.html”。第二步:在mdwiki.html同级目录创建“...
- 强大、简洁、快速、持续更新 PandaWiki新一代 AI 驱动的开源知识库
-
PandaWiki是什么PandaWiki是一款AI大模型驱动的开源知识库搭建系统,帮助你快速构建智能化的产品文档、技术文档、FAQ、博客系统,借助大模型的力量为你提供AI创作、AI问答...
- DeepWiki-Open: 开源版Deepwiki,可自己构建github文档库
-
Deepwiki是Devin团队开发的github文档库,用户能免费使用,但代码不是开源,而DeepWiki-Open侧是开源版本的实现。DeepWiki-Open旨在为GitHub和GitLa...
- 最近爆火的wiki知识管理开源项目PandaWiki
-
项目介绍PandaWiki是一款AI大模型驱动的开源知识库搭建系统,帮助你快速构建智能化的产品文档、技术文档、FAQ、博客系统,借助大模型的力量为你提供AI创作、AI问答、AI搜索等...
- 轻量级开源wiki系统介绍(轻量开源论坛系统)
-
wiki系统有很多DokuWiki、MediaWiki、MinDoc等等都是开源的wiki系统。商业版的wiki,像很多企业在用的confluence等。今天我们讲的是一款轻量级且开源的文档管理系统:...
- DNS解析错误要怎么处理(dns解析状态异常怎么办)
-
在互联网时代,网络已经成为人们生活和工作中不可或缺的一部分。然而,当遇到DNS解析错误时,原本畅通无阻的网络访问会突然陷入困境,让人感到十分困扰。DNS,即域名系统,它如同互联网的电话簿,将人们易于...
- 网页加载慢?这些方法让你秒开网页!
-
打开浏览器,信心满满地准备查资料、看视频或者追剧,却发现网页怎么都打不开!是不是瞬间感觉手足无措?别慌,这个问题其实挺常见,而且解决起来并没有你想象的那么复杂。今天就来聊聊网页打不开究竟是怎么回事,以...
- windows11 常用CMD命令大全(windows11msdn)
-
Windows11中的命令提示符(CMD)是一个强大的工具,可以通过命令行执行各种系统操作和管理任务。以下是一些常用的CMD命令,按功能分类整理,供你参考:一、系统信息与状态systeminfo显...
- 电脑提示DNS服务器未响应怎么解决?
-
我们在使用电脑的时候经常会遇到各种各样的网络问题,例如最近就有Win11电脑用户在使用的时候遇到了DNS未响应的问题,遇到这种情况我们应该怎么解决呢? 方法一:刷新DNS缓存 1、打开运行(W...
- 宽带拨号错误 651 全解析:故障定位与修复方案
-
在使用PPPoE拨号连接互联网时,错误651提示「调制解调器或其他连接设备报告错误」,通常表明从用户终端到运营商机房的链路中存在异常。以下从硬件、系统、网络三层维度展开排查:一、故障成因分类图...
- 如何正确清除 DNS 缓存吗?(解决你访问延时 )
-
DNS缓存是一个临时数据库,用于存储有关以前的DNS查找的信息。换句话说,每当你访问网站时,你的操作系统和网络浏览器都会保留该域和相应IP地址的记录。这消除了对远程DNS服务器重复查询的...
- 网络配置命令:ipconfig和ifconfig,两者有啥区别?
-
在计算机网络的世界里,网络接口就像是连接你电脑和外部网络的桥梁,而网络配置则是确保这座桥梁稳固、通信顺畅的关键。提到网络配置工具,ipconfig和ifconfig绝对是两个绕不开的名字。它们一...
- 救急的命令 你会几个?(救急一下)
-
很多人都说小编是注册表狂魔,其实不完全是,小编常用的命令行才是重点。其实所谓的命令行都是当初DOS时代的标准操作方式,随着Windows不断演化,DOS的命令早已成为Windows的一部分了——开始菜...
- 电脑有网却访问不了GitHub原来是这样
-
当满心欢喜打开电脑,准备在GitHub这个“开源宝藏库”里挖掘点超酷的项目,却遭遇了网页无法访问的尴尬。看着屏幕上那令人无奈的提示,原本高涨的热情瞬间被泼了一盆冷水,是不是感觉世界都不美好了...
- rockstargames更新慢| r星更新速度 怎么办 解决办法
-
rockstargames更新慢|r星更新速度怎么办解决办法说到RockstarGames,那可是游戏界的大佬,作品个顶个的经典。但话说回来,每当新内容更新时,那蜗牛般的下载速度,真是让人急得...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)