自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数组练习题[一]

【代码】数组练习题[一]

2024-05-31 23:28:42 20

原创 网络原理-四

当窗口大小为0,意味着缓冲区满了,此时发送方,就因该暂停发送,发送方会周期性的除法 " 窗口探测包 " ,并不携带载荷,这样的包对于业务不产生影响,只是为了触发ACK,一旦查询出来的结果是非0,缓冲区右有空间了,发送方就可以继续发送.

2024-05-30 15:55:43 448

原创 网络原理-三

建立连接,断开连接建立连接,TCP有连接的.客户端执行 socket = new Socket(SeverIP,severPort);-> 这个操作就是在建立连接.上述只是调用socket api,真正建立连接的过程,实在操作系统内核完成的.内核是怎样完成上述的 " 建立连接 "过程的呢?称为 " 三次握手 ",此处谈到的连接, "虚拟的,抽象的,"连接,目的是让通信双方都能保存对方的信息.客户端是主动的一方,第一次交互一定是由客户端发起的.所谓syn是一个特殊的TCP数据报,

2024-05-30 14:58:55 672

原创 网络原理-二

网络原理。

2024-05-30 12:09:52 957

原创 网络编程-TCP

这是Socket类,对应到网卡,但是这个类只能给服务器使用.

2024-05-26 16:47:56 219 1

原创 网络原理 一

网络通信中,协议是非常重要的概念.协议进行了分层,此处就是按照这几层顺序来介绍每一层中的核心协议.应用层,就对应着应用程序,是程序员打交道最多的一层,调用系统提供的 网络api 写出的代码都是基于应用层的.应用层这里当然也有很多现成的协议,但更多的还是,程序员根据实际场景,自定义协议. -> 网络传输的数据要怎么使用,也要考虑数据是怎么样的格式,里面包含哪些内容,协议是一种约定,虽然存在很多现有的协议,但是除此之外,程序员也可以自己来约定协议.自定义协议约定好两方面内容:1 -> 服务器和客

2024-05-26 10:47:26 781

原创 网络编程 一

Java 把系统原生的封装了.核心的类有两个:操作系统中,有一类文件,就叫socket文件.socket文件,抽象表示了 " 网卡"这样的硬件设备.进行网络通信最核心的硬件设备网卡通过网卡发送数据,就是写socket文件通过网卡接收数据,就是读socket文件UDP面向数据报,每次发送接收数据的基本单位,就是一个UDP数据报.表示了一个UDP数据报二、回显服务器这是网络编程中,最简单的程序了,网络编程的hello world客户端发什么请求返回什么请求。

2024-05-24 18:32:26 264

原创 网络初识 二

> 应用层 : 传输的数据在应用程序中如何使用-> 传输层 : 关注的是通信的起点终点-> 网络层 : 关注的是通信中的路线规划-> 数据链路层 : 关注的是相邻节点之间的通信细节-> 物理层 : 网络通信的基础设施说是五层,实际上下面这四层都是在 操作系统内核,硬件,驱动程序中已经实现好了,(计算机内置了)我们程序员在网络编程过程中能影响到的也就只有应用层了.对于一台主机,他的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层;

2024-05-24 13:28:20 1333

原创 网络初识 一

最开始的网络,计算机之间是相互独立的.比如,三个计算机分别存着各自的数据,A正在获取第一台计算机的数据,等要获取第二台计算机的数据时要移动到第二台计算机那里,B想要获取第一台计算机的数据,就要等A使用完.

2024-05-24 09:58:17 834

原创 文件IO(二)

文件流——读写文件内容读写文件内容再各种编程语言中,都是" 固定套路".1. 打开文件2. 关闭文件3. 读文件4. 写文件在java中,我们可以采用OutputStream实例来输出,即将内容写入文件.在我们构造OutputStream实例时,默认情况下,会把之前文件的内容清空,然后从头开始写.->这是因为在OutputStream打开文件时,默认就会把文件清空.我们可以像这样,在构造实例时多加一个true的参数,这样打开文件就不会将文件内容清空了.

2024-05-21 20:16:05 298

原创 文件IO (一)

文件 -> 硬盘(磁盘) 硬盘!= 磁盘计算机中的存储设备:速度 内存 价格 关机后文件1. CPU 最快 最小 最贵 丢失2. 内存 其次 其次 其次 丢失3. 硬盘 最慢 最大 最便宜 不丢失此处谈到的文件是存储再硬盘上的文件,很多的特性都和硬盘特性相关。

2024-05-21 18:25:10 912

原创 解决线程安全

compare and swap -> 是一个特殊的cpu指令,完成的工作就使 "比较和交换".我们用一段 "伪代码" 来表示他的逻辑.其中,address是我们传入的值,expectValue和swapValue是寄存器中的值.在进入if循环后,比较address内存地址中的值是否和exprctValue寄存器中的值相同.如果相同,就把swap寄存器的值和address内存中的值,进行交换 ( 赋值 ),返回true如果不相同,就什么也不做,返回false.

2024-05-19 20:10:14 680

原创 Java-线程池

池,是非常重要的概念.池,有 : 常量池、数据库连接池、线程池、进程池、内存池......池的用处:1. 提前把要用的对象准备好.2. 把用完的对象也不要立即释放,先留着以备下次使用. ( 提高效率 )最开始,进程能够解决并发编程的问题.因为进程频繁的的创建和销毁成本太高,就引入了轻量级进程 ->线程.如果创建销毁的成本进一步提高,此时线程的创建和销毁也不能无视了.此时,就要想办法解决线程的创建和销毁带来的问题.有两种解决方法 :1. 引入轻量级线程 ->纤程/协程。

2024-05-19 18:39:21 714

原创 实现计时器

Java的标准库中,为我们提供了 计时器 的实现,让我们先来试着使用它.创建timer实例后,我们可以调用schedule方法进行传参,第一个参数是要执行的方法,第二个参数是需要等待的时间.

2024-05-19 17:01:21 242

原创 synchronized内部的工作原理

synchronized内部优化的非常好,大部分情况下使用 synchronized 不会有什么问题.1. 乐观锁/悲观锁 自适应2. 轻量级锁/重量级锁 自适应3. 自旋锁/挂起等待所 自适应4. 不是读写锁5. 非公平锁6. 可重入锁。

2024-05-19 11:04:26 473

原创 锁的策略(二)

类似于synchronized 操作涉及到加锁和解锁。

2024-05-19 10:38:23 285

原创 多线程-锁的策略

加锁过程中,处理冲突的过程中,涉及到一些不同的处理方式.

2024-05-18 16:48:19 540

原创 实现阻塞队列

在上图中和,我们可以看到,在A接收到信息后,分为两种情况分别传给B和C去执行.其中,A做的工作比较简单,每个请求消耗的资源少,主要的工作由B和C去执行,但是,这时候会出现一种情况 : 如果某一段时间内,传输的信息量暴增,达到了峰值就会导致服务器出现问题,甚至直接挂掉.比如在以前双十一的时候,购买的用户剧增,就会导致服务器的压力变得非常打.这时候,就可以用到阻塞队列了.在A和B、C之间引入一个阻塞队列.队列没什么业务逻辑,只是存储数据,抗压能力是比较强的.

2024-05-17 09:00:00 397 1

原创 Java-阻塞队列

1. 引入生产者消费模型,就可以更好的做到 " 解耦合 ". -> 把代码的耦合程度,从高到低,就成为 -> 解耦合.1 -> 上述描述的 阻塞队列,并非是简单的数据结构,而是基于这个数据结构实现的服务器程序,又被部署到单机的主机上了.3 -> 效率.引入中间商,还是有差价的.请求从 A 发出来到 B 收到,这个过程中就经历队列的转发.此时,A的代码中,只需要和 队列交互,不知道B、C的存在.B,C的代码中,也只需要和队列交互,,不知道A的存在.如果B,C挂了,对于A的影响是微乎其微的.

2024-05-15 23:15:05 235

原创 Java-单例模式

单例模式,是一种设计模式.单例=单个实例(对象)某个类,在一个进程中,只应该创建出一个实例(原则上不应该有多个)使用单例模式,就可以对代码进行一个更严格的校验和检查.实现单例模式的方式有很多种,

2024-05-14 22:35:14 898 2

原创 多线程(八)

等待 通知 机制和join的用途类似,多个线程之间随机调度,引入 wait notify 就是为了能够从应用层面上,干预到多个不同线程代码的执行顺序.( 这里说的干预,不是影响系统的线程调度策略 内核里的线程调度,仍然是无序的.相当于是在应用程序代码中,让后执行的线程,主动放弃被调度的机会,就可以让先执行的线程,先把对应的代码执行完了.

2024-05-14 13:56:11 536 2

原创 多线程(七)

1. 可重入性以上代码中,我们可以看到,我们在synchronized中又使用了一次.在之前多线程的学习中,我们可以知道,使用synchronized进行加锁时," { " 代表加锁 -> " } "代表解锁.那么,本次代码中,第一个synchronized进行加锁,但是并没有解锁,第二个synchronized为什么可以加锁并执行其中的内容呢?这是因为,这两次加锁是在同一个线程中的.

2024-05-14 11:53:59 763 1

原创 Java线程的几种状态

1 New2 TERMINATED3 RUNNABLE4 TIMED_WAITING5 WAITING6 BOLCKED1 NEWThread对象创建好了,但是还没有调用start方法在系统中创建线程.2 TERMINATEDThread对象仍然存在,但是系统内部的线程已经执行完毕了.3 RUNNABLE就绪状态,表示这个线程正在CPU上执行,或者准备就绪,随时可以去CPU上执行.4 TIMED_WAITING指定时间的阻塞,在达到一定时间后会自动解除阻塞.使用sleep会进入这个状态.使用带有超时

2024-05-12 16:17:31 151

原创 多线程(六)

1.根本原因 -> 操作系统上的线程使 " 抢占式执行 " " 随机调度 " -> 线程之间执行的顺序带来了很多变数.2. 代码结构 -> 代码中多个线程,同时修改同一个变量3. 直接原因 -> 上述多线程修改操作,本身不是 " 原子的4. 内存可见性问题5. 指令重排序问题。

2024-05-11 20:21:32 232 1

原创 Thread类的基本用法

如果是Runnable或者lambda表达式,this就无能为力了,此时this不再指向Thread对象了.Thread.currentThread() ->获取到当前线程的引用 (Thread的引用)如果是继承Thread,直接使用this拿到线程的实例.就只能使用Thread.currentThread();使用sleep方法可以使线程进入休眠.

2024-05-11 19:25:22 606 1

原创 多线程(五)

多线程,再我们现在的程序中是非常常见的,我们所能看见的程序,90%以上都是使用多线程.因为现在的CPU都是多核心的,如果使用一个单线程的程序,这个程序最多只能把一个CPU吃满,剩下的CPU就浪费了. 正所谓 " 一核有难,多核围观 "为了提高CPU的使用率,因此就引入了多线程,每个线程负责完成其中的一部分工作.

2024-05-11 15:22:41 772 1

原创 多线程(四)

在java中看,线程的终止,是一种"软性"操作.必须要对应的线程配合,才能把终止落实下去.相比之下,系统原生的api,其实还提供了,强制终止线程的操作.无论你线程是否愿意配合,无论线程执行到哪个代码,都能强行把这个线程给终止了.不过,这样的操作在java中是没有提供的,这种强制执行的做法,弊大于利.如果强行终止一个线程,很可能线程执行到一半,就可能会出现一些残留的临时性质的"错误"的数据.假设这个线程正在执行 写文件 操作,写文件的数据有一定的格式要求,(图片文件)

2024-05-11 12:28:19 835 1

原创 多线程(三)

在我们进行编程时,重写好run方法后,就可以调用start创建出新的线程.start创建线程本质上是start会调用系统的api,来完成创建线程的操作.有这么一个面试题,问 : start和run区别start和run 这两个是八竿子打不着的,互不干涉的内容,在main中调用start,是创建一个新的线程,新的线程由run方法进入,开始执行线程.而在main中调用run,是调用run方法,在main线程中执行run方法中的内容.

2024-05-10 22:50:20 761 2

原创 多线程(二)

进程多任务操作系统描述 : PCB 组织 : 链表线程轻量级进程同一个进程的多个线程共享一份系统资源( 创建线程,就省去了申请资源开销. 销毁线程,也省去了资源释放的开销.)每个线程,都是一个独立的执行流,都可以独自参与CPU的调度.每个进程,就会包含多个线程了,多个线程共享同一份资源(内存 + 文件描述符表)操作系统为我们在编程时提供了一些操作线程的api,由于操作系统都是C/C++实现的,所以提供的api也都是C/C++的。

2024-05-10 14:24:20 1026 1

原创 多线程(一)

多任务操作系统,希望系统能够同时运行多个程序.如果是单任务系统,完全不涉及进程,也不需要管理,更不需要调度.本质上来说,进程解决"并发编程"这样的问题.进程是可以很好地解决"并发编程"这个问题的.但在一些特定的情况下,进程的表现不尽人意.比如,在有些场景下,需要频繁的创建和销毁进程的时候,此时使用多进程编程,系统开销就会很大.早期,有一种CGI这样的技术,——基于多进程的编程模式.

2024-05-09 22:09:55 547 1

原创 计算机是如何工作的

核心结论 : 每个进程的内存,是彼此独立的,互补干扰的.通常情况下,一个进程不能直接访问另一个进程的内存.这是为了系统的稳定性,这样的情况下,如果一个进程出现了bug,导致进程崩溃了,也只是影响到了自己的那一个进程,而不会影响别的进程,这个情况也称为"进程的独立性".

2024-05-08 22:30:32 194 1

原创 计算机是如何工作的

核心数,是多个核心的运算能力,通过在编程中引入一些特殊的方式,来把多个CPU核心给利用起来,也就是我们所说的并发编程.

2024-05-08 12:52:23 591 1

原创 计算机是如何工作的

在这个科技飞速发展的时代,计算机已经非常的普及,计算机可以给我们很多的帮助,我们可以利用计算机做到查询自己需要的各种信息等等的事情,对我们的生活可以说是非常方便.那么,在我们开来,只要按下开机键就可以进行使用的计算机是如何工作的呢?接下来.就让我们来探索计算机是如何工作的.

2024-05-05 21:50:53 906

原创 初识数据结构

初识数据结构

2023-11-18 20:37:08 18 1

原创 C语言指针进阶

1.指针是一个变量,用来存放地址,地址唯一标识一块内存空间。2.指针的大小是固定的4/8个字节。(32/64位平台)。3.指针具有类型,指针的类型决定了指针的加减整数的步长。4.指针可以运算。

2023-07-26 21:27:08 28 1

原创 数据在内存中的存储

数据在内存中的存储

2023-07-18 13:43:00 113 1

原创 csdn第一篇

在大学已经玩了一年半了,现在看过去的时光,可以说是一事无成,而自己又对计算机感兴趣,所以决定开始学习c语言,不求未来的自己能有多厉害,但至少能问心无愧,让自己觉得大学的这些时光没有被浪费。现在计划每天学3-4个小时的c语言,努力提升自己。大家好,我是一个信管的学生。

2023-04-19 16:13:30 31 1

空空如也

空空如也

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

TA关注的人

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