01背包问题 需要注意的问题: 对于01背包问题:每一件物品,要么不放要么只放一次 对于dp二维数组,第一维应该是物品数量,第二维才是体积或者重量 对于物品数量,遍历应该从1开始,并且dp【i】【w】 = Math.max(dp【i-1】【w】, dp【i-1】【w-vw【i】【0】】 + vw【i】【1】),解释:dp【i】【w】,代表背包容量为w时,物品陈列为0~i-1这...
JVM基础知识
概述 JVM基础知识包含下面的内容: 常见的编程语言类型 关于跨平台、运行时(Runtime)与虚拟机(VM) 关于内存管理和垃圾回收(GC) 编程语言分类 机器语言:机器语言是直接给机器执行的二进制指令,每种 CPU 平台都有对应的机器语言。 汇编语言:相当于是给机器执行的指令,按照人可以理解的助记符表示,这样代码就非常长,但是性能也很好。 高级语言:是为...
常用性能指标
JVM调优的目的 其实“调优”是一个诊断和处理手段,我们最终的目标是让系统的处理能力,也就是“性能”达到最优化 如何进行JVM调优 大致过程如下: 量化性能相关指标,然后对系统问题进行排查 排查出问题,如:系统延迟和抖动增加,偶尔宕机,这说明JVM配置不合理 针对问题对症下药,如:针对配置不合理的问题,我们需要对JVM配置进行调整,如果问题比较严重是否进行系统重构和调整,同...
JVM环境
JDK、JRE和JVM的关系 JDK(Java Development kit)即Java开发工具包,包含了JRE、解释器(java)、编译器(javac)、Java归档(jar)、文档生成器(javadoc)等工具,简单来说如果我们要开发Java程序,就需要某个版本的JDK。 JRE(Java Runtime Environment)即Java运行时环境,提供Java应用程序执行...
shiro总结
shiro定义 shiro提供了认证(登录校验)、授权(用户权限)、加密、会话管理、与Web集成、缓存等功能 shiro简介 基本功能 Authentication:身份认证 / 登录,验证用户是不是拥有相应的身份; Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度...
Redis是如何执行的
一条Redis命令是如何执行的 我们从客户端输入一条命令到服务端执行这条命令究竟发生了什么,今天就来探讨这个问题 转换命令为Redis协议 客户端并不会把我们输入的命令直接发送给服务端,任何客户端服务端之间的通信都遵循某种协议,这种协议方便服务端对命令进行解析,例如判断命令拼写是否错误 Redis客户端会将命令转换为RESP格式,RESP(REdis Serialization Prot...
为何说只有一种实现线程的方法
进程是什么,线程是什么 进程是运行在内存中的程序,线程是进程中程序执行的基本单元 为什么有了进程,还要引入线程呢? 进程的上下文切换成本过高,为了降低并发导致的进程切换成本,提出了线程,线程几乎不占资源,因此线程切换的成本较少,后来就换用线程抢占cpu执行权 线程的创建方式 继承Thread类 public class ThreadDemo1 extends Thread { ...
二叉树
二叉树节点结构 递归序 什么是递归序 递归序是二叉树递归遍历的一种套路 按照递归序,每个节点会经过3次,第一次是初次进入节点,第二次是左树返回节点,第三次是右树返回节点 例如,存在下面的树: 那么按照头节点、左树、有树的遍历顺序,一定有这样的递归序: 1 2 3 3 3 2 4 4 4 2 1 5 6 6 6 5 7 7 7 5 1,根据递归序,我们可以轻松得到前序遍...
链表
hash表 简单介绍 hash表可以理解为一种集合结构,在java中对应的数据结构是:HashSet和HashMap 有无伴随数据是HashSet和HashMap的唯一区别,底层都是按照key依照某种实现组织的 CURD操作都是O(1)级别的,但相比于数据寻址的O(1)要大的多,也就是说常数更大 HashMap的key和value都不能是基本数据类型,如果是基本数据类型...
在Spring和SpringBoot中优雅的进行参数校验
前言 数据的校验的重要性就不用说了,即使在前端对数据进行校验的情况下,我们还是要对传入后端的数据再进行一遍校验,避免用户绕过浏览器直接通过一些 HTTP 工具直接向后端请求一些违法数据。 最普通的做法就像下面这样。我们通过 if/else 语句对请求的每一个参数一一校验。 @RestController @RequestMapping("/api/person") public clas...