自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据通信技术复习笔记:频带传输与数字调制详解

频带传输和数字调制是数据通信的“高速公路”。ASK、PSK、FSK是基础工具,像灯光、彩带、口哨;多进制调相和QAM是高效升级,像多色信号灯;OFDM和CDMA是智能优化,像多车道和多语言会议。整个流程从基带编码到高频传输,再到解调恢复,环环相扣,与基带传输的滤波、均衡、奈奎斯特准则一脉相承。希望这篇笔记能让你对频带传输和数字调制有清晰的认识!如果有具体问题或计算题,随时告诉我,我会继续深入讲解~

2025-04-13 16:00:16 323

原创 面试官拷问:内存溢出与内存泄漏的区别及排查方法

预防胜于治疗配置和GC日志,防患于未然。合理设置-Xmx和-Xms,避免内存不足或浪费。定期监控内存使用,防微杜渐。工具熟练度熟练使用MAT、VisualVM等工具,能显著提升排查效率。熟悉jmapjstack等命令,快速获取运行时信息。代码规范避免滥用静态集合和。及时关闭资源(IO、数据库连接)。对大数据操作使用流式处理或分页。学习与复盘每次OOM后复盘,总结问题根因和优化措施。阅读JVM相关书籍(如《深入理解Java虚拟机》),提升理论功底。

2025-04-13 15:59:45 476

原创 Java并发编程:本质上只有一种创建线程的方法

然而,它们有一个缺点,即 run 方法没有返回值。无论你是实现 Runnable 接口、实现 Callable 接口还是直接继承 Thread 类来创建线程,最终都是创建一个 Thread 实例来启动线程,即 new Thread(),只是创建的形式不同而已!实际上,实际工作是由 start0() 完成的,它是一个本地方法,我添加了一些注释,以便你更容易理解。在程序中调用 start() 方法后,虚拟机首先为我们创建一个线程,然后等待直到这个线程获得时间片,才会调用 run() 方法执行具体逻辑。

2025-04-13 15:59:05 186

原创 Java高级工程师常见面试题(答案)

简单易学:Java的语法相对简单,与C++相比更容易学习和理解。面向对象:Java是一种面向对象的编程语言,支持封装、继承和多态等面向对象的特性。可以在不同的操作系统上运行,只需在目标平台上安装Java虚拟机(JVM)即可。安全性:Java提供了安全机制,如字节码校验和安全管理器,可以防止恶意代码的执行。强大的标准库:Java拥有丰富的标准类库,提供了大量的API,包括输入输出、网络通信、数据库连接等功能。

2025-04-13 14:31:06 574

原创 springboot对接钉钉,发送钉钉消息

用户运行)就获得了控制这些特定服务的必要权限,并且整个流程都运行在更低的用户权限下,更加安全。这会使用系统默认的文本编辑器(通常是 nano 或 vim)打开一个临时文件进行编辑。创建一个单独的文件来存放你的 OTA 相关权限规则,这样更容易管理,并且不容易影响主。会在你保存时检查语法。如果有错误,它会提示你,不允许你保存错误的配置。在文件的末尾(或者用户权限规则部分),添加以下行。每一行对应一个允许的操作。你需要为每个服务添加。(以及其他 ROS 服务),我们需要在。会在保存时检查语法,防止你搞坏。

2025-04-11 16:25:51 131

原创 springboot对接钉钉,发送钉钉消息

通过以上步骤即可实现 Spring Boot 与钉钉的消息对接,建议根据实际业务需求选择适合的消息类型和安全策略。

2025-04-11 16:19:31 264

原创 FastAPI全面指南:从入门到企业级应用实战

在Python Web开发领域,FastAPI正以惊人的速度成为新宠。它完美融合了高性能、开发效率与现代化特性,让开发者既能享受Python的简洁,又能获得不输Go/Node.js的运行效率。本文将用3000字为你全面解析FastAPI的核心功能,并通过实战案例展示其应用场景。

2025-04-11 16:18:58 729

原创 2025JAVA面试题附答案

Java注解(Annotation)是JDK 5.0引入的一种元数据,用于将某些信息与代码关联起来。这些信息并不直接影响代码的执行,但可以被其他工具或库利用。注解提供了一种安全的、反射的方式,来为我们的代码添加额外的元数据信息。这些信息可以在编译时被编译器利用,也可以在运行时被JVM或其他利用注解的工具利用。Java注解的主要用途包括编译检查:注解可以用于编译时检查,例如@Override注解。当你用@Override标注一个方法时,编译器会检查该方法是否覆盖了父类中的方法。配置。

2025-04-11 14:49:23 1291

原创 Java最新面试题总结(三年经验)

threadlocl是作为当前线程中属性ThreadLocalMap集合中的某一个Entry的key值,不同的线程之间threadlocal这个key值是一样,但是不同的线程所拥有的ThreadLocalMap是独一无二的,也就是不同的线程间同一个ThreadLocal(key)对应存储的值(value)不一样,从而到达了线程间变量隔离的目的。在使用布隆过滤器的时候,首先将所有的数据hash到一个位图中,如果查询的数据在位图中不存在,那么直接返回不存在,从而避免了对数据库的查询操作。

2025-04-10 17:14:21 508

原创 08-Java并发容器源码剖析:ConcurrentHashMap与CopyOnWriteArrayList

对于大数据集,考虑使用。可查看容器内存占用情况。

2025-04-09 16:50:38 474

原创 已经解决】java.security.InvalidAlgorithmParameterException: Prime size must be multi

建议要学会定位问题,我一开始就直接搜为什么sftp报错,这样效率极其低下。搜报错也比这个直接搜结果好。再者我应该学会去定位问题,要不然只能一个个的尝试,除非一点思路都没有,只能一个个的尝试。

2025-04-09 16:50:07 260

原创 Rust入门之迭代器(Iterators)

迭代器模式允许你依次对一个序列中的项执行某些操作。迭代器iterator)负责遍历序列中的每一项并确定序列何时结束的逻辑。在 Rust 中,迭代器是惰性的lazy),这意味着在调用消费迭代器的方法之前不会执行任何操作。ini代码解读复制代码[1, 2, 3];// 创建了一个迭代器,这段代码本身并没有执行任何有用的操作。} ​惰性求值的优势:避免不必要的计算开销,例如处理无限序列或仅在需要时生成元素。实际应用场景:处理大型数据集时,惰性迭代器可以节省内存,只在需要时加载数据。

2025-04-09 16:49:31 815

原创 全套Java面试八股文(含答案)

double 和 long 都是64位宽,因此对这两种类型的读是分为两部分的,第一次读取第一个 32 位,然后再读剩下的 32 位,这个过程不是原子的,但 Java 中 volatile 型的 long 或 double 变量的读写是原子的。意思就是说,在你写一个 volatile 域时,能保证任何线程都能看到你写的值,同时,在写之前,也能保证任何数值的更新对所有线程是可见的,因为内存屏障会将其他所有写的值更新到缓存。如果你不这么做,在解析或者格式化日期的时候,可能会获取到一个不正确的结果。

2025-04-09 16:02:20 1024

原创 2025年全网最全 Java 面试八股文(20w字)

官方解释1,Spring创建 bean主要分为两个步骤,创建原始bean对象,接着去填充对象属性和初始化。2,每次创建 bean之前,我们都会从缓存中查下有没有该bean,因为是单例,只能有一个。3,当创建 A的原始对象后,并把它放到三级缓存中,接下来就该填充对象属性了,这时候发现依赖了B,接着就又去创建B,同样的流程,创建完B填充属性时又发现它依赖了A又是同样的流程,不同的是:这时候可以在三级缓存中查到刚放进去的原始对象A。

2025-04-02 15:33:33 550

原创 Docker/Compose常用命令整理总结

【代码】Docker/Compose常用命令整理总结。

2025-04-01 19:56:48 118

原创 Seata:为微服务项目的XID传播设计全局的RequestInterceptor-将XID传播与具体FeignClient行为解耦

拦截器实现了 Feign 的接口,并通过 Spring 的注解进行配置:java代码解读复制代码@Component:将拦截器注册为 Spring Bean,自动注入到 Feign 客户端。:条件注解,确保类路径中存在和,即仅在 Feign 和 Seata 都可用时生效。这提高了代码的兼容性。触发时机:Feign 发起 HTTP 请求时,拦截器被调用。获取 XID:从 Seata 的上下文获取当前事务的 XID。条件检查:确保 XID 有效且请求不是认证相关。传递 XID。

2025-04-01 19:55:47 835

原创 基于Segment-Mybatis的:分布式系统中主键自增拦截器的逻辑分析与实现

拦截器需要作用于MyBatis的Executor类的update方法,因为插入操作属于更新操作的一种。我们通过注解指定:java代码解读复制代码Executor:MyBatis的核心执行器,负责SQL的执行。update:包括INSERTUPDATEDELETE等操作。args:方法参数,包括(SQL映射)和Object(传入参数)。每次执行update方法时,拦截器都会被触发。这个拦截器通过MyBatis的插件机制,实现了分布式ID的自动生成。

2025-04-01 19:55:17 911

原创 2025完整版Java面试题大总结诶!

单个redis节点的并发能力是有限的,所以为了提高并发能力,我们需要搭建redis集群,就比如:主从复制。主从复制的流程主从复制主要分为:全量同步和增量同步。全量同步:在salve请求数据同步的时候会携带application Id和offset,如果master判断出applid和自己的不一样,就认为slave是第一次进行同步,所以会进行全量同步。

2025-04-01 16:08:49 1247

原创 面试复盘:深入剖析Linux Page Cache与缓存未命中的处理

问题1的教训:回答基础问题时,别停留在表面,要主动展示深度,比如数据结构(radix tree)、回收机制(LRU)。问题2的教训:遇到追问时,先梳理完整流程,再补充细节。举例要贴合上下文,避免“硬憋”出不相关内容。提升方向多练习结构化表达:是什么 → 怎么做 → 有什么用。熟悉内核源码的关键点,比如中的page cache实现。

2025-03-27 19:54:09 775

原创 java全端课3--java-面向对象(中)

把对象存到数组中,这样的数组就称为对象数组。其实,它和普通的数组是一样的,只是因为对象数组使用起来相对复杂一点。基因财产才艺继承:延续性、扩展性继承上一代的优良传统,并发扬光大。青出于蓝而胜于蓝。Java中为什么要有继承的设计呢?代码的复用性:子类可以复用父类的代码代码的扩展性:子类可以重写父类的方法或扩展父类没有的成员表示事物之间的is-a关系。例如:Student类继承Person类,Student is a Person.学生类是人类的一个分支。

2025-03-27 19:51:16 813

原创 深度解析 Spring Boot 配置机制

继承实现自定义配置源:java体验AI代码助手代码解读复制代码} @Override public Object getProperty(String name) { try (Connection conn = getSource().getConnection()) { // 从数据库查询配置 } } }Spring Boot 的配置体系既体现了 "Don't Repeat Yourself" 的设计哲学,又通过灵活的扩展机制满足了企业级应用的复杂需求。

2025-03-27 19:17:04 588

原创 Java面试八股文合集(持续更新)

我们使用java编译命令就能将java源文件编译对应成字节码文件(.class),字节码文件是一种八位数据的二进制流文件,可以被JVM快速加载到内存中运行AQS全称abstractQueueSynchronizer,即抽象队列同步器,是一种锁机制,它是作为一个基础框架使用的,像Reentrantlock,countdownlatch都是基于AQS实现的AQS内部维护了一个先进先出的双向队列,队列中存储了排队的线程。

2025-03-27 15:53:29 1178

原创 2025常见的100道Java面试题(全网最全)

(2)当我们试图把某个类的对象当成 HashMap的 key,或试图将这个类的对象放入 HashSet 中保存时,重写该类的equals(Object obj)方法和 hashCode() 方法很重要,而且这两个方法的返回值必须保持一致:当该类的两个的 hashCode() 返回值相同时,它们通过 equals() 方法比较也应该返回 true。这一点要看实际情况的。在调用wait方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify方法后本线程才进入对象锁定池准备。

2025-03-21 15:03:41 800

原创 一招搞定! 自定义MyBatis拦截器,SQL日志存储成本直降30%

笔者编写了一个工具类负责解析 MyBatis 执行语句,还原为可执行的 SQL 内容。通过 MyBatis 的拦截器实现 SQL 原始语句的打印。将 MyBatis 拦截器设置为 Spring 自动装配。MyBatis Plus 通过配置文件中设置。属性来指定日志实现,以打印 SQL 语句。首先,自定义 MyBatis 拦截器,实现。时,SQL 拦截将生效,打印的内容如下。打印出来的 SQL 内容如下。

2025-03-20 15:06:39 157

原创 Elasticsearch 分页查询技巧:小数据与大数据场景下的最佳实践

对于小数据量的分页查询,可以使用 from+size 查询。当分页结果超过 10000 条结果时,则推荐使用 search_after 查询。不推荐使用 scroll 查询进行深度分页,因为实时性不高,对资源要求高。

2025-03-20 15:06:07 509

原创 告别MQ强耦合!一文了解如何实现消息队列无缝切换

然而,直接在代码中引入这些消息队列的 API 会导致系统与特定消息队列的强耦合,后续难以切换其他消息队列组件。为了解决这些问题,我们决定开发一个简洁、可切换的 MQ 组件,保留原生配置的同时,屏蔽底层 API 细节,并通过。提供了一种抽象层,但其引入了复杂的概念(如绑定器、通道、处理器等),且与低版本的。注解,就可以实现消息的消费,业务代码上并没有涉及到第三方消息队列 API。注解,用于配置消费者的行为,如消费主题、消费者组、消费模式、消息过滤等。注解,可以配置消费参数,如主题、消费者组、消费线程等。

2025-03-20 15:05:35 251

原创 Java面试八股文合集(持续更新)

我们使用java编译命令就能将java源文件编译对应成字节码文件(.class),字节码文件是一种八位数据的二进制流文件,可以被JVM快速加载到内存中运行AQS全称abstractQueueSynchronizer,即抽象队列同步器,是一种锁机制,它是作为一个基础框架使用的,像Reentrantlock,countdownlatch都是基于AQS实现的AQS内部维护了一个先进先出的双向队列,队列中存储了排队的线程。

2025-03-20 14:29:42 767

原创 UML(Unified Modeling Language,统一建模语言)应用方向

UML 在软件工程中的核心作用是帮助开发人员可视化系统的结构和行为,减少沟通成本,提升设计质量。用于展示系统的对象结构,定义类、属性、方法及它们之间的关系(如继承、关联、依赖等)。UML 也可用于非技术人员,例如业务分析师、产品经理等,用来设计和优化业务流程。用于描述系统如何与外部用户(或其他系统)交互,明确系统边界和用户需求。描述对象的生命周期及状态变化,常用于状态驱动系统(如工作流管理)。展示系统的物理架构,如服务器、数据库、负载均衡等。,它的可视化能力帮助团队更清晰地沟通和设计系统。

2025-03-18 15:36:10 735

原创 天翼云:Apache Doris + Iceberg 超大规模湖仓一体实践

传统的日志架构,如 ELK(Elasticsearch, Logstash, Kibana),虽然广泛应用,但在处理大规模日志数据时,常常面临成本高昂、查询效率低下、扩展性不足的问题。延迟物化是减少网络 IO 的一项重要技术,开启延迟物化功能后,数据扫描节点会优先读取谓词条件列,在使用过滤后的行号,读取剩余的列数据。天翼云在 2024 年中旬,结合自身业务的发展和用户需求,亟需在 Doris 中支持 Iceberg 的写回能力,以便用户能够在 Doris 对 Iceberg 表数据进行完整的数据处理操作。

2025-03-18 15:35:36 795

原创 kubernetes request limit底层是怎么限制的☆

在 Kubernetes 中,

2025-03-18 15:34:09 802

原创 Java各大厂面试题,(阿里,字节,美团,京东,百度....)

每个技术人都有个大厂梦,我觉得这很正常,并不是饭后的谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻炼几年,相信对自己能力的提升还是非常大的。上面的表格不排除有很极端的收入情况,但至少能囊括一部分同职级的收入。这个表是“技术线”新入职员工的职级和薪资情况,非技术线(如产品、运营、销售等)以及老员工的情况会和图中的范围有所出入。以校招生为例,产品线收入大概是技术线的80%,运营线收入大约是技术线的65%。

2025-03-18 15:00:56 953

原创 C++网络编程之字节序

字节序是指多字节数据在内存中的存储顺序。主要有两种字节序:大端序、小端序。大端序:即Big-Endian,高位字节存放在低地址处,低位字节存放在高地址处。比如:16位整数0x1234,在大端序下会以0x12 0x34的形式存储。小端序:即Little-Endian,低位字节存放在低地址处,高位字节存放在高地址处。比如:16位整数0x1234,在小端序下会以0x34 0x12的形式存储。需要注意的是:不同计算机系统可能使用不同的字节序来存储多字节的数据类型。

2025-03-16 15:25:02 479

原创 Netty底层原理深度解析:高并发网络编程的核心设计

Netty架构图。

2025-03-16 15:24:32 564

原创 MySQL锁机制全解:记录锁、间隙锁、邻键锁的原理与实战

隔离级别锁策略幻读风险无锁(脏读)存在记录锁为主存在邻键锁(默认)不存在全表锁(悲观锁)不存在总结理解不同锁的工作机制,是优化高并发场景下MySQL性能的关键。通过合理设计索引、控制事务范围和选择隔离级别,可显著降低锁冲突概率。

2025-03-16 15:24:00 858

原创 2025最新java八股文面试汇总!

可重入就是说某个线程已经获得某个锁可以再次获取锁而不会出现死锁。可重入锁有。如果不同的输入得到了同一个哈希值,就发生了"哈希碰撞"。再次Hash开放地址法其中,m为哈希表的表长;di 是产生冲突的时候的增量序列。链地址法:将所有哈希地址相同的记录全部链接在同一链表中。自定义注解定义为:@interface。@Target:功能:指明修饰的注解的使用范围METHOD:方法TYPE:类,接口或者枚举PACKAGE:包@Retention:指明修饰的注解的生存周期。

2025-03-16 14:16:20 1385

原创 04 学会 Gin 中间件,这些操作你也能随心所欲!

中间件(Middleware)是一个处理 HTTP 请求的函数,它可以在请求到达最终处理逻辑之前执行一系列操作,比如日志记录、身份验证、错误处理、跨域请求控制等。Gin 框架允许在请求生命周期的不同阶段插入中间件,以增强 Web 应用的功能和安全性。从 Gin 中间件的基本概念到原理解析,再到实战案例,全面介绍了 Gin 中间件的使用方式。通过 Request ID 中间件的实现,展示了如何编写高效的中间件,并结合实际应用场景说明了其价值。

2025-03-14 15:03:41 727

原创 从实习生“777惨案”聊起:上生产环境部署 Spring Boot Docker 的正确姿势

嘿,大家好!今天咱们聊个运维圈的经典笑话:一个实习生上生产环境,直接给所有文件设成777权限,结果 SSH 都连不上了。这事儿听着好笑,但真碰上了就头疼了。咱们就从这个糗事儿出发,聊聊实习生上生产环境该咋给自己设权限,尤其是部署一个 Spring Boot 的 Docker 服务,到底得用哪些命令,咋做才靠谱。咱从最简单的想法开始,一步步推到现代化的方案,顺便看看简单方法有啥坑,再想想咋优化到主流水平。

2025-03-14 15:03:11 661

原创 剖析 @Conditional 注解的原理与 Spring Boot 装配流程中的扫描时机

从最朴素的手动判断,到的初步优化,再到现代的,咱们一步步逼近了 Spring Boot 的主流方案。它的核心原理是把条件判断交给框架,在 Bean 定义注册阶段动态决定加载啥。扫描时机很明确,就是组件扫描后、Bean 创建前。

2025-03-14 15:02:39 819

原创 2025Java完整版面试题总结(20w字)

基于字段的依赖注入在声明为final/immutable的字段上不起作用,因为这些字段必须在类实例化时实例化。声明不可变依赖项的惟一方法是使用基于构造器的依赖注入。这样的类不能在DI容器之外重用,因为除了反射之外,没有其他方法为它提供所需的依赖项。当添加过多时候,不容易发现,而用构造函数的话,构造函数参数会变过多,可以明显发现问题。被static修饰的成员变量也叫类变量,它存储于方法区中,生命周期与当前类相同。局部变量存储于栈内存中,作用的范围结束,变量空间会自动的释放。成员变量是在类的范围里定义的变量;

2025-03-14 14:05:48 983

原创 【设计模式】从事件驱动到即时更新:掌握观察者模式的核心技巧

定义:又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。

2025-03-13 15:24:17 547

空空如也

空空如也

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

TA关注的人

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