自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 Java中的零拷贝

前言:在Java程序中,零拷贝技术分为两种:mmap(内存映射)和sendFile,首先要了解零拷贝的概念:所谓的零拷贝不是不拷贝,而是不经过CPU拷贝,它还是需要拷贝的(比如将数据从硬盘拷贝到内核态),这个零拷贝是从操作系统(CPU)的角度看的传统的IO拷贝首先将硬盘上的数据拷贝到内核,然后在经过CPU拷贝将数据从内核拷贝到应用程序内存(用户态),在应用程序内存,用户可以对数据进行操作修改等,然后在经过CPU拷贝将数据从用户缓冲区拷贝到socket缓冲区,然后在经过DMA拷贝,将数据从socket

2022-05-11 12:35:11 6040 2

原创 中文转换成拼音

中文转拼音不带声调引入依赖:<dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.1</version></dependency>示例: public static void main(String[] args) throws Exception{

2022-02-11 11:38:06 435

原创 用Mapper: ---tkMapper

引入依赖:导入依赖 <!--tkMapper整合mybatis+SpringBoot--> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.5</version> </dependency&g

2022-02-10 20:40:58 399

原创 mybatis-Oracle-MySQL常用操作

时间区间判断 <if test="null != startTime and '' != startTime"> and to_char(T.XStartTime,'yyyy-MM-dd') &gt;= #{startTime} </if> <if test="null != endTime and '' != endTime"> and to_char(T.XEndTi

2022-02-10 20:28:23 402

原创 Nginx配置文件详解

进入配置文件:cd /usr/local/nginx/confvim nginx.confNginx配置文件分为三大块:全局块,events块,http块全局块:从配置文件开始到events块开始之前的内容,都属于全局块,在全局块中配置的都是影响Nginx整体运行的配置。比如说:worker(工作进程)的数量,错误日志的位置等events块events块主要影响nginx服务器与⽤户的⽹络连接,⽐如worker_connections 1024,标识每个 workderprocess进程⽀持

2022-01-27 19:51:04 21237 3

原创 Nginx配置反向代理和负载均衡

配置文件注意事项:● 每句结束都需要以 ; 结尾● 一个location 里面只能配置一个proxy_pass 属性● upstream 定义的变量名不可以出现 _ (下划线)环境搭建在tomcat的webapps目录下有一个应用项目:nginxweb.war启动tomcat ,进行访问:http://139.196.79.22:8099/nginxweb/user/test01反向代理配置nginx但是我们不想直接访问tomcat, 接下来,配置nginx反向代理,通过nginx转发

2022-01-27 19:22:32 2870 2

原创 Nginx动静分离配置

在/usr/local/nginx 下创建目录用来存放静态资源我在/usr/local/nginx 目录下创建了一个xhsweb的文件夹然后再这个文件夹中在创建一个static文件夹:在static文件夹下是具体的文件:之后在nginx.conf里面进行配置loaction静态资源的配置不可以和动态访问路径写在一个location中测试访问资源:当浏览器发起http://139.196.79.22/static/这个请求时,它会去找/static前缀的location来处理,最重要

2022-01-27 19:15:07 1882

原创 nginx常见问题及解决方案

https反向代理配置● HTTPS 的固定端口号是 443,不同于 HTTP 的 80 端口● SSL 标准需要引入安全证书,所以在 nginx.conf 中你需要指定证书和它对应的 key其他和 http 反向代理基本一样,只是在 Server 部分配置有些不同 #HTTP服务器 server { #监听443端口。443为知名端口号,主要用于HTTPS协议 listen 443 ssl; #定义使用www.xx.com访问 s

2022-01-27 19:11:51 4804

原创 HttpClient远程调用

依赖: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.6</version> </dependency> <dependency&

2022-01-27 19:03:48 601

原创 Jwt令牌Token生成实践

jwt简介JSON Web Token(JWT)是⼀个开放的⾏业标准(RFC 7519),它定义了⼀种简介 的、⾃包含的协议格式,⽤于 在通信双⽅传递json对象,传递的信息经过数字签名 可以被验证和信任。JWT可以使⽤HMAC算法或使⽤RSA的公 钥/私钥对来签名,防 ⽌被篡改。最佳实践:在使用jwt时,我们可以向jwt令牌中存放我们用户自定义的信息,但是在存放自定义信息时不建议将一些敏感信息存放进去(比如:用户密码,用户手机号,等信息,因为jwt生成的token泄露后,对方可以在jwt网站对该jw

2022-01-26 19:54:05 3201

原创 Java实现分布式系统限流

为何使用分布式系统限流:在分布式环境中,我们的系统都是集群化部署,那么使用了单机版的限流策略,比如我们对某一个接口的限流方案是每秒钟最多10次请求,那么因为各个实例都会自己维护一份请求次数,所以真实每秒的请求数是:节点数 * 每秒最多请求数,这样的话就超出了我们的预期;分布式限流解决方案:● 可以基于redis,做分布式限流● 可以基于nginx做分布式限流● 可以使用阿里开源的 sentinel 中间件本次介绍使用 redis 做分布式限流实现思路:设计思路:假设一个用户(用IP判断)每

2022-01-21 13:53:07 1524

原创 java实现单机限流

何时使用限流:比如你希望自己的应用程序 QPS不要超过1000,那么RateLimiter设置1000的速率后,就会每秒往桶里 扔1000个令牌,RateLimiter经常用于限制对一些物理资源或者逻辑资源的访 问速率。简介:对于单机版的限流,可以使用Google 开源的 Guava项目,这个项目提供了Google在Java项目中使用一些核心库,包含集合(Collections),缓存(Caching),并发编程库(Concurrency),常用注解(Common annotations),Strin

2022-01-21 13:49:24 1215

原创 zk实现分布式锁--排他锁

实现原理:思路:提供一把全局的锁,所有来购买的请求竞争这一把锁,谁先拿到这把锁,谁就有资格执行下单,没抢到锁的请求被挂起,等待有锁的请求完成下单后释放锁,然后唤醒被挂起的请求继续去竞争这把锁…可以把这把锁当做是zk上的一个节点,所有请求发起时,创建该节点,第一个创建该节点成功的请求就意味着获得了锁,其他请求创建都会抛出异常,然后捕获该异常,用全局的countDownLatch将该请求挂起,等获得锁的节点完成下单后,把该节点删除(释放锁),然后计数器-1,把挂起的线程都唤醒,继续去竞争该锁…注:实现中

2021-12-31 18:27:04 321

原创 zookeeper+zKClient客户端的API使用

简介:zkClient是一个开源的zookeeper客户端,内部针对zookeeper原生API进行了封装,让操作zookeeper更加的简单;同时zkClient内部还实现了诸如:Session超时重连;Warcher反复注册机制;导入依赖: <!--zKClient -zookeeperApi调用--> <dependency> <groupId>com.101tec</groupId>

2021-12-31 18:22:25 1014

原创 java基于RMI远程过程调用

简介Java RMI,即远程方法调用(Remote Method Invocation),一种用于实现远程过程调用(RPCRemote procedure call)的Java API, 能直接传输序列化后的Java对象。它的实现依赖于Java虚拟机,因 此它仅支持从一个JVM到另一个JVM的调用。服务端生成一个注册表,并绑定一个端口服务端将需要发布的服务接口,注册到注册表中启动服务等待消费者消费者根据服务端的IP和端口获取注册表消费者从注册表中根据名称获取想要提供服务的service接口消

2021-12-28 13:48:08 231

原创 Netty详解

介绍Netty是由JBoos提供的一个Java网络应用开源框架,它是一个异步的,基于事件驱动的网络应用框架,用于开发高性能,高可靠的网络IO程序Netty主要针对TCP协议下,面向客户端的高并发应用,或者在Peer0toPeer场景下的大量数据持续传输的应用。Netty本质上是一个NIO框架,适用于服务器通信相关的多种应用场景,使用Netty可以帮助我们快速,简单的开发出一个网络应用;Netty核心API介绍ChannelHandler及其实现类ChannelHandler接口定义了许多事件

2021-12-23 17:33:32 833

原创 Java中NIO编程

服务端代码package cn.hu.nio.selector;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.*;import java.nio.charset.StandardCharsets;import java.util.Iterator;/** * @Author: hu.chen * @Desc

2021-12-22 18:21:52 283

原创 nginx配置https

获取证书获取证书可以前往阿里云购买将证书还有私钥放置在指定目录,然后再nginx配置的时候会用到配置#进入以下目录/usr/local/nginx/conf#编辑vim nginx.conf在server中添加以下配置 #--------------https配置 start------------- #指定https端口的端口,并指定http协议 listen 443 ssl http2; #指定证书的路径 ss

2021-12-21 20:24:42 1259

原创 linux安装redis

下载软件包使用命令下载:wget http://download.redis.io/releases/redis-5.0.5.tar.gz解压:tar -xvf redis-5.0.5.tar.gz进入解压后的redis目录,对redis进行编译安装cd redis-5.0.5/makecd srcmake install修改配置文件cd /software/redis-5.0.5/vim redis.conf设置密码:奉劝大家一定要设置密码,我的服务器因为不

2021-12-17 20:07:54 1058

原创 Maven详细教程

为什么要使用Maven这样的项目构建工具一个项目就是一个工程a. 如果项目非常庞大,就不适合使用以包来划分模块,最好是每一个模块对应一个工程,利于分工协作。借助于maven就可以将一个项目拆分成多个工程项目中使用jar包,需要“复制”、“粘贴”项目的lib中a. 同样的jar包重复的出现在不同的项目工程中,你需要做不停的复制粘贴的重复工作。借助于maven,可以将jar包保存在“仓库”中,不管在哪个项目只要使用引用即可就行jar包需要的时候每次都要自己准备好或到官网下载a. 借助于maven我

2021-12-16 20:18:31 345

原创 Nginx配置一致性Hash

安装:1)下载Nginx一致性hash模块https://github.com/replay/ngx_http_consistent_hash 进入GitHub下载2)上传模块到Linux上传完成后将 zip文件进行解压3)给Nginx安装模块进入nginx-1.17.8目录执行命令:./configure --add-module=/software/ngx_http_consistent_hash-master注释:module=后面时下载解压的模块在服务器中的绝对路径;然后执

2021-12-14 18:26:29 4854

原创 自定义类加载器,加载磁盘中的Java文件

背景:最近在手写tomcat,在实现加载webapps下面的各个项目时,就涉及到需要加载磁盘上的class文件,这个时候就需要自定义类加载器来实现加载;直接上代码:这个类加载器代码你可以直接拷贝到 idea中使用package com.demo01.servlet;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.nio.ByteBuffer

2021-12-11 16:36:58 367

原创 Tomcat配置Https

前言:对于tomcat配置https还是挺简单的,首先你需要一个网站证书(里面包含了公钥和私钥),这个证书相当于钥匙,但是https证书是需要花钱买的,我们在练习模拟不需要花钱买,可以使用 jdk 提供的一个工具自己生成一个证书,哪有了证书其他的操作就一样啦;注意:谷歌浏览器对于这种免费的证书支持的不好,所以需要使用其他浏览器访问生成证书使用jdk中的keytool工具生成免费的密钥库文件(也就是证书)在tomcat/conf下命令行输入以下命令(证书生成后就会存放在tomcat/conf目录下

2021-12-09 17:50:44 4097

原创 构建tomcat源码环境

简介:最近想要深入了解tomcat,所以下载了tomcat的源码,并导入到idea中进行学习,在源码构建过程中还是遇到了一些坑,记录下来,给想要构建源码的小伙伴一个参考;开始:首先前往tomcat官网将源码包下载下来:https://tomcat.apache.org/download-80.cgi我们直接下载zip格式的就行,我的是mac系统,下载zip也可以将源码下载下来后,进行解压,解压后的apache-tomcat-8.5.50-src文件夹中目录结构再apache-tomcat-

2021-12-08 15:35:59 293

原创 tomcat中server.xml配置文件详解

<?xml version="1.0" encoding="UTF-8"?> <!-- Server 根元素,创建⼀个Server实例,⼦标签有 Listener、GlobalNamingResources、Service port:关闭服务器的监听端⼝ shutdown:关闭服务器的指令字符串--><Server port="8005" shutdown="SHUTDOWN"> <!-- 创建 5 个监听器 start --&gt

2021-12-06 19:41:28 602

原创 redis-->RedisTemplate的API

通用操作: /** * 判断key是否存在 * @param key 键 * @return true 存在 false不存在 */ public Boolean hasKey(String key) { return redisTemplate.hasKey(key); } /** * 设置有效时间 * * @param key Redis键 * @param time

2021-12-04 20:03:26 704

原创 多核cpu的缓存一致性

为什么要有缓存?再说到cpu的缓存一致性前提下,需要了解到为什么会有缓存:众所周知,cpu是用来计算和处理数据的,本身并不存储数据,数据都是放在内存或者硬盘中,而内存与cpu之间是存在距离的,如果说cpu目前要进行一次计算,那么就需要先从内存将数据取出再进行计算,而内存和cpu是存在速度差异的,在随着现代技术的发展,嵌入到cpu上的晶体管越来越多,那么就造成了cpu的计算和处理能力越来越强,这样就更加凸显了这个弊端,cpu在一次处理中更多的时间是在等待内存中的数据到来,这样的情况是我们人类是不能容忍的(

2021-12-03 17:19:05 1404 1

原创 Java嵌入式tomcat整合SpringMVC

前言:本文将介绍如何使用Java的方式启动tomcat,并整合Spring MVC,做到就像Springboot使用main方法启动,就可以访问controller资源的效果;首先导入依赖: <properties> <embed.tomcat.version>9.0.21</embed.tomcat.version> </properties> <dependencies> <dep

2021-12-02 12:12:48 1159

原创 分布式事务实现

事务配置环境准备:在读写分离的基础上进行事务的配置引入maven依赖:以下两种依赖选择一个就可以,如果想要强一致性就引入XA依赖,如果想要最终一致性就引入Base依赖 <!--Sharding-JDBC事务-XA模式(强一致性事务)--> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifa

2021-11-30 19:23:02 736

原创 解决跨域问题

简介:当前项目开发中,最常使用的就是前后端分离开发,所以不可避免的会遇到跨域资源访问的问题,本文将介绍 六种 解决跨域的方案:方法一:Spring项目(boot ,mvc)1、使用 @CrossOrigin注解Spring Boot 支持通过设置 CORS(跨源资源共享)来解决跨域请求问题。具体如下两个地方可以进行配置,我们选择一种即可。(1)在请求方法上配置我们可以直接在相应的请求方法上添加 @CrossOrigin 注解,那么该方法则支持跨域。@RestController publ

2021-11-29 19:25:32 2049

原创 远程调用--->RestTemplate

配置RestTemplate@Configurationpublic class RestTemplateConfing { @Bean public RestTemplate restTemplate() { RestTemplate restTemplate = new RestTemplate(); SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpReques

2021-11-27 16:45:20 240

原创 基于redis缓存清除思想设计出带超时时间的java+map集合

简介:最近公司的老项目,需要将一些经常用到的数据缓存起来,这样就不用每次使用都从数据库中查询,减小数据库访问压力,需要做到缓存的数据定时的将不常用的清理出去,但是这个项目没有使用redis等缓存中间件,所以就自己基于map实现一个带超时时间的map集合;这个集合参考了redis的缓存清除策略,采用懒删除的方式,将超时数据清理出集合实现package com.zeyu.util;import java.io.Serializable;import java.util.*;import java

2021-05-28 12:36:27 466

原创 Linux中安装Nginx

1) 下载安装包wget https://nginx.org/download/nginx-1.17.8.tar.gz2)安装C++环境因为Nginx是使用C++语言编写,所以Linux需要安装C++的环境:执行命令安装: yum install gcc-c++3)yum安装Nginx依赖安装Nginx依赖:pcre,openssl,gcc , zlib(使用yum源安装)执行命令:yum -y install zlib zlib-devel pcre-devel openssl op

2021-05-21 15:20:53 61

原创 SpringBoot上传文件时文件过大异常SizeLimitExceededException: the request was rejected because its size (11597069

这个错误时因为文件过大导致的上传错误,解决方案是在application.properties配置文件中指定,上传文件的大小#单个文件大小spring.servlet.multipart.max-file-size=150MB# 设置总上传的文件大小spring.servlet.multipart.max-request-size=200MB...

2021-05-21 15:06:31 1504

原创 SpringBoot项目打包方式修改成war包

首先在pom.xml中排除Tomcat依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion>

2021-05-12 10:39:15 615

原创 pagehelper 分页工具类的封装

现状:在使用Mybatis进行数据库分页查询时,我们经常使用的是插件:pagehelper 此插件可以帮助我们很方便的进行数据库分页操作,但是使用此插件每次都需要先开启插件,然后再手动的对参数进行封装,这些都是模板化的套路,有没有一种更简洁的方法,让我们不在关注具体的分页细节,只需要实现我们的业务逻辑呢?所以接下来我将使用Spring AOP技术,对该工具类进行封装,让我们可以更方便的进行分页操作;依赖:首先在项目中加入pagehelper 分页插件和AOP的依赖: <!-- pag

2021-05-08 13:08:23 2332

原创 Java虚拟机内存区详解

Java内存结构详解Java内存也称为运行时数据区,先来看一下Java内存结构图:1:程序计数器程序计数器是属于线程私有的,所占空间不大,每个线程一份,用来保存当前线程要执行的下一条指令的地址,在多线程中,线程的执行是轮流切换来获取CPU的执行时间的,因此任意时刻一个CPU内核只会执行一条线程中的指令,为了在线程切换后可以恢复到正确的执行位置,所以每个线程都需要独立的程序计数器2:Java虚拟机栈Java虚拟机栈是线程私有的,里面是一个个栈帧,每一个栈帧对应的是一个个方法,当线程执行一个方法是

2021-05-07 14:31:23 82

原创 HuTool工具最全介绍

简介:Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅;提供了Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件:模块介绍hutool-aopJDK动态代理封装,提供非IOC下的切面支持hutool-bloomFilter布隆过滤,提供一些Hash算法的布隆过滤hutool-cache简单缓存实现

2021-04-30 12:48:08 7593

原创 Spring常用注解-最全##

Spring常用注解-最全## 1、声明bean的注解@Component:泛指各种组件@Controller、@Service、@Repository都可以称为@Component@Controller:控制层@RestController :控制层@Service:业务层@Repository:数据访问层2、注入bean的注解@Autowired:由Spring提供@Qualifier(value = “guke1”) 和@Autowired(required = fa...

2021-04-30 11:21:46 111

原创 idea搭建ssm框架项目示例

SSM框架整合示例注意:在config文件的几个配置文件,需要注意替换成自己的项目路径:1:创建工程:工程创建好以后如图:只有一个webapp文件接下来创建Java文件夹和resource文件夹,在mein文件夹上右击,创建文件夹我这边直接就有这两个文件夹的创建提示,并且自动修改了文件夹的属性:如果没有提示,就需要手动创建两个普通文件夹,然后修改对应的文件夹属性:Java文件夹修改成Sources Root,resource文件夹修改成Resources Root属性到这里项

2020-12-08 15:31:49 794

空空如也

空空如也

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

TA关注的人

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