自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 BUUCTF - Basic

XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。发现有个 ctftraining 数据库,查找该数据库下的表,果然找到了有个 flag表,该表里有个flag字段。文件上传漏洞,上传一个php一句话木马文件,返回了文件的访问路径,再用蚁剑连接,即可在根目录找到flag。2. 本来这样是没啥办法的,但是我们访问这个木马文件,发现这个文件其实是被执行了,输出了 hello;

2024-07-06 10:32:26 687

原创 常用表达式

【代码】常用表达式。

2023-11-01 14:59:57 108

原创 RabbitMQ - 2

Rabbitmq 高级特性

2022-10-23 15:09:28 765 1

原创 RabbitMQ - 1

AMQP(高级消息队列协议)是一种网络协议,基于此协议可以实现客户端与消息中间件间的消息传递,而与客户端与中间件本身产品类型无关。RabbitMQ是基于 AMQP 协议使用 Erlang 语言开发的一款消息队列产品。AMQP 中规定的角色类型:Exchange:交换机,根据 Routes 处理消息的分发;Queue:消息队列。

2022-10-17 19:19:30 430

原创 Redis 3 - 集群

Redis 集群篇

2022-08-30 21:24:47 254

原创 Redis 2 - 高级

文章目录一. Linux 安装 redis1. 安装 redis2. 指定端口启动3. 配置文件启动二. Redis 持久化1. RDB 持久化2. AOF 持久化3. RDB 与 AOF 对比一. Linux 安装 redis首先说明一下,windows 可以按照 Ubuntu 子系统,本节内容就是基于 windows 下的 Ubuntu 子系统完成的。1. 安装 redis## 下载redis包wget http://download.redis.io/releases/redis-xxxx.

2022-08-06 14:56:18 86

原创 LeetCode Hot 100

LeetCode Hot 100

2022-07-31 20:26:11 153

原创 LeetCode - 二叉树、图

文章目录一. 二叉树1. 树的递归2. 层次遍历3. 前中后序遍历4. 二叉查找树5. 字典树6. 其他一. 二叉树1. 树的递归例题 104. 二叉树的最大深度。给定一个二叉树,找出其最大深度。public int maxDepth(TreeNode root) { if (root == null) { return 0; } return Math.max(maxDepth(root.left) + 1, maxDepth

2022-05-31 19:22:45 211

原创 LeetCode - 字符串与链表

文章目录1. 字符串比较1. 字符串比较例题 242,有效的字母异位词。给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。第一种方式排序后判断是否相等;第二种,哈希表存储字母出现频次。由于字母在26之内,因此可以通过26位数组代替哈希表。public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false;

2022-05-19 19:18:39 508

原创 LeetCode - 数据结构

文章目录一. 数组一. 数组列题 448,找到所有数组中消失的数字。给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。可以直接用 hash;这种确定数值范围的题可以考虑用数值作为数组下标是否有用。这道题没有使用额外空间,在原数组上做的修改,稍微会绕一点。public List<Integer> findDisappearedNumbers(int[]

2022-05-10 21:14:56 705

原创 LeetCode - 位运算

文章目录一. 位运算1. 基础问题一. 位运算Java int 类型可以直接进行位运算,运算完成后的结果也是十进制的 int 类型;n & (n-1) 可以去除 n 中最低位的 1;如 0100 & 0011 = 0000n & (-n) 可以得到 n 中最低位的 1;(注意负数在计算机中是以补码的形式出现),如 0100 & 1100 = 0100。1. 基础问题例题461,汉明距离。两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。给

2022-04-28 19:36:17 283

原创 LeetCode - 分治法与数学问题

文章目录一. 分治法二. 数学问题1. 最大公约数/最小公倍数2 .找质数3. 进制转换4. 阶乘后的零5. 字符串相加一. 分治法分治问题由“分”(divide)和“治”(conquer)两部分组成,通过把原问题分为子问题,再将子问题进行处理合并,从而实现对原问题的求解。如归并排序。另外,自上而下的分治可以和 memoization 结合,避免重复遍历相同的子问题。如果方便推导,也可以换用自下而上的动态规划方法求解。例题 241. 为运算表达式设计优先级。给你一个由数字和运算符组成的字符串 ex

2022-04-19 19:59:42 606

原创 LeetCode - 动态规划

文章目录一. 动态规划一. 动态规划动态规划适用于最优子结构问题,即全局最优解由局部最优解决定;它将原问题拆成多个子问题求解,与深度优先广度优先的区别是它需要保存子问题的解避免重复计算;动态规划的关键是要找到状态转移方程;动态规划还能进行空间压缩以节省空间。例题70. 爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?n阶台阶的走法等于走到第n-1阶台阶的走法 + 走到第n-2阶台阶的走法,因此状态转移方程:dp[i

2022-03-26 15:47:02 594

原创 https 详解

文章目录一. 加密机制二. 认证机制三. https 传输的数据是否需要二次加密http + 加密 + 认证 + 完整性保护 = httpshttp在传输过程中会受到窃听、篡改的风险,且通信的双方也有可能是伪造的,所以在传输机密信息的时候,需要进行加密、通信双方认证以及信息完整性保护。https是在http的基础上添加了一个SSL协议,即http先与ssl进行通信,ssl再与tcp进行通信。https会对http请求的 header 和 body 都进行加密,可以防止 token 被盗用,因此 htt

2022-03-07 20:34:26 6001

原创 LeetCode - 深度广度优先

文章目录六. 搜索算法1. 深度优先搜索2.六. 搜索算法1. 深度优先搜索例题 695 求最大岛屿的面积。即求最大的连通区域的大小;主函数遍历矩阵,判断当前元素是否需要递归判断连通岛屿的面积;辅助函数用于递归计算岛屿面积;注意遍历过的地方需要将 1 置为 0 ,防止重复计算。 //辅 public int searchGrid(int[][] grid, int i, int j) { if(i >= grid.length || i < 0 || j

2022-02-28 20:41:33 294

原创 LeetCode -贪心/双指针/二分查找/排序

文章目录一. 贪心算法二. 双指针1. 典型 Two Sum2. 归并数组3. 快慢指针一. 贪心算法二. 双指针1. 典型 Two Sum例题167。采用相反的两个指针遍历数组。一个初始指向最小的元素,即数组最左边,向右遍历;一个初始指向最大的元素,即数组最右边,向左遍历。2. 归并数组例题88。归并两个有序数组使之成为一个有序数组。如果不重新开辟空间,直接将数组b中的元素插入到数组a中,会出现数组a后续的元素被覆盖的情况(元素需要不断后移)。所以,如果数组的数据有被覆盖的风险,可以记得用倒

2022-01-31 16:28:46 976 1

原创 springcloud 2 - Nacos 注册及配置

文章目录一. Nacos 注册中心1. Nacos 安装2. 服务注册和发现3. Nacos 多级存储模型4. 环境隔离5. Nacos 与 Eureka 的区别:一. Nacos 注册中心Nacos 是阿里巴巴开发的一种新的注册中心,它比 Eureka 功能更加丰富。1. Nacos 安装下载地址:https://github.com/alibaba/nacos解压 zip 包到任意目录,启动 bin 目录下的 startup.cmd 文件:startup.cmd -m standalone

2022-01-04 21:55:37 1140

原创 SpringCloud 1 - 微服务及Eureka

文章目录一. 微服务概念介绍二. Eureka 注册中心1. 注册中心要解决的问题2. 搭建 Eureka 服务器三. 服务注册4. 服务发现四. Ribbon 负载均衡一. 微服务概念介绍微服务是将单体架构的服务按照模块进行拆分,每个模块单独部署和维护,是分布式架构中的一种。springcloud 是一种成熟的技术栈,用于解决微服务治理问题。一般微服务需要有以下几个模块:服务集群、注册中心、配置中心、网关及负责均衡。注册中心用于维护集群中所有机器的地址信息,集群间相互调用需要去注册中心获取服务方

2022-01-02 15:11:14 403

原创 Spring Security Jwt redis 实现登录及权限管理

文章目录一. 登录校验二. 全局 Ajax 设置三. 跨域配置四. 定时任务管理一. 登录校验二. 全局 Ajax 设置请求需要在 header 中携带 token,可以通过全局统一配置来实现,避免每个请求都需要写一遍,后续再引入配置文件即可。下面的配置中还对错误码进行了统一封装。$.ajaxSetup({ cache : false, headers : { "token" : localStorage.getItem("token") }, error : function(xhr,

2021-12-12 19:21:53 1704

原创 Redis 1 - 基本命令

文章目录一. Redis 基础1. Redis 的应用2. Redis 支持类型一. Redis 基础1. Redis 的应用(1)为热点数据加速查询,如热点商品等高访问量信息;(2)任务队列,如秒杀 ,抢购等;(3)即时信息查询,如公交到站信息,在线人数信息等;(4)时效性信息控制,如验证码时间控制,投票控制;(5)分布式数据共享,如session;(6)消息队列;(7)分布式锁。2. Redis 支持类型key永远为string类型,value可以为 string、list、has

2021-11-22 20:30:12 356

原创 并发编程10 - 线程安全集合类

@TOC一. 线程安全集合类分类Hashtable 是 hashmap 的安全实现,Vector 是 List 的安全实现。SynchronizedMap 和 SynchronizedList 是将传进来的 Map 和 List 对象封装成SynchronizedMap 和 SynchronizedList 对象,内部采用的是类似于装饰器模式,将所有方法加上 synchronized 关键字重写。Blocking类大部分实现就锁,并提供阻塞方法;CopyOnWrite 是在写的时候复制一份来避免

2021-09-10 21:02:04 68

转载 the selection cannot be run on any server

关于向ecplise中导入javaweb项目运行时出现"The selection cannot be run on any server"的解决方案

2021-09-08 11:25:31 525

原创 并发编程9 - AQS

文章目录一. 饥饿现象二. 池大小一. 饥饿现象当线程数不够,所有线程都在死等其他线程执行完毕时的现象被称为饥饿现象。示例:创建了一个固定线程数的线程池,共有两个线程,处理的任务有 点菜、做菜、上菜。如果同时有两位客人来,两个线程同时都去处理点菜任务了,之后就没有线程处理做菜任务,导致两个线程都陷入了死等(future.get()):public class hungerTest { private static final Logger logger = LoggerFactory.get

2021-09-01 22:03:01 50

原创 并发编程8 - 线程池

文章目录一. 自定义线程池1. 组成2. 阻塞队列3. 线程池4. 拒绝策略二. JDK提供的线程池——ThreadPoolExecutor1. 线程池状态2. 构造方法3. 不同类型的线程池4. 提交任务方法5. 停止方法一. 自定义线程池1. 组成线程池(ThreadPool):消费者;阻塞队列(BlockingQueue):暂存任务main线程(main):生产者当任务产生时,如果任务数量小于线程池中的线程数,将使用线程执行。如果任务数量超过线程数时,多余的任务将存入阻塞队列。线程从队列

2021-08-19 22:06:16 109

原创 并发编程7 - 不可变对象及享元模式

文章目录一. 不可变对象一. 不可变对象不可变对象是线程安全的,因为没有线程能够修改它。通过 String 类发现不可变类有以下几个特征:私有变量为 final 的,保证只有在构造时才能给它赋值;类也被 final 修饰,保证子类不会破坏其线程安全性;保护性拷贝(复制一份新的副本避免共享)。...

2021-08-10 21:30:21 95

原创 并发编程6 - 无锁并发CAS 与 Volatile

文章目录一. Java内存模型1. 可见性问题2. Balking 模式3. 有序性问题4. double-checked locking 问题二. 共享模型之无锁1. CAS 与 Volatile2. 原子类一. Java内存模型即 JMM(Java Memory Model),它定义了主存、工作内存抽象概念。体现在原子性:保证指令不会受到线程上下文切换的影响;(Monitor)可见性:保证指令不会受到 cpu 缓存的影响;(volatile、Monitor)有序性:保证指令不会受到 cpu

2021-08-09 20:28:11 117

原创 并发编程5 - 设计模式之固定/交替执行线程

文章目录一. 固定顺序运行二. 交替运行1. wait/notify 实现一. 固定顺序运行同时启动的两个线程无法确定其运行顺序,可以通过 park/unpark 简单实现其固定顺序运行。public class StickTurnTest { private static final Logger logger = LoggerFactory.getLogger(StickTurnTest.class); public static void main(String[] args)

2021-07-29 20:31:32 61

原创 并发编程4 - 线程状态、死锁及ReentrantLock

文章目录一. park VS unpark1. 用法2. 原理简述二. 再述线程状态转换一. park VS unpark1. 用法用于使线程等待,属于 LockSupport 的静态方法,使线程进入 Wait 状态。与 Object 的 wait/notify 的区别:wait/notify 必须配合对象锁一起使用,而 pack/unpack 不必;park/unpark 能做到精准阻塞和唤醒某个线程,而notify只能随机唤醒一个线程,notifyAll是唤醒所有线程,不能做到精准通知;

2021-07-27 21:38:17 576

原创 并发编程3 - notify/park及同步异步模式

文章目录一. wait-notify1. 原理2. API示例3. sleep 与 wait4. 如何正确使用 wait二. 同步模式之保护性暂停1. 定义2. 实现3. 扩展 —— 在类之间管理多个GuardedObject对象三. 异步模式之生产者消费者1. 要点2. 实现一. wait-notify1. 原理wait、notify 是 Object 对象的方法。只有获得了对象锁后才能调用该方法。使用wait的场景是:当获得了锁但是还未满足线程执行条件时可以考虑使用 wait。当调用 wait

2021-07-24 20:44:58 163

转载 解决eclipse部署tomcat服务器无法启动的问题

解决eclipse部署tomcat服务器无法启动的问题

2021-07-21 20:20:54 265

原创 并发编程2 -线程安全问题及Synchronized

文章目录一. 线程安全问题1. 共享带来的问题2. synchronized 解决方案3. 变量的线程安全分析4. 转账线程实例二. Monitor概念1. 概念2. synchronized 优化一. 线程安全问题1. 共享带来的问题上下文切换使得指令(一行代码对应多条指令)交错,导致多线程访问共享资源出现线程安全问题:例:public class ThreadTest { static int counter = 0; public static void main(Strin

2021-07-12 18:46:35 139

原创 并发编程1 - 线程基础及其常见方法

文章目录一. 进程与线程1. 概念2. 并发与并行3. 线程的应用一. 进程与线程1. 概念进程:进程可以视为程序的一个实例。当一个程序被运行,从磁盘加载这个程序的代码至内存,就开启了一个进程。进程是资源分配的最小单位。线程:线程是调度的最小单位,一个进程内可以有多个线程。线程由一系列指令组成。二者对比:进程间相互独立,线程存在于进程内,是进程的一个子集;进程拥有共享的资源,如内存空间,供内部的线程共享;进程间通信较为复杂,不同计算机之间的进程通信需要通过网络和协议;线程通信较为简单

2021-06-09 20:59:13 58

原创 JVM学习4 - 语法糖

文章目录十一. 语法糖1. 默认构造器2. 自动拆装箱3. 泛型擦除4. 可变参数5. foreach 循环6. switch 字符串十一. 语法糖java编译器把源码编译成class字节码的过程中,自动生成和转换的一些代码。(直接转换成了字节码,不会转换出Java源码)1. 默认构造器class 中如果没有无参构造器,自动生成无参构造器。public class Test{}转成字节码后,源码实际如下:public class Test{ public Test(){ super(

2021-05-30 10:16:27 48

原创 JVM学习3 - GC调优及字节码

文章目录九. GC调优1. 最快的GC是不发生GC2. 新生代调优(1) 新生代的特点:(2) 新生代内存越大越好吗? (-Xmn)(3) 幸存区3. 老年代调优4. 调优案例(1) Full GC 和 Minor GC 频繁(2) 请求高峰期发生Full GC, 单次暂停时间特别长 (CMS)(3) 在老年代充裕情况下发生了Full GC (CMS jdk 1.7)九. GC调优//查看所有GC相关的参数java -XX:+PrintFlagsFinal -version | findstr "GC

2021-04-21 21:07:01 223 1

原创 JVM学习2 -垃圾回收

文章目录八. 垃圾回收1. 如何判断对象是否可以回收(1)引用计数法(2)可达性分析算法八. 垃圾回收1. 如何判断对象是否可以回收(1)引用计数法当对象被其他变量引用时,引用次数+1,变量不再引用时,则 -1。当对象的引用次数为 0 时,则可被垃圾回收。弊端:无法解决循环引用的问题。(2)可达性分析算法确定根对象(肯定不能被垃圾回收的对象),对堆内存中的所有对象进行扫描。看每个对象是否被根对象直接或间接引用,只有没被根对象引用的对象才会被垃圾回收。Eclipse:Memory Analy

2021-04-07 21:06:23 303 3

原创 JVM学习1 - JVM基础\堆\栈\方法区

文章目录一. 什么是JVM二. 内存结构1. 程序计数器(1)定义(2)特点2. 虚拟机栈(1)定义(2)问题解析(3)栈内存溢出一. 什么是JVMJava Virtual Machine - java程序的运行环境(Java二进制字节码的运行环境)优点:支持跨平台运行自动内存管理,垃圾回收功能二. 内存结构1. 程序计数器(1)定义Java源代码-》jvm指令-》解释器-》机器码-》CPU运行用于存储下一条jvm指令的执行地址,物理上通过寄存器实现(2)特点线程私有,每个

2021-03-13 11:07:58 72

原创 JSONObject、Array与String、List、Map的互转

引入 fastjosn 包实现互转:<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.41</version></dependency>互转实例:package com.example.demo;import com.alibaba.fastjson

2021-01-30 14:00:40 110

原创 Xshell连接Virtualbox虚拟机

文章目录一. 虚拟机网络配置二. 安装openssh-server三. 查看虚拟机IP地址四. 查看端口情况五. 配置Xshell连接一. 虚拟机网络配置连接方式必须选为【桥接网卡】,否则本地机子根本ping不通虚拟机:选为桥接网卡虚拟机仍然无法联网的解决方法二. 安装openssh-server虚拟机上安装的是Ubuntu18.0.1,先在该Ubuntu机子上安装openssh-server:sudo apt-get install openssh-server启动ssh服务:serv

2020-07-06 21:10:05 721

原创 Day6 - 头像存储与EasyExcel

文章目录一. 阿里云OSS存储1. 注册并创建存储空间2. 获取 key3. 官方文档二. 头像上传后台开发1. service-oss 模块搭建2. 后台上传代码三. nginx 请求转发1. nginx 基础概念2. 实现请求转发四. 头像上传前端代码1. 导入上传文件模块2. 头像上传组件一. 阿里云OSS存储阿里云的对象存储 OSS 提供海量、安全、低成本、高可靠的云存储服务,很多公司都会使用它来进行数据存储。因此,我们将讲师头像存储在这里。1. 注册并创建存储空间进入阿里云官网,注册账号登

2020-06-18 17:23:02 236

原创 Day5 - 前端基础页面开发

文章目录一. 登录功能改造一. 登录功能改造vue-admin-template 模块默认的登录地址是 https://easy-mock.com/mock/5950a2419adc231f356a6636/vue-admin,我们需要将其改成本地后端地址,才能访问自己的后台。前端 config/dev.env.js 文件:将 BASE_API 改为本地后端地址,我这里是 http://localhost:8081;后端增加一个登录接口,写好 login() 和 info() 方法,这里暂时不查数

2020-06-03 16:00:17 225

空空如也

空空如也

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

TA关注的人

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