Java基础
文章平均质量分 82
逆风GLORY
Stay Hungry, Stay Foolish. – Steve Jobs
展开
-
ConcurrentHashMap实现线程安全的底层原理
JDK1.8之前版本:分段加锁会将HashMap数组分成小数组,每个小数组对应于一个锁;即 线程1更新了数组1[5],而线程2更新了数组2[20],是可以同步更新的。JDK1.8进行了优化:减少锁的粒度还是一个数组,对数组中每个元素进行加锁,采取的是CAS策略。...原创 2020-11-04 11:20:12 · 201 阅读 · 0 评论 -
Redis: 缓存过期、缓存雪崩、缓存穿透、缓存击穿(热点)、缓存并发(热点)、多级缓存、布隆过滤器
写的很好,记录一下:https://www.cnblogs.com/think90/p/11436764.html转载 2020-12-03 18:23:02 · 120 阅读 · 0 评论 -
Java 程序中的指令重排
Java中有两个编译期:1、编译期:调用 javac 命令将Java代码编译成Java字节码;2、运行期:JIT 编译器将字节码编译成机器码。指令重排指令重排是指在程序执行过程中, 为了性能考虑, 编译器和CPU可能会对指令重新排序。...原创 2020-11-19 17:31:18 · 555 阅读 · 0 评论 -
可见性涉及的底层硬件原理
目录基础概念可见性问题MESI 协议同步实现flush处理器缓存refresh处理器缓存基础概念【摘自网络】寄存器:(register)寄存器是 CPU 内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。它的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。 高速缓 存:(Cache)其原始意义是指存取速度比一般随机存取记忆体(RAM)来得快的一种RA原创 2020-11-19 16:07:14 · 402 阅读 · 0 评论 -
Java两种动态代理JDK动态代理和CGLIB动态代理
JDK动态代理由于代理的对象是动态的,所以叫动态代理,而不像静态代理方式写死代理对象和被代理类,不灵活。JDK动态代理基于拦截器和反射来实现。JDK代理是不需要第三方库支持的,只需要JDK环境就可以进行代理,使用条件:1)必须实现InvocationHandler接口;2)使用Proxy.newProxyInstance产生代理对象;3)被代理的对象必须要实现接口;源码代理步骤:1)通过实现InvocationHandler接口来自定义自己的InvocationHandler转载 2020-11-10 15:07:29 · 280 阅读 · 0 评论 -
java内存模型
java内存模型(Java Memory Model,JMM)是java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现java程序在各种不同的平台上都能达到内存访问的一致性。线程1-> read-> load-> use-> assign-> store-> write;线程2-> read-> load-> use-> assign-> store-> write;原创 2020-11-04 17:31:06 · 109 阅读 · 0 评论 -
HashMap的一些面试点
数据结构数组Hash算法优化static final int hash(Object key){ int h; return if(key==null)?0:(h=key.hashCode())^(h>>>16)}【优化】对每个hash值,让高低十六位进行了异或运算,让它的低16位同时保持高低16位的特征,尽量避免一些hash值后续出现冲突,出现在同一个位置上。eg:1111 1111 1111 1111 1111 1010 0111 ...原创 2020-09-30 14:15:21 · 87 阅读 · 0 评论 -
Java设计模式 - 蝇量模式(享元模式)
蝇量模式(享元模式):蝇量模式优点:蝇量模式应用:蝇量模式实例:类图:示例:代码:上述代码 GitHub 地址:https://github.com/baicun/designPatterns原创 2020-09-02 20:01:07 · 269 阅读 · 0 评论 -
Java设计模式 - 责任链模式
责任链模式:责任链模式优点:责任链模式应用:责任链模式实例:类图:示例:代码:上述代码 GitHub 地址:https://github.com/baicun/designPatterns原创 2020-08-18 19:00:23 · 407 阅读 · 0 评论 -
Java设计模式 - 生成器模式
生成器模式(建造者模式):封装一个复杂对象构建过程,并允许按步骤构造生成器优点:将复杂对象的创建过程封装起来,只需要指定具体的生成器就能生成特定对象生成器模式应用:java.lang.StringBuilder#append(),java.lang.StringBuffer#append()同样也是符合生成器模式,只不过方法加了synchronized,保证了线程安全。生成器实例:类图:示例:生成旅游计划:旅游时,每天我们需要计划旅游景点、事项、时间、酒店,那一次原创 2020-08-12 18:53:10 · 561 阅读 · 0 评论 -
Java设计模式 - 桥接模式
桥接模式:将接口实现与抽象放在俩个不同的类层次中,是俩个层次可以独立改变,而互相补充。桥接优点:增强了可拓展性,可以在两个维度自由拓展。桥接模式应用:暂无桥接模式和策略模式的区别桥接的目的是让接口实现和抽象层可以分别演化,从而提高移植性;策略的目的是将复杂的算法封装起来,从而便于替换不同的算法。桥接模式往往是为了利用已有的方法或类;策略模式是为了扩展和修改,并提供动态配置。桥接模式强调接口对象仅提供基本操作,而抽象实现中进行接口功能组装;策略模式强调接口...原创 2020-08-12 17:07:13 · 236 阅读 · 0 评论 -
Java设计模式 - 复合模式
目录复合模式:复合优点:复合模式应用:复合模式实例:复合模式:一个设计方案中结合了两个或多个设计模式,来解决一般性或一系列的问题复合优点:不同设计模式组合,使解决方案更具适用性复合模式应用:mvc设计原理:Model:程序主体,包含业务数据及业务逻辑,View:用户界面,Controller:控制器,适配View和Model,View和Controller是策略模式关系,Controller提供策略View和Model是观察者模式。复合模式实例原创 2020-08-07 11:42:19 · 340 阅读 · 0 评论 -
Java设计模式 - 状态模式
目录状态模式:状态优点:状态模式应用:状态实例:类图:示例:代码:上述代码 GitHub 地址:https://github.com/baicun/designPatterns状态模式:能根据内部状态的变化,改变对象的行为,看起来好像修改了类状态优点:特定状态相关的行为局部化,把不同的状态隔离,耦合性低状态模式应用:一个对象存在多个状态(不同状态下行为不同),且状态可相互转换。状态实例:类图:示例:糖果机有如下几种状态:待机、投币、原创 2020-08-06 20:47:16 · 389 阅读 · 0 评论 -
Java设计模式 - 组合模式
目录组合模式:组合优点:组合模式应用:组合实例:上述代码 GitHub 地址:https://github.com/baicun/designPatterns组合模式:处理具有树形结构的设计模式,具体使用一致的方式来处理个别对象以及不同对象组合。组合优点:兼容性强,不必关心处理的是单个对象还是整个组合结构组合模式应用:java.AWT Component中的组合模式组合实例:类图:示例:俩家不同的餐馆合并,需要打印出不同组合的菜单,面包馆呢是.原创 2020-08-06 19:01:44 · 349 阅读 · 0 评论 -
Java设计模式 - 迭代器模式
目录迭代器模式:迭代器优点:迭代器模式应用:迭代器实例:上述代码 GitHub 地址:https://github.com/baicun/designPatterns迭代器模式:提供一种方法顺序访问一个聚合对象中的各个对象迭代器优点:耦合度低,灵活迭代器模式应用:Java内置迭代器迭代器实例:类图:示例:俩家不同的餐馆合并,需要打印出不同组合的菜单,使用迭代器模式设计代码:面包馆-CakeHouseMenu.javapublic.原创 2020-08-05 20:56:13 · 341 阅读 · 0 评论 -
Java设计模式 - 模板模式
模板模式:封装了一个算法步骤,并允许子类为一个或多个步骤方法提供实现模板优点:抽取公共代码模板在超类中实现,方便维护和阅读。模板模式应用:Android的BaseAdapter模板模式和策略模式区别:模板模式侧重步骤封装;策略模式侧重功能封装;模板实例:类图:示例:以喝咖啡和喝茶的步骤为例:喝茶(烧水->冲泡茶叶->把茶水倒入杯子->加糖)喝咖啡(烧水->冲泡咖啡粉->把咖啡倒入杯子->加牛奶)很明显,不同的饮品原创 2020-08-05 19:19:27 · 477 阅读 · 0 评论 -
Java设计模式 - 外观模式
适配器模式:适配器优点:适配器模式应用:适配器实例:对象适配器类适配器上述代码 GitHub 地址:https://github.com/baicun/designPatterns原创 2020-07-31 16:41:50 · 416 阅读 · 0 评论 -
Java设计模式 - 适配器模式
适配器模式:将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容适配器优点:从用户角度看不到被适配者,只是调用适配者转化出来的目标接口,是解耦的。适配器模式应用:世界插座标准的充电转换插头适配器实例:对象适配器使用组合实现(目标接口)类图:目标接口Duck.java:public interface Duck { public void quack(); public void fly();}目标接口实现类-GreenH..原创 2020-07-31 09:06:44 · 311 阅读 · 0 评论 -
Java设计模式 - 命令模式
目录命令模式:命令优点:命令模式应用:命令实例:上述代码 GitHub 地址:https://github.com/baicun/designPatterns命令模式:将请求、命令、动作等封装成对象,这样可以让项目使用这些对象来参数化其他对象、使得命令的请求和执行者解耦。命令优点:操作的请求和操作的执行灵活的分开,降低了系统耦合度,同时拓展性好记录操作记录命令模式应用:智能家庭电器开关设置命令实例:类图:示例描述 :想象手里握着全家电器的遥控器原创 2020-07-30 18:53:01 · 300 阅读 · 0 评论 -
Java设计模式 - 装饰者模式
目录装饰者模式:装饰者模式优点:装饰者模式应用:装饰者实例:上述代码 GitHub 地址:https://github.com/baicun/designPatterns装饰者模式:装饰者模式就像打包一个快递,打包的物体不会变,但会用到不同的包装,最后发货。像这些不同的包装,动态的附加到对象上。装饰者模式优点:装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰比继承更有弹性。装饰者模式应用:Java IO流中的设计装饰者实例:类图:以咖啡店作为原创 2020-07-29 16:38:33 · 202 阅读 · 0 评论 -
Java设计模式 - 观察者模式
观察者模式:观察者模式优点:观察者模式应用:观察者实例:原创 2020-07-28 21:20:27 · 207 阅读 · 0 评论 -
Blob类型存储中文
目录 一、数据库中文乱码二、数据库中文正常展示三、gbk和utf8GBK和UTF-8文字编码的特点:GBK和UTF-8文字编码的区别:编码方案: 一、数据库中文乱码一般来说,我们的数据库都是utf-8编码,所以我们在存储Blob类型的时候,会将二进制流使用utf-8编码(blob.getBytes("UTF-8")),但是存到数据库中,却展示的乱码,想要知道其中含义...原创 2019-02-13 11:26:58 · 5297 阅读 · 0 评论 -
JSON使用指南
【JSON】JavaScript Object Notation(JavaScript 对象表示法)JSON的特点:1、JSON 是存储和交换文本信息的语法。类似 XML,但JSON 比 XML 更小、更快,更易解析。2、轻量级的文本数据交换格式。 3、独立性:JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP, ...原创 2018-09-18 07:23:58 · 419 阅读 · 1 评论 -
Java设计模式
最近设计模式这几个字不断耳朵进去,从脑海中蹦出,所以网上开始搜罗关于java设计模式的博文,并总结如下:奉上大牛原文地址:http://blog.csdn.net/doymm2008/article/details/13288067 一、总体来说设计模式分为三大类创建型模式,共 5 种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共 7 种:适配器模式、装饰器模式、代...转载 2018-05-07 22:24:16 · 332 阅读 · 0 评论 -
java关键字分类详解
首先声明一下,本文手动转载前辈的博客,奉上原文链接。Java关键字及其作用一、总览访问控制(3)private protected public类,方法和变量修饰符(13)abstract final class extends implements interface native newstatic strictfp synch...转载 2018-05-06 17:48:34 · 1533 阅读 · 0 评论