自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

keeper42的博客

技术是第一生产力

  • 博客(611)
  • 资源 (10)
  • 收藏
  • 关注

原创 【MySQL】全局锁、表锁和行锁

学习于极客时间全局锁全局锁的典型使用场景是,做全库逻辑备份。Flush tables with read lock (FTWRL)。在备份过程中整个库完全处于只读状态。让整库都只读:(1)如果你在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆;(2)如果你在从库上备份,那么备份期间从库不能执行主库同步过来的 binlog,会导致主从延迟。不加锁的话,备份系统备份的得到的库不是一个逻辑时间点,视图是逻辑不一致的。其实是有一个方法能够拿到一致性视图的,就是在可重复读隔离

2022-03-27 13:58:17 669

原创 【MySQL】索引

学习于极客时间哈希索引哈希索引做区间查询是很慢的,哈希表适用于只有等值查询的场景,比如 Memcached 及其他一些 NoSQL 引擎。有序数组索引有序数组在等值查询和范围查询场景中的性能就都很好。如果仅仅看查询效率,有序数组就是最好的数据结构了。但是,在需要更新数据的时候就麻烦了,你往中间插入一个记录就必须得挪动后面所有的记录,成本太高。有序数组索引只适用于静态存储引擎,比如你要保存的是省市这类几乎不会再修改的数据。二叉树索引二叉树为了维持 O(log(N)) 的查询复杂

2022-03-27 11:19:18 1355

原创 【分布式】Twitter雪花算法(snowflake)的java实现

雪花算法:生成全局唯一ID以划分命名空间的方式将 64-bit位(Long类型)分割成多个部分,每个部分代表不同的含义。优点:雪花算法生成的ID是趋势递增,不依赖数据库等第三方系统,以服务的方式部署,稳定性更高,生成ID的性能也是非常高的,而且可以根据自身业务特性灵活分配bit位。缺点:雪花算法强依赖于时钟,如果系统上出现时间回滚,会导致生成的ID号重复或者服务会处于不可用状态。public static void main(String[] args) { Snowfl.

2022-03-24 10:51:11 281

原创 【架构】架构服务化

单体分层架构在 Web 应用程序发展的早期,大部分工程是将所有的服务端功能模块打包到单个巨石型(Monolith)应用中,譬如很多企业的 Java 应用程序打包为 war 包,最终会形成如下的架构:巨石型应用易于搭建开发环境、易于测试、易于部署;其缺陷也非常明显,无法进行局部改动与部署,编译时间过长,回归测试周期过长,开发效率降低等。集中式架构分为标准的三层:数据访问层、服务层和 Web 层。在 Web2.0 时代刚刚流行的时候,互联网应用与企业级应用并没有本质的区别,集中式架构分为..

2022-03-24 10:15:21 4373

转载 【Spring】Spring bean的生命周期

spring bean

2022-03-22 16:54:36 88

转载 【Redis】Redis面试题及答案

redis

2022-03-22 16:47:27 181

转载 【Dubbo】Dubbo 面试题及答案

文章目录1.Dubbo是什么?2.为什么要用Dubbo?3.Dubbo 和 Dubbox 有什么区别?4.Dubbo 停止维护了吗?5.你读过 Dubbo 的源码吗?6.在使用过程中都遇到了些什么问题?7.Dubbo和SpringCloud的区别?springcloud和Dubbo的对比?你觉得用 Dubbo 好还是 Spring Cloud 好?8.Dubbo 能集成 Spring Boot 吗?9.Dubbo支持的序列化协议?说一下 Hessian 的数据结构10.Dubbo支持的

2022-03-22 16:43:20 1184

原创 【Nacos】Nacos入门

核心功能点服务注册Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。服务心跳在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳。服务健康检查阻止向不健康的主机或服务实例发送请求Nacos Server会开

2022-03-22 16:13:44 971

原创 【Redis】缓存穿透、缓存雪崩、缓存击穿

缓存穿透指查询一个不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。出现原因自身业务代码或者数据出现问题、恶意的请求会故意查询不存在的 key解决方案查询返回的数据为空,仍把这个空结果进行缓存,但过期时间会比较短;布隆过滤器:将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对 DB 的查询。布隆过滤器实际上是一个很长的二进制向量和一系列随

2022-03-22 16:08:22 63

原创 【MQ】RabbitMQ 消息确认、堆积、丢失、重复消费等

AMQPAMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受中间件不同产品、不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。RabbitMQ信道:信道是生产消费者与rabbit通信的渠道,生产者发布publish或是消费者订阅subscribe一个队列都是通过信道来通信的。信道是建立在TCP连接上的

2022-03-22 03:28:47 7249 1

原创 【MQ】消息中间件

MQ与RPC的异同?相同点:都是分布式系统下的通信方式。不同点:RPC和消息中间件的场景的差异很大程度上在于就是“依赖性”和“同步性”。消息中间件出现以后对于交易场景可能是调用库存中心等强依赖系统执行业务,之后发布一条存储于消息中间件的消息,像是短信通知服务、数据统计服务、日志服务等等都是依赖于消息中间件去消费这条消息来完成自己的业务逻辑。RPC方式是典型的同步方式,让远程调用像本地调用。消息中间件方式属于异步方式。消息队列是系统级、模块级的通信。RPC是对象级、函数级通信。消息中间件的

2022-03-22 01:47:10 1885

原创 【MySQL】MySQL事务隔离

【MySQL】MySQL事务隔离事务就是要保证一组数据库操作,要么全部成功,要么全部失败。MySQL 原生的 MyISAM 引擎就不支持事务,这也是 MyISAM 被 InnoDB 取代的重要原因之一。事务隔离级别ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)。多个事务同时执行时会遇到的问题:脏读:读到其他事务未提交的数据;不可重复读:前后读取的记录内容不一致;幻读:前后读取的记录数量不一致。

2022-03-21 17:45:03 1000

原创 【MySQL】MySQL日志系统

【MySQL】MySQL(先占个坑)

2022-03-15 21:49:48 963

原创 【设计原则】迪米特法则(LOD)——最少知道原则

迪米特法则的英文翻译是:Law of Demeter,缩写是 LOD。它还有另外一个更加达意的名字,叫作最小知识原则,英文翻译为:The Least Knowledge Principle。简言之,不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口。迪米特法则是希望减少类之间的耦合,让类越独立越好。每个类都应该少了解系统的其他部分。一旦发生变化,需要了解这一变化的类就会比较少。很多设计原则都以实现代码的“高内聚、松耦合”为目的,比如单一职责原则、基于接口而非实现编程

2022-03-13 09:53:06 432

原创 【设计原则】DRY原则

DRY原则DRY:Don’t Repeat Yourself,不要重复你自己。三种典型的代码重复情况,它们分别是:实现逻辑重复、功能语义重复和代码执行重复。这三种代码重复,有的看似违反 DRY,实际上并不违反;有的看似不违反,实际上却违反了。代码复用性减少代码耦合满足单一职责原则模块化业务与非业务逻辑分离通用代码下沉继承、多态、抽象、封装应用模板等设计模式实际上,除了上面讲到的这些方法之外,复用意识也非常重要。在设计每个模块、类、函数的时候,要像设计一个外部 AP

2022-03-13 09:44:57 117

原创 【设计原则】KISS原则与YAGNI原则

KISS,Keep It Short and Simple.KISS 原则是保持代码可读和可维护的重要手段。KISS 原则中的“简单”并不是以代码行数来考量的。代码行数越少并不代表代码越简单,我们还要考虑逻辑复杂度、实现难度、代码的可读性等。而且,本身就复杂的问题,用复杂的方法解决,并不违背 KISS 原则。除此之外,同样的代码,在某个业务场景下满足 KISS 原则,换一个应用场景可能就不满足了。如何写出满足 KISS 原则的代码?(1)不要使用同事可能不懂的技术来实现代码。比如前面例子中的正则

2022-03-13 09:34:49 222

原创 【设计原则】里氏替换原则

里式替换原则:Liskov Substitution Principle,缩写为 LSP。子类对象(object of subtype/derived class)能够替换程序(program)中父类对象(object of base/parent class)出现的任何地方,并且保证原来程序的逻辑行为(behavior)不变及正确性不被破坏。多态和里式替换有点类似,但它们关注的角度是不一样的。多态是面向对象编程的一大特性,也是面向对象编程语言的一种语法。它是一种代码实现的思路。而里式替换是一种设计

2022-03-13 09:25:53 153

原创 【设计原则】控制反转、依赖注入与依赖反转原则(DIP)

控制反转控制反转(Inversion Of Control,IOC),“控制”指的是对程序执行流程的控制,而“反转”指的是在没有使用框架之前,程序员自己控制整个程序的执行。在使用框架之后,整个程序的执行流程可以通过框架来控制。流程的控制权从程序员“反转”到了框架。实际上,实现控制反转的方法有很多,除了刚才例子中所示的类似于模板设计模式的方法之外,还有马上要讲到的依赖注入等方法,所以,控制反转并不是一种具体的实现技巧,而是一个比较笼统的设计思想,一般用来指导框架层面的设计。public cla

2022-03-13 09:01:04 275

原创 【设计原则】接口隔离原则

接口隔离原则的英文翻译是“ Interface Segregation Principle”,缩写为 ISP。Robert Martin 在 SOLID 原则中是这样定义它的:“Clients should not be forced to depend upon interfaces that they do not use。”直译成中文的话就是:客户端不应该被强迫依赖它不需要的接口。其中的“客户端”,可以理解为接口的调用者或者使用者。接口隔离原则跟单一职责原则有点类似,不过稍微还是有点区别。单一职责

2022-03-13 08:01:20 117

原创 【设计原则】开闭原则(对扩展开放、对修改关闭)

开闭原则的英文全称是 Open Closed Principle,简写为 OCP。它的英文描述是:software entities (modules, classes, functions, etc.) should be open for extension , but closed for modification。即:软件实体(模块、类、方法等)应该“对扩展开放、对修改关闭”。添加一个新的功能应该是,在已有代码基础上扩展代码(新增模块、类、方法等),而非修改已有代码(修改模块、类、方法等)。下面

2022-03-13 07:18:33 760

原创 【设计原则】单一职责原则

学习于极客时间-设计模式SOLID 原则SOLID 原则:SRP单一职责原则(the single responsibility principle )、OCP开闭原则(the open closed principle)、LSP里氏替换原则(the liskov substitution principle)、ISP接口独立原则(the interface segregation principle)、DIP依赖倒置原则(the dependency inversion principle)。

2022-03-13 07:02:49 127

原创 【leetcode】39. 组合总和

leetcode

2022-03-13 05:57:42 75

原创 【leetcode】23. 合并K个升序链表

class Solution { public ListNode mergeKLists(ListNode[] lists) { if (lists.length == 0) { return null; } ListNode head = new ListNode(0); ListNode curr = head; PriorityQueue<ListNode> pq = new.

2022-03-12 23:03:04 476

原创 【设计模式】单例模式(2)——不推荐使用单例模式

学习于极客时间-设计模式单例存在哪些问题?大部分情况下,我们在项目中使用单例,都是用它来表示一些全局唯一类,比如配置信息类、连接池类、ID 生成器类。单例模式书写简洁、使用方便,在代码中,我们不需要创建对象,直接通过类似 IdGenerator.getInstance().getId() 这样的方法来调用就可以了。但是,这种使用方法有点类似硬编码(hard code),会带来诸多问题。1. 单例对 OOP 特性的支持不友好我们知道,OOP 的四大特性是封装、抽象、继承、多态。单例这种

2022-03-12 22:24:57 233

原创 【设计模式】工厂模式(2)

工厂模式

2022-03-12 18:29:30 59

原创 【设计模式】原型模式

【设计模式】原型模式

2022-03-12 12:27:53 72

原创 【设计模式】适配器模式与桥接模式

适配器模式与桥接模式

2022-03-11 06:47:49 136

原创 【设计模式】装饰器模式

学习于菜鸟课堂与极客时间意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。缺点:多层装饰比较复杂。使用场景:1、扩展一个类的功能。 2、动态增加功能,动态撤销。JDK中,InputStream 是一个抽.

2022-03-10 17:40:16 70

原创 【Tomcat】Tomcat顶层架构与启动流程

Tomcat的顶层架构Server和Service是Tomcat核心组件中最外层的两个组件.我们看源码要能够把快速入手时就必须做到抓主放次,我们要抓主主要的、核心的内容,把次要的东西先放一边。Server这里要强调一点,整个Tomcat中的设计方式,我们讲的都是一个抽象,抽象在源码中都是接口,具体的实现一般都是StandardXXXX之类的Lifecycle这个概念重点讲下:像Tomcat这么大的系统,必要要对生命周期进行统一的管理,所以基本上大部分的组件都会去继承这个接口,Lifecy

2022-03-09 16:08:57 115

原创 【Tomcat】Tomcat架构与处理HTTP请求的过程

Tomcat的架构两大核心组件Connector组件:连接器,主要负责Tomcat与客户端的通讯Container组件:Servlet容器一个请求的处理流程httpConnector就是链接器httpProcessor是具体的处理类Container是容器(servlet)Tomcat启动步骤Bootstrap -> catalina -> server -> service -> connector、container等..

2022-03-09 16:04:46 744 1

原创 【设计模式】组合模式

学习于组合模式 | 菜鸟教程意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。优点: 1、高层模块调用简单。 2、节点自由增加。缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。使用场景:部分、整体场景,如树形菜单,文件、文件夹的管理。.

2022-03-09 15:34:09 97

原创 【Mybatis】Mybatis 变量名下划线映射驼峰

1、在mybatis-config.xml文件里配置<configuration> <settings> <!--是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典Java 属性名 aColumn 的类似映射。 --> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings&g...

2022-03-08 13:45:53 549

原创 【设计模式】单例模式(1)

【设计模式】单例模式

2022-03-06 23:59:33 72

原创 【设计模式】建造者模式

【设计模式】模板方法模式

2022-03-06 23:58:55 100

原创 【设计模式】工厂模式(1)

【设计模式】工厂模式

2022-03-06 23:58:15 69

原创 【面试题】从hashmap讲起

【面试题】从hashmap讲起

2022-03-05 12:19:24 81

原创 【面试题】从最简单的java面试题说起——String,StringBuffer,StringBuilder的区别

1. String是常量,不可被继承,final修饰,创建后不可被更改。可以通过StringBuffer与StringBuilder创建String对象来操作字符串类。2. StringBuilder字符串变量是非线程安全的,它的方法没有 synchronized 修饰,toString方法没有对象缓存,new String 直接返回。3. StringBuffer是字符串变量,线程安全,它也是fina类,其中绝大多数方法都被 synchronized 关键字修饰,都做了同步处理,包括常用的appe

2022-03-05 11:31:03 228

原创 【leetcode】8. 字符串转整型

Talk is cheap, show you my code. public int myAtoi(String s) { char[] chars = s.toCharArray(); int len = chars.length; int i = 0; while (i < len && chars[i] == ' ') { i++; } if..

2022-03-04 15:41:14 116

原创 【leetcode】7. 整数反转

Talk is cheap, show you my code.public int reverse(int x) { StringBuffer res = new StringBuffer(); String xstr = String.valueOf(x); int xstrlen = xstr.length(); char minus = '-'; if (xstr.charAt(0) == minus) {

2022-03-04 15:24:39 51

原创 【leetcode】6. Z字形变换

Talk is cheap, show you my code. public String convert(String s, int numRows) { if (s.length() == 0) { return null; } if (s.length() == 1 || s.length() == 2) { return s; } if (numRows

2022-03-04 15:21:32 55

InterceptorBridge1.0.zip

Postman InterceptorBridge1.0,Postman拦截器连接桥,用于连接Postman客户端与Postman拦截器的,可以用来直接获取浏览器中的Cookie。

2020-11-23

初学jsp的代码与笔记

初学jsp的代码、笔记与资料。初学jsp的代码、笔记与资料。初学jsp的代码、笔记与资料。初学jsp的代码、笔记与资料。初学jsp的代码、笔记与资料。

2020-09-30

程序员的数学

《程序员的数学》是2012年由人民邮电出版社出版的图书,作者是结城浩。本书面向程序员介绍了编程中常用的数学知识,借以培养初级程序员的数学思维。读者无需精通编程,也无需精通数学,只需具备四则运算和乘方等基础知识,就可以阅读本书。

2019-03-26

Modern PHP中文版(美)洛克哈特著_完整目录.pdf

Modern PHP中文版(美),该书主要讲解了PHP的开发技术。

2018-03-17

骗分导论.pdf

骗分导论,ICPC/CCPC、CSP、PAT等竞赛的算法骗分技巧。

2018-03-17

深入解析WordPress(原书第2版).pdf

深入解析WordPress(原书第2版),该书主要介绍了如何使用wordpress搭建博客。

2018-03-17

Navicat用户指南

Navicat用户指南,介绍了关于Navicat的服务器对象、表查看器、模型、报表、服务器安全性等等。

2018-03-17

Redis 3.0.pdf

Redis技术文档,该文档描述如何使用Redis作为数据库、缓存和消息中间件使用。

2018-03-17

Tensorflow笔记.pdf

Tensorflow笔记,简单地介绍了人工智能、机器学习、深度学习之间的关系以及神经网络的发展过程。

2018-03-17

中国象棋的计算机博弈理论

中国象棋的计算机博弈理论

2016-11-25

空空如也

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

TA关注的人

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