SF
Java总社区
Java总社区
注册登录
关注博客
注册登录
主页
关于
RSS
结合案例深入解析策略模式
李红
2019-06-13
阅读 2 分钟
1.6k
一、基本概念策略模式是行为型设计模式。 其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。 策略模式使得算法可以在不影响到客户端的情况下发生变化。 二、结构下面是基本结构: 三类角色: 环境(Context)角色:持有一个Strategy的引用。抽象策略(Strategy)角色:这是一个...
类图的6大关系详解
李红
2019-06-10
阅读 2 分钟
1.2k
类图以下类图使用 PlantUML 绘制,更多语法及使用请参考:[链接] 。 泛化关系 (Generalization)用来描述继承关系,在 Java 中使用 extends 关键字。 {代码...} 实现关系 (Realization)用来实现一个接口,在 Java 中使用 implements 关键字。 {代码...} 聚合关系 (Aggregation)表示整体由部分组成,但是整体和部分不是强...
深入理解Session和Cookie的区别
李红
2019-06-05
阅读 13 分钟
1.9k
Cookie简介Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。 目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。
Java内功心法,创建型设计模式包括哪些
李红
2019-06-03
阅读 14 分钟
852
单例(Singleton) Intent确保一个类只有一个实例,并提供该实例的全局访问点。 Class Diagram使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。 ImplementationⅠ 懒汉式-线程不安全以下实现中,私...
Java面试必问通信框架NIO,原理详解
李红
2019-05-31
阅读 17 分钟
1.2k
NIO流与块通道与缓冲区缓冲区状态变量文件 NIO 实例选择器套接字 NIO 实例内存映射文件NIO与IO对比PathFilesNIO新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的,弥补了原来的 I/O 的不足,提供了高速的、面向块的 I/O。
Java线程安全面试题,你真的了解吗?
李红
2019-05-30
阅读 5 分钟
1.5k
不可变不可变(Immutable)的对象一定是线程安全的,不需要再采取任何的线程安全保障措施。只要一个不可变的对象被正确地构建出来,永远也不会看到它在多个线程之中处于不一致的状态。多线程环境下,应当尽量使对象成为不可变,来满足线程安全。
Java并发编程,深度探索J.U.C - AQS
李红
2019-05-29
阅读 3 分钟
969
维护了一个计数器 cnt,每次调用 countDown() 方法会让计数器的值减 1,减到 0 的时候,那些因为调用 await() 方法而在等待的线程就会被唤醒。
Java原子操作类,你知道多少?
李红
2019-05-28
阅读 7 分钟
1.4k
原子操作类简介由于synchronized是采用的是悲观锁策略,并不是特别高效的一种解决方案。 实际上,在J.U.C下的atomic包提供了一系列的操作简单,性能高效,并能保证线程安全的类去 更新基本类型变量,数组元素,引用类型以及更新对象中的字段类型。 atomic包下的这些类都是采用的是乐观锁策略去原子更新数据,在Java中则...
Java并发容器,底层原理深入分析
李红
2019-05-25
阅读 5 分钟
1.2k
ConcurrentHashMap ConcurrentHashMap底层具体实现 JDK 1.7底层实现 将数据分为一段一段的存储,然后给每一段数据配一把锁, 当一个线程占用锁访问其中一个段数据时,其他段的数据也能被其他线程访问。 ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。 其中Segment 实现了 ReentrantLock,所以Segment是...
Java并发编程,互斥同步和线程之间的协作
李红
2019-05-24
阅读 6 分钟
1.3k
互斥同步和线程之间的协作互斥同步Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问,第一个是 JVM 实现的 synchronized,而另一个是 JDK 实现的 ReentrantLock。
Java并发编程,Condition的await和signal等待通知机制
李红
2019-05-23
阅读 7 分钟
1.8k
Condition简介Object类是Java中所有类的父类, 在线程间实现通信的往往会应用到Object的几个方法: wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll() 实现等待/通知机制,同样的, 在Java Lock体系下依然会有同样的方法实现等待/通知机制。 从整体上来看Object的wait和notify/notify是与...
Java并发编程,深入理解ReentrantLock
李红
2019-05-22
阅读 3 分钟
1.1k
ReentrantLock简介ReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁, 支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞。 ReentrantLock还支持公平锁和非公平锁两种方式。 那么,要想完完全全的弄懂ReentrantLock的话, 主要也就是ReentrantLock...
Java面试题,深入理解final关键字
李红
2019-05-21
阅读 7 分钟
2.3k
final关键字final的简介final可以修饰变量,方法和类,用于表示所修饰的内容一旦赋值之后就不会再被改变,比如String类就是一个final类型的类。
Java并发编程,3分分钟深入分析volatile的实现原理
李红
2019-05-20
阅读 4 分钟
1.2k
volatile原理volatile简介Java内存模型告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理。 线程在工作内存进行操作后何时会写到主内存中? 这个时机对普通变量是没有规定的,而针对volatile修饰的变量给Java 虚拟机特殊的约定,线程对 volatile变量的修改会立...
一篇文章带你解析,乐观锁与悲观锁的优缺点
李红
2019-05-18
阅读 3 分钟
3.6k
乐观锁总是假设最好的情况,每次去读数据的时候都认为别人不会修改,所以不会上锁, 但是在更新的时候会判断一下在此期间有没有其他线程更新该数据, 可以使用版本号机制和CAS算法实现。 乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。 在Java中jav...
Java高并发实战,锁的优化
李红
2019-05-17
阅读 3 分钟
1.3k
自旋锁互斥同步进入阻塞状态的开销都很大,应该尽量避免。在许多应用中,共享数据的锁定状态只会持续很短的一段时间。自旋锁的思想是让一个线程在请求一个共享数据的锁时执行忙循环(自旋)一段时间,如果在这段时间内能获得锁,就可以避免进入阻塞状态。
BAT经典面试题,深入理解Java内存模型JMM
李红
2019-05-16
阅读 5 分钟
1.4k
Java 内存模型Java 内存模型(JMM)是一种抽象的概念,并不真实存在,它描述了一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段、静态字段和构成数组对象的元素)的访问方式。试图屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。
Java并发编程的艺术,解读并发编程的优缺点
李红
2019-05-15
阅读 3 分钟
1.1k
并发编程的优缺点使用并发的原因多核的CPU的背景下,催生了并发编程的趋势,通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升。
Java虚拟机,类文件结构深度解析
李红
2019-05-14
阅读 4 分钟
891
Java类文件结构Java虚拟机不和包括Java在内的任何语言绑定,只与 "Class文件" 这种特定的二进制文件所关联, Class文件中包含了Java虚拟机指令集合符号表以及若干其它辅助信息。 Java虚拟机作为一个通用的、机器无关的执行平台,任何其他语言都可以将其作为语言的产品交付媒介。
Java虚拟机内存分配与回收策略
李红
2019-05-13
阅读 2 分钟
1.1k
内存分配与回收策略Minor GC 和 Full GCMinor GC:发生在新生代上,因为新生代对象存活时间很短,因此 Minor GC 会频繁执行, 执行的速度一般也会比较快。
老生常谈Java虚拟机垃圾回收机制(必看篇)
李红
2019-05-12
阅读 7 分钟
803
程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收。
开发中滥用面向对象,你是否违背了编程原则
李红
2019-05-09
阅读 8 分钟
920
问题原因面向对象程序的一个最明显特征就是:少用 switch 和 case 语句。从本质上说,switch 语句的问题在于重复(if 序列也同样如此)。你常会发现 switch 语句散布于不同地点。如果要为它添加一个新的 case 子句,就必须找到所有 switch语句并修改它们。面向对象中的多态概念可为此带来优雅的解决办法。
JVM运行时数据区域
李红
2019-05-08
阅读 7 分钟
1.4k
Java 虚拟机栈每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。 从方法调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。 对于执行引擎来说,活动线程中,只有栈顶的栈帧是有效的,称为当前栈帧,这个栈帧所关联的方法称为当前方法。 执行引擎...
大型网站背后的高性能系统架构设计
李红
2019-05-06
阅读 3 分钟
833
响应时间 - 响应时间(RT)是指从客户端发一个请求开始计时,到客户端接收到从服务器端返回的响应结果结束所经历的时间,响应时间由请求发送时间、网络传输时间和服务器处理时间三部分组成。并发数 - 系统同时处理的请求、事务数。吞吐量 - TPS(每秒事务数)、HPS(每秒 HTTP 请求数)、QPS(每秒查询数)。性能计数器 - 系统负...
如何保证网站的安全架构,不被黑客攻击
李红
2019-05-05
阅读 5 分钟
937
1.1. 跨站脚本攻击(XSS)概念跨站脚本攻击(Cross-Site Scripting, XSS),是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了 HTML 以及用户端脚本语言。
网站的可扩性展架构
李红
2019-04-30
阅读 2 分钟
850
扩展性(Extensibility) - 指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。表现在系统基础设施稳定不需要经常变更,应用之间较少依赖和耦合,对需求变更可以敏捷响应。它是系统架构设计层面的开闭原则(对扩展开放、对修改关闭),架构设计考虑未来功能扩展,当系统增加新功能时,不需要对现有系统的...
大型网站的可伸缩性架构如何设计?
李红
2019-04-29
阅读 3 分钟
790
1.2. 单一功能通过集群规模实现伸缩将不同功能分离部署可以实现一定程度的伸缩性,但是随着网站的访问量逐步增加,即使分离到最小粒度的独立部署,单一的服务器也不能满足业务规模的要求。因此必须使用服务器集群,即将相同服务部署在多态服务器上构成一个集群整体对外提供服务。
大型互联网架构概述,看完文章又涨知识了
李红
2019-04-28
阅读 6 分钟
1.6k
大型网站系统的特点 高并发、大流量高可用海量数据用户分布广泛,网络情况复杂安全环境恶劣需求快速变更,迭代频繁渐进式发展 大型网站架构演化历程 2.1. 初始阶段架构问题:网站运营初期,访问用户少,一台服务器绰绰有余。 特征:应用程序、数据库、文件等所有的资源都在一台服务器上。 描述:通常服务器操作系统使用 ...
支撑千万级,大型电商分布式架构解析
李红
2019-04-26
阅读 7 分钟
3.5k
大型分布式网站架构概述 1.1. 大型网站的特点用户多,分布广泛 大流量,高并发 海量数据,服务高可用 安全环境恶劣,易受网络攻击 功能多,变更快,频繁发布 从小到大,渐进发展 以用户为中心 免费服务,付费体验 1.2. 大型网站架构目标高性能:提供快速的访问体验。 高可用:网站服务一直可以正常访问。 可伸缩:通过硬...
面试官问分布式技术面试题,不知所措怎么办?
李红
2019-04-25
阅读 11 分钟
1.6k
分布式缓存 1.1. Redis 有什么数据类型?分别用于什么场景? What Redis data structures look like 1.2. Redis 的主从复制是如何实现的?从服务器连接主服务器,发送 SYNC 命令;主服务器接收到 SYNC 命名后,开始执行 BGSAVE 命令生成 RDB 文件并使用缓冲区记录此后执行的所有写命令;主服务器 BGSAVE 执行完后,向所...
1
(current)
2
3
下一页
1
(current)
下一页