自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AUBREY_CR7的博客

一个大二的学生。

  • 博客(27)
  • 收藏
  • 关注

原创 IDEA debug ConcurrentLinkedQueue 的时候踩的坑

背景:最近,在复习JUC的时候调试了一把ConcurrentLinkedQueue的offer方法,意外的发现Idea在debug模式下竟然会 “自动修改” 已经创建的Java对象,当时觉得这个现象很是奇怪,现在把问题的原因以及解决过程记录下来,希望你在调试的时候不要踩坑。调试代码:调试的代码很简单,就是多次调用offer方法,然后观察ConcurrentLinkedQueue的head和tail属性。Queue<String> strings = new Concurrent

2020-05-25 13:35:58 2045 5

原创 使用堆的方式获取数据流中的中位数

题目:设计一个方法,要求这个方法可以不断输出一个数据流中的中位数(数据流中的数字整型并且随机)思想:构建两个小根堆,其中一个小根堆存储的数据相对较小(堆B),另外一个小根堆存储的数据较大(堆A),并且构建两个变量,其中一个存储堆B的最大值,另一个存储堆A的最小值。每次接收一个数字的时候,先与堆A中的最小值比较;如果这个数字大于堆A中的最小值,则存储在堆A中。然后调整堆A和堆B中的数据量,使得他...

2018-08-28 16:32:02 751

转载 高性能网站设计之缓存更新

看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。我不知道为什么这么多人用的都是这个逻...

2018-08-14 20:14:27 546

原创 ThreadLocal内存泄漏

1、ThreadLocal解决的是变量在不同线程间的隔离性,可以理解为线程本地变量,当使用ThreadLocal维护变量的时候,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立的改变自己的副本而不会互相影响。2、ThreadLocal整体上给我的感觉就是,一个包装类。声明了这个类的对象之后,每个线程的数据其实还是在自己线程内部通过threadLocals...

2018-08-07 21:40:29 407

原创 接口、抽象类区别

(一)设计层面1、抽象类是对一种事务的抽象,即就是对类的抽象,包括属性、行为,接口是对类的局部(行为)进行抽象简单的例子:飞机和鸟是不同的事物,但他们有一个共同点就是会飞行,那么在设计的时候,可以将飞机和鸟设计为抽象类,将他们共同的行为就是飞行抽象为一个接口,接口中有飞行的方法,使飞机和鸟分别去实现这个接口。然后至于有不同种类的飞机,比如战斗机,民用机就可以直接继承飞机抽象类2、抽象类...

2018-08-07 09:13:01 236

原创 git操作及fatal: Authentication failed for错误解决

工作中遇到问题:修改erp密码之后,idea使用git克隆代码然后git出现Authentication failed,pull或者push的时候idea也不让你输密码,只是报Authentication failed。idea的配置和代码克隆失败截图如下我的信息:win7+IntelliJ IDEA 2017.2.6+git 2.17.0 1、配置用户信息git co...

2018-08-06 13:04:02 61725 1

原创 volatile

提到volatile,立马涌现出三段很经典的代码,当然也会涉及到JMM第一点:可见性在JMM定义里面有一个主内存,堆内存栈内存什么的都可认为是主内存,每一个线程在执行过程之中,有一个线程自己的内存。实际上不能认为这块就是线程私有的内存,它也有可能是cpu上的缓冲区,这也被JMM称为是线程自己的内存,就是线程存放自己变量的内存。如果有两个cpu在运行两个不同的线程的时候,那么每个cpu上面都...

2018-08-03 00:14:45 353

原创 AbstractQueuedSynchronizer

AbstractQueuedSynchronizer一、简述1、AQS是用来构建锁或者其他同步组件的基础框架2、锁是面向使用者的,它定义了使用者与锁交互的接口(比如可以允许两个线程并行访问),隐藏了实现细节;同步器面向的是锁的实现者,它简化了锁的实现方式,屏蔽了同步状态管理、线程的排队、等待与唤醒等底层操作。锁和同步器很好地隔离了使用者和实现者所需关注的领域。3、同步器的设计是基于...

2018-08-02 13:24:38 225

原创 双重检查锁存在的问题

有时候可能需要推迟一些高开销的对象初始化操作,只有在使用这个对象的时候才去初始化。但是懒汉式的单例模式在多线程环境中是会出现问题的,可以使用synchronized来解决。package safe_singleton;public class SafeLazyInitialization { private static Instance instance; public ...

2018-08-01 00:37:40 746

原创 ReentrantLock

一、与synchronized区别1、API层面:synchronized既可以修饰方法,也可以修饰代码块。 ReentrantLock方法内部、代码块内部使用。2、使用synchronized。如果Thread1不释放,Thread2将一直等待,不能被中断。使用ReentrantLock。如果Thread1不释放,Thread2等待了很长时间以后,可以中断等待,转而去做别的事情。3、...

2018-07-31 21:13:17 258

原创 并发编程中的锁

一、并发与并行1、并发:一个处理器同时处理多个任务,逻辑上的同时发生2、并行:多个处理器或者多核处理器同时处理不同的任务,物理上的同时发生并发是一个人同时吃三个馒头,并行是三个人同时吃三个馒头二、进程与线程进程是操作系统的结构基础,进程也是操作系统进行资源分配的独立单元;一个进程就是一个程序的运行,可将.exe程序看成是一个进程,进程中有很多的子任务,每个子任务对应一个线程,线...

2018-07-31 02:04:19 365

原创 BIO、NIO、AIO

一:BIO1、网络编程的基本模型是C/S模型,即两个进程间的通信。2、服务端提供IP和监听端口,客户端通过连接操作想服务端监听的地址发起连接请求,通过三次握手连接,如果连接成功建立,双方就可以通过套接字进行通信。3、传统的同步阻塞模型开发中,ServerSocket负责绑定IP地址,启动监听端口;Socket负责发起连接操作。连接成功后,双方通过输入和输出流进行同步阻塞式通信。 4...

2018-07-30 13:11:21 330

原创 面向对象的理解

1、面向对象和面向过程的区别和联系都是对软件设计的一种思想,他们之间是相辅相成的。面向过程适合解决简单的事情(不需要协作的事情),比如:开车第一步打火、踩离合、挂挡、踩油门等等。而面向对象适合解决复杂的事情,比如:造车首先会想到车由什么物体组成(发动机、变速箱、底盘),然后造发动机(流水线/工序),同时将造发动机的过程封装起来,可以将这一个工序看成基于面向过程的。2、对面向对象的理解面...

2018-07-27 01:35:00 480

原创 Redis与Memcached对比

1、数据类型支持redis在数据支持上要比memecache多与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多。最为常用的数据类型主要由五种:String、Hash、List、Set和Sorted Set。Redis内部使用一个redisObject对象来表示所有的key和value。redisObject最主要的信息如图所示:...

2018-07-26 11:28:31 271

原创 消息中间件选型

目前开源的消息中间件可谓是琳琅满目,能让大家耳熟能详的就有很多,比如ActiveMQ、RabbitMQ、Kafka、RocketMQ、ZeroMQ等。一:各类消息队列简述:1、ActiveMQ是Apache出品的、采用Java语言编写的完全基于JMS1.1规范的面向消息的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。不过由于历史原因包袱太重,目前市场份额没有后面三种...

2018-07-18 20:38:38 399

原创 ActiveMQ

一:基本概念ActiveMQ 是由 Apache 出品的一款开源消息中间件,旨在为应用程序提供高效、可扩展、稳定、安全的企业级消息通信。它的设计目标是提供标准的、面向消息的、多语言的应用集成消息通信中间件。ActiveMQ 实现了 JMS 1.1 并提供了很多附加的特性,比如 JMX 管理、主从管理、消息组通信、消息优先级、延迟接收消息、虚拟接收者、消息持久化、消息队列监控等等。二:基本组...

2018-07-18 18:43:07 265

原创 redis的高可用之持久化

一:redis高可用概述在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999% 等等)。但是在redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离、快速容灾技术),还需要考虑数据容量的扩展、数据安全不会丢失等。在redis中,实现高可用的技术主要包括持久化、复制、哨兵和集群,下面分别...

2018-07-16 16:00:00 316

原创 redis复制及哨兵

1、shishenm?通过持久化功能,redis保证即使在服务器重启的情况下也不会损失(或损失少量)数据。但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据丢失。为了避免单点故障,通常的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器出现故障,其他服务器依然可以提供服务。为此,redis提供了复制功能,可以实现当一台数据库中的数据更新后,自...

2018-06-21 01:45:03 281

原创 redis持久化(rdb/aof)

一、rdb(redis database):在指定的时间间隔内将内存中的数据集快照写入到本地磁盘,也就是行话讲的snapshot快照,它恢复时是将快照文件直接读到内存中。1、备份:内存到磁盘。恢复:快照文件从磁盘读回到内存。2、redis会单独创建(fork)一个子进程来进行持久化,先将数据写入到一个临时文件(dump.rdb)中,待持久化过程都结束了,在用这个临时文件替换上次持久化好的文件。新的...

2018-06-21 00:26:14 222

原创 keepalived实现Nginx负载均衡的高可用

1、什么是负载均衡高可用nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到...

2018-06-19 12:53:50 379

原创 Nginx的一些应用

一:首先,这个东西是老毛子开发的!所以名字看起来很怪异,至少我是这么觉得。第一个公开版本0.1.0发布于2004年10月4日!二:Nginx是个撒百度百科给出的定义:Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表...

2018-06-18 16:00:28 577 1

原创 redis缓存及集群

一、持久化数据库的缺点:1、平常我们使用的关系型数据库有Mysql、Oracle以及SqlServer等,在开发的过程中,数据库通常都是通过web提供的数据库驱动来连接数据库进行curd操作。那么我们 日常使用的数据库的数据都存储存储在哪里呢?以mysql为例子:打开mysql所在文件夹目录下的的data文件夹,如下所示: 也就是说,我们日常使用的关系型数据中的数据,全部存储在我们...

2018-06-17 15:27:06 666

原创 FastDFS分布式文件系统

一、传统方式:可以将图片放在工程里面,比如说在webapp下创建一个Images文件夹,访问的时候直接访问图片的网址:localhost:8080/工程名/Images/a.jpg 传统方式的问题:且不说分布式,在集群环境中(至少2个tomcat)采用nginx做负载均衡服务器(轮询策略)。问题:用户第一次请求上传图片tomcat1来处理,若用户想查看是否上传成功,ngin...

2018-06-17 02:08:04 406 1

原创 Mybatis分页插件 - PageHelper(spring整合)

如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。原理:在执行sql语句之前,拦截sql语句,拼接limit就可以实现分页插件的使用:第一步:把PageHelper依赖的jar包添加到工程中。第二步:在Mybatis配置xml中配置拦截器插件:&lt...

2018-06-17 00:23:58 254

原创 SOA架构中的dubbo

前言:如果你的系统基于SOA(面向服务)的架构,就必须实现两个 子系统之间的远程通信问题:如何实现子系统之间的远程通信?解决办法:1、WebService:效率不高,基于soap协议,项目中不建议使用。多用于跨语言跨平台之间的通信,比如两个公司之间的通信。2、restful形式的服务:http+json 可以使用springMVC或者cxf 实现,就是一个风格、一种形式(URL中包...

2018-06-16 22:21:11 1202

原创 系统架构演变

     一:之前在项目中都是使用此架构,简单来讲就是三层。表现层、业务层、持久层、数据库。            业务逻辑分层,比如持久层专门对数据库进行操作。            并且该项目属于一个工程,打成一个war包,部署在一个tomcat上,上线。    二:上线之后,进行推广。            随着访问用户越来越多,并发量越来越大。            举个例子:此时系统具有...

2018-06-15 16:46:04 326 1

原创 总结一下最近学的Java设计模式中的代理模式

一、Java中的设计模式1、设计模式是什么?      经查阅相关资料:设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。2、使用设计模式的目的?      为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。二、Java设计模式之代理模式 1、代理模式是什

2017-07-01 23:28:09 687

空空如也

空空如也

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

TA关注的人

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