Java
文章平均质量分 58
whqObito
这个作者很懒,什么都没留下…
展开
-
IDEA2022创建javaweb项目
在将IDEA升级为2022版本之后,我发现IDEA没有在开始界面提供javaWeb项目的创建方法,那么现在就来看一下如何创建javaweb项目:第一步,创建一个普通Java项目然后我们看到该项目是这样的:没有javaWeb的模板,那么我们右键点击该项目,选择 Add Framework Support选择如下,然后OK即可此时,我们的项目就变成了javaweb模板:然后我们点击右上角的 ADD configuration来配置tomcat:发现有问题,那么我们点击右下角的 FIX原创 2022-04-24 11:11:18 · 20373 阅读 · 8 评论 -
浅析 synchronized和volatile
文章目录缺少synchronized总结缺少 volatile总结总结我们呢都知道volatile能够防止指令重排序和做到内存可见性。然后synchronized是有原子性。但是具体一个代码能否分析出不用synchronized或者volatile的问题会出现在哪里呢?接下来我们就来做这样的事情。现在需要一个synchronized和volatile同时存在的代码,那么我们拿到单例模式的懒汉模式里的双检查加锁:public class first { private static volat原创 2022-04-06 19:41:17 · 378 阅读 · 0 评论 -
Java多线程学习之 AbstractQueuedSynchronizer
我们在使用多线程的同步接口的时候,比如ReentrantLock和Semaphore,我们可以发现这两之间有许多共同点,这两个类都可以用作一个 阀门,即每次只允许一定数量的线程通过,当线程到达阀门时,可以通过(在lock()和acquire()时成功返回),可以等待(在调用lock()和acquire()时阻塞),还可以取消(在tryLock()方法和tryAcquire()方法返回 ‘false’)。事实上,它们在实现时都使用了一个共同的基类 AbstractQueuedSynchronizer(AQS原创 2022-01-11 21:35:06 · 446 阅读 · 0 评论 -
Spring 用到的设计模式
Spring用到如下这些设计模式:工厂模式(简单工厂模式,工厂方法模式),单例模式,适配器模式,代理模式,观察者模式,模板模式简单工厂模式:工厂就是处理创建对象的细节,而简单工厂模式就是将创建对象的细节交到了其他类,简单工厂将全部的事情,都在那个类中处理完了,我们只需要从该类中取出对象即可。符合该模式的就是 Spring中的 BeanFactory接口,我们用的ApplicationContext就是它的实现类。想想我们是如何使用这个类的:ApplicationContext context =原创 2021-12-12 16:05:03 · 328 阅读 · 0 评论 -
Spring IOC 原理解析
文章目录IOC 概念IOC Service ProviderSpring 的 IOC Service ProviderBeanFactory直接编码方式示例:外部配置文件方式注解方式FactoryBean:BeanFactoryAware 接口IOC 概念IOC, Inversion of Control, 中文是 控制反转,还有一个别名是 dependency Injection,依赖注入。在接触IOC之前,我们需要用到什么对象,就直接在类的构造函数里面新建相应的依赖的类 。 但是,我们每次需要用到原创 2021-12-09 11:39:10 · 773 阅读 · 0 评论 -
从缓存击穿 看 分布式锁
文章目录缓存击穿解决方案:数据库角度缓存角度分布式锁缓存击穿在我们使用缓存时,会将从数据库里查询到的数据存到缓存中,并设置一个过期时间。就是当一个热点数据过期时,会有大量的访问到数据库中,给数据库造成很大压力,这就是缓存击穿。解决方案:那么缓存击穿的解决,我们可以从 缓存 和 数据库两方面入手。数据库角度对于数据库来说,就是短时间的大量请求无法承受,那么就让他承受的请求变成 1/100,1/1000,用 锁 可以达到这样的情况,之前 100 个,1000个请求都可以同时读,但是现在有了 锁, 一原创 2021-12-02 12:49:47 · 1055 阅读 · 0 评论 -
Spring Aop 的原理解析
概念:切入点(pointcut)就是你要在哪个方法上切入,这个方法就是切入点。通知(advice)就是你要在那个方法前后要执行的具体方法切面则是定义切入点和通知的组合把切面应用到目标函数的过程称为织入(weaving)。像下面这个类:public class UserService { public void addUser(){} public void modifyUser(){} public void deleteUser(){}}连接点(joinpoint原创 2021-11-17 20:42:52 · 1671 阅读 · 0 评论 -
SpringMVC DispatcherServlet 源码分析
已知, DispatcherServlet这个类是 spring 用于处理请求的。我们先来看看 它的 继承关系:可以发现,它是从 Servlet规范来的,还继承了 HttpServlet这个类,我们犹记得 javaweb中 我们就是继承 HttpServlet这个类,重写 doGet()和 doPost()方法来达到请求的处理的。既然如此,它的继承关系中,肯定有一个类也是重写了 doGet() 和 doPost 方法,经查,是 FrameworkServlet 这个类调用的是 proces原创 2021-11-14 19:19:22 · 482 阅读 · 0 评论 -
Java 锁优化
文章目录锁优化自适应自旋锁锁消除锁粗化偏向锁轻量级锁重量级锁为了能够在线程之间更高效地共享数据及解决竞争问题,从而提高程序的运行效率,JVM 提供了锁优化锁优化锁优化有以下几种:自旋锁和自适应自旋,锁消除,锁粗化, 轻量级锁,偏向锁自适应自旋锁自旋: 如果使用阻塞线程,那么就需要挂起线程和恢复线程,如果贡献数据的锁定只持续很短的一段时间,那么为了这点时间而去挂起和恢复线程并不值得。那么就可以让后面请求锁的线程"稍等一会",但不放弃处理器,这样就是让线程执行一个 忙循环(自旋),这项技术就是自旋锁原创 2021-11-13 16:26:18 · 1081 阅读 · 0 评论 -
java NIO的学习
文章目录三大核心:Buffer :四个属性:测试:Channel :测试Selector(仅网络编程Socket):测试Java NIO 是 Java non-blocking IO 。 从jdk 1.4开始,Java提供了一系列改进的 I/O 的新特性,被统称为 NIO,是同步非阻塞的 .NIO相关的类都被放在 java.nio包及子包下。三大核心:Channel(通道)、Buffer(缓冲区)、Selector(选择器)Buffer :四个属性:capacity: 容量,表示缓冲区中最大原创 2021-11-12 21:14:56 · 427 阅读 · 0 评论 -
下载 packet tracer 出现Sorry, we can‘t find a NetAcad account associated with this Cisco account.
看提示:他让我们点击 Guest Login,我们点击之后,:需要等待15秒。之后点击 Confirm Guest按钮即可进入原创 2021-10-22 23:38:14 · 4021 阅读 · 3 评论 -
idea创建 spring 项目
首先创建一个maven项目:然后导入依赖:<dependencies> <!--Spring核心基础依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>原创 2021-10-22 20:16:44 · 214 阅读 · 0 评论 -
JVM学习之 逃逸分析 对象可不一定在堆中产生
逃逸分析:是一种确定指针动态范围的静态分析,它可以分析在程序的哪些地方可以访问到指针。原理:逃逸分析的基本原理是 : 分析对象动态作用域,当一个对象在方法里面被定义后,他可能被外部方法所引用:public class method_escape { public Object getobject(){ Object o = new Object(); return o; }}如上,这个对象可能作为返回参数传递到其他方法中,这种就称为 方法逃逸。原创 2021-10-16 23:11:04 · 153 阅读 · 0 评论 -
JVM学习之 类加载器ClassLoader
文章目录类的加载类加载器双亲委派模型:工作机制:类加载器使用的策略代码分析:类的加载一个类从被加载到虚拟机内存到卸载出内存,它整个的生命周期为:其中连接又分为 验证、准备和解析其中的加载过程就需要使用到类加载器加载阶段需要完成三件事情:通过一个类的全限定名来获取定义此类的二进制字节流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代表这个类的 java.lang.Class 对象,作为方法区这个类的各种数据的访问入口ClassLoader就来做这三件事类原创 2021-10-16 16:13:57 · 104 阅读 · 0 评论 -
MYSQL 索引的学习
索引概述什么是索引?索引是数据库表中一列或多列的值进行排序的一种存储结构。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。索引是存储引擎用于快速找到记录的一种数据结构索引的作用作用和优点其实差不多。为了大大加快数据的检索速度索引的分类:个人认为这个问题意义不大普通索引:普通索引是最基本的索引,它没有任何限制,值可以为空;仅加速查询。唯一索引:唯一索引与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。主键索引:主键索原创 2021-10-13 13:08:09 · 188 阅读 · 0 评论 -
openfeign经常调用超时的解决办法
在配置文件配置如下信息:feign: httpclient: connection-timeout: 60000原创 2021-10-10 23:13:24 · 560 阅读 · 0 评论 -
异步编排 CompletableFuture 的学习
当我们有如下场景:以上要么去数据库中查询,要么就远程调用查询,所花费的时间都不一样,那么我们很容易想到使用多线程来解决该问题,但是如果有各种麻烦的顺序(比如5要在1、2后执行,6要在2、3后执行),我们这时使用多线程就会比较复杂。那么现在有个类CompletableFuture 来封装了这种复杂性:CompletableFuture对于CompletableFuture类的每一个方法,都有提供线程池和不提供线程池两种方法,如果不提供线程池就会使用它自定义的线程池。我们这里使用我们提供的线程池。原创 2021-10-08 20:31:50 · 233 阅读 · 0 评论 -
对于nginx动静分离的理解
nginx只是分配当前的url的去处,如果想要访问本地的静态资源,那么就配置到本地文件夹,如果要访问动态资源,就配置其他服务器的IP:PORT .所以当我们配置如下: location / { proxy_pass http://mygateway; proxy_set_header Host $host; } location /static { root html;原创 2021-10-04 14:32:38 · 89 阅读 · 0 评论 -
MyBatis学习之 一级缓存与二级缓存
首先创建项目,这里就不使用Spring框架了,直接用mybatis原生:文章目录准备工作一级缓存:二级缓存准备工作首先创建maven项目,引入依赖:<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId原创 2021-10-02 17:22:36 · 159 阅读 · 0 评论 -
equals() 和 hascode()之间的关系
如果调用Object的equals()得到的答案是 true,那么调用 hashcode()方法的值必定相等,源码说话:If two objects are equal according to the equals()method, then calling the hashCode() method on each ofthe two objects must produce the same integer result.如果根据equals()两个对象相等,然后对每个对象使用hashco原创 2021-09-23 19:08:47 · 118 阅读 · 0 评论 -
final、static 与类初始化的一些关系
文章目录使用final static修饰:继承碰到初始化:总结;我们知道,如果要使用类里面的实例变量,那么是必须要类初始化的,但是如果我们使用静态变量呢,如果静态变量还使用final修饰呢。我们下面就来讲一下这个问题:public class Test { public static void main(String[] args) { System.out.print(A.hello); }}class A { public static String原创 2021-09-23 18:31:16 · 395 阅读 · 0 评论 -
IDEA快速创建方法(写了方法名的情况)
快捷键是 ALT+ Enter如图,我在写一个方法的时候,想要idea为我自动生成这个还没有写过的方法,使用了 ALT+ Enter之后,点击第一个是在当前类上面生成该方法,第二个是在该类的接口上生成该方法...原创 2021-09-16 20:39:38 · 9277 阅读 · 0 评论 -
Spring-Validation的学习与使用
Spring-Validation在 Web 应用中,客户端提交数据之前都会进行数据的校验,比如用户注册时填写的邮箱地址是否符合规范、用户名长度的限制等等,不过这并不意味着服务端的代码可以免去数据验证的工作,用户也可能使用 HTTP 工具直接发送违法数据。为了保证数据的安全性,服务端的数据校验是必须的。Spring-Validation 对 Hibernate Validation 进行了二次封装,在 SpringMVC 模块中添加了自动校验机制,可以利用注解对 Java Bean的字段的值进行校验,原创 2021-09-11 21:46:07 · 488 阅读 · 0 评论 -
使用阿里云的OSS存储文件
首先开通阿里云的OSS,这就不讲了。我们想前端直传到OSS,使用服务端签名后直传 : 官网详解: 快速入门我们最后上传的时候,因为前端直接传送到阿里云,所以会出现跨域问题我们找到 bucket的控制台配置跨域访问:如下配置即可:即可上传...原创 2021-09-11 19:22:19 · 161 阅读 · 0 评论 -
Vue之 v-model 的坑
我的vue文件如下:可以看到,我是想要根据 showStatus属性来展示开关,这样的数据查出来是:showStatus属性非0即1,0的话让开关关闭,1就让开关打开。但是在前端运行时:得到的showStatus数据变成了true和false。这是因为开关的开启值或关闭值就是 true和false,然后使用v-bind绑定起来,showStatus不满足 <el-switch>的条件,所以被强制变成了 <el-switch>的默认的false。那么我们就将开启和关闭原创 2021-09-10 23:09:44 · 848 阅读 · 1 评论 -
多线程学习之 Lock锁
Lock类用于实现和synchronized 类似的作用,都是用于在多线程情况下的同步。基础使用比如我们有如下程序:public class MyThread extends Thread { private ReentrantLock lock=new ReentrantLock(); @Override public void run() { try { System.out.println("第一阶段完成");原创 2021-08-27 22:30:25 · 152 阅读 · 1 评论 -
多线程学习之 线程池
我们使用线程时,需要new一个,用完了又要销毁,这样频繁的创建销毁也很耗资源,所以就提供了线程池。线程池中有一个线程队列,里面保存着所有等待状态的线程。基本使用:和线程池使用Executors来创建先创建一个线程类:public class PoolDemo extends Thread { @Override public void run() { System.out.println(this.getName() +"正在运行"); tr原创 2021-08-27 21:27:38 · 122 阅读 · 0 评论 -
多线程学习之 CountDownLatch
文章目录基础使用join()和CountDownLatch的区别基础使用CountDownLatch类的应用场景 : 主要是用于当前线程等待其他线程完成之后再继续完成,和join()有相同的作用。实现代码如下:public class Sample_Thread extends Thread { private CountDownLatch latch; public Sample_Thread(CountDownLatch latch) { this.latch原创 2021-08-27 12:32:02 · 141 阅读 · 0 评论 -
定时任务 Timer 的学习
Timer的主要作用有以下两个:实现按指定时间执行任务实现按指定周期执行任务Timer类的主要作用是设置计划任务,即在指定时间开始执行某一个任务。任务使用TimerTask进行封装基础使用:首先要编写TimerTask的子类来定义执行的具体任务:public class MyTask extends TimerTask { @Override public void run() { System.out.println("任务执行了,时间为: "+Syste原创 2021-08-26 12:58:03 · 203 阅读 · 0 评论 -
单例模式的学习
单例模式简单的说就是在整个运行环境下都只存在一个对象。单例模式实现的方式有如下几种:立即加载/饿汉模式立即加载指的是使用类的时候就已经将对象加载完毕立即加载有”紧急、急迫“的意味,所以也叫做 饿汉模式代码实现: */public class MyObject { private static MyObject myObject=new MyObject(); public MyObject() { } public static MyObject getIns原创 2021-08-26 10:48:08 · 82 阅读 · 0 评论 -
ThreadLocal 的学习
变量值的共享可以使用 public static的方式实现,这是所有的线程共用一个public static变量,那么如果需要实现每一个线程都有自己的变量,就需要使用ThreadLocal类完成。ThreadLocal的作用就是把数据放入当前线程对象中的Map中,这个Map是Thread类的实例变量。ThreadLocal本身并不管理和存储任何数据,它只是数据和Map之间的桥梁,用于将数据放入Map中。执行流程是 : 数据--> ThreadLocal --> currentThread()原创 2021-08-24 16:27:46 · 96 阅读 · 0 评论 -
多线程中join(long mills)和sleep(long mills)的区别
join()方法是等待这个线程执行完之后,外部线程才继续执行,但是有了参数之后,就是只暂停一段时间,过后就直接继续执行。看起来和sleep(long mills)方法类似,但是也有区别join(1000)和sleep(1000)都是让当前线程停止运行1000ms,但是 join(1000)底层是使用wait来实现的,所以join(1000)的时候,其他的线程能够得到锁,而sleep()就不会释放锁。示例:public class ThreadA extends Thread { privat原创 2021-08-24 14:34:14 · 214 阅读 · 0 评论 -
git 传输自己的文件到码云gitee上
我们现在码云上创建一个仓库,然后得到我们的URL:然后进入我们的本地文件夹:使用 git init将这个目录变成Git可以管理的仓库这个目录 .git 是Git来跟踪管理版本库的。我们使用 git remote -v来查看是否该目录和远程仓库关联:发现没有,那么我们就关联我们码云上的仓库:然后增加文件:使用 git add . 将该文件夹下的所有文件添加进去。然后git commit提交到本地仓库最后 git push...原创 2021-08-22 18:11:52 · 106 阅读 · 0 评论 -
XSHELL使用密钥连接云服务器
首先是下载Xshell,连接是 Xshell下载然后配置好云服务器的信息:点击连接,然后输入用户名 root然后选择我们在控制台里面下载下来的密钥注意这个密钥要先和云服务绑定原创 2021-08-19 19:03:36 · 451 阅读 · 1 评论 -
后端用对象接收 params的值
今天在用 axios发送请求的时候,发送如下: //得到医院列表 getPageList(page,limit,searchObj){ return request({ url: `/admin/hosp/hospital/list/${page}/${limit}` , method: "get", params: searchObj }) }因为使用的是 GET请求发送,所以原创 2021-08-03 19:27:26 · 2462 阅读 · 0 评论 -
Linux安装nacos
首先去下载nacos的压缩包:nacos我这里下载的是1.14版本的 ,注意要下 tar.gz包然后传到Linux上:解压:tar -zxvf nacos-server-1.1.4.tar.gz启动:cd nacos/bin/sh startup.sh -m standalone如上,这就是启动成功了然后就可以访问8848的 /nacos路径了,然后使用nacos-nacos账号登录...原创 2021-08-02 17:02:35 · 203 阅读 · 0 评论 -
RabbitMq之高级篇学习(使用Spring Boot)
文章目录概述消费者方的可靠性问题消息手动应答:生产者方的可靠性问题消息的发布确认:概述消息队列的高级篇,无非就是解决可能存在的消息的可靠性传递问题。那么消息出问题,可能是以下几点出现问题:消费者生产者交换机消费者方的可靠性问题在生产者成功发送了消息之后(也就是消费者收到了),消费者可能在处理消息过程中突然宕机,那么这个消息相当于直接消失了。那么我们可以想到,在消费者方处理完消息之后,给消息队列发一个应答,说明自己已经处理好了这条消息,如果没有收到应答,那么消息队列就重新将这个消息入队,原创 2021-07-21 21:30:01 · 199 阅读 · 1 评论 -
SpringBoot+RabbitMQ实现消息队列的各种模式
文章目录依赖:配置文件:简单模式:工作队列模式;发布订阅模式路由Routing模式通配符模式依赖: <dependencies> <!--RabbitMQ 依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp&原创 2021-07-21 18:07:59 · 355 阅读 · 1 评论 -
关于Java多态时,不同引用所拥有的属性
从图中可以看到,只有父类被子类重写的方法才是完全被抛弃的,其他的属性都有可能被用到。原创 2021-07-17 00:31:39 · 71 阅读 · 0 评论 -
阿里云Centos8安装 RabbitMq
我们下载的是rabbitmq 3.8.8的版本链接:https://pan.baidu.com/s/112EGJPmvOeLbSkpoSmY7kA提取码:gz3t首先将文件传到阿里云服务器中去:然后执行以下命令:rpm -ivh erlang-21.3-1.el7.x86_64.rpmyum install socat -yrpm -ivh rabbitmq-server-3.8.8-1.el8.noarch.rpm然后安装的rabbitmq服务在 /usr/lib/systemd/s原创 2021-07-16 22:09:55 · 222 阅读 · 1 评论