自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 个人的练习

【代码】个人的练习。

2023-05-17 18:09:41 201

原创 网络原理之初识

目录一、网络发展史1. 独立模式2. 网络互连2.1 局域网 LAN2.2 广域网WAN二、网络通信基础1. IP地址2. 端口号3.协议3.1 概念3.2 为什么需要协议?3.3知名协议的默认端口4. 五元组5. 协议分层5.1 什么是协议分层5.2 协议分层的作用6. OSI七层模型7.TCP/IP五层(或四层)模型8. 网络设备所在分层9. 封装和分用图解一、网络发展史1. 独立模式...

2022-05-17 21:02:20 707

原创 线程池(Thread Pool)

解决并发编程使用了多进程的方法,但是由于进程的创建/销毁的开销太大了,就引入了更轻量的线程。线程相比于进程的创建/开销就快很多,但是频繁的创建销毁线程,线程的创建销毁开销也无法忽视。因此可以引入线程池。使用线程的时候,不是说需要使用的时候才创建,而是提前创建好很多线程(实际中也可能按需创建)。当我们有新任务时,就交给储备的线程去处理。1.Java标准库中的线程池ThreadPoolExecutor提供了更多的可选参数,可以进一步细化线程池行为的设定。我们可以用一个公司的正式...

2022-05-16 18:46:56 681

原创 多线程案例--定时器

1. 定时器的概念定时器也是软件开发中的一个重要组件. 类似于一个 “闹钟”. 达到一个设定的时间之后, 就执行某个指定好的代码。示例: 比如访问某个网站,网站卡了,浏览器就会转圈圈,但是不会无限转下去,当等到一定的时间就会显示"超时访问"。2.Java标准库中的定时器标准库中提供了一个Timer类, 核心方法就是schedule() schedule包含了两个参数,第一个参数指定即将要执行的任务代码, 第二个参数指定多长时间之后执行 (单位为毫秒)使用示例:import j...

2022-05-11 11:09:00 186

原创 线程安全问题

1. 观察线程不安全接下来我们现象演示什么是线程不安全:在代码“没有问题”的情况下,但结果是错误的(无法100%得到预期的结果)// 演示线程不安全的现象public class Main { // 定义一个共享的数据 —— 静态属性的方式来体现 static int r = 0; // 定义加减的次数 static final int COUNT = 100000; // 定义两个线程,分别对 r 进行 加法 + 减法操作 static c.

2022-05-10 21:23:38 653

原创 多线程(初阶)

1. 线程1.1 线程的提出在进程的学习中,我们了解到引入进程就是为了“并发编程”,虽然进程能解决并发的问题,但是我们认为还不是不够理想。因为创建进程/销毁进程/调度进程,开销有点大:创建进程需要分配资源; 销毁进程需要释放资源;频繁的创建和销毁进程就会开销较大。于是就有了“线程”(Thread)的 概念,线程在有些系统上也叫做"轻量级进程"。1.2 线程的概念一个线程就是一个 “执行流”.,每个线程之间都可以按照顺讯执行自己的代码.,多个线程之间 “同时” 执行着多份代码

2022-05-09 16:46:56 250

原创 一、认识进程

目录1.冯诺伊曼体系结构2.操作系统3. 进程3.1 什么是进程3..2 进程在系统中是如何被管理的3.3 进程控制块3.4 操作系统的并发和并行式执行3.4.1 并发式执行3.4.2 并行式执行3.5 进程的状态3.6 内核态与用户态3.7 进程的虚拟地址空间1.冯诺伊曼体系结构 冯诺依曼结构计算机的五大基本构件:存储器: 用来存放数据和程序 运算器: 主要运行算数运算和逻辑运算,并将中间结果暂存到运算器中 控制器: ...

2022-04-25 16:15:26 921

原创 LeetCode160. 相交链表

题目描述:给你两个单链表的头节点headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据保证整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构。示例:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3输出:Intersect...

2021-12-05 21:50:52 139

原创 LeetCode 142. 环形链表 II

题目描述:给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改链表。示例:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 ..

2021-12-05 21:15:56 149

原创 LeetCode 141

题目描述:环形链表给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。提示:链表中节点的数目范围是[0, 104] -..

2021-12-05 20:23:43 167

原创 LeetCode 234

题目描述:回文链表给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。提示:链表中节点数目在范围[1, 105]内 0 <= Node.val <= 9示例:输入:head = [1,2,2,1]输出:true题目分析:找到原链表的中间节点并反转中间节点之后的子链表//偶数个节点的情况1-->2-->2-->1中间节点的子链表:2-->1 reverse 1-...

2021-12-05 20:00:12 696

原创 剑指 Offer II 021. 删除链表的倒数第 n 个结点

题目描述:给定一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。提示:链表中结点的数目为sz 1 <= sz <= 30 0 <= Node.val <= 100 1 <= n <= sz示例一:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例二:输入:head = [1], n = 1输出:[]代码实现:package LeetCode; //时间复杂度O(...

2021-12-05 19:07:51 319

原创 剑指 Offer 22. 链表中倒数第k个节点

题目描述:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.题目分析:给定一个k值,需要返回以倒数第k个节点为头节点的子链表。因为单链表只能从头向后遍历,因此可以引入.

2021-12-05 18:37:52 123

原创 LeetCode 876

题目描述:链表的中间结点给定一个头结点为head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。提示:给定链表的结点数介于1和100之间。示例一:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans....

2021-12-05 17:59:40 143

原创 LeetCode 206

题目描述:反转链表给你单链表的头节点head,请你反转链表,并返回反转后的链表。提示:链表中节点的数目范围是[0, 5000] -5000 <= Node.val <= 5000例如:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]方法一:边遍历原链表,边创建一个新链表(题目中没有对空间复杂度的要求),头插法插入即可。addFirst(5->4->3->2->1);如下图所示:代码实现...

2021-12-05 00:10:51 693

原创 LeetCode 82

题目描述:删除排序链表中的重复元素 II存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中没有重复出现的数字。返回同样按升序排列的结果链表。示例:输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]解法:/** * 删除链表中所有重复元素 */public class Num82 { public ListNode deleteDuplicates(ListNode h...

2021-12-04 16:31:32 288

原创 LEETCode 83

题目描述:删除排序链表中的重复元素存在一个按升序排列的链表,给你这个链表的头节点head,请你删除所有重复的元素,使每个元素只出现一次。返回同样按升序排列的结果链表。提示:链表中节点数目在范围[0, 300]内 -100 <= Node.val <= 100 题目数据保证链表已经按升序排列输入:head = [1,1,2] 输出:[1,2]解法:/** * 删除排序链表的重复元素,重复元素保留1次 */publ...

2021-12-04 16:22:10 280

原创 Java 单链表(增删改查操作)

一、单链表介绍单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以节点来表示的,每个节点的构成:data域(数据元素)+next域(下一个结点的存储位置)。 单链表与数组相比的最大差别是:单链表的数据元素存放在内存空间的地址是不连续的,而数组的数据元素存放的地址在内存空间中是连续的,这也是为什么根据索引无法像数组那样直接就能查询到数据元素。对于单链表的这种特殊结构,我们可以用“火车”来类比,假设一节车厢可以存储一个数据元素,当数据不够时,就新增一节车.

2021-12-01 21:39:21 2491

原创 Java 数组练习

1.数组转字符串

2021-11-29 20:48:25 246

原创 Java 数组的定义与使用

一、数组基本用法1.定义数组:存放相同数据类型的一个集合。 数组的本质就是让我们能“批量”创建相同类型的变量。2.创建数组的基本语法// 动态初始化数据类型[] 数组名称 = new 数据类型 [] { 初始化数据 };// 静态初始化数据类型[] 数组名称 = { 初始化数据 };代码示例:int[] arr = new int[]{1, 2, 3};int[] arr = new int[3];int[] arr = {1, 2, 3};3.数组的使用

2021-11-29 18:44:57 252

原创 Java 方法(基本用法、方法重载、方法递归)

一、方法的基本用法1.方法的定义方法就是一个代码片段,类似于C语言中的“函数”,每个方法都能表示一种能力或行为。2.方法的定义语法//方法定义 public static 返回值声明 方法名称 ([参数类型] [参数名称]){ 方法体代码; [return 返回值]; }注意事项:方法定义时,参数可以没有。每个参数要指定类型。方法定义时,返回值也可以没有,如果没有返回值,则返回值类型应该写为void。(判断一个方

2021-11-29 10:36:13 826 4

空空如也

空空如也

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

TA关注的人

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