笔记
文章平均质量分 57
MiaSanMiaRL
这个作者很懒,什么都没留下…
展开
-
Vue3整合element ui
官方介绍的说法是使用npm install element-ui -S这个指令,然后再main.js中整合element-ui,但是我试了好几次,不是下载失败就是整合的失败后来看一个大佬的博文,在我们整合element-ui时用到的指令是npm install element-plus --save 之后我们在main.js中导入ELementPlus即可可能是版本问题,vue3基本上使用的都是这种方法...原创 2022-01-14 10:24:34 · 779 阅读 · 0 评论 -
axios跨域问题
相信我,捣鼓了一下午加晚上两个小时,搜了很多,没有用,我用的是axios配置跨域访问springboot程序,解决办法也很简单,只需要在controller上面加@CrossOrigin注解即可,相信我原创 2022-01-09 19:54:54 · 333 阅读 · 1 评论 -
安装axios失败
报错是Invalid ………… fetch https://registry……axios这种情况,重新尝试好几遍也不成功,最后可以使用镜像下载cnpm install就可以了原创 2022-01-04 20:09:05 · 1505 阅读 · 1 评论 -
javascript中的window.onload解释
window.onload我们都知道的是我们的前端页面都是从上向下加载,也就是说我们的javascript文件如果放在文本页面文件的上方,我们就会先加载javascript中的文件,而此时带来的问题就是,我们的javascript中的事件对象此时有可能还未被加载,导致代码错误。我们的window.onload可以很好地有效的解决这个问题。我们都知道,window.onload代表的是一个事件,也就是该事件的发生会导致函数的调用。而window.onload代表的事件就是页面加载的结束,也就是说,不管原创 2022-01-02 21:37:45 · 1875 阅读 · 1 评论 -
OSI七层网络协议
第一层 物理层用来保证两台物理机之间的数据通信,物理层所做的事情就是在两台机器间传输比特流,进行数模转换和模数转换,转换成电流强弱第二层 数据链路层这层主要是用来简单的封装比特流,将比特流形式封装成帧用于数据的传输,控制对物理介质的访问,交换机工作在这层,将解封装帧后的数据流送到相应的物理地址第三层 网络层将网络地址翻译成物理地址,在经过多个节点时,精准定位目标物理地址,同时选择由A到B的最佳路径,路由器属于网络层。遵循IP协议第四层 传输层控制数据传输,遵循传输层中特定的协议,原创 2021-12-24 10:26:32 · 2245 阅读 · 1 评论 -
同步异步阻塞非阻塞
对于这些名词来说,确实有时候让人难以琢磨,接下来我用通俗易懂的方式解释这几个名词同步:同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。异步:异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。阻塞:阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪才能继续。非阻塞:非阻塞就是发起一.原创 2021-12-20 16:36:20 · 133 阅读 · 1 评论 -
CPU执行指令过程详解
在进入正题之前,先介绍几个名词基础概念1、操作数:操作数并不是什么高深的意思,就是我们执行指令时需要用到的真实的数据,比如1+1中的1(当时这个概念一直模糊了好久……)2、几种常见寻址方式:立即寻址:就是我们的操作数已经包含在指令当中,比如指令1+1,那么这种方式就是立即寻址,说白了,就是能立即拿到我们想要的操作数,根本不需要额外操作直接寻址:就是指令中包含操作数存在的地址,我们需要根据这个地址的找到操作数间接寻址:就是地址中包含操作数的地址,有点类似于指针的操作原理。我们...原创 2021-12-19 15:43:26 · 8923 阅读 · 1 评论 -
Spring AOP源码详解
Spring两大强大的特性就是IOC以及AOP,我们知道Spring实现AOP的过程是在SpringBean后置处理器中处理的,在Bean初始化的时候执行,我们接下来来详细看看源码是怎么做的生成代理对象的方法都会委托到InvocationHandler.Proxy执行,我们首先来看JdkDynamicAopProxy中invoke方法的实现public Object invoke(Object proxy, Method method, Object[] args) throws Throw..原创 2021-12-16 20:10:57 · 498 阅读 · 1 评论 -
Spring AOP相关概念详解
今天总结下一直困扰我很长时间关于AOP术语的一些解释 ,网上虽然有很多但是我也看了无数才弄明白AOPAOP是面向切面编程的简称,是OOP(面向对象编程的扩展),今天我们主要来介绍有关AOP术语的解释切面一个关注点的模块化,这个关注点实现可能另外横切多个对象还是通俗点讲吧,举个通俗的例子,切面我们可以把它看成一个黑盒。在面向对象编程中,我们把功能还有属性封装起来,叫做一个类。在AOP中我们封装好的东西叫做切面。千万不要将切面理解成一个面,这里我们可以忽略他的字面意思,就把他想象成一个黑原创 2021-12-16 13:32:22 · 639 阅读 · 1 评论 -
Tomcat详解
本篇文章借鉴的是B站上黑马程序员关于Tomcat的详解一、基础解释首先解释几个基本概念,以方便后面的学习1、服务器:安装了服务器软件的计算机2、服务器软件:接受用户请求,处理请求,做出响应(简单来说,可以把服务器软件想象成一个黑盒,给他提供相应的请求,他就能给你做出解释)3、web服务器软件:具有服务器软件相同的基本功能,同时支持在web服务器上部署web项目,让用户通过浏览器来访问这些项目(也就是说,相比于服务器软件,web服务器软件可以支持我们把我们自己写的程序放进这原创 2021-12-11 21:21:52 · 907 阅读 · 1 评论 -
ClassPathXmlApplicationContext和FileSystemXmlApplicationContext
我们之前提到过,Spring中有两种工厂Bean,其中一种我们已经介绍过,就是FactoryBean,另一种就是我们的ApplicationContextApplicationContext相比于FactoryBean具有同样生产对象的功能之外,还具备了更多的特性,比如国际化,事务的发布等等(原因是比FactoryBean实现了更多的接口)。Spring中有两个基于XML配置文件具体实现ApplicationContext功能的类,一个是ClassPathXmlApplicationContex.原创 2021-12-09 09:16:04 · 1063 阅读 · 1 评论 -
FactoryBean详解
FactoryBean也叫做Bean工厂,是用于生产Bean对象的类FactoryBean的使用首先我们要明确,FactoryBean也是一个Bean对象。我们如果要使用Bean工厂,可以手动实现一个实现FactoryBean接口的一个类。@Componentpublic class FactoryBean_test implements FactoryBean { @Override public Object getObject() throws Excepti...原创 2021-12-09 09:03:24 · 10745 阅读 · 0 评论 -
Spring对象创建方式
一、JavaBean和SpringBean区别其实一个Bean简单理解为就是一个对象,SpringBean是spring所配置的对象,而JAVAbean是JAVA配置的对象JavaBean是一个属性全部是私有的对象 public class User{ private String name; public String getName() { return name; } public vo原创 2021-12-08 16:04:27 · 311 阅读 · 1 评论 -
深入理解计算机系统(从头到尾的详解)第一章
拿出很早之前学过的《深入理解计算机系统》这本神书,现在忘得差不多了……重新整合,最全重难点一、操作系统先看原书讲解(笔记标注有点乱,主要看红色部分)首先要明确,操作系统首先是一个软件,这个软件的功能是在程序和硬件之间搭建一个桥梁。由于底层硬件的操作繁杂,种类也非常多,程序如果直接操作底层硬件来运行那无疑是一场灾难,所以我们通过操作系统来简化程序执行的过程。可以这么理解,操作系统就是一个黑盒,我们程序运行时只需要告诉操作系统接下来想要怎么做,而不需要明确操作系统控制的底层是如何实现的。二、原创 2021-12-08 09:39:13 · 6545 阅读 · 1 评论 -
Servlet详解
一、什么是Servlet1、Servlet是JavaEE规范之一。规范就是接口2、Servlet就lavaWeb三大组件之一。三大组件分别是:Servet程序、Fiter过滤器、Listener监听器。3、Servlet是运行在服务器上的一个java小程序,它可以接收客户端发送过来的请求,并响应数据给客户。很多地方也说Servlet是一个容器,本质上其实大同小异,说白了,Servlet就是从客户端接收到请求,并在Servlet中进行相应的操作,之后响...原创 2021-12-07 20:29:47 · 2188 阅读 · 1 评论 -
Spring循环依赖问题详解
一、循环依赖产生的原因我们知道Spring最具盛名的就是依赖注入,而循环依赖就是指多个bean相互依赖,形成了一个闭环,比如:A依赖于B、B依赖于C、C依赖于A。简单看代码class A { B b;}class B{ C c;}class C{ A a;}这就是最简单会产生循环依赖的代码二、解决在Spring内部中解决循环依赖问题,指的就是默认单利的Bean中,属性相互引用的场景也就是说:1、默认的单例(singleton)的场景是原创 2021-12-05 09:51:36 · 1020 阅读 · 1 评论 -
ConcurrentHashMap底层源码详解及原理
HashMap在多线程中并不安全,为了解决HashMap的并发安全性,可以使用1、Collections.synchronizedMap()方法将普通HashMap变为线程安全的2、更高效的做法是使用Java自带的ConcurrentHashMap类ConcurrentHashMap的用法这里就不多讲,与HashMap用法相似,只是添加了线程安全机制一、ConcurrentHashMap属性分析static class Node<K,V> implements Ma.原创 2021-12-03 20:38:51 · 863 阅读 · 0 评论 -
ReentrantReadWriteLock原理详解
当读操作远远高于写操作时,这时候使用读写锁让读——读可以并发,提高性能。类似于数据库中的select.,from..lockinsharemode提供一个数据容器类内部分别使用读锁保护数据的read()方法,写锁保护数据的write()方法简单来说,就是读锁可以共享,但是写锁必须独占一、ReentrantReadWriteLockJUC为我们提供了一个可用于读和写的读写锁。简单看下使用方法: ReentrantReadWriteLo...原创 2021-12-02 16:31:59 · 3320 阅读 · 0 评论 -
LongAdder详解以及底层原理分析
一、原子累加器我们都知道,原子整型可以在线程安全的前提下做到累加功能,而今天介绍的LongAdder具有更好的性能我们先来看原子累加器的使用原创 2021-12-02 12:22:26 · 890 阅读 · 2 评论 -
原子类型详解
原子类型帮助我们在多线程并发的条件下实现整数的原子操作,具有并发安全性,本文详细介绍原子类型的应用以及底层实现。一、无锁效率高 无锁情况下,即使重试失败,线程始终在高速运行,没有停歇,而synchronized会让线程在没有获得锁的时候,发生上下文切换,进入阻塞。 打个比喻线程就好像高速跑道上的赛车,高速运行时,速度超快,一旦发生上下文切换,就好比赛车要减速、熄火,等被唤醒又得重新打火、启动、加速…恢复到高速运行,代价比较大 但无锁情况下,因为线...原创 2021-12-01 15:34:29 · 1379 阅读 · 1 评论 -
非公平锁实现原理
一、加锁流程在ReentrantLock类中,默认的构造方法就是构造非公平锁。 public ReentrantLock() { sync = new NonfairSync(); }NonfairSync继承自AQS没有竞争时(只有一个线程)在只有一个线程时,state调用cas将0变为1,Owner由Thread-1占有。当第一个竞争出现时,线程二也会尝试调用cas将state位改为1,但是因为已经有线程的存在,所以cas失败此时进入tr原创 2021-11-30 15:36:28 · 654 阅读 · 0 评论 -
锁的分类详解
一、死锁所谓死锁,就是多个线程竞争相同资源引起的。举个例子,打羽毛球需要两样东西,羽毛球(锁对象A)和羽毛球拍(锁对象B)。现在有两个人(两个进程),其中一个人有羽毛球拍没有羽毛球,另一个人有羽毛球没有羽毛球拍;他们两个人都在等待另一样打羽毛球的必需品,于是都各各自等待,谁也不能打羽毛球。(借用网上大佬的图片)这就是死锁出现的条件下面是仿照别的大佬的死锁示例 static Object o1 = new Object(); static Object o2 .原创 2021-11-30 14:13:13 · 207 阅读 · 0 评论 -
Park/Unpark基础及原理详解
前文我们介绍了wait()和notify()方法,而park和Unpark在一些用法上与二者相似一、简单介绍他们是LockSupport类中的方法用法: public static void main(String[] args) { Thread t1 = new Thread(()->{ System.out.println("start"); try { Thread.sl.原创 2021-11-29 18:19:39 · 399 阅读 · 0 评论 -
wait/notify原理详解
我们知道,在使用synchronized时,JVM会自动根据情况将我们的对象锁升级或降级,而wait和notify的使用场景一般情况下时多线程模式,也就是会出现竞争产生重量级锁。一、用法当我们的owner线程(当前获得到锁的线程不满足某些条件时,可以再锁对象中调用wait()方法将线程搁置,等到满足条件时用notify()方法将其唤醒) Object obj = new Object(); synchronized (obj){ ob..原创 2021-11-29 17:51:28 · 654 阅读 · 0 评论 -
synchronized优化原理
synchronized锁并不是每时每刻都会和Monitor对象关联,对于将共享独享关联到Monitor的方法来说树与重量级锁,开销大同时效率较低,所以JVM在底层会自动帮我们优化synchronized,来达到高效并行。一、轻量级锁从前文我们了解到synchronized重量级锁的处理方式,即将共享对象关联到Monitor对象,但还有一些情况,比如说两个线程的对某一共享对象锁的使用事件完全是错开的,如果还要继续选择将对象关联到Monitor对象,未免花销太高。举个例子,比如不同专业的同学..原创 2021-11-28 17:04:29 · 277 阅读 · 0 评论 -
JAVA线程安全锁底层实现
我们都知道,synchronized用于获得某个对象的锁,达到同步的效果。今天我们就来分析下ssynchronized底层实现原理一、Java对象头java对象在创建时会根据虚拟机的不同产生不同的对象头用于标记该对象的固定信息。如图所示,分别分为object header,Mark word,klass word三部分,记录该对象的创建信息以及属性。其中,相同类的不同实例的对象头会有所不同,同样的,不同类的对象头也不相同。二、MonitorMonitor被翻译为监视器或者管程...原创 2021-11-28 09:49:59 · 232 阅读 · 0 评论 -
Mysql存储结构以及部分引擎
一、MySQL存储结构B-树和B+树B-树:(这里引用别的大佬的结构图)形如此类树型结构我们可以称之为B-树B-树的特点:所有键值分布在整颗树中(索引值和具体data都在每个节点里); 任何一个关键字出现且只出现在一个结点中; 搜索有可能在非叶子结点结束(最好情况O(1)就能找到数据); 在关键字全集内做一次查找,性能逼近二分查找;同时我们不难看出,父节点(我们这里可以把它理解为一整层)中每个节点的左子树(子层的左孩子)中的每个节点值均要小于该节点的值,而右半部分的...原创 2021-11-27 10:20:52 · 613 阅读 · 0 评论 -
JMM内存模型
JMM内存模型JVM多线程内部存储方式由于 JVM 运行程序的实体是线程,而每个线程创建时 JVM 都会为其创建一个工作内存(有些地方称为栈空间),工作内存是每个线程的私有数据区域,而 Java 内存模型中规定所有变量都存储在主内存,主内存是共享内存区域,所有线程都可以访问,但线程对变量的操作(读取赋值等)必须在工作内存中进行,首先要将变量从主内存拷贝的自己的工作内存空间,然后对变量进行操作,操作完成后再将变量写回主内存,不能直接操作主内存中的变量,各个线程中的工作内存中存储着主内存中的变量副本拷贝原创 2021-11-23 15:29:41 · 319 阅读 · 0 评论 -
软件测试入门 四
软件测试入门 四一、增量模型:把软件分割成独立的模块,分批次的完成和交付。缺点:打破原有的软件结构和框架,可能会带来一定的风险。增量模型一般会和迭代模型一起运用。1)软件增加了新功能。.2)优化了…功能。3)修复了某些未知/已知 bug总结:增量模型就是把软件分成一个个模块去完成(可以理解为把软件分为一个个功能)。和迭代模型一般共同使用:首先发布少量功能模块的软件抢占市场,后期不断更新软件。二、软件测试流程![graph TD;A-->B;B-->C;](https://i原创 2021-10-26 09:50:29 · 119 阅读 · 0 评论 -
软件测试入门 三
一、软件生命周期模型1、瀑布模型瀑布模型:最早提出的软件开发的过程模型。.存在的问题:.①强调时间顺序的严格执行。前阶段不完成,后阶段不开始。②将测试放在了编码之后。没有体现出测试贯穿软件生命周期的原则。可以避免需求的问题一直延续到代码完成才暴露或者被发现。简单来说,瀑布模型是一步一步来解决问题,但是如果在测试之前每一步中发现的错误,只有在最后测试阶段才能被发现,可想而知,最后如果发现错误,那改变前面的环节是相当复杂和困难的优点1)为项目提供了按阶段划分的检查点。.原创 2021-10-23 16:19:56 · 93 阅读 · 0 评论 -
软件测试入门 二
测试是从已知的条件开始,使用预先定义的过程,并且有预知的结果;调试是从未知的条件开始,结束的过程可能不可预计测试可以计划,可以预先制定测试用例和过程,工作进度可以度量;描述调试的过程或持续时间相对比较困难测试的对象包括软件开发过程中的文档、数据以及代码,而调试的对象一般来说只是代码总的来说,测试是有计划,有目的的,并且是为了找bug而存在;调试则是未知的,目的是为了改变代码,修改代码。三、软件危机软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一.原创 2021-10-23 12:40:07 · 175 阅读 · 0 评论 -
软件测试自学入门(B站对应千锋的课)一
软件测试自学入门(B站对应千锋的课)一最近开始搞软件测试方向,记录一下学习的内容一、 首先说明软件的缺陷视频中软件的缺陷定义的非常广泛1.软件未实现产品说明书要求的功能2.软件出现了产品说明书指明不应该出现的功能3.软件实现了产品说明书未提到的功能4.软件未实现产品说明书虽未明确提及但应该实现的目标简单来说,软件的缺陷可以说大部分是由产品说明书来支配的,产品说明书类似于一个向导,向导的作用就是带着游客走完既定的行程,不能多,更不能少。总结来说:所有不满足需求或超出需求的都是缺陷没有原创 2021-10-22 13:25:05 · 378 阅读 · 0 评论