- 博客(19)
- 资源 (2)
- 收藏
- 关注
原创 食梦貘个人技术栈
1. Java基础知识 Java 8新特性-- Lambda、流 多线程相关 JVM相关 设计模式相关 JDBC数据库相关(mysql)+ 调优 Maven管理2. 开源框架及组件Spring、SpringBoot、SpringCloud Kafka Redis Elasticsearch Pg3. Python基础知识 Django框架4. 数据结构及算法...
2020-03-27 23:12:06 141
原创 2.1 Redis基础—AOF日志
Redis往往用作缓存,把服务端的数据从数据库中保存到内存中,然后直接从内存中读取,响应速度会非常快。但是一旦服务器宕机,内存中的数据会全部丢失。需要有一种机制能够回复丢失的数据。Redis的持久化有两大机制:AOF日志和RDB快照。
2023-08-24 00:05:58 107
原创 Java并发基础—2、Java内存模型:Java如何解决可见性和有序性问题
什么是Java内存模型(JMM)你已经知道,导致可见性的原因是缓存,导致有序性的原因是编译优化,那解决可见性、有序性最直接的办法就是禁用缓存和编译优化,但是这样问题虽然解决了,我们程序的性能可就堪忧了。合理的方案应该是按需禁用缓存以及编译优化。那么,如何做到“按需禁用”呢?对于并发程序,何时禁用缓存以及编译优化只有程序员知道,那所谓“按需禁用”其实就是指按照程序员的要求来禁用。所以,为了解决可见性和有序性问题,只需要提供给程序员按需禁用缓存和编译优化的方法即可。...
2021-11-12 00:00:06 165
原创 Java并发基础—1、可见性、原子性和有序性:并发编程故障的源头
并发问题的根源这些年,我们的 CPU、内存、I/O 设备都在不断迭代,不断朝着更快的方向努力。但是,在这个快速发展的过程中,有一个核心矛盾一直存在,就是这三者的速度差异。CPU 和内存的速度差异可以形象地描述为:CPU 是天上一天,内存是地上一年(假设 CPU 执行一条普通指令需要一天,那么 CPU 读写内存得等待一年的时间)。内存和 I/O 设备的速度差异就更大了,内存是天上一天,I/O 设备是地上十年。程序里大部分语句都要访问内存,有些还要访问 I/O,根据木桶理...
2021-11-11 23:33:10 184
原创 Java设计模式—23种常见设计模式使用
一、创建型1、单例模式2、工厂模式3、建造者模式4、原型模式二、 结构型1、代理模式2、桥接模式3、装饰器模式4、适配器模式5、门面模式6、组合模式7、享元模式三、行为型1、观察者模式2、模板模式3、策略模式4、责任链模式5、状态模式6、迭代器模式7、访问者模式8、备忘录模式9、命令模式10、解释器模式11、中介模式...
2021-11-05 22:54:34 175
原创 设计模式实践—单例模式
这一章的学习需要解决如下几个问题:为什么要使用单例? 实现单例有几种方式?主要特点? 单例存在哪些问题? 单例与静态类的区别? 有没有其他替代的解决方案? 为什么支持懒加载的双重检查并不比饿汉模式更优? 如何设计一个集群环境的分布式单例模式?...
2021-11-05 22:46:16 117
原创 Java并发基础—3、互斥锁:解决原子性问题
一、互斥锁互斥锁的目的:解决原子性问题,即“资源在同一时刻只能被一个线程占有” 根本方法就是禁止线程切换(单核场景)或者同一时刻线程互斥(多核场景)临界区:需要互斥执行的代码称为“临界区”,进入/离开临界区,需要加锁/解锁操作。锁的对象:即需要被放入临界区的对象,主要逻辑如下:注意:锁住的对象必须明确范围:如果范围太大可能导致锁不生效(直接被JVM逃逸分析优化掉了),或者“强行串行”导致性能下降 如果范围太小也可能导致锁不生效,或死锁 锁住的对象...
2021-10-30 00:07:30 434
原创 20211026_双重检查单例模式实践
一、单例模式介绍单例模式是23种设计模式中使用较多的一种,主要用来生成类的唯一实例。通过构造器私有使得外界无法通过构造器实例化Singleton类,要取得实例只能通过getInstance()方法。 常见的单例模式有几个实现方式,主要为懒汉式、饿汉式、静态内部类、枚举类、双重加锁检查等。以下是几种不同实现方式的简要样例,及使用场景对比懒汉式线程安全,调用效率不高,但是能延时加载public class SingletonLazy { ...
2021-10-27 00:13:50 256
原创 设计模式实践—重要的原则之开闭原则
开闭原则Open Closed Principle(OCP)首先需要搞清楚下面几个问题:“怎样的代码改动才被定义为‘扩展’?怎样的代码改动才被定义为‘修改’?怎么才算满足或违反‘开闭原则’?修改代码就一定意味着违反‘开闭原则’吗?”23 种经典设计模式中,大部分设计模式都是为了解决代码的扩展性问题而存在的,主要遵从的设计原则就是开闭原则。如何理解“对扩展开放、修改关闭”?详细的表述可以这样解释,即“添加一个新的功能应该是,在已有代码基础上扩展代码(新增模块、类、方法等),而非修改已有代码(修
2021-10-14 12:20:40 194
原创 设计模式实践—重要的原则之单一职责原则
S O L I D:单一职责原则、开闭原则、里式替换原则、接口隔离原则和依赖反转原则单一职责原则SRP一个类或者模块只负责完成一个职责(或者功能)例如,有一个实体类UserInfo,如下所示public class UserInfo { private long userId; private String username; private String email; private String telephone; private long createTime;
2021-10-14 11:22:12 89
原创 设计模式实践—UML类交互关系
泛化(Generalization)可以简单理解为继承关系。具体到 Java 代码就是下面这样:public class A { /*...*/ }public class B extends A { /*...*/ }实现(Realization)一般是指接口和实现类之间的关系。具体到 Java 代码就是下面这样:public interface A {/*...*/}public class B implements A { /*...*/ }聚合(Aggregation)是一种
2021-10-13 23:32:00 107
原创 《MySQL系列》— 基础—2、MySQL事务
一、事务简介MySQL事务由引擎实现,但不是所有的引擎均支持事务(InnoDB支持事务,而M有ISAM就不支持事务)针对事务的理解,可以按照以下的过程进行理解:1、事务的主要特性为:ACID(Atomicity、Consistency、Isolation、Durability)即原子性、一致性、隔离性、持久性。原子性: 一致性: 隔离性: 持久性:2、由于ACID特性的缺失,多个事务执行过程中可能导致:脏读(dirty read)、不可重复读(non-repeatable read)
2021-03-22 23:06:29 88
原创 《MySQL系列》— 基础—1、MySQL基础架构
一、MySQL基础架构MySQL 的逻辑架构图MySQL 可以分为 Server 层和存储引擎层两部分。Server层: 1、连接器、查询缓存、分析器、优化器、执行器等, 以及所有的内置函数(如日期、时间、数学和加密函数等) 2、 所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。存储引擎层: 1、共用一个Server层,负责数据的存储和提取; 2、插件式, 支持 InnoDB、MyISAM、Memory 等多个存储引.........
2021-03-16 23:22:03 451 1
原创 浅析关键字synchronized
volatile 只能保证内存可见性(线程A对volatile变量的操作,线程B可见),但无法保证复合操作的原子性(线程A和线程B同时对volatile变量做操作,无法保证原子性)synchronized主要有4种加锁方式: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 3. 修饰一个...
2021-02-04 23:28:40 125
原创 Java常用技巧总结
1. 尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:第一,控制资源的使用,通过线程同步来控制资源的并发访问;第二,控制实例的产生,以达到节约资源的目的;第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。2. 尽量避免随意使用静态变量当某个对象被定义为static变量所引用,那么GC通常是不会回收这个对象所占有的内存,如:public cla
2021-02-01 20:56:09 391
转载 Java IO模型解析
BIO,NIO,AIO首先,涉及两类概念:同步/异步,阻塞/非阻塞1、同步/异步同步:两个同步任务相互依赖,并且一个任务必须以依赖于另一任务的某种方式执行。 比如在A->B事件模型中,你需要先完成 A 才能执行B。 再换句话说,同步调用中被调用者未处理完请求之前,调用不返回,调用者会一直等待结果的返回。 异步: 两个异步的任务完全独立的,一方的执行不需要等待另外一方的执行。再换句话说,异步调用种一调用就返回结果不需要等待结果返回,当结果返回的时候通过回调函数或者其他方式拿着结果再做相关.
2021-01-16 10:25:05 135
原创 【Java】多线程导图
目录一、线程基础知识二、多线程编程串行、并发和并行竞态线程安全性原子性可见性有序性上下文切换三、一、线程基础知识二、多线程编程串行、并发和并行竞态线程安全性原子性可见性有序性上下文切换三、...
2020-03-29 15:50:49 139
原创 【面试系列】Java面试题大纲整理--转载于知乎@架构华山论剑
主要包含以下内容:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM一、Java基础1、JDK 和 JRE 有什么区别?...
2019-07-30 22:40:55 532
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人