自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JS阻止默认事件和冒泡事件

JS阻止默认事件和冒泡事件1. 组织默认事件function stopDefault(e){ if(e && e.preventDefault) { e.preventDefault(); } else { window.event.returnValue = false; } return false;}; 2. 阻止冒泡事件function stopBubble(e) { if(e && e.stopPropagation){ e

2021-06-08 12:27:44 240

原创 定位模式

定位模式1. 静态定位 static(了解)静态定位是元素的默认定位方式,无定位的意思。语法:选择器 { position: static;}静态定位是按照标准流特性摆放位置,它没有边偏移。静态定位在布局时很少用到。2. 相对定位 relative(重要)相对定位是元素在移动位置的时候,是相对于它原来的位置来说的。语法:选择器 { position: relative;}它是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)。原来在标准流的位置继续

2021-04-20 16:21:50 341

原创 PC端传统网页布局得三种方式

PC端传统网页布局的三种方式网页布局的本质-用CSS来摆放盒子。把盒子摆放到相应位置。CSS提供了三种传统布局方式,即盒子如何进行排列顺序:普通流(标准流/文档流);浮动;定位。实际开发中,一个页面基本都包含了这三种布局方式。1. 标准流(普通流/文档流)标准流:即标签按照规定好的默认方式排列,是最基本的网页布局方式。块级元素会独占一行,从上向下顺序排列。行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。2. 浮动浮动可以让多个块级元素一行内排列显示。网页布局

2021-04-20 16:21:31 2565

原创 清除浮动

清除浮动方法1. 额外标签法(隔墙法)额外标签法也成为隔墙法,是W3C推荐的做法。额外标签法会在浮动元素末尾添加一个空的标签。例如<div style="clear:both"></div>,或者其他标签(如<br />等)。优点:通俗易懂,书写方便。缺点:添加许多无意义的标签,结构化较差。注意:新添加的空标签必须是块级元素不能是行内元素。2. 父级添加 overflow可以给父级添加overflow属性,将其属性值设置为hidden、auto或sc

2021-04-14 12:22:24 91

原创 盒子模型清除内外边距

清除内外边距网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此在布局前,首先要清除网页元素的内外边距。<style> /* 这是CSS的第一行代码 */ * { margin: 0; padding: 0; } </style>注意:行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距。但是转换为块级元素和行内块元素就可以。...

2021-04-12 16:26:56 424

原创 CSS引入方式

CSS的三种样式表按照CSS样式书写的位置(或者引入的方式),CSS样式可以分为三大类:行内样式表(行内式);内部样式表(嵌入式);外部样式表(链接式)。1. 内部样式表内部样式表(内嵌样式表)是写到html页面内,是将所有的CSS代码抽取出来,单独放到一个<style>标签中。<style> div { /* color: pink; */ /* color: #ff0000; */

2021-04-09 11:58:00 59

原创 PC端网页架构

网页架构1. 文档类型声明标签<!DOCTYPE>文档类型声明,作用是告诉浏览器使用哪种HTML版本来显示网页(HTML版本如HTML5、HTML4、XHTML等)。<!DOCTYPE html>这句代码意思是:当前页面采取的是HTML5版本来显示网页。注意:1. <!DOCTYPE>声明位于文档中的最前面的位置,处于<html>标签之前;2. <!DOCTYPE>不是一个HTML标签,它是文档类型声明标签。2. lang 语言种

2021-04-06 14:10:40 542

原创 Kafka入门使用

1. 阻塞队列BlockingQueue(接口)解决线程通信的问题;阻塞方法:put、take。生产者消费者模式生产者:产生数据的线程。消费者:使用数据的线程。实现类ArrayBlockingQueue;LinkedBlockingQueue;PriorityBlockingQueue、SynchronousQueue、DelayQueue等。代码实现import java.util.Random;import java.util.concurrent.Array

2020-11-28 21:45:23 187 3

原创 MySQL锁

MySQL锁1. 范围表级锁:开销小、加锁快,发生锁冲突的概率高、并发度低,不会出现死锁(MyISAM)。行级锁:开销大、加锁慢,发生锁冲突的概率低,并发度高,会出现死锁(InnoDB)。2. 类型(InnoDB)共享锁(S):行级,读取一行;排他锁(X):行级,更新一行;意向共享锁(IS):表级,准备加共享锁;意向排他锁(IX):表级,准备加排他锁;间隙锁(NK):行级,适用范围条件时,对范围内不存在的记录加锁。一是为了防止幻读,二是为了满足恢复和复制的需要。如果事务1加了

2020-11-02 11:00:30 107

原创 统一记录日志的实现

统一记录日志能否使用控制器通知来进行日志的统一记录,答案是不行的。因为控制器通知是在控制器发生异常的时候才统一的处理,而这里的统一记录日志并不是只在发生异常实现,平时不发生异常也要记录日志,所以这个时候控制器通知就不太管用了。那能否使用拦截器呢,拦截器也是针对控制器的一个处理,那我们记录日志未必是对控制器进行记录,也可能是针对业务组件以及数据访问层进行日志记录。那传统的方法我们是把记录日志的代码封装到一个组件,然后在不同的service里的方法去调用它,这样肯定是可以解决问题的,不过它存在弊端:就业务

2020-11-01 23:29:30 383

原创 统一处理异常的实现

统一处理异常服务端分为三层架构:表现层、业务层和数据层。浏览器发送的请求一律发送给表现层,表现层调用业务层,业务层调用数据层(假如数据层出现异常,会抛给调用者业务层,业务层再往上抛会抛给表现层,就其实表现层是冲在最前方的,所以无论是数据层还是业务层的异常都会汇集到表现层)。我们统一地对表现层捕获异常,就能处理所有的异常。SpringBoot提供了一些现成的方案,在项目的某一个特定的路径下加上对应特定错误状态的页面,项目在发现特定错误就会跳转到对应的页面(特定路径为:resources目录下的tem

2020-11-01 20:22:54 248 2

原创 数据库小知识(二)

数据库小知识(二)E-R图用矩形表示实体型;用椭圆表示实体的属性;用菱形表示实体型之间的联系。如果ORDER BY 子句后未指定ASC或DESC,默认使用ASC(升序)。增加数据库索引会增加磁盘占用;建立数据库索引可以提升查询速度,即读速度,但在一定程度上降低写速度;数据库一般使用B*树作为索引;删除数据需要调整索引,所以会降低效率。关系的基本运算有两类:一类是传统的集合运算(并、差、交、笛卡尔积),另一类是专门的关系运算(选择、投影、连接、除法、外连接等)。关系数据库规范化的目的是为了解决关系

2020-10-06 20:47:14 273 1

原创 数据库小知识(一)

数据库小知识(一)关系型数据库中,关系是一张表,表中的行(一条具体的数据)就是一个元组,表中的列就是一个属性,列中对应的值为域(也称为字段)。SQL语言具有两种使用方式,一种是在终端交互方式下使用的,称为交互式SQL;另一种是嵌入在高级语言的程序中使用,称为嵌入式SQL。一个完整的数据库设计一般分为以下六个阶段:需求分析:分析用户的需求,包括数据、功能和性能需求。概念结构设计:主要采用E-R模型进行设计,包括画E-R图。逻辑结构设计:通过将E-R图转换成表,实现从E-R模型到关系模

2020-09-29 01:12:56 94

原创 事务管理

事务管理1. 什么是事务事务是由N步数据库操作序列组成的逻辑执行单元,这系列操作要么全执行,要么全放弃执行。2. 事务的特性(ACID)原子性(Atomicity):事务是应用中不可再分的最小执行体。一致性(Consistency):事务执行的结果,须使数据从一个一致性状态,变为另一个一致性状态。隔离性(Isolation):各个事务的执行互不干扰,任何事务的内部操作对其他的事务都是隔离的。持久性(Durability):事务一旦提交,对数据所做的任何改变都要记录到永久存储器中。3. 事

2020-09-20 17:44:03 151

原创 线程状态

多线程线程停止不推荐使用JDK提供的stop()、destory()方法【已废弃】。推荐线程自己停止下来。建议使用一个标志位进行终止变量当flag=false,则终止线程运行。public class TestStop implements Runnable { // 定义标志位 private boolean flag = true; public void run() { while (flag) { System.out.println("run...Thread");

2020-09-12 16:25:43 67

原创 Session存在的问题

Session分布式部署使用Session的问题。服务器往往是多台,同时向浏览器提供支持。为什么不用Session。粘性Session。固定的IP就通过Nginx分给同一个服务器处理(很难保证负载均衡)。同步Session。当某一个服务器创建Session并且存了数据以后会把Session同步给其他服务器(影响服务器的性能,服务器之间会产收耦合)。共享Session。单独弄一台服务器,不是用来处理普通业务的,是用来存Session的。别的服务器通这台服务器获取Session(又

2020-09-11 11:58:44 296

原创 排序算法(一)

排序算法1. 冒泡排序(及其优化)思路:一共进行数组的大小-1次大的循环。每一趟排序的次数都在减少。如果我们发现在某趟排序中,没有发生一次交换,则可以提前结束冒泡排序,即为优化。冒泡排序的时间复杂度:O(n^2)。代码实现:public static void bubbleSort(int[] arr) { int temp = 0; boolean flag = false; for (int i = 0; i < arr.leng

2020-09-09 22:17:10 73

原创 迷宫回溯问题

递归迷宫问题代码实现:public class MiGong { public static void main(String[] args) { // 创建一个二维数组模拟迷宫 int[][] map = new int[8][7]; // 使用1表示墙 // 把上下全部置为1 for (int i = 0; i < 7; i++) { map[0][i] = 1;

2020-09-09 16:29:53 78

原创 中缀表达式转后缀表达式

中缀表达式转后缀表达式步骤分析:初始化两个栈:运算符栈s1和储存中间结果的栈s2;从左至右扫描中缀表达式;遇到操作数时,直接将其压入s2;遇到运算符时,比较其与s1栈顶运算符的优先级:如果s1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈;否则,若优先级比栈顶运算符高,也将运算符压入s1;否则,将s1栈顶的运算符弹出并压入到s2中,再次与s1中新的栈顶运算符相比较;遇到括号时:如果是左括号“(”,则直接压入s1;如果是右括号“)”,则依次弹出s1栈顶的

2020-09-09 00:35:58 137

原创 数据结构之双向链表和环形链表

数据结构1. 双向链表(遍历)遍历方式和单链表一样,只是可以向前查找,也可以向后查找。2. 双向链表(添加)默认添加到双向链表的最后。先找到双向链表的最后这个节点。temp.next = newHeroNode;newHeroNode.pre = temp;3. 双向链表(修改)修改方式和单向链表一样。4. 双向链表(删除)因为是双向链表,因此我们可以实现自我删除某个节点。直接找到要删除的这个节点,比如temp。temp.pre.next = temp.next;temp.

2020-09-08 17:43:50 610 1

原创 每日一练(4)

每日一练(3)1. Java 创建对象的方式Java有5种方式来创建对象:使用new关键字(最常用):ObjectName obj = new ObjectName();使用反射的Class类的newInstance()方法:ObjectName obj = ObjectName.class.newInstance();使用反射的Constructor类的newInstance()方法:ObjectName obj = ObjectName.class.getConstruc

2020-09-06 23:29:42 47

原创 数据结构之数组和单链表

数据结构1. 二维数组和稀疏数组二维数组转稀疏数组:遍历原始的二维数组,得到有效数据的个数sum。根据sum就可以创建稀疏数组sparseArr int[sum+1][3]。将二维数组的有效数据存入到稀疏数组中。稀疏数组转原始二维数组:先读取稀疏数组的第一行,根据第一行的数据创建原始的二维数组。读取稀疏数组后几行的数据并赋给原始的二维数组即可。代码实现: // 创建一个原始的二维数组11 * 11 // 0:表示没有棋子;1:表示黑子;2:表示蓝子

2020-09-06 17:33:31 481

原创 Git常用命令基本使用

Git 基本使用Git官方网址Git极客学院文档1. Git Bash 常用命令安装完成后需要自报家门,进行如下设置:$ git config --global user.name "Your Name"$ git config --global user.email "[email protected]"选择一个合适的地方,创建一个空目录:$ mkdir learngit$ cd learngit$ pwd/Users/michael/learngit创建一个版本库

2020-09-02 17:02:02 122

原创 MySQL配置

MySQL 配置https://dev.mysql.com/downloads/mysql/Windows系统下载完MySQL之后使用会有问题,要使用一些配置和初始化。在MySQL的下载根目录下,创建一个my.ini的配置文件,并进行如下配置。[mysql]default-character-set=utf8[mysqld]port=3306basedir=(MySQL的安装目录)max_connections=20character-set-server=utf8default-

2020-09-01 15:45:40 51

原创 Spring MVC入门

Spring MVC1. 三层架构服务端三层架构分别是表现层、业务层和数据访问层。区分层次的目的就是为了高内聚低耦合。2. MVCM:Model 模型层(控制层和视图层联系的纽带,主要负责处理业务逻辑以及数据库的交互)V:View 视图层(负责渲染,展现)C:Controller 控制层(处理浏览器的请求,负责调度)MVC是一种设计模式。主要解决的是表现层的问题,当浏览器发送请求访问服务器的时候,它访问的是Controller控制器,这个组件会接收请求中的数据,调用业务层处理,处理完之后

2020-09-01 14:50:58 94

原创 Maven基本使用

Apache Maven1. Maven 下载安装,配置及基本使用注意:安装Maven之前要求先确定JDK已经安装配置完成。http://maven.apache.org可以帮助我们构建项目、管理项目中的jar包。Maven仓库:存放构件的位置。本地仓库:默认是 ~/.m2/repository远程仓库:中央仓库、镜像仓库、私服仓库添加阿里云的镜像仓库:Maven的安装目录/conf修改里面的settings.xml文件,添加以下设置: <mirror> &

2020-08-31 16:47:31 121

原创 使用Java操作Elasticsearch

1. 使用Kibana建立索引和映射及文档PUT /ems{ "mappings":{ "emp":{ "properties":{ "name":{ "type":"text", "analyzer": "ik_max_word", "search_analyzer": "ik_max_word" }, "age":{ "type":"intege

2020-08-25 16:09:38 198

原创 Elasticsearch第二天学习笔记

Elasticsearch1. ES 中的基本概念1.1 接近实时(NRT Near Real Time)Elasticsearch是一个接近实时的搜索平台。这意味着从索引一个文档直到这个文档能被搜索到有一个轻微的延迟(通常是1秒内)。1.2 索引(index)一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候

2020-08-21 21:16:29 112

原创 Elasticsearch第一天学习笔记

ElasticSearch1. RestFul 引言REST:表现层状态转化(Representational State Transfer),如果一个架构符合REST原则,就称它为RESTFul架构风格。全称为:资源的表现层状态转化(Resource Representational State Transfer)。资源(Resource):把网络中一切事物统称为资源,网络上的一个实体或者一个具体信息,每一个资源都存在一个唯一的资源标识符URL。表现层(Representational ):将资

2020-08-21 15:11:25 334

原创 Redis第三天学习笔记

Redis 应用场景利用Redis中字符串类型完成项目中手机验证码存储的实现。利用Redis中字符串类型完成具有时效性业务功能(12306,淘宝等的订单超时时间)。利用Redis分布式集群系统中的Session共享。利用Redis的可排序set类型完成排行榜之类的功能。利用Redis实现分布式缓存。利用Redis存储认证之后的token信息(微信小程序,微信公众号)。利用Redis解决分布式集群系统中分布式问题。1. Redis 中分布式缓存实现什么是缓存(Cache)定义:就是

2020-08-20 17:20:50 102

原创 Redis第二天学习笔记

Redis1. Redis 持久化机制Redis官方提供了两种不同的持久化方法来将数据存储到硬盘里面,分别是:快照(Snapshot)。AOF(Append Only File)只追加日志文件。1.1 快照(Snapshot)特点这种方式可以将某一时刻的所有数据都写入硬盘中,当然这也是Redis的默认开启持久化方式,保存的文件是以.rdb形式结尾的文件,因此这种方式也称之为RDB方式。...

2020-08-18 20:34:57 100

原创 Linux第三天学习笔记

Linux学习笔记摘抄自b站up主编程不良人(良心推荐)。1. MySQL主从复制架构1.1 现有架构存在问题单一架构:整个系统有一个应用服务器和一个数据库服务器对外提供服务架构称之为单一架构。存在的问题:现有的架构中数据库的数据非常重要,在现有架构中如果出现硬件故障或者自然灾害都会导致系统中数据可能全部丢失,会造成企业一定的损失。主从复制架构:主从复制架构核心解决的是数据的冗余备份问题。1.2 主从复制架构的搭建0. 架构规划master 主节点slave 从节点1

2020-08-18 15:08:15 184

原创 Redis第一天学习笔记

Redis1. NoSQL 的引言NoSQL(Not Only SQL):意即不仅仅是SQL,泛指非关系型的数据库。NoSQL这个技术门类,早期就有人提出,发展至2009年趋势越发高涨。RDBMS:关系型数据库,sql语句。2. 为什么是 NoSQL随着互联网网站的兴起,传统的关系型数据库在应付动态网站,特别是超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以克服的问题。如商城网站中对商品数据频繁查询、对热搜商品的排行统计、订单超时问题、以及微信朋友圈的音频和视频存储等相关使用传统的关系

2020-08-17 20:10:26 125

原创 每日一练(3)

每日一练(4)1. String 对象不可变,StringBuffer 对象可变的含义举个例子:String str = "aa";str = "aa" + "bb";此时str的值为“aabb”,但是“aabb”不是在开始的字符串“aa”后面直接连接的“bb”,而是又新生成了字符串“aabb”,字符串“aa”一旦被初始化,那么它的值就不可能再改变了。StringBuffer strb = StringBuffer("aa");strb.append("bb");此时的strb的值也为“

2020-08-14 23:19:08 88

原创 每日一练(2)

每日一练(2)1. 类方法和对象方法类方法是属于整个类的,而实例方法是属于类的某个对象的。由于类方法是属于整个类的,并不属于类的哪个对象,所以类方法的方法体中不能有与类的对象有关的内容。即类方法体有如下限制:类方法中不能引用对象变量。类方法中不能调用类的对象方法。在类方法中不能使用super、this关键字。类方法不能被覆盖。如果违反这些限制,就会导致程序编译错误。与类方法相比,对象方法几乎没有什么限制:对象方法中可以引用对象变量,也可以引用类变量。对象方法中可以调用类方法。对象

2020-08-12 21:08:12 67

原创 每日一练(1)

每日一练1. Math.ceil(d1) 和 Math.floor(d1)Math.ceil(d1) :ceil方法上有这么一段注释:If the argument value is less than zero but greater than -1.0,then the result is negative zero.如果参数小于0且大于-1.0,结果为-0。Math.floor(d1):ceil和floor方法上都有一句话:If the argument is NaN or an in

2020-08-11 22:41:24 104

原创 敏感词过滤

过滤敏感词敏感词过滤器可以将需要过滤的敏感词存入数据库或者放在配置文件里,这里采用将敏感词放在resources文件夹下的sensitive-word.txt文件里。定义前缀树: // 前缀树 private class TrieNode { // 关键词结束的标识 private boolean isKeywordEnd = false; // 子节点(key是下级字符,value是下级节点) private Map&

2020-08-10 17:35:02 284

原创 Spring Boot中使用Kaptcha生成验证码

生成验证码Kaptcha1. 导入 jar 包<dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version></dependency>2. 编写 Kaptcha 配置类@Configurationpublic class

2020-08-08 17:28:21 228

原创 Spring Boot项目实现邮件发送功能

Spring Boot 发送邮件1. 邮箱设置启用客户端SMTP服务。2. Spring Email导入 jar 包:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> <version>2.3.2.RELEASE</version&

2020-08-07 23:13:02 378

原创 Linux第二天学习笔记

Linux1. 配置 Linux 系统中网络查看当前ip地址:ip a查看默认网卡是否在ip地址,默认ens33没有ip地址。编辑网络配置在每次启动时自动获取ip地址:- 配置当前VMware软件网络配置为NAT模式。- 开启CentOS自动获取ip:vi /etc/sysyconfig/network-scripts/ifcfg-ens33,修改其中的默认配置ONBOOT=no为ONBOOT=yes。加载配置生效两种方式:- 重启当前Linux。- 重启网络服务:systemctl re

2020-08-06 17:28:43 97

空空如也

空空如也

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

TA关注的人

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