自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式网站架构:缓存在分布式系统中的应用

缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。一、缓存概述缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。1.1缓存的原理(1) 将数据写入/读取速度更快的存储(设备);(2) 将数据缓存到离应用最近的位置;(3)...

2019-08-08 11:33:09 680

原创 详解Proxy代理模式的场景分析

代理模式是一个十分优秀的软件架构模式,许多应用都用到了代理模式。代理模式就是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不合适或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。这次主要讲解一下代理模式的实例、解决的问题部分。在java框架中有一种框架就用到了动态代理模式,spring框架中的aop技术,基于代理模式。下面我将以befor...

2019-08-07 17:45:24 703

原创 ReentrantReadWriteLock深入解析

ReentrantLock在并发情况下只允许单个线程执行受保护的代码,而在大部分应用中都是读多写少,所以,如果使用ReentrantLock实现这种对共享数据的并发访问控制,将严重影响整体的性能。ReentrantReadWriteLock中提供的读取锁(ReadLock)可以实现并发访问下的多读,写入锁(WriteLock)可以实现每次只允许一个写操作。但是,在它的实现中,读、写是互斥的,即允许...

2019-08-06 16:31:39 525

原创 java设计模式之Java迭代器模式

在策略模式中,可以在运行时更改类行为或其算法。 这种类型的设计模式属于行为模式。在策略模式中,创建表示各种策略对象和其行为根据其策略对象而变化的上下文对象。 策略对象更改上下文对象的执行算法。实现实例在这个示例中,将创建一个 Strategy 接口,定义实现策略接口的操作和具体策略类。 上下文类- Context 是使用策略的类。StrategyPatternDemo是一个演示类,...

2019-08-06 15:17:29 320

原创 Nginx 极简教程

什么是Nginx?Nginx (engine x) 是一款轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。什么是反向代理?反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向...

2019-08-06 11:41:40 345

原创 MySQL深入剖析-SQL语句优化

SQL优化的教程很多,但是比较杂乱。近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充。1> 为查询缓存优化你的查询大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。...

2019-08-05 19:12:41 313

原创 浅谈Spring的AOP实现-代理机制

说起Spring的AOP(Aspect-Oriented Programming)面向切面编程大家都很熟悉(Spring不是这次博文的重点),但是我先提出几个问题,看看同学们是否了解,如果了解的话可以不用继续往下读:1. Spring的AOP的实现方式有哪些?2. 为什么使用代理机制?3. 它们是怎么实现的?4. 它们的区别是什么?下面进入正题,Spring采用代理的方式实现A...

2019-08-05 15:50:37 353

原创 深入探索Java工作原理:JVM,内存回收!

Java语言引入了Java虚拟机,具有跨平台运行的功能,能够很好地适应各种Web应用。同时,为了提高Java语言的性能和健壮性,还引入了如垃圾回收机制等新功能,通过这些改进让Java具有其独特的工作原理。1.Java虚拟机Java虚拟机(Java Virtual Machine,JVM)是软件模拟的计算机,它可以在任何处理器上(无论是在计算机中还是在其他电子设备中)安全兼容地执行保存...

2019-08-05 11:50:38 311

原创 深入理解Java正则表达式

概述Java 正则表达式正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。深入理解Java正则表达式:(为了能看清,本文正则表达式用中文的句号代替英文句点)英文句点符号:匹配单个任意字符。eg:表达式”t。o 可以匹配:tno,t#o,teo等等。不可以匹配:tnno,to,Tno,t...

2019-08-03 20:04:50 348

原创 Caffeine缓存

简介我们来看看 Caffeine — 一个高性能的 Java 缓存库。缓存和 Map 之间的根本区别在于缓存可以回收存储的 item。回收策略为在指定时间删除哪些对象。此策略很直接影响缓存的命中率 — 缓存库的一个重要特征。Caffeine 因使用 Window TinyLfu 回收策略,提供了一个近乎最高的命中率。填充策略(Population)Caffeine 给我们提...

2019-08-03 19:39:39 976

原创 SpringBoot实现Java高并发秒杀系统之Service层开发

Service接口的设计之前我们写好了DAO层的接口,这里我们要开始着手编写业务层接口,然后编写业务层接口的实现类并编写业务层的核心逻辑。设计业务层接口,应该站在使用者角度上设计,如我们应该做到:1.定义业务方法的颗粒度要细。 2.方法的参数要明确简练,不建议使用类似Map这种类型,让使用者可以封装进Map中一堆参数而传递进来,尽量精确到哪些参数。 3.方法的return返回值...

2019-08-03 15:11:07 801

原创 一文帮你搞懂 MySQL 单表查询的底层实现

我们对大家这种MySQL的使用者来讲,日常用的数最多的就是查询功能。DBA隔三差五丢过去一部分慢查询语句让优化,如果连查询是怎么去执行的都不怎么明白还优化个毛线,因此现在是时候掌握真正的技术了。MySQL有个称做查询优化器的模块,这条查询语句通过语法解析以后就会被交给查询优化器来通过优化,优化的结果就是生成有一个所谓的去执行计划,这个去执行计划表明了应该使用哪些索引通过查询,表之间的连接顺序...

2019-08-03 11:25:50 355

原创 Elasticsearch—基础介绍及索引原理分析

最近在参与一个基于Elasticsearch作为底层数据框架提供大数据量(亿级)的实时统计查询的方案设计工作,花了些时间学习Elasticsearch的基础理论知识,整理了一下,希望能对Elasticsearch感兴趣/想了解的同学有所帮助。 同时也希望有发现内容不正确或者有疑问的地方,望指明,一起探讨,学习,进步。介绍Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一...

2019-08-02 19:30:31 292

原创 SSM框架之Log4j配置

前言  之前搭建SSM框架的时候我们曾经配置过log4j.properties文件,那么这个文件主要是干什么的呢?配置的格式有哪些?在本文中会进行相关的讲解。log4j.properties什么是Log4j?  Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Sy...

2019-08-02 17:59:04 884

原创 redis的安装和使用

RedisRedis命令参考网址:http://doc.redisfans.com/Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-...

2019-08-02 14:02:35 343

原创 JDBC数据库连接池

DriverManager的实现方式一般是在主程序中建立数据库的连接,然后进行数据库的操作,操作完毕后断开数据库连接。然而这种模式存有一些问题。普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证用户名和密码(得花费0.05s~1s的时间)。需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接。...

2019-08-02 11:46:36 244

原创 java代码优化——遇到多参数构造器时考虑构建器

1. 构建器是什么?构建器也是一种获得类对象的方法,在前面我们介绍了通过 构造器 与 静态工厂方法 两种方式来获得类的对象。这里我们写一个 Person 类,并为这个类加上构建器:public class Person { private final String name; private final int age; private fi...

2019-08-01 20:38:08 355

原创 ​​​​​​JAVA软件项目研发流程

-- 谈需求(客户提需求,有客户项目经理,技术经理)-- 可行性分析报告(市场调研)【接项目】{人员配比,项目成本}(竞标)-- 概要设计-- 静态模型(建模工具)[产品经理]->HTML-- 审查相关功能(功能性|非功能性)是否满足客户需求-- 定版(快照版1.1.32)-- 数据库的设计(PowerDesigner)(测试数据)-> 小型公司(...

2019-08-01 19:39:50 323

原创 class版本不兼容错误原因分析

在JDK 1.6工程中使用外部JAR包的时候经常碰到这样的问题:Unsupported major.minor version 51.0。为了解决这个问题,首先我们要明白:major.minor version的含义。major.minor version是在class文件中定义的,表示class文件的版本。例如:JDK 1.7 –target 1.7 版本号51.0JDK 1.7...

2019-08-01 15:19:27 1229

原创 分布式事务解决方案——柔性事务与服务模式

在分布式系统中,存在CAP理论,即可用性、数据一致性和分区容错性无法同时满足。所以,一个基于CAP的最终一致性理论BASE理论是目前解决分布式问题比较靠谱的。在分布式系统中,是无法使用本地事务保证数据的一致性的。一种标准的分布式事务就是全局事务(DTP模型)。他是基于2PC来控制的。但是由于2PC自身就存在同步阻塞的问题,这也就导致全局事务效率很低。所以,这种全局事务并不适合解决大型网站的分布...

2019-08-01 11:34:13 351

原创 Docker-compose一键部署zk集群+dubbo-admin

Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。Zookeeper镜像下载docker pull zookeeper下载dubbo-admin官网dubbo-admin地址...

2019-07-31 17:42:22 1497

原创 Java 内存区域和GC机制

目录Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器Java垃圾回收概况Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是...

2019-07-31 14:40:13 240

原创 java中如何保证多线程顺序执行

如何保证多线程顺序执行代码:public class ThreadDemo { static Thread threadA = new Thread(()->{ System.out.println("线程A"); });​ static Thread threadB = new Thread(()->{ System.out.println("线程B"); }...

2019-07-30 17:59:47 4281

原创 解读mysql的索引和事务的正确姿势

一、索引是做什么的?很多时候,当你的应用程序进行SQL查询速度很慢时,应该想想是否可以建索引。大多数MySQL索引(PRIMARY KEY、UNIQUE、INDEX和FULLTEXT)在B树中存储。只是空间列类型的索引使用R-树,并且MEMORY表还支持hash索引。索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址,在数据十分庞大的时候...

2019-07-30 15:00:15 251

原创 redis安装、集群搭建等

1 Redis介绍1.1 什么是NoSql为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方案,就是NoSql数据库。NoSQL,泛指非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充。1.2 Nosql数据库分类 键值(Key-Value)存储数据库相关产品: Tokyo Cabinet/Tyrant、Redis、Volde...

2019-07-30 11:35:35 224

原创 《高性能MySQL》&《MySQL技术内幕 InnoDB存储引擎》笔记

第一章 MySQL架构与历史MySQL的架构从上图可以看出,MySQL数据库区别于其他数据库的最重要的一个特点就是其插件式的表存储引擎。需要注意的是,存储引擎是基于表的,而不是数据库的(即同一个数据库中的不同表可以有不同的存储引擎)。MySQL是一个单进程多线程架构的数据库。连接MySQL连接MySQL是一个连接进程和MySQL数据库实例进行通信。从程序设计的角度来说,本质...

2019-07-29 16:39:09 3661

原创 mysql分库分表

一丶分库分表注意事项:1、维度问题假如用户购买了商品,需 要将交易记录保存取来,如果按照用户的纬度分表,则每个用户的交易记录都保存在同一表中,所以很快很方便的查找到某用户的购买情况,但是某商品被购买的情 况则很有可能分布在多张表中,查找起来比较麻烦。反之,按照商品维度分表,可以很方便的查找到此商品的购买情况,但要查找到买人的交易记录比较麻烦。所以常见的解决方式有:通过扫表的方式解决...

2019-07-29 14:21:55 288

原创 springboot-mybatis整合多数据源的简单实现

业务场景 从sqlserver(oa)数据库读取数据写入orcale(knowledge)application.properties 配置文件如下:#oa数据连接配置(sqlserver)spring.datasource.oa.url=jdbc:sqlserver://172.16.8.96:1433;databaseName=ecologyssospring.datasourc...

2019-07-29 11:20:52 325

原创 Java字节流与字符流的区别

前言最近又复习了一下关于Java字节流与字符流的知识,有些总结记录一下区别概述在Java关于I/O读写的API中,字符流处理的单元为 两个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的...

2019-07-28 19:19:07 249

原创 ElasticSearch实战:Linux日志对接Kibana

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTFul web接口。ElasticSearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。ElasticSearch常用于全文检索,结构化检索,数据分析等。如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,...

2019-07-28 15:22:11 478

原创 有了这一套Spring面试题,你还怕被面试官虐吗?

1.什么是Spring?Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Java应用程序中,但对Java EE平台上的Web应用程序有更好的扩展性。Spring框架的目标是使得Java EE应用程序的开发更加简捷,通过使用POJO(简单java对象,也就是javabean)为基础的编程模型促进良好的编程风格。2.Spring有哪些优点?轻量级...

2019-07-28 11:16:13 318 1

原创 Java程序员必备的20个库,你有吗?

一个优秀且经验丰富的Java开发人员的特点之一是对API的广泛了解,包括JDK和第三方库。我花了很多时间学习API,特别是在阅读Effective Java 3rd Edition之后,Joshua Bloch建议如何使用现有的API进行开发,而不是为常用的东西写新的代码。在本文中,我将分享一些Java开发人员应该熟悉的最有用和最重要的库和API。但是,我没有包含框架,例如Spring和Hib...

2019-07-26 19:56:03 560 1

原创 使用Spring Cloud和Docker构建微服务架构

本文通过一个使用了 Spring Boot、Spring Cloud 和 Docker 构建的概念型应用示例来提供了了解常见的微服务架构模式的起点。代码可以在 Github 上获得,同时 Docker Hub 上也提供了镜像。你只需要一个命令即可启动整个系统。我选择了一个老项目作为这个系统的基础,它的后端以前是单体应用。该应用提供了处理个人财务、整理收入开销、管理储蓄、分析统计和创建简单预...

2019-07-26 14:51:51 317

原创 FutureTask的使用方法及实现原理

FutureTask用法介绍FutureTask是JDK并发包为Future接口提供的一个实现,代表一个支持取消操作(cancel)的异步计算任务。它实现了Future接口和Runnable接口,所以既是计算任务对象也是结果对象。它可以提交到线程池中去执行,并且结果直接放在自身这个FutureTask中,不是放在另外一个Future中。我们把FutureTask提交到线程池运行的方法一般是先实...

2019-07-26 10:59:35 2543

原创 Spring分布式事务实现

分布式事务是指操作多个数据库之间的事务,spring的org.springframework.transaction.jta.JtaTransactionManager,提供了分布式事务支持。如果使用WAS的JTA支持,把它的属性改为WebSphere对应的TransactionManager。在tomcat下,是没有分布式事务的,不过可以借助于第三方软件jotm(Java Open Tran...

2019-07-25 14:53:47 387

原创 Java 程序员必备的 15 个框架,前 3 个地位无可动摇!

Java 程序员方向太多,且不说移动开发、大数据、区块链、人工智能这些,大部分 Java 程序员都是 Java Web/后端开发。那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢?今天,栈长我给大家列举了一些通用的、必须掌握的框架,学会这些,20K+ 不是问题。1.Spring毫无疑问,Spring 框架现在是 Java 后端框架家族里面最强大的一个,其拥有 IOC 和 ...

2019-07-25 11:34:58 289

原创 JDK8中JVM堆内存划分

一:JVM中内存的划分JVM中内存通常划分为两个部分,分别为堆内存与栈内存,栈内存主要用于运行线程方法,存放本地暂时变量,存放线程中方法运行时需要的引用对象地址。JVM全部的对象信息都存放在堆内存中。相比栈内存,堆内存所需空间大的多,所以JVM一直通过对堆内存划分不同的功能区块实现对堆内存中对象管理。堆内存不够最常见的错误就是OOM(OutOfMemoryError)栈内存溢出最常...

2019-07-24 17:18:18 354

原创 Java线程池实现原理与技术,看这一篇就够了

01.无限制线程的缺点多线程的软件设计方法确实可以最大限度地发挥多核处理器的计算能力,提高生产系统的吞吐量和性能。但是,若不加控制和管理的随意使用线程,对系统的性能反而会产生不利的影响。一种最为简单的线程创建和回收的方法类似如下:newThread(newRunnable(){@Overridepublicvoidrun(){...

2019-07-24 14:37:50 149

原创 5 个必备有用的开源日志分析工具

监控网络活动可能是一项单调而乏味的工作,但你有充分的理由要这样做。首先,它可以帮助你查找和调查工作站、连网设备和服务器上的可疑登录,同时确定管理员滥用的源头。还可以跟踪软件安装和数据传输,以便实时识别潜在的问题。这些日志还有助于公司遵守适用于欧盟内任何实体的《通用数据保护条例》(GDPR)。因为如果你的网站要在欧盟是可浏览的,那么就必须遵守 GDPR。日志记录(跟踪和分析)应该是任何监控基...

2019-07-24 11:31:53 3148

原创 怎么样用Redis轻松实现秒杀系统

导论曾经被问过好多次怎样实现秒杀系统的问题。因此这里把我设想的实现秒杀系统的价格设计分享出来。供大家参考。秒杀系统的架构设计秒杀系统,是典型的短时大量突发访问类问题。对这类问题,有三种优化性能的思路:写入内存而不是写入硬盘异步处理而不是同步处理分布式处理用上这三招,不论秒杀时负载多大,都能轻松应对。更好的是,Redis能够满足上述三点。因此,用Redis就能轻松实...

2019-07-23 18:01:24 140

空空如也

空空如也

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

TA关注的人

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