自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 netty实战入门——安全保证

netty实战入门——安全保证

2022-12-25 20:44:26 320 1

原创 (四)设计模式——代理,职责链,命令模式

描述:为其它对象提供一种代理以控制(隔离,使用接口)对这个对象的访问场景: java代码如下:上面代码中使用了静态代理,增加了代理类来对类的功能进行增强,同时保证对调用者的视图不发生改变。此外还有动态代理,使用过Spring的同学想必都不会陌生。相比静态代理,动态代理通过动态生成类文件,使得代理类的功能更加灵活,同时避免了项目代码的膨胀。 描述:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求直到有一个对象处理它为止。场景:java代码:

2022-06-15 00:57:52 572

原创 (三)设计模式——单例模式

描述:一个类只有一个实例,并且为它提供一个全局访问点场景:java代码为保证对象的全局唯一,我们只需要把该对象属性设置为static即可。这样该对象会在第一次访问时被创建(lazy模式)需要强调的是,一定要显示把类的构造访问声明为private,否则类会自动生成修饰符public的构造方法,这样外部调用者就可以通过new创建多个对象。.........

2022-06-12 16:20:29 1514

原创 (二)设计模式——构建器,原型模式

描述:将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)。builder 模式主要用于“分步骤构建一个复杂的对象”。在这其中 “分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。场景: java代码 看完了代码,那么如何理解”相同的构建过程(稳定)可以创建不同的表示(变化)“呢?在抽象的Builder类中指定了构造对象的各个步骤,而在Controller类中指定步骤执行顺序,后面也不会再做改变(稳定)。而每个步骤的具体实现则可由具体实现类来决定(变换)。

2022-06-12 00:13:11 535

原创 (一)设计模式——简单工厂,工厂方法和抽象工厂

创建型模式将对象的部分创建工作延迟到子 类或者其他对象,从而应对需求变化为对象创建时具体类型实现引来的冲击。下面将结合java代码进行对简单工厂,工厂方法和抽象工厂3种设计模型进行分析 描述:通过传入参数控制对象的生成场景: 具体代码如下可以发现,在Factory中,生成对象是通过传入的参数定死的,日后如果有新的实现类,就需要修改原代码。这无疑违背了开发封闭原则——对扩展开发,对更改封闭。 描述:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method使得一个类的实例

2022-06-11 22:53:18 862 1

原创 docker-compose实现容器编排

介绍compose也是docker官方的一个开源项目, (https://github.com/docker/compose),通过配置YMAL文件,可以实现对同一宿主机上的的多个容器进行统一管理Docker-Compose的概念有:工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含

2022-05-12 11:32:33 475 1

原创 docker入门之基础命令

安装更新yum到最新版本yum update下载依赖,yum-util 提供yum-config-manage功能,另外则是device-mapper驱动依赖yum install -y yum-utils device-mapper-persistent-data lvm2下载docker社区版yum install -y docker-ce最后启动dockersystemctl start docke 常规命令想要创建容器,需要先拥有容器的镜像,关于镜像有以下

2022-05-05 20:53:54 1005

原创 MySQL分片实战

水平分表分片即水平切分,可以将一张大表切分成多个子表部署到不同机器上从而进行拓展。当在配置MySQL读写分离需要先进行主从配置,而如果要进行分片操作则需要将主从取消。如果不取消,主数据库的操作会同步到从数据库,到不到分片的效果。这里同样使用mycat进行水平分表,下面开始分片实战演示在mycat安装目录./mycat/conf编辑scheme.xml文件(下附注释<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema

2022-05-04 21:50:13 1434

原创 Redis实战之集群与哨兵

安装首先安装gcc用于后面编译redis源码(已安装可跳过yum install gcc依次执行以下语句完成安装cd /user/localmkdir reidswget http://download.redis.io/releases/redis-5.0.5.tar.gztar -zxf redis-5.0.5.tar.gz 持久化众所周知,redis是的数据是存放在内存中,在宕机时数据将会全部丢失,那么我们可以通过RDB和AOF机制将操作保存在磁盘上。&nbsp

2022-04-30 16:45:11 782

原创 MySQL配置读写分离

前置环境事先准备3台虚拟机,其配置如下主数据库(master)ip:192.168.126.151,装有Percona5.6.51从数据库(slave)ip:192.168.126.152,装有Percona5.6.51mycat服务(mycat):192.168.126.153,装有 mycat另外,以上3台服务器均需配置jdk(1.8) 配置主从mastermaster服务器上,使用vim /etc/my.cnf打开mysql配置文件,加入server-id=1l

2022-04-26 21:34:27 2891

原创 2022.3.19美团笔试

2个小时5道编程题,只做出了3道,感觉人无了第一题大意是有n个物品,可以按满减和折扣的方式购买,求前k个物品最划算的购买方式。直接模拟即可,细节没注意浪费了好久。#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<LL, LL> PII;LL p1[50010], p2[50010];vector<PII> rule;LL t[50010];L

2022-03-19 12:19:47 878 3

原创 在pom.xml中导入maven依赖时idea报Low memory

今天导入maven依赖时突然发现maven坐标的智能提示没了,并且idea给出了Low memory报错Low memoryThe IDE is running low on memory and this might affect performance. Please consider increasing available heap.开始以为是内存不够了,于是把MaxHeapSize改到了4G,然而并没有用。最后折腾半天,发现在更新本地maven仓库后问题得到解决。至于为什么报low

2022-02-20 21:41:24 551 1

原创 git常用命令汇总

简介git是一个分布式版本控制工具,与之相对的是集中式版本控制系统(如SVN),集中式版本控制系统把版本库集中放在中央服务器。开发人员工作的时候,首先要从中央服务器下载最新的版本到本地,开发完后,再把代码上传到中央服务器。而git则在本地和远程都有着仓库,即本地仓库和远程仓库。当然在本地,除了有本地仓库,还有工作区与暂存区。工作区的概念好理解,对应包含着.git文件夹的目录,就是你当前修改项目的地方。那么暂存区又是什么呢?暂存区对应着.git/index文件,可以将其理解为buffer。我们有时

2022-02-15 17:03:19 261

原创 单调栈与单调队列

单调栈单调栈,顾名思义,就是存在栈的中数据符合某种单调性。常见的应用模型是求数组中某元素左边/右边第1个比其大/小的数。#include <iostream>#include <vector>#include <algorithm>using namespace std;const int N = 3000010;int st[N];int a[N];int tt; // 定义栈首指针vector<int> ans;int ma

2022-02-09 11:05:48 622

原创 java web之Filter

Filterfilter使用户可以改变一个request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在response离开servlet时处理response.换种说法,filter其实是一个“servlet chaining“(servlet 链).通俗来说,在用户发送请求访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。为了创建自己的拦截器,需要

2022-01-18 21:55:00 422

原创 JavaWeb中的cookie和session

会话技术 Cookie百度百科上的定义:Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息 原理:当浏览器首次访问服务器时,服务器会返回一个名字为set-cookie的响应头,其值为形如key=value的字符串,即set-cookie:key=value, 浏览器会将该键值对保留到缓存中;当浏览器再次访问服务器时

2021-12-26 21:17:53 284

原创 JavaWeb之JSP

JSP JSP是一个特殊的页面,其中既可以定义html标签,又可以定义java代码,其本质上是servlet。 JSP中书写代码,有以下3种标签:<% 代码 %>:在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。<%= 代码 %>:代码会直接输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。<%! 代码 %>:在该标签内定义的java代码的变量是jsp转换为servlet类的成员变量。

2021-12-26 21:13:02 294

原创 JavaWeb之Servlet

ServletServlet是Java编写的服务器端程序,可以交互式地浏览和生成数据,生成动态Web内容。一般来说,Servlet是指任何实现了这个Servlet接口的类。 Servlet可在web.xml中配置 <servlet> <servlet-name>demo1</servlet-name> <servlet-class>com.jundeng.ServletTest</servlet-class>

2021-12-26 21:07:18 212

原创 Spring注解开发

Spring注解开发  配置文件在spring4之后,使用注解开发必须导入aop包<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://ww

2021-12-09 00:23:20 177

原创 Spring IOC基础用法

Spring IOC 导入jar包在maven中声明spring注解所依赖的jar包 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version&gt

2021-12-09 00:19:30 103

原创 IDEA MyBatis 报错:Could not find resource com/xxx/xxxMapper.xml

在学习MyBatis时候,遇到一个小错误,花了不少时间,特别记录一下org.apache.ibatis.exceptions.PersistenceException:### Error building SqlSession.### The error may exist in com.samarua.mapper.UserMapper.xml### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mappe

2021-12-07 15:20:02 960

原创 23种设计模式笔记整理

设计模式创建型模式将对象的部分创建工作延迟到子 类或者其他对象,从而应对需求变化为对象创建时具体类型实现引来的冲击。 工厂方法(factory method)定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method使得一个类的实例化延迟(目的:解耦, 手段:虚函数)到子类。 抽象工厂(abstract factory)提供一个接口,让该接口负责创建一系列“相关或者相互依 赖的对象”,无需指定它们具体的类。如果没有应对“多系列对象构建”的

2021-11-18 14:21:23 342

原创 树状数组模板

概述对于一个数组,当采用暴力做法时,修改其中某个元素的时间复杂度为O(1), 区间查询的时间复杂度为O(n), 当数据庞大且进行多次查询操作时,这是不可接受的。为此,可以使用一种叫树状数组的数据结构,使得单点修改和区间查询的时间复杂度均为O(logn). 思路对于某段区间和,我们可以先求区间两端的前缀和,然后用区间两端相减即可。于是问题就转化为了如何快速求出某个区间的前缀和,而树状数组就是把一些区间的和通过树组织起来。如下图:其中a表示原始数组,c表示树状数组,c[i]的意思表示以a[

2021-09-19 16:04:23 105

原创 线段树模板

概述当需要对一个区间进行查询与修改时,常规的操作的时间复杂度为O(n),其中n为区间长度。通过采用线段树这一数据结构,我们可以将时间复制度降低为O(nlogn)以下是示意图:对于每个区间,我们用一个节点进行维护,我们可以继续向下划分得到子区间做为该节点的孩子节点,直到无法再向下划分。这样每个区间的信息都可以从其子区间获取,而对于区间的修改,这需要对每个包含了该区间的节点进行修改。ps:在为节点数组开空间时要开4n空间(n为区间长度),这是因为虽然最后一层有n个节点满二叉树只有2n-1个节点,但由

2021-08-23 23:54:11 100

原创 2019蓝桥杯B组决赛题解

A1、2019<X<Y2、2019^2, X^2, Y^2构成等差数列满足条件的X和Y可能有多种情况,请给出X+Y的值,并且令X+Y尽可能的小。题解:暴力枚举判断下第三个数是否能分解为k*k即可。 B2019可以被分解成若干个两两不同的素数,请问不同的分解方案有多少种?注意:分解方案不考虑顺序,如2+2017=2019和2017+2=2019属于同一种方案。题解:素数筛筛2-2019中素数,再用01背包。#include <iostream>#incl

2021-05-25 20:06:39 136

原创 数论——矩阵

矩阵乘法两矩阵相乘,左矩阵列数必须等于右矩阵行数struct matrix { int n, m; // 行, 列 int c[N][N];};matrix mul(matrix a, matrix b){ matrix res; res.n = a.n; res.m = b.m memeset(res, 0, sizeof res); for(int i = 0; i < n; i++) // a的行数

2021-05-23 21:26:15 153

原创 面向对象设计原则

依赖倒置原则DIP高层模块(稳定)不应该依赖于底层模块(变化),二者都应该依赖于抽象(稳定)抽象(稳定)不应该依赖于实现细节(变化),实现细节应该依赖于抽象(稳定)。开发封闭原则OCP对扩展开发,对更改封闭类模式应该是可扩展的,但是不可修改的单一职责原则SRP一个类应该仅有一个引起它变化的原因变化的反向隐含着类的责任Liskov替换原则LSP子类必须能够替换他们的基类(is a)继承表达类型抽象接口隔离原则ISP不应该强迫客户程序依赖它们不用的方法接口应该小而完

2021-04-05 19:59:44 101

原创 dfs之剪枝

优化搜索顺序排除等效冗余可行性剪枝最优性剪枝

2021-03-06 13:37:23 794

原创 算法——基础数学

约数互质:两个数公约数只有1对于一个大于1正整数n可以分解质因数:n = p1^a1 * p2^a2 * p3^a3 * … * pk^ak求一个数的约数个数:n的正约数有(a₁+1)(a₂+1)(a₃+1)…(ak+1)个求一个数的所有约数的和:n的正约数之和为(p1^0 + p1^1 + p1^2 + … + p1^a1) * (p2^0 + p2^1 + p2^2 + … + p2^a2) * … * (pk^0 + pk^1 + pk^2 + … + pk^ak)// 分解约数voi

2020-08-29 10:51:45 235 1

原创 状压dp

蒙德里安的梦想求把NM的棋盘分割成若干个12的的长方形,有多少种方案。例如当N=2,M=4时,共有5种方案。当N=2,M=3时,共有3种方案。输入格式输入包含多组测试用例。每组测试用例占一行,包含两个整数N和M。当输入用例N=0,M=0时,表示输入终止,且该用例无需处理。输出格式每个测试用例输出一个结果,每个结果占一行。数据范围 1≤N,M≤11输入样例:1 21 31 42 22 32 42 114 110 0输出样例:10123514451205

2020-08-19 18:07:04 125

原创 树形dp

原理:由于树无向无环, 且点只能有一个前驱,则某颗树的状态可由其子树转移而来,通过递归即可求解。没有上司的舞会Ural大学有N名职员,编号为1~N。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数 Hi 给出,其中 1≤i≤N。现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。输入格式第一行一个整数N。接下来N行,第 i 行表

2020-08-19 10:17:58 120

原创 区间dp

数字三角形题目:给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 8 8 1 0 2 7 4 44 5 2 6 5代码:#include <iostream>#include <algorithm>using namespace std;const int N = 5

2020-08-08 22:26:37 118

原创 背包问题汇总

01背包#include<iostream>#include<algorithm>using namespace std;const int N = 10010;int f[N], v[N], w[N]; // f[i][j]: 前i种物品中,空间为j时的最大价值。int main(){ int n, m; cin >> n >> m; for(int i = 1; i <= n; i++)

2020-08-07 23:03:03 159

原创 kmp模板

洛谷P3375#include <iostream>#include <cstring>using namespace std;const int N = 1000010;char s1[N], s2[N];int ne[N]; // ne[i]:s2前i位组成的子串的最长相等前缀后缀的长度int main(){ s1[0] = ' ', s2[0] = ' '; cin >> s1+1 >> s2+1; // 为方便可将字符串下标定义

2020-08-06 20:12:22 133

原创 二分图——染色法与匈牙利算法

二分图:n阶无向图G是二部图当且仅当G中无奇圈。染色法思路:由二分图定义, 对于图中每条边,其端点位于不同集合中,因此,对于图中每个连通快,可用dfs为其中每个点打上标记, 如果存在矛盾的点,则该图不为二分图。时间复杂度O(n+M).#include <iostream>#include <cstring>using namespace std;const int N = 100010, M = 200010;int e[M], ne[M], h[N], idx;

2020-08-03 22:26:24 598

原创 最小生成树——prim与kruskal算法

题目:传送门prim算法思路:用数组记录每个点到最小生成树所在集合的最小距离,每次选取距离最小的点以该距离加入集合,并用该点更新其他点的距离。#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 5010, M = 200010;int g[N][N], res, n, m;int dis[N]; // dis[i]:当前.

2020-08-03 09:48:21 148

原创 处理负权边——Bellman_ford与spfa算法

Bellman_ford算法思路:Bellman_ford算法遍历图中所有的边以更新各点的距离,对于无负权回路的图,最多经过n-1次(n为边数)遍历,便可找到最短距离。 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 150010;int dis[N], backup[N]; // backup为备份数组in

2020-07-31 21:43:48 328

原创 朴素Dijkstra与堆优化Dijkstra

朴素dijkstra:题目当面对单源最短路问题时,若所有边均为正权,则可用Dijkstra算法求解。思路:维护一个尚未确定到起点最短距离的点的集合,每次从该集合中选取一个到距离最短的点,则该点到起点的最短距离已近被确定,从该集合删除,并更新与该点相关的所有点距离。时间复杂度:O(n^2) ,n为点数。#include <iostream>#include <cstring>#include <algorithm>using namespace std;c

2020-07-28 17:25:13 299

原创 图论——拓扑排序

思路:欲取得一个拓扑序列, 则该图必为有向无环图。开一个队列存放不在环中的点(包括自环)。首先可将入度为0的点加入队列,通过每个起点(即入度为0的点)遍历其所能到达的各点,每遍历到一点将该点入度减1, 若某点入度减为0,即可加入队列。因此对于该图中每个入度不为1的结点, 分为两种情况:1.点不在环中,则每一条经过该点的通路都可让该点入度减一,最终入度减为0,点入队列。2.点在环中,由上文知每一点需通过其前面的点访问从而减少入度,但前一点又需要前一点,则成循环论证,所以环中所有点都无法加入队列。&

2020-07-24 00:22:38 244

原创 trie——字典树模板

#include <iostream>using namespace std;const int N = 20010;int son[N][26], cnt[N], idx; // son[i]数组存放存放第i个节点其各个子节点的下标, cnt数组表示以该节点结尾的单词数, idx表示当前节点序号void insert(char str[]){ int p = 0; // 根节点 for (int i = 0; str[i]; i++) {

2020-07-22 11:12:19 269

空空如也

空空如也

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

TA关注的人

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