自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 问答 (2)
  • 收藏
  • 关注

原创 【并发编程原理】一、缓存行以及MESI协议

1. 缓存行的概念1.1 CPU的缓存机制我们都知道在现代计算机的架构中,CPU负责执行命令,主存负责存储运行时所需的数据。由于CPU执行命令的效率要远高于主存对数据的读写效率。所以如果让CPU直接从主存中读写数据,会造成CPU因为等待主存完成数据读写而大量空转。为了解决这个问题,现代CPU引入了多级缓存机制(L1,L2,L3…)。我们以写数据举例,在此机制下,CPU不再直接往主存里写数据,而是往离它最近且读写性能最强的L1缓存里写数据。随后再由其他的控制单元负责将这些数据一级一级的转存,直到最后写进

2021-03-01 00:54:55 250 1

原创 【JVM】三、对象的存储策略(栈上分配和TLAB)

一、内存分配流程我们都知道对象是存储在堆里的,但对象是不是只能存储在堆里呢?答案是否定的,事实上JVM在new一个对象的时候,有一套专门的存储策略来决定这个对象应该被放在哪。简单点说,在JVM里,对象不仅仅会被存储在堆里,也可能被存储在栈上。这里先直接给一个流程图,来简单直观的说明JVM分配对象时的具体策略:然后我们再以下面的代码为例,结合流程图,逐步的来探讨JVM在创建Person对象的时候都有哪些操作。public void test(){ Person p = new Person(

2021-02-24 23:17:48 406

原创 【JVM】二、类加载过程

目录1. 简述2. 加载(Loading)1. 简述JVM讲一个class文件加载内存,然后进行验证、准备、解析(这三步也可以合称为链接)及初始化的完整过程称为类加载过程。这个过程种,各步骤的顺序是确定的:在Java虚拟机规范中,没有强制约束什么时候要开始类的加载。但是严格规定了几种情况是必须进行类的初始化的(加载和链接需要在初始化之前开始):1)遇到 new、getstatic、putstatic、或者invokestatic 这4条字节码指令,如果没有类没有进行过初始化,则触发初始化2)使用

2021-02-21 23:27:56 170 1

原创 【JVM】一、JVM运行时数据区

目录1. 运行时数据区(Run-Time Data Areas)1. 运行时数据区(Run-Time Data Areas)根据Oracle提供的JVM官方文档《Java Virtual Machine Specification 8 Edition》,JVM的在运行时,其内存数据有以下几个分区:程序计算器(The Program Counter Register)Java虚拟机栈(Java Virtual Machine Stacks)堆(Heap)方法区(Method Area)运行时常

2021-02-16 01:39:54 312 1

原创 【JAVA】【多线程】一、线程的生命周期

线程的生命周期学一个东西肯定得先了解它的生命周期,也就是状态的变化。Java中,线程大概有这5个状态:新建(new):使用new操作符新建的线程就绪(runnable):线程在等待调度以获得CPU执行时就处于该状态。比如一个new出来的线程被调用start方法。此外,阻塞态的线程也会因为以下原因被恢复为就绪态:① 调用sleep()方法的线程经过了指定时间。② 线程调用的阻塞式IO方法已经返回。③ 线程成功地获得了试图取得的同步监视器。④ 线程正在等待某个通知时,其他线程发出了个通知。

2020-11-29 13:14:54 119

原创 【LeetCode】 #3-无重复字符的最长子串-解题笔记(移动窗口)

题目:无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重...

2020-05-07 00:06:57 174

原创 【JVM】Volatile变量的使用

在涉及到并发编程时,我们比较习惯用锁(synchronized)来做线程安全的保障,但其实有些时候我们可以使用Java提供的另一个同步机制vloatile来代替synchronizeVolatile的含义关键字volatile可以说是Java中最轻量级的同步机制,它的语义可以概括性的叙述为:“保证由volatile修饰的变量,发生任何修改都是对所有线程可见的”。这里的“可见”是指,当某一线程修...

2020-03-03 00:19:31 248

原创 部署常用命令

Nginxnginx -s stop #停止nginxnginx # 启动nginxSpringBootjava -jar xxx.jar --spring.profiles.active=prd #以生产模式启动SpringBoot应用 Shellscp source.txt user_name@ip_address:/xx/xx/target.txt # mac用scp命令上...

2020-02-05 18:11:01 178

原创 nginx配置vue+springBoot

server { # 需要被监听的端口号,前提是此端口号没有被占用,否则在重启 Nginx 时会报错 listen 8888; # 服务名称,无所谓 server_name localhost; # 上述端口指向的根目录 root /opt/asing1elife/teamnote; # 项目根目录中指向项目首页 in...

2020-02-05 17:50:42 551

原创 Centos7安装Nginx

1. 安装依赖软件1.1 安装gcc通常阿里云提供的Centos中是包含了gcc的,可以使用以下命令来确认本机是否安装了gccgcc -v没有安装的话,使用以下命令安装即可(如若本机连yum都没有,可以百度相关安装方法)yum -y install gcc1.2 安装pcre、pcre-develpcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使...

2020-02-05 16:01:46 113

原创 【LeetCode】解题笔记-两数相加

题目:两数相加题目地址:https://leetcode-cn.com/problems/add-two-numbers/给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。难度:中等...

2020-01-08 22:45:49 144

原创 【笔记】Git-新项目使用git上传到github

由于是笔记,仅仅是想提醒一下我如何操作,就不记录那么详细了在GitHub上新建一个代码仓库(Repository),并且拷贝其git地址(此次前提是操作的主机已经把SSH公钥加入到GitHub的账号中)commit本地的代码给本地代码仓库设置一个远程仓库地址,我使用的是idea,通过右键项目->Git->Repository->Remotes中添加刚刚copy的Git...

2019-12-08 23:58:05 148

原创 通过Docker部署SpringBoot项目

用这篇文章记录一下自己第一次成功使用Docker运行起了自己的SpringBoot项目1. 使用maven将SpringBoot项目打包成jar包首先肯定是编写一个能成功启动的SpringBoot项目了,我用的是我自己写的一个博客后台项目。其次是使用Maven将SpringBoot项目打包成一个Jar包,如果你和我一样使用的idea,这一步可以通过idea的maven窗口来完成生成...

2019-12-07 15:52:05 175

原创 【深入Tomcat】(二)Tomcat架构

本章准备讲述一下Tomcat的核心架构。首先会叙述一下Tomcat的模块,随后挑选Tomcat所有模块中最核心的部分-Servle容器Catalina的架构来着重描述。主要是描述Catalina中各组件的作用,最后会简单说一下Tomcat中,一个请求从被接受直到最后被某一个Servlet的实现处理,中间经过了怎样一个“漫长”的旅程。Tomcat模块划分我们都知道Tomcat是应用服务器,而...

2019-11-24 17:06:42 275

原创 【SpringBoot】log4j2配置文件模板

<?xml version="1.0" encoding="UTF-8"?><!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --><!--Configuration后面的status,这个用于设置**log4j2自身内部**...

2019-11-20 14:42:34 434

转载 SpringBoot启用devtools热更新

spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。devtools的原理深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoa...

2019-11-17 22:32:00 454

原创 【深入Tomcat】(一)Tomcat简介

截止2019/10/13,Tomcat依然还在提供维护的版本是9.0、8.5、7.0而另一个近几年才退出的Tomcat8.0版本已经不再提供维护,Tomcat官方推荐的是用8.5来替代它。那么这三个Tomcat依然还在提供更新的版本各有什么不同呢?Tomcat版本Servlet 版本JSP版本EL表达式版本WebSocket版本Java版本9.0.x4.0...

2019-10-15 23:02:49 2512

原创 【SpringBoot】线程池使用技巧

Spring对多线程提供了非常好的封装,使用起来比较方便,但还是有一些需要注意的地方,这里记录一下自己之前使用Spring的线程池进行开发时遇到的一些问题以及相关的使用技巧。如何使用Spring线程池在SpringBoot中你需要使用@EnableAsync来启用Spring框架内置的线程池,这个注解可以加在你的Application类上,也可以放在一个标注有@Configuration的配置...

2019-10-10 01:00:22 399

原创 Java开发中的一些编码习惯总结

1. BaseDTO可以提供静态方法success和failed来提供不同处理结果的静态构造方法。2. list方法表示dao和service层中返回列表的方法,get为返回单个对象,save存储,update更新,remove删除3. Controller层应该尽量用对象去封装请求参数,如果多个方法间无法很好的复用对象,或者方法的实际含义差异较大,则不妨为这些或这个方法单独实现一个实体类...

2019-07-28 01:49:47 352

原创 【SpringBoot】Spring Validation 分组校验

Spring自己有提供对Validation的支持,具体使用方法参见:https://blog.csdn.net/mzh_cn/article/details/80637015这篇文章主要用于记录Spring Validation的分组校验。在实际开发中,难免遇到对一个实体类的一些属性,不同的请求会有不同的校验规则的场景,比如:用户注册时,User类的id需校验为空,因为Us...

2019-07-26 22:39:40 7904

原创 [RabbitMQ] 消息确认模式在SpringBoot中的使用

RabbitMQ有两种消息确认模式: ① 消息发送确认 ② 消息消费确认首先说一下消息发送确认模式:消息确认模式也可以细分为两种:第一种publisher-confirms模式,该模式只关心消息有没有被传递到指定Exchang,而不关心消息有没有被路由到queues 第二种publisher-returns模式,该模式会在消息没有被路由到queues时将消息返回...

2019-06-23 17:24:02 2114

原创 阿里云安装mysql

本文并非原创,是博主根据他人分享编辑而来。原贴:https://blog.csdn.net/itxiaolong3/article/details/77905923第一步:安装数据库:sudo apt-get install mysql-serversudo apt install mysql-clientsudo apt install libmysqlclient-dev如果...

2019-05-22 12:43:21 134

空空如也

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

TA关注的人

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