自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Java架构师笔记

分享互联网最新文章 关注互联网最新发展

  • 博客(89)
  • 收藏
  • 关注

原创 Java架构-不要成为项目风险的奴隶

一个项目经理如果一直在项目中处于救火状态,那他就不是一个好项目经理。我所接触到的项目经理中,大家最常犯的一个错误,就是低估项目难度导致进度不可控制。由此,我今天想和大家讨论的主题,就是项目风险管理了。项目中不可能没有风险,正如理财一样,没有风险就没有收益。低风险低收益,高风险高收益。而我们都知道著名的墨菲定律,既有可能出错的事就一定会出错。项目中也一样,风险如果存在,就代表他一定会发生。项目...

2018-11-30 16:45:00 415

原创 Java架构/一致性Hash算法在数据库分表中的实践

最近有一个项目,其中某个功能单表数据在可预估的未来达到了亿级,初步估算在90亿左右。与同事详细讨论后,决定采用一致性Hash算法来完成数据库的自动扩容和数据迁移。整个程序细节由我同事完成,我只是将其理解并成文,供有相同问题的同行参考。参看此文的兄弟,默认各位已经熟悉一致性hash算法了。此文仅仅阐述代码细节,实现语言为Java。项目背景1.项目是一个实验室项目2.其中有一个表叫做试验表,用...

2018-11-30 15:46:58 2235

原创 Java架构-程序员如何修炼管理思维

一个技术精湛的程序员,只要有机会,就有可能被公司提拔为项目管理人员,掌控项目中的一切。但所谓权力越大责任越大,要想成为一个合格的项目管理人员,我认为最重要的首先是扭转自己的思想。正如老子说的“道为体,术为用。”我们的思维模式改变了,各种管理的方法和工具自然的就会去学习使用了。正所谓“有道者术能长久,无道者术必落空。”所以在本文中,我就要和大家聊一聊管理中的道。聊一聊我们程序员如何修炼管理思维。...

2018-11-30 15:36:52 369

原创 Java架构-面试算法:计算堆栈当前元素的最大值

有一道堆栈相关算法题,我被面试过两次以上,看似其在算法面试中出现的概率很高,由此值得我们好好分析下。题目是这样的:对于堆栈的常用操作有, pop 弹出堆栈顶部的元素;push 向堆栈压入一个元素;peek 获得堆栈顶部的元素值,但不弹出堆栈。现在要去你增加一个操作max, 它的作用是返回堆栈当前所有元素中值最大的那个,例如堆栈当前元素有:stack: 5,4,2,3那么max() 返回的值就...

2018-11-30 15:26:48 359

原创 搞定计算机网络面试,看这篇就够了(补充版)

昨天写了一篇自己搭建redis集群并在自己项目中使用的文章,今天早上看别人写的面经发现redis在面试中还是比较常问的(笔主主Java方向)。所以查阅官方文档以及他人造好的轮子,总结了一些redis面试和学习中你必须掌握的问题。事无巨细,不可能囊括到所有内容,尽量把比较常见的写出来。什么是Redis?Redis 是一个使用 C 语言写成的,开源的 key-value 数据库。。和Memcac...

2018-11-30 15:18:01 368

原创 【性能优化的秘密】Hadoop如何将TB级大文件的上传性能优化上百倍?

一、写在前面上一篇文章,我们聊了一下Hadoop中的NameNode里的edits log写机制。主要分析了edits log写入磁盘和网络的时候,是如何通过分段加锁以及双缓冲的机制,大幅度提升了多线程并发写edits log的吞吐量,从而支持高并发的访问。如果没看那篇文章的朋友,可以回看一下:《大规模集群下Hadoop NameNode如何承载高并发访问》。这篇文章,我们来看看,Hado...

2018-11-29 20:02:09 1298

原创 Java架构-拜托,面试请不要再问我Redis分布式锁的实现原理

一、写在前面现在面试,一般都会聊聊分布式系统这块的东西。通常面试官都会从服务框架(Spring Cloud、Dubbo)聊起,一路聊到分布式事务、分布式锁、ZooKeeper等知识。所以咱们这篇文章就来聊聊分布式锁这块知识,具体的来看看Redis分布式锁的实现原理。说实话,如果在公司里落地生产环境用分布式锁的时候,一定是会用开源类库的,比如Redis分布式锁,一般就是用Redisson框架就...

2018-11-29 19:53:55 3548 1

原创 Java架构-每秒上千订单场景下的分布式锁高并发优化实践!

“上一篇文章我们聊了聊Redisson这个开源框架对Redis分布式锁的实现原理,如果有不了解的兄弟可以看一下:《拜托,面试请不要再问我Redis分布式锁实现原理》。今天就给大家聊一个有意思的话题:每秒上千订单场景下,如何对分布式锁的并发能力进行优化?背景引入首先,我们一起来看看这个问题的背景?前段时间有个朋友在外面面试,然后有一天找我聊说:有一个国内不错的电商公司,面试官给他出了一个场景...

2018-11-29 19:42:20 2311 1

原创 Java架构-亿级流量系统架构之如何支撑百亿级数据的存储与计算

“本文聊一下笔者几年前所带的团队负责的多个项目中的其中一个,用这个项目来聊聊一个亿级流量系统架构演进的过程。一、背景引入首先简单介绍一下项目背景,公司对合作商家提供一个付费级产品,这个商业产品背后涉及到数百人的研发团队协作开发,包括各种业务系统来提供很多强大的业务功能,同时在整个平台中包含了一个至关重要的核心数据产品,这个数据产品的定位是全方位支持用户的业务经营和快速决策。这篇文章就聊聊...

2018-11-29 19:28:38 1469 1

原创 Java架构/如何判断一个元素在亿级数据中是否存在?

前言最近有朋友问我这么一个面试题目:现在有一个非常庞大的数据,假设全是 int 类型。现在我给你一个数,你需要告诉我它是否存在其中(尽量高效)。需求其实很清晰,只是要判断一个数据是否存在即可。但这里有一个比较重要的前提:非常庞大的数据。常规实现先不考虑这个条件,我们脑海中出现的第一种方案是什么?我想大多数想到的都是用 HashMap 来存放数据,因为它的写入查询的效率都比较高。写...

2018-11-29 16:48:14 977

原创 Spring Boot快速入门必须知识总集

SpringBoot是什么?springboot是spring家族中微型框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。Spring Boot可以轻松创建独立的,生产级的基于Spring的应用程序,您可以“运行”。特征:创建独立的Spring应用程序直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件)提供自以为是的“入门”依赖项以简化构建配置...

2018-11-29 15:59:38 308

原创 Spring Boot前后端分离Instant时间戳自定义解析

在SpringBoot项目中,前后端规定传递时间使用时间戳(精度ms).以上为简略实体类定义.在实际使用过程中,发现Incident中的createdTime以及recoveryTime数值不对.排查故障,前端去除时间戳后三位(即ms数),则时间基本吻合.因此,可以确定是SpringBoot在转换Instant时使用Second进行转换.因此对于Instant类型的转换添加自定义解析...

2018-11-29 15:51:50 1024

原创 Spring全家桶系列–SpringBoot之入门JPA

Spring全家桶系列–SpringBoot之入门JPA什么是JPA?一种规范,并非ORM框架,也就是ORM上统一的规范用了之后可以做什么,为什么要用?代码解释:实体类dao层测试类上面的操作已经完成了一个查询全部,相信不用在做多余的解释了JPA优点:主要就是简单易用,集成方便,可以不用写SQL语句准备工作这里的环境JDK 1.8 以上IDEA 2018.2...

2018-11-29 15:01:52 208

原创 Java架构-JVM垃圾回收机制

一、简介Java GC(Garbage Collection,垃圾回收)机制,是Java与C++/C的主要区别之一在C++/C语言中,程序员必须小心谨慎地处理每一项内存分配,且内存使用完后必须手工释放曾经占用的内存空间。当内存释放不够完全时,即存在分配但永不释放的内存块,就会引起内存泄漏,严重时甚至导致程序瘫痪。Java 语言的一大特点就是可以进行自动垃圾回收处理,而无需开发人员过于关注系统...

2018-11-29 14:50:08 194

原创 Spring Bean的生命周期

欢迎大家和我一起学习Spring Boot构建微服务云架构,我这边会将近期研发的Spring Boot微服务云架构的搭建过程和精髓记录下来,帮助更多有兴趣研发Spring Boot框架的朋友,大家来一起探讨Spring Boot架构的搭建过程及如何运用于企业项目。我本人邀约各大BATJ架构大牛共创Spring Boot构建微服务架构的交流社区。 (群号:364677697)欢迎各路架构...

2018-11-29 14:32:39 221

原创 使用SpringBoot+Dubbo 搭建一个简单的分布式服务,超详细,新手都能看懂 !

使用 SpringBoot+Dubbo 搭建一个简单分布式服务实战之前,先来看几个重要的概念开始实战之前,我们先来简单的了解一下这样几个概念:Dubbo、RPC、分布式、由于本文的目的是带大家使用SpringBoot+Dubbo 搭建一个简单的分布式服务,所以这些概念我只会简单给大家普及一下,不会做深入探究。什么是分布式?分布式或者说 SOA 分布式重要的就是面向服务,说简单的分布式就是我...

2018-11-28 20:13:43 585

原创 Java架构-Java开发中的一些小技巧

一、 Java获取URL地址中传递的参数二、获取请求的URL地址三、获取请求的IP地址四:判断字符串是否能够转换成指定格式的日期希望此文能帮到大家的同时,也听听大家的观点。欢迎留言讨论,加关注,分享你的高见!持续更新!我本人邀约各大BATJ架构大牛共创Java高级架构交流社区群,(群号:673043639)致力于免费提供Java架构行业交流平台,通过这个平台让大家相互学习成长,提...

2018-11-28 19:48:19 249

原创 Spring Boot 工程集成全局唯一ID生成器 Vesta

Vesta 是一款通用的 ID产生器,互联网俗称统一发号器,其具有几大很具有优势的特性:全局唯一粗略有序可反解可制造分布式而且支持三种发布模式:嵌入式发布模式中心服务器发布模式REST 发布模式根据业务的性能需求,它可以产生 最大峰值型 和 最小粒度型 两种类型的 ID,它的实现架构使其具有高性能,高可用和可伸缩等互联网产品需要的质量属性,是一款通...

2018-11-28 17:04:37 459

原创 分布式事务中间件 TCC-Transaction 源码分析 —— Dubbo 支持

1. 概述本文分享 Dubbo 支持。TCC-Transaction 通过 Dubbo 隐式传参的功能,避免自己对业务代码的入侵。可能有同学不太理解为什么说 TCC-Transaction 对业务代码有一定的入侵性,一起来看个代码例子:代码来自 tcc-transaction-http-sample 。声明远程调用时,增加了参数 TransactionContext。当然你也可以通过自己...

2018-11-28 16:26:23 309

原创 Spring Boot WebFlux 入门案例

为什么要使用WebFlux1.WebFlux异步编程,拥有更好的性能2.WebFlux完全基于java8开发,在编写代码时可以更加简洁明了例如(官网图):以前的风格WebFlux风格WebFlux入门案例WebFlux主要基于Reacotr,下面代码一段入门demo,分别使用Mono和Flux代码示例:测试代码:测试结果:WebFlux Mono...

2018-11-28 16:21:33 448

原创 SpringBoot 与 Kotlin 完美交融

本文讲解 Spring Boot2 基础下,如何使用 Kotlin,并无缝整合与完美交融。为了让读者更加熟悉 Kotlin 的语法糖,笔者会在未来的几篇文章中,聊聊 Kotlin 的新特性及其语法糖。环境依赖修改 POM 文件,添加 spring boot 依赖。紧接着,我们需要添加 mysql 依赖。最后,添加 Kotlin 依赖。注意的是,在 Kotlin 中,data cla...

2018-11-28 15:01:52 1353

原创 Java架构-代码分层的设计之道

分层思想,是应用系统最常见的一种架构模式,我们会将系统横向切割,根据业务职责划分。MVC 三层架构就是非常典型架构模式,划分的目的是规划软件系统的逻辑结构便于开发维护。MVC:英文即 Model-View-Controller,分成模型层、视图层、控制层。将页面和业务逻辑分离,提高应用的可扩展性及可维护性。如图所示。事实上,MVC 三层架构只是概念层面的指导思想,我们会将层次结构划分的更加细致...

2018-11-28 14:48:11 1584

原创 IntelliJ IDEA 快捷键快速实用篇 - -

希望此文能帮到大家的同时,也听听大家的观点。欢迎留言讨论,加关注,分享你的高见!持续更新!我本人邀约各大BATJ架构大牛共创Spring Cloud构建微服务架构的交流社区。 (群号:547793198)欢迎各路架构师、开发者,学习与交流使用Spring Cloud诸多强大组件的实战经验。为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是...

2018-11-27 14:38:33 378

原创 Java架构-HotSpot 虚拟机对象探秘

请读者首先注意本篇的题目中的限定语“HotSpot 虚拟机”,在虚拟机规范中明确写道:“所有在虚拟机规范之中没有明确描述的实现细节,都不应成为虚拟机设计者发挥创造性的牵绊,设计者可以完全自主决定所有规范中不曾描述的虚拟机内部细节,例如:运行时数据区的内存如何布局、选用哪种垃圾收集的算法等”。因此,本篇(整个内存篇中所有的文章)的内容会涉及到虚拟机“自主决定”的实现,我们的讨论将在 HotSpot ...

2018-11-26 20:09:13 211

原创 Java架构-使用 Visual Studio Code 进行 Swift 开发

Visual Studio Code(VSCode)是一个来自微软的跨平台文本和源代码编辑器。它是当今最令人兴奋的开源项目之一,有数百名贡献者定期更新。VSCode 是最早支持语言服务器协议(LSP)的工具之一,后者在针对各种语言和技术提供良好的开发体验方面发挥了重要作用。前段时间,Swift 团队宣布 SourceKit LSP 支持现在处于早期开发阶段,现在正好是时候看下这种集成如何为我们...

2018-11-26 19:56:43 637

原创 Java架构-你知道为什么 Facebook 的 API 以一个循环作为开头吗?

如果你有在浏览器中查看过发给大公司 API 的请求,你可能会注意到,JSON 前面会有一些奇怪的 JavaScript:为什么他们会用这几个字节来让 JSON 失效?为了保护你的数据如果没有这些字节,那么有可能任何网站都可以访问这些数据。这个漏洞被称为JSON 劫持,也就是网站可以从这些 API 中提取 JSON 数据。起源在 JavaScript 1.5 及更早版本中,可以覆盖原...

2018-11-26 17:32:16 346

原创 Java架构-数据建模 NoSQL 数据库的概念和对象建模符号

在最近的2018数据架构峰会上,Ted Hills主持了一个研讨会,该研讨会的主题是关系数据库和 NoSQL 数据库的数据建模。他表示,NoSQL 运动帮助了数据库社区明白了两件事。首先,并非每个应用程序都需要 ACID,并且,放宽 ACID 以能扩展到互联网规模。其次,表格数据组织很适合大量的数据,但未必适合所有的数据集。但是,随着时间的流逝,SQL/NoSQL 的显著区别将会消失,DBMS ...

2018-11-26 14:50:22 381

原创 Java架构-苏宁 11.11:苏宁易购订单搜索系统架构及实现

背景随着苏宁易购平台规模的飞速发展,平台的订单量呈现指数级的增长,存储容量已达 TB 级,订单量更是到了万亿级别,尤其在双 11 大促流量洪峰的场景下,面临两个挑战:1、如何存储如此巨大的数据量2、如何提供高并发、低延迟、多维度的检索服务传统关系型数据库无法支撑多维度的模糊检索,为此,我们选用了 elasticsearch 来提供索引服务,原因如下:1、技术及配套组件成熟2、有较大的...

2018-11-26 14:39:58 883 1

原创 Java架构-数据库如何确保其操作被 100% 正确执行?

我想你在使用数据库的时候,心里会假定这里面的数据都是 100% 准确的。回想一下,你在工作中有没有这样做过:有人给你反映了一个问题,说数据错了,你的自然反应是去检查代码有没有问题,而不会想到去确认数据库有没有问题?为了更快更方便地执行单元测试,你认为通过 Mock 数据加上断言(assertion)来代替数据库中实际存储的数据是完全没问题的。如果你这样做过,或者有过这样的看法,那你...

2018-11-26 13:52:50 381

原创 Java架构-跨进程通信,到底用长连接还是短连接

一个完整的软件系统大多数情况下是由多个进程共同协作进行的,哪怕它们在同一台服务器上。所以,进程之间如何进行高效的通信至关重要。单个应用程序 + 单个数据库这套基础开发套餐我相信每个人都经历过,甚至在初期它们还有可能部署在同一台服务器上。既然应用程序和数据库分属于两个不同的进程,所以这个问题本质上还是两个进程之间的通信问题。两个进程之间如果要通信,很显然必须要建立一个连接,通过它来相互传输数据...

2018-11-26 13:14:27 634

原创 Java架构-别忽视分布式系统这六大“暗流”

任何事物都有两面性。你只有了解了分布式系统背后的“暗流涌动”现象是什么,才能避免掉到“坑”里去。暗流的含义是流动的地下水,是潜伏在“深层”的,我们往往过度地沉迷于表面的美好,而忽略了它。在分布式系统当中,最容易被我们忽略的是下面这六大“暗流”:网络并不是可靠的不同节点之间的通信是存在延迟的带宽是有上限的分布式并不直接意味着是“敏捷开发”了数据由一份冗余成多份后如何...

2018-11-25 22:19:17 278

原创 Java架构-详解分布式系统本质:“分治”和“冗余”

站在全局角度看,分布式系统的本质是什么?其实说白了,就是两点:“分治”和“冗余”。分治和冗余使得分布式系统具备了核心价值,那么它的价值是什么?分布式系统的价值谈到分布式系统的价值,可能就得从 1953 年说起了。在这一年,埃布·格罗希(Herb Grosch)提出了一个他观察得出的规律——Grosch 定律。维基百科中是这样描述的:计算机性能随着成本的平方而增加。如果计算机 A 的成本是...

2018-11-25 20:17:04 448

原创 Java架构-拨云见日看什么是分布式系统?

本文是分布式系统系列文章的第一篇,后续还会有分布式系统的本质、分布式系统的暗流、数据库如何确保操作被 100% 正确执行?等文章陆续刊发,敬请期待。如果现在让你阐述一下什么是“分布式系统”,你脑子里第一下跳出来的是什么?我想,此时可以用苏东坡先生的一句诗,来形象地描述大家对分布式系统的认识:横看成岭侧成峰,远近高低各不同。“分布式系统”等于 SOA、ESB、微服务这些东西吗?我觉得每个...

2018-11-25 19:51:31 300

原创 Java架构-在一个成熟的分布式系统中 如何下手做高可用?

对于企业来说,随着规模越来越大,整个系统中存在越来越多的子系统,每个子系统又被多个其他子系统依赖或者依赖于其他子系统。大部分系统在走到这一步的过程中,大概率会发生这样的场景:作为某个子系统的负责人或者 OnCall 人员,休息的时候都不安稳,心里老是忐忑着系统会不会挂。导致周末不敢长时间出门,晚上睡梦中被电话叫醒,痛苦不堪。那么,在一个成熟的分布式系统中,我们该如何去保证它的可用性呢?迫切的需要...

2018-11-25 19:41:52 4058 2

原创 Java架构-美团即时物流的分布式系统架构设计

背景美团外卖已经发展了五年,即时物流探索也经历了 3 年多的时间,业务从零孵化到初具规模,在整个过程中积累了一些分布式高并发系统的建设经验。最主要的收获包括两点:即时物流业务对故障和高延迟的容忍度极低,在业务复杂度提升的同时也要求系统具备分布式、可扩展、可容灾的能力。即时物流系统阶段性的逐步实施分布式系统的架构升级,最终解决了系统宕机的风险。围绕成本、效率、体验核心三要素,即时物流体系大量结...

2018-11-25 17:21:40 5540 3

原创 Java架构-Java序列化的状态

关键要点Java序列化在很多库中引入了安全漏洞。对序列化进行模块化处于开放讨论状态。如果序列化能够成为模块,开发人员将能够将其从攻击表面上移除。移除其他模块可以消除它们所带来的风险。插桩提供了一种编织安全控制的方法,提供现代化的防御机制。多年来,Java的序列化功能饱受 安全漏洞 和zero-day攻击,为此赢得了“ 持续奉献的礼物 ”和“ 第四个不可饶恕的诅咒...

2018-11-23 20:47:01 300

原创 Java架构-Java代码规范那些事

Java开发中所要遵守的编码规范大体上有如下7点。命名规范、注释规范、缩进排版规范、文件名规范、声明规范、语句规范以及编程规范。1.命名规范(1)所有的标示符都只能用ASCⅡ字母(A-Z或a-z)、数字(0-9)和下划线“_”。(2)一个唯一包名的前缀总是全部小写的字母。例如:www.tonysun.cc(3)类名是一个名词,采用大小写混合的方式,每个单词的首字母大写。例如:Tony。(...

2018-11-23 20:04:20 321

原创 解决Spring Cloud Bus不刷新所有节点的问题及理解"Application Context ID must be unique"

如果同一微服务的多个实例使用的端口相同,当配置修改时,使用Spring Cloud Bus不会刷新全部实例的配置。此时需要配置各个实例的spring.application.index为不同的值。下面我们来分析一下原因。在Spring Cloud Config上有这么一段:Application Context ID must be uniqueThe bus tries to elimin...

2018-11-23 19:47:36 531

原创 Spring Cloud中,Feign常见问题总结

Spring Cloud中,Feign常见问题的总结。FeignClient接口,不能使用@GettingMapping 之类的组合注解代码示例:这边的@RequestMapping(value = “/simple/{id}”, method = RequestMethod.GET) 不能写成@GetMapping("/simple/{id}") 。FeignClient接口中,如果使...

2018-11-22 21:33:44 566

原创 Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题?

Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢?造成该问题的原因Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码。而首次请求往往会比较慢(因为Spring的懒加载机制,要实例化一些类),这个响应时间可能就大于1秒了。知道原因后,我们来总结一下解决放你。解决方案有三种,以fe...

2018-11-22 14:35:29 1084

空空如也

空空如也

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

TA关注的人

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