自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis常见的5种不同的数据类型详解

一、前言Redis除了可以存储键还可以存储常见的5种数据类型,分别是:String、List、Set、Hash、ZSet。对于Redis的命令有一部分是可以公用的,但是还有一些其他的命令是属于特殊使用的。首先看看一张关于Redis5种数据结构的对比:下边就分别介绍5中国不同的数据结构类型。二、String字符串类型Redis中的String类型就是一个由字节组成的序列,他和其他编程语言...

2019-07-18 21:54:06 3047

原创 Spring Boot 开发环境搭建和项目启动

本文主要对 JDK 的配置、Spring Boot 工程的构建和项目的启动、Spring Boot 项目工程的结构进行讲解和分析。配置JDK本文使用 IDEA 进行开发,在 IDEA 中配置 JDK 很简单,打开 File,选择 Project Structure,如下图所示:接下来按以下步骤操作即可:通过以上步骤,即可导入本地安装的 JDK。使用 STS 或 Eclipse 的朋友,...

2019-07-18 21:05:39 399

原创 基于SSM框架的后台权限管理系统

基于SSM框架的后台权限管理系统该项目源码地址:https://github.com/ggb2312/permission项目在线地址:http://47.100.54.177:8080/permission/login.html初始用户:系统管理员:admin/admin经理:manager/manager销售主管:salemanager/salemanager销售员:saler...

2019-07-17 20:08:25 3235 3

原创 淘淘商城40-使用java发送邮件提醒开发人员系统异常

在web应用中经常需要发送邮件,比如用户找回密码、系统异常时提醒开发人员、提醒用户生日、获取通知用户一些重要消息等等。1.配置邮箱1.1开启SMTP这里以163为例1.2开启邮箱授权码授权码是用于登录第三方邮件客户端的专用密码。不同于邮箱密码,你用java代码发送邮箱时,使用邮箱密码是发不出去的,一定要填写自己在163设置的邮箱授权码。2.使用java发送邮件2.1导入依赖你...

2019-07-17 19:40:03 502

原创 springboot + redis + 注解 + 拦截器 实现接口幂等性校验

标题一、概念幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次比如:订单接口, 不能多次创建订单支付接口, 重复支付同一笔订单只能扣一次钱支付宝回调接口, 可能会多次回调, 必须处理重复回调普通表单提交接口, 因为网络超时等原因多次点击提交, 只能成功一次二、常见解决方案唯一索引 – 防止新增脏数据token机制 – 防止页面重复提交悲观锁 ...

2019-07-17 17:50:58 159

原创 为什么阿里巴巴不建议在for循环中使用"+"进行字符串拼接

本文,也是对于Java中字符串相关知识的一个补充,主要来介绍一下字符串拼接相关的知识。本文基于jdk1.8.0_181。字符串拼接字符串拼接是我们在Java代码中比较经常要做的事情,就是把多个字符串拼接到一起。我们都知道,String是Java中一个不可变的类,所以他一旦被实例化就无法被修改。不可变类的实例一旦创建,其成员变量的值就不能被修改。这样设计有很多好处,比如可以缓存hashcod...

2019-07-17 17:37:21 148

原创 MySQL用户和权限详解

在MySQL中有一个系统自身就带有的数据库叫MySQL,数据库装好以后系统自带了好几个数据库MySQL就是其中过一个,MySQL数据库有个用户账户权限相关的表叫user表,在其中就有创建的用户。MySQL中完整的用户名是由用户+主机名形成,主机名决定了这个用户在哪个主机上能登陆。一、用户的创建和密码修改1.用户的创建 create user 'USERNAME'@'HOST' ide...

2019-07-16 22:35:33 357

原创 逆天改命,Java 反射的黑科技

众所周知,反射是 Java 的一大利器,它可以做到许多看起来不可思议的事情,但是用得不好也会给我们的系统挖下许多坑。下面就介绍一个反射的黑科技,请充分理解并消化里面的知识,并把这项技术用到实际的项目中去。在开始之前,我们先来念两句诗,代码如下:public static void main(String[] args) { recitePoems(false); recit...

2019-07-16 22:21:05 249

原创 面试官:如何做到不停机分库分表迁移?

需求说明类似订单表,用户表这种未来规模上亿甚至上十亿百亿的海量数据表,在项目初期为了快速上线,一般只是单表设计,不需要考虑分库分表。随着业务的发展,单表容量超过千万甚至达到亿级别以上,这时候就需要考虑分库分表这个问题了,而不停机分库分表迁移,这应该是分库分表最基本的需求,毕竟互联网项目不可能挂个广告牌"今晚10:00~次日10:00系统停机维护",这得多low呀,以后跳槽面试,你跟面试官说这个迁...

2019-07-16 20:20:01 316

原创 超级干货分享:阿里巴巴的26款超神Java开源项目!

1. 分布式应用服务开发的一站式解决方案 Spring Cloud AlibabaSpring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spri...

2019-07-16 19:58:52 310

原创 作为程序员不得不看的一篇文----Spring Boot最佳实践

前言Spring Boot是用于开发微服务的最流行的Java框架。在本文中,我将与你分享自2016年以来我在职业开发中使用Spring Boot所采用的最佳实践,这些都是基于我的个人经验和认可的Spring Boot专家的着作。在本文中,我将重点介绍Spring Boot特有的实践(大多数时候,也适用于Spring项目)。以下最佳实践未按特定顺序排列。使用自动配置Spring Boot的...

2019-07-16 19:55:47 213

原创 Maven 的这 7 个必须要懂的问题,你搞懂了没有?

1、本地仓库?Maven到底有哪些仓库?它们什么关系?2、关于的使用3、既然Maven进行了依赖管理,为什么还会出现依赖冲突?处理依赖冲突的手段是?4、引入依赖的最佳实践,提前发现问题!5、Maven规范化目录结构6、Maven的生命周期7、关于scope依赖范围在如今的互联网项目开发当中,特别是Java领域,可以说Maven随处可见。Maven的仓库管理、依赖管理、继承和聚合等...

2019-07-16 15:51:44 165

原创 数据库分库分表策略的具体实现方案

一、MySQL扩展具体的实现方式随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。关于数据库的扩展主要包括:业务拆分、主从复制,数据库分库与分表。这篇文章主要讲述数据库分库与分表(1)业务拆分在 大型网站应用之海量数据和高并发解决方案总结一二 一篇文章中也具体讲述了为什么要对业务进行拆分。业务起步初始,为了加快应用上线和快速迭代,很多应用都...

2019-07-15 20:47:33 334

原创 SpringBoot 2.0 教程实战 MySQL 读写分离

引言AbstractRoutingDataSource实践 3.1. maven依赖 3.2. 数据源配置 3.3. 设置路由key / 查找数据源测试工程结构1.引言读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做。因此,一般来讲,读写分离有两种实...

2019-07-15 20:01:41 171

原创 面试常问:String 对象在 JVM 如何存储提高性能的?

典型答案字符串对象在JVM中可能有两个存放的位置:字符串常量池或堆内存。使用常量字符串初始化的字符串对象,它的值存放在字符串常量池中使用字符串构造方法创建的字符串对象,它的值存放在堆内存中String提供了一个API——java.lang.String.intern(),这个API可以手动将一个字符串对象的值转移到字符串常量池中。在1.7之前,字符串常量池是在PermGen区域,这个...

2019-07-15 16:27:58 257

原创 JavaScript之继承的多种方式和优缺点

本文主要是跟大家分享下JavaScript中继承的多种方式和优缺点。1.原型链继承问题:引用类型的属性被所有实例共享,举个例子:还有个就是在创建 Child 的实例时,不能向Parent传参。2. 借用构造函数(经典继承)优点:1)避免了引用类型的属性被所有实例共享;2)可以在 Child 中向 Parent 传参。举个例子:缺点:方法都在构造函数中定义,每次创建实例都会...

2019-07-15 15:06:34 239

原创 实例分享:记一次故障引发的线程池使用的思考

一、悬案某日某晚 8 时许,一阵急促的报警电话响彻有赞分销员技术团队的工位,小虎同学,小峰同学纷纷打开监控平台一探究竟。分销员系统某核心应用,接口响应全部超时,dubbo 线程池被全部占满,并堆积了大量待处理任务,整个应用无法响应任何外部请求,处于“夯死”的状态。正当虎峰两位同学焦急的以各种姿势查看应用的各项指标时,5分钟过去了,应用居然自己自动恢复了。看似虚惊一场,但果真如此吗?二、勘查...

2019-07-14 21:42:49 214

原创 解决SpringBoot多模块发布时99%的问题?SpringBoot发布的8个原则和4个问题的解决方案

如果使用的是 SpringBoot 多模块的项目,在发布的时候可能遇到各种各样的问题。本文归纳了以下 8 个原则和发布时经常出现的 4 个问题的解决方案,掌握了这些原则和解决方案,几乎可以解决绝大数 SpringBoot 发布问题。SpringBoot多模块发布的8大原则1 在发布模块打包,而不是父模块上打包比如,以下项目目录:如果要发布 api 就直接在它的模块上打包,而不是在父模块...

2019-07-12 21:48:26 241

原创 RocketMQ 可视化环境搭建和基础代码使用

RocketMQ 是一款分布式消息中间件,最初是由阿里巴巴消息中间件团队研发并大规模应用于生产系统,满足线上海量消息堆积的需求, 在 2016 年底捐赠给 Apache 开源基金会成为孵化项目,经过不到一年时间正式成为了 Apache 顶级项目。早期阿里曾经基于 ActiveMQ 研发消息系统, 随着业务消息的规模增大,瓶颈逐渐显现,后来也考虑过Kafka,但因为在低延迟和高可靠性方面没有选择,...

2019-07-12 21:27:44 204

原创 一文带你轻松搞懂事务隔离级别(图文详解)

什么是事务?事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。事物的特性(A...

2019-07-12 20:59:53 165

原创 JavaScript之继承的多种方式和优缺点

1.原型链继承问题: 引用类型的属性被所有实例共享,举个例子:还有个就是在创建 Child 的实例时,不能向Parent传参。2. 借用构造函数(经典继承)优点: 避免了引用类型的属性被所有实例共享;2)可以在 Child 中向 Parent 传参。举个例子:缺点: 方法都在构造函数中定义,每次创建实例都会创建一遍方法。3. 组合继承原型链继承和经典继承双剑合璧。优点: ...

2019-07-12 16:50:59 115

原创 JAVA 中原生的 socket 通信机制

当前环境jdk == 1.8知识点socket 的连接处理IO 输入、输出流的处理请求数据格式处理请求模型优化场景今天,和大家聊一下 JAVA 中的 socket 通信问题。这里采用最简单的一请求一响应模型为例,假设我们现在需要向 baidu 站点进行通信。我们用 JAVA 原生的 socket 该如何实现。建立 socket 连接首先,我们需要建立 ...

2019-07-11 21:58:13 134

原创 让老板乖乖给你加薪的十几个java性能优化细节,你一定要知道!

今天跟大家分享一下Java性能优化的十几个细节。在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。1. 尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:1)控制资源的使用,通过线程同步来控制资源的并发访问;...

2019-07-11 15:35:25 342 1

原创 35岁优秀程序员分享:百度,京东,网易程序大牛的必经之路!!!

在未来,我们享受良好的服务的同时,也会为别人提供更良好的服务,需要在技能上还是服务质量上的要求会更高更严格。平时要注意提高自己,不要被时代淘汰掉。在程序界流行着一种默认的说法叫“黄金5年”,也就是一个程序员从入职的时候算起,前五年的选择直接影响着整个职业生涯中的职业发展方向和薪资走向,如何走好这5年,彻底从一个刚入行的菜鸟蜕变成可以以不变应万变的职业大牛,这是一个涉及到自身专业知识储备和选择的...

2019-07-11 14:21:10 688

原创 作为一个程序员,你必须知道一次完整的网络请求是怎么实现的!

前言“ 复制-粘贴 ”,相信是广大程序员朋友在日常开发中最常用也是最快速的编码方式了,这种方式无可厚非,优点是方便快捷,网上的代码块也是经过别人实践过的,稍微改动下便可符合我们的需求。但是这种做法的弊端也很明显,那就是“ 记不住、不理解 ”。如何跳出“ Hello world ”的水平怪圈,对广大朋友来说是很痛苦和迷茫的,古人说“ 读万卷书,不如行万里路 ” , 特别对是对程序员来说,脚踏实...

2019-07-11 14:20:56 1412

原创 Mysql优化深度解析,你收藏了那么多文章,真的了解MySQL优化吗?

说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型… 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用。MySQL逻辑架构如果能在头脑中构建一幅MySQL各...

2019-07-11 14:20:42 540

原创 如何排查Java内存泄漏?看完我给跪了!

没有经验的程序员经常认为Java的自动垃圾回收完全使他们免于担心内存管理。这是一个常见的误解:虽然垃圾收集器做得很好,但即使是最好的程序员也完全有可能成为严重破坏内存泄漏的牺牲品。让我解释一下。当不必要地维护不再需要的对象引用时,会发生内存泄漏。这些泄漏很糟糕。首先,当程序消耗越来越多的资源时,它们会对计算机施加不必要的压力。更糟糕的是,检测这些泄漏可能很困难:静态分析通常很难精确识别这些冗余引...

2019-07-09 21:20:49 1067

原创 Spring Boot 2 WebFlux 集成 Redis

JDK 1.8Maven 3.5.2Spring Boot 2.1.3.RELEASE工程名:springboot-webflux-6-redis工程地址:见文末前言上一讲,讲了如何整合 MongoDB,这里继续讲如何操作 Redis 这个数据源。那什么是 Reids?是一个高性能的 key-value 数据库。Github 是这么描述的:Redis is an in-mem...

2019-07-09 20:54:02 1476

原创 Java 进阶必备:HashMap 源码分析

简介HashMap 是 Java 语言中常用的用于存放键值对数据类型的集合类。随着 JDK(Java Developmet Kit)版本的更新,JDK 1.8 对 HashMap 底层的实现进行了优化,底层实现也由之前的 数组 + 链表 改为 数组 + 链表 + 红黑树 。HashMap 的常用方法如下:创建一个 mapMap<String, String> map = new ...

2019-07-08 17:01:06 266

原创 面试题:你是如何选择顺序存储数据结构的?

本文为Java开发人员选择适当的顺序数据结构提供指导。ArrayList 和 LinkedList 是 Java 集合框架中用来存储对象引用列表的两个类。ArrayList 和 LinkedList 都实现 List 接口。首先,让我们了解一下它们最重要的父接口——List。1、List 接口列表(list)是元素的有序集合,也称为序列。它提供了基于元素位置的操作,有助于快速访问、添加和删...

2019-07-08 14:58:11 355

原创 一个正则表达式怎么会引起线上CPU狂飙?

我们可以看到所有的堆栈都指向了一个名为 validateUrl 的方法,这样的报错信息在堆栈中一共超过 100 处。通过排查代码,我们知道这个方法的主要功能是校验 URL 是否合法。很奇怪,一个正则表达式怎么会导致 CPU 利用率居高不下。为了弄清楚复现问题,我们将其中的关键代码摘抄出来,做了个简单的单元测试。public static void main(String[] args) { ...

2019-07-06 22:14:15 669 1

原创 深入分析Spring 与 Spring MVC容器

1、Spring MVC WEB配置Spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext,使得拥有web功能。那么,Spring MVC是如何在web环境中创建IoC容器呢?web环境中的IoC容器的结构又是什么结构呢?web环境中,Spring IoC容器是怎么启动呢?以Tomcat为...

2019-07-06 20:59:30 173

原创 全面了解HTTP和HTTPS(开发人员必备)

序言Http和Https属于计算机网络范畴,但作为开发人员,不管是后台开发或是前台开发,都很有必要掌握它们。在学习Http和Https的过程中,主要是参考了阮一峰老师的博客《阮一峰:HTTP 协议入门》,讲的很全面,并且通俗易懂,有兴趣的同学可以去学习学习。这篇文章主要是按照自己的思路来讲解对Http和Https的理解。文章将会从以下几个方面介绍。目录树:一、网络层结构二、Http协...

2019-07-05 22:04:53 748

原创 深入分析Java内存泄漏

什么是内存泄漏内存泄漏:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着。 在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存...

2019-07-05 21:11:51 157

原创 Java Socket与TCP/IP协议栈

为什么TCP连接需要三次握手与四次挥手?一、OSI 七层模型与TCP/IP四层模型很多同学知道在大学课程中,我们学习的《计算机网络》一书采用的是OSI七层网络模型(OSI Model),但是OSI 七层模型是一种抽象模型,在操作系统实际实现中,采用的是TCP/IP四层网络模型,四层模型将七层模型合并为了应用层(Application Layer)、传输(Transport Layer)、网络层...

2019-07-05 20:51:17 635

原创 Java并发编程的艺术——线程池

使用线程池的好处●降低资源的损耗。重复利用创建好的线程,减少了线程创建和销毁的开销。●提高响应速度。当任务来临时,创建好的线程能立马处理新来的任务,不需要等待线程创建完毕后再执行任务。●方便线程的管理。线程是稀缺资源,过多的创建线程可能会降低系统的稳定性,线程池能控制线程创建的数量,并对其进行监控、管理、调优,从而提高系统稳定性。线程池的处理流程1.新任务来临时,若线程池的线程数小于基本...

2019-07-05 17:47:52 193

原创 设计模式(6)-责任链模式详解(易懂)

责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。模型:Hander:抽象处理者ConcreteHander:具体处理者下面模型代码如下:1.设计等级类...

2019-07-05 17:28:33 226

原创 设计模式(5)-建造者模式详解(易懂)

建造者模式定义**定义:**建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。先分析模型图上的四大部分:加粗样式Product:产品类,指要创建的复杂对象,通常实现了模板方法模式Builder:抽象建造类,规范产品的组建,一般是由子类实现的ConcreteBuilder:具体建造类,实现抽象建造类定义的方法并返回一个建造好的对象...

2019-07-05 15:42:08 173

原创 设计模式(4)-代理模式详解(易懂)

代理模式定义定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。Subject:抽象角色,提取的公共方法,可以是一个接口或者抽象类RealSubject:真实角色,实现具体的业务逻辑Proxy:代理角色,对真实角色的逻辑处理,实现抽象角色的方法,并可以加上自己的操作逻辑。实例...

2019-07-04 22:18:50 126

原创 设计模式(3)-工厂方法模式详解(易懂)

工厂方法模式的定义工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品。从上面的图可以看出:Product为抽象产品类,负责产品的共性;Creator为抽象创建类;而具体的产...

2019-07-04 20:54:09 270

空空如也

空空如也

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

TA关注的人

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