自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式之策略模式

概念​ 定义一族算法类,将每个算法分别封装起来,让它们可以互相替换。策略模式可以使算法的变化独立于使用它们的客户端(这里的客户端代指使用算法的代码)。一提到策略模式,有人就觉得,它的作用是避免 if-else 分支判断逻辑。实际上,这种认识是很片面的。策略模式主要的作用还是解耦策略的定义、创建和使用,控制代码的复杂度,让每个部分都不至于过于复杂、代码量过多。除此之外,对于复杂代码来说,策略模式还能让其满足开闭原则,添加新策略的时候,最小化、集中化代码改动,减少引入 bug 的风险。关键点:定义

2021-09-17 21:20:49 228

原创 设计模式之模板模式

概念​ 模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。​ 当项目中出现流程长,但由于在不同场景下具体的实现不同,那么就可以定义算法骨架,即不同场景下共有的逻辑,在需要不同实现的位置抽象为方法,由子类去实现。模板设计模式解决问题的是,复用 与 扩展。好处:代码复用,减少重复代码。除了子类要实现的特定方法,其他方法及方法调用顺序都在父类中预先写好了。使用方式关键点:定义算法骨架,抽象为父

2021-09-17 21:18:46 143

原创 设计模式之代理模式的应用

这是我参与 8 月更文挑战的第2天,活动详情查看: 8月更文挑战代理模式的应用​ 前面简单介绍了下代理模式在 Java 中的三种不同使用方式。下面来介绍一个demo项目来加深理解代理模式的原理,方便更好的使用在多变的实际项目中。项目背景​ 由于项目中会需要进行入参日志打印、处理结果打印、权限控制等业务逻辑处理,而这些业务逻辑功能又是多变的,如果都将这些业务逻辑放在主要逻辑之中,那么随着时间的增加,代码会越来越杂。为了降低代码的耦合度,提高代码逻辑辨识。可以使用代理模式去抽离业务逻辑,将业

2021-08-16 22:12:18 223

原创 设计模式之代理模式的三种实现方式

概念为其他对象提供一种代理以控制对这个对象的访问。在Java中代理模式的实现大概可分为三种:静态代理、动态代理、CGlib代理。1. 静态代理静态代理,代理类和被代理类(也即目标对象)需实现同一个接口,保证外部调用知道是哪个接口。代理类中维护目标对象,在方法里执行目标对象的方法。缺点是,需要为每一个目标对象都构建一个代理类,目标对象数量多的话则代理类也多。关键点:代理类需实现和目标对象同一个接口;接口,代理类和被代理类需要共同实现的接口public interface Demo

2021-08-15 12:22:27 698

原创 Redis缓存不一致的问题(五)

缓存不一致的情况有两种:Redis缓存中是旧值;数据库中值是旧值;缓存一致性需要保证的是,当缓存中有值的时候,数据库的值必须与缓存一致。根据是否接收写请求,可以将缓存分为读写缓存和只读缓存。两种发生缓存不一致的情况不同,需要分开来应对。在只读缓存中,新增数据会直接写到数据库中,不会操作缓存,所以不会出现缓存不一致。删改数据时,需要删除数据库和缓存中的数据,在删改数据库和缓存时,无论哪个先后,中间出现故障都会产生旧值,即缓存不一致的情况。如何解决数据不一致重试机制可以将要删除的缓存值或者

2021-05-27 23:46:26 327

原创 Redis常见的问题:缓存雪崩、缓存击穿、缓存穿透难题(四)

Redis 缓存异常常见的问题有缓存雪崩、缓存击穿、缓存穿透。这三个问题一旦发生,请求量就会堆积到数据库层。如果请求的并发量大,那么就会导致数据库宕机或是故障。缓存雪崩缓存雪崩指的是,大量的应用请求无法在Redis缓存中处理,大量请求会发送到数据库层,导致数据库层的压力激增。引发雪崩的原因有两个。一是因为,缓存中有大量的缓存同时过期失效,导致大量请求无法得到处理;还有是因为,Redis缓存实例发生故障宕机了,无法处理请求,大量请求就会发送到数据库层。针对缓存同时失效的问题,有这样的解决方案。一

2021-05-15 21:40:16 130

原创 Redis的持久化机制AOF与RDB(三)

Redis的持久化机制AOF与RDB​ 因为Redis是内存数据库,意味着一旦服务器宕机或者其它原因引起的关机,内存中的数据将全部丢失。为快速恢复,Redis也有相应的持久化策略。Redis持久化主要有两大机制,即AOF(appen only file)日志和 RDB快照。AOF日志​ 在关系型数据库中,有个叫WAL的技术,即在实际记录数据前,会先把修改的数据记到日志文件中,以便故障时的数据恢复。而AOF是写后日志,即先执行命令将数据写入内存,然后才记录日志。为什么Redis要先写内存再写日志呢?

2021-05-13 17:38:03 157

原创 Redis常用的基本操作命令(一)

Redis 简介Redis是一个速度非常快的非关系数据库,它可以存储键(key) 与5种不同类型的值(value)之间的映射,可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片1来扩展写性能。Redis的数据结构​ Redis共有5种数据结构,分别为字符串(STRING)、列表(LIST)、集合(SET)、散列(HASH)、有序集合(ZSET)。1. 字符串(STRING)通过key-value的方法去存储字符串,字符串可以存储字符串、整数、浮点数这

2021-04-21 23:32:25 183

原创 Redis底层数据结构和reHash过程(二)

Redis底层数据结构​ Redis常用的类型有STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)、ZSET(有序集合)Redis 键值对存储的结构​ 为了实现从键到值的快速访问,Redis使用了哈希表来保存所有键值对。键对应Redis设置的Key,而值对应的并不是值本身,而是指向具体值的指针。使用哈希表的最大好处就是可以用O(1)的时间复杂度快速找到键值对。但既然是哈希表,那么必然会有着哈希冲突的问题。​ 哈希冲突即指的是,当两个key的哈希值和哈希桶计算对应关系时,正好

2021-04-21 23:30:19 294

原创 TCP的三次握手和四次挥手

TCP是面向连接的协议,运输层依靠tcp协议来传输报文。TCP运输连接的建立和释放是每一次面向连接的通信比不可少的过程。运输过程包括三个阶段,即连接建立、数据传送、连接释放。TCP报文段的首部格式由于tcp连接时传输的是报文段,在了解运输过程前先了解下tcp报文段的格式,理解了各字段的意义,对于三次握手和四次挥手的理解很有帮助。源端口和目的端口: 各占2个字节,分别为源端口号和目的端口号;序号:占4字节;序号范围是[0,2^32-1] ,当序号增加到2^32-1后,下一个就又回到0。在一

2021-04-19 20:24:27 182

原创 MySQL语句的执行流程

MySQL语句的执行流程MySQL 可以分为Server 层和存储引擎层两部分。Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖了MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。Server层连接器连接器负责跟客户端建立连接、获取权限、维持和管理连接。连接命令如

2021-04-18 13:14:32 150 1

原创 MySQL的redo log和bin log及相关问题

MySQL的redo log和bin logredo logredo日志即是重做日志,用于存储事务对数据库操作的记录,当数据库发生崩溃重启时,可以通过该日志进行恢复。​ MySQL 中,如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到那条记录,然后再更新,整个过程IO成本、查找成本都很高。redo日志的出现正是为了解决这个问题的。​ 执行更新操作时,MySQL使用的技术是WAL(wirte-Ahead logging)技术,它的关键点在于先写日志,再写磁盘。具体来说,InnoDB引擎会先把记录写

2021-04-18 13:11:53 196 1

原创 理解数据库之Mysql的共享锁与排他锁、行锁与表锁

共享锁共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。排他锁排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改。注意区别共享锁就是指多个事务只能读数据而不能修改数据...

2019-06-19 23:34:29 996

原创 理解数据库之事务与其隔离级别

一、事务的四大特性原子性原子性是指事务包含的操作要么全部成功,要么全部失败回滚。一致性一致性是指事务必须使数据库从一个一致性状态变换为另一个一致性状态,也就是说事务执行之前和执行之后都必须处于一致性状态。以A、B两个用户转账为例,无论如何转账,两个用户的总金额和是不变的。隔离性隔离性是指当多个用户访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务所干扰,多...

2019-06-19 23:32:53 205

原创 求解:一个数组中除了某个数字出现一次,其它均出现两次,求出该数?

如题,其要求给出最优的时间与空间复杂度。---- 2019年春招珍爱网笔试题1. 哈希法新建一个数组,目的存储数组元素出现的次数,其数组长度大小为(n/2+1)。为防止在进行hash求索引时,数组越界,可以通过取模得到索引下标。时间复杂度O(n)、空间复杂度O(n)public int soultion1(int[] num){ int[] a = new int[n...

2019-06-19 23:10:32 450

原创 理解数据库之设计范式

1. 第一范式(指原子性,不可分割)数据库第一范式是指数据库中的每一列都是不可分割的原子值。例如设计地址字段时,如有需求需要经常访问地址中的城市,街道等信息时,就要把该字段继续分割。2. 第二范式(指非主属性必须完全依赖于主属性)数据库第二范式是指所有非主属性列都应该完全依赖于主属性,而不是只依赖主属性的一部分,这是在联合主键的情况下。在一个订单表中,一个订单可包含多个产品,那么该订单表的主...

2019-06-17 23:31:51 169

原创 理解数据库之悲观锁和乐观锁

数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。而乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。概念乐观锁和悲观锁可以说是一种思想,一种人们为了解决并发控制带来的问题而定义好的策略。这里需要注意的是千万不能将乐观锁和悲观锁的概念狭义地理解为数据库中提供的锁机制,例如行锁、表锁、...

2019-06-17 23:30:09 283

原创 理解数据库之索引类型

索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。常见的索引类型有:哈希表、有序数组、搜索树哈希表哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位置。不可避免地,多个 key 值经过...

2019-06-17 23:27:42 258

原创 理解JVM之GC垃圾回收器

GC主要用于回收、释放垃圾占用的空间。需要回收的内存有哪些我们知道,线程私有区域为程序计数器、本地方法栈、虚拟机栈。这些区域的数据随着线程的启动创建,随着线程的结束而销毁。虚拟机栈里的栈帧随着方法的进入顺序执行着入栈和出栈操作,一个栈帧需要多少内存取决于具体虚拟机实现并且在编译期间就已确定下来。当方法和线程执行完毕后,内存就会随着回收,因此无需担心。而java堆和方法区不一样。方法区存放着类...

2019-06-16 23:20:57 545

原创 理解JVM之内存模型JMM

JMM内存模型图java内存模型就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制和规范。目的是保证并发编程场景中的原子性、可见性和有序性。根据java虚拟机规范,java虚拟机管理的内存将分为下面五大区域。五大内存区域图中黄色块为线程的共享区域,紫色块为线程的私有区域。堆堆是java虚拟机管理内存最大的一...

2019-06-16 23:08:33 221

原创 微信公众平台java开发

准备工作建立web工程,搭建服务器。 ---- 这里使用springBoot搭建注册微信公众号(开发时用测试号即可)。使用内网穿透软件(ngrok),使外网能访问你本地的应用,省去部署。微信公众平台接入流程微信公众平台的接入流程在官网中已经有较为详细的接入流程:https://mp.weixin.qq.com/wiki?t=resource/res_main&am...

2018-11-17 13:33:43 190

原创 MQTT——使用EMQ服务器进行通信

部署安装从官网中下载对应版本的emq服务器,对于linux下的部署安装在官方文档中有着资料。下载完成后需进行安装。以下是安装启动步骤(此为在windows下的操作)2.1 emq代理服务器下的安装2.2 emq服务器的启动/关闭、及查看2.3 控制台控制台地址: http://127.0.0.1:18083,默认用户: admin,密码:public搭建MQTT客户端(ja...

2018-11-16 15:28:57 3725

原创 微信硬件平台开发流程

微信硬件平台接入流程: 1. 用户通过扫描设备二维码绑定设备后,微信会推送设备绑定事件给第三方。(官方文档) 2. 通过设备的服务器配置的URL地址,接收到微信推送的事件数据。 3. 开发者平台通过解密数据得到明文消息,利用wx2MqttService.route(json)方法将数据进行选择路由。 4. 通过判断数据的msg_type可知事件为bind/unbind、get/set事件,...

2018-11-15 22:54:38 998

原创 mysql必知必会之sql语句用法

1. DISTINCT —> 去重select distinct name from user;distinct 不能部分使用,该关键字应用于指定的所有列而不单单是前置列。2. limit 与 offset —-> 偏移开始的位置select * from user limit 3; //指检索行数为3行select * f

2018-08-23 11:44:14 281

原创 SpringBoot之统一异常处理

统一处理返回结果 当后台在开发过程中,往往需要返回一个json对象给前端。当出现异常时,我们同样希望能把异常按照json格式进行返回,前端就可以根据返回json数据的状态码和信息进行相应的显示。这时候就需要写一个Http最外层的封装对象,统一返回的对象数据。 Result.javapublic class Result<T> { private Integ...

2018-05-14 12:41:52 2511 1

原创 蓝桥杯:杨辉三角

蓝桥杯赛前基础练习。 问题描述 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。   它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。   下面给出了杨辉三角形的前4行: 1 1 1 1 2 1 1 3 3 1   给出n,输出它的前n行。

2018-03-31 14:49:49 841

原创 n皇后问题(回溯与dfs)

问题描述: 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。 你的任务是,对于给定的N,求出有多少种合法的放置方法。

2018-03-30 11:03:33 214

原创 Hibernate 学习笔记(三)之基本映射关系详解

单向 n-1映射双向1-n映射双向多对多映射基于外键的1对1映射基于主键的1对1映射

2017-12-31 11:54:05 495

原创 Hibernate 学习笔记 (一) 之Junit 与 Session 一级缓存

Junit 单元测试使用Session 一级缓存详解Session 缓存的操作方法:flush(),refresh(),clear()。

2017-12-15 23:43:09 404

原创 Struts2 基础学习笔记(三)

类型转换异常;struts2 的流程分析;文件的上传与下载;表单的重复提交问题;自定义拦截器。

2017-11-16 15:38:24 681

原创 Struts2 基础学习笔记(二)

值栈,Ognl解析

2017-11-16 10:12:35 178

原创 Struts2 基础学习笔记(一)

1. struts2开发环境的三个步骤。2. 在Action 中访问web资源3. 关于 Struts2 请求的扩展名问题4. ActionSupport5. result:

2017-11-14 12:04:57 190

原创 重装-jdk配置,tomcat配置,sdk配置

jdk,sdk,tomcat环境变量的配置,包含常见问题的解决。

2017-10-27 16:44:55 472

原创 Servlet基础

servlet 基础创建servlet 程序的步骤Servlet 的执行流程Servlet 的生命周期Sevlet 获取表单数据Sevlet 路径跳转servlet 获取初始化参数

2017-09-24 11:28:24 207

原创 jsp基础-九大内置对象

jsp基础-九大内置对象

2017-09-23 22:59:17 237

原创 解决Android SDK Manager 无法更新下载SDK版本问题

解决Android SDK Manager 无法更新下载SDK版本问题

2017-09-02 20:53:01 1413

原创 hibernate 中常见的错误问题集合

hibernate 中常见的错误集合,会持续更新,有错误和不解之处敬请留言,谢谢!

2017-06-19 00:15:01 771

原创 如何用JSTL和EL来实现简单的分页

利用JSTL和EL表达式实现简单的分页,操作简单简洁。

2017-03-12 17:52:27 1627

转载 【转载】java中重载与重写的区别

细讲java重载与重写的区别。

2016-12-22 10:15:12 280

空空如也

空空如也

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

TA关注的人

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