自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿辉爱睡觉的博客

程序猿的成长历程

  • 博客(90)
  • 收藏
  • 关注

原创 Web项目部署

我们的项目,终究是要部署到服务器上,才会有完结撒花的成就感;如何部署到Linux 的服务器,实现正真的浏览器网站访问你呢?阿里云,腾讯云等均在 root 用户下操作在Linux 直接查找对应jdk 版本即可安装对应版本安装# yum install -y mariadb-server# yum install -y mariadb# yum install -y mariadb-libs# yum install -y mariadb-devel更改配置[client] 下加一行配置 default-cha

2022-06-20 16:22:45 332 1

原创 Servlet

Servlet初识,Servlet项目创建,Servlet项目部署,常见访问错误,Servlet运行原理,ServletApi详解,HttpServlet,HttpServletRequest,HttpServletResponse,Cookie 和 Session用法与了解,上传文件的方法

2022-06-07 15:18:43 1791

原创 HTTP协议

HTTP 往往是基于传输层的 TCP 协议实现的.HTTP1(主流版本)基于TCPHTTP2(支持不多)基于TCP,引入的是安全性(相当于HTTPS的加强版)HTTP3(建设中) 基于UDP,提高效率所谓 "超文本" 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些其他的资源, 比如图片, 视频, 音频等二进制的数据 下四层保证数据传输;将传输的数据流解析,提取数据;应用层:信息+格式(关注数据本身)客户端vs服务端请求 vs 响应一次请求一次响应多次请求,一次

2022-06-01 10:44:26 1695

原创 JAVAWeb-HTML

HTML结构HTML标签HTML代码是由标签构成的<body>hello</body>标签名 (body) 放到 < > 中 大多数标签成对出现 <body> 为开始标签, </body> 为结束标签. 少数标签只有开始标签, 称为 "单标签". 开始标签和结束标签之间, 写的是标签的内容. (hello) 开始标签中可能会带有 "属性". id 属性相当于给这个标签设置了一个唯一的标识符(身份证号码).

2022-05-29 12:42:40 559

原创 网络级数据链路层重点协议

网络层重点协议在网络环境中确定一个合适的路径IP协议协议头格式 20 字 节 4位版本 4位首部长度 8位服务类型(TOS) 16位总长度 16位标识 3位标志 13位片偏移 8位生存时间(TTL) 16位首部检验和 32位源地址IP地址

2022-05-29 12:20:33 149

原创 传输层重点协议

负责数据能够从发送端传输接收端TCP协议TCP,即Transmission Control Protocol,传输控制协议。要对数据的传输进行一个详细的控制TCP协议端格式 0 16 32 16位源端口号 16位目的端口号 32位序号 32位确认号 4位 首部长度 保留 (6位) U R

2022-05-23 09:13:04 177

原创 网络基础及应用层相关协议

网络基础IP地址概念IP地址(Internet Protocol Address):指互联网协议地址作用IP协议提供的同一的地址格式;为每一个网络及网络中的主机分配唯一一个逻辑地址,屏蔽物理地址的差异;格式IP地址是32位的二进制数,通常分为4个“8位二进制数”;通常用点分十进制表示,a.b.c.d形式IP协议有两个版本,IPv4和IPv6。凡是提到IP协议,没有特殊说明的,默认都是 指IPv4。IPv4数量=2^32,大约43亿左右,而TCP/IP协议规定

2022-05-23 09:02:22 272

原创 网络原理初识

网络发展史独立模式计算机之间相互独立;网络互联将多个计算机连接一起,完成数据共享数据共享的本质是网络数据传输即计算机之间通过网络来传输数据,也称网络通信根据网络互连得规模不同,可以划分为局域网和广域网局域网LAN(Local Area NetWork)Local 即标识了局域网是本地,局部组建的一种私有网络。局域网内的主机之间能进行网络通信,又称内网; 局域网和局域网之间在没有连接的情况下无法通信;局域网组建网络的方式:1.基于网线直连2.基于集线器组

2022-05-18 09:16:26 1408

原创 文件操作和IO

文件包含数据内容本身+metadata(文件头信息:文件名,修改信息,文件大小等等);文件系统结构:树型结构目录(文件夹):专门用来存放管理信息(关于文件的元信息)的特殊文件文件路径绝对路径:从根节点到相应节点的整个路径(Windows是从各个磁盘开始)相对路径:从任意一个节点出发,到目的节点,经过的路径../:上一级目录./:当前目录文件划分文本类型本质也是基于二进制保存数据,使用一种编码格式保存文本打开文本,需要制定编码格式——保存和打开的编码

2022-05-17 17:35:42 325

原创 多线程JUC及扩展

JUC(java.util.concurrent)的常见类ReentrantLock先导补充一种锁策略:独占锁/共享锁独占锁概念独占锁也叫排他锁,是指该锁一次只能被一个线程所持有。如果线程T对数据A加上排他锁后,则其他线程不能再对A加任何类型的锁。获得排它锁的线程即能读数据又能修改数据。JDK中的synchronized和 JUC中Lock的实现类就是互斥锁。共享锁概念共享锁是指该锁可被多个线程所持有。如果线程T对数据A加上共享锁后,则其他线程只能对A再加共享锁,不能加排它锁。

2022-05-16 11:03:46 165

原创 多线程Synchronized原理及扩展

CAS什么是CAS?CAS:Compare and Swap 比较并交换,乐观锁的一种实现。我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。1. 比较 A 与 V 是否相等。(比较)2. 如果比较相等,将 B 写入 V。(交换)3. 返回操作是否成功当多个线程同时对某个资源进行CAS操作,只有一个线程操作成功,但不会阻塞其他线程,其他线程只会收到操作失败的信号。CAS实现原理针对不同的操作系统,JVM 用到了不同的 CAS 实现原理,简单来讲:j

2022-05-14 12:20:31 166

原创 多线程常见锁策略

乐观锁 与 悲观锁设计思想悲观锁:以悲观心态看待线程冲突(认为每次都有线程会同时操做共享变量),于是每次都加锁操作共享变量适用于:大部分情况存在线程冲突乐观锁:乐观心态看待线程冲突(认为没有线程会同时操作),所以每次都不加锁(程序层面),就直接操作共享变量不加锁(程序层面):cpu执行某个很短暂的加锁释放锁操作,这个时间对于程序每那么敏感(所以叫“无锁”)直接操作共享变量:依赖操作系统及cpu的一些功能,来操作(实际有加锁)适用于:大部分情况,不存在线程冲突读

2022-05-13 12:30:40 132

原创 多线程线程通信

线程通信什么是线程通信?使用场景?多线程优势是提高cpu利用率(通过并发并行)执行时间比较的长任务,可能存在线程安全问题,且线程之间抢占式执行,执行顺序难以预知(随机执行)。如何让线程具有一定的顺序性,在保证安全和效率前提下?线程间通信:一个线程以通知的方式,唤醒某些等待线程或在某些条件下让当前线程等待,通过这样让线程间通过通信方式满足一定顺序性。方法:wait() / wait(long timeout): 让当前线程进入等待状态. notify() / notifyAll():

2022-05-12 13:33:34 197

原创 多线程线程安全

线程安全概念:如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境下应该的结果,则说这个程序是线程安全的要考虑多个线程并发并行执行:多个线程之间的代码都是随机执行的 =》任何情况下如果存在不符合预期结果的,都是不安全的public class Test { static int n = 1; public static void main(String[] args) throws InterruptedException { Thread

2022-05-11 12:32:56 1266 3

原创 广度优先搜索练习一

例题一:N叉树得层序遍历1给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。示例 1:输入:root = [1,null,3,2,4,null,5,6]输出:[[1],[3,2,4],[5,6]]层序遍历:广度优先/*// Definition for a Node.class Node { public int val; public List<Node> chil

2022-05-10 09:31:08 383

原创 深度优先遍历练习六

例题一:N皇后n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/n-queens[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wbmayqnw-16

2022-05-09 09:50:23 111

原创 深度优先搜索练习五

例题一:组合总数给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。来源:力扣(LeetCode)链接:https://leetcode-

2022-05-08 22:04:08 301

原创 深度优先搜索练习四

例题一:电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。(九键输入法)给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3rkv8HWI-1651898281742

2022-05-07 12:38:39 814

原创 深度优先搜索练习三

例题一:被围绕的区域给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例 1:输入:board = [[“X”,“X”,“X”,“X”],​ [“X”,“O”,“O”,“X”],​ [“X”,“X”,“O”,“X”],​ [“X”,“O”,“X”,“X”]]输出:[[“X”,“X”,“X”,“X”],​ [“X”,“X”,“X”,“X”],

2022-05-06 12:14:50 96

原创 深度优先搜索练习二

例题一:图像渲染有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。你也被给予三个整数 sr , sc 和 newColor 。你应该从像素 image[sr][sc] 开始对图像进行 上色填充 。为了完成 上色工作 ,从初始像素开始,记录初始坐标的 上下左右四个方向上 像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应 四个方向上 像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点

2022-05-05 09:32:55 127

原创 深度优先搜索练习一

例题一:放牌假如有编号为1~ 3的3张扑克牌和编号为1~3的3个盒子,现在需要将3张牌分别放到3个盒子中去,且每个盒子只能放一张牌,一共有多少种不同的放法。当走到一个盒子面前的时候,到底要放那一张牌呢?在这里应该把所有的牌都尝试一遍。假设这里约定一个顺序,按牌面值从小到大依次尝试。在这样的假定下,当走到第一个盒子的时候,放入1号牌。放好之后,继续向后走,走到第二个盒子面前,此时还剩2张牌,牌面值最小的为2号牌,按照约定的规则,把2号牌放入第二个盒子。此时,来到第三个盒子面前,只剩一张牌,放入第三个

2022-05-04 10:03:18 500

原创 回溯算法初识

回溯算法类似枚举的搜索过程,主要是在搜索尝试的过程中寻找问题的解,当发现不满足求解条件时,"回溯"返回,尝试别的路径回溯法是一种选优搜索法,按照选优条件按向前搜索,以达到目标。当探索到某一步时,返现并不是最有解或不能达成目标,就退一步,重新选择,这种走不通就返回上一状态重新选择的方法叫回溯法。满足回溯条件的点叫做回溯点或剪枝点,剪枝:就是将不可能达到目标或没必要的路径剪掉许多复杂的,规模较大的问题都可以使用回溯法,在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深

2022-05-03 13:03:57 485

原创 两颗二叉搜索树中的所有元素

给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。分析:二叉搜索树:中序遍历结果集为升序结果题目要求:树合并 并 返回升序结果集思路一:1.中序遍历:分别中序遍历两棵树存储为两个升序结果集2.合并两个升序的结果集/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*T...

2022-05-02 10:12:12 503

原创 数组中重复的数字

找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。来源:力扣(LeetCode)链接:力扣分析:1.排序思想:对nums数组排序,出现相同的数字返回classSolution{publicintfindRepeatNumber(int[]nums){Arrays.sort(num...

2022-04-30 10:21:53 249

原创 多线程初识

认识线程概念一个线程就是一个 "执行流". 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 "同时" 执行着多份代码什么是线程?线程的实现方式有很多种:进程和线程的关系?——面试题多个进程的内存相互隔离(独立),一个进程中的多个线程,可以共享内存 进程包含线程,每个进程至少包含一个线程,即主线程 进程是系统分配资源的最小单位,线程是系统调度cpu的最小单位 线程的创建,销毁代价比进程小(相较进程开销小(状态转化,进程开销大于线程)) 线程(如果有bug)可能

2022-04-29 10:42:57 692

原创 贪心例题系列2

例题一:多机调度问题某工厂有n个独立的作业,由m台相同的机器进行加工处理。作业i所需的加工时间为ti,任何作业在被处理时不能中断,也不能进行拆分处理。现厂长请你给他写一个程序:算出n个作业由m台机器加工处理的最短时间输入第一行T(1<T<100)表示有T组测试数据。每组测试数据的第一行分别是整数n,m(1<=n<=10000,1<=m<=100),接下来的一行是n个整数ti(1<=t<=100)。输出所需的最短时间分析:贪心n个机器可以同时

2022-04-28 15:57:57 1222

原创 贪心例题系列1

例题1:跳跃游戏跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每一元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置示例:​ [2,3,1,1,4]true;​ [3,2,1,0,4]false;分析:贪心当前能走的最远距离?[2,3,1,1,4]0 1 2 3 4在0,可以走两步最远到2;在1,可以走三步最远到4;(可以走到)class Solution { public boolean canJump(int[

2022-04-27 09:26:21 3419

原创 贪心算法思想

贪心算法思想:在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心选择是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素。当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。运用贪心策略在每一次转化时都取得了最优解。问题的最优子结构性质是该问题可用贪心算法求解的关键特征。贪心算法的每一次操作都对结果产生直接影响。贪心算法对每个子问题的解决方案都

2022-04-25 10:37:18 317

原创 动归应用——第九题不同的子序列

不同子序列动态规划——困难不同的子序列给定两个字符串S和T,求S有多少个不同的子串与T相同。S的子串定义为在S中任意去掉0个或者多个字符形成的串。子串可以不连续,但是相对位置不能变。比如“ACE”是“ABCDE”的子串,但是“AEC”不是动态规划问题:s中与t相同的子串数量?(可以删除s中任意个字符构成相同子串)状态分析:​ 子问题:s中前i个字符中与t的前j个字符相同的子串数量(i >= j)​ f(i,j) :s中前i个字符中与t的前j个字符相同的子串数量状态转移

2022-04-24 09:56:26 116

原创 动规应用——第八题编辑距离

编辑距离动态规划——困难编辑距离给定两个单词word1和word2,请计算将word1转换为word2至少需要多少步操作。你可以对一个单词执行以下3种操作:a)在单词中插入一个字符b)删除单词中的一个字符c)替换单词中的一个字符动态规划问题:​ 单词1 转换为 单词2 最少需要操作几次?(插入,或删除,替换)状态分析:​ 子问题:单词1的前j个字符 转换为 单词2 的前i个字符,最少需要操作几次?​ dp(j,i) :单词1的前j个字符 转换为 单词2 的前i个字符,最少

2022-04-22 15:00:43 196

原创 动规应用——第七题回文串的分割

回文串分割动态规划——困难回文串分割给出一个字符串s,分割s使得分割出的每一个子串都是回文串计算将字符串s分割成回文分割结果的最小切割数例如:给定字符串s=“aab”,返回1,因为回文分割结果[“aa”,“b”]是切割一次生成的。动态规划问题:​ 分割字符串,使其每个子串都是回文串,返回最小分割次数状态分析:​ 子问题:以第i个字符为结尾的字符串,最小分割次数​ dp(i) :第i个字符为结尾的字符串,最小分割次数状态转移方程:​ 第i个字符,是作为单独一个回文子串,还

2022-04-22 14:59:34 213

原创 动规应用——第六题背包问题

背包问题动态规划——中等背包问题有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小和数组 V 表示每个物品的价值.问最多能装入背包的总价值是多大?A[i], V[i], n, m 均为整数你不能将物品进行切分你所挑选的要装入背包的物品的总大小不能超过 m每个物品只能取一次m <= 1000动态规划:问题:​ A[] 物品大小 V[] 物品价值,m背包容量,n物品个数,背包总价值多大?状态分析:​ 子问题:前i个物品放入大小为j的背包中所获得

2022-04-22 14:56:33 155

原创 动态规划应用——第五题最小路径和

最小路径和动态规划——中等最小路径和题目描述:给定一个m*n的网格,网格用非负数填充,找到一条从左上角到右下角的最短路径。注:每次只能向下或者向右移动。动态规划问题:​ 左上角到右下角的最小路径和,只能向下或向右移动状态分析:​ 子问题:从(0,0)到(i,j)的最小路径和?​ dp(i,j) : 从(0,0)到(i,j)的最小路径和状态转移方程:​ dp(i,j) = min(dp(i-1,j) , dp(i,j-1)) + array(i,j) ;初始值:​ 顶部

2022-04-21 17:36:32 259

原创 动态规划——第四题路径总数

不同路径的数目动态规划——简单题目描述:在一个m*n的网格的左上角有一个机器人,机器人在任何时候只能向下或者向右移动,机器人试图到达网格的右下角,有多少可能的路径。动态规划:问题:​ 从左上角到右下角,只能向下或向右;从(0,0)到(i,j)共有几种路径状态分析:​ 子问题:从(0,0)到(i,j)的路径数;​ dp(i,j) : 到(i,j)的路径总数;状态转移方程:​ dp(i,j) = dp(i,j-1) + dp(i-1,j);​ 边界:​ 最顶部:i ==

2022-04-21 17:35:42 403

原创 动态规划应用——第三题三角矩阵

三角矩阵动态规划——中等三角形给出一个三角形,计算从三角形顶部到底部的最小路径和,每一步都可以移动到下面一行相邻的数字,例如,给出的三角形如下:[[20],[30,40],[60,50,70],[40,10,80,30]]最小的从顶部到底部的路径和是20 + 30 + 50 + 10 = 110。问题:从顶部到底部的最小路径和?状态分析:​ 子问题:从(0,0)到(i,j)的最小路径和​ dp(i,j):到(i,j)最小路径和状态转移方程:​ dp(i,j) = min

2022-04-21 17:34:52 843

原创 动态规划应用第二题拆分词句

字符串分割(Word Break)动态规划——中等拆分词句给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。例如:给定s=“nowcode”;dict=[“now”, “code”].返回true,因为"nowcode"可以被分割成"now code".状态分析:​ 子状态:前1,2,3,…,n个字符能否根据词典中的词被成功分词​ dp[i] 以第i个字符结尾的单词

2022-04-20 15:44:42 174 1

原创 动态规划应用-第一题Fibonacci

斐波那契数列动态规划初试——简单斐波那契数列现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n <= 39递归常规解法空间复杂度高,时间复杂度高,易理解public class Solution { public int Fibonacci(int n) { if(n == 0) return 0; if(n == 1) return 1; r

2022-04-20 15:43:09 201

原创 动态规划学习

Dynamic ProgrammingDP定义:​ 动态规划是分治思想的延伸,通俗一点来说就是大事化小,小事化无的艺术。​ 在将大问题化解为小问题的分治过程中,保存对这些小问题已经处理好的结果,并供后面处理更大规模的问题时直接使用这些结果动态规划具备了以下三个特点:把原来的问题分解成了几个相似的子问题所有的子问题只需要解决一次存储子问题的解动态规划的本质,是对问题状态的定义和状态转移方程的定义(状态以及状态之间的递推关系)动规问题一般从以下四个角度考虑:明确问题状态定义

2022-04-20 15:41:34 85

原创 二叉搜索树的最近公共祖先

力扣入口,235.二叉搜索树的最近公共祖先给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树:root =[6,2,8,0,4,7,9,null,null,3,5]可参考二叉树的最近公共祖先,结合二叉搜索树特点;得到从从根节点到p,q的路径,出现...

2022-04-08 16:52:56 506

原创 验证二叉搜索树

力扣入口 98.验证二叉搜索树给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树特点总结:二叉搜索树,左子树也是二叉搜索树,右子树也是二叉搜索树; 中序遍历:结果为升序; 二叉搜索树不存在重复值;思路一:递归:是二叉搜素树,左右子树也为二叉搜索树;条件:左右子树 都在一定范围内是升序(中.

2022-04-08 16:45:24 448

空空如也

空空如也

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

TA关注的人

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