
后端开发
文章平均质量分 90
研发之道
一个坚持把架构做到极致的技术人,热衷于互联网技术。混迹互联网十几年,热衷于高性能、高并发、分布式技术领域的研究。
展开
-
近线召回 TFMS 在阿里妈妈广告平台的实践
一款功能强大的在线Markdown编辑器,为自媒体打造的一站式创作工具,支持自定义云存储,支持导出,支持一键发布到各自媒体平台原创 2022-05-21 00:13:00 · 1179 阅读 · 0 评论 -
CPU load高但CPU usage低问题排查
讲故事最近服务总是出现 cpu load高的告警,且告警经常还出现在低峰期的凌晨,所以很明显不是用户流量导致的负载高,但是 cpu buzy却很低。查看内存使用情况:mem.memused 接近100%,查看磁盘情况:swap.used周期性(30分钟左右)的较高, disk.io.util 低,但是 disk.io.avgqu-sz(平均请求队列的长度)周期性(30分钟左右)的较高,且和 cpu load高 同频。 后续经排查机器上上 crontab -l,查看周期为30分钟的定时任务,发现定时任务为原创 2020-10-19 18:44:13 · 7478 阅读 · 0 评论 -
水墨-在线 Markdown 编辑器
墨刀-在线 Markdown 编辑器基于 Spring-boot、FreeMarker、layui、Vditor 构建的一款在线 所见即所得的 Markdown 编辑器。墨刀-在线 Markdown 编辑器。本人使用 Vditor 编辑器时日已久,眼看着其功能日益强大,特此基于 Vditor 构建一款 Web 编辑器,愿为天下文人墨客贡献微不足道的力量。此项目正在陆续开源,疫情期间代码仓促,...原创 2020-03-01 23:24:32 · 894 阅读 · 0 评论 -
深入理解 AQS 之 Condition 源码
前言很久之前分享过ReetrantLock的实现深入剖析ReentrantLock公平锁与非公平锁源码实现,而今再回头去看,对AQS也有了更深刻准确的理解,随即更新了下之前的文章。今天分享利用AQS实现的另一个重要的JUC工具类Condition。如果上篇理解到位,这个Condition的学习就没啥难度的~我们应该都了解过Object的一些监视器方法:wait(), notify(), not...原创 2019-12-15 19:44:34 · 921 阅读 · 0 评论 -
搜索推荐系统中用户意图识别——查询理解知识体系
最近调研了下查询理解的相关知识体系分享个前段时间阿里对外分享的一个电商查询理解的PPT:【搜索推荐直播系列第三场】开放搜索行业智能搜索技术介绍-电商查询理解-20191105...原创 2019-11-26 16:18:41 · 2501 阅读 · 1 评论 -
微服务高可用利器——Hystrix熔断降级原理&实践总结
前言最近在工作中参与组内服务稳定性建设,梳理我们目前服务现状并接入公司自研稳定性保障平台。对公司内自研组件以及业界流行的Hystrix做了学习,Netflix Hystrix 里面大量RxJava响应式实现,实在看着有点绕。所以在这里梳理一些实践以及Hystrix知识点。为什么要做这个事情服务的稳定是公司可持续发展的重要基石,随着业务量的快速发展,一些平时正常运行的服务,会出现各种突发状况...原创 2019-11-25 14:53:51 · 3263 阅读 · 0 评论 -
一行代码引发的集群服务宕掉的血案分析
本文禁止转载!紧急处理过程11.05号晚上接近20点,有同事反应其它服务调用XXX服务出现少量超时,看了下Cat监控,发现些许机器当时处于fullgc,因为我们的XXX服务本身在高峰期就有较为频繁的fullgc,并且当天我还灰度了一台调过JVM参的XXX机器(本意是解决之前fullgc问题)。 所以当时误以为是像往常一样的fullgc引发的上游超时,同时从Cat gc指标来看,我灰度的一台...原创 2019-11-07 12:35:39 · 747 阅读 · 0 评论 -
由Finalizer和SocksSocketImpl引起的Fullgc问题盘点
本文作者禁止转载问题描述问题1: 我们的网关服务在发布刚启动的时候,总是会报几次fullgc,并且会引起少量请求超时。问题2.:同时服务在某些时间点会报出较多的超时异常,在cat监控上观察到超时异常和fullgc时间点吻合,fullgc耗时在600ms左右,那么至少fullgc停顿时间是造成短时间内大量超时的因素。并且观察到old区内存非常缓慢的线性增长,在达到old区内存92...原创 2019-10-18 21:06:51 · 2612 阅读 · 1 评论 -
分享一篇很棒的Linux IO栈讲解
原文地址: https://www.0xffffff.org/2017/05/01/41-linux-io/写在前面在开始正式的讨论前,我先抛出几个问题:谈到磁盘时,常说的HDD磁盘和SSD磁盘最大的区别是什么?这些差异会影响我们的系统设计吗?单线程写文件有点慢,那多开几个线程一起写是不是可以加速呢?write(2)函数成功返回了,数据就已经成功写入磁盘了吗?此时设备断电会有...转载 2019-08-16 23:25:34 · 2513 阅读 · 4 评论 -
InnoDB事务与分布式事务中一些关键问题
事务特性 ?•原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;•一致性: 执行事务前后,数据保持一致;•隔离性: 并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的;•持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响...原创 2019-08-11 01:51:39 · 663 阅读 · 0 评论 -
Guava EventBus原理
引用原创 2019-07-24 02:18:18 · 524 阅读 · 0 评论 -
AB/Testing 实验平台
原创 2019-07-24 02:10:19 · 2170 阅读 · 0 评论 -
工作中一些原则体会
尽可能让一切变得简单,用最简单的方式完成工作能用最少的概念,最精简易懂的概念模型来抽象系统,多一个概念就多一份别人了解系统以及维护系统的复杂度,别人也会质疑多一个概念的意义所在,自己如果没想清楚就容易被diss。特别是在类的设计中,会发现其实很多时候用一个类就可以表达要干的单一职责了,每个类职责清晰,类于类之间关系易于理解及维护。设计系统时某些功能只在需要它时构建对于这点深有体会, ...原创 2019-07-14 02:31:59 · 928 阅读 · 0 评论 -
深入剖析 Netty 源码设计(二)——BIO NIO AIO Reactor 模式到底干了啥
本文首发于 点击转到原文前言周末向往常一样睡了一上午,惆怅了一个中午,下午学了会习,梳理了下Netty的线程模型是如何体现Reactor模式的。继上一篇对一些通信底层IO的C函数学习,这一篇主要是总结Java里对底层IO不同层次的抽象,每一层都为了解决什么问题?为什么Reator模型使得现在Netty处理网络IO时如此高效?带着问题,我们一起来学习。BIO让我们先回忆一下传统的服务器端同步...原创 2019-01-28 12:35:49 · 980 阅读 · 1 评论 -
深入剖析Netty源码设计(一)——深入理解select poll epoll机制
前言打算输出一系列Netty源码分析与实践的文章,也作为后端开发学习过程中的沉淀,此文章为第一篇,从操作系统底层的IO讲起,为Netty 的出场做下知识准备。一些概念文件描述符文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。读写文件也需要使用文件描述符来指定待...原创 2019-01-24 10:51:08 · 4557 阅读 · 0 评论 -
工作中组内遇到的elasticsearch使用上的踩坑总结
嵌套索引的坑场景: 一个spu doc下有多个内嵌的csu,csu内有上下架状态,前台操作某csu上下架,在商城界面看起来未生效。坑1: mysql binlog消息监控组件dbus 通知服务端B多台机器消息变更时,未考虑spu下csu消息的消费顺序性,导致同一spu的多个csu上下架变更消息被多个后端服务乱序消费方案: 重新定制dbus消息通知 的分发逻辑,采用spu的唯一标志分发,进而保...原创 2019-01-13 20:52:01 · 2819 阅读 · 0 评论 -
双向链表实现
实现双向链表虽然复杂了点儿,但是有简单链表做前奏,这个还是想当顺心的。还是要注意 复制的时候要把数据成员全部复制。new结点的时候,给定next = NULL,preceding = new_copy。插入和删除时分是否位置是0;贴一发~List.h: /*==========================================================...原创 2015-10-28 19:45:13 · 504 阅读 · 0 评论 -
不得已二 Java两个栈模拟一个队列
github:https://github.com/cbamls 欢迎加入 (Java)全国各校IT精英 QQ群号: 467123855很简单只要记住add操作不需要倒栈 poll 和peek的时候判断性的倒栈 肯定能设计出来package com.offer.chapter1;import java.util.Stack;/** * CopyRright (c)2014-2016 Haerbi原创 2017-02-04 15:34:09 · 653 阅读 · 0 评论 -
jdk1.8.0_45源码解读——ArrayList的实现
一、ArrayList概述ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增转载 2017-02-04 20:11:53 · 607 阅读 · 0 评论 -
JDK 1.8 ConcurrentHashMap 源码剖析
转载两篇不错的文章:第一篇:前言HashMap是我们平时开发过程中用的比较多的集合,但它是非线程安全的,在涉及到多线程并发的情况,进行put操作有可能会引起死循环,导致CPU利用率接近100%。final HashMapString, String> map = new HashMapString, String>(2);for (int i = 0; i 10000转载 2017-02-04 22:53:27 · 8916 阅读 · 18 评论 -
译-- Lambda Expressions >=java SE8 (Lambda表达式详解)
原文地址:http://stackoverflow.com/documentation/java/91/lambda-expressions#t=201701170111285810613IntroductionLambda表达式用一个表达式提供了一个实现单个接口方法(函数式接口)的简洁明了的方式。他允许你减少你必须创建和维护的代码数量,它经常被用作匿名内部类的替代。ExamplesIntroduc翻译 2017-01-17 14:43:24 · 2702 阅读 · 0 评论 -
Optional用法(Java SE 8–Java SE 9)
原文:原文地址 Introduction Optional 是一个包含或着不包含一个非空值的容器对象。如果一个值存在,isPresent()将会返回true 并且 get() 将会返回所对应的值. 其他的方法依赖于所包含的值是否出现,比如orElse(如果值不存在就返回一个默认值)并且ifPresent()(如果值存在就执行一个代码块)。 Examples Map翻译 2017-01-15 19:15:17 · 13440 阅读 · 4 评论 -
Java 8 分析源码之 HashMap
原文地址:http://tech.meituan.com/java-hashmap.html?utm_source=tuicool&utm_medium=referral摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数转载 2017-02-03 22:44:34 · 696 阅读 · 1 评论 -
JDK 8 之 Stream sorted() 示例
原文链接:http://www.concretepage.com/java/jdk-8/java-8-stream-sorted-example 国外对Java8一系列总结的不错, 翻译过来给大家共享 这篇文章将会讲解Java 8 Stream sorted()示例, 我们能够以自然序或着用Comparator 接口定义的排序规则来排序一个流。Comparator 能用用lambada表达式来初翻译 2017-03-19 17:34:26 · 151742 阅读 · 13 评论 -
深入剖析JDK动态代理源码实现
动态代理、静态代理优缺点优点:业务类只需要关注业务逻辑本身,保证了业务类的重用性。这是代理的共有优点。动态代理只有在用到被代理对象的时候才会对被代理类进行类加载。 而静态代理在编译器就已经开始占内存了。。 缺点: 1)代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。 2)如果接口增加一个方法,除了所有实现原创 2017-03-30 14:18:37 · 2973 阅读 · 1 评论 -
Java9模块间的服务化详解
Jdk9模块化实战入门 本章我们来到了Jdk9新增的最重要的一块内容——模块化。有过编程经验的人都不应该对模块化陌生, 无论是项目代码的组织、还是应用的拆分、架构的设计都渗透着模块化的思想,如今jdk9 不但本身已经模块化,且对我们创建模块化的应用程序提供了“本地原生”支持。模块化的程序提供了更高级的封装性与服务化特性。本章我们将学习:什么是模块化jdk9 的模块化特性如何构建模块化程序面原创 2017-12-05 16:06:31 · 3136 阅读 · 1 评论 -
响应式编程Rxjava 书籍视频教程
转载请注明 AIQ - 最专业的机器学习大数据社区 http://www.6aiq.comAIQ 机器学习大数据 知乎专栏 点击关注响应式编程业界知秋大佬:《Java 编程方法论响应式 之 Rxjava 篇》书籍配套视频, 持续更新中.2019 年视频配套书籍<<Java 编程方法论响应式 之 Rxjava 篇 >> 和 <<Java 编程方法论响应...原创 2018-10-29 16:38:37 · 1483 阅读 · 0 评论 -
Effective Java要点笔记
基础知识要常回顾~,为了把姿势搞的优雅些,leader推荐花一周看下这本书,写了个笔记。新的一年打算常更新博客。第一章: 创建和销毁对象1.类可以通过静态工厂方法来提供客户端,而不是通过构造器优点: 自定义工厂名称,提高可读性 可以工厂里搞单例 控制实例类是哪种子类 总之是更加灵活,可读性更高缺点: 有可能会导致类无法子类化,因为一般搞工厂,就把...原创 2019-01-10 18:46:18 · 649 阅读 · 2 评论 -
分享一个Migo2.0企业级电商项目Demo ssm redis mysql dubbo 分布式部署 涵盖大量电商技术
本开源项目是由“知秋”大神 针对帮助大学生接触企业项目来开发的Demo,如果是中级程序员或着本科以上学生,从项目中可以挖掘好多东西。开发者提供了专门博客讲解技术点的实现,并提供对于此项目的交流群,会有大神讲解技术实现,群内分享大量企业级开发Demo,以及j2EE精品进阶高程电子书,优秀博文分享,目的就是为了资源共享,共同提高,己欲立而立人!群号码:(Java)全国各校IT精英467123855...原创 2016-12-15 12:30:53 · 3179 阅读 · 2 评论 -
$Value{}ntException: Could not resolve placeholder 'KEY' in string value "${
springmvc 中@Value("${KEY}") 出现 $Value{}ntException: Could not resolve placeholder 'KEY' in string value "${ 错误。 down vote Don't use multiple <context:property-placeholder/>...原创 2016-11-26 13:01:56 · 4915 阅读 · 0 评论 -
链栈的实现(加析构、重载、拷贝安全机制)
Seq_stack.h: [cpp] view plain copy print?/*============================================================================= # # Author: liangshu - cbam # # QQ : 75602957...原创 2016-07-12 13:02:43 · 802 阅读 · 0 评论 -
spring mvc redirect 重定向 跳转并传递参数 && mvc:view-controller直接转发页面
在项目中做form表单功能提交时,防止用户客户端后退或者刷新时重复提交问题,需要在服务端进行重定向跳转,具体跳转方式有以下几种方式:公用代码:Java代码 @RequestMapping(value="/index",method = { RequestMethod.POST, RequestMethod.GET }) public ModelAndView index(Ht...原创 2016-10-18 14:55:48 · 15391 阅读 · 0 评论 -
不得已一 维护一个栈并维护栈的最小元素getMin
github:https://github.com/cbamls 欢迎加入 (Java)全国各校IT精英 QQ群号: 467123855package com.offer.chapter1;import java.util.Stack;/** * CopyRright (c)2014-2016 Haerbin Hearglobal Co.,Ltd * Project: demo * Com原创 2017-02-04 15:29:55 · 405 阅读 · 0 评论