后端开发2025年08月17日
目录 线程安全性 死锁 定义 实现一个死锁 查看死锁 解决死锁 其他线程安全问题 单例模式 线程安全性 线程安全是指我们所写的代码在并发情况下使用时,总是能表现出正确的行为;反之,未实现线程安全的代码,表现的行为是不可预知的,有可能正确, 实现线程安全的方式: 线程封闭 就是把对象封装到一个线程里,只有这一个线程能看到此对象。实现线程封闭的方式如下: 栈封...
后端开发2025年08月17日
本文小编为大家详细介绍“java编码转换过程是怎样的”,内容详细,步骤清晰,细节处理妥当,希望这篇“java编码转换过程是怎样的”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 java中的编码转换(以utf8和gbk为例) 在正常javaweb开发中经常会发现字符转换的需求,会存在中文字符转换乱码的现象,如何解决以及其转换原理我...
后端开发2025年08月16日
目录 一、前提 二、代码 三、使用 1、实现TreeNode接口 2、使用 3、样例 一、前提 pId需要传入用来确认第一级的父节点,而且pId可以为null。 树实体类必须实现:TreeNode接口 MyTreeVo必须有这三个属性:id、pId、children 可以根据不同需求,配置TreeNode和MyTreeVo中固定的属性 二、代码 定义Tre...
后端开发2025年08月16日
目录 前言 需求描述 思路解析 代码实现 时间复杂度 总结 前言 本文主要介绍如何将多个小的升序链表合并一个大的升序链表。 需求描述 给出K个升序链接,要求把这K个升序链表合并成一个,并且这个链表也是升序的。 例如:A = [1,5,6], B = [2,3,8], C = [4,4,9] 将这3个链表合并成一个链表D,合并后D = [1,2,3,4,4,...
后端开发2025年08月15日
锁的定义 在计算机程序中锁用于独占资源,获取到锁才可以操作对应的资源。 锁的实现 锁在计算机底层的实现,依赖于CPU提供的CAS指令(compare and swsp),对于一个内存地址,会比较原值以及尝试去修改的值,通过值是否修改成功,来表示是否强占到了这个锁。 JVM中的锁 jvm中,有2个常用的锁 synchronized synchronized是j...
后端开发2025年08月15日
目录 1.递归和迭代的区别 2.代码 1.递归和迭代的区别 当实体调用自身时,程序称为递归。 当存在循环(或重复)时,程序称为迭代调用。 示例:求一个数的阶乘的程序 时间复杂度比较 查找递归的时间复杂度比迭代更难。 递归:递归的时间复杂度可以通过根据先前的调用找到第 n 次递归调用的值来找到。因此,根据基本情况找到目标情况,并根据基本情况求解,可以让我们了...
后端开发2025年08月15日
根据不同的条件,调用不同的 bean 对象,执行对象中的方法 SpringUtils 工具类 package com.vipsoft.web.utils; import cn.hutool.core.util.ArrayUtil; import org.springframework.aop.framework.AopContext; import org....
后端开发2025年08月14日
目录 锁原理 偏向锁 轻量级锁 重量级锁 锁升级 无锁 偏向锁 轻量级锁 重量级锁 锁粗化&锁消除 锁粗化/锁膨胀 锁消除 synchronized锁是啥?锁其实就是一个对象,随便哪一个都可以,Java中所有的对象都是锁,换句话说,Java中所有对象都可以成为锁。这次我们主要聊的是synchronized锁升级的套路 synchronize...
后端开发2025年08月14日
目录 一、什么是SQL注入? 二、Java项目防止SQL注入方式 1、PreparedStatement防止SQL注入 2、mybatis中#{}防止SQL注入 3、对请求参数的敏感词汇进行过滤 4、nginx反向代理防止SQL注入 总结 一、什么是SQL注入? SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用...
后端开发2025年08月14日
目录 克鲁斯卡尔算法 执行流程 代码实现 克鲁斯卡尔算法 克鲁斯卡尔算法是一种用于求解最小生成树问题的贪心算法。最小生成树是一个连通无向图中生成树中边权值和最小的生成树。克鲁斯卡尔算法按边权值从小到大的顺序依次选择边,当所选的边不会形成环时,将其加入到生成树中。具体实现过程如下: 将所有边按照边权值从小到大排序。 依次选择边,如果选择的边的两个端点不在同一...