自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

转载 Java软件架构师应该掌握的十个开源工具

Java世界中存在许多工具,从Eclipse,NetBeans和IntelliJ IDEA等著名的IDE开始到Java开发人员应该知道的JVM分析和监视工具,如JConsole,VisualVM,Eclipse Memory Analyzer等。今天就来重点介绍适用于各种Java开发人员的通用工具!1. JIRAAtlassian的JIRA是当前敏捷开发领域最重要的工具之一。它用于错误跟踪,问题跟踪和项目管理。如果你遵循敏捷开发方法,例如Sprint和Scrum,那么你必须了解JIRA。它允许您

2021-11-30 16:21:45 497

转载 撸了一个可调试 gRPC 的 GUI 客户端

前言平时大家写完 gRPC 接口后是如何测试的?往往有以下几个方法:写单测代码,自己模拟客户端测试。可以搭一个 gRPC-Gateway 服务,这样就可以在 postman 中进行模拟。但这两种方法都不是特别优雅;第一种方法当请求结构体嵌套特别复杂时,在代码中维护起来就不是很直观;而且代码会特别长。第二种方法在 postman 中与请求 HTTP 接口一样,看起来非常直观;但需要额为维护一个 gRPC-Gateway 服务,同时接口定义发生变化时也得重新发布,使用起来稍显复杂。于是我

2021-11-29 15:21:56 195

转载 Java代理模式之Java策略模式

Java策略模式在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。介绍意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。何时使用:一个系统有许多许多类,而区分它们的只

2021-11-28 16:04:48 120

转载 你知道12306 是如何支撑百万 QPS 的?

12306抢票,极限并发带来的思考?每到节假日期间,一二线城市返乡、外出游玩的人们几乎都面临着一个问题:抢火车票!虽然现在大多数情况下都能订到票,但是放票瞬间即无票的场景,相信大家都深有体会。尤其是春节期间,大家不仅使用12306,还会考虑“智行”和其他的抢票软件,全国上下几亿人在这段时间都在抢票。“12306服务”承受着这个世界上任何秒杀系统都无法超越的QPS,上百万的并发再正常不过了!笔者专门研究了一下“12306”的服务端架构,学习到了其系统设计上很多亮点,在这里和大家分享一下并模拟一个例子:如何

2021-11-28 15:52:04 121

转载 面试官:你给我说一下线程池里面的几把锁。

你好呀,我是歪歪。最近有个读者给我说,面试聊到线程池的时候,相谈甚欢,基本都回答上来了,但是其中有一个问题直接把他干懵逼了。面试官问他:你说一下线程池里面的锁吧。结果他关于线程池的知识点其实都是在各个博客或者面经里面看到的,没有自己去翻阅过源码,也就根本就没有注意过线程池里面还有锁的存在。他还给我抱怨:他这么一说,我也觉得,好像大家聊到线程池的时候,都没有怎么聊到里面用到的锁。确实是存在感非常低。要不我就安排一下?mainLock其实线程池里面用到锁的地方

2021-11-02 21:23:03 762

转载 IM服务器:开发一个高并发的IM服务器难在哪

IM服务器要实现的最基本功能就是消息的转发。——好像是一句废话!这就意味着IM服务器要为每个登录用户创建一个与该用户信息相关的内存上下文,为方便描述我们在这里称之为:user_context。user_context中一般包含这些基本信息:用户id、昵称、peer端的ip和端口,以及最重要的用于通信的socket。用户连接上线时,需要malloc一个user_context块,用于存储上述信息,用户断开连接时,需要free这个user_context块。IM服务器要随时维护这张user_cont

2021-11-02 17:21:11 167

原创 为什么一定要学习设计模式

先来看一个生活案例,当我们开心时,也许会寻求享乐。在学习设计模式之前,你可能会这样感叹:学完设计模式之后,你可能会这样感叹:大家对比一下前后的区别,有何感受?回到代码中,我们来思考一下,设计模式能解决哪些问题?1 写出优雅的代码先来看一段我很多年前写的代码。 public void setExammingForm(ExammingForm curForm,String parameters)throws BaseException {

2021-10-30 15:52:42 108

原创 TCP之拥塞窗口原理

学过网络相关课程的,都知道TCP中,有两个窗口:滑动窗口(在我们的上一篇文章中有讲),接收方通过通告发送方自己的可以接受缓冲区大小(这个字段越大说明网络吞吐量越高),从而控制发送方的发送速度。 拥塞窗口,也就是本文要讲的。概念一个连接的TCP双端只是网络最边缘的两台主机,他们不知道整个网络是如何工作的,因此他们不知道彼此之间的有效吞吐量。因此,他们必须找到一种方法来确定它。我们称之为拥塞窗口 (CWND)。这是在我们必须停止并等待确认之前可以发送的字节数。拥塞窗口是决定任何时候可以发出的字

2021-10-29 16:34:18 4966

原创 20张图,常见分布式理论与解决方案

对于分布式系统,最简单的理解就是一堆机器对外提供服务,相比单体服务,它可以承受更高的负载,但是分布式系统也带了一系列问题,比如如何解决某个节点故障的问题?如何解决数据一致性的问题?如何解决数据倾斜的问题?今天通过这篇文章,带大家搞懂和分布式相关的常见理论和解决方案。CAP理论先从定义开始:C(Consistence):一致性,所有的节点访问的是最新的数据副本,这是什么意思呢?我们知道在分布式系统中,为了高可用,往往一个节点会有若干个数据副本,简称Follower节点,比较常见的模式是我们的数据更

2021-10-29 16:30:37 172

原创 问题:两个对象值相同(x.equals(y) == true),但是可能存在hashCode不同吗?

面试官的考察点#这道题仍然是考察JVM层面的基本知识,面试官认为,基本功扎实,才能写出健壮性和稳定性很高的代码。涉及到的技术知识#(x.equals(y)==true),这段代码,看起来非常简单,但其实里面还是涉及了一些底层知识点的,首先我们基于equals这个方法进行探索。equals这个方法,在每个对象中都存在,以String类型为例,其方法定义如下public boolean equals(Object anObject) { if (this == anObject) {

2021-10-29 15:44:11 108

原创 要探索JDK的核心底层yuan码,那就要掌握native用法

场景有探索欲的同学,应该会跟我一样,在看JDK源码时,跟到最后,会出现native方法,类似下面这个方法 /** * Gets the platform defined TimeZone ID. **/ private static native String getSystemTimeZoneID(String javaHome);复制代码看到这个native ,说明已经挖到核心了,到了这一步,还是不清楚是怎么获取系统的默认时区的,那怎么办,JDK代码只能跟到这

2021-10-28 14:56:19 86

原创 Redis作为单线程 为什么我用它还是出现了超卖的情况?

实战说明最近在一个项目营销活动中,一位同事用到了Redis来实现商品的库存管理。在压测的过程中,发现存在超卖的情况。这里总结一篇如何正确使用Redis来解决秒杀场景下,超卖的情况。演示步骤这里不会直接给大家说明,该怎么去实现安全、高效的分布式锁。而是通过循序渐进的方式,通过不同的方式实现锁,并发现每一种锁的缺点以及针对该类型的锁进行如何优化,最终达到实现一个高效、安全的分布锁。第一种场景该场景是利用Redis来存储商品数量。先获取库存,针对库存判断,如果库存大于0,则减少1,再更新Red

2021-10-27 20:51:29 835 3

空空如也

空空如也

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

TA关注的人

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