自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

火车站卖橘子

从新开始

  • 博客(44)
  • 资源 (6)
  • 收藏
  • 关注

原创 Effective Java 读书笔记

基于 effecttive java 第三版,部分条目是空的,理解不到位,只好留空。

2021-09-29 20:08:27 804

原创 活文档:与代码共同演进 —— 摘录

在活文档这本书中发现了很多有意思的观点和建议,特别摘录下来分享。

2021-09-16 23:29:17 403

原创 使用 tesseract 做 OCR 文字识别(Java)

1. 背景介绍​ 网络上介绍 tesseract 做 OCR 文字识别的文章较少,且时间久远,实际落地时难免出现纰漏,笔者也是走了不少弯路,故梳理一份最新的文档,方便后人查阅。2. 方案选型刚开始有多种方向,考虑到易用性和数据安全,最终采用 tesseract,下面罗列选型的过程OpenCV计算机视觉领域的老大哥,原生提供 C++ 接口,也可以通过引入 org.openpnp:opencv:4.5.1-2 支持 Java对接,然而我没有找到专门用于 OCR 的接口Tesseract是

2021-08-28 10:41:25 4576 5

原创 高性能 MySQL实战

内容来自于周彦伟的《高性能MySQL实战》,课程有 10 个课时,本人对其内容进行了梳理、消化并形成笔记。

2021-07-01 07:48:51 997

原创 synchronized实现原理与锁的优化

原文地址1. synchronized 实现原理1.1 获取锁synchronize 修饰语句块通过获取对象内部的监视器锁实现,使用了 monitorenter 和 monitorexit 指令,这两条指令在编译字节码时分别插入同步代码块的开始和结束位置(查看字节码可以使用 JDK 的 javap 命令,也可以使用 idea 的插件 jclasslib)synchronized 修饰方法flags 使用 ACC_SYNCHRONIZED 访问标志,表明该方法是一个同步方法java.

2021-03-23 21:45:59 160

原创 SpringCloud

SpringCloud 第一代

2021-02-21 15:22:43 432 1

原创 Dubbo

Dubbo 学习笔记

2021-01-31 18:12:03 259

原创 MyBatis-Plus快速上手

阅读本文需要 10 分钟,内容从官方手册抽取,都是比较常见的用法,访问官网可以获取最全面的解读 Mybatis-Plus1. 配置1.1 引入依赖使用 IDEA 的 Spring Initializer 可以快速创建一个 Spring Boot 项目,需要 mysql 和 mybatis的驱动<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java&.

2020-12-29 10:04:00 175

原创 Zookeeper

1. 简介1.1 分布式系统的问题每个节点的信息如何同步和共享,两种方式:通过⽹络进⾏信息共享通过共享存储1.2 Zookeeper 解决分布式系统的问题Zookeeper 通过共享存储解决分布式系统的协调问题1.3 基本概念集群中的角色Leader:为客户端提供读和写服务Follower:提供读服务Observer:提供读服务,但不参与 Leader 的选举,也不参与过半写成功策略,可以在不影响写性能的情况下提升集群的性能会话(Session)客户端启动时,会

2020-12-16 22:06:37 282 3

原创 分布式理论

1. 分布式理论1.1 回顾分布式与集群的区别集群:多个节点做同样的事分布式:多个节点做不同的事分布式系统特点分布式对等性:各节点之间没有关系并发性缺乏全局时钟故障总会发生1.2 分布式系统的发展原始:当前:1.2 分布式系统面临的问题通信异常:网络不可靠,存在延时甚至丢失的风险网络分区:由于延时等原因造成网络之间不连通,但各个子网络内部是正常的,那么分布式系统就会出现局部小集群;如果小集群各自完成原本需要整个分布式系统才能完成的功能,会导致数据一致性问

2020-12-06 00:48:42 191 2

原创 分布式与集群场景

1. 一致性 Hash 算法1.0 介绍应用案例:MD5、SHA等加密算法,数据存储和查询用到了 Hash 表Hash 的优点:查询效率高,时间复杂度接近于 O(1)直接寻址法:把数据和数组的下标绑定在一起,查找时通过 array[n] 直接获取结果,但是当数据较分散时会浪费空间开放寻址法:如果目标位置不为空,向前或向后找空闲位置存放,但是数组长度固定,存放的数据有上限拉链法:数组位置上存放链表的引用,当 Hash 冲突时,新加入的元素跟在链表后面1.1 Hash 算法应用场景归纳为两种

2020-11-24 22:11:09 192

原创 Tomcat学习笔记

本文基于tomcat 8.5.501. Tomcat 系统架构与原理剖析1.1 浏览器访问服务器流程1.2 Tomcat 处理请求大致过程Http 服务器接收用户发送的请求,然后再交给 Servlet 容器处理,Servlet 容器再调用具体的业务处理类Servlet 容器避免了 Tomcat 与具体的业务处理类耦合1.3 Tomcat Servlet 容器处理流程Http 服务器接收到 Request 请求后,用 ServletRequest 对象封装请求信息然后进一步调用.

2020-11-11 13:55:06 467

原创 Nginx学习笔记

1. 基础回顾Nginx主要命令./nginx 启动nginx./nginx -s stop 终⽌nginx(当然也可以找到nginx进程号,然后使⽤kill -9 杀掉nginx进程)./nginx -s reload (重新加载nginx.conf配置⽂件)2. 配置文件Nginx 核心配置文件 conf/nginx.conf 包含三块内容:全局块、events块、http块# 从配置文件开始到 events 块之间的内容,此处的配置影响 nginx 服务器整体的运行#user no

2020-11-11 01:15:17 109

原创 手写tomcat

本文记录了手写tomcat的关键步骤,阅读大约需要10分钟,文末有压缩包可下载验证1. 模拟Tomcat两个功能接收http请求返回资源2. 步骤使用Socket接收请求将请求信息封装成Request,返回信息封装成Response处理静态资源,若找不到则在页面上显示404启动时加载web.xml,保存url与servlet的映射关系处理动态资源,若找不到则在页面上显示404使用多线程优化请求处理3. 项目结构3.1 Bootstrap 启动类package serv.

2020-11-07 18:55:11 259

原创 SpringBoot学习笔记

本文较长,可以根据目录选择自己需要的部分进行阅读目录基础使用源码分析数据访问视图技术缓存管理1. 基础使用1.1 SpringBoot的优点起步依赖只需引入一个starter就包含了特定场景所需的依赖,如 spring-boot-starter-web 内包含了tomcat、spring-web、spring-webmvc父项目统一管理依赖版本,子项目引入时不需要关心版本号,通过依赖传递获取,spring-boot-dependencies 内可以看见许多常见技术框架的依赖版本自动

2020-11-01 23:59:15 164

原创 Spring MVC 请求流程 - processDispatchResult

阅读本文需要 5 分钟tips:本文属于 Spring MVC 请求流程 - 基于源码解读 的小分支前言processDispatchResult 的作用主要是3个获取物理视图渲染视图,将数据填充到请求域关键代码视图解析器将逻辑视图转换为物理视图渲染视图...

2020-10-25 11:55:23 860

原创 Spring MVC 请求流程 - 执行handle

阅读本文需要 10 分钟tips:本文属于 Spring MVC 请求流程 - 基于源码解读 的小分支拦截器在执行 handler 的前后,都会先走一遍拦截器查看 applyPreHandle,里面调用了 HandlerInterceptor 的 preHandler 方法登陆验证拦截其实就是实现这个方法,如果 preHandle 返回 false ,那么 applyPreHandle 就会返回 false,直接 return,后面的 handle 也就无法执行了执行H.

2020-10-24 23:34:32 285 2

原创 Spring MVC 请求流程 - getHandlerAdapter

阅读本文需要 3 分钟tips:本文属于 Spring MVC 请求流程 - 基于源码解读 的小分支介绍上一篇讲了 getHandler 获取执行链,执行链里包括当前请求URL对应的 handler 以及拦截器,本篇将针对 getHandlerAdapter 进行讲述DEBUG在 org.springframework.web.servlet.DispatcherServlet#getHandlerAdapter 处打断点,看到有3个处理器适配器HttpRequestHandlerAda.

2020-10-24 22:33:24 271

原创 记一个因resources路径引发的org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

阅读本文需要 5 分钟前言通常来说,这个 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 就是接口的方法找不到对应Mapper文件的statementId(namespace + id)常规的排查方法可以看这篇文章 链接但我的情况比较特殊,最后从这篇文章发现蛛丝马迹 链接原因是resources下的路径有【.】和【\】的区别问题还原IDEA 下,在resources 创建 co.

2020-10-21 22:45:00 129

原创 Spring MVC 请求流程 - getHandler

阅读本文需要 5 分钟tips:本文属于 Spring MVC 请求流程 - 基于源码解读 的小分支

2020-10-21 20:00:36 752

原创 调用dubbo服务时发生NoSuchMethodException

前言其实像这种找不到方法的,无外乎就是两种原因服务提供方未注册,通常是提交了代码但未重新部署服务消费方的jar版本与服务提供方的不一致,通常是服务消费方引用了旧版本的jar,找不到新的方法,这种可能是人为忘记更新jar,也可能是版本冲突导致引用了低版本的jar现场1 Failed to invoke the method queryOrder3 in the service com.example.order.service.IOrderService. 2 Tried 1 times

2020-10-21 10:17:16 2695

原创 Spring MVC 请求流程 - 基于源码解读

阅读本文需要 5 分钟前言一说到 Spring MVC 请求流程,大家都有一张成熟的流程图,我这里有一张是来自于 应巅 老师的但这不够,我们要从源码的角度上来理解这个过程打断点根据以下两个断点的调用栈,可以明确知道一个请求经过的类和方法Handler(Controller) 方法执行时机页面渲染时机分析请求流程我们知道一个请求最终会交给 DispatcherServlet 的 doDispatch 处理tips:上一篇 DispatcherServlet继承体系 对此有描述.

2020-10-20 23:43:01 150

原创 DispatcherServlet继承体系

阅读本文大约需要 x 分钟前言我们将立足于源码,从以下几个方面认识Spring MVC:DispatcherServlet继承体系Spring MVC请求流程请求流程关键步骤解读九大组件初始化本篇从核心类 DispatcherServlet 入手。使用IDEA查看继承体系在 DispatcherServlet 右键,找到 Show Diagram 选项,之后便可以查看继承体系这里删除了一些非关键信息,只看关键接口Servlet:位于 servlet-api 包的接口,手写 S.

2020-10-20 22:47:32 286

原创 使用JDBC操作数据库

演示JDBC操作数据库步骤1.添加依赖<!--mysql数据库驱动--><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.17</version></dependency>2.操作数据库详细步骤加载数据库驱动通过.

2020-10-03 15:26:59 101

原创 订单地址解析

背景:我们发现人工录入收货与发货地址是一个常见的场景,如用户下单、客服协助修改订单地址等,如果我们拥有一个地址解析工具,预计每笔订单能比原来60左右的时间缩减到5s,可以带来相当可观的效率提升。解决方案使用付费API使用开源工具:https://github.com/akebe/address-parse此工具采用JavaScript编写,使用简单,输入一个订单地址后,根据内置...

2020-04-20 00:05:07 851

原创 Java中的常量池技术

阅读本文大约需要3分钟, 文中代码来源于JDK1.8我们先看一个现象Integer a1 = 10;Integer a2 = 10;Integer b1 = 200;Integer b2 = 200;Integer c1 = new Integer(1);Integer c2 = new Integer(1);System.out.println(a1 == a2);// t...

2020-04-12 23:59:54 136

原创 浅谈ArraryList扩容机制

阅读本文大约需要10分钟,将分成两部分对解读ArrayList的扩容机制。首先,挖个坑:为什么要尽量指定集合大小?集合初始化集合初始化有两种方式,直接new,或者在new的时候指定集合大小List<Integer> list1 = new ArrayList<>();List<Integer> list2 = new ArrayList<&...

2020-04-06 00:45:10 313

原创 Elasticsearch安装

安装es之前,先确保已安装JDK8并配置好环境变量echo $JAVA_HOME下载es到本机(不建议使用最新的)wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.2.tar.gz解压到指定目录(按个人习惯即可)tar -zxf elasticsearch-6.2.2.tar.gz -...

2019-04-02 09:19:24 110

原创 HBase基础

记录HBase的学习历程,趟过的坑和总结介绍那HBase是什么呢?我们能用它来做什么?带着这两个疑问,我们一起学习HBase是一个NOSQL数据库,能够完成大数据的秒级查询HBase的数据真正存储的地方还是在HDFSHBase的核心思想 / Bigtable(大表)原理:将所有数据存入一张表中,以存储空间换性能HBase的几个概念表:存储和管理数据,Bigtable大表,而不...

2019-03-31 10:50:44 153

原创 Hadoop集群搭建

阅读本文需要1.准备共需要三台虚拟机,hdp01(192.168.130.10),hdp02,hdp03(02h和03等01配置完再克隆一份即可)在hdp01上修改hosts文件,做域名映射,vi /etc/hosts 192.168.130.10 hdp01 192.168.130.11 hdp02 192.168.130.12 hdp03关闭防火墙 #查看防火墙状态 s...

2018-11-18 23:06:10 117

原创 NAT模式下实现主宿互通

确定虚拟网关信息VMware - 编辑 - 虚拟网路编辑器 - 更改设置 - vmnet8 - 将主机虚拟适配器连接到网络,打勾NAT设置,看到网段是192.168.130.0(后面虚拟机IP都要在此网段内),网关IP是192.168.130.2检查VMnet8网卡配置,网关也是192.168.130.2,IP则是192.168.130.3进入CentOS,修改网卡配置...

2018-11-18 21:38:04 238

原创 API服务网关Spring Cloud Zuul

介绍背景:系统规模增大时,需要一套机制来降低维护路由规则与服务实例列表的难度微服务架构中,解决微服务接口访问时各种前置检验的冗余问题为了解决上述问题,API网关应运而生。Spring Cloud Zuul首先整合eureka,并注册为eureka的一个应用,同时从eureka获取其他应用的实例信息。此外,Zuul本身还有一套过滤机制。快速入门本节搭建示例在上一节(feign)...

2018-10-04 21:11:55 168

原创 声明式调用Spring Cloud Feign

介绍Spring Cloud Feign是一种简化开发的工具,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,不再需要手写RestTemplate和使用@HystrixCommand快速入门写在前面:下面将逐步介绍搭建环节,由于篇幅有限,只截取重要内容,SpringBoot项目构建方式请参考【读书笔记】2.构建SpringBoot项目,所有工程基于S...

2018-09-28 23:19:25 174

原创 Windows下MySQL 8.0安装教程(图文并茂)

前言:每次在新电脑安装MYSQL都感觉很陌生,特此留一篇下载下载离线安装包,https://dev.mysql.com/downloads/installer/, 如下图 说明:GA是稳定版,270多M是已经下载好的,建议下载这个安装包,而上面10几M的需要在线下载安装安装选择自定义安装方式,我们只需要安装MySQL数据库 选择组件 额外选项:自定义安装路径 ...

2018-09-08 22:32:46 9923

原创 服务容错保护Spring Cloud Hystrix

1eewq

2018-08-13 22:38:35 169

原创 Ribbon简单配置

todo

2018-06-23 09:05:56 257

原创 Eureka配置

1

2018-06-22 08:45:18 175

原创 客户端负载均衡Spring Cloud Ribbon

介绍是一个基于http/tcp的客户端负载均衡工具,基于Netflix Ribbon实现可以将面向服务的REST模板请求自动转换为客户端负载均衡的调用使用步骤服务提供者启动多个服务实例注册到同一个注册中心或者相互关联的注册中心服务消费者...

2018-06-21 08:07:09 177

原创 高可用注册中心

1

2018-06-19 21:18:24 168

原创 服务治理Spring Cloud Eureka

初识EurekaSpring Cloud Eureka是Spring Cloud Netflix套件的一个组件,基于Netflix Eureka做了二次开发为什么需要服务治理?微服务会越来越多,集群规模、服务位置、服务命名都会发生变化,很难通过静态配置来手工维护大量的微服务实例(想想Dubbo是怎么配置实例的),我们需要解决微服务架构中的服务实例维护问题。Eureka包含了服务端组件(注...

2018-06-10 20:09:38 207

OCR 文字识别示例项目

tesseract、tess4j、java、maven

2021-08-28

手写 tomcat IDEA工程

手写tomcat,最简单的示例,实现了接收http请求和资源获取两个功能,资源分为静态资源和动态资源,模拟了url匹配servlet

2020-11-07

feign-zuul-demo

包含服务注册发现,声明式调用以及网关服务的示例。

2018-09-28

eureka注册中心集群示例

该压缩包内含有eureka注册中心,生产者和消费者demo,解压后请先查看根目录下的README.md,有助于使用。

2018-06-19

eureka双节点实例

该压缩包内含有eureka注册中心,生产者和消费者demo,解压后请先查看根目录下的README.md,有助于使用。

2018-06-10

eureka注册中心,生产者,消费者实例

该压缩包包含了3个demo,分别是eureka注册中心,两个eureka客户端,解压后请先查看根目录下的README.md,有助于使用。

2018-06-10

空空如也

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

TA关注的人

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