自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 内存屏障(Memory barrier)

内存屏障(Memory barrier)为什么会有内存屏障每个CPU都会有自己的缓存(有的甚至L1,L2,L3),缓存的目的就是为了提高性能,避免每次都要向内存取。但是这样的弊端也很明显:不能实时的和内存发生信息交换,分在不同CPU执行的不同线程对同一个变量的缓存值不同。用volatile关键字修饰变量可以解决上述问题,那么volatile是如何做到这一点的呢?那就是内存屏障,内存屏障是硬件层的概...

2018-04-07 21:22:55 1586

转载 深入并发包 ConcurrentHashMap

前言以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同时在同一数组下用链表表示,造成闭环,导致在get时会出现死循环,所以HashMap是线程不安全的。我们...

2018-04-07 21:16:54 138

转载 Java集合总结

一、集合与数组数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。二、层次关系如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是...

2018-04-07 21:08:10 136

原创 网络协议简介

0x01、TCP/IP 介绍TCP/IP 是用于因特网 (Internet) 的通信协议。计算机通信协议(Computer Communication Protocol)计算机通信协议是对那些计算机必须遵守以便彼此通信的的规则的描述。什么是 TCP/IP?TCP/IP 是供已连接因特网的计算机进行通信的通信协议。TCP/IP 指传输控制协议/网际协议(Transmission Control Pr...

2018-04-07 20:44:17 202

转载 对spring的理解

1、spring原理       内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。        Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也...

2018-04-07 20:10:01 136

转载 你真的理解了MVC, MVP, MVVM吗?

大概是二三十年前, 人类逐渐从命令行界面时代走出来,进化到了GUI时代。注: GUI(Graphic User Interface),即图形用户接口。(一个命令行程序)(一个带有图形界面的桌面应用程序 ,自己画的,有点丑啊)每当人类努力地开发新的桌面GUI程序的时候, 至少要搞定下面几类工作:1. 界面(以及界面中元素的)布局。这是一件挺费劲的工作, 要尽可能地美观漂亮,要不然就卖不出去。2. 界...

2018-04-07 19:26:08 96

转载 Java中IO涉及的设计模式

涉及到的类主要有FileInputStream ,InputStreamReader ,BufferedReader 。涉及到的设计模式主要有适配器模式以及装饰者模式。下面分别展开介绍。一、装饰者模式以及适配器模式的介绍装饰者模式:动态地将责任附加到对象上,若要扩展功能,装饰者模提供了比继承更有弹性的替代方案。 通俗的解释:装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰...

2018-04-07 19:15:10 635

转载 Java中的CAS

在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制,但是volatile不能保证原子性。因...

2018-04-07 17:24:03 110

转载 synchronized和lock的区别

技术点:1、线程与进程:在开始之前先把进程与线程进行区分一下,一个程序最少需要一个进程,而一个进程最少需要一个线程。关系是线程–>进程–>程序的大致组成结构。所以线程是程序执行流的最小单位,而进程是系统进行资源分配和调度的一个独立单位。以下我们所有讨论的都是建立在线程基础之上。2、Thread的几个重要方法:我们先了解一下Thread的几个重要方法。a、start()方法,调用该方法开...

2018-04-07 17:03:42 508 1

原创 Java并发编程:volatile关键字理解

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下...

2018-04-06 20:47:16 106

原创 算法时间和空间复杂度分析

原文出自:https://blog.csdn.net/yangwei282367751/article/details/52426911相信学习编程的同学,或多或少都接触到算法的时间复杂度和空间复杂度了,那我来讲讲怎么计算。0x01、计算时间复杂度基本步骤1 、找出算法中的基本语句;  算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。2、 计算基本语句的执行次数的数量级;  只...

2018-04-06 11:00:52 313

原创 理解单例模式

转 https://biezhi.me/article/how-to-correctly-write-singleton-pattern.html单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章...

2018-04-05 23:05:00 119

原创 常用设计模式引用场景

常用设计模式引用场景:0x01、单例模式​ 允许自由创建每个类没有实际意义,还有可能造成系统性能下降​ 优势:减少创建java实例带来的系统开销​ 便于系统跟踪某个实例的生命周期,实例状态等0x02、工厂模式:​ 工厂模式又分简单工厂模式,抽象工厂模式​ 使用简单工厂模式的优势是:让对象的调用者和对象创建过程分离,当对象调用者需要对象时,直接向工厂请...

2018-04-05 19:22:40 293

原创 代理模式

代理模式为其他对象提供一种代理以控制对这个对象的访问(可以详细控制访问某个对象的方法, 在调用这个方法[前/后]做[前/后]置处理, 从而实现将统一流程放到代理类中处理).我们书写执行一个功能的函数时, 经常需要在其中写入与功能不是直接相关但很有必要的代码(如日志记录,事务支持等);这些枝节性代码虽然是必要的,但它会带来以下麻烦:枝节性代码游离在功能性代码之外,它不是函数的目的,这是对OO是一种破...

2018-04-05 19:20:08 85

原创 你应该知道的RPC原理

原文来自:http://blog.jobbole.com/92290/在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示。这些程序的特点是服务消费方和服务提供方是本地调用关系。而一旦踏入公司尤其是大型互联网公司就会发现,公司的系统都由成千上万大大小小的服务组成,各服务部署在不同的机器上,由不同的团队负责。这时就会遇到两个问题:1)要搭建一个新服务,免不了需要...

2018-04-05 19:17:24 107

原创 设计模式的分类与设计原则

0x01、设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。其实还有两类:并发型模式...

2018-04-05 19:14:13 88

原创 什么是线程安全

0x01、产生线程不安全的原因在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源。如,同一内存区(变量,数组,或对象)、系统(数据库,web services等)或文件。实际上,这些问题只有在一或多个线程向这些资源做了写操作时才有可能发生,只要资源没有发生变化,多个线程读取相同的资源就是安全的。0x02、Java中实现线程安全的方法在Java多线程编程当中,提供了多种实现J...

2018-04-05 12:58:56 176

原创 Java中数据存储

0x01、Java中数据存储的位置 1、寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2、 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。) 3、堆:存放所有new出来的对象。 4、静态域:存放静态成员(static定义的) 5、常量池:存放字符串常量和基本类型...

2018-04-05 12:35:20 150

原创 Java常见排序

一、排序的选择和性能稳定性:就是能保证排序前两个相等的数据其在序列中的先后位置顺序与排序后它们两个先后位置顺序相同。再简单具体一点,如果A i == A j,Ai 原来在 Aj 位置前,排序后 Ai  仍然是在 Aj 位置前。  不稳定:简单选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法  稳定:冒泡排序、直接插入排序、二分法插入排序,归并排序和基数排序都是稳定的排序算法。平均时间复杂度 ...

2018-04-05 12:06:16 132

原创 volatile和synchronized介绍

0x01、volatile和synchronized特点首先需要理解线程安全的两个方面:执行控制和内存可见。执行控制:控制代码执行(顺序)及是否可以并发执行。内存可见:控制的是线程执行结果在内存中对其它线程的可见性。根据Java内存模型的实现,线程在具体执行时,会先拷贝主存数据到线程本地(CPU缓存),操作完成后再把结果从线程本地刷到主存。synchronized、volatile关键字介绍syn...

2018-04-05 11:38:46 111

原创 理解Java内存模型

深入理解Java内存模型JMM​ Java内存模型即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。​ 如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。原始的Ja...

2018-04-05 11:33:00 88

空空如也

空空如也

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

TA关注的人

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