自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

苦行僧

苦行僧

  • 博客(36)
  • 问答 (1)
  • 收藏
  • 关注

原创 Java网络模型全扫盲

​ 在Java中,NIO(Non-blocking I/O 或 New I/O)是Java SE 1.4及后续版本中引入的一套新的输入/输出操作API。​ 它与传统的IO模型相比,提供了更高的效率和更好的并发处理能力。NIO的关键特性在于它的非阻塞特性,这使得单个线程能够管理多个I/O通道,从而极大地提高了在高并发场景下的应用性能。

2024-07-11 23:28:18 1110

原创 网络IO模型之多路复用器.md

内核提供多路复用器,多路复用器中会监听各个网络TCP连接的状态,然后业务程序方面有专门的线程用来不停往多路复用器处查询连接状态,当发现有连接的状态发生变更后,就通知其他对应的线程去读取数据。在目前的环境下,绝大多数系统和应用都是使用这类模型来处理网络请求,例如Windows的IOCP,Linux的epoll,而业务程序方面代表性最强的则是Netty。当然,我们如果成自身程序的角度去看网络通信的话,我们根据系统内核给予的文件描述符去获取TCP连接数据时,这就叫In,将数据输出到其他位置,这叫Out。

2024-07-04 23:43:34 368

原创 计算机网络知识普及之四元组

这是因为在IP类通信协议中,网络传输时需要根据IP和端口号来定位相对应接收网络数据的程序,所以在我们要知道,在一个四元组中,可以很精确的确认来源程序和目的程序,且在整个网络环境中不会重复。例如选中的向日葵客户端,它现在建立的一条连接中,标识了客户端IP为192.168.31.96,客户端端口为:49565,服务端IP为:122.246.12.46,服务端端口为443。IP协议全称为互联网协议,处于网络层中,主要作用是标识网络中的设备,每个设备的IP地址是唯一的。

2024-07-03 22:19:44 642

原创 史上最全的Shell指南-下篇

11 流程控制11.1 函数进阶11.1.1 函数嵌套这一节,我们从 基础知识、简单实践、小结 三个方面来学习。基础知识简介 所谓的函数嵌套,主要是在函数间或者文件间相互使用的一种方式。它主要有三种样式:样式1:函数间调用 - 函数体内部调用其他的函数名样式2:文件间调用 - 函数体内部调用另外一个文件的函数名 - 需要额外做一步文件source的加载动作 注意:我们将专门提供函数的文件称为 -- 函数库样式3:函数自调用 - 函数体内部调用自己的函数名,将复杂的逻辑简单化

2024-05-07 00:01:33 699

原创 史上最全的Shell指南-上篇

0 史上最全的Shell指南ps: 你不会在第二个地方找到这么全的指南1 shell简介1.1 核心命令1.1.1 筛选信息shell快捷键快捷键符号命令执行: !! 执行上一条命令 !num 执行历史命令中的第num行命令 Ctrl 关键字 执行内容匹配的命令命令行切换 Ctrl + A 光标迅速回到行首 Ctrl + E 光标迅速回到行尾 Ctrl + k 删除光标到行尾内容 Ctrl + u 删除光标到行首

2024-05-07 00:00:21 302

原创 HTTPS加密原理详解

HTTPS全称Hypertext Transfer Protocol Secure,意为安全的超文本传输协议,简称HTTP安全版。HTTPS在网络协议层级上位于TCP/IP协议之上,HTTP之下,跟HTTP的区别就是加入了SSL/TLS协议以确保数据安全。

2024-04-27 00:10:08 1276

原创 实现简单线程池

简单实现Java线程池

2023-09-23 15:17:27 131

原创 Windows编译OpenResty并加入正向代理

OpenResrty Windows编译 加入正向代理模块

2023-08-31 15:15:55 614

原创 SPI机制是如何规避双亲委派机制的?

SPI机制是如何规避双亲委派机制的?

2023-08-29 21:59:04 443 6

原创 SpringBoot自动配置原理

注:版本为2.5.7首先看代码:@SpringBootApplicationpublic class MyWebApplicationTest { private static final Log logger = LogFactory.getLog(MyWebApplicationTest.class); public static void main(String[] args) { logger.info("ttttttt"); SpringApplication.run(MyWeb

2022-01-04 16:47:24 1312

原创 Spring日志与SpringBoot日志

本篇意为说明Spring默认日志实现与SpringBoot默认日志实现。1、日志在这之前,我们应该先了解一些日志框架。具体可以看我这篇随笔:https://www.cnblogs.com/daihang2366/p/15201347.html你得了解JCL、SLF4J、JUL、LogBack。2、Spring5.x在Spring5.x中,默认日志实现为JCL+JUL(其他版本未验证)。证明打开Spring源码,随便找一个类中获取日志Log的属性。进入其getLog方法中:在进入下

2021-12-23 17:45:27 300

原创 MySQL代替in之临时表

如果我们正常的使用IN去查询SELECT * FROM aJOIN b ON a.id = b.idWHERE b.tag_id IN (1,2,3,4,5,6)这种因为in里面的参数是连续的,它很快如果in里面的数据不是连续的,SELECT * FROM aJOIN b ON a.id = b.idWHERE b.tag_id IN (88,2,303,410,581,316)这种数据量一起来,它会很慢解决方法,将in里面的数据更改为临时表去关联查询SELECT * .

2021-11-26 16:27:50 1586

原创 Tomcat总体架构和启动流程

Tomcat大家都知道,这个没什么好描述的,我们先看Tomcat的总体架构1、总体架构架构一步一步增加组件,先来个最原始的===Server:Tomcat的整体服务,负责接收和处理请求。其拥有生命周期start开启和stop关闭方法。但是很明显,所有操作放到Server里面来是不可能的,我们继续往下扩展===除开Server还加入了Connector、Container。Connector连接器:使用Socket来接收请求的到来,并对请求进行响应。Container容器:用来接

2021-10-29 10:04:44 172

原创 Java使用Redis实现分布式锁

1、概述此处使用Redis的setNx命令和expire命令和del命令来实现分布式锁。首先我们要知道, 我们的redis执行命令是队列方式的,并不存在多个命令同时运行,所有命令都是串行的访问。那么这就说明我们多个客户端连接Redis的时候不存在其并发的问题。其实实现分布式锁并不仅仅可以使用Redis完成,也可以使用其他的方式来完成,最主要的目的就是有一个地方能作为锁状态,然后通过这个锁的状态来实现代码中的功能。只要我们这个锁操作的时候是是串行的,那么就能实现分布式锁。其实有一个问题,为什么我们不使

2021-10-28 20:23:42 776

原创 Tomcat源码部署

1、下载源码https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.54/src/apache-tomcat-9.0.54-src.zip2、解压3、在解压后的根目录创建目录:catalina-home4、复制目录到catalina-home中5、在根目录中创建pom.xml并写入如下内容:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.

2021-10-24 16:55:22 496

原创 Docker安装一些软件

1、Docker开始远程访问vim /lib/systemd/system/docker.service在ExecStart的值最最后面追加:空格±H tcp://0.0.0.0:2375systemctl daemon-reloadsystemctl start docker2、安装Jenkinsdocker pull jenkins/jenkins:lts可选:docker inspect ba607c18aeb7,查看Env下的JENKINS_VERSION版本宿主机创建目录: mkd

2021-10-19 15:42:25 207

原创 Spring循环依赖原理

1、现象概述这个现象其实大部分都知道,循环依赖也是网上比较流传Spring的一个问题。比如现在有一个类为Class1,然后其有一个属性为Class2,然后Class2这个类里有一个属性为Class1。当这两个类都是单例的时候,就存在循环依赖的问题了。那么这种情况在Spring管理Bean的时候是如何解决的呢?下面来描述2、代码现象Class1.java@Componentpublic class Class1 { @Autowired private Class2 class2;}

2021-10-14 16:43:11 173

原创 JSqlParser解析SQL时SUM包裹IF出错

SQLSELECT SUM(IF(1=1,1,0)) AS `result` FROM sys_usersql```这种会报错的。# 错误信息Caused by: net.sf.jsqlparser.JSQLParserException: null at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatements(CCJSqlParserUtil.java:154) at com.baomidou.mybatisplus.core.pa

2021-10-08 20:40:25 858 2

原创 Spring回调接口之InstantiationAwareBeanPostProcessor

概述org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor这个回调接口中有两个方法:@Nullabledefault Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException { return null;}default boolean post

2021-09-28 19:04:58 837

原创 Spring使用有参构造器创建对象autowireConstructor方法

前提你得知道Spring创建Bean的基本流程,我们这里解释的是Spring创建Bean时使用有参构造器去创建Bean的源码解析。autowireConstructor方法这个方法里面就是拿到类的构造器,然后选取到最合适的,然后进而通过构造器来进行初始化。方法总览没想到很好的表达方式,就把注释补充完整,可以直接看注释/*** 根据给定的构造器列表(如果给的构造器参数是空的,那么则会去获取该类的构造器数组),Spring去找出一个最适合的构造器,然后通过这个构造器去实例化对象出来.* b

2021-09-27 21:06:56 1048

原创 Spring实例化Bean流程解析

注:本文仅解释其实例化过程,属性注入、循环依赖等下一篇解析。首先我们查看示例的代码Demo1.java:@Component("demo1")public class Demo1 {}Main.java:AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();applicationContext.register(AppConfig.class);

2021-09-21 16:22:27 1057

原创 树莓派配置Jdk环境

查看机器版本下载对应jdk我这里是:jdk-8u301-linux-arm32-vfp-hflt.tar.gz上传到树莓派中解压放置到/usr/local中tarzxvf jdk-8u301-linux-arm32-vfp-hflt.tar.gz -C /usr/local/配置/etc/profilevim /etc/profileexport JAVA_HOME=/usr/local/jdk1.8.0_241export CLASSPATH=.:${JAVA_HOME}/.

2021-09-08 12:00:06 454

原创 Spring中AOP的实现

1、概述它最大的作用是什么?在不更改源代码的情况下,对其原有功能进行增强。使得代码的重用率、开发效率、维护产生极大的方便。运用场景最常见的有:事务、日志、请求拦截等2、使用如何在Spring中使用AOP?1、开启配置@EnableAspectJAutoProxy2、写代理类和被代理的类@Component@Aspectpublic class AopConfig { @PostConstruct public void init(){ System.out.pri

2021-09-07 09:18:30 462

原创 微信小程序真机调试时接口出现Provisional headers are shown?

小程序接口访问报错:Provisional headers are shownx此时无响应,后台未接收到请求可排查的原因如下:1、检查是否配置你的域名地址到微信后台里面2、Nginx设置ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;3、检测: 1、https://myssl.com/到此网站去检测 2、完善证书链https://myssl.com/chain_download.html4、更换证书,到域名提供商里面获取证

2021-09-03 14:22:11 1661

原创 Java日志浅谈

1、Java日志体系概述老话都说,Java日志体系百花齐放,各式各类的日志很多并且繁杂,那么本片博客带你理清这些日志。Java日志中体系,比较老牌的就是jcl、log4j、jul、logback、slf4j,相信这些日志你都听说过,而且并不陌生。那么我下面来挨个介绍这些日志框架。这些日志框架各有各的特色,我们一般开发的业务系统中都是使用指定一个日志框架,但一个高扩展的项目,是不会仅限于使用指定单独一个日志框架的,下面会针对mybatis来解释这个东西。1.1、JUL叫JUL的原因是这个日志框架所处

2021-08-28 22:12:33 159

原创 Spring阶段性学习:基础、配置解析、回调

1、BeanDefinition是什么?我们都知道Spring会将我们的类new出来以后存放到它自己的容器当中去,然后Spring还需要对我们的类进行其他很多功能的处理,那么Spring的流程是先将需要new的类的信息都保存下来,然后统一的去new然后存放到容器当中.BeanDefinition就是存放类型下的.概览BeanDefinition是一个接口,其他有很多的实现类.我们先看看该接口的代码:public interface BeanDefinition extends Attri

2021-08-22 16:21:36 399

原创 谈谈Spring对于@Configuration的Cglib代理

1、现象众所周知,Spring中配置类是用来代替配置文件的,在老一些的日子里面我们使用XML配置,而如今大多使用JavaBean的方式配置。一个简单的配置类如下:@Configuration@ComponentScan("com.dh")public class AppConfig { @Bean public Entity1 entity1(){ return new Entity1(); } @Bean public Entity2 entity2(){ return new

2021-08-10 21:23:03 392

原创 谈谈Spring的ImportSelector和ImportBeanDefinitionRegistrar

1、@Import在聊ImportSelector和ImportBeanDefinitioRegistar之前需要先知道@Import。@Import是写在我们的配置类上的,如下:@Configuration@Import({XXX.class,XXX2.class})public class AppConfig {}当Spring扫描我们AppConfig后,就能拿到我们@Import中填的Class,并将其实例化后放到容器当中。2、@Import中的三种类@Import中填入的类可以

2021-07-30 17:28:09 1510

原创 极光推送SDK集成

极光推送SDK1、注册在官网注册,并创建安卓应用,然后根据提示下载SDK包,内含SDK和Demo,可以导入尝试,如何导入sdk包中有md文档2、集成到安卓中在模块下的build.grade中加入如下配置:apply plugin: 'com.android.application'android { compileSdkVersion 29 buildToolsVersion "29.0.3" defaultConfig { applicati.

2021-07-23 16:51:00 1104

原创 多种单例模式

单例模式饿汉模式public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { } public static Singleton getInstance(){ return singleton; }}此方法能保证singleton唯一性,但一起动则初始化,如果有大量的动作,那么会极为耗费性能,所以引

2021-07-23 16:49:56 72

原创 责任链模式

1、责任链模式1.1、先抛出问题现在我们有一个业务要求如下:- 判断此请求是否合法,不合法则拦截- 判断此请求是否为接受请求,不是则丢弃- 判断此请求用户是否登录,未登录则先登录- 判断此请求用户是否授权此请求,未授权则异常返回- 扒拉扒拉扒拉还有一大堆...................此时我们过滤拦截代码会很繁杂,而且对于判断顺序也是繁杂,如果出现不同请求不同判断逻辑,那又得加if,然后当后面出现新需求,那又得扒拉扒拉的堆积代码。这种情况是不好的,我们只要抽出时间细想这些代码,就应该

2021-07-23 16:49:05 114

原创 接口防重复提交

ps:以前经常会处理此类问题,但一直没有闲暇时间记录,今天就把这个东西记录一下。1、提出问题业务中不可避免出现重复提交的问题,场景大概如下:​ 用户请求开户,后端接口处于开户处理中,在这个过程中,用户再次请求开户,那么此时在未做对应处理的情况下,即使业务代码中去判断开户重复也是无用的,因为一般增删改操作处于事务当中,后一个请求不会读取到上一个请求未提交事务的数据(如果读取到了那就是脏读),所以我们得在业务代码执行之前进行相应的防重复提交处理。2、解决方案大概思路如下:​ 1、用户第一次请求时,放

2021-07-23 16:48:30 1054

原创 Nginx的HTTPS配置、跨域配置,前端配置、安装

nginx安装进入nginx解压目录,./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module注意此处添加了http2和ssl模块。make如果你未安装过,则make install如果你安装过,则mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/ngin

2021-07-23 16:47:52 578

原创 谈谈Spring的ApplicationContextAware接口

谈谈Spring的ApplicationContextAware接口现象:​ 我们写一个类,实现ApplicationContextAware接口,类上再加一个@Component后,运行项目,你会发现在我们实现的setApplicationContext会传进来Spring的ApplicationContext。@Componentpublic class TestMyBeanPostProcess implements ApplicationContextAware { @Override

2021-07-23 16:47:10 3412 1

原创 |MySQL数据量大时limit往后会速度变慢

当数据量特别大的时候,我们有如下SQL:SELECT * FROM t LIMIT 10000,10当数据量有上百万的时候,这种查询是很慢的。但我们将 * 改为索引字段时:SELECT ID FROM t LIMIT 10000,10# 这种查询就会很快。那么我们需要将SQL改造如下:SELECT * FROM t WHERE ID IN (SELECT ID FROM t LIMIT 10000,10)然后现在速度就快了起来。当然也可以改造为如下:SELECT * F.

2021-07-23 16:46:09 1160

原创 谈谈Spring的ConfigurationClassPostProcessor

ConfigurationClassPostProcessor1、它是干什么作用的?首先这个类处于的位置:org.springframework.context.annotation.ConfigurationClassPostProcessor它是用来解析我们的配置类的,如果你类上面加入了@Configuration,@CompentScan等,它就会你的这些配置解析出来2、它是如果实现功能的?示例代码public class Main1 { public static void tes

2021-07-23 16:45:19 336

空空如也

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

TA关注的人

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