- 博客(382)
- 资源 (15)
- 收藏
- 关注
原创 快速掌握redis高逼格系列
说实话,缓存技术已经成为每一个高阶程序员的必备的技能,而Redis 是互联网技术领域使用最为广泛的存储中间件(在阿里根据redis的二开的版本就有Tair ),国内外很多大型互联网公司都在使用 Redis。redis快速入门手册主要讲redis概述、特性、命令集、持久化配置、集群、客户端 Jedisredis缓存在windows上的应用主要介绍了下windows下的安装使用...
2019-06-05 10:13:46
4068
原创 Spring Cloud Feign和Ribbon源码系列汇总篇
Spring cloud 中服务之间通过restful方式调用。一种是RestTemplate+Ribbon,另一种是Spring cloud Feign默认集成Ribbon。
2019-05-05 15:01:25
46725
原创 Spring Cloud Hystrix 源码系列汇总篇
随着服务化的大规模演化,每个应用系统对这些依赖的稳定性与否对系统的影响非常大。而依赖有很多不可控问题:网络连接缓慢,资源繁忙,服务暂时不可用等。特别是高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险。Netflix 公司开发并成功使用Hystrix,它是社区中非常活跃的限流降级神器。Netflix 应用系统规模TheNetflixAPIprocesses10+b...
2019-05-05 14:28:43
4084
原创 响应式编程 RxJava系列
近两年来国内的技术圈子中越来越多的开始提及ReactiveX,一方面反映出现在的高级开发者的追求越来越高逼格,另一方面也反映从从结构化编程到面向对象编程到函数式编程的发展历程,越来越多的应用和面试中都会有ReactiveX,响应式编程中RxJava可谓如鱼得水。最近也一直在使用rxjava,刚好有时间就把之前分享的整理出来的。前言:异步那些年我们追过的异步骚操作:ListenableF...
2019-04-26 20:46:42
28657
原创 Elasticsearch reindex效率提升
如果你的mapping里某个类型有修改或者你需要迁移数据那就可以借助reindex来完成,它很方便的进线异步重建,并且还支持跨集群。如果您使用零副本进行索引,则恢复副本的过程本质上是逐字节的网络传输。reindex的底层是是通过scroll实现,每个Scroll请求,可以分成多个Slice请求,可以理解为切片,各Slice独立并行,利用Scroll重建或者遍历要快很多倍。如果每批索引1000个文档(1000个文档是1mb),调整size值从大约5-15 MB的大容量开始,直到你看不到性能的提升。
2023-01-03 19:34:51
1895
1
原创 竞品数据抓取指南
谈起爬虫,一般人都会嗤之以鼻,没错,它本身不是一个很有挑战的技术活!当然,直到你读完本文内容可能会有所改观。本着技术服务于业务,业务需要的是供应商谈判助手,市场营销.....等等。抓包有这么复杂吗?没错,一般情况下我们直接爬取一个网页(html)或对方的接口是没什么难度,根据对方的规则进行即可,然后就是数据清洗,筛选出自己关注的产品制作报表即可。技术上实现上没有太大的创新,无非就是关注2个点:收集种子(生产url) 消费种子(消费url)二者递归即可!下图就是笔者理解的一个分布式的爬
2020-09-29 17:26:35
1196
原创 常见应用系统设计须知
大多优秀的开源的后端程序,通常有三个部分组成,而这些都完全独立开发。协议本质是有对外沟通(通讯)的需求,服务于client与server。大多数情况下,我们采用内置的通用网络协议(http或各种rpc) 也可以自定义网络协议,只需提供序列化和反序列化函数,就可以定义出自己的算法常言道:数据是稳定的,处理是多变的,而算法着手于在稳定的数据结构中,提供高效丰富的计算,评估它的标准在于时间及空间复杂度。通用算法有:sort,merge,map-reduce等任务流任务执行的宿主是线
2020-09-10 18:33:32
1136
原创 Elasticsearch的search之_shards skipped之谜
es从 v5.6 开始引入了 pre-filter 机制(skipped):对于 Date 类型的 Range 查询,在对分片执行搜索之前,先检查一下分片是否包括被查询的数据范围,如果查询的范围与分片持有的数据没有交集,就跳过该分片。"_shards":{ "total": 130, "successful": 130, "skipped": 2, "failed": 0}skipped(Integer) Number of shards that skipp...
2020-07-11 13:28:15
2009
1
原创 Elasticsearch的copy_to探秘
es从6.7开始提供了copy来提高搜索的效率。它源于_all的,假如我们要经常对这三个字段进行搜索,那么一种方法我们可以在must子句中使用should子句运行bool查询。这种方法写起来比较麻烦。有没有一种更好的方法呢?copy_to可以将它们合成一个字段,这样可以方便我们的搜索。{ "city" : "北京", "province" : "北京", "country" : "中国", "location" : { ...
2020-07-11 12:52:05
4307
4
原创 spring-core:内省之MethodIntrospector
关于java bean的内省模式与spring bean的关联在之前的章节已经讲过。接下来要分享下方法内省MethodIntrospector,自从spring 4.2.3中开始支持,如果有热剩饭的感觉那你完全可以跳读了。//源自package org.springframework.core;public final class MethodIntrospector { public ...
2020-04-30 18:37:49
1946
原创 spring boot:日志系统源码深度解析
总所周知,spring boot对各类日志组件进行了集成,使用起来非常便捷,让我们需要定义对应日志框架的配置文件,比如LogBack、Log4j2等,代码内部便可以直接使用。话不多说,接下来让我们来领略spring这块的奥秘吧。目录spring如何集成日志组件LoggingSystemLogFile是什么LoggingSystem的实例化logback.xml的加载优先级...
2020-04-30 16:08:55
2051
1
原创 Java 开发者福利:aliyun java initializr和Cloud Toolkit
今天给大家分享2个国产优秀的开源工具,aliyun java initializr(spring脚手架)和Cloud Toolkit (idea plugin),工具是个好东西,比如PanDownload,可以让你在百度云盘上快速裸奔。1.aliyun java initializr近日阿里巴巴中间件发布不久的定制版Spring Initializr,熟悉Spring Initializr...
2020-04-21 11:52:23
4636
原创 spring5的那些事:@Indexed 解密
随着云原生的发展,很多技术会被重新掂量,重新定义,历来技术的发展也是遵循天时地利,以其势尽享其利。再云原生下,jdk的最大的问题在于笨重(几百mb),启动慢,而像Serverless架构,NodeJS技术栈可谓更完美。其实在jdk9中倡导模块化本质在于减少JVM的体积,不需要资源(Jar)不用再加载,而启动慢的问题其实也有解决方案GraalVM (一款类似于HotSpot VM),它的先进之处在于...
2020-02-29 18:27:58
5713
原创 ElasticSearch update api 和 update_by_query哪家强
很久没有怎么随记笔记了,今天这里是为了纠正一个一直以来我们使用es的一个误区,这个误区很大的可能你会就范。很多童靴会把update_by_query拿mysql的语法特性来用,那你就大错特错了,这里有必要温习下我之前的一篇update_by_query,理论上讲es的准实时的仅限于search,而get id则是实时的。实践往往是检验真理的唯一标准,看下面演示吧<!--1.关闭re...
2020-02-21 12:33:00
7359
原创 spring core:@AliasFor的派生性
spring对Annotation的派生性应用可谓炉火纯青,在spring core:@Component的派生性讲过支持层次上派生性,而属性上派生的需求则借助了@AliasFor,它是从spring4.2中开始支持的。@AliasFor注解用于声明注解元素的别名,应用于方法上(别忘了注解本质是接口)。Spring框架在内部使用大量的使用这个注解,例如,@Bean,@ComponentScan...
2019-12-31 19:15:03
8067
1
原创 spring core:@Component的派生性
spring对注解的拓展,早已超越J2EE的规约。通过注解可以实现其派生性(Annotation Hierarchy)。自从spring2.5开始,每个大版本都对其进行了增强。何为派生?没错一般能想到的就是属性派生,直接上代码,其实Parent和Child看似是派生的关系,但实则并无关系!它们是两个毫无关联的接口(我在面试的时候会提问:注解和接口的关系),通过javap -v .\Ch...
2019-12-31 15:13:29
1805
2
原创 再谈elasticsearch下的深度分页
Elasticsearch 在业务系统中使用也越来越广,一些开发规范也需要慢慢重视起来。 我们知道在关系型数据库中,我们被告知要注意甚至被明确禁止使用深度分页,在es中也应该尽量避免使用深度分页。es提供的分页查询是通过from和size参数来完成,from默认是0,size默认为10,比如:{ "from" : 100000, "size" : 50, "query" : { "ter...
2019-12-06 18:22:55
6778
原创 spring boot之maven-wrapper
Spring Boot有很多功能特性值得借鉴和学习,很多玩Spring Boot的人知道不需要安装Tomcat很方便,其实并没有发现Maven也是不需要提前安装。它这样做的好处在于解决了开发环境maven版本不一致导致的各种问题,spring boot中集成了maven-wrapper的确比较务实。它是什么相信大家都用到spring的脚手架:https://start.spring.io/...
2019-11-23 14:32:00
13274
2
原创 论spring事务下的消息发送
最近一直疲于重构canal consumer的客户端,近期也会陆续分享下一些开发同学常见的问题。其实很多时候发现问题并快速的解决问题并不难,难得时候是否有引起你的深度思考。谈起spring事务下发MQ消息,一般人都是直接撸面条式的硬代码,也有些高级的玩法会采用spring的ApplicationEvent来拓展实现,而spring中的@TransactionEventListener则是最高端的玩...
2019-11-17 20:53:41
1681
原创 再谈elasticsearch 高cpu问题
首先要阐述一个观点,任何技术都是为解决某一个领域的问题而存在的,我们在使用它的时候,尽可能使用它的优势(亮点),去发挥它应具备的业务价值。es在很多公司应用非常广泛,它已经成为玩大数据的必备的技能,在之前的章节我吐槽过es写方面的问题,今天将吐槽下es查询-terms语法的那些坑,这里探讨两点:一个是多terms并发带来高CPU,另一个是terms使用不当会导致bug。业务场景我们基于门店...
2019-09-28 20:11:31
12095
2
原创 畅谈Java模块化与微服务
微服务这2年的发展太热门了,这阵势很容易导致开发者一叶障目,首先微服务是需要一些技术沉淀的,其次和业务体量、开发团队的规模有关,这里不展开探讨微服务之殇。业务的复杂度继续堆积犹如潘多拉魔盒,本文将从依赖、模块化的视角来展开探讨。提前模块化,要从大神毕玄的osgi模块化中国社区谈起,模块对代码进行了更高一级的抽象作为一个基本单位,表现形式通常为一个jar或一个fat-jar。众所周知的,我们一般...
2019-09-08 16:07:54
10278
原创 es6.x下的filter query
说实话玩es的同学一般都会痛苦,为何api又变了?确实,明明按资深专家的建议来,但好像API完全找不到或被移除了,对,只能说es太热了。一般提到查询优化,就避不开filter query。我们query查询的时候会去计算下查询表达式和文档的匹配程度得分,得分越高的排的越靠前,而filter不会,filter是仅仅做过滤。filter主要通过bitset(类似于布隆过滤器,为每个倒排索引搜索...
2019-09-03 21:10:02
3370
转载 Redis工具列表
Redis tool list Here is a Redis tool list. I hope you will find one or two of them that you’d like to try out. Table of Contents Redis Cluster Redis Variety Redis Proxy Redis Module Redis Client Redis Data Migration Redis Monitor Redis Admin Web & UI R
2019-09-01 15:31:55
1681
原创 选 Zookeeper 作为注册中心我们还要注意些什么
Zookeeper是一个分布式协调框架,而在它的基本用法在上一节讲过了,很多同学可能会Zookeeper这么好,直接做微服务的注册中心也没啥问题的,其实关于这样点社区里也喋喋不休,几乎在dubbo的每届大会中有大篇幅的讲解。接下来将针对大牛在大厂大集群的实践中去探讨一些坑:1.注册中心是CP还是AP在之前的章节分享过关于Consul、zooKeeper、etcd、eureka作为注册中心的...
2019-09-01 15:00:09
2984
原创 再谈DDD和Microservices
面对高复杂度的时候我们会做关注点分离,这是一个最基本的哲学原则。技术维度分离,类似MVC这样的分层思想是我们广泛接受的 业务维度分离,根据不同的业态来划分系统,比如按售前、销售、售后划分微服务的架构更强调从业务维度的关注点分离来应对高复杂度。这是显著区别于传统SOA架构的特质之一,比如诞生于传统SOA时代的ESB(工业服务总线)就是一个典型的从技术关注点分离出来的中间件。业务和技术渐进...
2019-08-31 22:36:51
1035
原创 fastDFS精讲
在一般大中型的企业对文件的存储需求多种多样,特别是在容器化技术非常流行的时代下,依然有很多采用fastDFS,Distributed file system, DFS,又叫做网络文件系统,Network File System。一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。分布式文件系统是被设计用在局域网,而分布式数据存储,则是泛指应用分布式运算技术的文件...
2019-08-30 22:06:07
982
原创 Zookeeper快速入门
Zookeeper是一个分布式协调框架,近年来已经成为一个热门的话题,不懂用法及原理几乎会被鄙视。下面将分享下,很久之前的笔记,同时也喜欢可以达到为故而知新的目的。目录1.介绍2.应用场景3.基本概念3.1.Paxos算法3.2.ZAB协议3.3.选举3.4.集群角色3.5.会话3.6.数据模型3.7.数据节点3.8.版本3.9....
2019-08-28 23:00:59
7723
5
翻译 Netty 4.0中的那些变化
Netty 是最优秀的NET库,每个大版本的一些特性都会引入注目,本文带你了解重温Netty 4.0的值得注意的改变和新特性,帮助你将应用程序从老的Netty3迁移到最新的版本上。翻译自官方文档New and noteworthy in 4.0。目录1. 项目结构的改变2. 通用 API 的改变3. Buffer API 的改变3.1.ChannelBuffer→ByteB...
2019-08-23 23:30:21
6952
原创 云原生下的应用系统配置变更管理:confd
云原生下,所有非容器化的应用系统都要思考,是继续将就还是讲究。个人感觉云原生下,很多很多的技术标准及规约将重新被定义,重新定义会将分布式应用各个环节重新标准化,对依赖做到更透明,低侵入甚至是无侵入。 回到主题,confd是阿里的Nacos 作者推荐的工具,对于大型的复杂的应用系统,特别实用,它提供配置变更的自动下发,及时生效。它解决的痛点配置管理变得繁琐 配置项越来越多 修改后需要重新...
2019-08-23 22:17:53
4666
原创 关于ElasticSearch的Update By Query的那些著名的坑
提起es的Update By Query很多人一定也不陌生,它对应的就是关系型数据库的update set ... where...语句,这对应一般的存储引擎而言算是最基本的功能,但它的坑确不少,多到让你使用起来很奔溃,比如批量更新时非事务模式执行(允许部分成功部分失败)、大批量操作会超时、频繁更新会报错(版本冲突)、脚本执行太频繁时又会触发断路器等。1. 非事务模式执行在前面update...
2019-08-19 15:08:37
16851
4
原创 elasticsearch实践篇:跨表join查询补充篇
在上一篇elasticsearch实践篇:跨表join查询中讲过2种方式,其实并不全面。ES还有2种方法来处理数据实体间的关联关系:Nested objects(嵌套文档)和Parent/child relationships(父子文档)。1. Application-side joins(服务端Join或客户端Join)这种方式,索引之间完全独立(利于对数据进行标准化处理,如便于上述两种...
2019-07-31 12:15:09
20613
原创 大话Redis主从同步
最近在整理一些之前面试过程中遇到比较有意思的话题,写出来其实更多的是为了抛砖引玉,触发你对它深度思考。如果你也无法get到面试官对Redis主从同步方面的关注点,那这篇文章足以引起你鼻腔的共鸣。Redis主从同步很多人不太熟悉甚至避而不谈,不像mysql主从同步一般人都可以朗朗上口,归根到底是Redis主从同步是一种过渡时期的方案,并非高可用的方案。主从同步1. 为何要同步当 mast...
2019-07-22 21:02:47
1109
原创 spring boot中如何启动tomcat或jetty的
最近面试中会聊到这个话题,说实话之前已经做过大量spring boot源码级的分享,如果你在之前看过Spring Boot 容器启动原理揭秘,想必已经有了一个大概的认识。启动tomcat或jetty其实也跳不出这个套路,或者讲它仅仅是其中的一个环节,通过AbstractApplicationContext.onRefresh()完成的。知识回顾Spring Boot的一个及其吸引人的特性是...
2019-07-09 22:58:11
4106
原创 Spring Boot 访问安全之认证和鉴权
在web应用中有大量场景需要对用户进行安全校,一般人的做法就是硬编码的方式直接埋到到业务代码中,但可曾想过这样做法会导致代码不够简洁(大量重复代码)、有个性化时难维护(每个业务逻辑访问控制策略都不相同甚至差异很大)、容易发生安全泄露(有些业务可能不需要当前登录信息,但被访问的数据可能是敏感数据由于遗忘而没有受到保护)。为了更安全、更方便的进行访问安全控制,我们可以想到的就是使用springmvc的...
2019-07-04 10:26:17
18877
翻译 测试4个Java运行时代码生成器的性能:cglib, javassist, JDK proxy & Byte Buddy
虽然Java的强类型及动态类型系统让你可以写出表述性强,健壮的应用程序,但是它限制了框架API与用户类型协作的能力。为此,出现了很多使用了反射API的开源库,但却破坏了类型安全,因此Java的反射API并不总是与用户类型交互的最佳方式。为了保留用户类型,最好使用了运行时代码生成的方式。程序代码生成是Java平台的固有特性当编译Java应用程序时,Java编译器为字节码服务而不是可执行程序...
2019-06-29 22:33:38
5570
2
原创 堆外内存泄露揭秘
说实话jvm中堆外内存使用的场景非常多,它可降低GC、减少用户态与内核态切换及数据拷贝,已经成为性能提升的有效手段。比如通讯(netty之对象池Recycler),MQ(本地IO之零拷贝之类)。一般使用堆外内存要重点关注手动释放or 自动释放,从笔者的过往经验中谈,堆外内存一旦发生泄漏,排查起来相对的困难。你可能比较好奇,为何比较困难呢?笔者认为:涉及泄漏最终会定位到c的代码,一般都是内核级g...
2019-06-27 21:43:48
2679
原创 Mybatis的核心实现Plugin、Interceptor
本章讲Interceptor其实在分享怎样的设计才是具备良好的拓展性的程序,注重内功修为的童靴可能更感兴趣。Mybatis中的插件允许你针对核心组件接口Executor 、StatementHandler、ParameterHandler、ResultSetHandler中任何一个方法进行拦截调用。而每个Interceptor(拦截的接口)其实是通过JDK的动态代理技术生成的代理类,每当执行这4种...
2019-06-27 17:01:15
2747
2
原创 Mybatis中的resultMap和resultType 和parameterMap与 parameterType的区别
说实话Mybatis的知识点不少,在之前讲过mybatis的一级缓存与二级缓存(作用于在Executor组件)。而今天的主题是parameterMap、parameterType、resultType、parameterMap,它们作用于ParameterHandler组件与ResultSetHandler 组件层。如果有人问你这类问题,其实是在考你的基本功(是否知道mybatis的架构或源码)...
2019-06-26 22:09:42
9165
1
原创 Nginx 的多进程异步模型要了解下么
Ngnix 是互联网企业使用最为广泛的高性能的反向代理服务器,为何叫反向代理之前也讲过。它可以为后端分布式服务提供负载均衡的功能,它可以将后端多个服务地址聚合为单个地址来对外提供服务。它正是采用了多进程 PreForking 异步模型达到了业界公认的高并发的处理能力。说实话使用java语言通过编码层面去实现多进程几乎奢想(找不到相关资料),接下来将使用Python来体验下多进程的魅力!N...
2019-06-20 22:38:14
962
原创 彻底理解mysql innodb的死锁
死锁只发生在并发的情况,也就是说你的程序是串行的是不可能发生死锁。通常表现为两个事务都在等待某个资源可用而无法继续进行,因为每个事务都持有另一个事务需要的锁,而它们都不会释放所持有的锁。为此,InnoDB引擎有一个后台的锁监控线程,它负责查看可能的死锁问题,并自动告知用户。可以通过 innodb_deadlock_detect 配置选项禁用死锁检测,innodb还提供了innodb_lock_wa...
2019-06-18 19:38:58
2572
1
autojs-debug-4.1.1 Alpha2.apk
2020-09-18
jvascript的调试插件
2009-12-24
动态制作gridview
2009-09-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅