(目录) Java Agent 背景 因在做到Skywalking Agent的时候,并没有修改程序中任何一行 Java 代码,就可无侵入式的使用组件,便使用到了 Java Agent 技术,接下来对学习学习Java Agent 技术 Java Agent 是什么 Java Agent这个技术对大多数人来说都比较陌生,但是大家都都多多少少接触过一些。 实际上我们平时用过的很多工具都是基于jav
(目录) ByteBuddy 介绍 Byte Buddy 是一个代码生成和操作库,用于在 Java 应用程序运行时创建和修改 Java 类,而无需编译器的帮助。 除了 Java 类库附带的代码生成实用程序外,Byte Buddy 还允许创建任意类,并且不限于实现用于创建运行时代理的接口。此外,Byte Buddy 提供了一种方便的 API,可以使用 Java 代理或在构建过程中手动更改类。 官
(目录) 1. 简介 本文介绍Java 8 Predicate使用. 2. 基本用法 怎么使用简单的Predicate来过滤list中的name @Test public void whenFilterList_thenSuccess(){ List names = Arrays.asList("Adam", "Alexander", "J
(目录) Hippo4j 用户体系对接 LDAP Feature: server add Ldap user authentication issue:https://github.com/opengoofy/hippo4j/pull/1392 Hippo4j 接入Ldap指导 在 application.properties 配置文件中 , 配置下面相关信息: 此配置文件示例在同目录下
(目录) 对接Ldap服务疑问 1. 怎么保证 其他人的Ldap服务器目录 与 Java代码检索结构 一样 ? 列举可能的结构: cn=hhhh , dc =xxxx , dc= xxx (唯一字段不一样) uid=hhhh , dc = xxxx ,dc = xxxxx uid=hhhh , ou=xxx ,dc = xxxx ,dc = xxxxx 2. 对接其他服务器时,怎么
一、项目名称 题目:Hippo4j 用户体系对接 LDAP 二、项目描述/需求 Hippo4j Server 模式对接 IDAP 统一用户认证技术框架 Hippo4j Server 模式可使用 IDAP 相关账号进行登录操作 三、项目详细方案 1. LDAP相关概念 在开发过程中我们难免需要用到各种各样的开发工具,各个系统都有自己的一套密码,这就让我们很无奈,怎么记住呢?管理员在分
(目录) Redis 哨兵(Sentinel)架构 Redis主从复制 一主多从架构 master主要负责写入,slave负责读取,有读写分离的功能 redis主从同步原理 1、slave执行命令向master建立连接 2、master执行bgsave(后台存储),生成rdb快照(redis备份方式,data以二进制方式保存在本地),发送到slave上 3、slave获取快照后读取,对d
(目录) Redis Cluster集群模式 Cluster模式是Redis3.0开始推出 采用无中心结构,每个节点保存数据和整个集群状态, 每个节点都和其他所有节点连接 官方要求:至少6个节点才可以保证高可用,即3主3从;扩展性强、更好做到高可用 各个节点会互相通信,采用gossip协议交换节点元数据信息 数据分散存储到各个节点上 Redis Cluster 集群 与 Redis S
(目录) MySQL MVCC机制 1.隔离级别 在MySQL InnoDB存储引擎下,RC、RR基于MVCC(多版本并发控制)进行并发事务控制 MVCC是**基于”数据版本”**对并发事务进行访问 2.场景分析 UNDO_LOG不是会被删除吗?中间数据万一被删了版本链不就断了? UNDO_LOG版本链不是立即删除,MySQL确保版本链数据不再被“引用”后再进行删除 ReadV
(目录) 为什么不推荐使用自增主键 递增主键的作用 我们在数据库里保存的数据就跟excel表一样,一行行似的 而在底层,这一行行数据,就是保存在一个个16k大小的页里。 每次都去遍历所有的行性能会不好,于是为了加速搜索,我们可以根据主键id,从小到大排列这些行数据,将这些数据页用双向链表的形式组织起来,再将这些页里的部分信息提取出来放到一个新的16kb的数据页里,再加入层级的概念。于是,一个个
(目录) 多级缓存架构分析 本讲咱们探讨缓存这个话题,看在微服务环境下如何设计有效的多级缓存架构。本讲设计三⽅⾯内容: Web应⽤的客户端缓存 应⽤层静态资源缓存 服务层多级缓存 微服务架构中的多级缓存设计 提到缓存,想必每⼀位软件⼯程师都不陌⽣,它是⽬前架构设计中提⾼性能最直接的⽅式。 这⾥我们举个例⼦: 假设应⽤程序将原始数据存储在MySQL数据库中,众所周知MySQL数据库会将
解释器模式使用频率不算高,**通常用来描述如何构建一个简单“语言”的语法解释器。**它只在一些非常特定的领域被用到,比如: 编译器; 规则引擎; 正则表达式; SQL 解析等。 不过,了解它的实现原理,可以帮助思考如何通过更简洁的规则来表示复杂的逻辑。 模式原理分析 解释器模式的原始定义是:用于定义语言的语法规则表示,并提供解释器来处理句子中的语法。 语法也称文法,在语言学中指任意自然
(目录) 访问者模式:一个原理看似很简单,但是理解起来有一定难度,使用场景相对较少的行为型模式: 它能将算法与其所作⽤的对象隔离开来 假如有这样⼀位⾮常希望赢得新客户的资深保险代理⼈。 他可以拜访街区中的每栋楼, 尝试向每个路⼈ 推销保险。 所以, 根据⼤楼内组织类型的不同, 他可以提供专⻔的保单: 如果建筑是居⺠楼, 他会推销医疗保险。 如果建筑是银⾏, 他会推销失窃保险。 如果建筑是咖
(目录) 模板方法模式的原理和代码实现都比较简单,也被广泛应用,但是因为使用继承机制,副作用往往盖过了主要作用,所以在使用时尤其要小心谨慎。 原理 模板方法模式原始定义是:在操作中定义算法的框架,将一些步骤推迟到子类中。 模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。 关键:解决算法框架这类特定的问题,同时明确表示需要使用继承的结构。 UML 图: 模板方法模式包含的关键角色有
(目录) 模板方法模式能帮助我们进行公有方法的抽取,起到快速复用和扩展的作用。 另一种快速复用和扩展代码的行为型模式:策略模式。 策略模式在实际的开发中很常用,最常见的应用场景是利用它来替换过多的 if-else 嵌套的逻辑判断。 除此之外,还能结合工厂模式给客户端提供非常灵活的使用体验。 原理 策略模式的原始定义是:定义一系列算法,封装每个算法,并使它们可以互换。策略让算法独立于使用它的客
(目录) 状态模式的应用场景非常广泛,比如: 线上购物订单、手机支付、音乐播放器、游戏、工作流引擎等场景。 状态模式设计的初衷是应对同一个对象里不同状态变化时的不同行为的变化。 模式原理 原始定义是:允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了自己的类一样。 这个定义确实有些抽象,简而言之,状态模式就是让一个对象通过定义一系列状态的变化来控制行为的变化。 比如,给购买的
(目录) 相较于其他设计模式,备忘录模式不算太常用,但好在这个模式理解、掌握起来并不难,代码实现也比较简单,应用场景更是比较明确和有限。 一般应用于编辑器或会话上下文中防丢失、撤销、恢复等场景中。 模式原理分析 备忘录模式的原始定义是: 捕获并外部化对象的内部状态,以便以后可以恢复,所有这些都不会违反封装。 这个定义是非常简单的,备忘录模式对应的 UML 图: 从上面 UML 图中,备忘录
(目录) 观察者模式是一种非常流行的设计模式,也常被叫作订阅-发布模式。 观察者模式在现代的软件开发中应用非常广泛,比如,商品系统、物流系统、监控系统、运营数据分析系统等。 常说的基于事件驱动的架构,其实也是观察者模式的一种最佳实践。 当观察某一个对象时,对象传递出的每一个行为都被看成是一个事件,观察者通过处理每一个事件来完成自身的操作处理。 原理 原始定义是:定义对象之间的一对多依赖关系,
(目录) 中介者模式理解起来不难,代码实现简单,学习难度也很小,只要合理充分地应用这个模式,往往就能够解决一些意想不到的问题。 模式原理分析 中介者模式的原始定义是:中介者对象封装了一组对象之间的交互,这组对象会将它们的交互委托给中介者对象,而不是直接交互。 可以看到,这个定义是难得简单和明确,中介者对象就是用于处理对象与对象之间的直接交互,封装了多个对象之间的交互细节。 中介者模式的 UM
(目录) 迭代器模式是一个设计时很少用到,但编码实现时却经常使用到的行为型设计模式。 在绝大多数编程语言中,迭代器已经成为一个基础的类库,直接用来遍历集合对象。 在平时开发中,更多的是直接使用它,很少会从零去实现一个迭代器。 模式原理 迭代器模式又叫游标(Cursor)模式,它的原始定义是:迭代器提供一种对容器对象中的各个元素进行访问的方法,而又不需要暴露该对象的内部细节。 可以看到,该定义很明
(目录) 命令模式使用频率不算太高。如果熟悉函数式编程的话,会发现命令模式完全没有使用的必要,甚至在业务开发的场景中也很少使用到。 不过对于想要找到正确抽象的设计者来说,命令模式的设计思想却非常值得借鉴。 命令和查询的区别: 查询,获取一个不可变的结果; 命令,改变状态,不一定获取结果。 模式原理 命令模式的原始定义是:将一个请求封装为一个对象,从而可以参数化具有不同请求、队列或日志请求
(目录) 相较而言,责任链模式(Chain of Responsibility)是一个使用频率很高的模式,它属于一个行为型对象设计模式。 责任链模式Chain是⼀种⾏为设计模式, 允许你将请求沿着处理者链进⾏ 发送。 收到请求后, 每个处理者均可对请求进⾏处理, 或将其传递给 链上的下个处理者。 模式原理 责任链模式的原始定义是:通过为多个对象提供处理请求的机会,避免将请求的发送者与其接收者
(目录) 装饰器模式看上去和适配器模式、桥接模式很相似,都是使用组合方式来扩展原有类的,但其实本质上却相差甚远呢。 简单来说,适配器模式侧重于转换,而装饰模式侧重于动态扩展;桥接模式侧重于横向宽度的扩展,而装饰模式侧重于纵向深度的扩展。 原理 装饰模式的原始定义是:允许动态地向一个现有的对象添加新的功能,同时又不改变其结构,相当于对现有的对象进行了一个包装。 这个定义非常清晰易懂,因为不能直接修
(目录) 享元模式Flyweight:通过共享对象减少内存加载消耗 享元模式的用意 享元模式以共享的⽅法⾼效地⽀持⼤量的细粒度对象,享元对象能做到共享的关键是区分内蕴状态和外蕴状态。 ⼀个内蕴状态是存储在享元对象内部的,并且是不会随环境改变⽽有所不同的,因此⼀个享元可以具有内蕴状态并可以共享。⼀个外蕴状态是随环境的改变 ⽽改变的,不可以共享的状态,享元对象的外蕴状态必须由客户端保存,并在享元对象
(目录) 组合模式Compose:利用树形结构处理对象之间复杂关系 单纯从字面上来看,很容易将“组合模式”和“组合关系”搞混。 组合模式最初只是用于解决树形结构的场景,更多的是处理对象组织结构之间的问题。 组合关系则是通过将不同对象封装起来完成一个统一功能。 虽然组合模式并不常用,但是学习它的原理能够获得更多复杂结构上的思考。 比如: ● MySQL 的索引设计中就是用了 B+ 树算法的组合
(目录) 桥接模式 桥接模式。桥接模式的原理非常简单,但是使用起来会有一定的难度,所以相对于适配器模式来说,在理解桥接模式时,重点是能跳出局部,多从整体结构上去思考。 模式原理 定义是:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 不过,这里的抽象常常容易被理解为抽象类,并将实现理解为继承后的“派生类”,但是这样理解存在局限性,因为本意是想表达“从对象与对象间的关系去看,做抽象实体与抽
(目录) 适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接⼝之间的桥 梁。这种类型的设计模式属于结构型模式,它结合了两个独⽴接⼝的功能。 在某些时候,客户期望获得某种功能接⼝但现有的接⼝⽆法满⾜客户的 需求,例如美国的正常供电电压为110V,⼀个中国⼈带了⼀款中国制 造电器去美国,这个电器必须要在220V电压下才能充电使⽤。 这种情 况下,客户(中国⼈)的期望接⼝是有
(目录) 单元测试之Mockito+Junit使用和总结 一、什么是MOCK测试 Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。 Mock 最大的功能是帮你把单元测试的耦合
(目录) 门面模式的原理非常容易理解,使用也非常灵活,因此,它的应用非常广泛。 门面模式和代理模式经常容易搞混。比如: 业务 API 网关和 Nginx 网关是不是差不多?实际上这两种模式的本质原理是不同的。 模式原理 原始定义是:为子系统中的一组接口提供统一的接口。它定义了一个更高级别的接口,使子系统更易于使用。 这个定义告诉门面模式本质就是:**统一多个接口的功能。**换句话说,当需要用更统
(目录) 原型模式最早出现于 1963 年的一个叫 Sketchpad 的系统中,说起 Sketchpad 或许并不熟悉,但是说起 CAD(计算机辅助设计),现在在工程设计领域几乎无人不知,其实 Sketchpad 就被认为是现代 CAD 程序的鼻祖,主要思想是 拥有一张可以实例化成许多副本的原图,如果用户更改了主工程图,则所有实例也会更改。这便是原型模式最初的思维模型。 不过在面向对象编程中,
Copyright © 2005-2023 51CTO.COM 版权所有 京ICP证060544号