自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

MaoLin Tian's Blog

from Bird to God(mdzz的直译)

  • 博客(611)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 【生产问题排查 三】Kafka消费者消费堆积且频繁rebalance

照例总结一下,虽然基础服务的一些中间件一般都由基础架构部门维护,但还是要对这些中间件的配置和使用要有所了解,这样出了问题才能快速定位问题、解决问题,避免影响线上稳定性。

2023-08-10 00:39:22 1802

原创 【生产问题排查 二】一次内存泄露排查-MAT使用指南

照例总结一下,线上出了问题不要慌,也别想着保留现场,先止损!平时的报警机制要建立好且阈值要低些,这样才能先于业务发现并解决问题。还有就是MAT是真香!

2023-08-08 23:42:48 1585 1

原创 【Java设计模式 学习目标及大纲】高质量代码的标准及实现路径

易维护、易读、易扩展、灵活、简洁、可复用、可测试的代码就是高质量的代码,而高质量代码的达成路径工具箱包括:面向对象设计思想是基本指导思想,是很多设计原则、设计模式的实现基础;设计原则是代码设计的抽象经验总结、是设计模式设计的指导原则;设计模式是代码设计的一套具体解决方案或设计思路,主要用来提高代码可扩展性;编程规范是一套可执行的代码编写规范,主要用来提高代码的可读性;代码重构依赖面向对象设计思想、设计原则、设计模式、编程规范实现,主要用来提高代码的可维护性。也可以这么理解:1个设计思想、6个设计原则、23个

2022-05-03 22:21:30 1034

原创 【团队技术知识分享 一】技术分享规范指南

技术分享时应秉持的基本原则:应有团队和个人、奉献者(统筹人)的概念,同时匹配团队激励、个人激励和最佳奉献者激励;团队应该打开工作内容边界,成员应该来自各内容方向;评分标准不应该过于模糊,否则没有意义,应由客观的基础分值以及分团队的主观综合结论得出。应有心愿单激励机制,促进大家共同聚焦到感兴趣的事情上;选题应有规范和框架,具体到某个小类,这样收获才有目标性,发布分享主题时大家才能快速判断是否是自己感兴趣的;流程和分享的模版应该有固定范式,避免随意的格式导致随意的内容,评分也应该部分参考于此;参会原则,应有

2022-02-25 18:05:04 2251

原创 【ElasticSearch从入门到放弃系列 五】ElasticSearch分布式集群搭建

上一篇blog介绍了ES的原理和基本使用方法,因为ES最厉害的地方就在于PB级别准实时的搜索能力,当然PB级的数据对于单个服务器去存储和检索还是很有难度的,所以ES一般使用时都使用分布式集群搭建。分布式相关概念级别概念集群 cluster一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能。一个集群由一个唯一的名字标识,这个名字默认就是“elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群节

2020-08-19 09:26:27 479

原创 【IPD流程学习 二】IPD主要流程

上一篇博客详细论述了产品开发过程中遇到的问题,看来不光是我自己感受到了,其实大家都有那种很累但是又没产出的感觉,是整体的流程机制出了问题,所以才要搞流程变革,而其中和我们开发人员最密切相关的就是IPD流程,了解了IPD的目标、核心理念以及涉及人员之后,来详细聊聊IPD的流程。概念与设计阶段:项目建立、组织、架构与概要设计的评审开发阶段:产品的详细设计、开发测试到上线的迭代流程验证阶段:产品...

2020-02-13 17:52:26 6823

原创 【工作中问题解决实践 四】动态解析Json结构最佳实践

前段时间武哥安排了个任务:把结构动态的Json数据结构解析出来。所以要求无论嵌套了多少层,都要拿到最终节点,并且给特定的节点赋予规则,让这一类json数据对应节点进行对比时,遵循节点的规则。这个任务其实可以拆解为三个任务:拿到这类json的标准结构描述,并且在节点上标记规则将json数据层层解构拿到所有节点,然后拿着数据节点去标准结构json里找到对应的节点,然后读取规则将节点和规则存储......

2018-07-24 16:24:24 5043 4

原创 【算法训练-二分查找 五】【位置二分】有序数组中的单一元素

【代码】【算法训练-二分查找 五】【位置二分】有序数组中的单一元素。

2024-07-25 22:32:57 33

原创 【系统架构设计 每日一问】七 微信抢红包的高并发架构,应该采取什么样的负载均衡算法

用于将任务请求分发到不同应用服务器,这里可以采用轮询或加权轮询的算法,因为这种速度快,适合抢红包的业务场景;更详细的原文:https://www.infoq.cn/article/2017hongbao-weixin。,将所有数据请求在同一台服务器上进行,防止多台服务器间的不同步问题。微信抢红包架构应该至少包含两个负载均衡,

2024-07-21 16:57:09 119

原创 【系统架构设计 每日一问】六 如何设计一个日活千万DAU的论坛的负载均衡集群

在设计一个日活跃用户(DAU)达到1000万的论坛的负载均衡集群时,我们需要综合考虑多个方面,包括流量评估、容量规划以及具体的方案设计。

2024-07-21 16:22:20 1208

原创 【系统架构设计 每日一问】五 搜索型业务,采用MySQL+ES,如何保证数据一致性

将数据从MySQL同步到Elasticsearch(ES)中并保证一致性是一个常见的需求,特别是在需要快速全文搜索和分析功能的应用中。

2024-07-21 01:07:47 1026

原创 【系统架构设计 每日一问】四 如何对关系型数据库及NoSql数据库选型

根据不同的业务需求和场景,选择适合的数据库类型至关重要。以下是一个优化后的表格展示,涵盖了管理型系统、大流量系统、日志型系统、搜索型系统、事务型系统、离线计算和实时计算七大类业务系统的数据库选型建议。先明确下NoSQL的分类。

2024-07-21 01:02:22 1114 1

原创 【系统架构设计 每日一问】三 Redis支持事务么,Redis的事务如何保证

实际上,关于Redis事务的说法“Redis 的事务只能保证隔离性和一致性(I 和 C),无法保证原子性和持久性(A 和 D)”并不完全准确。下面我将分别解释Redis事务的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

2024-07-21 00:21:18 666

原创 【系统架构设计 每日一问】二 MySql主从复制延迟可能是什么原因,怎么解决

MySQL主从延迟是指主数据库上的更新操作传输到从数据库并被执行的时间差。通过这些措施,可以有效减少MySQL主从延迟,确保数据的实时性和一致性。

2024-07-20 23:53:20 635

原创 【系统架构设计 每日一问】一 在单表查询的情况下,ES快还是mysql快

对于简单的单表等值查询,且数据量不大时,MySQL的查询速度可能更快。对于包含大量文本字段的复杂查询或大数据量下的查询,ES的查询速度通常优于MySQL。因此,在单表查询的情况下,ES和MySQL哪个更快并没有绝对的答案。它取决于具体的查询类型、数据量大小、索引策略和系统配置等多个因素。在实际应用中,应根据具体需求选择合适的数据库系统。

2024-07-20 23:47:51 473

原创 【RPC注册发现框架实战】一个简易的RPC注册发现框架

Java实现 服务端起10个线程ID监听40-49这10个端口,这10个端口注册到注册中心,提供同一个服务,发个A,响应B,客户端起10个线程去注册中心请求好的,我们可以通过实现一个简单的服务端、注册中心和客户端来达到这个目的。

2024-07-13 15:24:14 447

原创 【Kafka框架代码实践 一】简易的生产者消费者模式

用多线程来简易的实现一个消息队列的生产者消费者模式:10个线程生成数字消息投递到消息队列,10个线程做数字消息的消费者,消费生产者投递的消息。

2024-07-13 12:20:13 130

原创 【从零开始学架构 架构基础】五 架构设计的复杂度来源:低成本、安全、规模

低成本本质上是与高性能和高可用冲突的,所以低成本很多时候不会是架构设计的首要目标,而是架构设计的附加约束;安全一般接触不到,功能安全一般框架保证、架构安全一般运营商以及云服务保证;规模其实代表的是业务复杂度的上升对架构的挑战,其实扩展性不好的架构其规模复杂度往往也会随着业务不断升级,所以需要设计扩展性好的架构并且在预测到业务计算及数据规模可能影响正常业务的时候及时进行架构优化。

2024-06-30 17:44:22 559

原创 【从零开始学架构 架构基础】四 架构设计的复杂度来源:可扩展性复杂度来源

结合这篇Blog,其实我感觉主要是如何在过度设计与不可扩展间去权衡。长期预测的代价和变数太多,可能在落地前业务就凉了,不做预测又可能刚开始迭代就发现难以支持。所以2年预测是一个经验值,如果到了2年业务发展的好了,会倒逼决策层给资源给钱进行架构升级,如果都用不了2年就凉了那5-10年预测就没意义了;在预测的前提下,我们在方案设计的时候是否可以考虑短、中、长三种方案,短期策略一般考虑的变化少,短视,但迅速,修改小,立竿见影。长期策略一般看重远期,但成本高很高,也很可能预测不中。综合成本情况下如果决定采用短期策略

2024-06-30 15:07:23 1011

原创 【从零开始学架构 架构基础】三 架构设计的复杂度来源:高可用复杂度来源

网站高可用的主要技术手段是服务与数据的冗余备份与失效转移。同一服务组件部署在多台服务器上;数据存储在多台服务器上互相备份。通过上述技术手段,当任何一台服务器宕机或出现各种不可预期的问题时,就将相应的服务切换到其他可用的服务器上,不影响系统的整体可用性,也不会导致数据丢失

2024-06-29 23:57:01 1116

原创 【从零开始学架构 架构基础】二 架构设计的复杂度来源:高性能复杂度来源

性能差-》提升设计复杂度解决性能问题-》掌握如何编码和集群架构cover复杂的设计。高性能复杂度有单机和集群来源。单机主要通过操作系统(多进程、多线程)设计来压榨机器CPU进而提升性能,其设计复杂度体现在需要实现互斥、锁、进程通信等策略,所以要掌握并发编程技术。集群主要是搭建机器集群来扛住大的业务增量,其设计复杂度体现在任务分配(任务分配器、任务分配器与业务服务器连接管理、任务分配算法,其解决系统性能瓶颈的能力随着业务复杂度边际收益逐渐降低)和任务分解(业务逻辑垂直拆分,单项扩展或升级,其系统拆分带来的收益

2024-05-12 21:55:11 688 3

原创 【从零开始学架构 架构基础】一 架构设计的本质、历史背景和目的

Rank分层区分系统与子系统暂时隔离关注面,在一个系统层面上,其子系统就是角色Role,子系统之间的关系就是Relation,一个核心的业务流程Rule可能涉及多个子系统的交互。如果子系统就是最小层级业务系统,那么它从逻辑层面讲可能包含很多模块,从部署的角度讲也包含很多组件,单个子系统可以使用springBoot框架搭建,遵守其规范使用其功能;软件架构没有银弹,是以解决系统复杂度为目的而随业务演进的方法论。知道WHAT,WHY,才能更好的学习HOW。

2024-05-07 23:32:28 804 1

原创 【从零开始学架构 前言】整体的学习路线

本文是《从零开始学架构》的第一篇学习笔记,在工作6年左右的这个时间点需要有一些先行的理论来指导即将面临的复杂实践,以便在真正面临复杂实践的时候能有所参照。主要从以下几个方面和顺序来进行学习。

2024-05-06 22:53:56 518

原创 【Java程序员面试专栏 综合面试指南】资深程序员面试指南

想要实现多线程,必须在主线程中创建新的线程对象。Java 语言使用 Thread 类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态新建(NEW): 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态可运行状态(RUNABLE): RUNNABLE状态可以认为包含两个子状态:READY和RUNNING,就绪(READY): 处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件,只是没分配到CPU资源。

2024-04-04 22:26:26 161

原创 【软件系统设计 一】基本性能指标、系统组件、设计解题框架、常见设计题

随着年限的增加,感觉自身的系统设计能力应该有所提升,不能只是做简单的CRUD工作了,需要做一些系统设计、技术选型。在进入这套体系之前,需要对基础知识有一定的深度和广度的理解,包括不限于:Java体系、MySql、计算机网络、算法、数据结构、缓存、消息、搜索、设计模式等等。相当于内力积攒起来后融汇贯通。

2024-03-27 23:30:05 1016

原创 【工作中问题解决实践 十】线上JVM参数该如何配置

在线上部署Java应用时,可以通过Java虚拟机(JVM)的参数来控制内存的分配和管理。

2024-03-25 23:23:53 838

原创 【生产问题排查 四】线上如何排查CPU100%的情况

当我们把服务发布到服务器器,可能会因为一些问题造成我们的服务器CPU被打满甚至超过100%,那如果我们想知道到底上在做什么操作导致CPU持续过高呢?因为在线上只能通过日志看问题,或者排查到哪个进程或者哪个线程持续占用CPU。然后才能找到具体问题在哪里才能进行解决,具体排查过程。

2024-03-25 22:48:45 793

原创 【Java程序员面试专栏 算法思维】六 高频面试算法题:动态规划

默认长度比数组长度+1,目的是初始化填0,这样当A或B长度为0时,第一行第一列默认为0正好处理边界问题。

2024-03-02 12:03:28 170

原创 【Java程序员面试专栏 算法思维】四 高频面试算法题:回溯算法

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊回溯算法,主要就是排列组合问题,所以放到一篇Blog中集中练习网格搜索。

2024-02-26 22:53:20 234

原创 【Java程序员面试专栏 算法思维】三 高频面试算法题:搜索算法

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊搜索算法,以岛屿问题为切入点练习,所以放到一篇Blog中集中练习网格搜索网格搜索网格搜索。

2024-02-25 21:33:18 87

原创 【Java程序员面试专栏 算法思维】二 高频面试算法题:二分查找

LeetCode地址,找到目标值后不急着循环结束,需要继续寻找,直到找到目标值边界为止,关键词:二分查找// 找到目标值,但循环不一定结束,因为不确定该目标值的位置// 寻找左边界,则右测最大下标锁死// 寻找右边界,则左测最大下标锁死// 跳出循环后给出目标边界值下标时间复杂度 O(LogN):二分查找,只需查找对数阶次即可空间复杂度 O(1): 没有使用额外空间。

2024-02-25 19:17:12 110

原创 【Java程序员面试专栏 算法思维】五 高频面试算法题:贪心算法

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊贪心算法,所以放到一篇Blog中集中练习贪心算法。

2024-02-25 16:49:18 281

原创 【Java程序员面试专栏 算法思维】一 高频面试算法题:排序算法

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊排序算法,包括手撕排序算法,经典的TOPK问题以及区间合并,所以放到一篇Blog中集中练习双指针+递归+基准值双指针+递归大顶堆+递归快速排序+二分查找快速排序快速排序+比较。

2024-02-25 15:17:16 778 1

原创 【Java程序员面试专栏 数据结构】六 高频面试算法题:字符串

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊数组,包括数组合并,滑动窗口解决最长无重复子数组问题,图形法解下一个排列问题,以及一些常见的二维矩阵问题,所以放到一篇Blog中集中练习滑动窗口+双指针+辅助哈希中心扩散法+双指针双指针双指针双指针辅助栈双指针指针。

2024-02-24 16:21:39 400

原创 【数据结构-字符串 五】【字符串转换】字符串转为整数

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【字符串转换】,使用【字符串】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为:目标公司+最近一年+出现频率排序,由高到低的去牛客TOP101去找,只有两个地方都出现过才做这道题(CodeTop本身汇聚了LeetCode的来源),确保刷的题都是高频要面试考的题。明确目标题后,附上题目链接,后期可以依据解题思路反复快速练习,题目按照题干的基本数据结构分类,且每个分类的第一篇必定是对基础数据结构的介绍。

2024-02-24 15:51:03 615

原创 【Java程序员面试专栏 数据结构】一 高频面试算法题:数组

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊数组,包括数组合并,滑动窗口解决最长无重复子数组问题,图形法解下一个排列问题,以及一些常见的二维矩阵问题,所以放到一篇Blog中集中练习

2024-02-23 23:04:49 206

原创 【Java程序员面试专栏 数据结构】四 高频面试算法题:哈希表

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,一个O(1)查找的利器哈希表,所以放到一篇Blog中集中练习辅助哈希排序+双指针原地哈希。

2024-02-21 23:08:29 380

原创 【Java程序员面试专栏 数据结构】三 高频面试算法题:栈和队列

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,因为栈和队列这两哥们结构特性比较向对应,所以放到一篇Blog中集中练习题目题干直接给出对应博客链接,这里只给出简单思路、代码实现、复杂度分析辅助栈辅助栈单调栈(单调递减)单调栈(单调递减)单调栈(单调递减)单调队列(单调递减)

2024-02-20 23:25:32 196

原创 【Java程序员面试专栏 Java领域】Java Spring框架 核心面试指引

Spring 框架是一个开源的 Java 平台,它最初由 Rod Johnson 在 2003 年设计,并且随后成为了领先的全栈 Java 开发框架。它提供了一个全面的编程和配置模型,用于现代基于 Java 的企业应用- 无论是应用程序级别的还是大规模企业级别的。Spring 的核心特性可以用于任何 Java 应用程序,并且有许多扩展和库,用于构建web应用程序上的全栈解决方案。轻量级容器: Spring 提供了一个轻量级的IoC(控制反转)容器,它管理应用程序中对象的创建、生命周期和配置。依赖注入。

2024-02-18 13:21:15 148

原创 【Java程序员面试专栏 Java领域】Java虚拟机 核心面试指引

将*.java文件转为*.class的过程称为编译器的前端(前端编译例如:JDK的javac编译器当虚拟机发现某个方法或代码块运行特别频繁时,就会把这些代码认定为“Hot Spot Code”(热点代码),为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各层次的优化,完成这项任务的正是JIT编译器,把字节码(*.class文件) 转变为本地机器码的过程称为Java虚拟机的即时编译运行期(JIT编译器,Just In Time)

2024-02-17 19:25:44 392

原则的详细读书笔记罗列

关于原则的xmind,关于原则的分析,瑞达里欧的原则分享,原则这本书还是很不错的,自己整理了学习笔记,分享给大家一起看看

2020-11-05

Visual Studio2015的圈复杂度检测工具code metrics

这个工具是用于检测代码圈复杂度的,可以显而易见的标注每个方法的圈复杂度,并且依据大小有颜色直观的显示

2018-02-02

Java面试大全

这是我自面试以来做过的最全的总结,包括 计算机网络 java web mysql 设计模式 JVM 剑指offer hashmap源码分析,还有一些可以从我博客上看http://blog.csdn.net/sinat_33087001本来想免费分享给大家,但好像最少得选一个,所以只能设置为1,希望能够帮助大家。

2017-10-10

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

TA关注的人

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