- 博客(49)
- 资源 (26)
- 收藏
- 关注
原创 Java 开发手册笔记
Java 开发手册笔记前言阿里规范手册看过之后,实际开发中还是难免按照规范编码,有空还是得反复看下。实际中可以给IDEA安装对应插件扫描代码。文末指出相关插件。编程规约POJO类中布尔类型的变量都不要加is前缀,否则部分框架会引起序列化错误。杜绝不规范的缩写,避免词不达义。if / for / while / switch /do 等保留字与括号之前都必须加空格。运算符左右两边都需...
2019-06-04 08:15:21 323 1
原创 Java并发学习之ArrayBlockingQueue 源码分析
Java并发之ArrayBlockingQueue 源码分析阻塞队列定义阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。阻塞队列常用于生产者和消费者的场景,生产者是向队列...
2019-05-26 18:36:14 267
原创 Elasticsearch 学习之Spring Boot使用 Java Rest client
Elasticsearch 学习之Spring Boot使用 Java Rest clientRest clientElasticsearch Java Rest client 分成两部分:Java Low Level REST Client官方低级别 es 客户端,使用 http 协议与 Elastiicsearch 集群通信,与所有 es 版本兼容。Java High le...
2019-05-18 10:32:23 958
原创 Elasticsearch 学习之入门篇
Elasticsearch 学习之入门篇Elasticsearch 概述Elasticsearch 是一个基于Lucene的搜索服务器,采用Java语言编写,使用lucene构建索引,提供索引搜索功能,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。我们知道Lucene提供的功能已经很强大了,但是Lucene只是一个由Java语言编写的库,对不使用Java语言的开发人员...
2019-05-04 18:08:21 772
原创 Elastcsearch 常用搜索命令
Elastcsearch 常用搜索命令Elasticsearch的核心功能是搜索,有了前面的基础,可以合理地把文档索引到Elasticsearch之中。Elassticsearch RESTful 的查询语句要封装成JSON格式的对象,称之为DSL。搜索机制搜索机制搜索机制解决的是相关度问题,当用户输入一个查询,Elasticsearch通过排序模型计算文档和查询关键词之间的相关度,按照...
2019-05-04 16:47:49 1091
原创 深入JVM学习之VisualVM 工具分析GC
深入JVM学习之VisualVM 工具分析GCVisualVM:多合一故障处理工具VisualVM是到目前为止随JDK发布的功能最强大的运行监视和故障处理程序,并且可以预见在未来一段时间内都是官方主力发展的虚拟机故障处理工具。他除了运行监视,故障处理外,还提供了很多其他方面的功能。如性能分析等VisualVM基于NetBeans平台开发,因此它一开始就具备了插件扩展功能的特性,通过插件扩展支...
2019-05-01 12:52:07 1801
原创 深入JVM学习之内存分配与回收策略
深入JVM学习之内存分配与回收策略前言Java技术体系中所提倡的自动内存管理最终可以归结为自动化的解决了两个问题:给对象分配内存以及回收分配给对象的内存。回收内存之前已经介绍了虚拟机中的垃圾收集器体系以及运作原理,现在来介绍对象的内存分配。GC和FullGC新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕灭的特性,所以Minor GC非常频繁...
2019-05-01 12:51:05 191
原创 深入JVM学习之垃圾收集器
深入JVM学习之垃圾收集器前言如果说垃圾收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的的收集器。这里讨论的是HotSpot虚拟机,Serial收集器Serial收集器...
2019-05-01 12:50:14 240
原创 深入JVM之垃圾收集(GC)算法
深入JVM之垃圾收集(GC)算法前言前面介绍了Java运行数据区域,其中程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭;每一个帧栈中分配多少内存基本上是在类结构确定下来就已知的。这几个区域不需要过多考虑回收的问题,因为方法结束或者线程结束时;内存自然就跟着回收了。而Java堆和方法区则不一样,只有在程序运行期间才能知道会创建哪些对象,这部分的分配和回收都是动态的,垃圾收集所关注...
2019-04-22 00:36:59 188
原创 深入JVM之运行时数据区域
深入JVM之运行时数据区域前言 Java虚拟机在执行Java程序的过程中,会把他所管理的内存区域划分为若干个不同的数据区域,这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机的进程的启动而存在,有些区域则依赖用户线程启动和结束而建立和销毁。程序计数器 程序计数器是一块较小的内存空间,他可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的规范模型里,字节码解释器工作时...
2019-04-22 00:36:02 105
原创 Zookeeper学习之CAP和BASE理论
Zookeeper学习之CAP和BASE理论前言随机分布式的发展,系统变得越来越复杂,于是如何构建一个兼顾可用性和一致性的分布式系统成为了无数个工程师探讨的难题,出现了诸如CAP和BASE这样的分布式系统经典理论。CAP理论2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy L...
2019-03-10 22:23:50 362
原创 ZooKeeper学习之分布式概念和特点
ZooKeeper学习之分布式概念和特点前言随着计算机系统规模变得越来越大,将所有的业务单元集中部署在一个或若干个大型机上的体系结构,已经越来越不能满足当今计算机系统,尤其是大型互联网系统的快速发展,各种灵活多变的系统架构模型层出不穷。分布式的处理方式越来越受到业界青睐–计算机系统正在经历一场前所未有的从集中式向分布式架构的变革。集中式的概念特点在介绍分布式之前,我们先来看下集中式的概念...
2019-03-03 21:56:32 179
原创 Redis深入学习之过期策略
Redis过期策略个人博客Redis深入学习之数据持久化Redis深入学习之5种基本数据类型Redis深入学习之数据持久化前言 我们都知道Redis是一个键值对内存数据库,我们设置键值对时,可以对键值对设置超时时间。所以那些过期了的键值对就需要一种清理策略来清理。需要清理的场景主要有两种,一种是Redis那些设置了超时时间并且已经超时的键值对,此时的键值对失效了需要被清理,这种场景...
2019-01-26 23:47:36 193
原创 Redis深入学习之数据持久化
Redis数据持久化前言 Redis 的数据全部在内存里,之所以需要持久化在硬盘是为了在之后能重用数据,或者是为了防止系统故障、宕机导致内存中的数据全部丢失。另外,存储在Redis中的数据有可能是经过长时间计算得出的,或者有程序正在使用Redis存储的数据进行计算,所以用户会希望自己可以将这些数据存储起来以便之后使用,不需要重新计算了。 Redis提供了两种不同的持久化方法来将数据存储...
2019-01-26 13:27:09 194
原创 Redis深入学习之实现主从和哨兵
redis主从架构主从的优势 单机的 redis,能够承载的 QPS 大概就在上万到几万不等。对于缓存来说,一般都是用来支撑读高并发的。因此架构做成主从(master-slave)架构,一主多从,主负责写,并且将数据复制到其它的 slave 节点,从节点负责读。所有的读请求全部走从节点。这样也可以很轻松实现水平扩容,支撑读高并发。 主从架构除了能够支撑更高的并发量外,还保障了可用性,有...
2019-01-21 01:45:39 215
原创 Redis深入学习之5种基本数据类型
Redis 5种基本数据类型前言 redis平时还是经常使用的,但是只是停留在基本使用上面,5种基本的数据类型基本也只是用了字符串,觉得还是有必要深入学习下Redis,从5种基本数据类型开始。字符串 字符串 string 是 Redis 最简单的数据结构。Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据。不同类型...
2019-01-21 01:43:51 219
原创 markdown插入本地图片小技巧
markdown插入本地图片小技巧个人博客背景 markdown作为一种普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,非常的好用,但是插入本地图片很不方便,接下来我们介绍一种非常实用的上传本地图片的方法。<The rest of contents | 余下全文>插入本地图片的几种方法以下几种方法参考他人博客,末尾回帖出原文地址插...
2019-01-13 11:59:21 46971 16
原创 Spring Cloud Hystrix实现服务短路和服务降级
Spring Cloud Hystrix实现服务短路和服务降级Spring Cloud 服务注册和发现Spring Cloud 服务端高可用Spring Cloud Ribbon实现负载均衡背景 在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖。由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖...
2019-01-13 11:51:24 437
原创 使用Hexo+Github搭建个人博客
前言 2018年终总结就提到要搭建一个个人博客,没想到这么快就完成了,其实使用Hexo+Github搭建博客还是挺方便的,这里记录下搭建过程。<The rest of contents | 余下全文>我的博客(域名还在备案,暂且先通过github地址访问)搭建HexoHexo是高效的静态站点生成框架,基于Node.js。通过 Hexo 你可以轻松地使用 Markdow...
2019-01-07 22:47:47 180
原创 2018 年终终结
2018 年终终结 今天是2019年的第一天,本来在2018年最后一天写年终总结的,结果去深圳和朋友一起跨年了,就想着回来把年终终结补上。 今年(2018)发生了很多事,过完年后过来两个月,趁着工作完成间隔,果断的裸辞上一份工作。刚好赶上跳槽季,今年的工作找的还是很轻松的。五一节前,半个月拿了5个offer(都是传统行业的一些公司,当时还不知道互联网的概念,不得不承认,很失败),由于种种原...
2019-01-01 21:19:02 325 1
原创 Spring Cloud Ribbon实现负载均衡
Spring Cloud Ribbon实现负载均衡负载均衡负载均衡在系统架构中是一个非常重要的角色,在前面大型网站架构学习总结中,可以看到,高可用,伸缩性,性能几个架构要素中,负载均衡都有着很重要的地位,是系统压力缓解,系统扩容的重要手段之一。服务端负载一般来说,我们讲的负载均衡都是讲服务端负载均衡(不论硬负载还是软负载),比较常见的通过Nginx反向代理来实现负载均衡,例如下面图中所示...
2018-12-30 23:20:26 179
原创 Spring Cloud 服务端高可用
Spring Cloud 服务端高可用背景在上一篇文章中,我们学习了基本的服务注册和发现,在微服务架构这样的分布式环境中,,我们要充分考虑发生故障的情况,我们知道Eureka服务端主要是维护客户端实例,所以高可用尤为重要,不可能说一个服务端挂了,导致所有的客户端都不可用,接下来我们就学习下如何让服务端实现高可用。高可用注册中心Eureka Server的设计一开始就考虑了高可用的问题,在E...
2018-12-30 15:59:22 307
原创 Spring Cloud 服务注册和发现
Spring Cloud 服务注册和发现搭建服务注册中心导入maven依赖<parent> <groupId>org.springframework.boot</groupId> <artifactId&
2018-12-30 15:55:54 345
原创 Java并发之AQS用法和源码分析
概念AQS:队列同步器AbstractQueuedSynchronizer(以下简称同步器),是用来构建锁或者其他同步组件的基础框架,许多同步器可以通过AQS很容易的并且高效的构建出来。不仅RenntrantLock和Semaphore是基于AQS构建的,还包括CountDownLatch、ReentrantReadWriteLock、SynchronousQueue和FutureTask。同...
2018-12-23 17:02:07 213
原创 Java构建对象实用技巧之Builder模式
背景 在实际中,我们经常遇到这种场景。在实例化一些JavaBean的时候,需要给很多属性赋值。我们通常的做法是给必要的属性一个一个通过set方法赋值。 实践例如有这样一个用户对象public class UserBean { private String name; private int age; private String sex; ...
2018-12-15 10:40:24 692
原创 Kafka之入门篇
在介绍Kafka之前,我们先介绍发布与订阅消息系统的概念。发布与订阅消息系统数据(消息)的发送者(发布者)不会直接把消息发送给接收者,这是发布与订阅消息的一个特点。发布者以某种方式对消息进行分类,接收者(订阅者)订阅他们,以便接收特定的消息类型。发布与订阅消息一般会有一个broker,也就是发布消息的中心点。 Kafka毫无疑问,Kafka也是一款基于发布与订阅消息的消息...
2018-11-30 23:45:00 388
原创 java并发之原子操作类(AtomicLong源码分析)和非阻塞算法
背景近年来,在并发算法领域的大多数研究都侧重于非阻塞算法,这种算法用底层的原子机器指令(例如比较并发交换指令)代替锁来确保数据在并发访问中的一致性。非阻塞算法被广泛的用于在操作系统和JVM中实现线程/进程调度机制、垃圾回收机制以及锁和其他并发数据结构。与基于锁的方案相比,非阻塞算法在设计和实现上都要复杂的多,但他们在可伸缩性和活跃性上却拥有巨大的优势,由于非阻塞算法可以使多个线程在竞...
2018-11-18 12:05:55 3052
原创 设计模式之观察者模式
观察者模式用简单通俗的说法解释:观察者模式=出版者+订阅者标准定义:观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。通常在观察者模式中有两个角色,主题和观察者,主题和观察者之间的关系如下: 主题:使用此接口注册为观察者,或者把自己从观察者中移除。 具体主题:实现主题接口,除了注册和撤销方法,还是先通知的方法,此方法用于状...
2018-11-17 10:52:45 177
原创 java并发之线程池(ThreadPoolExecutor源码分析)
场景:Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。使用线程池的好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调...
2018-11-04 11:32:56 226
原创 设计模式之策略模式
一直没有养成写博客的习惯,很早就打算通过设计模式来开始博客之旅,后面因为上半年找工作对并发知识缺乏。就学了一阵子以并发相关内容开始写博客了,现在才写了几篇,之后会继续完善。现在在阅读《Head First设计模式》,刚好博客记录下学习过程。都知道设计模式在OO编程中很重要,理解和在实际中运用完全不是同一回事,但是在运用之前我们起码的先学会不是吗?策略模式定义:定义了算法族,分别封装起来,让他们...
2018-10-25 14:03:48 151
原创 Redisson之Semaphore使用记录
最近在公司一个项目需要用到限流,就想到concurrent包下的Semaphore(信号量)。不过实际场景中并不能用,一个原因是项目采用的微服务架构,分布式场景并不适用。第二个场景是限流采用令牌桶算法,每秒钟某个接口限流多少,超过丢弃。 后面实现采用的redis分布式限流方案,每分钟设置一个计数器,计数器一旦达到限流次数,后面的请求被直接挡回。 后面无意中看到有Redisson这个...
2018-10-22 16:23:22 8338 5
原创 大型网站技术架构总结之网站核心架构要素
架构的含义:一种比较通俗的说法是"最高层次的规划,难以改变的决定"这些规划和决定奠定了事物未来发展的方向和最终蓝图。具体到软件架构,系统的各个重要组成部分及其关系构成了系统的架构,这些组成部分可以是具体的功能模块,也可以是非功能的设计和决策,他们相互关联组成一个整体。共同构成软件系统的架构。5个架构要素:性能、可用性、伸缩性、扩展性、安全性架构设计中需要平衡这5个要素之间的关系以实...
2018-10-21 18:59:51 1069
原创 java调用python或者shell脚本
前阵子工作中遇到一个问题,用java执行一个存取过程,花费时间很长(以前的项目,貌似业务操作只能在存取过程中执行),在执行的过程中因为执行时间过长,进程会执行一半就中断了,确认了不是java数据库连接池自动中断,我在本地模拟存取过程(在mysql中休眠),发现不会中断,查看mysql超时参数设置也是大于执行时长的。就不会出现中断操作(感觉还是服务器上的mysql参数设置问题,查看...
2018-09-26 19:38:19 829
原创 java并发之synchronized的实现原理
场景: 在多线程并发编程中synchronized一直是元老级角色,作为最基本的互斥手段,很多人都会称呼它为重量级锁。但是,随着Java SE 1.6对synchronized进行了各种优化之后,有些情况下它就并不那么重了。Java SE 1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。3种形式:先来看下利用synchronize...
2018-09-04 23:37:52 368
原创 java并发之内存模型
背景:在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信。Java...
2018-08-07 08:57:30 234
原创 java并发之死锁篇
在多线程中,我们使用加锁机制来确保线程安全,但如果使用不当,则可能导致死锁。JVM解决死锁问题方面,并不像数据库服务那么强大(数据库系统设计中考虑了检测死锁以及从死锁中恢复),当一组Java线程发生死锁时,"游戏"到此结束,这些线程永远不能再使用了。死锁的含义:当线程A持有锁L并想获得锁M的同时,线程B持有锁M并尝试所得锁L,那么这两个线程将永远的等待下去,这种情况就是最简单的死锁...
2018-07-31 17:19:52 191
原创 git gui 常见使用教程
现在主流版本控制主要有svn和git,毕业后的两家公司都是用的git,在实际开发中,也确实体会到了git确实非常好用,不过git命令行感觉有点不方便,所以一直用的git GUI 实际开发中,这篇文章就讲讲git GUI常用到的一些操作。首先推荐一个git教程(廖雪峰git教程),表示就是看这个教程入门的网址:https://www.liaoxuefeng.com/wik...
2018-06-01 17:01:12 19579
转载 大型跨境电商JVM调优经历
大型跨境电商JVM调优经历此文为转载学习,原文地址:https://juejin.im/post/5b091ee35188253892389683?utm_source=gold_browser_extension前提:某大型跨境电商业务发展非常快,线上机器扩容也很频繁,但是对于线上机器的运行情况,特别是jvm内存的情况,一直没有一个统一的标准来给到各个应用服务的owner。经过618大促之后,和...
2018-05-28 15:36:21 312 1
原创 springBoot集成redis(window)
在springBoot中集成redis(window zip版)解压redis64-3.0.501.zip 即可使用启动redis redis-server.exe redis.windows.conf 启动客户端:redis-cli.exe -h 127.0.0.1(初始redis是无密码的)启动客户端也可以通过redis64-3.0.501(redis解压包)下的redis-cli...
2018-05-14 00:13:19 939
原创 springBoot拦截器中不能注入Bean
最近使用springBoot发现在拦截器中不能注入Bean,但是在controller中又能正常注入。后面网上找了下,解决办法有两种:第一种:将拦截器注册成bean,就能实现注入@Configurationpublic class MyWebAppConfigurer extends WebMvcConfigurerAdapter 将拦截器注册成bean@Bean MyInterceptor ...
2018-05-13 23:39:30 2854
redis分布式锁工具类
2018-09-26
spring-jdbc-5.0.4.RELEASE.jar
2018-04-02
mysql-connector-java-8.0.7-dmr.jar
2018-04-02
spring-beans-5.0.4.RELEASE
2018-04-02
spring-core-5.0.4.RELEASE.jar
2018-03-05
spring-context-5.0.4.RELEASE.jar
2018-03-05
SSH(springmvc)框架整合
2018-03-04
ssm(springMvc)框架整合
2018-03-04
在线电影订票(java SSH实现)
2018-03-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人