自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 浅谈golang中的观察者模式

来自一个大佬的博客,建议食用设计模式不分语言,是一种思维层面的体现,但是不能在不同语言中使用同一套实现(每种语言有不同的特性),比如go,本身是没有继承一说,但是通过结构体的组合来实现语义上的继承。而多态也是通过接口的方式来实现的。下方的图来自于大佬博客,贴在这里方便查看!!!设计原则设计模式行为型模式观察者模式...

2022-05-08 18:39:17 512

原创 浅谈golang中的享元模式

来自一个大佬的博客,建议食用设计模式不分语言,是一种思维层面的体现,但是不能在不同语言中使用同一套实现(每种语言有不同的特性),比如go,本身是没有继承一说,但是通过结构体的组合来实现语义上的继承。而多态也是通过接口的方式来实现的。下方的图来自于大佬博客,贴在这里方便查看!!!设计原则设计模式结构型模式享元模式享元模式就是为了更好的节省和管理资源复用,属于对象级别(不可变对象)的复用。通常通过pool来缓存已创建的对象,用时取出,用完回收。java的线程池以及数据库连接池都是享元模式。

2022-04-30 15:00:08 1210

原创 浅谈golang中的组合模式

来自一个大佬的博客,建议食用设计模式不分语言,是一种思维层面的体现,但是不能在不同语言中使用同一套实现(每种语言有不同的特性),比如go,本身是没有继承一说,但是通过结构体的组合来实现语义上的继承。而多态也是通过接口的方式来实现的。下方的图来自于大佬博客,贴在这里方便查看!!!设计原则设计模式结构型模式组合模式组合模式将一组对象组织成树形结构,以表示一种“部分-整体”的层次结构。最好处理的业务能够用树形结构表示,比如公司层级。// IOrganization 组织接口,都实现统计人数的功

2022-04-30 14:48:01 437

原创 浅谈golang中的门面模式

来自一个大佬的博客,建议食用设计模式不分语言,是一种思维层面的体现,但是不能在不同语言中使用同一套实现(每种语言有不同的特性),比如go,本身是没有继承一说,但是通过结构体的组合来实现语义上的继承。而多态也是通过接口的方式来实现的。下方的图来自于大佬博客,贴在这里方便查看!!!设计原则设计模式结构型模式门面模式该模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用,就是向上封装,很好理解。//场景:登录注册功能整合到一起。//一般的登录注册接口type IUser int

2022-04-30 14:30:44 276

原创 浅谈golang中的适配器模式

来自一个大佬的博客,建议食用设计模式不分语言,是一种思维层面的体现,但是不能在不同语言中使用同一套实现(每种语言有不同的特性),比如go,本身是没有继承一说,但是通过结构体的组合来实现语义上的继承。而多态也是通过接口的方式来实现的。下方的图来自于大佬博客,贴在这里方便查看!!!设计原则设计模式结构型模式适配器模式适配器模式将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。实现方式分为:类适配器(继承实现) 和 对象适配器(组合实现)对于实现方式的选择

2022-04-30 14:08:16 272

原创 浅谈golang中的装饰器模式

来自一个大佬的博客,建议食用设计模式不分语言,是一种思维层面的体现,但是不能在不同语言中使用同一套实现(每种语言有不同的特性),比如go,本身是没有继承一说,但是通过结构体的组合来实现语义上的继承。而多态也是通过接口的方式来实现的。下方的图来自于大佬博客,贴在这里方便查看!!!设计原则设计模式结构型模式装饰器模式主要解决继承关系过于复杂的问题,通过组合来代替继承,给目标类添加增强功能,作为包装。type IDraw interface { Draw() string}type S

2022-04-29 20:45:20 564

原创 关于MVCC底层的讨论

MVCC在本篇内容中主要探讨MVCC中的版本链选取问题。在讨论MVCC底层的版本链前,先复现一个问题。一、问题复现1、修改主键id的现象背景:在MySQL中有一张如下图的表,id是自增主键,name和money是普通的字段,隔离级别是默认的可重复读。account表的数据一开始是这样的:A、B是两个不同的事务,可以保证的是,他们一开始的快照的一致的。然后分别进行如下顺序操作:事务A事务Bbegin;begin;select * from account; (1)

2022-04-29 20:26:21 219

原创 浅谈golang中的桥接模式

来自一个大佬的博客,建议食用设计模式不分语言,是一种思维层面的体现,但是不能在不同语言中使用同一套实现(每种语言有不同的特性),比如go,本身是没有继承一说,但是通过结构体的组合来实现语义上的继承。而多态也是通过接口的方式来实现的。下方的图来自于大佬博客,贴在这里方便查看!!!设计原则设计模式结构型模式桥接模式桥接模式让抽象(接口)和现实(实现类)解耦,可以独立变化,特点就是通过组合的方式来进行自由调用,也就是利用了多态的特性。//桥接模式type IMsgSender interfa

2022-04-29 17:44:50 245

原创 浅谈golang中的代理模式

来自一个大佬的博客,建议食用设计模式不分语言,是一种思维层面的体现,但是不能在不同语言中使用同一套实现(每种语言有不同的特性),比如go,本身是没有继承一说,但是通过结构体的组合来实现语义上的继承。而多态也是通过接口的方式来实现的。下方的图来自于大佬博客,贴在这里方便查看!!!设计原则设计模式结构型模式代理模式首先,我们知道代理模式中分为静态代理和动态代理。静态代理需要在编译前就要写好,而动态代理需要在运行时通过反射来实现方法增强。上述的话,太过粗糙,下面列举一下双方的区别:静态代理:

2022-04-29 15:23:53 3016 1

原创 golang中的原型模式

来自一个大佬的博客,建议食用设计模式不分语言,是一种思维层面的体现,但是不能在不同语言中使用同一套实现(每种语言有不同的特性),比如go,本身是没有继承一说,但是通过结构体的组合来实现语义上的继承。而多态也是通过接口的方式来实现的。下方的图来自于大佬博客,贴在这里方便查看!!!设计原则设计模式创建型模式原型模式每次返回的都是新的对象。以深浅拷贝为例:type Person struct { name string age int}//深拷贝func (p *Person)

2022-04-28 22:57:42 200

原创 浅谈golang中的建造者模式

来自一个大佬的博客,建议食用设计模式不分语言,是一种思维层面的体现,但是不能在不同语言中使用同一套实现(每种语言有不同的特性),比如go,本身是没有继承一说,但是通过结构体的组合来实现语义上的继承。而多态也是通过接口的方式来实现的。下方的图来自于大佬博客,贴在这里方便查看!!!设计原则设计模式创建型模式建造者模式建造者的应用场景:类中的属性比较多。类中的属性有一定的依赖关系,或者约束条件。存在必选或非必选属性。创建不可变对象区别:建造者:创建参数较多的对象。工厂模式:创

2022-04-28 22:45:24 973

原创 浅谈golang中的工厂模式

来自一个大佬的博客,建议食用设计模式不分语言,是一种思维层面的体现,但是不能在不同语言中使用同一套实现(每种语言有不同的特性),比如go,本身是没有继承一说,但是通过结构体的组合来实现语义上的继承。而多态也是通过接口的方式来实现的。下方的图来自于大佬博客,贴在这里方便查看!!!设计原则设计模式创建型模式工厂模式工厂模式在大家写项目的时候用到的地方很多,可以用于代码的解耦以及方便拓展。在说起工厂模式之前,帮大家回忆一下golang中接口的特性:类型不需要显式声明它实现了某个接口:接口被

2022-04-28 22:08:58 620

原创 浅谈golang中的单例模式

来自一个大佬的博客,建议食用设计模式不分语言,是一种思维层面的体现,但是不能在不同语言中使用同一套实现(每种语言有不同的特性),比如go,本身是没有继承一说,但是通过结构体的组合来实现语义上的继承。而多态也是通过接口的方式来实现的。下方的图来自于大佬博客,贴在这里方便查看!!!设计原则设计模式创建型模式单例模式分为懒汉式和饿汉式。饿汉式//饿汉式type singleton struct {}var instance *singleton//在go文件的加载顺序中,先加载i

2022-04-28 20:29:50 163

原创 HashMap源码分析

get到一个大佬的博客:hashmap源码分析文章目录HashMap简介源码分析类属性内部类注意:构造函数hash()put()resize()HashMap总结(面试)HashMap简介HashMap是使用拉链法(数组+链表)的方式实现的,并且某个链表长度过长时,会将该链表转换成红黑树提高性能。而HashMap的内部数组长度初始为16,如果需要扩展数组,那么规定是2的次方。例如16会扩充到32–>64–>128–>256–>512…这样扩充有两个原因:选择足够大

2021-11-03 21:09:59 44

原创 Hashtable源码解读

以JDK8为准文章目录Hashtable简介源码解读类属性初始化内部类Entry内部类KeySetput()rehash()get()键集(keySet)和键值集(entrySet)clear()Hashtable简介HashTable同样是基于哈希表实现的,同样每个元素都是key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阈值)时,同样会自动增长。Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。Hashtable同样实现了Ser

2021-09-18 14:35:38 47

原创 SpringCloud初级

文章目录SpringCloudSpringcloud模块(学完得能说出来)谨记:在以后学习的道路中,版本之间的配合极为重要。Springcloud的技术迭代服务注册中心服务治理Eureka三个注册中心异同点服务调用RibbonOpenFeignFeign集成了Ribbon服务降级服务网关Gateway服务配置SpringCloudAlibabaNacosSpringCloudSpringcloud模块(学完得能说出来)谨记:在以后学习的道路中,版本之间的配合极为重要。Springcloud的技

2021-09-18 14:35:19 57

原创 ArrayList源码分析

文章目录ArrayListArrayList 简介ArrayList源码解读首先来看看ArrayList的细粒度继承关系特点:类属性构造方法get()set()add()remove()remove(int index)remove(Object o)indexOf()总结ArrayList此处ArrayList以JDK8标准为主ArrayList 简介ArrayList底层是一个其容量能够动态增长的动态数组。但是它又和数组不一样,下面会分析对比。它继承了AbstractList,实现了Lis

2021-09-18 14:34:54 39

原创 Dubbo

文章目录Dubbo简介Dubbo特性Dubbo运行流程服务降级Dubbo简介在现在很多地方都用到了分布式架构,他们将整套应用拆分为多个模块儿在不同的服务器上运行,但是随着服务器的增多,不同服务器之间的交互就像一张网一样错综复杂,那么怎样能保证服务器集群能够有条不紊地运行,这个时候 Dubbo(高效率、轻量级的RPC框架)就发挥了作用。在传统的单一应用上,方法之间的调用是在同一进程中进行的,而分布式架构则更多的是靠 RPC(远程过程调用)。**流动计算架构:**有专门处理服务器之间的调度和治理中心,

2021-09-18 14:34:28 34

原创 Nginx

NginxNginx简介反向代理负载均衡动静分离高可用Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。**正向代理:**客户端依靠代理服务器(即在客户端配置代理服务器)从局域网向internet访问。**反向代理:**反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可

2021-09-18 14:33:53 256

原创 Mysql高级二

文章目录Mysql索引优化索引失效Mysql索引优化1、单表优化对于常量条件的列建立索引(推荐复合索引)。**注意:**查询条件的范围参数会让对应索引失效,而常量是不会失效的。2、双表优化对于左连接,给右表的外键建立索引;对于右连接,给左表外键建立索引。为什么?以左连接为例,对于左连接而言,左表一定都有,所以其条件是用于筛选右表的。3、三表优化Join语句优化:尽可能减少Join语句中的NestedLoop(嵌套循环)的循环总次数:“永远用小结果集驱动大结果集”。优先优化

2021-09-18 14:33:12 45

原创 Mysql高级一

文章目录Mysql概述写博客前想记录的内容Mysql的安装位置MySQL配置文件部分内容MySQL逻辑架构存储引擎简介SQL性能慢,执行效率差MySQL大致查询流程复习Join查询索引索引的创建时机ExplainMysql概述Mysql是一种关系型数据库,可以很好的描述对象的之间的关系,属于SQL。而我之前的也学了NO SQL --redis,它采用键值对的表达方式,有五种类型:String,List,Set,Hash,Zset(Sort Set),是典型的缓存式数据库。还有阿里巴巴开发的Dru

2021-09-18 14:32:55 49

原创 关于主从复制的讨论

文章目录主从复制为什么要有主从复制?主从复制的特点主从复制的几种方式同步复制异步复制半同步复制关于主从复制的讨论主从复制一般来说,主从复制适用于分布式的服务器,由一个master和多个slave组成,他们组成在一起便是一个完整的整体,但是偶尔是可以独立的。为什么要有主从复制?对于以前的集中式管理,不仅给服务器造成巨大的压力和工作任务,而且一旦服务器崩溃,就会出现"单点故障",从而造成一系列不可预估的损失。所以这个时候就需要分布式的帮助,它不仅可以降低服务器的工作压力,而且对于一个服务器的崩溃

2021-09-18 14:32:35 37

原创 Mysql分区表

文章目录分区表分区概述分区类型RANGE分区LIST分区HASH分区KEY分区COLUMNS分区子分区分区中的NULL值在表和分区间交换数据分区表分区概述分区功能并不是在存储引擎层完成的,因此不是只有InnoDB存储殷勤支持分区,常见的存储引擎 MyISAM、NDB等都支持。但也不是所有的存引擎都支持,如CSV、FEDORATED、MERGE等就不支持。Mysql在5.1版本时添加了对分区的支持。分区的过程是将一个表或索引分解成多个更小、更可管理的部分。就访问数据库的应用而言,从逻辑上讲,只有一个

2021-09-18 14:32:14 138

原创 Mysql分布式事务

分布式事务MySQL数据库分布式事务InnoDB存储引擎提供了对XA事务的支持,并通过XA事务来支持分布式事务的实现。分布式事务指的是允许多个独立的事务资源参与到一个全局的事务中。全局事务要求在其中的所有参与的事务要么都提交,要么都回滚,这对事务原有的ACID要求又有了提高。在使用分布式事务时,InnoDB存储引擎事务隔离级别必须设置为 SERIALIZABLE。XA事务由一个或多个资源管理器、一个事务管理器以及一个应用程序组成。资源管理器:提供访问事务资源的方法。通常一个数据库就是一个资源管理

2021-09-18 14:31:46 182

原创 ConcurrentHashMap源码分析

简书大佬:https://www.jianshu.com/p/d0b37b927c48文章目录简介源码分析类常数类属性内嵌类初始化table初始化put()扩容get()Hashtable区别总结简介说到ConcurrentHashMap之前,我们再谈一下HashMap和Hashtable。HashMap是一个线程不安全类,在多线程下(环境为JDK1.7),由于其put()方法底层散列时使用的是头插法,所以容易引起HashMap死链现象,造成程序的阻塞。虽然JDK1.8已经改为了尾插法,但Has

2021-09-17 15:38:59 50

原创 JVM笔记一

JVM整体结构HotSpot VM是市面上高性能虚拟机的代表作之一。它采用解释器与即时编译器并行的架构(Java是半解释型,半编译型语言)。虚拟机铭言:一次编译,到处运行。执行引擎包括:解释器,JIT及时编译器,GC。线程私有的:程序计数器虚拟机栈本地方法栈线程共享:堆方法区直接内存初步认识双亲委派模型双亲委派模式要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器,请注意双亲委派模式中的父子关系并非通常所说的类继承关系,而是采用组合关系来复用父

2021-09-17 15:36:34 48

原创 JVM笔记二

大佬JVM笔记转载留念文章目录堆堆内存诊断方法区方法区内存溢出对象头信息常量池StringTable的特性StringTable的调优直接内存垃圾回收GC如何判断垃圾可以被回收垃圾回收算法分代垃圾回收垃圾回收器G1FULL GCGC调优查看虚拟机运行参数调优领域调优目标新生代是否越大越好幸存区大到能保留(当前活跃对象以及需要晋升的对象)晋升阈值配置得当,使长时间存活对象尽快晋升老年代调优案例对象存储信息定位堆线程共享。有垃圾回收机制。栈管运行,堆管存储。会出现OOM内存溢出现象。堆内存

2021-09-17 15:33:24 54

原创 Redis五种数据类型

以下内容为简化《Redis设计与实现》(第二版)书籍的有关Redis五种数据结构的知识,仅做复习使用。文章目录一、字符串类型二、列表对象三、哈希对象四、集合对象五、有序集合对象一、字符串类型在Redis中字符串类型通常使用SDS(简单动态字符串),而对于C语言的字符串使用仅针对于保证不会修改字符串的场景使用。而且对于Redis这种 key-value 型数据库,其 key 就是一个SDS对象,value 分别对应着五种数据类型。SDS(其编码可以是int,embstr,raw)总结:如果字符

2021-09-17 15:31:15 41

原创 Rand7实现Rand10

Rand7ToRand10思路:通过放大整个随机数表示的范围(前提是等可能性),再去缩小范围找。import java.util.Random;public class Rand7ToRand10 { public static void main(String[] args) { System.out.println(rand10()); } public static int rand10() { int x = 50;

2021-09-17 15:23:52 40

原创 快速排序笔记

快速排序通过递归拆分子数组,并且每一轮找到一个元素的正确位置。import java.util.Arrays;public class QuickSort { public static void main(String[] args) { int[] nums = {5,8,1,5,4,3,0,9}; quickSort(nums,0,nums.length-1); System.out.println(Arrays.toString(num

2021-09-17 15:21:29 32

原创 归并排序笔记

归并排序通过递归的方式将数组拆分成单一元素,然后逐层排序。import java.util.Arrays;public class MergeSort { public static void main(String[] args) { int[] nums = {5,8,1,5,4,3,0,9}; mergeSort(nums,0,nums.length); System.out.println(Arrays.toString(nums));

2021-09-17 15:17:19 28

原创 leetcode原题--LRU

LRULRU即最近最少使用算法,凭借着更新热点信息来达到内存的合理使用,在Mysql,Redis,操作系统等有广泛的应用。代码只是简易版的LRU,面对复杂的应用场景,还需进一步优化,感兴趣可以深入研究。核心数据结构: hashmap + 双向链表通过hashmap来达到 O(1)时间访问数据。通过双向链表来保证数据的有序以及锁定前后结点,方便插入和删除。两个数据结构共用一个结点。import java.util.HashMap;class LRUCache { HashMap

2021-09-17 15:11:39 126

原创 堆排序笔记

堆排序import java.util.Arrays;public class HeapSort { public static void main(String[] args) { int[] nums = {5,8,1,5,4,3,0,9}; heapSort(nums); System.out.println(Arrays.toString(nums)); } public static void heapSort

2021-09-17 14:53:32 38

原创 zookeeper

整合网上资料,有不足之处请指正。Zookeeperzookeeper是一个分布式协调服务,可以用于元数据管理、分布式锁、分布式协调、发布订阅、服务命名等。**简短介绍zk:**它是个数据库,文件存储系统,并有监听通知机制(观察者模式)。分布式数据一致性附上链接:https://zhuanlan.zhihu.com/p/35616810分布式事务保证在多台物理机的数据库上的操作具有原子性,要么都提交,要么都回滚。两阶段提交(2PC)既是算法,也是协议。参与者将操作结果通知协调者,再由协调者

2021-09-17 14:32:36 36

原创 关于树的一些代码整理

树首先是创建树(先序): //先序创建树 public static TreeNode firCreateTree(TreeNode root,String str){ char ch = str.charAt(count++); if(ch == '#'){ root = null; retur...

2019-12-22 19:23:35 560

原创 Spring笔记

Spring入门Spring的概述:Spring是分层的JavaSE/EE应用 full-stack 轻量级开源框架,以IOC(反转控制)和AOP(面向切面编程)为内核,提供了表现层Spring MVC和持久层Spring JDBC以及业务层事务管理等企业级应用技术,还能整合开源第三方框架和类库。程序的耦合:耦合:程序间的依赖关系,包括:类之间的依赖、方法之间的依赖。解耦:降低程序之...

2019-12-08 22:45:59 90

原创 粗谈Mybatis

Mybatis入门        框架是软件开发的解决方案,不同框架解决不同问题:mybatis解决持久化层,SpringMVC解决表现层。        简单来说,框架可以提高效率,简化实现功能。三层架构: &nbsp...

2019-11-29 21:10:49 228

原创 关于Session的一些讨论

特点众所周知,session是jsp的九大内置对象之一,也是服务器二次识别客户端的桥梁,它的生命周期非常长,一般都是存在于一个会话(同一浏览器)之中,与“天地同寿”(服务器)。有如下例子:1、在不关闭浏览器的情况下,创建一个session,你始终可以访问到这个session。2、在不关闭浏览器的情况下,创建一个session,再重新打开一个浏览器,访问不到session。3、在浏览器中创...

2019-11-10 14:03:34 85

原创 kmp算法

kmp算法与传统方法相比,不考虑主串,并且尽量减少指针回溯的次数。#include<stdio.h>#include<stdlib.h>#include<string.h>#define SIZE 20//顺序串就不多说了,直接来堆串typedef struct SString{ char *str; int len;}String;...

2019-10-23 19:58:57 74

原创 中缀表达式转后缀表达式

我会用大白话解释。所谓中缀表达式:1+2-(3*4),即我们日常生活中算数表达式;后缀表达式是为了计算机能看懂(取消了中缀表达式的括号)。中缀表达式到后缀表达式是栈的实际应用。转为后缀表达式的规则(符号为待入栈字符,栈顶符号为已入栈字符):1、设置两个栈,一个数字栈,一个符号栈。2、遇到数字就入数字栈。3、遇到符号时,若栈为空或者该符号是左括号,直接入符号栈;剩下的要比较优先级。4...

2019-10-13 20:15:18 262

空空如也

空空如也

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

TA关注的人

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