- 博客(144)
- 资源 (4)
- 收藏
- 关注
原创 动态规划解决背包问题实现
摘要:动态规划(DP)是一种通过分解重叠子问题并存储最优解的算法设计方法,其核心包括重叠子问题、最优子结构和状态转移方程三要素。解决DP问题的通用步骤为:定义状态、初始化、推导转移方程、确定计算顺序和返回结果。以背包问题为例,展示了从二维DP到一维优化的解题逻辑,通过状态转移方程和代码实现,说明了如何计算背包能装下的最大价值。DP通过空间换时间,高效解决多阶段决策问题。
2025-12-22 14:19:46
387
原创 贪心算法解决找零钱问题
贪心算法是一种通过局部最优选择逼近全局最优的高效算法设计方法。其核心思想是每一步都采取当前最优决策,最终组合成整体最优解。文章从四个维度解析贪心算法:1)本质特征:不回溯、不存储历史,仅关注即时最优;2)适用条件:需满足贪心选择性质和最优子结构;3)典型应用场景如找零问题、活动选择等;4)与回溯、动态规划的对比优势。文中以硬币找零为例,展示了贪心策略的具体实现步骤和代码示例,强调验证策略可行性是应用关键。该算法效率通常为O(n)或O(nlogn)。
2025-12-22 14:09:28
403
原创 MySQL数据库Undo日志和Redo日志的区别
MySQL的UndoLog和RedoLog是InnoDB实现事务和崩溃恢复的关键机制。RedoLog通过记录物理修改和预写日志(WAL)确保事务持久性,提供崩溃恢复能力,其配置参数包括日志文件大小和数量。UndoLog用于事务回滚和MVCC实现,记录反向操作以撤销未提交修改,其配置涉及日志数量和表空间位置。两者协同工作,共同保障了数据库的ACID特性,通过不同的日志机制分别处理数据持久化和事务回滚需求,构成了InnoDB存储引擎可靠性的基础。
2025-07-07 14:10:49
437
原创 Java内存溢出排查
四、通过使用dk自带命令jstack获取该java进程的线程快照并输入到文件中: jstack -l <pid> > ./jstack_result.txt 命令(pid为Java进程的id号)来获取线程快照结果并输入到指定文件。jstat -gcutil <pid> 250 20 (其中pid是进程id)# 监控 jvm 的内存使用情况。三、jmap -histo 实时查看JVM对象大小的排序结果。二、jstat -gcutil 查看内存使用情况。一、通过top命令查看内存溢出的进程id。
2024-11-04 14:28:05
1214
原创 Java进程CPU飙高排查
jstack |grep -A 200 (pid为Java进程的id号,tid为线程16进制线程id)使用 top -Hp 命令(pid为Java进程的id号)查看该Java进程内所有线程的资源占用情况。printf "%x\n" tid(tid指线程的id号)将以上10进制的线程号转换为16进制。四、通过jstack命令,查看栈信息,定位到线程对应的具体代码。二、查看当前进程消耗资源的线程PID: top -Hp pid。
2024-11-04 13:58:45
572
原创 Windows Server没有远程桌面授权服务器可以提供许可证解决方案
Windows Server没有远程桌面授权服务器可以提供许可证解决方案
2023-01-28 13:59:18
4142
原创 Java死锁实例代码详解
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。public class DeadLockDemo { static Book book1 = new Book(); static Book book2 = new Book...
2018-04-08 18:53:42
1516
1
原创 判断回文数(非字符串方式)
设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。注意:1.偶数个的数字也有回文数1244212.小数没有回文数public class PalindromeNumber { public static void main(String[] args) { ...
2018-04-08 18:17:07
1420
1
原创 Java对象浅析
Java是一门面向对象的编程语言,在Java程序运行的过程中无时无刻都有对象被创建出来。虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,那就先执行相应的类加载过程。在类加载检查过后,虚拟机就为新生对象分配内存。对象所需内存大小在类加载完成后便可完全确定,为对象分配内存等同于把一块确定...
2018-03-17 15:40:00
348
原创 Java内存解读简易版
运行时的数据区Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。程序计数器程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。每个线程都需要一个独立的程序计数器,这块区域是线程私有的内存。如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟...
2018-03-17 10:46:22
418
原创 快速排序Java(指针双向从头尾向中间扫描)
一趟快速排序的过程如下 (1)先从序列中选取一个数作为基准数 (2)将比这个数大的数全部放到它的右边,把小于或者等于它的数全部放到它的左边 一趟快速排序也叫做Partion,即将序列划分为两部分,一部分比基准数小,另一部分比基准数大,然后再进行分治过程,因为每一次Partion不一定都能保证划分得很均匀,所以最坏情况下的时间复杂度不能保
2017-09-19 09:57:57
1075
转载 动态规划的详细解析(01背包问题)
算法分析之动态规划详解先举个例子01背包问题具体例子:假设现有容量15kg的背包,另外有4个物品,分别为a1,a2,a3, a4。物品a1重量为3kg,价值为4;物品a2重量为4kg,价值为5;物品a3重量为5kg,价值为6, a4重6千克,价值为7。将哪些物品放入背包可使得背包中的总价值最大?对于这样的问题,如果如上述所涉及的数据比较少的时候,我们通过列举就能算出来,例如,上边的
2017-05-09 15:39:18
775
原创 工厂模式,工厂方法模式,抽象工厂模式 详解
1. 工厂模式1.1 定义简单工厂模式是由一个工厂对象根据收到的消息决定要创建哪一个类的对象实例。1.2 使用场景工厂类负责创建的对象比较少,客户只需要传入工厂类参数,对于如何创建对象(逻辑)不关心。简单工厂模式很容易违反高内聚低耦合的原则,因此一般只在很简单的情况下使用。1.3 例子public interface Shape { public void dra
2017-03-09 10:02:25
19877
2
原创 系统工程的生命周期
本文系统阐述了系统生命周期的七个关键阶段:探索性研究阶段(识别需求与创意)、概念阶段(细化需求与解决方案)、开发阶段(构建验证系统)、生产阶段(制造与检验)、使用阶段(系统运行)、保障阶段(持续维护)和退役阶段(系统退出)。每个阶段具有明确目的,需进行系统工程评估,且前期规划直接影响后期实施。该框架为组织提供了全生命周期管理的结构化方法,强调各阶段间的衔接与变更控制,确保系统从概念到退役的完整性和合规性。
2025-12-26 10:08:26
394
原创 UML 5种视图
摘要:系统开发中,不同角色关注不同视角,因此采用多视图描述系统。UML定义了5类视图:1)用例视图(核心)描述功能需求,包含用例图;2)逻辑视图展示系统内部结构和动态交互,含类图、状态图等;3)进程视图处理并发和同步,含状态图、构件图等;4)实现视图展示代码组织,含构件图;5)部署视图定义软硬件架构,含配置图。每个视图面向特定开发角色(客户、开发者、测试者等),共同构成完整的系统描述。(149字)
2025-12-25 13:52:07
206
原创 软考中级-软件设计师-回溯法N皇后问题实现
摘要:回溯法是一种优化暴力搜索的算法,通过"尝试-回退"机制探索所有可能解。以N皇后问题为例,需满足皇后互不攻击的三个约束条件:不同行、列及对角线。算法采用递归框架,用集合存储已占用的列和对角线以实现O(1)时间判断。核心步骤包括:记录当前皇后位置、筛选有效选择、达到终止条件时保存结果。通过剪枝策略(跳过无效列)显著提升效率,最终输出所有合法棋盘布局。该算法完美展示了回溯法在约束满足问题中的应用价值。
2025-12-22 13:55:56
314
原创 Git代码合并错误解决方法
在软件开发过程中,Git 作为常用的版本控制系统,极大地提高了团队协作效率。然而,在进行代码合并时,常常会遇到各种错误,影响开发进度。下面将针对几种常见的 Git 代码合并错误,详细介绍解决方法。
2025-04-20 14:53:13
718
原创 Vue 父子组件之间传值详解
父组件获取子组件的值有两种方式,第一种是使用ref;第二种是使用$emit事件。子组件获取父组件的值有两种方法,一种是使用props,一种是使用$emit和事件监听(父子通信)。
2025-02-10 10:45:32
1708
原创 爬楼梯问题代码
假设你正在爬楼梯,需要n阶才能到达楼顶,每次可以爬1或2个台阶,问有多少种不同的方法可以爬到楼顶。分析:到达n阶楼梯的方法数为到达n-1阶楼梯的方法数与到达n-2阶楼梯的方法数之和。假设 f(n) 表示到达n阶楼梯的方法数,则f(n) = f(n-1) + f(n-2),其中第一阶有一种方法,f(1)=1,第二阶有两种方法,f(2)=2。
2024-11-01 18:24:54
216
1
原创 用户登录错误次数太多锁定账号
每次用户登录时,通过 rangeByScore 查询对应的限制时间范围内错误的的次数,如果次数超过阈值,则限制登录。key可以设置为用户名,value可以设置为UUID,score设置为当前时间戳。当用户登录验证码错误次数太多时,需要限制用户在10分钟之内不能再次登录。1.通过Redis ZSet。
2024-06-25 13:35:45
1190
原创 Centos安装RocketMQ
4.修改broker.conf文件。修改runserver.sh脚本。修改runbroker.sh脚本。创建RocketMQ的配置目录。1.下载RocketMQ。5.启动 namesrv。根据自己机器配置修改。根据自己机器配置修改。6.启动 broker。
2024-03-13 13:38:35
437
原创 OAuth 2.0 详解
1.定义OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。2.名词说明Third-party application:第三方应用程序,本文中又称"客户端"(client)。 HTTP service:HTTP服务提供商,本文中简称"服务提供商"。 Resource Ow
2020-06-14 15:51:44
518
转载 怎样回答离职原因
HR问你上一份工作是因为什么离职的,你怎么回答?这是大家都非常在意的一个问题,无论是面试官还是求职者。因为对面试官来说,这意味着能不能给出Offer的问题,而对求职者而言,这意味着能不能顺利拿到Offer的问题。那么我们到底该如何回答这个问题呢?来看大家的答案!在回答这个问题前,我们先看几个代表性的求职者离职的真正原因:离职原因一:老板的问题(不重视设计/没素质没审美/没诚信)@魏琴:老板很奇葩,...
2018-04-16 15:07:45
123049
3
原创 无序(未排序)数组二分查找
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。但是对于无序数组,我们可以先排序在二分,但还有一种技巧就是结合快排的思想,即每次选择一个关键字,先将比他大的数放在其右边,比他小的数放在其左边,然后比较他和要查找的数的关系,并选择下次迭代的区间。public class BinarySearc...
2018-04-08 18:28:39
7561
3
原创 软件架构读书笔记
软件架构序要学会去看,然后忘掉要学会去听,然后忘掉要学会去做,然后忘掉要学会超越,我们自己不知不觉地设定了事物之间的界限,并把这些界限、层次与逻辑井然的东西称为“系统”。
2017-09-24 09:05:47
560
原创 Java知识点总结
Java知识点总结JVM概述JVM是什么JREJDKJVM是什么关系JVM的生命周期JVM运行原理JVM体系结构JVM相关程序计数器虚拟机栈本地方法栈堆方法区总结直接内存堆与栈的对比内存溢出和内存泄漏内存分配过程对象访问类的加载机制ClassLoader类的加载过程加载链接初始化JVM垃圾回收机制范围要回收哪些区域前提如何判断对象已死引用计数算
2017-05-12 16:34:51
967
转载 十大编程算法助程序员走上高手之路
算法一:快速排序算法快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(
2017-04-26 22:06:44
639
转载 Git由浅入深之分支管理
几乎所有的版本控制系统都以分支的方式进行操作,分支是独立于项目主线的一条支线,我们可以在不影响主线代码的情况下,在分支下进行工作。对于传统的一些版本控制工具来说,我们通常需要花费比较多的时间拷贝主线代码,创建一个分支,并且对分支的管理效率也越来越不令人满意,而如今备受推崇的Git确实名副其实,Git中的分支非常轻量,我们可以随时随意创建任意数量的新分支,几乎感觉不到什么延时,而且对分支的操作也很高
2017-04-11 20:51:28
532
转载 maven详解
什么是Maven?如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。以往开发项目时,程序员往往需要花较多的精力在引用Jar包搭建项目环境上,而这一项工作尤为艰难,少一个
2017-03-30 10:08:46
536
转载 MySQL索引背后的数据结构及算法原理
摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主要内容分为三个部分
2017-03-16 09:25:02
843
原创 单例模式
1. 描述保证一个类只有一个对象实例,并提供一个访问它的全局访问点。2.使用场景当你想要控制实例数目,节省系统资源的时候,比如产生序列号,计数器。3.优点在内存里只有一个实例,减少了内存的开销4.例子4.1 懒汉式,线程不安全这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。
2017-03-09 16:31:50
484
转载 HttpClient post 请求实例
所需jar包:commons-codec-1.3.jarcommons-httpclient-3.0.jarcommons-logging-1.1.1.jar[java] view plain copy /** * */ package httpClient; import java.
2017-03-07 14:14:47
744
转载 B树、B-树、B+树、B*树【转】,mysql索引
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,
2017-03-03 09:00:37
373
转载 java分布式简单实现
案例:文章推荐论坛进入文章页面后,显示一个推荐列表:看过这篇文章的人还看过哪些文章,包含列为文章article、点击数count。可能有很好很简单的解决办法,但是到最后再讲。传统的方法是:建一张表,字段有article和user。每点击一次,增加一条记录。一个大论坛几天之内记录数就能达到千万条。而没有必要建索引,其他优化的办法,我还想不到,这样的查询别提多慢了。传统数据库解决不了,
2017-03-01 16:52:36
24106
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅