自定义博客皮肤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的直译)

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

原创 【Groovy快速上手 ONLY ONE】Groovy与Java的核心差异

最近在使用的平台上写脚本的语言是Groovy,所以也学习一下,作为 Java 开发者,Groovy 对我们来说会非常友好,而且它的语法更简洁且支持动态类型,所以其实了解下Java和Groovy的差异点就可以快速上手了,以下是和。

2025-04-04 21:32:08 576

原创 【人工智能学习笔记 一】 AI分层架构、基本概念分类与产品技术架构

总的来说AI主要由算法、算力、数据组成,算法是核心。LLM是基于Transformer架构的算法成果,属于NLP领域关键技术,赋予AI理解和生成语言的能力。如果把AI AGENT看作人工助手,LLM就是其大脑,提供智能核心。AIGC则基于LLM等技术,生成语言、图像、音频等内容,就像人基于大脑的一些语言和视觉的表达。举个例子:云雀模型是LLM,豆包的问答查询基于此,是AIGC在语言领域的应用;图片生成借助专门模型,也是AIGC。豆包APP里的智能体是AI AGENT,集成云雀能力为用户服务。

2025-02-02 12:37:17 1849

原创 【年终总结系列 2024】而立之年的任务大完成

今年比较遗憾的就是哪儿都没出去玩儿,好在去年的愿望【年终总结系列 2023】新起点,同时追寻更高的起点部分实现了。所以减肥还是很重要的,2025年减肥成功,搬进新家,迎接小宝贝到来!

2025-01-12 14:33:50 579

原创 【领域驱动设计 打通DDD最小闭环】三 模型的建立-领域建模

同事件风暴一样领域建模也是在模型建立阶段,但更进一步的,领域建模不仅要对业务进行直观模拟,更要经过提炼,形成浓缩的知识,使模型中的知识不再停留在业务的表面,而是深入到业务的本质,进而加入技术视角选择最合适的建模方案。可以理解为是对事件风暴的技术性加工,使用UML图的一些标记例如:注释、约束、多重性、自关联、多关联、角色以及一些技巧如:多对多关联拆分、抽象化实体、模块化来进行领域建模。一个比较深的体会是对于多对多关联拆分的考虑,例如业务事件阶段的【门店、合作】以领域名词的形式候选为实体,在领域建模阶段明确其多

2024-08-25 22:42:02 1264

原创 【领域驱动设计 打通DDD最小闭环】二 模型的建立-业务事件风暴

事件风暴不仅能帮助我们尽量把需求补充完全,而且还能以协作的方式保证业务人员和技术人员对需求理解一致。实践过程中有点儿像模型推演,先识别流程,例如入驻流程,然后识别领域事件,例如【门店已联网】,同时明确业务规则,门店一旦有了联网时间不能重置;再识别命令,例如A+开启导致门店联网,同时明确命令执行者是系统,执行时需要查询门店信息。当然可能还有可选领域事件,例如【门店维护人变更】不影响主流程。诸如此类串联完一系列领域事件、命令、查询、执行者之后总结出了【门店】这个领域名词。一个深的体会是过程中的UL语言建立以及结

2024-08-24 22:25:02 1184

原创 【领域驱动设计 打通DDD最小闭环】一 DDD的开发流程

其实我们日常开发都比较伪DDD,整体实现还是使用 MVC,代码结构类似 Controller、Service、DAO,个人认为这也无可厚非,只是代码的组织形式而已,关键是我们在整体设计时往往缺乏(领域建模-架构设计)这关键两步,很多时候都是就着一个功能点进行(需求分析-数据库 -> 代码实现)。这样没有全局的视角很容易盲人摸象,导致后续摸到一点打个补丁,项目难以维护。DDD的关键不全然是代码架构设计的指导,更是一种应对复杂业务的开发及协作模式,关键人员先通过UL建立有全局共识认知,不确认的地方预留扩展点,再

2024-08-23 22:36:08 981

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

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

2024-07-25 22:32:57 171

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

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

2024-07-21 16:57:09 255

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

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

2024-07-21 16:22:20 1500

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

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

2024-07-21 01:07:47 1374

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

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

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

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

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

2024-07-21 00:21:18 939

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

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

2024-07-20 23:53:20 782

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

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

2024-07-20 23:47:51 1147

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

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

2024-07-13 15:24:14 557

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

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

2024-07-13 12:20:13 263

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

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

2024-06-30 17:44:22 725

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

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

2024-06-30 15:07:23 1313

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

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

2024-06-29 23:57:01 1307

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

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

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

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

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

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

原创 【从零开始学架构 前言导读】零 架构设计整体学习路线

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

2024-05-06 22:53:56 807

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

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

2024-04-04 22:26:26 261

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

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

2024-03-27 23:30:05 1155

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

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

2024-03-25 23:23:53 1056

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

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

2024-03-25 22:48:45 990

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

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

2024-03-02 12:03:28 311

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

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

2024-02-26 22:53:20 312

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

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

2024-02-25 21:33:18 134

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

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

2024-02-25 19:17:12 186

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

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

2024-02-25 16:49:18 338

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

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

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

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

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

2024-02-24 16:21:39 499

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

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

2024-02-24 15:51:03 661

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

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

2024-02-23 23:04:49 256

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

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

2024-02-21 23:08:29 441

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

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

2024-02-20 23:25:32 260

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

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

2024-02-18 13:21:15 262

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

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

2024-02-17 19:25:44 490

原创 【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 288

原则的详细读书笔记罗列

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

2020-11-05

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

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

2018-02-02

Java面试大全

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

2017-10-10

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

TA关注的人

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