得过且过的勇者y_社区达人页

个人头像照片
得过且过的勇者y
已加入开发者社区908
勋章 更多
个人头像照片
专家博主
专家博主
个人头像照片
星级博主
星级博主
个人头像照片
技术博主
技术博主
个人头像照片
江湖新秀
江湖新秀
成就
已发布177篇文章
2条评论
已回答0个问题
0条评论
已发布0个视频
github地址
我关注的人 更多
技术能力
兴趣领域
擅长领域
技术认证

暂时未有相关云产品技术能力~

暂无个人介绍
暂无精选文章
暂无更多信息

2023年12月

  • 12.07 14:47:32
    发表了文章 2023-12-07 14:47:32

    深入理解Linux网络——TCP连接建立过程(三次握手源码详解)

    一、相关实际问题 1. 为什么服务端程序都需要先listen一下 2. 半连接队列和全连接队列长度如何确定 3. “Cannot assign requested address”这个报错是怎么回事 4. 一个客户端端口可以同时用在两条连接上吗 5. 服务端半/全连接队列满了会怎么样 6. 新连接的soket内核对象是什么时候建立的 7. 建立一条TCP连接需要消耗多长时间 8. 服务器负载很正常,但是CPU被打到底了时怎么回事
  • 12.07 14:27:27
    发表了文章 2023-12-07 14:27:27

    Netty底层原理

    NIO有一个非常重要的组件——多路复用器,其底层有3种经典模型,分别是epoll、select和poll。与传统IO相比,一个多路复用器可以处理多个Socket连接,而传统IO对每个连接都需要一条线程去同步阻塞处理。NIO有了多路复用器后只需要一条线程即可管理多个Socket连接的接入和读写事件。
  • 12.07 14:24:44
    发表了文章 2023-12-07 14:24:44

    Java线程池——Executor框架

    Executor 框架是 Java5 之后引进的,在 Java 5 之后,通过 Executor 来启动线程比使用 Thread 的 start 方法更好,除了更易管理,效率更好(用线程池实现,节约开销)。 Executor 框架不仅包括了线程池的管理,还提供了线程工厂、队列以及拒绝策略等,Executor 框架让并发编程变得更加简单。
  • 12.07 14:17:01
    发表了文章 2023-12-07 14:17:01

    Netty心跳检测

    客户端的心跳检测对于任何长连接的应用来说,都是一个非常基础的功能。要理解心跳的重要性,首先需要从网络连接假死的现象说起。
  • 12.07 14:14:13
    发表了文章 2023-12-07 14:14:13

    Netty通道的容器属性Attribute

    Netty中的Channel通道类,有类似于Map的容器功能,可以通过“key-value”键值对的形式来保存任何Java Object的值。一般来说可以存放一些与通道实例相关联的属性,比如说服务期端的ServerSession会话实例。
  • 12.07 14:12:44
    发表了文章 2023-12-07 14:12:44

    JSON和Protobuf序列化

    因为像TCP和UDP这种底层协议只能发送字节流,因此当我们在开发一些远程过程调用(RPC)的程序时,需要将应用层的Java POJO对象序列化成字节流,数据接收端再反序列化成Java POJO对象。序列化一定会设计编码和格式化,目前常见的编码方式有:
  • 12.07 14:00:13
    发表了文章 2023-12-07 14:00:13

    Netty编码器和解码器

    Netty从底层Java通道读到ByteBuf二进制数据,传入Netty通道的流水线,随后开始入站处理。在入站处理过程中,需要将ByteBuf二进制类型解码成Java POJO对象。这个解码过程可以通过Netty的Decoder解码器去完成。在出站处理过程中,业务处理后的结果需要从某个Java POJO对象编码为最终的ByteBuf二进制数据,然后通过底层 Java通道发送到对端。在编码过程中,需要用到Netty的Encoder编码器去完成数据的编码工作。
  • 12.07 13:52:47
    发表了文章 2023-12-07 13:52:47

    Netty基础入门和基本使用-2

    在Reactor反应器经典模型中,反应器查询到IO事件后,分发到Handler业务处理器,由Handler完成IO操作和业务处理。整个的IO处理操作包括:从通道读取数据包、数据包解码、业务处理、目标数据编码、把数据包写到通道,然后由通道发送到对端。前后两个环节,从通道读取数据包和由通道发送到对端由Netty的底层完成,不需要用户程序负责。
  • 12.07 13:52:32
    发表了文章 2023-12-07 13:52:32

    Netty基础入门和基本使用-1

    Netty继承和扩展了JDK Future系列异步回调的API,定义了自身的Futrue系列接口和类,实现了异步任务的监控、异步执行结果的获取。总体来说Netty对Java Future异步任务的扩展如下: 继承Java的Future接口,得到了一个新的属于Netty自己的Future异步任务接口,该接口对原有接口进行了增强,使得Netty异步任务能够以非阻塞的方式处理回调的结果 引入了一个新街口——GenericFutureListener,用于表示异步执行完成的监听器。这个Netty使用了监听器的模式,异步任务的执行完成后的回调逻辑抽象成了Listener监听器接口。可以将Netty的Ge
  • 12.07 13:28:45
    发表了文章 2023-12-07 13:28:45

    Reactor反应器模式

    在Java的OIO编程中,最初和最原始的网络服务器程序使用一个while循环,不断地监听端口是否有新的连接,如果有就调用一个处理函数来处理。这种方法最大的问题就是如果前一个网络连接的处理没有结束,那么后面的连接请求没法被接收,于是后面的请求统统会被阻塞住,服务器的吞吐量就太低了。 为了解决这个严重的连接阻塞问题,出现了一个即为经典模式:Connection Per Thread。即对于每一个新的网络连接都分配一个线程,每个线程都独自处理自己负责的输入和输出,任何socket连接的输入和输出处理不会阻塞到后面新socket连接的监听和建立。早期版本的Tomcat服务器就是这样实现的。
  • 12.07 13:24:13
    发表了文章 2023-12-07 13:24:13

    Java NIO三大核心组件

    用户程序进行IO的读写,依赖于底层的IO读写,基本上会用到底层的read&write两大系统调用。在不同的操作系统中,IO读写的系统调用的名称可能完全不一样,但是基本功能是一样的。 read系统调用并不是直接从物理设备把数据读取到内存中,write系统调用也不是直接把数据写入到物理设备。上层应用无论是调用操作系统的read还是write,都会涉及缓冲区。**具体来说,调用操作系统的read,是把数据从内核缓冲区复制到进程缓冲区;而调用系统调用的write,是把数据从进程缓冲区复制到内核缓冲区。**因为外部设备的读写设计到操作系统的中断,引入缓冲区可以减少频繁地与设备之间的物理交换,操作系统会
  • 12.07 13:16:34
    发表了文章 2023-12-07 13:16:34

    x86的内存寻址方式

    在16位的8086时代,CPU为了能寻址超过16位地址能表示的最大空间(因为 8086 的地址线 20 位而数据线 16 位),引入了段寄存器。通过将内存空间划分为若干个段(段寄存器像 ds、cs、ss 这些寄存器用于存放段基址),然后采用段基地址+段内偏移的方式访问内存,这样能访问1MB的内存空间了。
  • 12.07 13:12:10
    发表了文章 2023-12-07 13:12:10

    CPU架构和指令集

    不同的CPU架构通常使用不同的指令集。每种CPU架构都有其自己的一组特定的机器指令,这些指令用于执行计算机程序。不同的CPU架构之间的指令集是不兼容的,这意味着编写的程序通常需要根据目标CPU的架构进行编译或汇编,以确保它们能够在该CPU上正确运行。 一些常见的CPU架构包括:
  • 12.07 13:09:41
    发表了文章 2023-12-07 13:09:41

    MySQL之深入InnoDB存储引擎——Undo页

    redo日志解决了事务的持久性问题,而原子性问题则是交给undo日志来保证。有时候事务执行过程中可能遇到服务器的宕机等原因导致事务中断,或者程序在事务执行过程中想取消本次事务,那么为了保证原子性(即要么事务的操作全部完成,要么什么也不做),我们需要把数据恢复为原本的样子,这个过程就成为回滚,为了回滚而记录的东西则成为undo log。在事务执行DML操作时,会先把回滚所需的东西都记下来,而对于查询语句则不会产生相应的undo日志。
  • 12.07 13:01:22
    发表了文章 2023-12-07 13:01:22

    MySQL之深入InnoDB存储引擎——redo日志

    我们知道数据的修改首先是在Buffer Pool中进行的,之后再定时刷到磁盘中。那么如果在事务提交后还没刷新到磁盘中,系统就崩溃了,那么此时数据就丢失了,这就不满足事务的持久性了。而如果我们考虑每次提交之后,都同步将事务中所有的页面刷新到磁盘,这样确实可以保证持久性,但是这种方法存在以下两种问题:
  • 12.07 12:55:13
    发表了文章 2023-12-07 12:55:13

    MySQL之深入InnoDB存储引擎——Buffer Pool

    InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。在数据库系统中,由于CPU速度与磁盘速度之间的鸿沟,基于磁盘的数据库系统通常使用缓冲池技术来提高数据库的整体性能。在数据库中进行读取页的操作,首先将从磁盘读到的页存放在缓冲池中,这个过程称为将页“FIX”在缓冲池中,在下一次读取相同的页时,首先判断该页是否存在缓冲池中,如果存在则被命中,直接读取,否则读取磁盘上的页。
  • 12.07 12:50:45
    发表了文章 2023-12-07 12:50:45

    MySQL查询执行计划详解(EXPLAIN)

    一、单表查询 访问方法/访问类型: • const:通过主键值或唯一二级索引与一个常熟进行等值查询(不包括NULL),只会生成一条记录 • ref:普通二级索引与一个常数进行等值比较,可能生成多条记录 • ref_or_null:ref的前提下可以加上or key is null • range:对应的扫描区间为若干个单点扫描区间或范围扫描区间(不包括负无穷到正无穷的范围) • index:扫描区间为全表,但是可以在二级索引中扫描(因为二级索引每条记录占用空间更小,所以需要读的页更少) • all:直接扫描全部的聚集索引记录
  • 12.07 12:39:43
    发表了文章 2023-12-07 12:39:43

    MySQL表空间结构与页、区、段的定义

    一、概念引入 1、页 InnoDB是以页为单位管理存储空间的,在InnoDB中针对不同的目的设计了各种不同类型的页面。如下(省略了FIL_PAGE或FiL_PAGE_TYPE的前缀):
  • 12.07 11:55:09
    发表了文章 2023-12-07 11:55:09

    MySQL处理客户端请求

    可以提高系统性能,但是也因此需要维护这块缓存而造成一些开销。比如每次都要去查询缓存中检索、请求处理完后需要更新查询缓存等。从MySQL5.7开始不推荐使用查询缓存,在MySQL8.0中查询缓存被删除。
  • 12.07 11:52:11
    发表了文章 2023-12-07 11:52:11

    MySQL之深入InnoDB存储引擎——物理文件

    一、参数文件 当 MySQL 实例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数。在默认情况下,MySQL 实例会按照一定的顺序在指定的位置读取,没有参数文件也可以运行,这时所有的参数值取决于编译 MySQL 时指定的默认值和源代码中指定参数的默认值。 但是如果在默认的数据库目录下找不到 mysql 架构,则启动同样失败,mysql 架构中记录了访问该实例的权限。
  • 12.07 11:46:20
    发表了文章 2023-12-07 11:46:20

    MySQL之深入InnoDB存储引擎——Checkpoint机制

    一、引入 由于页的操作首先都是在缓冲池中完成的,那么如果一条DML语句改变了页中的记录,那么此时页就是脏的,即缓冲池中页的版本要比磁盘的新。那么数据库需要将新版本的页刷新到磁盘。倘若每次一个页发生变化就刷新,那么开销会很大,若热点数据集中在某几个页中,那么数据库的性能将变得非常差。 同时如果在缓冲池将新版本的页刷新到磁盘时发生了宕机,那么数据就不能恢复了。为了避免发生数据丢失的问题,当前事务数据库普遍都采用了 Write Ahead Log 策略,即当事务提交时,先写重做日志,再修改页。当由于发生宕机而导致数据丢失时,通过重做日志来完成数据的恢复,从而满足事务的持久性要求。
  • 12.07 11:43:21
    发表了文章 2023-12-07 11:43:21

    深入TCP协议——tcp_tw_reuse和tcp_tw_recycle

    前情提要:深入理解Linux网络——TCP协议三次握手和四次挥手详细流程 我们已经知道TCP四次挥手中,主动方在收到被动方的FIN数据包之后会进入TIME_WAIT状态等待2MSL的时间后才进入CLOSED。在 Linux 操作系统下,TIME_WAIT 状态的持续时间是 60 秒,这意味着这 60 秒内,客户端一直会占用着这个端口,这是有一定的开销的。如果如果主动关闭连接方的 TIME_WAIT 状态过多,占满了所有端口资源,则会导致无法创建新连接。
  • 12.07 11:41:12
    发表了文章 2023-12-07 11:41:12

    深入理解Linux网络——TCP协议三次握手和四次挥手详细流程

    • 找到套接字:创建内核对象的时候,fd会跟file对象做通过fd_install关联起来,通过进程的fd_table就可以找到对应的file,而file的private指针就指向了socket对象,所以根据fd即可找到套接字 • 判断当前套接字的状态:只有SS_UNCONNECTED状态(刚创建的套接字就是该状态)才会继续,其他状态都会报错 1. 注意此处是socket的状态,而不是sock的状态 2. 会将socket状态更改为SS_CONNECTING • 更改sock状态为TCP_SYN_SENT
  • 12.07 11:31:55
    发表了文章 2023-12-07 11:31:55

    深入理解Linux网络——TCP连接的开销

    在应用程序里,我们使用多少内存都是自己能掌握和控制的,但是纵观Linux整台服务器,除了应用程序以外,内核也会申请和管理大量的内存。
  • 12.07 11:19:41
    发表了文章 2023-12-07 11:19:41

    操作系统——虚拟内存管理

    早期程序直接运行在物理内存上,直接操作物理内存,这种方式存在几个问题: 地址空间不隔离,程序操作相同地址空间会造成相互影响甚至崩溃,安全性也得不到保障 使用效率低:没有特别好的策略保证多个进程对超过物理内存大小的内存需求的满足 程序运行地址不确定:程序运行时都需要分配空闲区域,而空闲区域不确定,因而不能确定程序被放在什么位置,那么其中的数据、函数等位置都是不确定的,会带来一些重定位的问题 内存管理主要就是为了解决以上三个问题的。
  • 12.07 10:36:34
    发表了文章 2023-12-07 10:36:34

    深入理解Linux网络——本机网络IO

    前面的章节深度分析了网络包的接收,也拆分了网络包的发送,总之收发流程算是闭环了。不过还有一种特殊的情况没有讨论,那就是接收和发送都在本机进行。而且实践中这种本机网络IO出现的场景还不少,而且还有越来越多的趋势。例如LNMP技术栈中的nginx和php-fpm进程就是通过本机来通信的,还有流行的微服务中sidecar模式也是本机网络IO。
  • 12.07 10:25:54
    发表了文章 2023-12-07 10:25:54

    深入理解Linux网络——内核是如何发送网络包的

    一、相关实际问题 1. 查看内核发送数据消耗的CPU时应该看sy还是si 2. 在服务器上查看/proc/softirqs,为什么NET_RX要比NET_TX大得多 3. 发送网络数据的时候都涉及那些内存拷贝操作 4. 零拷贝到底是怎么回事 5. 为什么Kafka的网络性能很突出
  • 12.07 10:08:18
    发表了文章 2023-12-07 10:08:18

    深入理解Linux网络——内核与用户进程协作之多路复用方案(epoll)

    在上一部分的阻塞模式中(详见深入理解Linux内核网络——内核与用户进程协作之同步阻塞方案(BIO)),用户进程为了等待一个socket就得被阻塞掉,如果想要同时为多个用户提供服务要么就得创建对应数量的进程处理,要么就使用非阻塞的方式。进程不说创建,单论上下文切换就需要很大的耗时,而如果非阻塞的模式,就得轮询遍历,会导致CPU空转,并且每次轮询都需要进行一次系统调用,所以Linux提供了多路复用的机制来实现一个进程同时高效地处理多个连接。
  • 12.07 09:49:48
    发表了文章 2023-12-07 09:49:48

    深入理解Linux网络——内核与用户进程协作之同步阻塞方案(BIO)

    在上一部分中讲述了网络包是如何从网卡送到协议栈的(详见深入理解Linux网络——内核是如何接收到网络包的),接下来内核还有一项重要的工作,就是在协议栈接收处理完输入包后要通知到用户进程,如何用户进程接收到并处理这些数据。
  • 12.07 09:38:34
    发表了文章 2023-12-07 09:38:34

    深入理解Linux网络——内核是如何接收到网络包的

    一、相关实际问题 RingBuffer是什么,为什么会丢包 网络相关的硬中断、软中断是什么 Linux里的ksoftirqd内核线程是干什么的 为什么网卡开启多队列能提升网络性能 tcpdump是如何工作的 iptable/netfilter是在哪一层实现的 tcpdump能否抓到被iptable封禁的包 网络接收过程中如何查看CPU开销 DPDK是什么
  • 12.07 09:23:04
    发表了文章 2023-12-07 09:23:04

    网络互联设备(集线器、交换机、路由器)

    网络互连设备用于将网络的各个部件连接到一起,从连接性质的不同可分为两种: 物理上的互连能力:指所支持的物理接口,能连接的物理介质类型 协议上的互连能力:指工作在不同协议类型的网络之间,实现不同协议数据包的转换。
  • 12.06 21:15:50
    发表了文章 2023-12-06 21:15:50

    IP路由协议(RIP、IGRP、OSPF、IS-IS、BGP)

    1、路由分类 路由产生方式: 直接路由:路由器会自动生成本路由器激活端口所在网段的路由条目 静态路由:网络管理员手工配置,静态路由信息在缺省的情况下私有的,不会传递给其他的路由器
  • 12.06 20:56:13
    发表了文章 2023-12-06 20:56:13

    路由协议基本术语

    1、自治系统AS Internet中,自治系统就是处于同一个管理机构(如一个ISP)控制下的路由器和网络群组 在同一个自治系统中的所有路由器相互连接,运行相同的路由协议 每个自治系统都有唯一的标识(16位),称为AS号,有IANA来分配
  • 12.06 20:45:09
    发表了文章 2023-12-06 20:45:09

    Windows编程课设(C#)——基于WPF和.net的即时通讯系统(仿微信)

    一款参考QQ、微信的即时通讯软件。采用CS结构,客户端基于.Net与WPF开发,服务端使用Java开发。
  • 12.06 20:35:54
    发表了文章 2023-12-06 20:35:54

    操作系统相关问题——应用程序和操作系统怎么配合

    应用程序和操作系统都是软件, CPU会将它们一视同仁,甚至CPU不知道自己在执行的程序是操作系统还是一般应用软件。CPU只知道去cs:ip寄存器中指向的内存取出指令并执行,它不知道什么是操作系统。
  • 12.06 20:32:53
    发表了文章 2023-12-06 20:32:53

    操作系统相关问题——软件是如何访问硬件的

    硬件是各种各样的,发展速度还是非常快的。每个硬件都有自己的个性,操作系统不可能及时更新各种硬件的驱动方法(不可能刚出某个新硬件,OS开发者就开始为其编写驱动,这显然不现实)。 因此便出现了各种硬件适配器,这就是IO接口。接口其实就是标准,大家生产生出来的硬件按照这个标准工作就实现了通用。硬件在输入输出上大体分为串行和并行,相应的接口也就是串行接口和并行接口。
  • 12.06 20:29:02
    发表了文章 2023-12-06 20:29:02

    系统调用与用户态陷入内核态

    我们都知道操作系统中运行着很多的进程,如果普通的进程可以直接操作硬件那么这个系统的安全性没办法保障,所以操作系统分出了两种状态,一种状态是运行的代码可以操作硬件;一种状态不能操作硬件,只能切换到第一种状态去操作后再切换回来,这就是内核态和用户态。
  • 12.06 20:22:13
    发表了文章 2023-12-06 20:22:13

    自定义OAuth2组件实现对授权码登录模式的封装

    所谓OAuth2其实就是Open Authorization,即开放授权,是一种授权机制或者说是一种协议。OAuth2允许用户授权第三方应用访问其存储在开放平台(授权服务器)中的数据而不需要提供密码。授权服务器根据OAuth2协议标准制订一套授权的API,第三方网站接入开放平台之后即可通过其提供的API来实现用户授权和获取授权服务器中用户的信息的功能。
  • 12.06 20:12:05
    发表了文章 2023-12-06 20:12:05

    HTTPS加密原理

    1、单向加密 也称为不可逆加密,对明文产生一个密文,并且不能通过密文解出对应的明文 使用场景:一般用于信息摘要,密钥加密等 常见的单向加密算法有:
  • 12.06 16:46:43
    发表了文章 2023-12-06 16:46:43

    MySQL基本组件与存储引擎

    简单来说 MySQL 主要分为 Server 层和存储引擎层: Server 层:主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binlog 日志模块。 存储引擎: 主要负责数据的存储和读取,采用可以替换的插件式架构,支持 InnoDB、MyISAM、Memory 等多个存储引擎,其中 InnoDB 引擎有自有的日志模块 redolog 模块。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5 版本开始就被当做默认存储引擎了。
  • 12.06 16:32:08
    发表了文章 2023-12-06 16:32:08

    MySQL锁的分类和加锁机制

    在了解MySQL锁之前,首先我们必须要明白加锁的是为了解决什么问题。 我们知道事务具有个隔离性的特性,而隔离性的实现主要就是通过锁以及MVCC机制实现的(关于MVCC机制以及隔离级别的实现可查看文章:MySQL事务详解与隔离级别的实现)。 MVCC是一种用来解决读写冲突的无锁并发控制,在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数据库并发读写的性能,解决脏读、幻读、不可重复读等问题。当然只是读取不加锁不阻塞,写操作还是会进行加锁的,即MVCC解决的只是读-写的阻塞问题,写-写依然还是阻塞的。对于写写的并发线程问题,仍需要使用锁来保证线程安全。即MVCC机
  • 12.06 16:20:46
    发表了文章 2023-12-06 16:20:46

    MySQL事务详解与隔离级别的实现

    四个特性 原子性:所有操作要么全部执行要么全部不执行,一条指令失败则数据进行回滚,回到所有指令执行前的状态。 一致性:事务开始前和结束后,数据库的完整性约束没有被破坏。即数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。比如A向B转账,不可能A扣了钱,B却没收到。 隔离性:同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。 持久性:事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
  • 12.06 15:58:41
    发表了文章 2023-12-06 15:58:41

    Arrays.asList、ArrayList.subList使用规范

    Arrays.asList、ArrayList.subList使用规范
  • 12.06 15:56:32
    发表了文章 2023-12-06 15:56:32

    MySQL索引

    索引是帮助MySQL高效获取数据的排好序的数据结构。MySQL索引的建立对于MySQL的高效运行是很重要的,可以大大提高MySQL的检索速度。
  • 12.06 15:35:47
    发表了文章 2023-12-06 15:35:47

    API接口签名验证

    过去对于接口的验证我一般都是直接在登录时为用户发放token,用户在随后的操作中携带了token则允许请求。 但是这样的验证方式存在有一定的问题,如果token被泄露被他人获取,那么就会有非法请求的风险。其他人可以使用这个token自行调用接口进行请求,传入非法参数甚至进行注入攻击等,可能会造成严重的问题。
  • 12.06 15:30:41
    发表了文章 2023-12-06 15:30:41

    SpringBoot整合Redis调用lua脚本出现空指针异常(序列化器问题)

    一、问题描述 业务中出现需要保证原子性的一系列缓存操作,所以决定使用lua脚本来保证原子性。 但是调用过程中lua脚本抛出了异常:attempt to perform arithmetic on local ‘xxx’ (a nil value) 发生异常的lua脚本代码(部分)
  • 12.06 15:27:18
    发表了文章 2023-12-06 15:27:18

    SpringMVC控制层private方法中出现注入的service对象空指针异常

    一、现象 SpringMVC中controller里的private接口中注入的service层的bean为null,而同一个controller中访问修饰符为public和protected的方法不会出现这样的问题。 controller中的方法被AOP进行了代理,普通Controller如果没有AOP,private方法中bean也是正常的。
  • 发表了文章 2023-12-07

    深入理解Linux网络——TCP连接建立过程(三次握手源码详解)

  • 发表了文章 2023-12-07

    Netty底层原理

  • 发表了文章 2023-12-07

    Java线程池——Executor框架

  • 发表了文章 2023-12-07

    Netty心跳检测

  • 发表了文章 2023-12-07

    Netty通道的容器属性Attribute

  • 发表了文章 2023-12-07

    JSON和Protobuf序列化

  • 发表了文章 2023-12-07

    Netty编码器和解码器

  • 发表了文章 2023-12-07

    Netty基础入门和基本使用-2

  • 发表了文章 2023-12-07

    Netty基础入门和基本使用-1

  • 发表了文章 2023-12-07

    Reactor反应器模式

  • 发表了文章 2023-12-07

    Java NIO三大核心组件

  • 发表了文章 2023-12-07

    x86的内存寻址方式

  • 发表了文章 2023-12-07

    CPU架构和指令集

  • 发表了文章 2023-12-07

    MySQL之深入InnoDB存储引擎——Undo页

  • 发表了文章 2023-12-07

    MySQL之深入InnoDB存储引擎——redo日志

  • 发表了文章 2023-12-07

    MySQL之深入InnoDB存储引擎——Buffer Pool

  • 发表了文章 2023-12-07

    MySQL查询执行计划详解(EXPLAIN)

  • 发表了文章 2023-12-07

    MySQL表空间结构与页、区、段的定义

  • 发表了文章 2023-12-07

    MySQL处理客户端请求

  • 发表了文章 2023-12-07

    MySQL之深入InnoDB存储引擎——物理文件

正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息
正在加载, 请稍后...
暂无更多信息