自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 frp内网穿透零基础详细教程

1.下载压缩包报错病毒无法打开,浏览器设置无效,是因为这是系统拦截,需要到系统设置中设置白名单放行。2.配置文件有新旧两种ini和toml两种格式,注意自己用的哪个格式。1.分别给客户端和服务端机器下载压缩包解压。配置frps.toml文件(ini)完成,利用公网ip+指定暴露接口访问。利用systemd启动后台进程挂载。3.访问控制面板检查是否启动成功。(记得开放服务器7500端口)1.配置frpc.toml文件。3.面板上查看连接是否建立成功。1.创建service文件。3.开放云服务器防火墙端口。

2025-04-06 12:15:18 3855 2

原创 数据结构PTT优化部门树查询

进入正文之前先给出一个概念,可以在看完文章后再来看这个数据结构概念预排序遍历树(Modified Preorder Tree Traversal,简称MPTT)是一种,常用于解决多层级分类(如部门树、商品分类)的递归查询性能瓶颈问题。其核心是通过为每个节点添加左右边界值(lft和rgt),实现的高效查询。

2025-02-21 15:21:43 1432

原创 需求发版时间的讨论

那么可能发版后的夜晚观察时间内没问题,等到白天流量高峰时期才会触发,而此时正是发版人休息的时间…如果出现问题可以即使撤回发布,此时是流量低谷,会影响到的用户数量也是最少的,实现风险最低化(当时一位同学提了很有意思的看法:凌晨出bug没人修)也有其特殊的适用团队,即内部的CI/CD项目维护团队,当开发人员都在吃饭休息的时间,自然也是发版组件升级最佳时间,实现尽可能小的影响。在真实的企业开发环境中,多种方案之间没有明显对错之分,每一种方案都有其适用场景,要从业务场景出发考虑优劣及影响点。

2025-09-25 17:58:48 235

原创 JVM 类加载器详解

想加载非 classpath 随意路径中的类文件通过接口来使用实现,希望解耦时,常用在框架设计和SPI思想这些类希望予以隔离,不同应用的同名类都可以加载(其实就是违背双委机制的意义1),不冲突,常见于 tomcat 容器。

2025-09-23 16:40:33 1019

原创 java 线程池

ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量这些信息存储在一个原子变量 ctl 中,目的是将线程池状态与线程个数合二为一,这样就可以用。

2025-09-23 13:03:23 1002

原创 死锁 & jstack 定位死锁

死锁是一种特定的程序状态,在实体之间,由于循环依赖获取资源导致彼此一直处于等待之中,没有任何个体可以继续前进。通常指两个或多个线程之间,由于互相持有对方需要的锁,而永久处于阻塞的状态。

2025-09-23 12:23:09 851

原创 运行Hello World 程序会启动几个线程

运行Hello World 程序会启动几个线程?学习 java基础 – 线程 博客时遇到的问题:一个最简单的打印HelloWorld的程序,说说看,运行这个应用,Java至少会创建几个线程呢?

2025-09-21 18:04:22 868

原创 Serializable序列化

变化,使得之前序列化的数据无法反序列化,即使改动是兼容的(如添加可选字段);每次进行反序列化前都会取出字节码中的serialVersionUID与对象的serialVersionUID进行比较, 不一致则会抛出 异常,阻止反序列化操作。,Java 序列化机制会根据类的结构(包括类名、字段名、字段类型等)通过一个哈希算法计算自动生成一个。声明serialVersionUID来确保版本兼容性,如果类的结构发生变化(例如添加或删除字段),如果类的结构发生变化(例如添加或删除字段、修改字段类型等),自动生成的。

2025-09-14 16:32:34 478

原创 开发小点 - 存

开发小点。

2025-09-04 17:07:53 136

原创 二叉树前中后非递归遍历

核心思路是向左遍历+借助栈回退;区别在于打印位置和出栈的处理(前中是直接出栈, 后则需 保留 + 断开右子树)

2025-09-03 16:38:45 206

原创 zookeeper集群是什么技术, 有什么作用

特性/作用描述实际应用场景举例高可用性多节点构成集群,部分节点宕机不影响整体服务(只要存活节点超过半数)。核心业务系统的基础设施,不能有单点故障。强一致性基于ZAB协议,保证所有客户端看到的数据视图是一致的。金融交易、配置管理等要求数据绝对一致的场景。配置管理集中式、动态的配置信息存储与分发。微服务集群中所有服务的数据库连接字符串管理。分布式锁提供可靠的互斥访问机制。防止多个进程同时处理同一个定时任务。服务发现自动注册服务实例,并能实时感知服务实例的上下线状态。

2025-08-31 16:13:51 922

原创 Spring项目启动后加注释导致的debug异常

我之所以会直接在代码上加注释是因为想着只是方便我熟悉代码,后续在git中直接全部rollback还原代码就可以,基于这种不需要保留注释的情况,可以将计就计,改成把注释加到代码后,不要改变原有行数。,这也就导致原本的代码位置发生了变化,但对已经启动项目的idea来说,这个变化是无感知的,因为它的debug跳转仍然基于初始代码,可以理解为。,之后的操作都是按原来的行数记录来移动光标的,但是行数已经和加注释后的代码不匹配…算是一个很简单的初学者问题,但我也是今天被困住半天后才想到,希望其他人能借鉴经验。

2025-08-25 20:25:47 310

原创 MySQL实战45讲 24-25

2.备库的压力较大, 一些财务为了拉取数据做bi分析 会在从库执行查询导致备库执行压力大, 解决: 一主多从;循环复制问题,生成binlog时 会附带 独属server id标识,当读取到一条server id 为自身的 binlog记录,即已经流转回自身,直接废弃即可。主备切换时, 备库会同步主库的 binlog 实现数据一致, 主备延迟就是同一个事务在主库执行完毕后通过binlog同步到备库上执行完成的时间差值。直接表现: 备库消费 relay log 的速度比 主库生产 binlog的速度要慢。

2025-08-19 22:18:15 318

原创 MySQL 45 讲 18-20

1.性能上: cpu层面 值比较 int 比 string 更加高效;string 转换也比 int 高效— 扫描到第一个不为数字的字符/整体转。如果是 数字转字符串,那是否应该 部分匹配?索引树的本质是每一层 数据都是有序排列,可以进行类二分递归查找, 函数操作后 索引树 失去其 有序性。mysql 数据类型隐式转换优先级 : 数字类型 > 字符串类型 > 时间类型。两张表的字符集不同在做 join 时也会出现 字段函数操作导致索引失效。一致性读会 查询 undo 数据链。字段函数操作导致索引失效。

2025-08-01 17:44:13 228

原创 MySQL 45讲 16-17

explain 中的 using fiesort ,扫描 数据,取出符合判断条件的 数据,到sort buffer中,然后对排序字段采用快速排序进行 排序后直接将 所需字段进行返回。如果 字段长度所占内存大于所分配 的sort buffer ,需要借助 临时文件 进行 数据的存放排序,此时会采用 归并排序,将数据查分为多份存储到多个 临时文件,各自排序后再合并。即只取 排序字段和主键id 到 sort-buffer, 排序后得到顺序id , 回到主键索引树 取目标字段后返回。联结 判断字段和排序字段。

2025-07-31 21:06:38 185

原创 - 思考小记

在我看来,对于应届生微服务确实是要掌握,因为这是中大型公司都已经采用的项目服务组成形式,要进行开发至少必须会用(会用也就顺理成章得懂),但是分布式,这是为了应对项目的体量逐步增大而演进出的一种集群形式,其每个内容实现都是为了应对某个实际场景的问题,更多是一个不断演进实践的过程,同时。所以后面的学习我都是督促自己不要太过追逐过高的技术知识,那只能是浪费时间,而现在网上的培训机构大肆鼓吹分布式的知识,乃至是很多公司的面试,也会去问应届生这方面的问题;,我还是抱有敬畏之心的,因为其内容过于庞大;

2025-07-08 22:01:15 163

原创 API/SDK

SDK是对服务端提供的API的封装,实现开箱即用,每次调用你不需要知道这个API需要怎么发送请求,怎么处理响应,这些SDK会自己处理,你唯一需要做的就是将参数告诉SDK,SDK会将处理后的结果告诉你,只需要通过一个get()方法就可以实现便捷API调用。实际场景里可能会将多个API聚合为一个SDK工具包来实现一个整体功能,比如一个人脸识别SDK或者im聊天交互SDK可以直接为程度提供相应的功能来使用。两个云端程序需要远程调用时,其实就是一次communicate交流,交流发送有四要素。

2025-04-25 14:04:51 263

原创 bug小记

今天公司给客户天翼部署单点登录版本时遇到一个登录界面后端报错的情况,客户提到部署中因为公司隐私要求不能使用root用户操作,因此选择了其他用户,可能会是这方面权限缺失的问题。最后联系运维排查文件路径,果然如师兄所料,是因为客户使用非root环境启动导致没有创建配置文件的权限,导致无法读到nacos配置文件的内容。连接到客户的部署环境后,通过k8s导出auth和manager服务的日志,初步筛选日志,根据报错信息判断到是未读取到nacos配置文件。再重启nacos服务,无效。即配置文件未能成功创建。

2025-03-06 14:04:18 737

原创 java中存储金额字段

商场或者电商项目中会涉及到金额字段的存储,本文来讨论下选择最多的BigDecimal保证精度的原理以及其他字段类型替换方案。

2025-03-05 14:19:13 948

原创 Git-cherry pick

实习开发中遇到的一个情况:客户有一个定制化需求,基于客户使用的现场版本是2.5.0,结果产品经理对接错了版本,以至于前后端的开发都是基于2.6.0版本来做的,直到最后打包部署上线时无法部署才发现这个问题…针对解决方案,师兄让我先尝试cherry pick,如果解决不了的话就只能手搓代码了最后结果是前后端都通过git的cherry pick解决了问题,之前都不知道这个技术,所以来记录学习这个趣名技术🍒。

2025-03-03 16:11:15 531

原创 有关数据库表的冗余字段

之前看一个开发人员的技术研讨视频,提到了一个数据库表设计中的问题,就是一张表做纵向分表,拆分为a和b以做冷热数据分离存储,但是会有一种情况就是.这是因为查a但是需要这个字段就需要再去查b,多了一次查询,但是把这个字段存储在a中就可以,那么就有了这个必要冗余。

2025-03-01 18:17:14 1360

原创 @Async异步日志及@EnableAsync底层机制

面试速记通过如@Import引入激活异步处理,获取到核心是,会在 Bean 初始化阶段扫描@Async方法,利用 AOP 动态代理生成代理对象。当调用被@Async标记的方法时,代理会通过拦截请求,解析线程池(优先自定义,否则默认),将任务封装为Callable提交到线程池异步执行。

2025-02-28 09:56:36 1256

原创 DevOps全流程

面试速记DevOps 是一种融合开与运维的软件研发实践方法,规划从需求调研到开发,测试,部署等全流程,通过Jenkins 和Kubernetes 等自动化工具集成部署实现从代码编写到部署的无缝衔接,加速软件交付周期。我在实习中涉及到的工作有参与需求评审和开发排期会议,独立开发测试,并通过流水线部署与测试合作完善系统。DevOps 是一种软件开发和运维的实践方法,是为了实现更高效、快速、可靠的软件交付。DevOps 的核心理念是融合软件开发与测试部署的流程,从而实现从代码编写到部署的无缝衔接。

2025-02-26 11:13:42 1121 2

原创 外部Bean注入冲突解决方案

如果自动配置的 Bean 冲突,可以手动定义自己的 Bean,并添加@Primary@Bean@Primary // 标记为优先使用的 Bean。

2025-02-25 15:02:46 608

原创 SpringBoot自动装配类型冲突

如果SpringBoot中@Autowired注入的类有多个实现类,那么应该如何指定注入哪个实现类?面试速记三种注解方案1.Qualifier指定通过byName来注入2.Primiary:带有该注解的bean会被优先注入3.EnableAutoConfiguration(exclude…)直接不加载某个类,比较极端。

2025-02-25 15:01:54 859

原创 SpringBoot约定大于配置

通过。

2025-02-24 17:25:38 532

原创 超线程技术

面试速记有关"一个核会否会并行执行"问题:单核 CPU 在任务/线程级别无法实现真正的并行,因为物理上只有一个核心。但通过超线程技术,单核可以模拟上的并行执行:让一个物理核心对操作系统表现为多个逻辑核心,通过共享核心资源,快速切换线程来隐藏延迟,超线程技术,是英特尔开发的一项硬所件技术,这项技术允许一个CPU模拟出两个逻辑CPU,从而使得操作系统和软件可以将任务分配给这两个逻辑核心,实现更高效的并行处理。也就是。

2025-02-24 17:24:49 401

原创 策略模式Spring框架下开发实例

采用策略模式的情况一般是封装多重if-else/switch下的不同处理逻辑,这些逻辑可以抽象为一个行为(比如封装参数,做前置校验等),将这个行为定义为接口方法/*** 策略接口*///本例中根据不同产品类型执行不同的返回参数封装逻辑将上文提到的多重if-else/switch中不同情况及其处理逻辑抽象成具体策略类和其内部方法执行逻辑/*** 记录器参数处理类*/@Component//注解使用见3@Autowired@Override//记录器的处理逻辑。

2025-02-21 15:22:48 909

原创 ThreadLocal及线程间变量传递详解

面试速记每个线程内部都有一个专属的 ThreadLocalMap,用来存放线程局部变量。ThreadLocalMap 的键是 ThreadLocal 对象,值是实际存储的数据。调用 get() 或 set() 时,会通过当前线程的 ThreadLocalMap 根据 ThreadLocal 对象的 hash 值快速定位并操作对应的值,从而实现数据隔离。在多线程编程中,我们常常需要保证每个线程拥有自己的变量副本,避免线程间数据互相干扰。

2025-02-21 15:17:56 1391

原创 数据权限校验实践

当然这个项目中的鉴权模块转换不是为了优化架构,而是用户提出的一个定制化需求,这两种鉴权方案其实都有各自的优势,需要根据业务场景来进行选择,以下列出这二者的优势场景RBAC提供了一种简单、集中的权限管理方式,适用于权限相对固定的场景。ABAC提供了一种灵活、动态的权限管理方式,适用于权限需求变化频繁的场景。

2025-02-17 20:02:39 854 1

原创 @PathVariable与@RequestParam

用于资源标识(URL路径中的变量),参数必填。:用于附加条件(查询字符串中的参数),参数可选或带默认值。根据API设计的RESTful原则,优先用标识资源,用处理辅助条件。此外,@RequestBody注解用于接收Post请求的参数体Get使用@PathVariable/@RequestParam路径传参Post用@RequestBody + DTO传参。

2025-02-17 16:16:39 472

原创 JVM直接内存详解

磁盘上的大文件直接转到内存中以便高速读写。

2025-02-17 15:38:28 1108

原创 215 八股学习记录

ArrayList和LinkedList的区别静态代码块3.构造函数构造函数不可用private修饰:错,将构造函数设为private可以new,这通常用于单例模式或工厂模式中。构造函数的名字必须与类名完全相同,,编译器通过构造函数的名字来识别它是一个构造函数。

2025-02-17 10:51:08 735

原创 docker 安装mysql5.7保姆级教程(附docker报错:Error response from daemon: Get “https://registry-1.docker.io/v2/”)

如果是为报错而来,直接转到2中查看解决方案如果是新手来找安装教程,可以按照步骤一步一步来。

2025-02-17 10:48:48 1032

原创 有关串池的常见面试题及其底层原理

字符串变量拼接的原理是StringBuilder字符串常量拼接的原理是编译器优化常量池中的字符串仅是符号,只有在被用到时才会转化为对象利用串池的机制,来避免重复创建字符串对象可以使用intern方法,主动将串池中还没有的字符串对象放入串池中。

2025-02-09 22:27:45 218

原创 SpringBoot笔记

此笔记是博主二刷SpringBoot课程总结的笔记,其中记录的内容是自己有了实习开发经验以后觉得开发中实际能用到的高频知识1.spring-boot-dependencies定义坐标版本,通过dependencyMangement实现依赖管理避免依赖版本冲突2.starter通过依赖传递来配置开发环境中需要的相关依赖,以减少依赖配置3.Application引导类:初始化Spring容器4.内嵌服务器隐藏资源的访问行为,即无法通过访问路径得知对资源的操作类型由@Controller,@ReponseBody

2025-02-06 21:15:32 1245

原创 @Value属性读取系统变量错误

避免使用常见属性名,如user.name,因为容易与系统属性冲突。理解Spring Boot的属性优先级,避免配置被覆盖。

2025-02-05 17:08:48 290

原创 idea隐藏无关文件

的输入框中,添加你想要隐藏的文件类型或文件夹。如果你想隐藏某些特定类型的文件(例如。:可以指定相对路径或绝对路径。这会隐藏指定路径下的文件夹。:直接写文件夹名称。

2025-02-04 18:57:42 750

原创 日志打印的最佳实践

out。

2025-01-22 11:04:18 656

原创 SaaS与私有化部署:企业级产品的两种选择

在SaaS模式下,产品A被部署到我公司的服务器上,所有的数据存储在我公司的数据库中。当公司B购买并获得授权后,我会为其分配相应的服务器资源,他们通过远程调用的方式使用产品A,就像是远程访问一个在线服务。假设我自己的公司开发了一个产品A,供其他公司使用。如果有公司B想要使用我的产品,产品A的交付方式(即部署到服务器开始使用)可以有两种选择:SaaS模式和私有化模式。在私有化模式下,产品A被部署到公司B自己的服务器上,所有的运行数据和用户请求都在他们内部的系统中处理。这意味着产品的控制权完全掌握在公司B手中。

2025-01-20 16:07:28 941

frp内网穿透课设报告资料

frp内网穿透课设报告资料

2025-04-06

空空如也

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

TA关注的人

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