自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (2)
  • 收藏
  • 关注

原创 哈工大 操作系统 问题思考

原理就是:多个进程都在等着一个buffer的使用权,即在给bh->b_lock这个东西上锁的时候阻塞,然后每个进程加入到阻塞队列的时候,将自己插到队首,其实就是头插法。然后read_intr唤醒的时候,就唤醒队首,再由队首去唤醒队首的下一个,再由队首的下一个唤醒队首的下一个的下一个。以此类推,最终所有阻塞进程均被唤醒。我们接着上次说的,进程发起读写磁盘块的请求,将请求的盘块号放入请求队列中然后阻塞自己,而后磁盘驱动之后读/写完数据之后,再唤醒对应的阻塞的进程。那么read_intr唤醒的机制是什么呢?

2023-12-13 01:22:46 377

原创 mount挂载内核源码

应该就是挂载到根目录的文件系统上的/home/machao里的东西吧,但是挂载之后,我们访问/home/machao这个目录,看到的就是新挂上去的文件系统里的"/"路径下的内容了,那么这是为什么呢?mount这个步骤是怎么做到这个对应的文件系统的改变的呢?所以,至此,我们猜测mount这个操作,大概率就是在修改inode这个东西,到底在修改什么东西呢,我们再看一下sys_open里的open_namei(filename,flag,mode,&inode)这个函数,这个函数是再读inode,里面调用了。

2023-12-10 21:16:24 582

原创 哈工大 操作系统 问题思考

就是add_request,我们可以看到进程在需要往一块盘块中读数据或者写数据的时候,都最终会调用一个函数:add_request,这个函数是将需要读的盘块号放进请求队列中,或者是将想要写的盘块号放入请求队列中,然后可以看到调用了sleep_on,睡眠了。由于在李治军老师课中,没有讲关于磁盘驱动相关的内容,所以这里在思考的时候也不用将磁盘驱动这个概念搞明白了(其实通常说的驱动就是真正控制磁盘的代码,即。而我的疑问是:磁盘控制器读完数据后,是怎么知道要唤醒哪个进程的呢?

2023-12-10 13:52:00 419

原创 Linux-Bash Shell中tee命令返回值为0

都是0,而我们的目的是如果这条指令执行成功,则打印success否则打印failed,这不就和我们的诉求相违背了嘛。在工作中,我们常会使用tee命令搭配管道符,将输出的结果添加到log日志中,别问我为什么一定要使用tee搭配管道符,因为我想把输出结果打印到屏幕上的同时,还将输出结果写入log日志中啦!而此时我们需要注意的是,管道符这个东西,如果管道符之后的命令执行时成功的,那么无论之前的指令成功与否,整条指令的结果都是成功,也就是说$?最简单的就是重定向啦,将标准输出和错误输出全部重定向到log日志中!

2023-08-06 09:57:46 246

原创 研究JavaWeb中的session

本文是基于个人对于JavaWeb中session的认识及见解,并在此基础上,通过实践的方式证实自己的认识正确与否。1.Javaweb中的session‘是基于浏览器端的cookie的首先先贴一张javaweb中session的工作原理图:从图中可以看出,为什么说session是基于cookie技术的:cookie和session都是为了能够实现用户会话之间共享数据的技术。但是cookie是存放在浏览器端的,而session是存储于服务器端的程序进程所占有的内存中的,所以较于cookie技

2022-03-20 22:35:47 1373

原创 Tomcat源码自学之路(一)------启动Tomcat源码项目

开篇的废话:由于笔者本人是java出身,公司里运行的项目又大部分都是web项目,而web项目又必须依托于web服务器,而公司里用的web服务器都是tomcat服务器,也就是说都是基于tomcat的。而web项目,无论是javaweb,还是springweb,其最根本的目的就是实现客户端/服务器之间通信交互的,说白了,我们在敲web项目的时候,就是在实现一些业务功能,用代码处理一些业务逻辑,比如jdbc的增删改查啊、缓存啊等等。(而javaweb和springweb的区别只不过就是前者没有用框架,更加

2022-03-16 16:10:02 660

原创 从ArrayBlockingQueue源码的角度来分析Condition的await和signal方法的作用及原理

背景先看一个现象,我们在创建线程池执行线程的时候,经常会写到如下的代码://new一个线程池对象ThreadPoolExecutor executor=new ThreadPoolExecutor(2, 4, 0, TimeUnit.SECONDS, new ArrayBlockingQueue<>(5), new ThreadFactory() { @Override p

2022-02-25 15:42:05 7700

原创 为什么equals()和hashcode()方法要同时重写?

一般来说我们重写equals()方法会用的比较多,我们在比较两个自定义类型的变量的时候,比如有这样一个自定义的类型Student:9)package com.springstudy.testimport.pojo;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Scope;import org.springframework.context.anno

2022-01-13 15:22:27 114

原创 将jar包安装到本地库

mvn install:install-file -DgroupId=com.springstudy -DartifactId=whyusebean -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar -Dfile=C:\IdeaProjects\whyusebean\out\artifacts\whyusebean_jar\whyusebean.jar

2022-01-13 09:59:54 131

原创 装饰者模式和桥接模式

装饰者模式装饰者模式的话相对简单一些,其中只有两个重要的角色,一个是被装饰者,一个就是装饰器。下面来看一个例子。在这个例子当中,被装饰者是Human类(这里Human是以一种接口的形式)的对象(当然也包括Human类的子类),装饰器是我们自定义的一些类名,只是逻辑上抽象出来的,就暂且叫它们Decorator_first、Decorator_second。。。。等,而这些类都是Decorator接口的实现类。以下是代码例子:1.定义一个接口package decorator;publ

2021-12-13 10:11:08 332

原创 面试题总结

基本概念:1.hashmap的初始长度hashmap底层是一个entry数组,数组每个元素都是一个entry(键值对的形式),所以初始化一个数组的时候,java是必须要给他定义一个初始长度的。entry[]数组的初始长度为162.hashmap数据的存储:当存放数据时,会根据hash(key)%n算法来计算数据的存放位置,n就是数组的长度,其实也就是集合的容量3.扩容和加载因子根据存放数据的形式,可以知道,hashmap存放数据就好比往插槽中插入数据,当hashmap中entry

2021-12-10 09:54:11 404

原创 @Autowired注解的作用

我们知道spring的自动注入有两种方式:1.xml 2.@Autowired1.如果是xml方式:定义这样一个xml配置文件,定义两个bean<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x.

2021-12-10 08:35:54 721

原创 rabbitmq的五种工作模式(不包含RPC工作模式)

概念:1.生产者:消息的创造者2.交换机:其功能就是接收生产者生产出来的消息,并分发消息给相应的消费者3.消费者:消息的处理方4.routingkey:路由键,实现交换机按照一定规则分发消息的重要成员五种工作模式:准备pom.xml:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoca

2021-12-04 13:04:39 3914

原创 spring bean的创建流程总结

spring容器在创建一个bean对象的时候,在初始化bean参数值的时候:exposedObject = initializeBean(beanName, exposedObject, mbd);会去执行这样3个方法(当然之前还有一些工作,这里省略了)://前处理(前处理的工作暂不做讨论)wrappedBean = applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);//调用初始化方法invok.

2021-11-27 18:39:23 265

原创 spring容器bean的默认注入

1.环境变量beanprotected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) { // Tell the internal bean factory to use the context's class loader etc. beanFactory.setBeanClassLoader(getClassLoader()); beanFactory.setBeanExpressionRes.

2021-11-27 17:46:34 610

原创 Bean对象的所有后处理器,什么时候被加载的

Bean对象的所有后处理器,什么时候被加载的

2021-11-27 08:41:19 225

原创 三级缓存==循环依赖?(singletonsCurrentlyInCreation缓存)

inCreationCheckExclusions更新的流程

2021-11-27 06:22:43 1253

原创 三级缓存==解决循环依赖?

1.是否一定需要用三级缓存解决循环依赖的问题?三级缓存可以解决循环依赖的问题,那么二级缓存呢?答案是不能,因为原始的bean可能会被修改成代理对象。//以下是从三级缓存中取到实际bean的过程中需要调用的函数getEarlyBeanReference,结果是获取到exposedObjectprotected Object getEarlyBeanReference(String beanName, RootBeanDefinition mbd, Object bean) { Objec

2021-11-26 07:35:04 295

原创 @SpringbootApplication注解的自动装配

@Springbootapplication注解后,在注解内部,spring自动定义了开启事务管理。查看启动类的组合注解:上面标红的注解是我们的自动装配的注解:我们进入这个注解的源代码,去查看它的选择器:这个注解是根据其类中的属性,进行自动装配,我们需要进入其源代码:找到自动获得的Entry,进入其源代码:(查看调用堆栈,这里是在bean生命周期的invokeBeanFactoryPostProcessors的过程中去扫描注解的步骤)通过????上面的截图..

2021-11-24 02:45:00 168

原创 Spring 事务管理 @Transactional 注解

之前,在研究了代理对象创建的原理以及如何包装advice通知之后,再来看一个例子:@Transactional注解1.什么是@Transactional注解举个例子:我们要往mysql数据库批量添加一些用户,比如说是2条,定义一个controller层的方法:testAddUsers,@PostMapping("/test")public String testAddUsers(){ userService.testAddUsers(); return "testAdd

2021-11-23 22:58:14 391

原创 spring容器初始化时候的循环依赖问题

我们先看一个现象:我在test方法中打印这两个对象A和BClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("test.xml"); A a=applicationContext.getBean("a", A.class); System.out.println(a.getB()); B b=applicationContext.ge

2021-11-20 23:45:00 439

原创 AOP的interceptors从哪里来的?

上次在AOP执行流程的分析中,我们研究了AOP底层实际是用了责任链模式执行了一堆的interceptors,如下图所示://调用运用了AOP的方法a.getB()System.out.println(a.getB());这里我们看到当我们在getBean("a",A.class)的时候,看到a这个对象其实已经是一个cglib代理对象了,最关键的是,当我们点进去看这个a对象的时候,看到里面已经把给A这个类定义的一些advice放进去了。如下图所示:而后来在执行的就是这些通知。所..

2021-11-20 22:41:32 313

原创 责任链模式与filter过滤链

class MyRequest {}class MyResponse {}interface Filter{ void doFilter(MyRequest myRequest, MyResponse myResponse, ApplicationFilterChain filterChain);}class ApplicationFilterChain { private Integer index = 0; private List<Filter&..

2021-11-18 18:08:34 130

原创 AOP原理执行流程

如果一个类运用了AOP,会在容器加载的时候,spring底层会通过AbstractAutoProxyCreator的createProxy方法将原先的bean对象转换成一个proxy代理对象,所以容器加载完毕后,运用了AOP的类在容器中存放的形式是以代理对象的形式存储的。//其中的targetSource就是原先的bean对象protected Object createProxy(Class<?> beanClass, @Nullable String beanName,

2021-11-18 15:20:22 455

原创 @RestControllerAdvice注解全局异常处理的原理

在spring容器初始化的时候,会将加了@RestControllerAdvice的类装载到容器中,同时调用initExceptionHandlerAdviceCache方法,该方法内部初始化了一个exceptionHandlerAdviceCacheprivate final Map<ControllerAdviceBean, ExceptionHandlerMethodResolver> exceptionHandlerAdviceCache = new LinkedHashM

2021-11-13 19:32:25 924

原创 享元模式在spring源码中的应用

回顾之前spring学习过程中学到的一些知识点,在连接池的运用中经常会运用到享元模式我们看下源码,是怎么实现的?先自定义一个redis连接池的工厂,叫做RedisDataSourcepublic class RedisDataSource { private static volatile JedisPool jedisPool; public static Jedis getJedis() { if (jedisPool == null) {

2021-11-13 13:36:04 463

原创 spring框架的IOC源码解读

我们知道在spring容器初始化的时候,底层会基于13个函数去实现bean对象的装载,在这13个函数中spring最终完成了将bean对象存储到容器中的工作。而这13个函数就阐述了spring容器是怎样把我们配置的xml文件中的bean标签转换成容器中的bean实例的。// Prepare this context for refreshing. prepareRefresh(); // Tell the subclass to refresh the internal bean f

2021-11-07 20:46:52 94

原创 适配器模式代码重构

源码(MethodBeforeAdviceInterceptor):public class MethodBeforeAdviceInterceptor implements MethodInterceptor, BeforeAdvice, Serializable { private final MethodBeforeAdvice advice; public MethodBeforeAdviceInterceptor(MethodBeforeAdvice advice) {

2021-11-06 09:17:28 167

原创 重构DispatcherServlet模块

package com.jt.dispatcherservlet;import org.springframework.boot.test.context.SpringBootTest;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.junit.jupiter.api.Test;class MyMappedInterceptor implements MyHand.

2021-11-05 15:56:05 163

原创 SSO单点登录(Filter过滤器源码解读)

先贴一段代码:public class UserDetailsServiceImpl implements UserDetailsService { @Autowired private RemoteUserService remoteUserService; /** * 基于用户名获取数据库中的用户信息 * * @param username 这个username来自客户端 * @return * @throws Usern

2021-11-03 07:16:23 1103

原创 springboot整合GateWay

1.为什么要用GateWay(GateWay的作用)1.1方便前端调用后端api:基于微服务架构中的设计及实现上的问题,为了在项目中简化前端的调用逻辑,同时也简化内部服务之间互相调用的复杂度,更好保护内部服务,提出了网关的概念。1.2对外界隐藏内部api接口真实地址,所以,GateWay的主要作用:前端访问url和后端的api资源真实地址的映射问:GateWay如何实现请求地址的映射? <dependency> <groupId>org.sp

2021-10-31 10:55:37 1627 1

原创 SpringBoot整合Swagger无法访问swagger-ui.html的问题

1.引入依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.8.0</version> </dependency> <dependency>

2021-10-30 21:59:49 1058

原创 从源码角度分析springMVC执行流程

今天从源码的角度,靠断电跟踪技术分析一下springMVC内部的执行流程,(包括拦截器、过滤器、servlet的dispatch、异常处理等)1.我们先自定义一个拦截器(springmvc的全局拦截器)//定义一个拦截器public class TimeAccessInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, Ht

2021-10-30 10:19:21 115

原创 什么是监听器-----@EventListener

最近在研究springcloud框架,当我在学习框架的时候,学会用其实并不难,难的是我们要看懂里面的源码,这却需要耗费很多的时间。今天闲来无事,熬夜看看代码吧,哈哈在学习springcloud的时候,我听到了很多高大上的词汇:Nacos心跳机制、策略模式、事件机制、长轮询。。。等,然后结果网上百度一查,原本指望着有高人的一篇博客就能恍然大悟,但结果都是我太年轻,本来想从入门到精通,到头来经历了几个小时的苦苦挣扎之后终于放弃。但我就是要做逆境人。废话不多说,来看源码。今天我研究的是spring的监听器--

2021-10-28 00:31:33 630 1

原创 如何创建Maven聚合项目(构建微服务项目)(3)

先引入一张图片(当然是借鉴我老师的,哈哈)我们先总结一下前一篇文章的内容,前两篇文章的内容已经包含了Nacos和Service这两块了。首先我们为什么要使用微服务的架构?因为要解决流量的控制分流,把一个一个的服务模块切割成一个小的项目,这样便于开发嘛。那为什么要用Nacos?因为我们要解决服务之间接口调用的问题,试想要是没有Nacos的话,我们可能要自己去写一套网络规范去实现服务两个服务之间或者多个服务之间的调用了。用了Nacos我们就要去学习Nacos底下的一些规范,对于我们开发.

2021-10-26 19:50:39 88

原创 如何创建Maven聚合项目(构建微服务项目)(2)

继续上次的内容,我们知道,我们为什么要使用微服务架构呢?因为我们需要把各个服务拆分开来,这样在单个项目中的代码复杂度,把庞大的项目拆分成一个一个的细粒度的小模块来进行管理,从而减轻开发的难度。这是其一,其次,应用了微服务体系的概念之后,我们可以使用springcloud框架为我们提供的可以自动管理各个服务之间通信的工具(Nacos)注:未来有空的话,需要再补一下Nacos是如何实现模块之间的通信的。在上一篇文章中,我们可以通过springcloud为我们封装的RestTemplate对象并给它加上@

2021-10-25 22:47:11 112

原创 如何创建Maven聚合项目(构建微服务项目)(1)

1.在idea中构建聚合工程,父工程和子工程都是module,并在父工程的pom文件中,做如下的操作:1.1pom文件中,配置统一的版本管理<dependencyManagement> <dependencies> <!--spring boot 核心依赖版本定义(spring官方定义)--> <dependency> <groupId>org

2021-10-23 12:05:37 293

转载 VUE的双向绑定

我们需要实现的效果就是上面这样:当我们修改了input输入框里的值的时候,可以立即修改下方的label标签!实现方式:1.v-model<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> ...

2021-10-09 01:50:41 76

tomcat8.5.76源码项目运行所需的jar包

tomcat8.5.76源码项目运行所需的jar包

2022-03-16

大数据框架入门-hadoop(基于VMware的linux环境搭建/hadoop完全分布式部署/hadoop底层原理讲解)

下载学习本课程资料: 1.您将获取关于hadoop大数据框架的基础资料 2.您将大致了解hadoop基础原理知识 适用人群: 掌握基础编程语言(有相关的编程经验的话更好)的对于大数据感兴趣的大数据入门初学者 资源文件的内容: 1.相关课件 2.专业讲师的视频教学

2022-02-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除