自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式 --模板方法模式

模板方法模式 – 做面条制作面条抽象类public abstract class BoiledNoodles { public final void cook() { showName(); // 1. 煮开水 this.boiledWater(); // 2. 下面条 this.putNoodles(); // 3. 加鸡蛋 if (needEggs()) {

2021-12-08 14:30:37 76

原创 设计模式--状态模式

状态模式 – AK47状态首先定义状态抽象类状态中含有上下文对象public abstract class AK47State { protected AK47Context ak47Context; public void setAk47Context(AK47Context ak47Context) { this.ak47Context = ak47Context; } /** * 开火 */ public ab

2021-12-07 14:08:31 212

原创 设计模式 --策略模式

策略模式 – 迪迦首先定义策略的抽象 – 战斗形态public interface CombatForm { void fight();}综合战斗形态public class IntegratedCombatForm implements CombatForm { private IntegratedCombatForm() { } private static final IntegratedCombatForm INSTANCE = new Integra

2021-12-06 16:43:52 188

原创 设计模式--访问者模式

访问者模式 – 伍六七离开小鸡岛首先定义国家public abstract class Country { private String name; public Country(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { t

2021-12-06 11:47:42 163

原创 设计模式 -- 观察者模式

观察者模式 – 老师来了首先定义望风的人教室门口望风的人是个观察者,继承Observablepublic class Lookout extends Observable { private String name; public Lookout(String name) { this.name = name; } public void teacherIsComing() { // 1. 观察者自己的行为 Syst

2021-12-06 10:36:17 46

原创 设计模式 --命令模式

命令模式 – 老爹:还有一件事首先定义命令public interface Command { void execute();}成龙public class JackieChan { private List<Command> commandList = new ArrayList<>(); public void addCommand(Command command) { commandList.add(command);

2021-12-06 10:35:30 37

原创 设计模式 -- 迭代器模式

迭代器模式 – 舔狗的悲哀首先定义舔狗对象public class Flatterer { public Flatterer(String name, Integer age) { this.name = name; this.age = age; } private String name; private Integer age; // Getter Setter }其次定义女神及实现public interfa

2021-12-03 17:34:27 48

原创 设计模式 -- 责任链模式

责任链模式 – “偶像”塌房首先定义一个塌房事件public class SurpriseEvent { public SurpriseEvent(String topic, String partyConcerned, String company) { this.topic = topic; this.partyConcerned = partyConcerned; this.company = company; } /**

2021-12-03 16:23:18 450

原创 设计模式 -- 代理模式

1. 静态代理 美国战争美国的战争服务类public class AmericanWarnService { public void fire() { System.out.println("发动美国想要的战争..."); }}美国的战争代理人public class AmericanWarnProxy { public void fire() { beforeFire(); AmericanWarnService ame

2021-12-03 11:52:42 173

原创 设计模式 -- 装饰者模式

装饰者模式1 vae -> oae抽象类public abstract class People { protected abstract String desc(); protected abstract int weight();}vaepublic class Vae extends People { @Override protected String desc() { return "I am vae."; }

2021-12-02 18:00:20 71

原创 设计模式 --工厂模式

Go to 简书1. 简单工厂简单工厂只有一个工厂产品只有一种根据类型去判断生产什么产品工厂生产对象 – 俱乐部public interface FootballClub { void fighting();}俱乐部 1 – 曼联public class ManchesterUnitedClub implements FootballClub{ @Override public void fighting() { System.out.pr

2021-12-02 17:57:57 511

原创 七大设计原则

开闭原则定义:一个软件实体如类、模块和函数应该对扩展开放、对修改关闭用抽象构建框架,用实现扩展细节优点:提高软件系统的可复用性及可维护性依赖倒置原则定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象抽象不应该依赖细节,细节应该依赖抽象针对接口编程,不要针对实现编程优点:可以减少类间的耦合性、提高系统稳定性,提高代码可读性和可维护性,可以降低修改程序造成的风险单一职责原则定义:不要存在多于一个导致类变更的原因一个类/接口/方法只负责一项职责优点:降低类的复杂度、提高类的..

2021-02-09 17:04:11 109 1

原创 浏览器存储介质

Cookie存在于浏览器里,关闭浏览器不会消失。除非过期大小之能在 4K 左右localStorage保存到客户端本地磁盘(永久保存)5M 左右,比较安全sessionStorage数据保存到session对象里,仅存在于会话里...

2020-10-06 16:47:26 75

原创 redis分布式锁和异步队列

redis 五种基本数据类型StringListHashSetSortedSetredis 从海量数据里查询某一固定前缀的 key:keys pattern:查找所有符合给定模式 pattern 的 key。keys一次性返回所有的key键的数量过大会使服务卡顿scan cursor [MATCH pattern] [COUNT count](scan 每次执行都只返回少量元素)scan 是基于游标的迭代器,需要基于上一次的游标,延续之前的迭代过程以0为游标开始一次新的迭代,知道

2020-09-27 14:13:42 423

原创 JMM 笔记

JVM 内存结构 2. Java 内存模型 3. Java 对象模型Java 代码到 CPU 指令不同的 JVM 对 .class 文件有不同的翻译,不同的 CPU 平台的机器指令千差万别;所以在 Java 代码层写的各种Lock,最后依赖的是JVM的具体实现和 CPU 的指令,才能帮我们达到线程安全的效果由于最终效果依赖处理器,不同处理器结果不一样,这样无法保证并发安全,所以需要一个标准,这个标准就是 JMM 。JVM 内存结构 – 和 Java 虚拟机的运行时区域有关线程共.

2020-09-26 23:36:26 53

原创 JMM主内存和本地内存的关系

JMM : Java内存模型,是一种规范Java 作为高级语言,屏蔽了cpu多层缓存这些细节,用 JMM 定义了一套读写内存数据的规范,虽然不再需要关心一级缓存和二级缓存的问题,但是 JMM 抽象了主内存和本地内存的概念主内存和本地内存的关系:JMM 有以下规定:1) 所有的变量都存储在主内存中,同时每个线程也有自己独立的工作内存,工作内存中的变量内容是主内存中的拷贝2) 线程不能直接读写主内存中的变量,而是只能操作自己工作内存中的变量,然后再同步到主内存中3) 主内存是多个线程共享的,但线程间

2020-09-25 17:43:55 899

原创 final

final 修饰指向的引用不能变一、修饰属性1. 修饰普通成员变量1) 在等号后边赋值 2) 构造函数中赋值 3) 在代码块中赋值2. 静态变量1) 在等号右边赋值 2) 在静态代码块中赋值3. 方法中的变量:不要求赋值时机,在使用时间必须赋值二、修饰方法1. 不允许修饰构造方法2. 修饰普通方法不可被重写。 引申:静态方法不能被重写三、修饰类不可被继承把变量写在线程内部 – 栈封闭面试题:答案: true falseString a = “wukong2”;final St

2020-09-14 15:48:24 45

原创 CAS笔记

CASCompareAndSwap 利用 cpu 的特殊指令内存值(V) 预期值(A) 要修改的值(B)应用: 乐观锁、并发容器、原子类 AtomicInteger 加载 UnSafe 工具,UnSafe 工具可以直接操作内存 UnSafe 类是 CAS 的核心类。Java 无法直接访问底层的操作系统,而是通过本地 native 方法来访问 UnSafe 类提供了硬件级别的原子操作 UnSafe 中的 compareAndSwapInt 方法:

2020-09-14 14:53:05 45

原创 Lock 锁

Lock 锁:为什么 synchronize 不够用1) 效率低2) 不够灵活3) 无法知道是否获取到锁lock() 方法不能被中断,死锁时会陷入无限等待tryLock() 超时就放弃lockInterruptibly() 相当于tryLock() 把超时时间设置为无限,在等待锁的过程中,可以被中断锁的可见性保证:happens-before 原则lock 的加解锁和 synchronize 有相同的语义,也就是说,下一个线程加锁后可以看到前一个线程加锁前发生的所有操作锁的分类:

2020-09-11 17:03:29 107

原创 ThreadLocal 可能导致内存泄漏问题

1. ThreadLocalMap.Entry 中的 key(ThreadLocal) 泄漏 Entry 内部类是一个弱引用 extends WeakReference<ThreadLocal<?>> 只被弱引用关联,可以被回收 Value 是强引用,所以可能导致强引用 Thread -> ThreadLocalMap -> Entry(key为null) -> ValueRequestContextHolder D

2020-09-10 12:32:46 58

原创 HashMap处理冲突

HashMap处理冲突 – 拉链法当hashMap产生冲突时,往下链接。ThreadLocalMap采用线性探测法,如果发生冲突就去找下一个空位置,而不是用链表拉链。

2020-09-10 12:31:58 48

原创 ThreadLocal原理

Thread、ThreadLocalMap、ThreadLcoal 对应原理

2020-09-04 00:49:03 47

原创 线程池

线程池里的线程数量设置为多少合适呢?1.CPU密集型(加密、计算hash等):最佳线程数位 CPU 核心数的1-2倍2.耗时 IO 型(读写数据库、文件、网络读写等): 最佳线程数大于 CPU 核心数的很多倍,,以 JVM线程监控显示繁忙情况为依据,保证线程空闲可以衔接上,参考 Brain Goetz 推荐的计算方法线程数 = CPU 核心数 * (1 + 平均等待时间 / 平均工作时间)对比线程池的特点:1. FixedThreadPool : 固定数量线程池2. CacheThreadP

2020-08-30 00:01:33 65

空空如也

空空如也

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

TA关注的人

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