自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java----java内存模型(JMM)

java'内存模型java内存模型是什么1. 缓存一致性协议---可见性2. 处理器优化---原子性3. 指令重排序---有序性java运行时数据区1. 堆2. 方法区3. java虚拟机栈4. 本地方法栈5. 程序计数器java内存模型是什么java内存模型是共享内存的并发模型,线程之间通过读—写共享变量来完成隐式的通信;java内存模型控制线程之间的通信,决定某个线程对共享内存的写入何时对另一个线程可见。java内存模型就是为了解决以下玉玉多线程通过共享内存通信时,缓存不一致、处理器对代码执行乱

2021-08-08 09:31:33 204

原创 OS----进程调度及实现(C语言)

进程调度四种算法源代码运行结果总结四种算法先来先服务算法先来先服务调度算法是按照作业到达的先后次序进行调度,或者说是有优先考虑在系统中等待时间最长的作业,而不管该作业所需执行时间的长短,从后背作业队列中选择几个最先进入系统的作业,将他们调入内存,为它们分配资源和创建进程,然后将它放入就绪队列。每次进程调度就从酒席队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行,该进程一直运行到完成或发生某事件而阻塞后,进程调度程序才将处理及分配给其他进程。短作业优先算法短作业优先调度算法是以作业

2021-06-27 07:40:53 1039 3

原创 操作系统----银行家算法(C语言实现)

银行家算法主要思想源代码运行结果主要思想银行计算法是判断系统中是否安全,并且允许其他进程来申请这里的资源,任何进程来申请资源时,必须先登记该进程对资源的申请的要求然后又系统检查当前资源的状况,并用银行家算法和安全性算法来进行检查是否允许分配资源给该进程。通过课程设计,加深我们对利用银行家算法避免死锁的理解。该程序设计语言编写银行家算法和安全性算法,使系统资源能够分配合理,从而安全地进行,避免系统死锁运行不下去。源代码源码github的连接: link.#define _CRT_SECURE_NO

2021-06-27 07:21:04 2605 5

原创 网络----传输层机制(TCP和UDP原理及区别)

传输层传输层TCP的原理确认应答机制超时重传机制连接管理机制滑动窗口拥塞控制流量控制延时应答机制捎带应答UDP的原理三级目录传输层传输层的功能是使数据在网络中传输,传输层的协议有两个分别为TCP协议和UDP协议TCP的原理确认应答机制超时重传机制连接管理机制三次握手1. 客户端给服务器发送请求建立连接的同步报文段SYN,申请建立客户端到服务端的连接2. 服务器收到后给客户端发送SYN和ACK。SYN是请求建立服务端和客户端的连接,ACK是对第一次SYN的应答。客户端收到ACK后建立客

2021-06-23 22:03:19 328 3

原创 网络----数据传输的封装和分用

网络中数据的传输传输流程域名解析功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入传输流程客户端在服务器输入一个url地址访问服务器上面的资源,都要经过那些过程。域名解析我们对Markdown编辑器进行了一些功能拓展与语法支持

2021-06-22 16:10:35 1420 3

原创 软件测试----生命周期

生命周期生命周期1. 需求分析2. 测试计划3. 测试设计/开发4. 测试执行5. 测试报告生命周期1. 需求分析分析需求细化需求验证需求的正确新和合理性2. 测试计划规划测试人员数量规划时间, 测试范围测试目的3. 测试设计/开发分析需求从细化的而需求中提炼的功能点, 设计测试用例4. 测试执行执行测试用例, 记录 BUG5. 测试报告测试范围, 执行了多少测试用例, 剩余多少测试用例,发现多少 BUG, 修改了多少 BUG(验证), 遗留的 BUG

2021-05-24 07:07:27 104

原创 设计可复用软件

按抽象程度的高低,可以划分为如下的复用级别:(1)代码的复用包括目标代码和源代码的复用。其中目标代码的复用级别最低,历史也最久,当前大部分编程语言的运行支持系统都提供了连接(Link)、绑定(Binding)等功能来支持这种复用。源代码的复用级别略高于目标代码的复用,程序员在编程时把一些想复用的代码段复制到自己的程序中,但这样往往会产生一些新旧代码不匹配的错误。想大规模的实现源程序的复用只有依靠含有大量可复用构件的构件库。如”对象链接及嵌入”(OLE)技术,既支持在源程序级定义构件并用以构造新的系统,又

2021-05-18 10:25:09 225 4

原创 设计模式解决问题和使用

设计模式怎样解决设计模式和编程中的使用怎样解决设计问题1. 寻找合适的对象2. 决定对象的粒度3. 指定对象接口3.1 类型(Type)是用来标识特定接口的一个名字。3.2 多态(Polymorphism)4. 描述对象的实现5. 运用复用机制6. 关联运行时和编译时的结构7. 设计应支持变化编程中的使用怎样解决设计问题1. 寻找合适的对象面向对象程序由对象组成,对象包括数据和对数据进行操作的过程,过程通常称为方法或操作。对象在收到客户的请求(或消息)后,执行相应的操作。客户请求是使对象执行操作

2021-05-16 14:20:07 195

原创 套接字与网络

套接字与网络客户端/服务器设计模式网络插座IP地址主机名端口号网络插座输入/输出缓冲液溪流阻止I / O使用网络插座在第二页在最后一页有线协议Telnet客户端HTTPSMTP协议设计有线协议指定有线协议测试客户端/服务器代码将网络代码与数据结构和算法分开将套接字代码与流代码分开概括目标在本阅读中,我们使用套接字抽象检查了网络上的客户端/服务器通信。网络通信本质上是并发的,因此构建客户端和服务器将需要我们对它们的并发行为进行推理并以线程安全性实现它们。我们还必须设计客户端和服务器用于通信的有线协议,就

2021-05-16 13:53:49 239

原创 网络----URL 如何定位服务资源 ?

定位服务资源URL 是什么URL 组成定位资源URL 是什么URL 是一个统一资源定位符. 它可以定位到 Web 服务器上唯一的资源.URL 组成URL = 协议名称 : // 域名(IP 地址) : 端口号/ 服务资源路径http://localhost:8080/servlet/view/login.htmlhttp 是协议名称, 这是一种在网络上明文传输的协议, 不安全. 还有另一种协议为 https, 它是在 http 上包裹了一层SSL/TSL加密协议组成的.localhost 是

2021-04-17 22:41:53 374

原创 OS----程序、进程与线程的区别与联系

进程与线程一级目录二级目录三级目录一级目录二级目录三级目录

2021-04-11 14:26:22 223 4

原创 表单提交方式之 get 和 post的区别

get 和 post的区别区别1. 后退按钮/刷新2. 书签3. 缓存4. 编码类型5. 历史6. 数据长度限制7. 数据格式限制8. 安全性9. 可见性区别1. 后退按钮/刷新get 请求: 无害, 原本在该页面输入的数据都还在.post 请求: 数据会被重新提交, 刷新之前输入的数据不在了.2. 书签get 请求: 可收藏为书签post 请求: 不可收藏为书签3. 缓存get 请求: 能被缓存post 请求: 不能缓存4. 编码类型get 请求: applicati

2021-04-11 13:43:05 211

原创 数据库的基本操作(增删改查)

数据库基本操作1. 数据增添2. 数据查询a> whereb> order byc> 大于小于等于nulld> between ande> inf> 模糊匹配 like (_和%)g> group by3. 数据修改4. 数据删除基本操作1. 数据增添对数据表 book 中所有字段进行插入insert into book value ('红楼梦', '曹雪芹', 100, '清代长篇人情小说');对数据表 book 中指定字段进行插入inser

2021-04-05 12:33:35 11545 1

原创 mysql 数据库(建库建表查库查表)

mysql关系数据库库的操作库的创建库的删除库的使用表的操作表的创建表的操作表结构的查看关系数据库关系数据库是以一种二维表格的形式.库的操作库的创建create database 库名;create database library;库的删除drop database 库名;drop database library;库的使用指定要使用的数据库use 库名;use library;查看所有数据库show databases;表的操作表的创建在创建数据库中表的时候

2021-04-04 16:17:48 387

原创 java----实现 HashMap

问题描述实现 HashMap 的 put 方法实现 HashMap 的 get 方法源代码public class MapNode { int key; int value; MapNode next; public MapNode(int key, int value) { this.key = key; this.value = value; }}public class MyHashMap { .

2021-03-28 22:57:22 122

原创 java----归并排序

源代码public class Sort { public void mergeSort(int[] arr) { mergeSortInternal(arr, 0, arr.length); } // 递归划分区间, 直到区间有序时, 进行合并 // 区间中只有一个元素时, 元素是有序的 // 然后把有序区间进行合并 // 递归划分 [start, end)区间 private void mergeSortInternal(int

2021-03-26 15:31:10 101

原创 java----快速排序

问题描述实现快速排序解决思路升序为例[start, end] 区间的元素进行排序, 以 start 位置的元素为基准, 将小于该位置的值得元素放在该元素前面, 其余放在后面.设置两个引用 i 和 j, 让 i 指向要排序start 位置, 让 j 指向 end 结束位置 ,如果基准值小于等于 j 位置的元素, j–; 如果 基准值大于等于 i 位置的元素, i++; 直到 i 和 j 重合时, j 所在的位置就是比 基准值小的元素, 将 j 位置的元素与基准值交换, 就完成了一次排序, 然.

2021-03-25 13:27:52 81

原创 java----堆排序

问题描述用堆来实现对数组中数的原地排序堆的性质: 堆顶元素是整个数组中的最大值(大堆)或最小值(小堆).解决思路以升序为例先建立大堆将堆中的最大值也就是 0 号元素与最后一个位置的元素交换, 然后将堆中的元素减一个, 同时把现在 0 号位置的元素进行向下调整使其满足堆的性质.当队中的元素为 0 时, 排序完成.源代码public class Sort { // 堆排序 public void heapSort(int[] arr) { creat.

2021-03-25 12:55:52 93 1

原创 java----自己实现堆的建立插入删除(向上向下调整)

堆堆的性质堆的向下调整堆的向上调整堆的建立堆的插入堆的删除堆的性质①堆在物理上用数组存储, 逻辑上是二叉树的形式②小堆: 任意节点的值都不小于父节点的值大堆: 任意节点的值都不大于父节点的值堆的向下调整以小堆为例向下调整的前提:①除了要调整的位置外, 其他位置都满足堆的性质// 3, 向下调整 public void downHeap(int[] arr, int size, int index) { // 没有此位置的元素 if (index &l

2021-03-21 18:41:57 128

原创 java----自己实现二叉搜索树的增删查和中序遍历

二叉搜索树中序遍历二叉搜索树二叉搜索树的增加二叉搜索树的查找中序遍历二叉搜索树二叉搜索树的增加 // 3. 二叉搜索树的删除 public boolean remove(char c) { // 先找到该节点 TreeNode cur = root; TreeNode pre = null; while (cur != null) { int cmp = compare(c, cur.val);

2021-03-20 12:05:19 137 2

原创 java----排序总结(插入+选择+希尔+冒泡+快速+归并+堆排序)

排序1. 插入排序2. 选择排序4. 冒泡排序5. 堆排序6. 快速排序1. 插入排序 public int[] insertSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { int key = arr[i + 1]; int j = 0; for (j = i; j >= 0; j--) { i

2021-03-14 20:45:29 152

原创 java----使用前中后序遍历构建二叉树

问题描述①使用先序和中序遍历的结果, 构建二叉树②使用中序和后序便利的结果, 构建二叉树源代码// 1. 根据前序和中序构建二叉树 public TreeNode buildTreeUsePreIn(List<Character> preorder, List<Character> inorder) { TreeNode root = null; if (!preorder.isEmpty()) { int .

2021-03-14 14:51:37 166

原创 java----树的常考题(树的结点个数+叶子结点个数+某层结点树+深度+树是否相同+是否互为镜像+是否对称+是否为平衡树+是否为子树)

树习题1. 判断两棵树树是否相同2. 判断两个树是否互为镜像3. 判断一个树是否对称4. 判断一棵树是否为另一棵树的子树5. 树的最大深度6. 判断树是否为平衡树7. 叶子节点的个数8. 节点的个数9. 第 k 层结点个数10. 树的高度11. 寻找 toFind 结点习题1. 判断两棵树树是否相同 public static boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == nu

2021-03-13 20:17:55 167

原创 java----树的后序遍历(非递归)

问题描述实现树的后序遍历(非递归)源代码代码中有注释public class TreeNode { public char val; public TreeNode left; public TreeNode right; public TreeNode(char var) { this.val = var; }}import java.util.Deque;import java.util.LinkedList;public .

2021-03-12 22:12:38 730 1

原创 java----比较含有退格的字符

问题描述比较含有退格的字符( ‘#’ 该字符表示退格 ).S = “qwer#ee#c”;T = “qwer#ec”退格后的字符串为s = “qweec”;t = “qweec”因此两个字符串相等.解决思路先创建两个栈, 用于存放退格后真正的字符串.当遇到字符就进栈, 遇到 ‘#’ (该字符表示退格) 则出栈.弹出栈中元素进行比较, 不相等返回 false, 所有都相等就返回 true;源代码import java.util.Deque;import java.ut.

2021-03-12 20:35:25 178 1

原创 java----实现循环双端队列

问题描述实现循环双端队列完成头插头删尾插尾删, 判断空与满.解决思路front 指向头部元素rear 指向尾部元素的下一个元素.浪费一个空间 :判别队列为空的条件是:front == rear;;判别队列为满的条件是:(rear + 1) % capacity == front;当 rear 循环到数组的前面,要从后面追上 front,还差一格的时候,判定队列为满。源代码class MyCircularDeque { private int capacity;..

2021-03-11 23:30:53 225

原创 java----栈和队的实现( 包括循环队列 )

栈和队的实现1. 基于顺序表实现栈2. 基于链表实现栈3. 基于顺序表实现队4. 基于链表实现队1. 基于顺序表实现栈public class MyStack2 { private int[] stack = new int[100]; private int size; public void push(int e) { if (this.size == stack.length) { return; }

2021-03-09 14:34:25 111

原创 java----判断一个树是否为平衡树

问题描述判断一个树是否为平衡树解决思路1> 如果树为空, 返回 true2> 如果树不为空,求左右子树高度之差 sub,如果 sub 的绝对值大于 1, 说明不是平衡树, 返回 false.否则判断左子树和右子树是否都为平衡树求树的深度详细讲解请点击 链接: link.源代码class Solution { public int getHeight(TreeNode root) { if (root == null) { r.

2021-03-08 12:48:16 221

原创 java----判断一个树是否为另一个树的子树

问题描述判断一个树是否为另一个树的子树解决思路1> 先在树中找是否有该节点.2> 然后以该节点为树, 判断以该节点为树的树和子树是否为相同的树.判断两个树是否相同, 请点击https://blog.youkuaiyun.com/m0_50527451/article/details/114498127源代码class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {.

2021-03-08 12:28:28 315

原创 java----判断两个树是否相同

问题描述判断两个树是否相同解决思路①两个树都为空树, 返回 true . 两个树是相同.②两个树中有一个树为空, 返回 false③都不为空树.两个树的根节点的值相等两个树对应的左子树相同两个树对应的右子树相同源代码public class TreeNode { public char var; public TreeNode left; public TreeNode right; public TreeNode(char var) { .

2021-03-07 21:04:25 1082

原创 java----非递归遍历树

问题描述实现非递归遍历树①先序②中序解决思路①先序1> 特殊情况: 如果根为空, 直接返回2> 如果不为空树先将根节点压入栈中当栈不为空时, 进行循环弹出栈顶元素并输出, 然后将栈顶元素的右孩子先压入栈, 再压入左孩子 (因为栈是先进后出, 所以进行循环的时候就是左孩子先出栈.②中序1> 特殊情况: 如果根为空, 直接返回2> 如果不为空树, 设置一个 cur 引用,使其指向树的根部.当栈不空或者 cur 不为空时, 进行循环如果 cur 不为空, .

2021-03-07 15:52:56 696 4

原创 java----求树的深度

问题描述求一棵树的深度, 并返回这棵树的深度解决思路如果树为空树, 返回 0;如果树不空, 求左子树的高度和右子树的高度并取其中的较大者作为子树的高度, 原树的高度就是 求出的较大者 + 1 (这个 1 是根节点所在的位置也算一层).max(leftHeightTree, rightHeightTree) + 1;源代码 public int getHeight(TreeNode root) { if (root == null) { return .

2021-03-07 11:37:53 1387

原创 java----递归遍历树

问题描述使用递归的方法遍历树:①先序遍历②中序遍历③后序遍历源代码树中节点的表示class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { t.

2021-03-07 11:27:16 798

原创 java----求环的入口点

问题描述寻找一个链表进入环的结点并进行返回.如果无返回 null.解决思路①设置两个引用 slow, fast.②判断链表是否有环. slow 一次走一步, fast 一次走两步,如果 fast == null , 说明链表无环, 返回空如果 slow == fast , 说明走到某个结点两个相遇了, 此时链表有环.这时将这设置两个引用 cur1, cur2, 使 cur1 引用指向链表头结点, cur2 的引用指向相遇结点. 两个引用 cur1, cur2 一次往后走一步, 直到两个引用.

2021-03-07 02:19:16 132 2

原创 java----寻找链表中间结点

问题描述返回链表中间结点如果链表中元素有偶数个, 则返回两个中的第二个.解决思路①设置两个结点, 都指向链表头结点②一个结点一次走两步, 一个一次走一步,当快的结点走到最后一个节点或为空时, 慢结点所指的位置就是链表中间结点源代码public class ListNode { int val; ListNode next; public ListNode(int val) { this.val = val; }}class Soluti.

2021-03-05 19:40:00 291

原创 java----将两个升序链表合并为一个新的升序链表

问题描述将两个升序链表合并为一个新的升序链表并返回解决思路①创建一个新链表②设置两个指针 (l1 , l2), 使它们分别指向两个链表的头结点.用 l1, l2 遍历两个链表的同时, 比较两个链表的每一个结点元素的大小将较小的元素尾插到新链表中, 同时将此链表结点往后走一步.不断比较链表结点的值,不断更新链表 l1 , l2的位置, 直到 l1, l2 中任意一个走到了链表的尾部.③将 l1, l2 中没走到链表尾部,所剩余的结点直接链接到新链表的尾部.(因为它是有序链表, 如果一个走.

2021-03-05 19:12:12 1487 1

原创 java----partition将所有小于x的结点排在其余结点之前

问题描述将所有小于 x 的结点排在其余节点之前, 要求原来数据的顺序不能改变, 返回排列后链表的头结点.解决思路①设置两个链表(smallHead, bigHead) , smallHead 放小于 x 的结点, bigHead放大于或等于 x 的结点.②遍历原本的链表将小于 x 的尾插到 smallHead, 大于或等于 x 的结点尾插到 bigHead (采用尾插是因为题目要求:原来数据的顺序不能改变).源代码public class ListNode { int val; .

2021-03-05 18:46:16 290

原创 java----两个链表寻找相交结点

问题描述寻找两个链表相交的结点解决思路①先求出两个链表的长度②将两链表长度相减, 将两链表中较长的链表走两个链表长度的差值的步数, 这时两链表长度相等.③两链表一步一步走, 比较结点是否相同.若相同则返回该节点;如果直到两个链表都走到结尾了, 还不相同, 则 两链表不相交.源代码public class GetIntersectionNode { public ListNode getIntersectionNode(ListNode headA, ListNode headB.

2021-03-04 21:39:55 417 3

原创 java----整数是否为回文数

问题描述判断一个整数是否为回文数解决思路①当 整数为负数或者不为 0 且除 10 余 0 的整数时, 不是回文数.②将原来的整数分成两半, 比较相等源代码public class Solution1 { public static boolean isPalindrome(int num) { if (num < 0 || (num != 0 && num % 10 == 0)) { return false; .

2021-03-02 22:54:46 132

原创 java----赎金信(magazine 中是否包含random 中的每个字符)

问题描述两个字符串ransom, magazine.(两个字符串只由小写字母组成)magazine 中是否包含random 中的每个字符 (每个字符只能用一次)解决思路①所有字母第一次搜索时都从杂志字符串的第一个字符开始检索(也就是下表为 0 的字符开始检索)②每一个字母检索到之后, 将cap 数组中的值就行修改, 使得下一次出现相同字符时直接从上一次出现相同字符的下一个字符开始检索源代码public class Solution { public static boolean .

2021-03-02 22:36:29 160

空空如也

空空如也

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

TA关注的人

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