程序员
Java领域佼佼者
免费学习网资源:(https://space.bilibili.com/526518958)
十余年Java行业经验。曾就职于阿里、携程等一线互联网公司。 专注于java领域,精通软件架构设计,对于高并发、高性能服务有深刻的见解 ,在服务化基础架构和微服务技术有大量的设计和建设经验
展开
-
熬了7天,总结出来了Java中动态规则的实现方式
背景业务系统在应用过程中,有时候要处理“经常变化”的部分,这部分需求可能是“业务规则”,也可能是“不同的数据处理逻辑”,这部分动态规则的问题,往往需要可配置,并对性能和实时性有一定要求。Java不是解决动态层问题的理想语言,在实践中发现主要有以下几种方式可以实现:表达式语言(expression language) 动态语言(dynamic/script language language),如Groovy 规则引擎(rule engine)表达式语言Java Unified Expr原创 2020-09-22 19:32:46 · 603 阅读 · 0 评论 -
jar包又冲突了?如何快速确定与哪个jar包冲突?
前段时间写代码的时候想借助一下fastjson的Feature.OrderedField来解决json乱序的问题,只需要增加一个参数即可,像下面这样JSON.parseObject("...",Feature.OrderedField),idea检查是没有任何问题的,但是跑单元测试的时候竟然报NoSuchFiledError(找不到Feature.OrderField),我猜测可能是jar包冲突了,所以下一步就是找出到底是和哪个jar包冲突了。解决方法一最开始我以为是mave...原创 2020-08-20 13:36:22 · 348 阅读 · 0 评论 -
Kafka 节点重启失败导致数据丢失的分析排查与解决之道
背景在 2 月10 号下午大概 1 点半左右,收到用户方反馈,发现日志 kafka 集群 A 主题 的 34 分区选举不了 leader,导致某些消息发送到该分区时,会报如下 no leader 的错误信息:In the middle of a leadership election, there is currently no leader for this partition and hence it is unavailable for writes.由于 A 主题 34 分区的原创 2020-08-14 14:27:30 · 1780 阅读 · 0 评论 -
Kafka 节点重启失败导致数据丢失的分析排查与解决之道
背景在 2 月10 号下午大概 1 点半左右,收到用户方反馈,发现日志 kafka 集群 A 主题 的 34 分区选举不了 leader,导致某些消息发送到该分区时,会报如下 no leader 的错误信息:In the middle of a leadership election, there is currently no leader for this partition and hence it is unavailable for writes.由于 A 主题 34 分区的原创 2020-08-10 19:35:13 · 923 阅读 · 1 评论 -
ZooKeeper 定位:能解决什么问题?不能解决什么问题?
ZooKeeper 很流行,有个基本的疑问:ZooKeeper 是用来做什么的? 之前没有ZK,为什么会诞生 ZK?OK,解答一下上面的疑问:(下面是凭直觉说的)ZooKeeper 是用于简化分布式应用开发的,对开发者屏蔽一些分布式应用开发过程中的底层细节 ZooKeeper 对外暴露简单的 API,用于支持分布式应用开发 ZooKeeper 在提供上述功能的同时,其还是一个 高性能、高可用、高可靠的分布式集群上面说这么多,总结一下,ZK 能解决分布式应用开发的问题,ZK 能很好的解决问题原创 2020-08-04 13:39:14 · 457 阅读 · 0 评论 -
用了这么久,token和session的区别,你真的清楚了吗?
session和token都是用来保持会话,功能相同一、session机制,原理session是服务端存储的一个对象,主要用来存储所有访问过该服务端的客户端的用户信息(也可以存储其他信息),从而实现保持用户会话状态。但是服务器重启时,内存会被销毁,存储的用户信息也就消失了。不同的用户访问服务端的时候会在session对象中存储键值对,“键”用来存储开启这个用户信息的“钥匙”,在登录成功后,“钥匙”通过cookie返回给客户端,客户端存储为sessionId记录在cookie中。当客户端.原创 2020-07-29 14:10:31 · 589 阅读 · 0 评论 -
Redis——由分布式锁,造成的一起重大事故
前言基于Redis使用分布式锁在当今已经不是什么新鲜事了。本篇文章主要是基于我们实际项目中因为redis分布式锁造成的事故分析及解决方案。背景:我们项目中的抢购订单采用的是分布式锁来解决的。有一次,运营做了一个飞天茅台的抢购活动,库存100瓶,但是却超卖了!要知道,这个地球上飞天茅台的稀缺性啊!!!事故定为P0级重大事故...只能坦然接受。整个项目组被扣绩效了~~事故发生后,CTO指名点姓让我带头冲锋来处理,好吧,冲~事故现场经过一番了解后,得知这个抢购活动接口以前从来没有出现过这种...原创 2020-07-21 16:07:00 · 211 阅读 · 0 评论 -
来了,来了,你们要的Nginx教程来了
一 Nginx简介1.1 什么是NginxNginx 是一个高性能的 http 和反向代理服务器,其特点是占用内存小,并发能力强。 Nginx专为性能优化而开发,性能是其最重要的考量,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。1.2 反向代理正向代理:在浏览器中配置代理服务器,通过代理服务器进行互联网访问。反向代理:将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴漏的是代理服原创 2020-07-21 16:05:48 · 230 阅读 · 0 评论 -
再见,Visio
提到流程图软件,大部分人想到的就是 Visio。确实,Visio 用的人多,和 office 集成度也很高。但是!!!1、Visio 不属于 Office 套件,需要单独购买;2、很多Mac、Linux 用户无法使用;今天,哈哥就给大家介绍一款堪比 Visio 的流程图软件:diagrams。它可以在线操作,也可以本地安装,还有各种丰富的图标个功能,并且完全免费!完全免费!下面就来感受下。特性多客户端支持网页版没有所谓的客户端支持一说。...原创 2020-07-15 21:04:07 · 582 阅读 · 0 评论 -
同事线上埋的这个坑,我整整找了3天3夜
对于线上系统调优,它本身是个技术活,不仅需要很强的技术实战能力,很强的问题定位,问题识别,问题排查能力,还需要很丰富的调优能力。本篇文章从实战角度,从问题识别,问题定位,问题分析,提出解决方案,实施解决方案,监控调优后的解决方案和调优后的观察等角度来与大家一起交流分享本次线上高并发调优整个闭环过程。一、项目简要情况概述该项目为基于SSM架构的商城类单体架构项目,其中有一个秒杀重磅模块,如下为当前线上环境的简要架构部署图,大致描述一下:(1)项目为SSM架构(2)服务器类别:1台负载均衡服原创 2020-07-11 14:10:55 · 2643 阅读 · 9 评论 -
你还在用迭代器处理集合吗?试试Stream,真香
首先给大家看一段代码,让大家直观感受下 Java7 和 Java8 遍历处理集合的不同Dish 是一个菜肴对象,calories 属性表示该菜品的卡路里值,name 则是菜品的名称。我们需要过滤出卡路里小于400、然后根据卡路里值升序、接着拿到他们的名称列表并返回Java7publicstaticList<String>getLowCaloricDishesNamesInJava7(List<Dish>dishes){List<Dish>...原创 2020-07-10 13:45:31 · 300 阅读 · 0 评论 -
答应我,别再if/else走天下了可以吗
想当年,其实我也特别钟情于 if/else连环写法,上来就是一顿SAO操作,比如举个好理解的简单栗子:一般来说我们正常的后台管理系统都有所谓的角色的概念,不同管理员权限不一样,能够行使的操作也不一样,比如:系统管理员( ROLE_ROOT_ADMIN):有 A操作权限订单管理员( ROLE_ORDER_ADMIN):有 B操作权限普通用户( ROLE_NORMAL):有 C操作权限比如一个用户进来,我们需要根据不同用户的角色来判断其有哪些行为,这时候SAO代码出现了:publ.原创 2020-06-28 16:25:14 · 193 阅读 · 0 评论 -
Tomcat 又爆出高危漏洞!Tomcat 8.5 ~ 10 中招…
开源界最近很热闹啊,各个主流软件或框架漏洞频发,比如像 Struts2、FastJSON、Dubbo、Redis、Tomcat 等都存在各种各样的漏洞。不要使用含有漏洞的组件每次也都被评为 OWASP 10 大安全漏洞之一。光这半年以来,所知道的就有 Dubbo、FastJSON、Tomcat:前段时间这个 Tomcat AJP 协议漏洞大开,2020/06/25 这天 Tomcat 又爆出 HTTP/2 拒绝服务漏洞:http://mail-archives.apache.org/mod原创 2020-06-27 17:08:06 · 2620 阅读 · 0 评论 -
Soul网关发布全新架构V2.2.0,让高性能网关变得如此简单
我们还是先来看看新增功能,然后再讲故事。完全的插件化架构设计,插件热插拔。 完整支持dubbo所有版本,alibaba-dubbo ,apache-dubbo。 支持dubbo泛化调用,多参数,复杂参数接口。 增强monitor插件,移除influxdb支持,新增内存,CPU,QPS,TPS,响应迟延等metrics,支持接入Prometheus。 springCloud插件支持eureka与nacos二种注册中心。 waf插件增强,支持黑白名单,以及混合模式。 抽离Hystrix熔断功能,原创 2020-06-20 14:34:37 · 1268 阅读 · 0 评论 -
Git 入门看这一篇就够了!程序员防被diss必会技能走一波
今天简单讲下 Git 的实现原理,知其所以然才能知其然;并且梳理了日常最常用的 12 个命令,分为三大类分享给你。如果觉得不错的话,一定要点个关注哦本文的结构如下:作者和开发原由 Git 的数据模型 常用命令 资源推荐作者和开发原由Talk is cheap. Show me the code.这句话就出自 Linux 和 Git 的作者Linus Torvalds。原本 Linux 内核的版本控制系统是用的 BitKeeper,然而 2005 年,BitMover 公司原创 2020-06-18 14:53:58 · 1056 阅读 · 0 评论 -
优秀的代码千篇一律,恶心的代码各有千秋,一些让人恶心的代码片段
1、下面一段代码将注释和代码混在了一起,不认真看还真不知道。高亮显示后:2、看到这种多层嵌套恶心到头大3、据说某俄国特工经过九死一生偷到了NASA的太空火箭发射程序的源代码的最后一页,代码是:))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))...原创 2020-06-16 15:35:03 · 516 阅读 · 0 评论 -
让你彻底了解 Java 8 的 Lambda、函数式接口、Stream 用法和原理
就在今年 Java 25周岁了,可能比在座的各位中的一些少年年龄还大,但令人遗憾的是,竟然没有我大,不禁感叹,Java 还是太小了。(难道我会说是因为我老了?)而就在上个月,Java 15 的试验版悄悄发布了,但是在 Java 界一直有个神秘现象,那就是「你发你发任你发,我的最爱 Java 8」.据 Snyk 和 The Java Magazine 联合推出发布的 2020 JVM 生态调查报告显示,在所有的 Java 版本中,仍然有 64% 的开发者使用 Java 8。另外一些开发者可能.原创 2020-06-11 17:01:12 · 295 阅读 · 0 评论 -
数据库和缓存一致性的几种实现方式,我们来聊聊?
缓存是互联网高并发系统里常用的组件,由于多增加了一层,如果没有正确的使用效果可能适得其反,诸如“缓存是删除还是更新?”,“先操作数据库还是先操作缓存?”都是些老生常谈的话题,今天我们就来聊一聊缓存与数据库的双写一致性的解决方案。Cache Aside Pattern在一开始先科普下最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。 更新的时候,先更新数据库,然后再删除缓存。推.原创 2020-06-10 16:31:55 · 270 阅读 · 0 评论 -
没了 IDE,你的 Java 项目还能 Run 起来吗?
计算机智能识别机器码0101...编程语言->能执行的机器码 需要经过 预处理->编译->汇编->链接->机器码 过程。一个语言处理系统的示意图如下:编译器是将源语言程序一次性翻译成一个等价的,用目标语言编写的程序。还存在另一种常见的语言处理器,解释器:它是逐个语句的执行源语言程序。由一个编译器产生的目标语言程序通常比一个解释器快,但解释器的错误诊断效果通常更好。Java语言处理器结合了编译和解释的过程。一个 .Java 源程序首先被编译为 .cl...原创 2020-06-09 14:22:10 · 930 阅读 · 0 评论 -
新手常犯的错,阿里规定代码中禁用这个,为何?
image在项目开发过程中经常遇到时间处理,但你真的用对了吗,理解阿里巴巴开发手册中禁用static修饰SimpleDateFormat吗?通过阅读本篇文章你将了解到:为什么需要LocalDate、LocalTime、LocalDateTime【java8新提供的类】 java8新的时间API的使用方式,包括创建、格式化、解析、计算、修改为什么需要LocalDate、LocalTime、LocalDateTime1.Date如果不格式化,打印出的日期可读性差Tue Sep...原创 2020-06-08 14:52:31 · 279 阅读 · 0 评论 -
避免被diss,务必记住这些正确打日志的方式
使用slf4j使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 实现方式统一使用: Logback框架打日志的正确方式什么时候应该打日志定位问题:当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定位的。 执行逻辑判断:当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支 功能执行流程:经常以功能为核心进行开发,你应该在提交代码前,可以确定通过日志可以看...原创 2020-06-04 15:25:12 · 380 阅读 · 0 评论 -
干掉 Date,Java8 LocalDate 简直不能贼香,赶紧来艿一口
简介伴随 lambda表达式、streams 以及一系列小优化,Java 8 推出了全新的日期时间API。Java处理日期、日历和时间的不足之处:将 java.util.Date 设定为可变类型,以及 SimpleDateFormat 的非线程安全使其应用非常受限。然后就在 java8 上面增加新的特性。全新API的众多好处之一就是,明确了日期时间概念,例如:瞬时(instant)、 长短(duration)、日期、时间、时区和周期。同时继承了Joda 库按人类语言和计算机各自解析的时间处理原创 2020-05-30 15:18:23 · 345 阅读 · 0 评论 -
一睹微服务架构世界:阿里P9资深技术专家精心整理的微服务系统架构设计手册
近几年,微服务架构在大量技术社区迅速蹿红,被认为是 IT 软件架构的未来方向。一线互联网公司由于具有大量的业务体量和业务场景,比如阿里、百度、网易,很早就开始入坑微服务架构。随着云端办公以来,发现微服务越来越重要了。Docker 容器技术和自动化运维等相关技术发展,使微服务变得更容易维护。大家可能都注意到,像阿里、腾讯、字节跳动等大厂的后端岗位明确写出:微服务设计经验优先。如果没有这方面的准备的话,想拿到高薪可不容易。再者,微服务在技术面试的时候多有提及,尤其对于头部互联网企业,微服务架构更是必备的原创 2020-05-28 16:21:43 · 678 阅读 · 0 评论 -
BAT大牛分析六篇实战电子版书籍JVM+多线程+Kafka+Redis+Nginx等
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。由于细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小.原创 2020-05-27 16:09:43 · 683 阅读 · 0 评论 -
阿里大牛带你玩转spring全家桶实战篇,Spring全家桶也不过如此
背景Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。目的:解决企业应用开发的复杂性 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 范围:任何Java应用Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。Spring框架...原创 2020-05-27 16:07:10 · 587 阅读 · 1 评论 -
宅在家的这几天,突然收到(余额宝)视频面试,四面成功拿下offer
进入主题之前,开篇先闲谈几句,这次的面试来得意外,主要也是因为疫情的缘故,所以心里上是没有准备的,这次肺炎对我们的学习、工作和生活都造成了非常大的影响,很多学校延期开学,企业也延期返工,实际上在闭关的这段时间里,我们正好可以好好利用这段时间,为自己之后想要做得事情充分做好准备,也希望肺炎赶快过去,我们的生活恢复正常。以下主要分享面经和个人学习方法,会包括很多PDF文档,如面试题库(含答案+解析)、学习笔记、实战文档和脑图等等,均可以免费分享,私信我【成长】即可领取~不关注是回复不了私信的由于疫情缘故原创 2020-05-26 14:58:45 · 917 阅读 · 0 评论 -
程序员开发进阶加薪利器:最新版的深入理解JVM底层和源码PDF
随着互联网的发展,高并发高可用、快速响应成为软件的必须,而JVM与这些有着密切关联。之前JVM系列好多都是一些由于STW影响到快速响应问题,忽然网站慢一下(抖动下)等问题,下面谈谈最近通过JVM排查到的高并发高可用问题。(在高可用高并发下面问题原因可能会很多,比如cpu异常高、磁盘IO高、SWAP空间等,有可能很多问题都是综合性的问题)。而且我们在尽情享受Java虚拟机带来好处的同时,还应该去了解和思考“这些技术特性是如何实现的”,去了解最底层的原理。只有熟悉JVM,你才能在遇到OutOfMemory等原创 2020-05-26 13:30:39 · 624 阅读 · 0 评论 -
P9资深技术专家打造的淘宝双11,618京东节亿级并发量系统手册,一起走进阿里、京东架构大世界
我们在找工作时,经常在招聘信息上看到有这么一条有构建大型互联网服务及高并发等经验,想到高并发,我们第一想到了媒体上经常出现的新闻阿里双11每秒处理xx万订单,瞬间觉得高并发是一种很屌的技术,很高大上高并发的概念高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求那么很多请求,具体达到多少请求才算是高并发系统呢?这个也没有明确数量上的定义,根据网上很多大型互联网公司的相关高并发博客,一般PV在千万级别以上的公原创 2020-05-23 18:44:40 · 1523 阅读 · 0 评论 -
Netty快速上手:Netty没有你想象的那么难
该文章是Netty相关文章。目的是让读者能够快速的了解netty的相关知识以及开发方法。因此本文章在正式介绍Netty开发前先介绍了Netty的前置相关内容:线程模型,JavaNIO,零拷贝等。本文章以大纲框架的形式整体介绍了Netty,希望对读者有些帮助。文中图片多来自于百度网络,如果有侵权,可以联系我进行删除。内容若有不当欢迎在评论区指出。Nettynetty是由JBOSS提供的一个Java开源框架,是一个异步的,基于事件驱动的网络应用框架,用以快速开发高性能,高可靠性的网络IO程序.NIO原创 2020-05-20 16:00:03 · 1133 阅读 · 0 评论