自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(146)
  • 资源 (1)
  • 收藏
  • 关注

原创 注解搞不懂?这篇文章来帮你

概念在很多框架(Spring ,MyBatis 等等)和平时重写方法(@Override)都会出现注解。那么注解是什么呢?看一下百度百科。从 JDK5 开始,Java 增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。从百度百科中,我们得出几条信息JDK 1.5 之后的特性代码中的特殊标记,在各种情况下可以被读取并进行

2020-06-25 16:07:34 290 2

原创 阿里云服务器和 hexo 博客实战

疫情在家,突然看到了阿里云推出了大学生在家实践计划(是心动的感觉)。刚好看到别人分享的如何用阿里云建立了个人博客。所以实践了以下,这里做个教程给自己来个不时之需。整个建立过程涉及到 hexo,nginx,node.js,Linux ,ssh ,git 等操作介绍Hexo它是 node.js 制作的一个博客工具。它能够完成生成静态页面加上传的功能。点击 hexo 官网,你可以看到更多介绍和信息 。Hexo 只需要在本地安装即可,不需要在服务器上面安装。我们只需在本地编写 Markdown 文章。通过

2020-05-16 16:54:19 1856 1

原创 块级元素和行内元素,行内块元素

在学习 CSS 的时候发现,发现有些标签会独占一行,典型的例如 <div> 标签。而某些不会独占一行,典型如 <span> 标签。其实这是因为 CSS 的标签是有区分元素类型的。元素分类行内元素又称为内联元素,行内元素的大小是靠本身内容的大小,宽高都设置无效。常见的特点如下:与其他行内元素并排设置宽高无效默认的宽度就是文本内容的宽度水平方向的 paddin...

2020-02-01 21:03:56 10639 1

原创 Docker 安装和常用指令

目录名词概念Docker 安装Centos 安装测试 Hello World卸载 Docker :常用命令帮助命令镜像命令列出镜像列表搜索镜像下载镜像删除镜像创建镜像容器命令启动容器列出所有运行中的容器启动已经停止的容器后台运行一个容器停止一个容器重启容器进入容器删除容器查看日志查看容器中进程信息查看镜像的元数据名词概念镜像:Docker 的镜像,就好比我们 Java 中的类一样,通过类我们可以创建多个对象。也可以想,重装系统的时候,我们往往需要一个 Windows 镜像或 Linux 系统镜像,这时

2020-10-23 23:35:40 258

原创 Spring Boot 之 Hello World

Spring Boot什么是 Spring Boot ?官网是这样概述的Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.We take an opinionated view of the Spring platform and third-party libraries so you can get started

2020-08-23 22:49:04 229

原创 Redis 缓存穿透和雪崩的概念介绍

Redis 缓存穿透和雪崩的概念缓存穿透缓存穿透的概念其实很简单,我们经常使用 Redis 作为缓存数据库,如果用户相插叙一个数据,但是发现 Redis 没用这条数据,也就是没有命中 Redis 数据库中的数据,于是就到数据库中查询。上述看起来很正常,没有什么问题,但是如果很多的用户出现额时候,缓存都没有命中(比如淘宝秒杀),于是都请求数据库,这给数据库造成很大压力,这也就是缓存穿透。解决方案场景的有布隆过滤器布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先进

2020-08-18 23:37:36 327

原创 DOM 对象

每个载入浏览器的 HTML 文档都会成为Document 对象。就是把HTML文档模型化,当作对象来处理JavaScript 能够改变页面中的所有 HTML 元素JavaScript 能够改变页面中的所有 HTML 属性Document 对象属性srcdocument.getElement("").src;得是文件,不能诸如 div 这种标签,比如 img 标签titleclassName 获取或设置类名href 获取或设置链接地址value获取节点DOM获取节点分为两

2020-08-17 23:41:18 180

原创 Redis 的持久化 RDB和 AOF

Redis 持久化Redis 是内存数据库,我们也知道内存中的数据在电脑关闭的时候会丢失,所以需要把数据保存到磁盘中,也叫做持久化,预防服务器进程的突然中断或退出。Redis 提供了两种持久化方式,分别是 RDB 和 AOF。RDB( Redis DataBase )在指定的时间间隔内,将内存中的数据集快照写入磁盘。也就是行话讲的 Snapshot(快照),它恢复时,是将快照文件直接读取到内存里。Redis 会单独创建(fork)出一个子进程进行持久化,会将数据先写入到临时文件中,待持久化过程都结

2020-08-15 10:06:29 224

原创 Redis 的主从复制和哨兵模式

目录Redis 主从复制作用怎么玩?步骤修改配置文件启动读写扩展情况如果主机断了会怎样?薪火相传反客为主**复制原理**哨兵模式作用怎么玩?优点缺点配置文件解释Redis 主从复制也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的 master/slaver 机制。数据的复制是单向的,只能由主节点到从节点。并且,默认情况下,Master 以写为主,Slave 以读为主。并且默认的每台 Redis 服务器都是主节点。一个主节点可以有多个从节点(甚至没用),但是一个从节点只能由一

2020-08-13 23:48:52 714

原创 如何去玩 Redis 的事务?

事务概念:可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞。一个队列中,一次性、顺序性、排他性的执行一系列命令在 MySQL 中,事务有着四大特性,ACID,分别是原子性(Atomicity),一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。注意:Redis 单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

2020-08-11 21:01:36 127

原创 Redis 你可能不知道的三种数据类型

Redis 的三种特殊数据类型大多数时候,我们只知道 Redis 的五大数据结构,很多人也可能只知道这五个,而忽略了,其实 Redis 还提供了另外的三种特殊的类型,可以用在一些特殊的场景,在以后遇到这些场景的时,也可以多一种思路。目录Redis 的三种特殊数据类型GEO添加地理位置获取指定的城市的经度和纬度!查看附近的城市两个城市的距离返回字符串删除Hyperloglog创建统计合并Bitmap添加统计总结GEO 命令Hyperloglog 命令Bitmap 命令另外GEO概述:主要用于存储地理位

2020-08-10 20:39:23 167

原创 js 的几大对象

Number 对象方法isNaN(); 判断该变量是否为数值类型parseInt()/parseFloat(); 转换单位toExponential(); 指数计数法toFixed(); 固定计数法toPrecision(); 精度 智能判断toString(); 转化为字符串valueOf(); 显示它的原始值属性prototype 原型链当中得共享属性constructor 获得构造器MAX_VALUEMIN_VALUE1String 对象属性length;

2020-08-09 23:49:26 280

原创 Redis 发布订阅命令

Redis 发布订阅Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。上图从网上借鉴其中发送者通过 PUBLISH 命令发送给频道 channel1 ,然后消息就会被他的三个订阅者收到。实例发送消息Redis 的发送者采用 PUBLISH 命令发送消息,其返回值为接收到该消息的订阅者的数量。> publish channel1 "hello 1"(integer) 1>

2020-08-08 14:56:42 759

原创 Redis 五种数据类型和 key 命令食用指南

Redis 的五种基本数据结构Redis 有五种基本数据结构,分别是 String(字符串)、list(列表)、hash(字典)、set(集合)、zset(有序集合)。目录1 ) Key 键常用命令是否存在(exists)移动 move定时 expire查看过期时间查看类型 type重命名键 rename删除 del2 )String 字符串设置批量设置(获取)键值对定时set 扩展计数返回原值的3 )列表插入获取移除4 )hash 字典设置和获取存在长度删除其他5 )集合 set设置和获取长度移除数学

2020-08-07 23:44:18 215

原创 Redis 安装

Redis 安装目录Redis 安装一 下载二 解压三 安装四 修改配置文件五 启动服务一 下载到官网下载 redis-x.x.x.tar.gz 之后放入 Linux 的 /opt 下二 解压在 /opt 下,解压tar -zxvf redis-x.x.x.tar.gz解压后的文件夹:三 安装进入解压后的文件夹cd redis-x.x.x在该目录下只需 make 命令。完成继续执行一条命令make install注意:GCC 编译器没有:可能是

2020-08-06 19:14:10 240

原创 Linux 环境下如何安装 JAVA EE 环境?

Linux 环境安装 JAVA EE 环境安装 JDK下载JDK,进入官网将 jdk 放入到 opt 目录后解压tar -zxvf jdk-linux-x64.tar.gz 查看解压后的 jdk 目录结构配置环境变量,/etc/profile 文件就是环境变量的配置文件将 jdk 的安装目录配置到 JAVA_HOME 变量JAVA_HOME=/opt/jdk1.8.0_131将 jdk 的 bin 目录配置到 path 变量PATH=/opt/jdk1.8.0_13

2020-08-05 23:09:48 272

原创 CIDR 无类型域间选路

CIDR 无类型域间选路打破原来几类地址设计的做法,将32位IP地址一分二,前者网络号,后者主机号。如何分呢?例子10.100.122.2/2424:前24位是网络号,那么后8位就是主机号。广播地址10.100.122.255那如何用?例如发送行信息给 10.100.122.255 ,所有以 10.100.122.xxx 开头的机器都能收到。子网掩码255.255.255.0子网掩码的值都为 连续的 1,将子网掩码和IP地址进行AND计算。前面三个255,转成二进制都是1

2020-08-04 23:15:30 217

原创 ip addr 命令内容细解

ip addr 内容解释[root@w ~]# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferr

2020-08-03 23:22:22 3460 1

原创 MySQL 锁机制

目录全局锁表级锁表锁MDL(metadata lock)MySql 锁设计是为了处理并发问题,作为多用户共享资源,当出现并发访问的时候,数据库要合理的控制资源访问规则。而锁就是用来实现这些访问规则的。全局锁含义:对整个数据库实例进行加锁。方式:MySQL 提供了一个加全局读锁的方法,命令是 Flush table with read lock(FTWRL) ,使用该命令,之后的以下线程语句都会被阻塞:数据更新(数据增删改)数据定义(建表、改表结构)更新事务提交语句场景:做全库备份。也就是

2020-08-01 21:18:03 175

原创 MySQL 索引

目录索引是什么?索引常见的模型哈希表有序数组搜索树InnoDB 索引模型索引类型索引维护自增主键与业务主键的如何选择?索引是什么?索引就相当于数据库表中的 “ 目录 ”索引的目标就是为了提高数据查询的效率索引常见的模型哈希表有序数组搜索树哈希表以 key-value 的存储数据结构。要查找的为 key,结果为 value。而哈希表 key 通常通过数组保存,以一个 hash 函数换算成一个具体的位置。如果有 key 的 hash 函数换算的值和其他 key 一样。则会在数组的位置拉

2020-07-30 20:08:40 108

原创 IDEA 设置食用方式

IDEA 常用配置主设置介绍进入设置界面目录结构解释1. 外观行为 Appearance & Behavior1.1 设置主题[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MFugEkYs-1596036141914)(C:\Users\15153\AppData\Roaming\Typora\typora-user-images\image-20200729225032246.png)]这里默认提供了三套主题:IntelliJ,Darcula,Wi

2020-07-29 23:24:26 185

原创 事务特性简介-隔离性

事务的特性ACID(Atomicity、Consistency、Isolation、Durability,即 原子性、一致性隔离性、持久性)隔离级别为了解决多个事务的同时出现而出现的脏读(dirty read)、幻读(phantom read)、不可重复读问题,有了事务的隔离级别。隔离级别有四种,依次逐渐提高读未提交读已提交可重复读串行化注意:事务的隔离级别越高,效率也就越低,并行性能下降,安全性一次提高。读未提交指的当两个事务在执行(A 事务、B 事务),A 事务对表中数据进行

2020-07-28 21:06:24 147

原创 select 语句的执行流程

select 语句的执行流程select * from stu where id = 10;一条 Select 语句是如何在 MySQL 里面执行的呢?为了了解过程,我们从大局观看起,从大局上可以更快理解知识,一些细节暂时忽略,后面文章在解释。大体可以说,有两层,Service 层和存储引擎层。Service 层包括 连接器、查询缓存、分析器、优化器、执行器等。包括了很多的 MySQL 功能服务、内置函数(时间、日期、数学等),跨存储引擎也在这里实现,如存储过程,触发器、视图等。存储引擎层

2020-07-27 23:19:11 2510

原创 源码角度看 Spring MVC 执行流程

Spring MVC 执行流程对于 Spring MVC 的流程一直很感兴趣,所以画了个上面的流程图来梳理过程,下面用文字解释一 映射地址是否存在图中的第 2 步。我们在请求网页的时候,不仅仅是为了请求 Servlet,有时候需要请求一些静态资源,如 jQuery,CSS,图片等。因为SpringMVC 的 DispatchServlet 会处理所有的请求,那么对应的静态资源没有 Servlet 映射地址。该怎么办,通常在配置文件加:<mvc:default-servlet-handler

2020-07-26 23:48:06 97

原创 sessionStorage

sessionStorage会话存储localStorage 用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去除。sessionStorage 用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。存储对象属性length 存储对象包含了多少条数据存储对象的方法key() 返回存储对象第 n 个键的名称getItem(keyname) 返回指定的键setItem(keyname,value) 添加键和值,如果值存在更新对应值removeI

2020-07-25 23:26:14 122

原创 js 中 Cookie 的使用方法

用于存储 web 页面的用户信息。当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。Cookie 的作用就是用于解决 “如何记录客户端的用户信息”:当用户访问 web 页面时,他的名字可以记录在 cookie 中。在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录。Cookie 以名/值对形式存储username=stringjs 创建 Cookiedocument.cookie="username=dog";添加一个过期时间(

2020-07-24 23:29:08 466

原创 动态 SQL

动态 SQL我们都知道,有时候需要根据业务逻辑去拼装 SQL 语句是一件很麻烦的事,因为除了拼装以为,还需要判断最后是否有多余的 ,and,or 等导致语法错误的字符,而且得保证空格才不会导致 SQL 语句挤到一起。利用 MyBatis 的动态 SQL 就能摆脱苦恼。if <select id="selectEmpByEmp" resultType="com.nhky.entities.Emp"> select * from emp where <if test="e

2020-07-23 21:20:08 134

原创 MyBatis 如何获取自增主键的值

获取自增主键的值MySql 的主键是支持自增的。在某些场景下,我们在对于一条数据插入之后,需要获得对应自增之后的 id 值,但是如果在通过其他属性(姓名、年龄等属性)在查找一次很麻烦。MyBatis 为我们提供了一个很好的实现方法修改我们的映射文件,参考如下 <insert id="insertEmp" keyColumn="emp_id" keyProperty="empId" useGeneratedKeys="true"> insert into emp(emp_name,e

2020-07-22 23:00:19 711

原创 MyBatis 映射文件食用指南

MyBatis 映射文件食用指南MyBatis 中的映射文件,告诉这 MyBatis 如何进行增删改查数据库,其中至关重要的作用。MyBatis 的想法就行想把 sql 语句和 Java 代码解耦,实现真正的只关心 sql 语句的编写,而无需担心的连接数据库的各种细节。元素<mapper namespace></mapper> 标签是一级标签,用来把映射文件和 Dao 接口绑定起来。也就意味这一个映射文件,一个接口<mapper namespace="com.nhk

2020-07-21 23:13:44 160

原创 MyBatis Configuration 常用配置

MyBatis Configuration 相关配置属性(properties)在连接数据库的时候,大多都把连接数据库的参数信息(driver、url、user等)写在外部属性文件中,然后我们在 MyBatis 的主配置文件导入即可db.propertiesmysql.driver=com.mysql.cj.jdbc.Drivermysql.url=jdbc:mysql://localhost:3306/ss?serverTimezone=UTCmysql.username=rootmysql

2020-07-20 23:41:14 1179

原创 Spring MVC 启动源码分析

Spring 和 Spring MVC 的 IOC 之间容器关系概述上图是引用 Spring 官方网站的图片。Spring MVC 的 IOC 容器是在 Spring 的 IOC 容器延深展开来的。首先分析配置文件 web.xml<web-app> <!-- Spring 配置 --> <listener> <listener-class>org.springframework.web.context.ContextLoa

2020-07-19 23:52:03 108

原创 Spring 和 Spring MVC 整合流程

Spring 和 Spring MVC 整合流程虽然我们知道,Spring 和 Spring MVC 都是一套家族体系。但是对于不同的工人,就要干不同的活,而 Spring 和 Spring MVC 同样也要分开,干不同工人的活。Spring 职责负责业务层和数据访问层Spring MVC 职责负责控制层所以也就是会存在两个 IOC 容器。步骤导入 jar 包或依赖jackson-annotations-2.9.0.jarjackson-core-2.9.0.jarjack

2020-07-18 20:41:42 225

原创 More than .. name [spring_web] was found 如何解决

More than one fragment with the name [spring_web] was found在 Spring 和 SpringMVC 整合的时候,遇到More than one fragment with the name [spring_web] was found 问题,提醒是有多个相同的 web 片段。后面查看资料发现,由于我在 /WEB-INF/lib 目录下的 加入了 spring-web-5.0.2.RELEASE.jar 的 sources.jar 包,其中里面有

2020-07-18 20:05:24 360

原创 MVC 拦截器的原理

SpringMVC 拦截器SpringMVC 的 HandlerMapping 都支持处理程序拦截器(Interceptors)。当你想要拦截特殊的某种请求,比如对非法文字的过滤。所用的拦截器(Interceptors )都必须实现 HandlerInterceptor 接口。它有三个方法能够让我们灵活的应用于对目标处理器的预期处理和后置处理。preHandle() :在实际的目标请求处理器方法调用之前执行postHandle():在目标请求处理器方法调用之后、渲染视图之前执行。afterCo

2020-07-17 22:32:41 666

原创 Spring MVC 实现文件的上传与下载

Spring MVC 实现文件的上传与下载文件的上传SpringMVC 提供了上传文件的支持,并且这种支持是可插拔式的。这个可插拔式的组件时 MutilpartResolver 实现的。Spring 使用 FileUpload 实现了 MutilpartResolver 。类名称为 CommonsMultipartResolver。默认请求下,SpringMVC 并没有配置 MultipartResolver 组件,需要在配置文件中配置这个 bean。CommonsMultipartResolve

2020-07-16 18:58:00 101

原创 国际化如何使用

SpringMVC 国际化因为今天的页面不再是简单的个人程序,需要面对全世界的用于观看,例如外交部的网站,可以根据自己浏览器的语言来选择对应的文字。而 Spring MVC 为了方便我们国际化的开发,也提供了便利,建立在 Java国际化的基础之上的,通过提供不同国家/语言环境的消息资源,然后通过 ResourceBundleMessageSource 加载指定 Locale对应的资源文件,取得该资源文件中指定 key 对应的消息。这些步骤,Spring MVC 框架对J国际化进行了进一步的封装,简化了国

2020-07-15 22:58:01 213

原创 HttpMessageConver 的原理

HttpMessageConverter 原理HttpMessageConverter 是 Spring 3.0 提供的一个新接口。负责将请求消息转为一个对象。也负责把一个对象转为响应消息。你可以通过源码查看:ublic interface HttpMessageConverter<T> { boolean canRead(Class<?> clazz, @Nullable MediaType mediaType); boolean canWrite(Class<

2020-07-15 20:57:46 497

原创 Spring MVC 数据绑定流程

Spring MVC 数据绑定流程前端表单穿过了的数据,为什么会被自动封装成实体对象?Spring MVC 是如何把我们的实体类和表单中参数对应封装起来,又是如何完成自动类型转换呢?数据绑定流程:Spring MVC 框架将 ServletRequest 对象及目标方法的入参实例传给 WebDataBinderFactory 实例,这个实例便用来创建 DataBinder 对象DataBinder 调用装配在 Spring MVC 上下文中的 ConversionService 组件进行数据的类型

2020-07-14 22:55:33 454

原创 Spring MVC 如何完成重定向

Spring MVC 如何完成重定向在 SpringMVC 中,处理器的目标方法返回的视图名称前加上“ redirect: ” 表示进行重定向,加上“forward:”表示转发,但是实际默认的就是转发操作。重定向 @RequestMapping("testRedirct") public String testRedirct() { System.out.println("Redirct"); return "redirect:/jsp/success.jsp"; }转发 @Requ

2020-07-13 22:44:15 347

原创 SpringMVC 视图解析器

视图解析器流程Spring MVC 的目标方法在返回值数据的时候,主要有以下几种形式,String,ModelAndView,View 等等。那么 Spring MVC 的解析流程是如何?Spring MVC 在调用目标方法时候,都会封装成一个 ModelAndView 对象,然后交给视图解析器(ViewResolver) 去处理。然后视图解析器解析成 JSP/HTML 等 View。通过视图解析器解析的视图,用来渲染数据,将数据模型里面的数据呈现给用户。这里 Spring MVC 为了视图和数据

2020-07-13 22:41:21 175

asmtools.jar

Java 字节码的汇编和反编译器,能修改字节码文件。 在OpenJDK里有一个AsmTools项目,用来生成正确的或者不正确的java .class文件,主要用来测试和验证。 官方文档:https://wiki.openjdk.java.net/display/CodeTools/How+to+build+AsmTools

2020-05-30

空空如也

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

TA关注的人

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