摘要:Pipeline 设计原理 Channel 与ChannelPipeline: 相信大家都已经知道,在Netty 中每个Channel 都有且仅有一个ChannelPipeline 与之对应,它们的组成关系如下: 通过上图我们可以看到, 一个Channel 包含了一个ChannelPipeline 阅读全文
posted @ 2019-07-21 16:17 吴振照 阅读(385) 评论(0) 推荐(0) 编辑
摘要:EventLoopGroup 与Reactor: 前面的章节中我们已经知道了,一个Netty 程序启动时,至少要指定一个EventLoopGroup(如果使用到的是NIO,通常是指NioEventLoopGroup),那么,这个NioEventLoopGroup 在Netty 中到底扮演着什么角色呢 阅读全文
posted @ 2019-07-21 14:45 吴振照 阅读(435) 评论(0) 推荐(0) 编辑
摘要:客户端BootStrap: Bootstrap 是Netty 提供的一个便利的工厂类, 我们可以通过它来完成Netty 的客户端或服务器端的Netty 初始化。下面我先来看一个例子, 从客户端和服务器端分别分析一下Netty 的程序是如何启动的。首先,让我们从客户端的代码片段开始: EventLoo 阅读全文
posted @ 2019-07-19 21:57 吴振照 阅读(362) 评论(0) 推荐(0) 编辑
摘要:传统RPC 调用性能差的三宗罪 网络传输方式问题:传统的RPC 框架或者基于RMI 等方式的远程服务(过程)调用采用了同步阻塞IO,当客户端的并发压力或者网络时延增大之后,同步阻塞IO 会由于频繁的wait 导致IO 线程经常性的阻塞,由于线程无法高效的工作,IO 处理能力自然下降。下面,我们通过B 阅读全文
posted @ 2019-07-17 18:43 吴振照 阅读(1059) 评论(0) 推荐(0) 编辑
摘要:先来看一下MyBatis 的编程式使用的方法: public void testMapper() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getR 阅读全文
posted @ 2019-07-02 14:37 吴振照 阅读(3203) 评论(0) 推荐(0) 编辑
摘要:MyBatis 缓存详解 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力。跟Hibernate 一样,MyBatis 也有一级缓存和二级缓存,并且预留了集成第三方缓存的接口。 缓存体系结构: MyBatis 跟缓存相关的类都在cache 包里面,其中有一个Cache 阅读全文
posted @ 2019-06-28 15:43 吴振照 阅读(13243) 评论(4) 推荐(3) 编辑
摘要:1、BeanFactory Spring Bean 的创建是典型的工厂模式,这一系列的Bean 工厂,也即IOC 容器为开发者管理对象间的依赖关系提供了很多便利和基础服务,在Spring 中有许多的IOC 容器的实现供用户选择和使用,其相互关系如下: 其中BeanFactory 作为最顶层的一个接口 阅读全文
posted @ 2019-05-10 19:01 吴振照 阅读(311) 评论(3) 推荐(0) 编辑
摘要:1,索引谁实现的: 索引是搜索引擎去实现的,在建立表的时候都会指定,搜索引擎是一种插拔式的,根据自己的选择去决定使用哪一个。 2,索引的定义: 索引是为了加速对表中数据行的检索而创建的一种分散存储的(不连续的)数据结构,硬盘级的。 索引意义:索引能极大的减少存储引擎需要扫描的数据量,索引可以把随机I 阅读全文
posted @ 2019-02-01 11:33 吴振照 阅读(2112) 评论(2) 推荐(1) 编辑
摘要:在多线程并发编程中synchronized一直是元老级角色,我们在开发过程中可以使用它来解决线程安全问题中提到的原子性,可见性,以及顺序性。很多人都会称呼它为重量级锁。但是,随着Java SE 1.6对synchronized进行了各种优化之后,有些情况下它就并不那么重了,Java SE 1.6中为 阅读全文
posted @ 2019-01-11 14:32 吴振照 阅读(4333) 评论(4) 推荐(2) 编辑
摘要:消息的存储原理: 消息的文件存储机制: 前面我们知道了一个 topic 的多个 partition 在物理磁盘上的保存路径,那么我们再来分析日志的存储方式。通过 ll /tmp/kafka-logs/testTopic-0/ 命令找到对应 partition 下的日志内容: kafka 是通过分段的 阅读全文
posted @ 2018-12-20 17:05 吴振照 阅读(3631) 评论(0) 推荐(1) 编辑
摘要:关于 Topic 和 Partition: Topic: 在 kafka 中,topic 是一个存储消息的逻辑概念,可以认为是一个消息集合。每条消息发送到 kafka 集群的消息都有一个类别。物理上来说,不同的 topic 的消息是分开存储的,每个 topic 可以有多个生产者向它发送消息,也可以有 阅读全文
posted @ 2018-12-19 13:58 吴振照 阅读(3330) 评论(0) 推荐(2) 编辑
摘要:消费端消费消息: 在 初识ActiveMQ 中我提到过,两种方法可以接收消息,一种是使用同步阻塞的ActiveMQMessageConsumer#receive方法。另一种是使用消息监听器MessageListener。这里需要注意的是,在同一个session下,这两者不能同时工作,也就是说不能针对 阅读全文
posted @ 2018-12-14 16:51 吴振照 阅读(5789) 评论(0) 推荐(0) 编辑
摘要:持久化消息和非持久化消息的发送策略:消息同步发送和异步发送 ActiveMQ支持同步、异步两种发送模式将消息发送到broker上。同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消息,表示消息已经被broker处理。这个机制提供了消息的安全性保障,但是由于是阻塞的操作,会影响到客 阅读全文
posted @ 2018-12-12 10:08 吴振照 阅读(6849) 评论(0) 推荐(0) 编辑
摘要:消费端启动初始化过程: 消费端的代码解析也是从配置文件解析开始的,服务发布对应的<dubbo:service,解析xml的时候解析了一个ServiceBean,并且调用ServiceConfig进行服务的发布。服务的消费对应的<dubbo:reference,在初始化的过程中也解析了一个 Refer 阅读全文
posted @ 2018-12-04 16:46 吴振照 阅读(201) 评论(0) 推荐(0) 编辑
摘要:服务端发布流程: dubbo 是基于 spring 配置来实现服务的发布的,对于dubbo 配置文件中看到的<dubbo:service>等标签都是服务发布的重要配置 ,对于这些提供可配置化的支持,spring功不可没,spring提供了可拓展的Schema的支持。也就是自定义标签的使用,这样 du 阅读全文
posted @ 2018-11-29 16:54 吴振照 阅读(731) 评论(0) 推荐(0) 编辑
摘要:事件机制: Watcher 监听机制是 Zookeeper 中非常重要的特性,我们基于 zookeeper 上创建的节点,可以对这些节点绑定监听事件,比如可以监听节点数据变更、节点删除、子节点状态变更等事件,通过这个事件机制,可以基于 zookeeper实现分布式锁、集群管理等功能。 watcher 阅读全文
posted @ 2018-11-21 13:20 吴振照 阅读(4181) 评论(0) 推荐(0) 编辑
摘要:zookeeper 的由来: 分布式系统的很多难题,都是由于缺少协调机制造成的。在分布式协调这块做得比较好的,有 Google 的 Chubby 以及 Apache 的 Zookeeper。Google Chubby 是一个分布式锁服务,通过 Google Chubby 来解决分布式协作、Maste 阅读全文
posted @ 2018-11-19 15:13 吴振照 阅读(2083) 评论(0) 推荐(0) 编辑
摘要:1.spring boot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration,先看一下启动类的main方法 public ConfigurableApplicationContext run(String... args) { StopWatch stopWa 阅读全文
posted @ 2018-06-07 17:05 吴振照 阅读(490) 评论(0) 推荐(0) 编辑
摘要:有许多逻辑关系并不是简单的线性关系,在实际场景中,常常存在着一对多,甚至是多对多的情况。其中树和图就是典型的非线性数据结构,我们首先讲一讲树的知识。 什么是树呢? 在现实生活中有很多体现树的逻辑的例子。例如企业里的职级关系,就是一个“树”。 除人与人之间的关系之外,许多抽象的东西也可以成为一个“树” 阅读全文
posted @ 2020-07-24 15:05 吴振照 阅读(17) 评论(0) 推荐(0) 编辑
摘要:什么是数组? 数组对应的英文是array,是有限个相同类型的变量所组成的有序集合,数组中的每一个变量被称为元素。数组是最为简单、最为常用的数据结构。以整型数组为例,数组的存储形式如下图所示。 正如军队里的士兵存在编号一样,数组中的每一个元素也有着自己的下标,只不过这个下标从0开始,一直到数组长度-1 阅读全文
posted @ 2020-07-24 10:05 吴振照 阅读(8) 评论(0) 推荐(0) 编辑
摘要:什么是算法? 算法,对应的英文单词是algorithm,这是一个很古老的概念,最早来自数学领域。在数学领域里,算法是用于解决某一类问题的公式和思想。 计算机科学领域的算法,它的本质是一系列程序指令,用于解决特定的运算和逻辑问题。从宏观上来看,数学领域的算法和计算机领域的算法有很多相通之处。算法有简单 阅读全文
posted @ 2020-07-23 20:41 吴振照 阅读(6) 评论(0) 推荐(0) 编辑
摘要:私服是一种私有服务器,是在局域网中搭建的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建,私服搭建成功之后,当maven需要下载构件时,直接请求私服。私服上存在则下载到本地仓库,不存在才请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载,可以减少重复网络流量下载问题。 目前搭建 mav 阅读全文
posted @ 2020-07-16 14:22 吴振照 阅读(57) 评论(0) 推荐(0) 编辑
摘要:Archetype 是一个 Maven 项目模板工具包。原型被定义为原始模式或模型,从中创建所有其他相同类型的东西。这些名称适合我们尝试提供一个系统,该系统提供生成Maven项目的一致方法。Archetype 将帮助作者为用户创建 Maven 项目模板,并为用户提供生成这些项目模板的参数化版本的方法 阅读全文
posted @ 2020-07-16 11:05 吴振照 阅读(17) 评论(0) 推荐(0) 编辑
摘要:Maven 是一个系统管理框架或体系,专注管理构建的生命周期和各个阶段。真正工作的是绑定到各个阶段的 Maven 插件。每个插件具有一个或一个以上的目标,可以将这些插件的目标绑定到 Maven 生命周期的各个阶段中,或直接从命令行运行这些插件的目标。用户可以从 Apache 和其他的参考 Maven 阅读全文
posted @ 2020-07-15 19:19 吴振照 阅读(44) 评论(0) 推荐(0) 编辑
摘要:认识 Elastic-Job: 任务调度高级需求,Quartz 的不足: 作业只能通过 DB 抢占随机负载,无法协调 任务不能分片——单个任务数据太多了跑不完,消耗线程,负载不均 作业日志可视化监控、统计 发展历史: 官网:http:://elasticjob.io/docs/elastic-job 阅读全文
posted @ 2020-07-14 15:49 吴振照 阅读(155) 评论(0) 推荐(0) 编辑
摘要:分布式ID常见生成策略: 分布式ID生成策略常见的有如下几种: 数据库自增ID。 UUID生成。 Redis的原子自增方式。 数据库水平拆分,设置初始值和相同的自增步长。 批量申请自增ID。 雪花算法。 百度UidGenerator算法(基于雪花算法实现自定义时间戳)。 美团Leaf算法(依赖于数据 阅读全文
posted @ 2020-07-13 20:36 吴振照 阅读(102) 评论(0) 推荐(0) 编辑
摘要:在很多的场景下我们需要用到二维码,这里就通过google的zxing来对二维码进行实现。 二维码生成: 1.导入依赖: <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>2. 阅读全文
posted @ 2020-07-13 19:42 吴振照 阅读(35) 评论(0) 推荐(0) 编辑
摘要:什么是OAuth2? OAuth2是一个关于授权的开放标准,核心思路是通过各类认证手段(具体什么手段OAuth2不关心)认证用户身份,并颁发token(令牌),使得第三方应用可以使用该令牌在限定时间、限定范围访问指定资源。主要涉及的RFC规范有RFC6749(整体授权框架),RFC6750(令牌使用 阅读全文
posted @ 2020-07-07 11:03 吴振照 阅读(233) 评论(0) 推荐(0) 编辑
摘要:在之前的博客中我们实现了基于验证码的登陆方式。但是我们仅仅实现了通过图片验证码的登录,现在我们基于security 实现一下基于 短信验证码的登录。 基于之前对于 security 的了解,我们知道了要实现一个验证的基本流程,其中最重要的是 AbstractAuthenticationToken(令 阅读全文
posted @ 2020-07-03 20:29 吴振照 阅读(8) 评论(0) 推荐(0) 编辑
摘要:单机 Session 管理: 本文Demo 基于 springboot 2.0.1版本. spring security 中提供了很好的 session 配置管理。包括session 无效处理、session 并发控制、session过期等相应处理配置。 在 Security 的配置中我们重写了 p 阅读全文
posted @ 2020-07-02 16:57 吴振照 阅读(88) 评论(0) 推荐(0) 编辑
摘要:HashMap概述: HashMap基于哈希表的Map接口实现,是以key-value存储形式存在。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。在 JDK1.8 中,HashMap 是由 数组+链表+红黑 阅读全文
posted @ 2020-07-01 15:54 吴振照 阅读(29) 评论(0) 推荐(0) 编辑
摘要:spring security 验证码登录: 在现在主流的网站登录页上,我们经常可以看到登陆的时候是通过账号密码登录,那么时常会看到需要我们输入一个图片验证码里面的值。或者通过手机验证码进行短信登陆,进行获取验证码进行登录。而这两种登陆方式都用到了验证码,前者是图片验证码,后者是短信验证码。在spr 阅读全文
posted @ 2020-06-23 16:39 吴振照 阅读(187) 评论(0) 推荐(0) 编辑
摘要:Spring Security是什么? Spring Security 提供了基于javaEE的企业应有个你软件全面的安全服务。这里特别强调支持使用SPring框架构件的项目,Spring框架是企业软件开发javaEE方案的领导者。如果你还没有使用Spring来开发企业应用程序,我们热忱的鼓励你仔细 阅读全文
posted @ 2020-06-23 15:25 吴振照 阅读(331) 评论(0) 推荐(0) 编辑