笔记
文章平均质量分 65
王木风
这个作者很懒,什么都没留下…
展开
-
透过源码捋清Spring如何解决循环依赖
相信不少小伙伴在面试过程中被问到过这个问题,也有不少小伙伴看到这个问题会脱口而出:三级缓存!但是,你真的了解spring解决循环依赖的过程吗?三级缓存是哪三级呢?他们是如何发挥作用的呢?原创 2023-03-05 20:01:02 · 3331 阅读 · 4 评论 -
系统架构设计师学习笔记——软件架构设计_重点备忘录
架构的本质1、软件架构为软件系统提供了2、软件架构风格是特定应用领域的,架构定义架构的作用1、软件架构是2、软件架构是,通过研究软件架构可能预测软件的质量3、软件架构使推理和控制的更改更加简单,原创 2022-08-21 21:26:47 · 953 阅读 · 0 评论 -
系统架构设计师学习笔记——软件工程_重点备忘录
自顶向下不需要额外写驱动模块,自底向上不需要写桩模块。原创 2022-08-19 22:48:10 · 700 阅读 · 0 评论 -
系统架构设计师学习笔记——企业信息化战略与实施_重点备忘录
决策支持系统是辅助决策者通过数据、模型和知识,以人机交互方式进行班接过话或非结构化决策的计算机应用系统。结构化决策:指对某一决策过程的规则进行确定性描述与建模,以适当的算法产生决策方案,并能从多种方案中选择最优解。,调用各种资源和分析工具,帮助决策者提高决策水平和质量。非结构化决策:决策过程复杂,不可能用确定的建模和语言描述决策过程,没有所谓最优解。业务流程三个要素:实体、对象、活动。基于BPR的战略规划:战略规划、流程规划、数据规划、功能规划、系统实施。2、物流管理(分销、采购、库存管理)原创 2022-08-19 11:10:21 · 679 阅读 · 0 评论 -
系统架构设计师学习笔记——企业信息化战略与实施
客观性:也叫真实性,不符合事实的信息不仅没有价值,还有副作用动态性:信息随着事件的变化而变化层次性:信息可分为战略级、管理级和操作级传递性:信息再时间上的传递既是存储,再空间上的传递既是转移和扩散滞后性:信息是数据加工后的产物,所以相对数据有滞后性阔压性:信息和实物不同,既可以扩散也可以压缩分享性:信息可以分享,这和物质不同,并且信息分享具有非零和性。...原创 2022-08-10 22:41:23 · 837 阅读 · 0 评论 -
系统架构设计师学习笔记——软件工程
逐步分解求精严格分阶段,阶段产出标准化。原创 2022-08-09 21:26:02 · 523 阅读 · 1 评论 -
JVM学习笔记——垃圾回收器
新生代收集器:Serial、ParNew、Parallel Scavenge老年代收集器:Serial Old、Parallel Old、CMS整堆收集器:G1-XX:+PrintCcommandLineFlags 查看命令行相关参数,包括垃圾收集器使用命令行指令:jinfo -flag相关垃圾收集器参数 进程IDserial收集器作为HotSpot中Client模式下的默认新生代垃圾收集器。Serial收集器采用复制算法、串行回收和“stop-the-word”机制的方式回收内存。除了年轻代之原创 2022-07-09 04:23:41 · 334 阅读 · 0 评论 -
JVM学习——垃圾回收相关概念描述
System.gc()默认情况下,通过System.gc()捉着Runtime,getRuntime().gc()的调用,会显示触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存然而System,gc()附带一个免责声明,无法保证对垃圾收集器的调用(提醒jvm的垃圾回收器执行gc,但不确定是否马上执行)JVM实现者可以通过System.gc()调用来决定JVM的GC行为。而一般情况下,垃圾回收是自动进行的,无需手动触发,否则过于麻烦。再一些特殊情况下,如我们正在编写一个性能原创 2022-06-04 22:07:08 · 217 阅读 · 0 评论 -
List和List<Object>和List<?>有什么区别?
无论什么list,在添加的时候都是当作object存入,在取出的时候强转为指定类型。因为list实际就是一个数组,数组无法存不同数据类型。对应字节码关键字节码原创 2022-06-02 16:29:46 · 618 阅读 · 0 评论 -
JVM学习笔记——垃圾回收
什么是垃圾?在程序运行中没有任何指针指向的对象,这个对象就是要被回收的垃圾垃圾回收算法标记阶段在垃圾回收之前,首先要区分出内存中那些事存活对象,那些是死亡对象。只有标记为已经死亡的对象gc才会进行垃圾回收,释放其所占用的空间,因此这个过程我们称为垃圾标记阶段引用计数算法对每个对象保存一个整形的引用计数器属性。用于记录对象被引用的情况对于一个对象A,只要任何一个对象引用了A,A的引用计数器就加一;当引用失效时,引用计数器就减一。只要对象A的引用计数器的值为0,即表示对象A不可能再被使用,可进行回原创 2022-05-27 09:05:10 · 134 阅读 · 0 评论 -
JVM学习笔记——String
字符串常量池中是不会存储相同内容字符串的,因为Spring Pool是一个HashtableString的String Pool是一个固定大小的Hashtable。如果放进Spring Pool的String非常多,就会造成Hashtable冲突严重,导致链表很长,链表长就会影响调用String.intern时性能会大幅下降。使用-XX:StringTableSize可以设置HashTable长度。jdk8中StringTable默认是60013,1009是可设置的最小值String内存分配java原创 2022-05-04 10:32:12 · 201 阅读 · 0 评论 -
JVM学习笔记——执行引擎
执行引擎是java虚拟机核心组成之一“虚拟机”是一个相对于“物理机”的概念,这两种机器都有执行代码的能力,其区别是物理机的执行引擎是建立在处理器、缓存、指令集、和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约的定制指令集和执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式JVM的主要任务是负责装载字节码到内部,但字节码并不能直接运行在操作系统上,因为字节码并非等价于本地机器指令,它内部包含的仅仅只是一些能被JVM识别的字节码指令、符号表、以及其他辅助信息那原创 2022-05-03 15:18:57 · 1352 阅读 · 0 评论 -
JVM学习笔记——对象的实例化、内存布局与访问定位
创建对象的方式直接new反射克隆反序列化第三方库(如Objenesis)创建对象步骤判断对象是否以及加载、连接、初始化为对象分配内存如果规整:指针碰撞(标记压缩)如果不规整:空闲列表法(标记清除)处理并发安全问题采用CAS失败重试、区域加锁保证更新原子性每个线程分配一块TLAB初始化分配到的空间属性设置默认值,保证对象实例在不赋值时可以直接使用设置对象的对象头执行init方法进行初始化对象内存布局对象头(Header)运行时元数据哈希值GC分代年龄锁状原创 2022-05-03 09:10:58 · 161 阅读 · 0 评论 -
JVM学习笔记——方法区
栈、堆、方法区的交互关系方法区的基本理解方法区与堆一样是线程共享区域方法去在jvm启动时被创建,并且他实际的物理内存空间中和堆一样可以是不连续的方法区的大小跟堆空间一样,可以选择固定大小或者可扩展方法区大小决定了系统可以保存多少个类,如果定义了太多的类导致方法区溢出,同样会抛出内存溢出错误关闭JVM会释放这个区域的内存方法区的演进jdk7和之前,习惯性把方法区称为永久代。jdk8以后使用元空间代替了永久代本质上方法区和永久代并不相等。仅对于hotspot而言。《Java虚拟机规范》对如原创 2022-05-02 10:57:44 · 301 阅读 · 0 评论 -
JVM学习笔记——堆
一个JVM实例只有一个堆空间,堆也是java内存管理的核心区域。堆可以处于物理上不连续的内存空间中,但是逻辑上应该视为连续的。所有线程共享堆空间,但是还可以划分线程私有的缓冲区(TLAB)堆空间大小设置-Xms:用于表示堆区起始内存;-Xmx:表示堆区最大内存通常-Xms和-Xmx设置相同值,为了在java垃圾回收之后不需要重新分割计算堆区大小,减小内存震荡,从而提高性能默认情况,初始大小:电脑物理内存/64;最大大小:电脑物理内存/4查看设置参数方式一方式二加参数,-XX:+Print原创 2022-04-28 08:18:46 · 359 阅读 · 0 评论 -
JVM学习笔记——虚拟机栈
局部变量表定义为一个数字数组,主要用于存储方法参数和定义在方法体内部的局部变量(包括基本数据类型,对象引用以及returnAddress)由于局部变量表建立在线程之上,是线程私有,所以不存在线程安全问题局部变量表大小为编译器确定,运行期不改变大小操作数栈动态链接(指向运行时常量池的动态引用)方法返回地址附加信息...原创 2022-04-25 18:22:47 · 211 阅读 · 0 评论 -
线程池原理及源码分析
创建线程池方式ExecutorService executorService = Executors.newCachedThreadPool();//快 ExecutorService executorService1 = Executors.newFixedThreadPool(10);//第二快 ExecutorService executorService2 = Executors.newSingleThreadExecutor();//慢实际上他们都是n.原创 2022-03-09 10:07:21 · 204 阅读 · 0 评论 -
JVM学习笔记——内存结构以及执行流程
类加载子系统加载的类信息存放在方法区中,除了类信息方法区还会存放运行时常量池信息,包括字符串字面量和数字常量。jvm规范不代表jvm一定这么实现,例如HotSpot VM1.7之前使用永久代来实现方法区,1.8之后使用元空间,就像接口和类的关系,元空间是实现方法区的实现类。元空间没有使用堆内存,而是与堆不相连的本地内存区域。所以,理论上系统可以使用的内存有多大,元空间就有多大,所以不会出现永久代存在时的内存溢出问题。类的加载过程:![在这里插入图片描述](https://img-blo.原创 2022-03-05 20:51:47 · 372 阅读 · 0 评论 -
Mysql索引创建原理与优化
Innodb存储引擎Innope stores all rcords inside a fixed-size unit which i commonl called a "page though InmnoCB sometimes cals it a “block” instead.Ccurrentyal ages arethe same size,16KB.Innope将所有RCORD存储在一个固定大小的单元中,我通常将其称为“页面”,但Innocb有时会将其称为“块”。大小为16KB他的数据结原创 2022-03-05 08:54:13 · 233 阅读 · 0 评论 -
ES——logstash日志收集配置文件
<?xml version="1.0" encoding="UTF-8"?><configuration> <contextName>logback</contextName> <!-- 日志的输出目录 --> <property name="log.path" value="D:/logs/gmall/list" /> <!--控制台日志格式:彩色日志--> <!--原创 2021-08-20 08:22:06 · 775 阅读 · 1 评论 -
springboot整合swagger
就直接把弄个配置类就完事了,然后直接在类上加@Api(tags = “xxx”),方法上加 @ApiOperation(value = “xxxxx”)@Configuration@EnableSwagger2public class Swagger2Config { @Bean public Docket webApiConfig(){ return new Docket(DocumentationType.SWAGGER_2) .gr原创 2021-08-01 18:20:25 · 61 阅读 · 0 评论 -
Spring超简单整合新版MinIO
新版依赖:老版的包里没有builder方法<dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.2.0</version></dependency>代码块:try { // 使用MinIO服务的URL,端口,Access key和Secret key创建一个原创 2021-08-08 16:26:46 · 402 阅读 · 0 评论 -
springcloud超简单绑定RabbitMq
本文章默认读者已经接触过RabbitMq,关于RabbitMq的相关概念和安装的问题不再赘述。服务端:一共需要准备三个类,服务类、配置类、常量类配置类:@Configurationpublic class MQConfig { @Bean public MessageConverter messageConverter(){ return new Jackson2JsonMessageConverter(); }}服务类:@Servicepublic原创 2021-08-01 17:08:20 · 333 阅读 · 0 评论 -
Mysql远程无法链接
查看用户权限信息表1、在mysql库user表select host,user,authentication_string,select_priv,insert_priv,drop_priv from mysql.user;默认没有远程链接用户2、赋予root用户远程登录全部权限grant all privileges on . to root@’%’ identified by ‘123123’;3、如果还是无法链接,检查虚拟机防火墙是否关闭...原创 2021-07-26 11:16:55 · 74 阅读 · 0 评论 -
第三方网站登录微信——保姆级
上面是官网发布的时序图:(前提是给第三方已经通过了微信的授权)1、用户对第三方说:我要用微信方式登录你们2、第三方对微信说:用户要用微信登录我们,我需要这个用户的数据3、微信问用户:有个第三方要你数据,给不给。用户说给4、微信对第三方说:用户同意了,你拿着临时证明来取吧5、第三方带着临时证明和授权时候的信息取用户信息6、微信核对以上信息后把用户信息交给第三方第一步:前端:1、在页面中先引入如下JS文件(支持https):http://res.wx.qq.com/connect/zh_CN.原创 2021-07-25 18:18:43 · 693 阅读 · 0 评论 -
前后端对接跨域问题
回显失败,显示跨域错误思路:1、检查后端有没有加跨域注解@CrossOrigin(加了)2、而且添加删除等操作都可以运行,应该不是本机协议本身的问题3、检查请求方式(get、post等)是否对应4、检查调用的api是否正确5、在浏览器单独访问第一个灰色路径发现404!!!证实路径问题6、最终发现后端{id}}多了一个花括号...原创 2021-07-16 17:38:22 · 279 阅读 · 0 评论 -
通过反射如何调用私有属性?
对象.setAccessible(true);原创 2021-03-31 19:13:53 · 163 阅读 · 0 评论 -
多态中为什么无法访问子类独有方法?
因为我们虽然创建的是子类对象,但实际上我们想要的是父类。正如基本数据类型那样:int i = 1;long l = i ;//在第二条语句中,i的值1已经被转化为long。因为我们想要的是long只不过父类的方法需要根据不同的情况来产生变化,所以调用的是子类的重写方法,不需要子类独有的方法。反问:如果不需要根据情况变化,那么直接创建父类对象不就好了?如果既需要子类特有方法,又需要重写方法;或者只需要子类特有方法,那么为什么不直接创建子类对象呢?个人愚见,欢迎讨论...原创 2021-03-15 11:15:50 · 1387 阅读 · 0 评论 -
maven部分:maven中使用本地tomcat并设置模板
使用本地Tomcat 在pom.xml中的代码块是:<plugin><groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <prop>8888</prop> </con原创 2021-01-13 13:47:52 · 238 阅读 · 0 评论 -
骑士周游列国问题(马踏棋盘算法)
遍历+递归,超简单解决骑士周游列国问题。原创 2020-09-01 08:31:43 · 394 阅读 · 0 评论 -
简单解决克鲁斯卡尔算法
思路: 该算法主要是结点的终点不太好表述,我尝试过标记处理过的点(一般两大快联通处需要连接,但是两大块边界都是处理过的点);直接标记每个点连接的(并不是每个连接的点都是终点)。原创 2020-09-01 08:14:39 · 559 阅读 · 0 评论 -
超简单实现普利姆算法
思路: 随便找出一个点,接着找出与这个点权值最小的路径,这样我们就有两个点了。把这两个点看成一个大点,接着在剩余点中寻找与大点权值最小的路径,找到以后我们就有了一个更大的点。以此类推,知道所有点都添加完毕。(如果没看懂代码里注解更清晰)。原创 2020-09-01 08:13:50 · 230 阅读 · 0 评论 -
KMP算法
思路: 1、利用数组,确定子串部分匹配表(比如:int[] i = new int[s.lenght()]部分匹配表:有字符串“ABCEAB”,int a(从前往后扫描)int b(连续几个匹配上)。遇见下一个和第一个字符相等的字符记为1(b=1),如果再下一个还可匹配成功则b++;如果下一个没有匹配成功则b–(看看再往前一个可不可以匹配上)。2、源串和字串对比。遇见第一个匹配开始,到匹配失败为止,往前退部分匹配表对应的数值即可。原创 2020-09-01 08:12:26 · 95 阅读 · 0 评论 -
背包问题(Java)
一个例子生动理解背包问题和动态规划算法。原创 2020-08-27 23:08:02 · 443 阅读 · 0 评论 -
图的深度遍历
用最简单的方法完成图深度遍历。原创 2020-08-26 14:00:43 · 131 阅读 · 0 评论 -
2—3树 Java实现
最适合新手的暴力实现2—3树方法。原创 2020-08-25 10:02:17 · 462 阅读 · 0 评论 -
AVL树
3步解决旋转问题。原创 2020-08-23 14:28:39 · 109 阅读 · 0 评论 -
建立大堆树(小堆树)超简单的方法
一种不用来回换位置、递归的大堆树建立方法原创 2020-08-18 15:14:46 · 409 阅读 · 0 评论 -
树的线索化(超简单)(Java)
可以用集合或者数组来帮助添加前缀后缀,避免多次遍历及递归原创 2020-08-14 14:05:08 · 300 阅读 · 0 评论 -
树的顺序存储(超简单的方法)(Java)
既然是顺序存储,那么我们就直接按数组的顺序直接往里放就完事了。不需要遍历、不需要递归。原创 2020-08-14 11:52:33 · 1256 阅读 · 2 评论