- 博客(70)
- 资源 (2)
- 收藏
- 关注
原创 DDD设计学习
总体来说,MVC架构设计的技术逻辑非常清晰,controller就是负责交互的,model就是负责业务处理诸如此类;将数据库的操作做隔离,定义接口,并定义实现类用于实现有关数据库的操作,而用户调用只需要调用api,不用管代码中的具体内容(这样如果有业务更改,如换框架操作数据库,只需要修改实现类的具体代码,而不用修改其他地方的代码,做到了隔离)。随着业务需求的不断改变,需要在原有项目代码中不断进行修改,导致代码不断累积。可见代码如下所示,调用了第三方的服务,造成了代码的不稳定性(风控)
2024-02-29 15:26:26
318
原创 JVM调优实战
如果大小设置成不一样,那么堆内存大小会根据实际需要进行动态的扩张或者是缩小,而这一个过程是耗费一定资源的,影响了程序的执行效率。或者是使用命令:jstack 进程ID | more 可以看到进程中各线程的详细信息,如线程状态,线程调用了哪些方法;5、知道哪个进程有问题,则执行 top -HP 进程id号 命令,可以看到指定进程内,线程占用CPU的情况。2、执行jinfo 进程id号 ,可以获取进程的详细信息,可以看到堆内存设置的大小等。当项目运行一段时间以后,产生了OOM的问题,我们该如何排查问题呢?
2023-05-26 16:18:45
1163
原创 Kafka
消费者组:由多个consumer组成。形成一个消费者组的条件,是所有消费者的groupid相同1、消费者组内每个消费者消费不同分区的数据,一个分区只能由一个组内消费者消费2、消费者组之间互不影响。所有消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。3、如果向消费者组中添加更多的消费者,超过主题分区数量,则有一部分消费者就会闲置,不会接收任何消息。
2023-04-19 14:23:01
302
1
原创 Spring理论学习
是一种设计思想,而不是一个具体的技术实现。IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。不过, IoC 并非 Spring 特有,在其他语言中也有应用。将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IoC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。
2023-04-12 13:04:33
478
原创 牛客过第二遍
通过TransactionTemplate管理事务,并通过它执行数据库的操作。2、通过注解,声明某方法的事务特征,注解@Transactional。假如在A方法中,调用了B方法,而B方法是事务操作,则A为B的外部事务。isolation :隔离级别;propagation :传播机制。@Transactional 注解参数讲解。1 通过XML配置,声明某方法的事务特征。传播机制比较难理解,这里粗略说一下。Spring事务管理。
2023-04-10 12:14:31
487
原创 JUC部分需要深究的知识点
这种方式需要定义一个类,实现Callable接口,并实现call()方法,然后创建该类的对象,并作为参数传递给FutureTask类的构造器,创建FutureTask对象,并作为参数传递给Thread类的构造器,创建Thread对象,并调用start()方法启动线程。通过使用线程池创建线程。这种方式需要定义一个类,实现Runnable接口,并实现run()方法,然后创建该类的对象,并作为参数传递给Thread类的构造器,创建Thread对象,并调用start()方法启动线程。
2023-04-08 14:11:43
312
原创 Redis进阶
什么是持久化?利用存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化。为什么要持久化数据的意外,确保数据持久化过程保存什么。
2023-04-05 22:43:13
124
原创 计算机网络
缓存处理:HTTP1.中缓存处理能力较弱,只能使用header中的If-Modified-Since来判断文件是否被修改过,而HTTP1.1则引入了更多的缓存控制策略,如Cache-Control和ETag等,能更好地支持缓存机制。(请求消息和响应消息都可使用),它支持一个可扩展的指令子集:例如max-age指令支持相对时间戳;private和no-store指令禁止对象被缓存;no-transform阻止Proxy进行任何改变响应的行为。,它的值entity tag可以用来唯一的描述一个资源。
2023-03-30 13:22:28
1134
原创 JAVA基础回顾
在同一个类中,方法名相同,参数不同的方法。与返回值无关。参数不同:个数不同、类型不同、顺序不同(符合其一则是重载)如果参数相同,则不构成重载关系如不在同一个类中,则不构成重载关系。
2023-03-24 09:48:08
420
原创 并查集的学习
在数组中寻找,根据下标找到对应的元素,该元素如若不等于下标,则为该下标的父节点。当下标值等于对应下标元素的值,便是找到所要查找元素分组的标识符,思路图如下所示。并查集的路径压缩优化(以上方法可能会生成线性树,使得查找的最大时间复杂度为On),为了降低查找的时间复杂度,提高find的效率,我们可以在合并的时候,将小树合并到大树中,最大程度降低树的深度。3、一个组中的数据对应的树和另外一个组中的数据对应的树之间没有任何联系。4、元素在树中没有子父级关系的硬性要求。1、查询元素p和元素q是否属于同一组。
2022-12-02 17:06:14
459
原创 基础算法研究分析
先在一个高温状态下,逐渐退火,在每个温度下慢慢冷却,最终达到物理基态(相当于算法找到最优解)退火过程由一组初始参数,即冷却进度表控制,即冷却进度表控制。模拟退火算法属于贪心算法,在其过程中引入随机因素,以一定概率接收一个比当前解要差的解(避免进入局部最优的情况)在解空间中随机寻找目标函数的全局最优解。即在局部最优解的空间内能概率性地跳出并趋于全局最优。模拟退火在某一初温下,伴随温度的不断下降,结合。马尔可夫链的长度Lk:任意温度的迭代次数。2、控制温度T的衰减函数(温度的更新)1、控制温度参数的初值T0。
2022-11-22 20:22:24
476
原创 经典排序算法JAVA实现
进行交换,然后,在剩余未排序元素中继续找出最小元素,将其与已排序数列的末尾位置元素交换。以此类推,直至所有元素均排序完毕.复杂度为n2,复杂度还是相当高的。快速排序的时间复杂度在最坏情况下是O(N2),平均的时间复杂度是O(N*lgN)。选择排序即是采用交换次数最少的方针进行排序,选择排序的交换次数要远远少于冒泡排序。选择排序算法是不稳定的,值相同的元素的相对位置可能会发生改变,这一点需要特别注意。逐层排序二叉树所需的最少操作数目用到了选择排序算法。首先在未排序数列中找到。
2022-11-20 14:26:52
318
转载 指令重排序的原理
这就存在一个问题,CPU的运算速度要远快于对内存的操作,将工作内存数据写入主内存即物理内存时,如果两个CPU同时需要写入同一块内存区域,这就需要一个CPU等待另一个CPU写入完成后再写,这就造成了CPU的浪费,而这种情况在单核CPU是不存在的,所以需要指令重排序。在并发程序中,程序员会特别关注不同进程或线程之间的数据同步,特别是多个线程同时修改同一变量时,必须采取可靠的同步或其它措施保障数据被正确地修改,这里的一条重要原则是:不要假设指令执行的顺序,你无法预知不同线程之间的指令会以何种顺序执行。
2022-09-28 15:53:55
581
原创 JVM基础学习
1、方法区JDK8以前,用永久代实现方法区,即选择把收集器的分代设计扩展至方法区,使得HOTSpot的垃圾收集器能够像管理JAVA堆一样管理这部分内存,省去专门为方法区编写内存够管理代码的工作,即将方法区放在虚拟机中,由JVM来统一管理,弊端便是容易内存溢出。JDK8后,废弃永久代概念,用本地内存(非常大,不容易溢出)管理进程和元空间(存放常量池、静态变量等),字符串常量池移至JAVA堆中。所以限制方法区的容量对其毫无影响。二进制字节码的组成:类的基本信息、常量池、类的方法定义(包含了虚拟机指令)
2022-09-23 16:05:18
355
原创 动态规划(01背包,完全背包的应用)
有约束条件,背包的元素不可以重复使用,值唯一,是01背包问题,可写成如下代码正序遍历物品元素,倒序遍历背包(约束条件)
2022-08-11 18:40:30
309
原创 环形链表检验入口
判断链表中有无环,利用快慢指针即可,但如果说判断这个环的入口在哪里,这就属于稍微的进阶版本了。第一想法是直接使用set去重,用set存储走过的节点,如果返回了原路径,则那个路径节点则为入口。时间空间复杂度并不理想,因为用到了set/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { *
2022-05-23 12:48:32
195
原创 MYSQL复习总结
DDL(数据定义语言)数据定义语言数据库操作查询所有数据库:SHOW DATABASES;查询当前数据库:SELECT DATABASE();创建数据库:CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [COLLATE 排序规则 ];删除数据库:DROP DATABASE [ IF EXISTS ] 数据库名;使用数据库:USE 数据库名;表操作查询当前数据库所有表:SHOW TABLES
2022-05-15 15:27:33
657
原创 链表类型利用Set去重
//数组去重测试 List<Integer>list1=new ArrayList<>(); list1.add(1); list1.add(2); Set<List<Integer>>set=new HashSet<>(); set.add(new ArrayList<>(list1)); List<Integer>list=new Ar.
2022-05-11 22:16:26
134
原创 Docker部署RabbitMQ踩坑
照网上正常部署以后,能够正常登陆,但是页面显示不全,非常痛苦没有正常显示折线图之类的,显示不全Stats in management UI are disabled on this node解决方法#进入rabbitmq容器docker exec -it {rabbitmq容器名称或者id} /bin/bash#进入容器后,cd到以下路径cd /etc/rabbitmq/conf.d/#修改 management_agent.disable_metrics_collecto
2022-05-03 22:48:12
2676
原创 Rabbitmq学习
1.轮询操作工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。 相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进 程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。1.1轮训分发消息设置代码如下所示创造消息队列,并且发送消息public class Task01 { public static final String QUEUE_NAME = "hello"; .
2022-05-03 20:46:01
1241
原创 搭建个人博客所遇到的坑 汇总
后端仔们还在为做项目要学前端而发愁吗!最近找到一个宝藏项目,b站地址是https://b23.tv/c6a1zMC这个项目前后端是分离的,并且提供了完整的前端工程,避免后端新手在学习中学习前端的冗余工作,只需要学习后端,做好相应的接口即可。这个项目的前置知识是springboot mybatis mybatis-plus 最好会一些redis 和docker期间在跟着视频做项目时遇到一些坑,在此记录一下1.在springboot的数据库配置文件中,记得改自己的用户名和密码即acc
2022-04-29 15:07:40
373
原创 个人博客的技术要点
1.redis这个项目用数据库存储用户的注册,登录数据,确保用户可以登录,和成功注册。用redis短期存储用户的在线状态,保持用户的在线状态。即在用户登录期间(redis信息不过期)情况下,可以得到用户的状态信息。只要用户登录,或者注册成功,它们的信息就会通过JWT加密后放到redis中2.jwt一种加密技术,目前也不太清楚,这是JWT工具类,对用户信息进行加密,这样从redis获取的信息便是加密过的用户信息。public class JWTUtils { pri..
2022-04-24 23:32:06
1447
原创 A*算法简介
A*算法相比其他算法来说,特点是具有方向性!如何具有方向性呢,这就有关它的代价函数了,它的代价函数分为当前代价和预估代价当前代价 即起点到当前格子已经走了多少步预估代价:表示从当前方块到目的地方块大概需要走多少步,并不是精确的数值,一般用于参考指导算法去优先搜索更有希望的路径。最常用到的预估代价有欧几里德距离,即两点之间的直线距离,还有便是最简单的曼哈顿距离,也就是两点在水平方向上的总和。在当前位置,将当前代价和预估代价相加,所得代价最低的即位下一步的最优解。普通
2022-04-24 23:23:59
1198
原创 Java中的split函数的用法
split 具体用法,可以根据字符串进行划分,之前一直以为只能根据单个字符划分测试样例String s="dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext";我以"\n"来划分字符串,得到的效果如下所示,非常有用具体用法Java中的split函数的用法_shenzhenNBA的博客-CSDN博客_java split函数还有.lastIndexOf()函数,参数也可以是字符串,记录参数最后一次出现的位置也要注意符号,这个符号好像是.
2022-04-20 12:37:41
589
原创 redis 理论+redis集群配置+redis加入节点
事务冲突问题多线程环境下,容易发生事务冲突,例子,比如同时五个人找我借钱,我的钱并不能借五个人,但足够借给其中任何一个人。如果不设置锁,我将把钱都借出去,并且负债。为了不负债,设置锁,避免事务冲突。1.悲观锁:直接上锁 如果符合条件,开锁,一个事务结束后得到结果后,又马上上锁。缺点是效率很低,每次都得上锁。直接例子。张三李四王五分别找我借钱,我把钱揣兜里,我先看自己的钱够不够借张三,如果可以,给他,再数一遍钱,看看够不够借李四。2.乐观锁:在进行一次事务操作后,数据库更新,会生成一个新版
2022-04-18 22:02:53
1299
原创 配置Redis踩坑合集
之前我已在docker中配置好Redis,学习了一些redis的基本操作redis是map的形式存储键值,相比于mysql来说,消耗内存更小,更加轻量级。1.配置文件redis.conf出错。这个文件我在上一篇文章里面附上了。2.配置初始密码,也写在原来的配置文件中了3.JAVA结合redis,这里如果redis配置过密码的话,在建立jedis对象后,需要添加代码jedis.auth("123456");jedis所需要的依赖如下 <dependency>
2022-04-17 19:48:50
840
原创 Docker安装+基本操作+配置阿里云镜像仓库,以及Docker下mysql,tomcat,redis安装 包括redis.conf文件
1.帮助启动类命令2.镜像命令3.容器命令4.配置阿里云镜像仓库1.登陆阿里云镜像仓库2.往阿里云镜像仓库推送本地镜像,有教程,最后只用改一个版本号即可,版本最好不要重复。3.从阿里云镜像仓库拉取镜像,同上,非常简单1.帮助启动类命令启动:systemctl start docker停止:systemctl stop docker重启docker systemctl restart docker查看docker状态 systemctl status docker开.
2022-04-14 15:55:41
5433
原创 ClassFinal对项目进行加密处理
老板要求内部算法模型加密,找了XJAR方法和proguard方法,XJAR很傻瓜,我调用不了里面的API,proguard软件需要配置的东西太多,也没有清晰的教程,因此选择了ClassFinal方法。此种方法相比于proguard,采用maven仓库导入相应的依赖,再打包便可生成加密的jar包目录1.进行pom.xml配置,导入相应的依赖2.配置完pom.xml后,便可打包生成加密文件3.配置javaagent4.测试项目能否成功运行1.进行pom.xml配置,导入相应的依赖.
2022-04-12 15:03:20
4080
6
原创 数据结构(图)
1.1无向图术语介绍:相邻顶点:当两个顶点通过一条边相连时,即此两顶点为相邻顶点度: 一个顶点有多少条边子图:一幅图所有边的子集组成的图路径:边+顶点(连续的)环:起点与终点一致的路径连通图:图中任意一个顶点都存在一条路径能够到达另一个顶点,那么这幅图叫做连通图连通子图:顾名思义1.2 图的存储结构图的核心两个点就是 顶点与边常见的图的存储结构有邻接矩阵和邻接表1.2.1 邻接矩阵使用一个V*V的二维数组int[V][V] adj,把索引的值看做是顶点,如
2022-04-09 21:19:03
796
原创 Git的基本操作
添加文件从工作区到暂存区,采用 git add +(文件名),git status 查看修改的状态(暂存区,工作区) 添加所有文件到暂存区 git add .将暂存区文件放入仓库 git commit -m "文件代号"git commit -m "文件代号"查看操作的历史记录 git logclear以后也可查找历史记录 git reflog git log编辑仓库文件 vi (文件名) 进入后修改内容 再按ESC键 再写 :wq 回车,修改文...
2022-04-05 22:12:48
741
原创 树状数组原理及操作
lowbit 操作原理如下所示,lowbit即取非负整数n在二进制表示下最低位1及其后面的0构成的数值树状数组是动态维护前缀和的工具,可以有效进行单点查询(ask),以及修改和区间查询(add)摘自宫水三叶总结的树状数组模板tree[i]保存以x为根的子树中节点值的和,i<=n树状数组如下图所示将每个节点转换成二进制后,我们会发现每一层的末尾的零的个数是相同的,而且末尾零的个数与其覆盖的长度有关,并且t[i]节点的父节点为t[i+lowbit(i)](在...
2022-04-04 17:39:24
302
原创 TreeSet及优先队列的操作
这一题,用普通方法会暴力超时,所以采用优先队列及TreeSet进行排序,减少复杂度,在此记录一下优先队列,treeset的一些使用技巧答案如下class Solution { public List<Integer> busiestServers(int k, int[] arrival, int[] load) { //统计处理任务数 int[] cnts = new int[k]; Arrays.fill(cnt..
2022-04-02 13:53:18
599
原创 VUE基础操作
哎前端框架也是要会一点,不然没法做项目axios传参与地址,与后端方法呼应axios.get与控制层的GetMapping(value=地址)映射key为后端方法的参数axios.post与控制层PostMapping映射,同上,格式稍有出入springboot的RESTFUL与前端有一一对应的写法,详情见以下代码control层package com.itheima.controller;import com.baomidou.mybatisplus.core.m
2022-03-23 22:03:34
785
原创 SpringBoot学习出现的问题
1.java.lang.IllegalStateException: Failed to load property source from 'file:/D:/BaiduNetdiskDownload/%e4%bb%a3%e7%a0%81/%e4%bb%a3%e7%a0%81/Spring_boot/demo_10/target/classes/application.yml' (classpath:/application.yml)无法成功加载yml配置文件,解决方法删去文件中的中文注释即可
2022-03-15 20:49:55
1172
原创 做MyBatis遇到的BUG以及配置要点
解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题_大吉的博客-CSDN博客resourse目录下,目录分级不能用“.”号分隔,而是要用“/”隔开,不然就会报以上的错误mapper包下的接口文件与对应的xml配置文件包名最好相同,不然也会报错如EmpMapper.xml与EmpMapper接口文件的包路径最好是一样的(即目录包名相同)注意接口配置文件XML的n.
2022-03-07 21:21:53
495
个人博客项目的纯后端,不包括后台管理
2022-04-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人