自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java 虚拟机对锁优化所做的努力

1、 锁偏向锁偏向是一种针对加锁操作的优化手段。如果一个线程获得了锁,那么锁就进入偏向模式。当这个线程再次请求锁时,无须再做任何同步操作。这样就节省了大量有关锁申请的操作,从而提高了程序性能。因此,对于几乎没有锁竞争的场合,偏向锁有比较红啊的优化效果,因为连续多次极有可能是同一个线程请求相同的锁。而对于锁竞争比较激烈的场合,其效果不佳。因为在竞争激烈的场合,最有可能的情况是每次都是不同...

2018-08-15 10:34:05 156

原创 Java面试常问计算机网络问题

GET 和 POST 的区别 GET请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:/test/demo_form.asp?name1=value1&name2=value2 GET 请求可被缓存 GET 请求保留在浏览器历史记录中 GET 请求可被收藏为书签 GET 请求不应在处理敏感数据时使用 GET 请求有...

2018-08-15 10:20:26 620

原创 搞懂 HashSet & LinkedHashSet 源码 以及集合常见面试题目

Set 集合概述由于本篇文章主要叙述 Set 容器以及和 Map 容器之间关系,我们只需要关注上述集合图谱中 Set 部分。可以看出 Set 主要的实现类有 HashSet 和 TreeSet 以及没有画出的 LinkedHashSet。其中 HashSet 的实现依赖于 HashMap, TreeSet 的实现依赖于 TreeMap,LinkedHashSet 的实现依赖于 Linke...

2018-07-27 17:06:45 638

原创 双机热备方案及双机热备软件选择

1 什么是双机热备方案企事业机构的信息化建设已经在随着社会建设的不断推进而改进和创新。众企事业机构的决策层也愈发重视企事业机构的信息化,不同程度的运营和发展着自身的业务信息系统。但是日趋普遍的业务信息系统在为企事业机构带来利益的同时,也存在着一个不容忽视的隐患——越来越多的业务依赖于业务信息系统。如果运行着关键业务信息系统的服务器发生宕机或是因为不可控的原因而停止,从而导致整个企事业机构的信息...

2018-07-27 16:54:19 2000

原创 如何解决秒杀的性能问题和超卖的讨论

进入正文前先说一点个人感受,之前看淘宝的ppt感觉都懂了,等到自己出解决方案的时候发现还是有很多想不到的地方其实都没懂,再次验证了“细节是魔鬼”的理论。并且一个人的能力有限,只有大家一起讨论才能想的更周全,更细致。好了,闲话少说,下面进入正文。一、秒杀带来了什么?秒杀或抢购活动一般会经过【预约】【抢订单】【支付】这3个大环节,而其中【抢订单】这个环节是最考验业务提供方的抗压能力的。抢订...

2018-07-27 16:49:14 171

原创 谈谈我对Spring IOC的理解

学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。一、分享Iteye的开涛对Ioc的精彩讲解  首先要分享的是Iteye的开涛这位技术牛人对Spr...

2018-07-27 16:44:24 252

原创 一个用消息队列的人,不知道为啥用,这就有点尴尬

0 为什么写这篇文章?博主有两位朋友分别是小A和小B:小A,工作于传统软件行业(某社保局的软件外包公司),每天工作内容就是和产品聊聊需求,改改业务逻辑。再不然就是和运营聊聊天,写几个SQL,生成下报表。又或者接到客服的通知,某某功能故障了,改改数据,然后下班部署上线。每天过的都是这种生活,技术零成长。小B,工作于某国企,虽然能接触到一些中间件技术。然而,他只会订阅/发布消息。通俗点说,...

2018-07-27 16:41:17 480

原创 深入解读RabbitMQ工作原理及Java中简单使用

RabbitMQ简介在介绍RabbitMQ之前实现要介绍一下MQ,MQ是什么?MQ全称是Message Queue,可以理解为消息队列的意思,简单来说就是消息以管道的方式进行传递。RabbitMQ是一个实现了AMQP(Advanced Message Queuing Protocol)高级消息队列协议的消息队列服务,用Erlang语言的。使用场景在我们秒杀抢购商品的时候,系统会...

2018-07-27 16:35:57 1567

原创 分布式之MQ复习精讲

为什么写这篇文章?博主有两位朋友分别是小A和小B:1.小A,工作于传统软件行业(某社保局的软件外包公司),每天工作内容就是和产品聊聊需求,改改业务逻辑。再不然就是和运营聊聊天,写几个SQL,生成下报表。又或者接到客服的通知,某某功能故障了,改改数据,然后下班部署上线。每天过的都是这种生活,技术零成长。2.小B,工作于某国企,虽然能接触到一些中间件技术。然而,他只会订阅/发布消息。通俗点...

2018-07-27 16:32:18 158

原创 springboot 完整企业项目搭建实记

这里给自己定一个该框架搭建完成的目标,如下 : 框架要求功能: - 处理http/json 请求 - 日志记录 - 持久化 - 数据源,事务控制 - 定时任务 - 视图模版 搭建环境: - 编译器:idea 2016.2.4 - Maven : maven3.0 - JDK: java7 - 系统: mac OS 10.10.4 - 数据库: mysql5.6...

2018-07-27 16:27:13 582

转载 SpringMVC工作原理

SpringMVC的工作原理图:  SpringMVC流程  用户发送请求至前端控制器DispatcherServlet。 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给Dispatcher...

2018-07-27 16:11:45 134

原创 SpringBoot启动流程解析

写在前面:由于该系统是底层系统,以微服务形式对外暴露dubbo服务,所以本流程中SpringBoot不基于jetty或者tomcat等容器启动方式发布服务,而是以执行程序方式启动来发布(参考下图keepRunning方法)。 本文以调试一个实际的SpringBoot启动程序为例,参考流程中主要类类图,来分析其启动逻辑和自动化配置原理。 总览:上图为SpringBoot启...

2018-07-27 16:06:11 145

转载 Java虚拟机的Heap监狱

在Java虚拟机中,我是一个位高权重的大管家,他们都很怕我,尤其是那些Java 对象,我把他们圈到一个叫做Heap的“监狱”里,严格管理,生杀大权尽在掌握。中国人把Stack翻译成“栈”,把Heap翻译成“堆”, 还有人会把Stack翻译成“堆栈”,唉,真不知道他们是怎么想的, 不过这么多年都过来了,你们明白就好。碰巧我会对Heap中的Java 对象做垃圾回收,这个“堆”总是让我联想到垃圾...

2018-07-24 16:21:15 172

原创 细思极恐-你真的会写Java吗

文章核心其实,本不想把标题写的那么恐怖,只是发现很多人干了几年java以后,都自认为是一个不错的java程序员了,可以拿着上万的工资都处宣扬自己了,写这篇文章的目的并不是嘲讽和我一样做java的同行们,只是希望读者看到此篇文章后,可以和我一样,心平气和的争取做一个优秀的程序员。讲述方向由于一直从事移动互联网相关工作,java开发中经常和移动端打交道或者做一些后端的工作,所以本篇文章更可...

2018-07-24 15:54:39 326

原创 详解 equals() 方法和 hashCode() 方法

前言 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码。equals()和hashCode()都不是final方法,都可以被重写(overwrite)。 本文介绍了2种方法在使用和重写时,一些需要注意的问题。 一、equal()方法 Object类中equals()方法实现如下:...

2018-07-24 15:50:44 125

转载 对高并发流量控制的一点思考

 前言:在实际项目中,曾经遭遇过线上5W+QPS的峰值,也在压测状态下经历过10W+QPS的大流量请求,主要就是自己对高并发流量控制的一点思考。应对大流量的一些思路首先,我们来说一下什么是大流量?大流量,我们很可能会冒出:TPS(每秒事务量),QPS(每秒请求量),1W+,5W+,10W+,100W+...。其实并没有一个绝对的数字,如果这个量造成了系统的压力,影响了系统的性...

2018-07-24 15:48:18 320

原创 活跃性(死锁、饥饿、活锁)

锁顺序死锁我们知道,加锁是为了保证线程安全性而做的同步操作,而过度的加锁可能导致各个线程彼此依赖别的线程已经持有的锁。先上一段代码瞅瞅:public class DeadLockDemo {    public static void main(String[] args) {        Object lock1 = new Object();        Object lock2 = ne...

2018-07-05 16:54:55 2740 2

原创 线程间通信(上) 之wait/notify机制

线程间通信如果一个线程从头到尾执行完也不和别的线程打交道的话,那就不会有各种安全性问题了。但是协作越来越成为社会发展的大势,一个大任务拆成若干个小任务之后,各个小任务之间可能也需要相互协作最终才能执行完整个大任务。所以各个线程在执行过程中可以相互通信,所谓通信就是指相互交换一些数据或者发送一些控制指令,比如一个线程给另一个暂停执行的线程发送一个恢复执行的指令,下边详细看都有哪些通信方式。volat...

2018-07-05 16:46:38 289

原创 设计线程安全的类

设计线程安全的类前边我们对线程安全性的分析都停留在一两个可变共享变量的基础上,真实并发程序中可变共享变量会非常多,在出现安全性问题的时候很难准确定位是哪块儿出了问题,而且修复问题的难度也会随着程序规模的扩大而提升(因为在程序的各个位置都可以随便使用可变共享变量,每个操作都可能导致安全性问题的发生)。比方说我们设计了一个这样的类:public class Increment {    private...

2018-07-05 16:44:29 355

原创 java并发编程之原子性操作

线程风险上头一直在说以线程为基础的并发编程的好处了,什么提高处理器利用率啦,简化编程模型啦。但是砖家们还是认为并发编程是程序开发中最不可捉摸、最诡异、最扯犊子、最麻烦、最恶心、最心烦、最容易出错、最不符合社会主义核心价值观的一个部分~ 造成这么多最的原因其实很简单:进程中的各种资源,比如内存和I/O,在代码里以变量的形式展现,而某些变量在多线程间是共享、可变的,共享意味着这个变量可以被多个线程同时...

2018-07-05 16:43:26 7920 4

转载 负载均衡基础知识

一、什么是负载均衡? 互联网早期,业务流量比较小并且业务逻辑比较简单,单台服务器便可以满足基本的需求;但随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台机器的性能问题以及单点问题凸显了出来,因此需要多台机器来进行性能的水平扩展以及避免单点故障。但是要如何将不同的用户的流量分发到不同的服务器上面呢? 早期的方法是使用DNS做负载,通过给客户端解析不同的IP地址,让客户端的流量直接到达...

2018-07-04 17:50:57 128

翻译 java设计模式

java设计模式-观察者模式基本概念:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。观察者模式又叫发布-订阅(Publish/Subscribe)模式。UML结构图上图是Observer 模式的结构图,让我们可以进行更方便的描述:Subject类:它把所有对观察者对象的引用保存在一个聚集里,每...

2018-07-04 17:44:15 121

原创 MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

今天讲解一下如何使用MyBatis对users表执行CRUD操作。本文中使用到的测试环境是上一篇博文中的测试环境。一、使用MyBatis对表执行CRUD操作——基于XML的实现1、定义sql映射xml文件  userMapper.xml文件的内容如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-...

2018-07-04 14:59:52 306

原创 【深入学习Redis】持久化

前言在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化、复制(及读写分离)、哨兵、以及集群。本文将先说明上述几种技术分别解决了Redis高可用的什么问题;然后详细介绍Redis的持久化技术,主要是RDB和AOF两种持久化方案;在介绍RDB和AOF方案时,不仅介绍其作用及操作方法,同时介绍持久化实现的一些原理细节及需要注意的问题。最后,介绍在实...

2018-07-04 14:43:57 129

原创 SpringBoot 使用 Redis 缓存

1、pom.xml引入jar包,如下:<dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-data-redis</artifactId></dependency>2、修改项目启动类,增加...

2018-07-04 14:35:10 208

原创 RabbitMQ之消息确认机制(事务+Confirm)

概述在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的消息丢失,除此之外我们还会遇到一个问题,当消息的发布者在将消息发送出去之后,消息到底有没有正确到达broker代理服务器呢?如果不进行特殊配置的话,默认情况下发布操作是不会返回任何信息给生产者的,也就是默认情况下我们的生产者是不知道消息有没有正确到达broker的,如果在消息到达broker之前已经丢失的话...

2018-07-04 14:28:06 505

空空如也

空空如也

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

TA关注的人

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