自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ⭐️《LeetCode ε-收敛协议!LeetCode全部题目题解(2025持续更新)》

本人目前已将LeetCode所有算法题目刷完,特将题解整理于此,便于分享交流,所有题目均提供最优解方案和代码,所有解决方案均提供了C++代码实现,部分题目还提供了Java、Python代码。希望大家都可以早日成为大佬。

2025-05-14 17:02:27 1462

原创 全套算法汇总(算法大导航)

本文汇总了多个算法学习资源,主要包括LeetCode系列和左程云系列。LeetCode系列提供了所有算法题目的题解汇总,适合刷题和提升算法能力。左程云系列则涵盖了从基础到进阶的算法讲解,包括二进制和位运算、排序算法、链表、队列、栈、二叉树、递归、哈希表、堆结构、基数排序、单调栈、贪心算法等核心内容。这些资源为算法学习者提供了系统的学习路径和详细的讲解,适合不同阶段的开发者参考和练习。

2025-04-30 16:08:29 694

原创 提问的智慧

提问的智慧

2025-04-12 16:12:35 604

原创 2、《变好的方法》

2、《变好的方法》

2025-06-07 10:27:25 237

原创 1、《藏在成语的心理学》

《藏在成语的心理学》从自我、人际关系和成长三个维度解析成语背后的心理机制。在自我认识方面,"文过饰非"揭示防御机制,"胜券在握"反映过度自信;人际互动中,"相敬如宾"体现界限意识,"东施效颦"表现无意识模仿;成长维度上,"破罐破摔"警示标签效应,"鲍鱼之肆"强调环境对行为的影响。文章通过成语的心理学解读,既传承传统文化,又为现代人提供自我觉察和成长的新视角,展现了成语历久弥新的当代价值。(149字)

2025-06-06 12:41:40 109

原创 C语言指针辨析

这段C++代码展示了指针的基本用法。代码定义了一个整数a,并通过指针p访问其地址和值。输出内容包括:变量a的地址(&a)、指针p保存的地址(即a的地址)、指针解引用值(p显示a的值),以及指针变量p本身的地址(&p)。注释指出&p是p自身的地址,而&p等同于p(即都指向a的地址)。代码简明地演示了指针与地址的关系。

2025-06-03 09:33:36 81

原创 在Windows系统下使用Scrcpy实现电脑与安卓设备无线连接,实现电脑操作手机/平板

在Windows系统下使用Scrcpy实现电脑与安卓设备无线连接,实现电脑操作手机/平板

2025-05-23 21:59:50 410

原创 第一节 分布式架构设计理论与Zookeeper环境搭建

本文介绍了分布式架构设计的基本理论和Zookeeper环境搭建的相关知识。首先,文章阐述了分布式系统的定义、特性及其与集群的区别,并分析了分布式系统面临的通信异常、网络分区、节点故障等问题。接着,文章深入探讨了分布式数据一致性,包括强一致性、弱一致性和最终一致性等不同级别,并介绍了CAP定理,即一致性、可用性和分区容错性三者之间的权衡关系。这些理论为理解分布式系统的设计和实现提供了基础,同时也为后续Zookeeper的学习和应用奠定了理论基础。

2025-05-22 19:23:16 808

原创 【代码之丑】新需求破坏了代码,怎么办?

在软件开发中,面对新需求时,开发者需要保持敏锐的“嗅觉”,审慎考虑代码的改动,避免不必要的复杂性。通过两个实际项目案例,本文探讨了如何在需求变更时,通过复用现有接口和分离职责来最小化代码改动。第一个案例中,通过复用审核不通过的接口来处理驳回需求,避免了新增接口和状态。第二个案例中,通过引入新的调度模型来处理定时提交需求,保持了核心业务实体的稳定性。这些做法强调了在代码设计中,对接口和实体的改动应基于业务需求和职责分离原则,确保系统的可维护性和扩展性。

2025-05-18 10:27:41 772

原创 互联网技术演进的模式

互联网业务的发展通常遵循从初创期到成熟期的四个阶段,每个阶段的技术需求和挑战随着业务复杂性和用户规模的变化而变化。初创期强调快速创新和迭代,技术团队需灵活运用现有资源;发展期则注重功能的快速添加和系统优化;竞争期面对更多竞争对手,技术需求转向平台化和服务化以减少重复工作和系统间交互的复杂性;成熟期则追求精细优化和用户体验的提升。用户规模的扩大对系统性能和可用性提出了更高要求,技术架构需要从集中式向分布式转变。整个过程中,技术的演进都是围绕支持业务快速发展和应对量变带来的质变挑战。

2025-05-17 07:46:30 696

原创 套路篇:如何迅速分析出系统CPU的瓶颈在哪里?

CPU性能指标主要包括CPU使用率、平均负载、进程上下文切换和CPU缓存命中率等。CPU使用率进一步细分为用户CPU、系统CPU、等待I/O CPU、软中断和硬中断等,反映了CPU在不同状态下的时间分配。平均负载表示系统的平均活跃进程数,反映了系统的整体负载情况。进程上下文切换包括自愿和非自愿切换,过多的切换会影响性能。CPU缓存命中率则衡量了CPU缓存的复用情况,命中率越高,性能越好。为了获取这些指标,常用的工具有top、vmstat、pidstat等,这些工具可以帮助快速定位和解决CPU性能瓶颈。在实际

2025-05-17 00:46:21 587

原创 HTTP API 认证授权术

本文系统总结了常见的API认证技术,包括HTTP Basic、Digest Access、App Secret Key + HMAC、JWT、OAuth 1.0和OAuth 2.0。HTTP Basic通过Base64编码传输用户名和密码,安全性较低;Digest Access使用MD5哈希避免明文传输密码,但仍可能被暴力破解;App Secret Key + HMAC结合密钥和哈希算法增强安全性;JWT通过JSON Web Token实现无状态认证;OAuth 1.0和2.0则分别通过三脚和两脚授权流程,

2025-05-17 00:36:22 828

原创 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(上)

本文主要探讨了在遇到无法解释的 CPU 使用率问题时,如何通过检查短时应用和进程状态来诊断问题。短时应用由于运行时间短,难以通过常规工具如 top 或 ps 发现,需借助 execsnoop 或 perf top 等记录事件的工具。文章还详细介绍了 CPU 使用率的类型,包括用户 CPU、系统 CPU、等待 I/O 的 CPU 和中断 CPU,并重点分析了 iowait 升高的情况,指出此时进程可能处于不可中断状态(D 状态)。此外,文章回顾了进程的多种状态(如 R、D、Z、S、I 等),并通过一个多进程

2025-05-17 00:30:54 858

原创 谈谈Spring Bean的生命周期和作用域?

在企业应用开发中,Java凭借其开放的Java EE规范和强大的开源框架,尤其是Spring框架,成为了主流选择。Spring框架不仅提供了依赖注入(控制反转)和面向切面编程(AOP)等核心机制,还定义了明确的Bean生命周期和作用域,使得应用开发更加模块化和灵活。Spring Bean的生命周期包括创建和销毁两个过程,涉及多个步骤,如实例化、属性设置、依赖注入和初始化等。作用域方面,Spring提供了Singleton和Prototype等基础作用域,以及针对Web容器的Request、Session和G

2025-05-17 00:19:06 762

原创 有哪几种实现生产者消费者模式的方法?

有哪几种实现生产者消费者模式的方法?

2025-05-16 09:50:52 582

原创 ThreadLocal 是用来解决共享资源的多线程访问的问题吗?

ThreadLocal 并不是用来解决共享资源的多线程访问问题的。它通过为每个线程提供独立的资源副本,避免了线程间的资源竞争,从而解决线程安全问题。与使用锁(如 synchronized)不同,ThreadLocal 通过资源隔离而非同步来实现线程安全。然而,如果 ThreadLocal 中存储的资源是静态的(即共享的),则仍可能引发线程安全问题。因此,ThreadLocal 适用于需要为每个线程提供独立资源的场景,而不适用于处理共享资源的并发访问。在面试中,理解 ThreadLocal 的正确使用场景及其

2025-05-16 09:49:44 766

原创 什么是“内存可见性”问题?

本文通过两个案例探讨了Java中的可见性问题。案例一中,两个线程分别执行write和read方法,由于线程工作内存与主内存的同步延迟,导致read线程读取到的x值可能不是最新的。案例二中,两个线程分别执行change和print方法,由于线程执行顺序和可见性问题,可能导致print方法输出不一致的结果,如b=30;a=10。为了解决可见性问题,可以使用volatile关键字,确保变量的修改对所有线程立即可见。此外,synchronized、Lock等工具也能在一定程度上保证可见性。synchronized不

2025-05-16 09:47:38 981

原创 单例模式的双重检查锁模式为什么必须加 volatile?

单例模式的双重检查锁模式为什么必须加 volatile?

2025-05-16 09:46:39 701

原创 volatile 的作用是什么?与 synchronized 有什么异同?

volatile 的作用是什么?与 synchronized 有什么异同?

2025-05-16 09:45:46 561

原创 如何写一个必然死锁的例子?

如何写一个必然死锁的例子?

2025-05-16 09:44:52 1020

原创 构造复杂的程序:将一个递归函数转成非递归函数的通用方法

这篇面试题探讨了在不支持递归的程序语言中如何实现递归程序,并通过分析for循环、条件控制程序和函数的底层实现,展示了如何将高级语言结构转换为底层指令。文章首先通过for循环的例子,解释了如何使用jump指令实现循环控制,接着讨论了if-else和switch-case的条件控制逻辑,最后深入探讨了函数的执行过程,特别是如何通过栈结构传递参数和返回值。通过这些例子,文章强调了理解底层指令和数据结构的重要性,展示了如何将复杂的高级语言功能分解为简单的底层操作,从而在不支持递归的语言中实现递归功能。

2025-05-16 00:34:00 811

原创 区块链技术 - 智能合约

区块链技术 - 智能合约

2025-05-16 00:29:07 927

原创 微服务架构:微服务究竟是灵丹还是毒药?

搜索引擎如Google能够在极短时间内处理海量数据并返回搜索结果,主要依赖于倒排索引技术。倒排索引通过将单词与包含该单词的文档列表关联,实现快速检索。Google首先通过网络爬虫获取全球网页,解析并建立倒排索引。搜索时,通过哈希表快速定位单词,获取相关文档列表,并通过缓存加速搜索。此外,Google使用PageRank算法对搜索结果进行排序,根据网页的权重(即被其他网页推荐的程度)决定展示顺序。对于站内搜索,如豆瓣或知乎,可以使用点赞数或词频(TF)等指标进行排序。搜索引擎技术不仅应用于互联网搜索,也广泛应

2025-05-16 00:25:32 596

原创 区块链技术架构:区块链到底能做什么?

区块链技术架构:区块链到底能做什么?

2025-05-16 00:23:02 1008

原创 什么样的代码才是高效的代码?

什么样的代码才是高效的代码?

2025-05-16 00:19:36 531

原创 分布式技术是如何引爆人工智能的?

人工智能(AI)是通过模拟人类思维和行为,使机器具备智能的技术。其核心包括数据、模型和算力,其中数据处理和模型训练是关键环节。数据处理通过统计、集成、清理、规约和变换等方法,提升数据质量,为模型训练提供高质量输入。模型训练则是从数据中寻找规律,通过分布式技术(如数据分布式训练、模型分布式训练和混合模型训练)提升效率,缩短训练时间。分布式技术通过集群管理和通信,解决了大规模数据和大模型训练中的算力瓶颈,推动了人工智能的广泛应用。

2025-05-16 00:17:46 1018

原创 分布式缘何而起:从单兵,到游击队,到集团军

本文探讨了分布式计算的起源及其发展过程,从单机模式到数据并行(数据分布式)模式,再到任务并行(任务分布式)模式。单机模式将所有应用和数据集中在一台计算机上,便于维护但性能受限且存在单点失效问题。数据并行模式通过拆分数据并利用多台计算机并行处理多个相同任务,提高了总体任务处理效率,但对单个任务的性能提升有限。任务并行模式则将复杂任务拆分为多个子任务,并在不同计算机上并行执行,从而缩短整体任务执行时间,但增加了设计复杂性。分布式计算的核心在于将相同或相关程序运行在多台计算机上,以实现性能、可用性和可扩展性的提升

2025-05-16 00:09:59 776

原创 Java内存模型中的happen-before是什么?

Happen-before关系是Java内存模型(JMM)中确保多线程操作可见性的核心机制,它精确定义了操作之间的顺序和内存可见性。JMM通过happen-before规则(如程序顺序、volatile变量、锁操作等)保证多线程程序的正确性和一致性。JMM的引入解决了早期Java内存模型中的模糊性和不一致性问题,确保了程序在不同处理器架构上的可移植性。JMM的实现依赖于内存屏障等技术,通过禁止某些重排序来保证内存可见性。对于开发者而言,理解JMM和happen-before关系有助于编写可靠的多线程程序,避

2025-05-15 18:41:30 829

原创 AtomicInteger底层实现原理是什么?如何在自己的产品代码中应用CAS操作?

AtomicInteger是Java中用于实现原子操作的类,基于CAS(Compare-And-Swap)技术确保线程安全。CAS通过比较当前值与预期值,若一致则更新,否则重试或返回失败。AtomicInteger内部依赖Unsafe类进行底层操作,并使用volatile修饰的value字段保证可见性。其原子操作如getAndIncrement通过Unsafe的getAndAddInt方法实现,失败时重试。CAS是Java并发中无锁机制的基础,适用于高并发场景。Java提供了Atomic包和Variable

2025-05-15 18:40:47 968

原创 synchronized底层如何实现?什么是锁的升级、降级?

本文详细介绍了Java中synchronized锁的实现机制及其优化策略。在Java 6之前,synchronized依赖于操作系统的互斥锁,性能较差。现代JDK通过引入偏斜锁、轻量级锁和重量级锁三种实现,显著提升了性能。锁的升级和降级是JVM根据竞争情况自动调整锁机制的过程。偏斜锁通过CAS操作标记对象头,适用于无竞争场景;当出现竞争时,JVM会撤销偏斜锁并升级为轻量级锁或重量级锁。锁降级在JVM进入安全点时也会发生。文章还从源码层面分析了synchronized的底层实现,并探讨了偏斜锁的适用性和争议。

2025-05-15 18:39:56 837

原创 动态代理是基于什么原理?

Java的反射机制和动态代理是两种强大的编程工具,它们增强了Java的灵活性和动态性。反射机制允许程序在运行时自省和操作类或对象,如获取类定义、调用方法或修改类定义。动态代理则提供了一种在运行时动态构建代理和处理方法调用的机制,广泛应用于RPC调用和AOP编程。实现动态代理的方式包括JDK提供的基于反射的动态代理,以及使用字节码操作机制的ASM、cglib和Javassist等。这些技术不仅提高了编程效率,还解决了如解耦调用者与实现者、简化RPC调用等问题。在选择动态代理实现方式时,需考虑性能、依赖关系、代

2025-05-15 18:39:05 910

原创 Exception和Error有什么区别?

Exception和Error在Java中都继承自Throwable类,是异常处理机制的基础。Exception通常表示程序运行中可预见的意外情况,应被捕获处理;而Error则指正常情况下不太可能出现的严重问题,通常导致程序不可恢复,如OutOfMemoryError。Exception分为可检查异常(checked)和不可检查异常(unchecked),前者需显式捕获,后者如NullPointerException等运行时异常则不一定。异常处理应遵循特定原则,如避免捕获通用异常、不“生吞”异常、及时抛出异

2025-05-15 18:38:16 663

原创 如何写出安全的Java代码?

文章主要讨论了Java开发中常见的安全风险,特别是拒绝服务(DoS)攻击,并提供了防范措施。首先,文章解释了DoS攻击的基本概念及其对Java应用的影响,强调了程序级别的攻击风险。接着,文章列举了几种Java应用中可能被利用的漏洞,如哈希碰撞攻击、Zip bomb攻击等,并提出了相应的防范策略。此外,文章还探讨了Java开发中的其他安全问题,如数值溢出、异常处理中的信息泄露、序列化安全等,并建议使用已验证的工具和类库来提高代码安全性。最后,文章介绍了在开发和测试阶段应用代码规约标准和静态分析工具的重要性,以

2025-05-15 18:35:55 773

原创 【代码之丑】乱用英语:站在中国人的视角来看英文命名

在编程中,使用英语进行命名和表达是行业标准,即使是非英语国家设计的编程语言也普遍采用英语语法。对于程序员而言,掌握基本的英语语法规则至关重要,尤其是在命名变量、函数和类时。常见的错误包括违反语法规则的命名(如使用不正确的动词形式)、使用不准确的英语词汇(如混淆“audit”和“review”),以及拼写错误。为了避免这些错误,建议制定代码规范、建立业务词汇表,并利用工具进行拼写检查。通过这些措施,可以提高代码的可读性和专业性,减少因语言问题导致的代码“坏味道”。

2025-05-15 18:34:40 685

原创 有一亿个keys要统计,应该用哪种集合?

在 Web 和移动应用中,经常需要处理一个 key 对应一个数据集合的场景,如用户登录信息、商品评论、签到记录等。Redis 的集合类型非常适合存储这些数据,并且支持高效的统计操作。常见的统计模式包括聚合统计、排序统计、二值状态统计和基数统计。聚合统计用于计算集合的交集、差集和并集,适用于统计新增用户和留存用户等场景。排序统计通过有序集合(如 Sorted Set)实现,适用于展示最新评论或排行榜。二值状态统计使用 Bitmap 记录签到等二值状态,节省存储空间。基数统计则用于统计独立访客等场景。选择合适的

2025-05-15 18:32:52 524

原创 高性能IO模型:为什么单线程Redis能那么快?

Redis 之所以被称为单线程高性能,主要是因为其网络 IO 和键值对读写操作由单个线程处理,而其他功能如持久化、异步删除等则由额外线程执行。Redis 采用单线程设计的主要原因是为了避免多线程并发访问共享资源时的复杂性和开销,如锁竞争和同步问题。尽管单线程通常处理能力较低,但 Redis 通过内存操作、高效数据结构(如哈希表和跳表)以及多路复用机制实现了高性能。多路复用机制允许 Redis 单线程同时处理多个客户端请求,避免了阻塞,提升了并发性和响应速度。因此,Redis 的单线程设计在避免并发控制问题的

2025-05-15 18:31:16 774

原创 共识算法:一次性说清楚 Paxos、Raft 等算法的区别

共识协议是分布式系统中的关键机制,确保所有节点在数据一致性上达成共识。其核心属性包括正确性、一致性和终止性,分别确保诚实节点提议的值被采纳、所有诚实节点达成相同共识,以及共识最终达成。这些属性与安全性和活跃性相对应,前者防止错误结果,后者保证系统持续运行。常见的共识算法如ZAB和Paxos,分别通过原子广播和状态机复制实现共识。ZAB强调消息顺序的严格一致性,而Paxos则通过多轮投票确保值的一致性。Raft算法作为Paxos的改进版,简化了选主和日志管理,提高了系统的可靠性和恢复效率。这些算法在分布式数据

2025-05-15 17:51:16 664

原创 SQL vs NoSQL:一次搞清楚五花八门的“SQL”

21 世纪的开发者面临选择数据库的挑战,不再像过去那样简单依赖 Oracle 或 DB2 等“不会出错”的选择。如今,了解数据库内部机制至关重要,因为即使选择大厂产品也可能遇到问题。数据库分类主要分为 SQL(关系型数据库)和 NoSQL(其他类型数据库),随着发展,出现了 NewSQL 和 DistributedSQL 等新类型。SQL 作为所有数据库的“核心”,即使 NoSQL 数据库也与其密切相关。SQL 数据库因其预定义 Schema 和 ACID 特性,在性能和可控性上具有优势,但缺乏分布式支持。

2025-05-15 17:40:34 539

原创 ⭐️【灵神算法题单】滑动窗口与双指针(定长/不定长/单序列/双序列/三指针/分组循环)

(灵神)【算法题单】滑动窗口与双指针(定长/不定长/单序列/双序列/三指针/分组循环)

2025-05-15 09:14:40 514

原创 二进制编码:“手持两把锟斤拷,口中疾呼烫烫烫”?

本文深入探讨了二进制在计算机科学中的核心地位,从算法和数据结构的硬件层面解释,到二进制如何表示整数和字符。文章详细介绍了二进制的“逢二进一”原理,以及如何通过短除法将十进制数转换为二进制数,并讨论了负数的原码和补码表示法。此外,文章还探讨了字符编码的重要性,从ASCII码到Unicode,解释了不同编码方式如何影响文本的存储和显示,以及常见的乱码问题如“锟斤拷”和“烫烫烫”的来源。最后,文章预告了下一讲将探讨二进制数据在硬件层面与晶体管和电路的关系,为读者揭示了计算机加法的电路实现原理。

2025-05-15 00:03:58 821

桌面电子宠物(进击的巨人)

桌面电子宠物,主打的就是陪伴

2025-05-26

空空如也

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

TA关注的人

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