自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

只有变秃 才能变强

书写是对思维的缓存

  • 博客(359)
  • 资源 (1)
  • 问答 (2)
  • 收藏
  • 关注

原创 布隆过滤器在爬虫的几种使用场景以及布谷鸟过滤器的优点

布隆过滤器(概率型数据结构): 某样东西一定不存在或可能存在布隆过滤器原理?把一个 key 进行好几个 hash 运算后,得到的 hash 值,对一个 bit 数组取模放进去,用 1 表示, 比如下面示例:这个 再有其他 key 到来,再用同样的 方法计算 hash 值,判断bit数组的该位置是否为 1,都为 1 表示已存在(可能误判),不为 1,表示一定不存在.应用场景:1. 判断一个数据是否在数据库存在, 不存在再插入.(爬虫场景的幂等性入库操作)(对已经爬取过的 URL 去重)2.

2020-11-18 14:25:46 567

原创 K8s 服务故障排查指南

服务是 Kubernetes的一个重要概念,也是让许多开发人员感到困扰的根源。许多开发人员为了弄清楚无法通过服务IP或FQDN连接到他们的pod的原因花费了大量时间。出于这个原因,了解一下如何排除服务故障是很有必要的:如果无法通过服务访问pod,应该根据下面的列表进行排查:首先,确保从集群内连接到服务的集群I,而不是从外部。不要通过ping服务P来判断服务是否可访问(请记住,服务的集群IP是虚拟IP,是无法ping通的)。如果已经定义了就绪探针,请确保它返回成功;否则该pod不会成为服务的

2020-11-17 22:49:08 975

原创 K8S 集群中使用一个 Loadbalancer 暴露整个集群内所有服务的设想

在 K8s 中,将服务的类型设置为 LoadBalance ,该负载均衡器就会获得一个公开的独一无二的IP,并将所有的连接重定向到 Service然后就可以通过负载均衡器的IP地址访问该服务.但是 LoadBalancer 只能为一个服务提供 一个 公共IP,现实中我们有多个服务,每个服务都暴露一个公网 IP, 太浪费资源.解决方案有两种:一: 创建一个 LoadBalancer 的 Service,这个Service 就是一个 GateWay 服务,用来进行 K8S 集群内部的 服务转发我们知

2020-11-17 22:16:41 3334

原创 关于使用第三方库的一些思考和建议

在项目中免不了要使用第三方库, 使用第三方库,不但要统一,还可以浅浅的封装一层,预留未来的扩展性。为什么建议浅浅的封装一层?举个例子,如果不封装,redis官方Java客户端Jedis可能有这样一些接口:String Memcache::get(String key)String Memcache::set(String key, String value)String Memcache::del(String key)浅浅的封装一层,会变成这样:String MyKV::get(Strin

2020-11-16 22:46:55 614

原创 关于组件自研的一些思考

关于组件自研的一些思考

2020-11-16 22:42:06 180

原创 K8S 在微服务架构下做服务注册中心的一种思路

K8S 在微服务架构下做服务注册中心的一种思路

2020-11-16 22:39:41 5945 10

原创 docker hub 监听 github 提交并进行 docker 镜像构建的一种方法

平常我们个人开发一些项目时,想要 在github上的仓库更新时,自动构建上传docker镜像,现在 github 和docker 都支持私有仓库。对我们个人开发着来说非常方便。今天介绍一种docker hub 监听 github 提交并进行 docker 镜像构建的一种方法。首先你要有一个 docker hub 的账号,然后进行登录:可以看到主面板,然后点击create Repository填写信息接下来看下我们已经有的github仓库长什么样子?然后进行一次提交测试下docker 的构建

2020-11-15 10:38:56 392

原创 Docker Getting Start

Docker for desktop符合国情的科学安装指南: https://github.com/AliyunContainerService/k8s-for-docker-desktop{ "experimental": false, "debug": true, "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "http://hub-mirror.c.163.com" ]}注: 一定要

2020-10-13 17:30:12 2020

转载 GET和POST两种基本请求方法有什么区别

GET和POST两种基本请求方法有什么区别GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。当你在面试中被问到这个问题,你的内心充满了自信和喜悦。你轻轻松松的给出了一个“标准答案”:GET在浏览器回退时是无害的,而POST会再次提交请求。GE

2020-09-29 14:16:36 364

原创 CAP

参考: CAPCAP这个听起来很高大上的概念,在分布式系统中,如果选择了可用性(A) + 分区容错性§ , 就要放弃一致性©如果选在一致性© + 分区容错性§ , 就得放弃可用性(A) , 这种情况下,虽然系统的有些功能是不能使用的, 因为需要等待数据的同步, 但是那些和数据同步无关的功能还是可以访问的 , 相当于系统做了功能的降级。既然有AP和CP, 会不会出现仅仅是CA(一致性+可用性)这种组合呢?就是没有分区容错性, 只保留可用性和一致性?仔细想想, P(网络分区)其实是不可避免的,是

2020-09-29 09:56:03 241

原创 安装使用yarn,使用国内镜像加速npm和yarn

安装yarnhttps://yarnpkg.com/lang/zh-hans/docs/install/使用国内镜像加速npm和yarnnpm config set registry=https://registry.npm.taobao.orgyarn config set registry https://registry.npm.taobao.org下载cnpm:npm install -g cnpm --registry=https://registry.npm.taobao.

2020-09-22 22:11:06 896

原创 @Value 注入 List 类型的配置属性需要注意的 BUG

@Value 注入 List 类型的配置属性@Value 注解可以方便的帮助我们注入配置属性值.那么当注入一个 List 类型时该怎么做呢?想必大家都会知道,可以使用下面这种写法: @Value("#{'${zf.ids}'.split(',')}") private List<Integer> ids;上面的配置简单说下就是,先使用 ${zf.ids} 拿到配置文件中 zf.ids 属性的值,然后使用 #{} 也就是 SPEL 表达式语言进行按,拆分,得到的结果转为 List&l

2020-09-18 11:01:26 10750 2

原创 DIP , DI , IoC 傻傻分不清?

一张图看懂 DIP , DI , IoC 的关系Design Principle vs Design PatternIn software engineering, design principle and design pattern are not the same.Design PrincipleDesign principles provide high level guidelines to design better software applications. They do not

2020-09-05 15:57:31 505

原创 AOP,Spring AOP ,Aspectj,CGLIB 傻傻分不清?

一张图看懂 AOP,Spring AOP ,Aspect,CGLIB的关系 !Spring AOP , AspectJ , CGLIB 概念AOPAOP(Aspect Orient Programming) 作为面向对象的一种补充,广泛用于处理具有横切性质的系统级服务,如 事务,安全检查,缓存,对象池管理等。AOP 实现的关键就在于 AOP 框架自动创建代理对象,AOP 代理可分为 静态代理 和 动态代理 两大类,静态代理在编译阶段就可以生成代理类,因此也称为 编译时增强;动态代理 在运行

2020-09-05 15:41:20 854 4

原创 Mac 打造

1. 终端打造在 Mac 上将 zsh 用作默认 Shell让你的 Mac 提前用上 macOS Catalina 的 Shell——Oh My Zsh 配置指南iTerm2 设置字体(Mac OS X)[zsh 配置] zsh 命令自动补全插件2. 写作打造Typorapicgo

2020-08-23 09:21:17 150

原创 Spring Boot 中的 HttpClient 新贵 Retrofit !

大家都知道okhttp是一款由square公司开源的java版本http客户端工具。实际上,square公司还开源了基于okhttp进一步封装的retrofit工具,用来支持通过接口的方式发起http请求。如果你的项目中还在直接使用RestTemplate或者okhttp,或者基于它们封装的HttpUtils,那么你可以尝试使用Retrofit。retrofit-spring-boot-starter实现了Retrofit与spring-boot框架快速整合,并且支持了部分功能增强,从而极大的简化spr

2020-08-11 09:56:21 924

原创 IPv4,IPv6 字符串与 int 互转

不要重复造轮子, google guava 包里面已经提供好了工具类,直接拿来用 !原理: IPv4 32 位, java 中int 也是32 位, 故可以互转,但是 IPv6 地址需要转为 IPv4 才能转 int/*** IPv4 或者 IPv6 地址转换为int类型数字*/public static int ip2Integer(String ip) {InetAddress inetAddress = InetAddresses.forString(ip);Inet4Address

2020-07-13 14:27:28 2595

原创 延时队列的几种实现方式

延时队列的几种实现方式何为延迟队列?顾名思义,首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。延时队列能做什么?延时队列多用于需要延时工作的场景。最常见的是以下场景:延迟消费,比如:1 ,订单成功后,在 30 分钟内没有支付,自动取消订单2 ,如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存3 ,支付成功后, 2 秒后查询支付结果4 , ……如何实现?实现延时队列的方式有很多种,本文主要介绍以下几种常见的方式:

2020-07-10 16:57:56 8608 5

原创 Spring @Import 注解妙用

1. 前言很多时候我们的Spring项目使用多模块,或者我们需要将自己特定的类库打成依赖。默认情况下Spring Boot应用只会扫描main方法所在的包路径下的Bean和通过spring.factories进行注册发现自动装配到Spring IoC中去。像下面这个Maven项目中,如果Spring Boot的Main类在cn.felord.yaml包下的话cn.felord.common包的Spring Bean是无法被扫描注册到Spring IoC容器中的。Maven多目录项目今天我们将借助于@I

2020-07-08 18:43:30 415

原创 Spring Resource和策略模式应用

Spring 把所有能记录信息的载体,如各种类型的文件、二进制流等都称为资源,对 Spring 开发者来说,最常用的资源就是 Spring 配置文件(通常是一份 XML 格式的文件)。在 Sun 所提供的标准 API 里,资源访问通常由 java.net.URL 和文件 IO 来完成,尤其是当我们需要访问来自网络的资源时,通常会选择 URL 类。URL 类可以处理一些常规的资源访问问题,但依然不能很好地满足所有底层资源访问的需要,比如,暂时还无法从类加载路径、或相对于 ServletContext 的路

2020-06-29 12:01:14 1086

原创 Excel 导入导出太麻烦? Easy excel 了解一下 !

Easy-Excel它是什么?easy-excel 是基于 Apache POI 框架的一款扩展封装库,让我们在开发中更快速的完成导入导出的需求。 尽管很多人会提出 poi 能干这事儿为什么还要封装一层呢?easy-excel 很大程度上简化了代码、让使用者更轻松的 读、写 Excel 文档,也不用去关心格式兼容等问题,很多时候我们在代码中会写很多的 for 循环,各种 getXXXInde...

2020-04-23 18:25:56 1576

原创 Java 线程池是如何诞生的?

时间回到 2003 年,那时我还是一个名不见经传的程序员,但是上级却非常看好我,他们把整个并发模块,都交给了我一个人开发。(难道不是因为经费不足?)这个星期,我必须要完成并发模块中非常重要的一个功能 —— 线程池。为什么要使用线程池作为一个合格的程序员,接到需求,首先我得问自己一句:为什么要做这个需求?为什么需要线程池?软件中的 “池”,可以理解为计划经济时代的工厂。首先,作为工厂,你...

2020-04-08 15:15:22 308

转载 如何说服你的同事使用TDD ?

TDD(Test-driven development),也就是我们常说的 “测试驱动开发”,是由 Kent Beck 在 1996 年提出的概念。TDD 这个术语,经常被人挂在嘴边,然而真正在项目实施,却寥寥无几。是 TDD 对开发者要求太高?还是 TDD 根本就不值得去做?非也。为了让大家对 TDD 有一个具体而亲切的认识,我先给大家举一个在编程中使用 TDD 进行开发的实际例子。Bob...

2020-04-08 10:50:32 424

原创 浅谈测试驱动开发(TDD)

TDD 是什么TDD 是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD 的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么功能代码。TDD 的基本思路是通过测试来推动这个开发的过程,但测试开发并不是单纯的测试工作,而是把 需求分析,设计,质量控制量化的过程。TDD 的目的不仅仅是测试软件,保证代码质量仅仅是其中的一部分,更重要的是,在开发过程中帮助开发者...

2020-04-02 17:27:54 897

原创 上传Gradle项目到 mvnrepository

前言当我们封装完成我们自己做的工具之后,那我们肯定想要发给别人让别人来进行使用,上传到中央仓库是一种引入时最方便的选择。网上有很多教程,但是大多都是maven和windows的环境。今天就来记录一下,在mac上使用gradle上传jar到mvn中央仓库所要踩的坑。大致步骤:1、注册issues.sonatype.org2、创建issue3、根据issue完成相应操作4、生成公钥私钥...

2020-03-14 16:43:20 643

转载 UML类图以及常见类关系图解

UML类图以及常见类关系图解

2020-03-01 09:17:15 331

原创 Java 获取月初时间

网上说的一大堆都是炒来炒去的, 神烦! 我来说个简单的方法吧:OffsetDateTime dateBegin = OffsetDateTime.now() .withDayOfMonth(1).withHour(0).withMinute(0).withMinute(0).withSecond(0);LocalDateTime dateBegin = LocalDa...

2020-01-20 18:22:11 1527

原创 “云”到底是什么?--科普贴

越来越多的软件,开始采用云服务。从小型企业到全球企业,云都是一个非常热门的话题,它是一个非常广泛的概念,涵盖了很多在线领域。术语“云”的概念已经被过度使用了。但是如果穿过这些天花乱坠的宣传,我们就会发现云计算有三种模式。它们分别是:基础设施即服务(Infrastructure as a Service,IaaS);平台即服务(Platform as a Service,PaaS);软件即...

2019-12-29 15:49:55 5754 1

原创 MySQL:Left Join 如何过滤的?

现象:left join在我们使用mysql查询的过程中可谓非常常见,比如博客里一篇文章有多少条评论、商城里一个货物有多少评论、一条评论有多少个赞等等。但是由于对join、on、where等关键字的不熟悉,有时候会导致查询结果与预期不符,所以今天我就来总结一下,一起避坑。这里我先给出一个场景,并抛出两个问题,如果你都能答对那这篇文章就不用看了。假设有一个班级管理应用,有一个表classes,...

2019-12-24 11:02:20 3030

原创 Mysql 表连接的原理

Mysql 表连接的原理搞后端的肯定要经常接触到数据库,搞数据库一个避免不了的地方就是 join, join的语法很简单,但是在使用时常常陷入一下两种误区:误区一: 业务至上,管他三七二十一,再复杂的查询一个连接语句搞定误区二: 敬而远之,上次写的慢查询sql就是使用了join导致的,以后再也不敢用了先来举个栗子:mysql> SELECT * FROM t1;+------...

2019-12-11 16:32:44 1626

原创 什么是程序的局部性原理

01、前言作为有追求的程序员,我们日常在写代码的时候往往都会运用很多奇技淫巧,不单单是为了炫耀我们的技术,更是为了追求更高的效率。了解局部性原理,可以有效的帮助我们理解和写出更好的代码,对于局部性原理可能有的小伙伴知道,有的小伙伴不知道,知道的小伙伴就当做复习知识点,不知道的小伙伴也没关系,接着往下看就知道了。02、什么是局部性原理说到局部性原理,那我们首先要知道什么是局部性原理,局部性原理...

2019-12-02 11:38:14 11074 1

原创 实用:如何将aop中的pointcut值从配置文件中读取

背景改造老项目,须要加一个aop来拦截所的web Controller请求做一些处理,由于老项目比较多,且包的命名也不统一,又不想每个项目都copy一份相同的代码,这样会导致后以后升级很麻烦,不利于维护。于是我们想做成一个统一的jar包来给各项目引用,这样每个项目只须要引用该jar,然后配置对应的切面值就可以了。我们都知道,java中的注解里面的值都是一个常量, 如:@Pointcut("e...

2019-12-02 11:24:12 2260

原创 Spring 使用 @Transactioal 不会回滚的几种情况

Spring 使用 @Transactioal 不会回滚的几种情况对 Spring 的基于注解方式的实现步骤和事务内在实现机制有较好的理解之后,就会更好的使用注解方式的事务管理,避免当系统抛出异常,数据不能回滚的问题。正确的设置@Transactional 的 propagation 属性需要注意下面三种 propagation 可以不启动事务。本来期望目标方法进行事务管理,但若是错误的配置...

2019-11-26 17:09:32 669

原创 在SpringBoot中使用 STOMP协议 基于 WebSocket 建立 BS 双向通信

WebsocketHTTP、WebSocket 等应用层协议,都是基于 TCP 协议来传输数据的。HTTP不足在于它与服务器的全双工通信依靠轮询实现,对于需要从服务器主动发送数据的情境,会给服务器资源造成很大的浪费,WebSocket是针对HTTP在这种情况下的补充。对于 WebSocket 来说,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HT...

2019-11-13 17:24:04 1345 1

原创 Spring Websocket, SockJS, Stomp 整合

Spring Websocket, SockJS, Stomp 整合(WebSocket介绍)Spring Websocket, SockJS, Stomp 整合(WebSocket API)Spring Websocket, SockJS, Stomp 整合(SockJS Fallback)Spring Websocket, SockJS, Stomp 整合(WebSocket STOMP...

2019-10-29 15:52:04 404

原创 jOOQ-将两个表的连接提取到相应的POJO中

在jOOQ中如果我想将一行表取出到jOOQ自动生成的POJO中,例如:dsl.selectFrom(USER) .where(USER.U_EMAIL.equal(email)) .fetchOptionalInto(User.class);现在,假设我想在两个表之间进行连接,例如USER和ROLE,如何将结果提取到这两个表的P...

2019-09-25 10:48:13 2073

原创 三种实现分布式锁的方式

三种实现分布式锁的方式

2019-09-10 15:34:52 230

原创 不同的count用法

不同的count用法下面的讨论是基于InnoDB引擎的。这里,首先你要弄清楚count()的语义。count()是一个聚合函数,对于返回的结果集,一行行地判断,如果count函数的参数不是NULL,累计值就加1,否则不加。最后返回累计值。所以,count(*)、count(主键id)和count(1) 都表示返回满足条件的结果集的总行数;而count(字段),则表示返回满足条件的数据行里面,...

2019-09-09 15:59:38 1968

转载 还在业务中用if else,策略模式了解一下

if elseif ("BATCH_CHANGE_WAREHOUSE".equals(taskType)) { //批量转仓逻辑 } else if ("BATCH_CHANGE_SHIPPING".equals(taskType)) { //批量转快递逻辑 } else if ("BATCH_REPLACE_ORD...

2019-09-02 11:56:52 373

原创 TDD 编程实战

源码地址: https://github.com/itguang/TDD_INACTION分为java实现版本和kotlin实现版本项目介绍假想你在火星探索团队中负责软件开发。现在你要给登陆火星的探索小车编写控制程序,根据地球发送的控制指令来控制火星车的行动。初始需求火星车收到的指令分为四类:探索区域信息:告知火星车,整片区域的长度(X)和宽度(Y)有多大;初始化信息:火星车...

2019-08-24 10:00:23 3653 1

javaSE课件

世上最适合java初学者的资料,这是PPT,要视频的私聊我

2015-08-31

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

TA关注的人

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