自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java IO(非常详细)

注:本篇文章部分图片可能来源网络,侵删。关于IO会涉及到阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO等几个知识点。知识点虽然不难但平常经常容易搞混,特此Mark下,与君共勉。文章目录1、同步IO1.1 阻塞IO1.2 非阻塞IO1.3 IO多路复用(!)1.3.1 select1.3.2 poll1.3.3 epoll2、异步IO3、Java IO3.1 BIO3.2 NIO3.3 AIO1、同步IO1.1 阻塞IO如图所示,阻塞式IO情况下,当系统调用read.

2021-09-24 09:30:12 9166 5

原创 JVM调优

调优JVM其实就是在【理解JVM内存结构】以及各种【垃圾收集器】的前提下,结合自己的业务来【调整参数】,使自己的应用能够正常稳定的运行。JVM调优的三大指标参考:吞吐量停顿时间垃圾回收频率停顿时间:让整个程序停止一些事务的处理基于这些指标,我们可以调整:内存区域大小以及相关策略,比如调整堆内存占多少,新生代占多少,老年代占多少,Survivor占多少等等。可以通过参数调整:一般来说,对于【IO密集型】可以将【年轻代】空间加大些,因为大多数对象都是在年轻代灭亡。【CPU密集型】

2021-09-17 09:01:07 271

原创 常见的限流算法

文章目录1、计数器2、漏桶3、令牌桶2.1 网关层限流降级熔断为什么要限流?后台服务能力优先,如果不进行限流的话,仍有全部流量打到服务器上,可能会引起服务器瘫痪。当我们进入网站,网站显示”系统繁忙,请稍后再试“时,就是在进行限流。可以根据性能测试区评估限流的设置,例如测试最大连接数,QPS数。说明,这些算法实际上并不是1、计数器计数器限流方式比较粗暴,一次访问设置一次计数,在系统内设置每秒的访问量,超过访问量的访问直接丢弃,实现访问限流.比如可以使用redis进行1S的100次访问计数,

2021-09-16 21:25:49 1320 2

原创 Redis缓存击穿、缓存穿透、缓存雪崩及其解决方法

简单记录了一些关于缓存击穿、雪崩、穿透的概念及解决方案。文章目录缓存击穿概念处理方法缓存雪崩概念解决方法缓存击穿概念解决方法缓存击穿概念缓存击穿是指查询一个不存在的数据,由于缓存没有命中,所以每次都需要去数据库中查询,查不到数据则不写入缓存。这样将导致每次都需要去数据库中查询数据,如果请求量多的话,会给数据库带来很大压力。通俗的说,就是读请求访问时,缓存和数据库都某个值,这样就会导致每次对这个值的查询请求都会穿透到数据库,这就是缓存穿透。处理方法对于非法请求,可以在API入口,对参数.

2021-09-09 20:31:57 177

原创 G1收集器详解

CMS垃圾收集器的弊端:会产生内存碎片 && 需要预留空间。这两个问题在处理时,很有可能会导致停顿时间过长,即CMS的停顿时间不可预知。所以G1又可以理解为在CMS垃圾收集器上进行了"升级"。G1垃圾收集器可以给你设定一个你希望Stop the world停顿时间,G1会根据这个时间尽量满足你。在JVM堆中,堆的内存分布是以物理空间进行隔离——但是在G1垃圾收集器中,堆的划分不再是物理形式,而是以逻辑的形式进行划分。但是,分代的概念在G1中依旧奏效,比如,新对象一般会被分配.

2021-08-23 17:58:06 2083

原创 CMS垃圾收集器详解

文章目录GC步骤初始标记并发标记并发预处理重新标记并发清除CMS的缺点垃圾收集器分为年轻代和老年代。CMS全程为Concurrent Mark Sweep,即并发标记清除,对比以上的收集器,最大的区别在于并发:在GC线程工作的时候,用户线程不会完全停止,用户线程在部分场景下与GC线程一起并发执行。但是,无论是什么垃圾收集器,Stop the world是一定无法避免的。CMS只是在部分的GC场景下可以让GC线程与用户线程并发执行。CMS的涉及目的是为了避免【老年代GC】出现长时间的卡顿(stop

2021-08-23 15:13:13 3240

原创 RabbitMQ消息队列常见面试题

文章目录一、什么是消息队列1.1 消息队列的优点1.2 消息队列的缺点1.3 消息队列的选型二、RabbitMQ 构造三、如何保证消息不被重复消费四、如何保证消息不丢失,进行可靠传输?4.1 生产者丢数据4.2 消息队列丢数据4.3 消费者丢数据五、如何保证消息的有序性六、如何保证消息队列的高可用6.1、单机模式6.2、普通集群模式6.3、镜像集群模式一、什么是消息队列1.1 消息队列的优点解耦:将系统按照不同的业务功能拆分,消息生产者只管把消息发布到MQ中而不用管是谁来取,消息消费者

2021-08-22 20:33:47 676

原创 Springboot中@Pathvariable的作用

URL变量在Web应用中URL通常不是一成不变的,例如微博两个不同用户的个人主页对应两个不同的URL:http://weibo.com/user1,http://weibo.com/user2。我们不能对于每一个用户都编写一个被@RequestMapping注解的方法来处理其请求,也就是说,对于相同模式的URL(例如不同用户的主页,它们仅仅是URL中的某一部分不同,为他们各自的用户名,我们说它们具有相同的模式)。定义URL变量规则可以在@RequestMapping注解中用{}来表明它的变量部分,例如

2021-08-21 15:30:55 740

原创 RabbitMQ生产者生产消息报错Connection timed out: connect

在确认设置参数没有问题后,在网上查看了类似文章,才发现是RabbitMQ的5672端口没有开[root@master rabbitmq-server-3.8.19]# firewall-cmd --list-ports80/tcp 15672/tcp[root@master rabbitmq-server-3.8.19]# firewall-cmd --zone=public --add-port=5672/tcp --permanentsuccess[root@master rabbitmq-s

2021-07-20 21:23:54 739 1

原创 Cenos环境下RabbitMQ的安装

1、安装依赖环境yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz2、安装Erlangrpm -ivh erlang-23.3.4.3-1.el8.x86_64.rpm说明gblic版本太低,我们可以查看当前机器的gblic[root@master RabbitMQ]# strings

2021-07-20 10:28:53 102

原创 Linux下配置好nginx浏览器无法访问

在将前端项目部署到nginx后,浏览器一直无法访问,再尝试了n遍后,终于发现了原因,是虚拟机没有放行nginx默认断后造成的解决方法:关闭防火墙service iptables stop放行80端口/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT使其生效/etc/rc.d/init.d/iptables save...

2021-06-08 14:32:35 1035

原创 Linux环境下启动tomcat后无法使用浏览器访问

在启动tomcat后,一直无法通过浏览器访问其页面,在多番尝试后,终于通过如下方法成功了——linux服务器要被外界访问需要关闭服务器的防火墙systemctl stop firewalld配置防火墙信息vim /etc/sysconfig/iptables添加tomcat访问端口重启防火墙service iptables restart访问成功——...

2021-06-07 22:40:26 353

原创 Mybatis执行流程

Mybatis执行流程图

2021-06-01 18:05:32 103

原创 使用注解对mybatis的简单使用

文章目录使用注解开发使用注解完成CRUD使用注解开发本质:反射机制实现底层:动态代理1、注解在接口上的实现public interface UserMapper { @Select("select * from user") List<User> getUsers();}2、使用注解时,需要在核心配置文件中绑定接口 <mappers> <mapper class="com.xiao.dao.UserMapper"/>

2021-06-01 17:51:49 97 2

原创 MyBatisResultMap结果集映射

解决属性名和字段名不一致的问题:DAO接口public interface UserMapper { //根据ID查询用户 User getUserById(int id); //返回值 取名(传递参数)}xml配置文件<mapper namespace="com.xiao.dao.UserMapper"> <!--根据id查询结果,parameterType参数类型--> <select id="getUserById

2021-06-01 12:04:02 148 1

原创 (五)MyBatis日志实现

SLF4JLOG4J【掌握】LOG4J2JDK_LOGGINGCOMMONS_LOGGINGSTDOUT_LOGGING【掌握】NO_LOGGING相关设置在mybatis-config.xml中的顺序标准日志工厂 <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>Log4j通过使用Log4j,我们可以控制日志信息输..

2021-06-01 10:27:11 367

原创 Springboot自动装配原理

自动装配pom.xmlspring-boot-dependencies:核心依赖在父亲工程中<parent> <artifactId>spring-boot-starter-parent</artifactId> <groupId>org.springframework.boot</groupId> <version>2.4.5</version> </

2021-04-23 11:18:18 72

原创 第一个SpringBoot程序

打开IDEA,创建第一个SpringBoot项目可以使用官网的地址,也可以使用Aliyun的地址。项目创建成功后,编写一个测试类。package com.example.springboot01.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web

2021-04-23 09:38:53 73

原创 线程池

背景:经常创建和销毁、使用量比较大的资源,比如并发情况下的线程,对性能影响很大。思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完后放回池中。可以避免频繁创建销毁、实现重复利用。线程池能够提高响应时间,减少创建新线程的时间;降低资源消耗;便于进程管理。JDK 5.0起提供了线程池的相关API:ExecutorService和ExecutorsExecutorService:真正的线程池接口。常见子类ThreadPoolExecutorvoid execute(Runnable c.

2021-04-18 15:40:50 57

原创 线程同步

由于同一进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问冲突问题,为了保证数据在方法中被访问时的正确性,在访问时加入了锁机制synchronized,当一个线程获得对象的排他锁,独占资源,其他资源必须等待,使用后释放锁即可,存在下列问题:一个线程持有锁会导致其他所有需要此锁的线程挂起;在多线程竞争下,加锁,释放锁会导致比较多的上下文切换和调度延时,引起性能问题;如果一个优先级高的线程等到一个优先级低的线程释放锁,会导致优先级倒置,引起性能问题。典型的以性能换安全。...

2021-04-18 15:18:19 230 5

原创 线程状态

文章目录线程停止线程休眠线程礼让线程停止package ThreadState;//线程的停止//1、建议线程正常停止-->利用次数//2、建议使用标志位-->设置一个标志位//3、不要使用stop或者destory等过时或者JDK不建议使用的方法public class ThreadStop implements Runnable{ //1、设置标志位 private boolean flag = true; @Override public

2021-04-17 21:07:59 53

原创 Java多线程--Thread类实现方式

文章目录Thread实例——图片下载Thread自定义线程类继承thread类重写run()方法创建线程对象,调用start()方法启动线程package Thread;//创建线程方式一:继承thread类,然后重写run()方法,调用start执行public class Thread01 extends Thread{ @Override public void run() { //run方法线程体 for (int i = 0; i

2021-04-17 10:10:15 332

原创 搭建vue-cli脚手架后如何运行项目

在搭建完成vue-cli脚手架后(网上的教程很多,可以参考这篇文章→戳我)在项目文件下,使用命令npm run dev,其中的“run”对应的是package.json文件中,scripts字段中的dev,也就是 node build/dev-server.js命令的一个快捷方式。运行成功后即可访问项目。...

2021-04-14 17:25:31 829

原创 Vue基本语法

前缀带有v-,表示他们是vue提供的特殊指令,他们会渲染在DOM上应用特殊的响应式行为。绑定元素特性v-bind<!--视图(view)层--><div id="app"> {{message}} <!--绑定信息--> <span v-bind:title="message"> 鼠标悬浮在我这可以看到message动态绑定的信息 </span></div>判断、循

2021-04-12 15:12:18 98

原创 第一个Vue程序和MVVM模式

官网指路开发工具:IDEA 2020.1关于MVVM模式可以看看这篇文章——博客第一个Vue程序<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>第一个vue项目</title></head><body><!--第一步,导入vue.js--><script src="http

2021-04-12 09:34:55 58

原创 Linux环境下执行sql文件

将.sql文件导入到Linux环境下。mysql -u root -p登录MySQL。source 文件地址

2021-04-08 09:14:23 229

原创 虚拟机环境配置安装Hive3

Hive 安装GettingStartedManual1.安装及配置 Hive(1)把 Hive 的安装包 apache-hive-3.1.2-bin.tar.gz 上传到 Linux 虚拟机的/opt/download目录下, 解压$ wget https://mirrors.bfsu.edu.cn/apache/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz$ tar -zxvf apache-hive-3.1.2-bin.tar.gz(2)将解

2021-03-31 11:07:43 1838

原创 虚拟机Linux环境下安装Zookeeper

Kafka安装和配置1、下载和安装下载,解压,配置环境变量就不多说了,和其他框架都大致一样,版本选择3.142、单机单服务zoo.cfgtickTime=2000initLimit=10syncLimit=5dataDir=/opt/tmp/zk-1dataLogDir=/opt/tmp/zk-log13、单机多服务三个配置文件zoo-1.cfg、zoo-2.cfg、zoo-3.cfgtickTime=2000initLimit=10syncLimit=5dataDir=/

2021-03-31 11:00:38 182

原创 Linux环境下安装MySQL

Centos7的MySQL安装卸载mariaDbmysql被oracle收购后为了防止mysql有可能变成闭源,因此mysql创始人maria就开源做了一个mariaDb, centos7是自带使用了这个数据库的.因此安装mysql之前,应当首先卸载mariadb数据库:$ sudo yum list installed | grep mariadb #检查mariadb是否已安装$ sudo yum list installed | grep mariadbmariadb-libs.x8

2021-03-31 10:51:50 141

原创 Hbase

如果使用Hive3,建议配合Hbase2使用,如HBase2.2.3。我下载的是2.3.4版本。1、解压[hadoop@hadoop100 hbase-1.2.4]$ tar -zxvf hbase-2.3.4-bin.tar.gz -C /opt/pkg/2、环境变量[hadoop@hadoop100 hbase-1.2.4]$ sudo vim /etc/profile.d/env.sh # JAVA_HOMEexport JAVA_HOME=/opt/pkg/jdk1.8.0_261

2021-03-31 10:21:15 255

原创 安装Hadoop

Hadoop的单机安装1、准备工作(1)主机名映射# vi /etc/hosts#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.220.129 master注意:宿主的WIndows系统也要一样配置hadoo

2021-03-31 10:15:08 229

原创 安装Centos系统

安装Centos71、下载网易、阿里、搜狐等公司都有开源镜像站提供CentOS7的镜像文件下载,以阿里云镜像站为例:Index of /centos/7/isos/x86_64/下载最小化安装版本 CentOS-7-x86_64-Minimal-2009.iso2、配置虚拟机软件这里使用VmwareStation15.5为了方便,采用NAT连接方式,NAT模式的虚拟网卡名称默认为VMnet8为了统一网段,修改虚拟机网络编辑器配置如下,将第三段修改为186网关也要对应修改3、创建虚拟

2021-03-31 09:30:15 292 1

原创 Sqoop环境搭建

SQOOP安装配置1、下载和安装(1)下载 http://archive.apache.org/dist/sqoop/1.4.7/wget http://archive.apache.org/dist/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz(2)上传sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz到/tools目录下(3)解压安装, 改名tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.

2021-03-31 09:19:24 185

原创 Flume的安装与配置

安装下载下载地址一下载地址二下载方式三:wget http://archive.apache.org/dist/flume/stable/apache-flume-1.9.0-bin.tar.gz这里使用最新的 apache-flume-1.9.0版本解压安装tar zxvf apache-flume-1.9.0-bin.tar.gz -C /opt/pkg/改目录名他人mv apache-flume-1.9.0-bin/ flume配置环境变量,并让环境变量生效v

2021-03-31 09:15:41 218 1

原创 Linux环境下Nginx的安装

此篇博客大部分来源于此篇博客,结合了自己的实际操作,写了一篇,方便日后使用。1、下载安装包戳我下载2、安装nginx所需的环境配置2.1、安装gccyum install gcc-c++2.2、安装PCRE pcre-develNginx的Rewrite模块和HTTP核心模块会使用到PCRE正则表达式语法。这里需要安装两个安装包pcre和pcre-devel。第一个安装包提供编译版本的库,而第二个提供开发阶段的头文件和编译项目的源代码。安装指令如下:yum install -y pcr.

2021-03-31 08:54:35 63 1

原创 Xshell连接虚拟机后输入指令“Command not found“问题

今天在使用Xshell的时候,不管输入什么指令,都提示指令未找到后来查看环境变量才发现变量少了"$"唉。。。。还是粗心了。

2021-03-28 09:36:19 2834 6

原创 一、简介

文章目录一、什么是MVC二、回顾Servlet一、什么是MVCMVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。是将业务逻辑、数据、显示分离的方法来组织代码。 MVC主要作用是降低了视图与业务逻辑间的双向耦合。MVC不是一种设计模式,MVC是一种架构模式。不同的MVC存在差异。Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value

2021-03-11 08:48:20 93 1

转载 关于Java中DAO层、Service层、Controller层的理解

DAO层:DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做原子操作,增删改查。Service层:Service层叫服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事物控制。Controler层:Controler负责请求转发,接受页面过来的参数,传给S

2021-03-02 15:50:20 877

原创 (十)AOP

什么是AOPAOP意为:面向切面编程,通过预编译方式和运行期动态代理实现的程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生泛型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高开发效率。使用Spring实现AOP先导入依赖包: <dependency> <groupId>org.aspectj&

2021-03-02 15:35:36 79

原创 (九)代理模式

Spring的两大核心是IOC、AOP,之前所记的几乎都是IOC部分,从此篇开始进入AOP部分,想弄清楚AOP,必须先弄清楚代理模式。静态代理角色分析:抽象角色:一般使用接口或抽象类来实现真实角色:被代理的角色代理角色:代理真实角色,代理真实角色后,一般会添加一些附属操作客户:访问代理对象的人一个简单的例子:租房接口抽象角色:package com.xiao.demo1;//租房public interface Rent { public void rent();

2021-03-01 11:16:34 309

空空如也

空空如也

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

TA关注的人

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