- 博客(595)
- 资源 (4)
- 问答 (1)
- 收藏
- 关注
原创 【生产问题排查 三】Kafka消费者消费堆积且频繁rebalance
照例总结一下,虽然基础服务的一些中间件一般都由基础架构部门维护,但还是要对这些中间件的配置和使用要有所了解,这样出了问题才能快速定位问题、解决问题,避免影响线上稳定性。
2023-08-10 00:39:22 1604
原创 【生产问题排查 二】一次内存泄露排查-MAT使用指南
照例总结一下,线上出了问题不要慌,也别想着保留现场,先止损!平时的报警机制要建立好且阈值要低些,这样才能先于业务发现并解决问题。还有就是MAT是真香!
2023-08-08 23:42:48 1044
原创 【生产问题排查 一】Spring中事务传播的问题排查
照例总结一下,在单一的数据操作方法不要加事务,事务应该是一系列操作指令的聚合,添加了细粒度的事务可能会导致上层使用者在方法添加事务时使用了错误的传播机制。如果内外层的方法都很复杂,则基于自己的预期进行考虑,如果不希望内层方法影响外层方法,可以使用异常捕获加内层事务的REQUIRES_NEW传播机制解决。需要注意的是Spring的事务是基于AOP实现的,所以对象内部方法调用,不会通过Spring代理,也就是事务不会起作用,这点也非常重要。
2023-08-06 17:53:46 1132 3
原创 【工作中问题解决实践 一】最小单元染色法的应用
最近在处理费率和保底费的优惠及标准区间。问题本质就是:标准合作区间是一个【时间段+标准值】,优惠合作区间是多段【时间段+标准值】,并且各个时间段的开始和结束日期可以随意指定,优惠区间和标准区间重合部分按照优惠值计算,非重合部分按照标准区间值计算。......
2022-08-12 15:31:38 292
原创 【Java设计模式 学习目标及大纲】高质量代码的标准及实现路径
易维护、易读、易扩展、灵活、简洁、可复用、可测试的代码就是高质量的代码,而高质量代码的达成路径工具箱包括:面向对象设计思想是基本指导思想,是很多设计原则、设计模式的实现基础;设计原则是代码设计的抽象经验总结、是设计模式设计的指导原则;设计模式是代码设计的一套具体解决方案或设计思路,主要用来提高代码可扩展性;编程规范是一套可执行的代码编写规范,主要用来提高代码的可读性;代码重构依赖面向对象设计思想、设计原则、设计模式、编程规范实现,主要用来提高代码的可维护性。也可以这么理解:1个设计思想、6个设计原则、23个
2022-05-03 22:21:30 973
原创 【Java设计模式 前言】我为什么要学习设计模式
中级人员的心智“或许这里我需要一个单件模式。悟道者的心智能够看到模式在何处能够自然融人。悟道者的心智并不急切于使用模式,而是致力于最能解决问题的简单方案。悟道者的心智会考虑对象的原则,以及它们之间的折衷。当对模式的需要自然出现时,悟道者的心智就拿捏得宣地采用模式。悟道者的心智也能看到相似模式之间的关系,以及它们在意图上的微妙差异。悟道者的心智也同于初学者的心智-不会让这此模式的知识过度影响设计的决策。
2022-03-06 17:04:35 468
原创 【团队技术知识分享 一】技术分享规范指南
技术分享时应秉持的基本原则:应有团队和个人、奉献者(统筹人)的概念,同时匹配团队激励、个人激励和最佳奉献者激励;团队应该打开工作内容边界,成员应该来自各内容方向;评分标准不应该过于模糊,否则没有意义,应由客观的基础分值以及分团队的主观综合结论得出。应有心愿单激励机制,促进大家共同聚焦到感兴趣的事情上;选题应有规范和框架,具体到某个小类,这样收获才有目标性,发布分享主题时大家才能快速判断是否是自己感兴趣的;流程和分享的模版应该有固定范式,避免随意的格式导致随意的内容,评分也应该部分参考于此;参会原则,应有
2022-02-25 18:05:04 2134
原创 【阿里巴巴Java编程规范学习 二】Java基本编程规约(下)
编程规约是比较重要的部分,按照基础和高级,我分成了两篇来学习,下篇篇涉及到**日期时间、集合处理、并发处理、控制语句**和**注释规约、前后端规约、性能规约**都是一些编程规约的高级部分内容。红色加粗字体为自己可能会犯的错误以及不规范的地方,蓝色结论部分为几条规则的归纳或一条规则的阐述。
2021-11-14 18:43:08 883
原创 【阿里巴巴Java编程规范学习 一】Java基本编程规约(上)
编程规约是比较重要的部分,按照基础和高级,我分成了两篇来学习,上篇涉及到命名风格、常量定义、代码格式和OOP规约都是面向对象基础部分和一些通识命名规范。红色加粗字体为自己可能会犯的错误以及不规范的地方,蓝色结论部分为几条规则的归纳或一条规则的阐述。
2021-11-13 16:25:01 771
原创 【工作中问题解决实践 三】深入理解RBAC权限模型
工作时遇到了需要设计一套权限系统,所以做了一些调研。目前业界比较通用的权限系统设计都是采用RBAC模型,那么我们详细理解下RBAC模型的概念以及一些实际使用中建议的使用规范:RBAC权限模型首先了解下RBAC权限模型的基本概念和几种模型分类。1 RBAC权限模型RBAC(Role-Based Access Control)即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限,增加权限设置的扩展性。为什么要有角色的概念:对于批量的用户权限调整,只需调整用户关联的角色权限,无
2021-08-21 17:41:17 1528
原创 【Redis核心知识 八】Redis集群之Cluster模式及集群搭建
Cluster集群简介Cluster集群结构设计数据结构设计每个机器分为若干个槽slot,加机器和减机器都可以通过动态调整槽来实现Cluster内部通讯设计1,key先经过CRC算法进行计算2,计算结果%16384得到一个槽编号3,如果直接访问一次命中就直接取,否则就由客户端直接去目标机器找Cluster集群搭建...
2020-11-14 14:38:21 1023 1
原创 【Kafka从入门到放弃系列 二】Kafka集群搭建及基本命令
上一篇blog详细了解了kafka的基本概念、生产消费者模型、基本架构,我对kafka有了一个整体的认知,其整体框架其实可以理解为如下架构【一个Partion分区的leader和foller不会存储到一个broker上】:消息生产出来后依据topic发送到Kafka集群中去,由集群来管理消息,消费集群主动拉取到消息后消费【消费者的消费速度可以由自己来决定,可能会存在长连接轮询的浪费问题】,整体的消息和集群管理由Zookeeper来进行。Zookeeper启动Kafka安装...
2020-09-02 22:33:23 639
原创 【ElasticSearch从入门到放弃系列 五】ElasticSearch分布式集群搭建
上一篇blog介绍了ES的原理和基本使用方法,因为ES最厉害的地方就在于PB级别准实时的搜索能力,当然PB级的数据对于单个服务器去存储和检索还是很有难度的,所以ES一般使用时都使用分布式集群搭建。分布式相关概念级别概念集群 cluster一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能。一个集群由一个唯一的名字标识,这个名字默认就是“elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群节
2020-08-19 09:26:27 449
原创 【IPD流程学习 二】IPD主要流程
上一篇博客详细论述了产品开发过程中遇到的问题,看来不光是我自己感受到了,其实大家都有那种很累但是又没产出的感觉,是整体的流程机制出了问题,所以才要搞流程变革,而其中和我们开发人员最密切相关的就是IPD流程,了解了IPD的目标、核心理念以及涉及人员之后,来详细聊聊IPD的流程。概念与设计阶段:项目建立、组织、架构与概要设计的评审开发阶段:产品的详细设计、开发测试到上线的迭代流程验证阶段:产品...
2020-02-13 17:52:26 6544
原创 【工作中问题解决实践 四】动态解析Json结构最佳实践
前段时间武哥安排了个任务:把结构动态的Json数据结构解析出来。所以要求无论嵌套了多少层,都要拿到最终节点,并且给特定的节点赋予规则,让这一类json数据对应节点进行对比时,遵循节点的规则。这个任务其实可以拆解为三个任务:拿到这类json的标准结构描述,并且在节点上标记规则将json数据层层解构拿到所有节点,然后拿着数据节点去标准结构json里找到对应的节点,然后读取规则将节点和规则存储......
2018-07-24 16:24:24 4971 3
原创 【Java程序员面试专栏 综合面试指南】5年资深程序员面试指南
想要实现多线程,必须在主线程中创建新的线程对象。Java 语言使用 Thread 类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态新建(NEW): 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态可运行状态(RUNABLE): RUNNABLE状态可以认为包含两个子状态:READY和RUNNING,就绪(READY): 处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件,只是没分配到CPU资源。
2024-04-04 22:26:26 119
原创 【软件系统设计 一】基本性能指标、系统组件、设计解题框架、常见设计题
随着年限的增加,感觉自身的系统设计能力应该有所提升,不能只是做简单的CRUD工作了,需要做一些系统设计、技术选型。在进入这套体系之前,需要对基础知识有一定的深度和广度的理解,包括不限于:Java体系、MySql、计算机网络、算法、数据结构、缓存、消息、搜索、设计模式等等。相当于内力积攒起来后融汇贯通。
2024-03-27 23:30:05 953
原创 【生产问题排查 四】线上如何排查CPU100%的情况
当我们把服务发布到服务器器,可能会因为一些问题造成我们的服务器CPU被打满甚至超过100%,那如果我们想知道到底上在做什么操作导致CPU持续过高呢?因为在线上只能通过日志看问题,或者排查到哪个进程或者哪个线程持续占用CPU。然后才能找到具体问题在哪里才能进行解决,具体排查过程。
2024-03-25 22:48:45 666
原创 【Java程序员面试专栏 算法思维】六 高频面试算法题:动态规划
默认长度比数组长度+1,目的是初始化填0,这样当A或B长度为0时,第一行第一列默认为0正好处理边界问题。
2024-03-02 12:03:28 137
原创 【Java程序员面试专栏 算法思维】四 高频面试算法题:回溯算法
一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊回溯算法,主要就是排列组合问题,所以放到一篇Blog中集中练习网格搜索。
2024-02-26 22:53:20 204
原创 【Java程序员面试专栏 算法思维】三 高频面试算法题:搜索算法
一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊搜索算法,以岛屿问题为切入点练习,所以放到一篇Blog中集中练习网格搜索网格搜索网格搜索。
2024-02-25 21:33:18 66
原创 【Java程序员面试专栏 算法思维】二 高频面试算法题:二分查找
LeetCode地址,找到目标值后不急着循环结束,需要继续寻找,直到找到目标值边界为止,关键词:二分查找// 找到目标值,但循环不一定结束,因为不确定该目标值的位置// 寻找左边界,则右测最大下标锁死// 寻找右边界,则左测最大下标锁死// 跳出循环后给出目标边界值下标时间复杂度 O(LogN):二分查找,只需查找对数阶次即可空间复杂度 O(1): 没有使用额外空间。
2024-02-25 19:17:12 78
原创 【Java程序员面试专栏 算法思维】五 高频面试算法题:贪心算法
一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊贪心算法,所以放到一篇Blog中集中练习贪心算法。
2024-02-25 16:49:18 256
原创 【Java程序员面试专栏 算法思维】一 高频面试算法题:排序算法
一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊排序算法,包括手撕排序算法,经典的TOPK问题以及区间合并,所以放到一篇Blog中集中练习双指针+递归+基准值双指针+递归大顶堆+递归快速排序+二分查找快速排序快速排序+比较。
2024-02-25 15:17:16 747
原创 【Java程序员面试专栏 数据结构】六 高频面试算法题:字符串
一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊数组,包括数组合并,滑动窗口解决最长无重复子数组问题,图形法解下一个排列问题,以及一些常见的二维矩阵问题,所以放到一篇Blog中集中练习滑动窗口+双指针+辅助哈希中心扩散法+双指针双指针双指针双指针辅助栈双指针指针。
2024-02-24 16:21:39 373
原创 【数据结构-字符串 五】【字符串转换】字符串转为整数
废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【字符串转换】,使用【字符串】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为:目标公司+最近一年+出现频率排序,由高到低的去牛客TOP101去找,只有两个地方都出现过才做这道题(CodeTop本身汇聚了LeetCode的来源),确保刷的题都是高频要面试考的题。明确目标题后,附上题目链接,后期可以依据解题思路反复快速练习,题目按照题干的基本数据结构分类,且每个分类的第一篇必定是对基础数据结构的介绍。
2024-02-24 15:51:03 593
原创 【Java程序员面试专栏 数据结构】一 高频面试算法题:数组
一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊数组,包括数组合并,滑动窗口解决最长无重复子数组问题,图形法解下一个排列问题,以及一些常见的二维矩阵问题,所以放到一篇Blog中集中练习
2024-02-23 23:04:49 181
原创 【Java程序员面试专栏 数据结构】四 高频面试算法题:哈希表
一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,一个O(1)查找的利器哈希表,所以放到一篇Blog中集中练习辅助哈希排序+双指针原地哈希。
2024-02-21 23:08:29 351
原创 【Java程序员面试专栏 数据结构】三 高频面试算法题:栈和队列
一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,因为栈和队列这两哥们结构特性比较向对应,所以放到一篇Blog中集中练习题目题干直接给出对应博客链接,这里只给出简单思路、代码实现、复杂度分析辅助栈辅助栈单调栈(单调递减)单调栈(单调递减)单调栈(单调递减)单调队列(单调递减)
2024-02-20 23:25:32 166
原创 【Java程序员面试专栏 Java领域】Java Spring框架 核心面试指引
Spring 框架是一个开源的 Java 平台,它最初由 Rod Johnson 在 2003 年设计,并且随后成为了领先的全栈 Java 开发框架。它提供了一个全面的编程和配置模型,用于现代基于 Java 的企业应用- 无论是应用程序级别的还是大规模企业级别的。Spring 的核心特性可以用于任何 Java 应用程序,并且有许多扩展和库,用于构建web应用程序上的全栈解决方案。轻量级容器: Spring 提供了一个轻量级的IoC(控制反转)容器,它管理应用程序中对象的创建、生命周期和配置。依赖注入。
2024-02-18 13:21:15 127
原创 【Java程序员面试专栏 Java领域】Java虚拟机 核心面试指引
将*.java文件转为*.class的过程称为编译器的前端(前端编译例如:JDK的javac编译器当虚拟机发现某个方法或代码块运行特别频繁时,就会把这些代码认定为“Hot Spot Code”(热点代码),为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各层次的优化,完成这项任务的正是JIT编译器,把字节码(*.class文件) 转变为本地机器码的过程称为Java虚拟机的即时编译运行期(JIT编译器,Just In Time)
2024-02-17 19:25:44 371
原创 【Java程序员面试专栏 Java领域】Java并发 核心面试指引
线程1占有资源A想申请资源B,同时线程2占有资源B想申请资源A就会造成死锁try {//t1休眠2秒以便t2能拿到moniterB});try {});t1.start();t2.start();线程 t1 通过synchronized (moniterA)获得 moniterA的监视器锁,然后通过Thread.sleep(2000);让线程 t1休眠 2s 为的是让线程t2 得到执行然后获取到 moniterB的监视器锁。
2024-02-17 01:17:33 189
原创 【Java程序员面试专栏 Java领域】Java集合 核心面试指引
的初始化长度length(默认值是16),为负载因子(默认值是0.75),threshold是HashMap所能容纳键值对的最大值。。也就是说,在数组定义好长度之后,负载因子越大,所能容纳的键值对个数越多。HashMap的默认加载因子是0.75。加载因子是衡量HashMap在其容量自动增加之前可以达到多满的一个度量,它是容量与大小的比值。当HashMap中的条目数超过容量与加载因子的乘积时,HashMap会进行扩容操作,即重新计算桶的数量并重新分配所有元素。时间效率。
2024-02-16 16:21:42 1025
原创 【Java程序员面试专栏 分布式中间件】Redis 核心面试指引
Redis是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis支持多种类型的数据结构,如字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)以及范围查询、位图、流和基数估计等高级数据结构。它通过将数据存储在内存中来提供高性能的读写操作,对于需要快速访问大量数据的应用程序而言,这一点尤其重要。性能极高:由于数据存储在内存中,Redis能够提供极高的性能,使其成为处理大量读写操作的理想选择。支持持久化。
2024-02-16 00:36:22 414
原创 【Java程序员面试专栏 分布式中间件】ElasticSearch 核心面试指引
以上非结构化查询方式抽象而言可以理解为将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引,这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search)。虽然创建索引的过程也是非常耗时的,但是索引一旦创建就可以多次使用,全文检索主要处理的是查询,所以耗时间创建索引是值得的。
2024-02-15 16:51:37 450
原创 【Java程序员面试专栏 分布式中间件】Kafka 核心面试指引
关于Kafka部分的核心知识进行一网打尽,包括Kafka的基本概念,基本架构,工作流程,存储机制,生产策略和消费策略,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示从Kafka的基本定义和应用场景等说起Kafka 是一个分布式流式处理平台,它被设计用于构建实时的数据管道和流应用程序。Kafka 主要用于处理高吞吐量的数据流,并支持容错处理。流平台具有三个关键功能:Kafka 主要有两大应用场景:当然还有一些其它的应用场景消息队列:Kafka 可以作为一个高性能的消息队列系统
2024-01-25 01:01:08 320
原创 【Java程序员面试专栏 计算机基础】计算机网络 核心面试指引
关于计算机网络部分的核心知识进行一网打尽,包括计算机的网络模型,各个层的一些重点概念,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示
2024-01-22 23:19:58 176
原创 【Java程序员面试专栏 数据库】MySQL核心面试指引(三):性能优化策略
读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。这样的话,就能够小幅提升写性能,大幅提升读性能一般情况下,我们都会选择一主多从,也就是一台主数据库负责写,其他的从数据库负责读。主库和从库之间会进行数据同步,以保证从库中数据的准确性。这样的架构实现起来比较简单,并且也符合系统的写少读多的特点分库分表是一种数据库架构优化策略,用于处理大型数据库系统中的数据和负载。随着数据量的增长和访问量的提升,单一数据库可能面临性能瓶颈、扩展限制和管理困难等问题。
2024-01-21 17:42:40 227
原创 【Java程序员面试专栏 数据库】MySQL核心面试指引(二):核心机制策略
多版本并发控制(MVCC)是一种用来解决读-写冲突的无锁并发控制,也就是为事务分配单向增长的时间戳,为每个修改保存一个版本,版本与事务时间戳关联,读操作只读该事务开始前的数据库的快照。当前读,像select lock in share mode(共享锁), select for update;update, insert ,delete(排他锁)这些操作都是一种当前读,它读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁快照读。
2024-01-21 13:25:38 260
Visual Studio2015的圈复杂度检测工具code metrics
2018-02-02
Java面试大全
2017-10-10
Docker镜像中间的layer能删除么?
2022-02-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人