自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HTTP 协议的基本格式

HTTP(HyperText Transfer Protocol,超文本传输协议)是用于分布式、协作式、超媒体信息系统的应用层协议。它基于TCP/IP协议栈进行工作,用于从WWW服务器传输超文本到本地浏览器的传送协议。HTTP协议的基本格式包括请求(Request)和响应(Response)两部分,下面分别介绍它们的基本格式。

2024-09-19 21:17:15 360

原创 fiddler 的用法

Fiddler是一款强大的网络调试代理工具,它允许用户捕获、查看、修改和重放HTTP/HTTPS流量。

2024-09-19 09:36:15 555

原创 总结数据链路层相关知识

数据链路层是OSI(开放系统互联)参考模型中的第二层,位于物理层之上,网络层之下,负责在相邻节点之间提供可靠的数据传输服务。

2024-09-14 22:15:38 471

原创 总结 IP 协议的相关特性

IP协议(Internet Protocol)是互联网中至关重要的网络层协议,它负责在不同网络之间传输数据包。

2024-09-14 22:09:57 439

原创 TCP 协议的相关特性

TCP(Transmission Control Protocol)协议是一种常用的网络传输协议,它具有多个重要特性,这些特性共同保证了数据传输的可靠性、高效性和有序性。

2024-08-21 10:46:01 362

原创 UDP 的报文结构和注意事项

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,它提供了一种简单的数据传输服务,但不保证数据的可靠传输。UDP的报文结构相对简单,主要由以下几个部分组成,同时在使用UDP时也有一些需要注意的事项。

2024-08-14 19:41:30 400

原创 网络中的一些基本概念

封装(Encapsulation)是指在网络通信过程中,将上层协议的数据包添加必要的控制信息(如头部和尾部)以形成下层协议可以识别的数据包的过程。例如,在应用层生成的数据包会被传输层封装成TCP或UDP段,然后网络层再将TCP/UDP段封装成IP数据包,最后数据链路层将IP数据包封装成帧进行传输。TCP/IP协议族采用了四层结构(应用层、传输层、网络层、数据链路层),而OSI模型则采用了七层结构(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)。然后,网络层将数据包传递给数据链路层。

2024-08-04 14:27:27 819

原创 File 类的用法

File类是 Java 中的一个重要类,它位于java.io包中。File类代表文件和目录路径名的抽象表示形式。虽然File类可以表示文件或目录,但它本身不直接负责数据的读写操作;相反,它提供了检查文件属性(如大小、修改时间等)和管理文件(如创建、删除、重命名等)的方法。

2024-08-03 16:33:23 333

原创 InputStream 和 OutputStream 的用法

和是 Java I/O 库中的两个核心抽象类,它们分别用于表示字节数据的输入和输出流。这两个类本身不能直接实例化,但你可以通过它们的子类来创建具体的输入或输出流对象。下面将详细介绍和的基本用法。

2024-08-03 16:30:34 188

原创 IO、存储、硬盘、文件系统相关常识

定义IO(输入/输出)是一个广泛的概念,通常指代计算机与外部设备(如键盘、鼠标、打印机、显示器等)或其他计算机组件(如磁盘、网络等)之间的数据交换过程。IO操作可以涉及到多种类型的数据传输和设备。分类同步IO:在操作完成前会阻塞执行线程。异步IO:允许执行线程在操作完成前继续执行其他任务。IO流在编程领域,IO流是实现IO操作的一种方式,它是以顺序、连续的方式处理数据的抽象概念。IO流分为输入流和输出流,用于处理文件读写、网络通信和内存操作等任务。

2024-08-01 17:19:35 348

原创 CAS的优化过程

ABA问题是指当CAS操作在比较内存中的值和预期值时,如果两者相等,就进行更新操作。但是,如果在比较和更新之间,内存中的值被其他线程修改后又改回了原来的值,那么CAS操作就会误判为没有变化而成功执行,这可能导致数据不一致的问题。:当CAS操作失败时,线程不是立即放弃,而是进行自旋等待,即在一个小的循环中重复尝试CAS操作。自旋等待可以减少线程上下文切换的开销,特别是在锁竞争不激烈的情况下,可以显著提高性能。CAS操作是在硬件层面上提供的原子操作,现代处理器通常会对这类操作进行优化,以提高执行效率。

2024-07-26 23:02:04 422

原创 synchronized 优化过程

如果CAS操作成功,线程就获得了锁;synchronized的优化过程是一个动态的过程,它根据线程的竞争情况和JVM的优化策略来选择合适的锁状态和转换机制。:在轻量级锁状态下,如果线程自旋等待锁的时间较短并且能够成功获取锁,那么JVM会增加下一次自旋等待的时间;这些状态之间会根据线程的竞争情况进行升级,但升级过程是不可逆的,即一旦升级为更重量级的锁,就不会再回退到较轻量级的锁。:如果代码中存在多个连续的加锁和解锁操作,JVM会尝试将这些操作合并成一个更大的锁范围,以减少锁的申请和释放次数,从而提高性能。

2024-07-26 22:41:17 309

原创 常见的锁策略

在某些读写锁的实现中,还支持锁的降级(将写锁降级为读锁)和升级(将读锁升级为写锁),但这通常涉及到复杂的同步逻辑和潜在的死锁风险。:重量级锁是基于操作系统的互斥量(Mutex Lock)而实现的锁,会导致进程在用户态和内核态之间切换,相对开销较大。:线程在等待锁的过程中会进行自旋,即不断检测锁的状态。:适用于需要嵌套同步代码块的场景,或者一个线程在持有锁的情况下,需要再次进入该锁保护的同步代码块。:支持锁的嵌套获取,即同一个线程在持有锁的情况下,可以再次进入该锁保护的同步代码块或方法。

2024-07-26 22:18:06 395

原创 关于线程池

RejectedExecutionHandler handler: 拒绝策略,当线程池和任务队列都无法处理新的任务时,会调用这个策略的rejectedExecution方法来处理被拒绝的任务。TimeUnit: keepAliveTime参数的时间单位,可以是纳秒(NANOSECONDS)、微秒(MICROSECONDS)、毫秒(MILLISECONDS)、秒(SECONDS)、分钟(MINUTES)、小时(HOURS)或天(DAYS)。maximumPoolSize: 这是线程池能容纳的最大线程数。

2024-07-24 21:02:09 846

原创 线程安全出现的原因和解决方案

即通过关键字synchronized,将锁对象锁定在(),使执行的代码块{}打包成一个整体代码执行。被锁定对象进入代码块开始到代码块执行完成,整个过程像一条指令执行,不会被打断,直到代码块执行完毕(return/抛出异常),被锁定对象才被解锁。程序运行时,出现一个线程修改内存,一个线程读取内存过程中,由于JVM自动优化出现误判引起的。如果一个线程对某对象加了锁,而另外一个线程也企图对该对象加锁,就会出现“阻塞”(锁竞争/锁冲突)。1.操作系统方面:对线程的调度,是抢占式执行的随机过程。

2024-07-18 22:02:54 159

原创 进程和线程的区别和联系

进程的组织 创建一个新的进程(双击EXE文件,运行可执行程序),就相当于创建了一个PCB结构体,使用数据结构,把多个这样的结构体串起来,形成链表。进程的描述 通过结构体/类(主流系统是用C/C++实现的,广泛用到结构体struct),对于linux系统,使用进程控制块即PCB这样的结构体来描述进程信息,一个进程是一组PCB。内存指针(一组)指示进程运行的指令和数据区域,系统运行应用程序时,需要占用系统的内存资源,读取的指令和数据都是加载到内存中,通过内存指针找到相应的存储地址。

2024-06-11 19:55:24 729

原创 进步的标尺

喜欢文学的人,都希望自己读过所有经典文学名著。喜欢功夫的人,渴望遍修天下武功秘籍。我也许会成为一名码农,但我更想成为码霸!今天是第一次发博客,也是我的起跑线,也希望它能成为我进步的标尺。但现在必须从C语言开始!

2023-07-09 20:51:42 51

空空如也

空空如也

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

TA关注的人

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