- 博客(115)
- 资源 (1)
- 收藏
- 关注

原创 手写spring框架之实现springIOC(四)
IOC容器相关类BeanFactory接口在该接口中定义IOC容器的统一规范即获取bean对象。public interface BeanFactory { //根据bean对象的名称获取bean对象 Object getBean(String name) throws Exception; //根据bean对象的名称获取bean对象,并进行类型转换 <T> T getBean(String name, Class<? extends T>
2022-04-20 17:28:00
337

原创 手写spring框架之实现springIOC(三)
现要对下面的配置文件进行解析,并自定义Spring框架的IOC对涉及到的对象进行管理。<?xml version="1.0" encoding="UTF-8"?><beans> <bean id="userService" class="com.itheima.service.impl.UserServiceImpl"> <property name="userDao" ref="userDao"></property> </bea
2022-04-20 17:16:05
315

原创 手写spring框架之实现springIOC(二)
Spring IOC相关接口分析1. BeanFactory解析Spring中Bean的创建是典型的工厂模式,这一系列的Bean工厂,即IoC容器,为开发者管理对象之间的依赖关系提供了很多便利和基础服务,在Spring中有许多IoC容器的实现供用户选择,其相互关系如下图所示。其中,BeanFactory作为最顶层的一个接口,定义了IoC容器的基本功能规范,BeanFactory有三个重要的子接口:ListableBeanFactory、HierarchicalBeanFactory和Autowir
2022-04-20 14:42:51
137

原创 手写spring框架之实现springIOC(一)
spring架构功能分析在手写spring框架之前,先来学习一下。spring框架开发大佬怎么写的1. spring核心功能结构Spring大约有20个模块,由1300多个不同的文件构成。这些模块可以分为:核心容器、AOP和设备支持、数据访问与集成、Web组件、通信报文和集成测试等,下面是 Spring框架的总体架构图:核心容器由 beans、core、context 和 expression(Spring Expression Language,SpEL)4个模块组成。spring-
2022-04-20 14:12:37
546

原创 Java与双分派技术
在谈双分派技术之前我们先说一下分派1. 分派:变量被声明时的类型叫做变量的静态类型,有些人又把静态类型叫做明显类型;而变量所引用的对象的真实类型又叫做变量的实际类型。比如 Map map = new HashMap(),map变量的静态类型是 Map,实际类型是 HashMap 。根据对象的类型而对方法进行的选择,就是分派(Dispatch),分派(Dispatch)又分为两种,即静态分派和动态分派。2. 静态分派(Static Dispatch) 发生在编译时期,分派根据静态类型信息发生。静态分派对
2022-04-19 10:01:53
408

原创 JDK动态代理的底层实现
JDK动态代理相信大家都会了解过或用过JDK动态代理,下面附一段经典火车站卖票案例代码作为引入//卖票接口interface SellTickets { void sell();}//火车站 火车站具有卖票功能,所以需要实现SellTickets接口class TrainStation implements SellTickets { public void sell() { System.out.println("火车站卖票"); }}//代理工
2022-04-16 09:51:18
408
原创 深入理解机器学习中的零样本、少样本与微调
理解零样本、少样本和微调的区别,对于选择合适的模型应用方式至关重要。它们构成了一个从完全不需要任务相关数据(零样本),到需要少量示例(少样本),再到需要大量训练数据(微调)的完整光谱。在实际应用中,应根据具体场景、可用资源和性能需求来选择合适的方法。
2025-01-20 13:13:58
958
原创 Spring MVC核心组件与请求处理流程
当一个HTTP请求到达服务器后,会经历以下流程:Filter链处理(入口)DispatcherServlet接收请求寻找Handler获取HandlerAdapter拦截器前置处理Handler处理请求拦截器后置处理视图渲染拦截器完成处理Filter链处理(出口)
2025-01-13 15:34:05
1075
原创 为什么ArrayList非线程安全?
问题:为什么ArrayList非线程安全?说到某个类线程安全问题,就要看该类的方法的实现中是否有并发安全问题众所周知,底层基于数据实现的,是一个动态的数组,容量自动增长;尽量扩容时,会将老的数组的内容重新拷贝一份到新的数组中,每次扩充为原来长度的1.5倍。它在使用add方法时会执行两个步骤:1.将元素放在当前位置;2.将数组下标+1;为什么线程不安全?假设现在有两个线程,线程A和线程B,当他们两个同时执行add()方法的时候,线程A先将自己的当前数据存到下标0的位置,(只执行了一步)然后线程A
2022-05-31 16:31:11
500
原创 mysql中InnoDB存储页内部结构
文章目录 数据页结构示意图组成部分File Header(38字节) 文件头部Page Header(56字节) 页面头部Infimum+supremum (26字节) 最小记录和最大记录User Records 用户记录Free Space 空闲空间Page Directory 页目录分组(槽)的依据查找槽的位置 File Tailer(8字节) 文件尾部 总结 今天我们来说一下页,它是 InnoDB 管理存储空间的基本单位,一个页的大小一般是 16KB 。存放我们常用的表中记录的那种类.
2022-05-28 18:22:39
831
1
原创 mysql的逻辑架构
以一次查询为例,看一下从客户端发来sql,到执行完,整个过程mysql服务器做了哪些事从整体上,分为三步:连接对sql语句进行解析和优化驱动引擎把数据交由文件系统存储每一部分具体下来,就是这样一幅图了解一条sql语句从客户端到服务器执行整个过程后,下面一一对每一层进行讲解1. 第1层:连接层连接层更像是一个保安,经过三次握手建立连接成功后, MySQL 服务器对TCP 传输过来的账号密码做身份认证、权限获取。TCP 连接收到请求后,必须要分配给一个线程专门与
2022-05-25 22:02:23
400
原创 @PostContruct注解的使用
定义: @PostContruct是Java自带的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。 从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void(...
2022-05-07 10:28:06
1208
原创 Java中的四种引用详解
Java的四种引用相信大家都听过Java的四种引用强、软、弱、虚,这四种的引用强度依次递减。这软弱虚分别继承了一个抽象类Reference下面我们分别看一下再谈这四种引用之前,先要明确一点,所说的情况都是对象可达的情况,如果对象不可达即对象引用已经不存在了,不论哪种引用垃圾收集器都会进行回收1.强引用强引用是使用最多、最普遍的。他就是我们经常用的引用赋值。如"Object o=new Object()"这种引用关系。这种引用只要还存在,垃圾回收器就永远不会回收被引用的对象。(死都不回收)强引
2022-04-27 13:42:14
662
原创 Java中final关键字总结
final 关键字可以用在在三个地方:变量 、方法 、类。1.final修饰变量final修饰变量表示常量,只能被赋值一次,赋值后值不再改变。当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一
2022-04-26 20:21:57
247
原创 nacos配置中心启动报错java.nio.charset.MalformedInputException: Input length = 1
错误提示 org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1 at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:218) ~[snakeyaml-1.25.jar:na] at org.yaml.snakeyaml.reader.Stream...
2022-04-19 17:57:44
1912
原创 (从零搭建)nacos配置中心使用详解
1. 首先引入依赖1.1 我使用的springboot版本为2.1.14。根据springboot、springcloud、springcloudAlibaba版本对应关系。我选择如下版本依赖<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <ver
2022-04-19 17:54:27
2224
原创 docker-compose文件模板
由于上传了几次docker-compose.yaml格式编译都不通过,这里放一下正确模板,以备后面使用version: '3' # 版本为123,已docker engine为例,一般为3 docker1.10之前为1services: gateway: container_name: service-gateway image: api-gateway ports: - 8222:8222 networks: - net_doctor
2022-04-13 16:32:23
1236
原创 通过Maven插件构建docker镜像并上传到服务器
1. 微服务部署有两种方法:(1) 手动部署: 首先基于源码打包生成jar包 (或war包), 将jar包 (或war包) 上传至虚拟机并拷贝至JDK容器.(2) 通过Maven插件自动部署2.Maven插件自动部署步骤:(1) 修改宿主机的docker配置, 让其可以远程访问vim /lib/systemd/system/docker.service其中ExecStart=后添加配置-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock修改
2022-04-13 16:00:43
1736
1
原创 (完美解决)docker-compose速度太慢
解决办法只有一个一个一个,那就是换源!使用的是github的源基本都是超时,此时使用:curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose记得修改权限,否则会报错:sudo chmod +x /usr/local/bin/docker-compose最后查看版本.
2022-04-11 16:10:59
15698
1
原创 gateway网关调用其他微服务爆粗
当调用报错500时,说明找不到该微服务,检查gateway配置网关路径与服务是否一致当调用报错404时,说明该服务是找到了,但是服务内没有要请求的路径。报错404
2022-04-10 12:00:10
1479
原创 记录问题:浏览器每次会发送两次请求到后端的情况
1.问题描述:今天在写项目的debug时候发现,请求怎么都拿不到token数据。经过几番折腾发现,跨域会发送两次请求,一次是试探报文发送两次请求情况如下:用了两个浏览器,一个是谷歌的,一个是Bing,两个浏览器都有插件,然后运行Servlet后发现java程序被调用了两次,并且有时交叉输出;经查网络资料,推测是浏览器的插件又进行了一次请求,因此一共创建了两个线程,而插件的请求不会获得网页数据。跨域请求导致的浏览器发送两次请求:预检测请求和method请求;前者不返回数据。...
2022-04-09 17:44:44
1754
原创 (已解决)Feign.FeignException$NotFound: status 404 reading DictFeignClient#getName(String,String)
今天写项目遇到一个问题,就是通过fegin调用另一个组件一直显示404,具体报错如下Feign.FeignException$NotFound: status 404 reading DictFeignClient#getName(String,String)服务都是正常的,浪费几个小时终于发现问题@GetMapping("/admin/cmn/dict/getName/{dictCode}/{value}")public String getName(@PathVariable(value =
2022-04-09 17:40:39
4310
8
原创 (已解决)nacos+RestTemplate使用服务名报异常java.net.UnknownHostException
Springcloud-alibaba&nacos的RestTemplate使用服务名报异常java.net.UnknownHostException问题描述本地测试,springboot注册了nacos服务,然后一个springboot通过服务名(http://服务名/接口)调用服务,查看nacos控制台服务都已经注册了,但是无论我是否给RestTemplate添加@LoadBalanced注解,都是报UnknownHostException错误解决办法在maven pom.xml中添.
2022-04-08 11:04:21
8796
6
原创 zookeeper连接过慢问题解决
根据百度结果,推测问题可能是,当使用ip创建ZooKeeper对象时,如果host中没有ip到主机名的映射,ZooKeeper创建过程中会调用ZooInetAddress.getHostName()这个方法从网络中获取主机名,这里耗费时间太长所致。解决耗时长问题 一个方式就是改host文件,添加ip到域名的映射,如果configuredServerPrincipal不为null,则不会执行String hostName = addr.getHostName();也就可以绕过耗时长的问题。所以在创建Zoo
2022-04-03 18:56:16
2607
原创 Linux安装zookeeper
1.安装jdk安装zookeeper首先要有jdk环境,安装教程参考linux安装jdk教程2.安装zookeeper2.1 zookeeper安装包上传到linuxzookeeper安装包,可以自己到官网下载。我这里提供一个3.5版本的,放百度网盘自取。链接:https://pan.baidu.com/s/1mc5LzIHv1vqlE0XTAX96hQ提取码:wg1g把安装包上传到 /usr/local/tmp中进入/usr/local/tmp中,解压安装包tar zxf apache-
2022-04-03 10:18:47
3474
1
原创 RabbitMQ里面的routingkey的用处
里面的routingkey是干嘛用的???????? 看完了尚硅谷雷丰阳老师讲解的RabbitMQ,因为理解起来挺难的,本身就看到特别慢。 然后呢讲了JMS&AMQP的区别, 讲了RabbitMQ的特点, 讲了RabbitMQ的关键词和运行原理和机制, 再讲安装一个服务器,安装docker环境,再按照RabbitMQ的docker镜像, 再讲如何在浏览器发送http操作RabbitMQ, 然后讲了springboot整合RabbitMQ, rabbitTemplate的使用,发送和接收消息。 ..
2022-03-30 20:59:28
1550
原创 使用IDEA把项目上传到gitee仓库
idea上传项目到gitee 在gitee上建立一个仓库上传项目到gitee上 在gitee上建立一个仓库 第一步: 点 + 新建仓库。 第二步: 点击创建 第三步: 这就是成功了。 复制我们的仓库地址,后面上传时会用到。 上传项目到gitee上 我们的项目: 这是我随便建立的一个新项目,演示用的。 接下来开始演示:用图说话,详细步骤,跟着一步步点就ok了。 第一步: 第二步: 选择我们项目所在的文件夹,默认即可,点击OK。 第三步: 右键项目,照着点击 第四步
2022-03-29 22:03:22
10849
5
原创 linux下安装rabbitMQ
1.在linux中搭建erlang环境参考这个博文进行erlang环境的搭建:linux下搭建erlang环境2.上传安装包把rabbitMQ安装包上传到linux中,我用3.7.18版本的,网盘自取。链接:https://pan.baidu.com/s/1glbnHUw3njW4GB_apX3GEQ提取码:50t73.解压安装包 tar xf rabbitmq-server-generic-unix-3.7.18.tar.xz4.拷贝到/usr/local目录下cp -r rabbit
2022-03-29 19:56:59
2468
原创 IDEA的两种打jar包方式(Maven和非Maven)
在讲这两种方式之前,我们先来说明一下什么是java中的jar文件 jar (Java Archive File),翻译过来就是java的档案文件,它其实也类似于我们windows下的zip文件,唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的,包含了JAR包的描述信息、主类的全类名等信息。 一:不使用Maven直接打Jar包。 1.File -->Project...
2022-03-29 15:43:52
6713
1
原创 IDEA中导入第三方jar文件
1.导入第三方jar文件有两种方式第一种方式按照这个流程走下去File → Project Structure → Project Settings → Libraries → Java → Dependencies → Export → + → JARs or directories…选择文件导入后在lib下就会多出我们导入的jar完成后,在项目路径 External Libraries下可看到补充的 JAR包第二种方式File → Project Structure → Project
2022-03-29 15:32:53
3263
原创 Linux下Erlang安装(手把手详细教程)
RabbitMQ是使用Erlang语言编写的,所以需要先配置Erlang1 修改主机名RabbitMQ是通过主机名进行访问的,必须指定能访问的主机名。# vim /etc/sysconfig/network# vim /etc/hosts新添加了一行,前面为服务器ip,空格后面添加计算机主机名...
2022-03-29 10:32:56
4698
原创 linux安装Java环境
1.下载安装包jdk1.8大家可以到官网下载,Java Downloads | Oracle,我是使用的下图这个,我把网盘链接放上。需要自取。链接: https://pan.baidu.com/s/1rYh2u38Nu2N3WiSscjf5-g 提取码: cvhb 复制这段内容后打开百度网盘手机App,操作更方便哦2.把安装包通过xftp上传到服务器3.源码包解压使用命令[root@localhost local]# tar -zxvf jdk-8u181-linux-x64.tar.gz
2022-03-29 09:15:18
3902
原创 nginx部署前端代码
1.下载nginx这个不多说,到官网下载就行2. 修改配置文件打开nginx的安装目录,我的是E:\nginx-1.8.1,找到conf文件夹,里面的nginx.conf文件就是我们需要修改的配置文件。
2022-03-28 15:25:56
4564
mooc哈工大c语言答案
2018-12-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人