操作系统
文章平均质量分 52
水果篮子~
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用Socket API实现简单的回显服务器
一、客户端逻辑 1.先启动客户端,和服务器建立连接【一定不要绑定端口号(由操作系统自动分配)】 2.进入主循环 a)读取用户输入内容 b)构造一个请求发送给服务器 c)读取服务器的响应数据 d)把响应数据显示到界面上 package com.it.bite.TcpEchoServer1; import java.io.*; import java.net.Socket; import java.util.Scanner; /** * @pro...原创 2021-08-12 21:41:47 · 234 阅读 · 0 评论 -
编写一个简单的Servlet服务器
使用到的工具技术: IDEA maven(IDEA自动集成了maven,所以不需要安装) tomcat(在官网上下载安装) Servlet API 1.创建一个maven 项目 2.我的IDEA自动创建的maven项目目录结构是这个样子(不同的机子创建出来的可能有差异),不过后面的目录结构修改一下就可以。 3.创建一个存放源码的目录 最终的目录结构是这个样子~~ 4.导入Servlet的依赖【此处需要注意,Servlet的版本应该和Tomcat版本相对应,我的To..原创 2021-08-12 21:23:56 · 465 阅读 · 0 评论 -
从浏览器输入url,到最终看到页面,经历了哪些过程?
一、站在网络原理的角度来看 1.输入的 URL 会先触发 DNS (先查浏览器缓存,再查 hosts 文件,再查 DNS服务器) 2.构造 HTTP 协议的数据报。 从浏览器中输入,那请求方法是GET,URL是输入的 URL,另外浏览器会自动添上一些报头, 接下来这个数据报就会被交给传输层。 3.TCP 就会把这个数据构造成一个 TCP 数据报。 (在构造这个包之前,已经进行过三次握手了) TCP构造完成后交给 IP协议 4.IP 协议构造成一个 IP 数据报 此处要根据数...原创 2021-08-11 16:55:52 · 995 阅读 · 0 评论 -
TCP协议
一、TCP基本特点 1.有连接 2.可靠传输 3.面向字节流 二、TCP 的核心特性 1.确认应答。 序号和确认序号的含义: 序号:每个字节都有一个自己的编号【虽然每一个报文里面都有确认序号这四个字节,但是并不是说随便一个报文,这里的序号都有意义,只有ACK的状态为为1的时候,序号才是有意义的】 确认序号:表示该序号之前的数据都已经确认收到了 2.超时重传 消息由发送方发送了之后,隔了好长时间都没有收到响应,大概率是丢包了。发送方无法区分是数据报丢了,还是 ack 丢了,此时会触发重传机.原创 2021-08-10 21:22:31 · 258 阅读 · 0 评论 -
文件操作(列出某一个目录下的所有文件)
一、File文件操作相关的类 在 java.io 包之中,用 File 类来对文件进行操作(创建、删除、取得信息等) 官方文档对于File类的说明 java.io.File 类是一个普通的类,如果要实例化对象,则常用到两个构造方法 public File(String pathname) 创建指定路径文件对象 public File(String parent, String child) 同上,但可指明父路径和子路径 二、基本文件操作 方法 ...原创 2021-08-09 11:28:09 · 2644 阅读 · 0 评论 -
简易版本的定时器
一、定时器的应用场景: 浏览器内部就有一个定时器,发送了请求之后,定时器就开始计时,如果在规定的时间内,响应数据没有返回,那么定时器时间到,就会终止这样的请求。 二、自己实现一个简单版本的定时器 定时器的构成: 1.使用一个 Task 类来描述 “一段逻辑”(一个要执行的任务),同时也要记录这个任务在什么时候来执行 2.使用一个 阻塞优先队列来组织若干Task 阻塞优先队列:既支持阻塞的特性,又支持按优先级的“先进先出”,本质上是一个“堆”。 此处使用优先队列是为了保证队首元素就是那个最早要.原创 2021-08-09 11:13:44 · 387 阅读 · 0 评论 -
HTTP协议
一、HTTP协议 (1)HTTP 请求的组成: 1.首行(方法,url,版本号) 2.header(每一行是一个键值对,使用冒号空格区分键和值) 3.空行(header的结束标记) 4.body(正文内容,长度取决于Content-Length,类型取决于Content-Type) (2)HTTP响应的组成: 1.首行(版本号,状态码,状态码描述) 2.header 3.空行 4.body 可以使用抓包工具fiddle查看HTTP请求和响应的组成。 (3)HTTP 中常见的方...原创 2021-08-06 20:49:19 · 172 阅读 · 0 评论 -
OSI模型和TCP/IP模型
一、OSI模型 七层模型存在于理论课本上,真实的网络模型是TCP/IP五层模型~ 二、为什么分层? 1.避免某个协议过于庞大复杂(和写代码是一个道理,如果某个文件太大了,就需要拆分成多个文件) 2.分层之后,协议之间“解耦合”,上层协议不需要理解下层协议的细节实现,相当于“封装” 3.分层之后,任意层次的协议,可以灵活替换 TCP/IP五层(或四层)模型 这里包含的协议很多,其中典型代表,就是TCP协议和IP协议 传输层:负责端到端之间的传输(只关注起点和终点) 网络层:负责点到点之..原创 2021-08-04 21:25:51 · 286 阅读 · 0 评论 -
网络编程(最简单的客户端服务器)
网络编程基础预备 客户端:主动发起请求的一方,客户端给服务器发送的数据”请求“(Request) 服务器:被动接收请求的一方,服务器给客户端发回的数据”响应“(Response) IP地址:用来识别互联网上的一台主机的位置 端口号:用来区分一台主机上的哪个应用程序 1.一次通信过程中,涉及五个概念: 源IP:发件人地址 源端口:发件人姓名 目的IP:收件人地址 目的端口:收件人姓名 协议类型 IP本质上是一个32位的整数,常用的表示方式:使用三个.把这个整数分为四个部分,每个部分一原创 2021-08-04 19:40:14 · 707 阅读 · 0 评论 -
序列化和反序列化
序列化:把一个结构化数据(对象) 变成一个二进制bit流(可以把这个bit流保存到文件,或者通过网络传输)。 反序列化:把二进制bit流还原回原来的对象。 目的: 序列化和反序列化最大的目的:就是为了让对象能通过网络传输/能够在文件中保存。 序列化和反序列化的过程中要保证“信息不丢失”,如果丢失了,就无法还原出一摸一样的对象了。 如下代码是java自带的序列化方式~借助流对象来完成的。 package com.java.bite.Buffered_IO_Stream2; import ja原创 2021-08-03 21:29:28 · 168 阅读 · 0 评论 -
IO流的基本操作
一、流是什么? File中虽然能进行一些常规的文件操作,但是这里少了两个非常核心的操作,java中针对文件操作,又进行了进一步的抽象~。 流是一组类/API,描述了如何来进行文件读写操作~ 读文件 写文件 二、IO流分类 所有 IO流 相关的类,一共分为两大部分 1.字节流读写数据以字节为基本单位字节(byte)。 2.字符流读写数据以字符为基本单位字符(char)。 处理文本文件/数据的时候,使用字符流。 处理二进制文件/数据的时候,使用字节流。 三、什么是文本文件?什么...原创 2021-08-03 21:25:46 · 669 阅读 · 0 评论 -
内存不可见性
1.单例模式 是一种常见的“设计模式” 场景:代码中的有些概念,不应该存在多个实例。 此时应该使用单例模式来解决。 例如:MySQL JDBC 如 DataSource 这样的类,就应该是在一个程序中只有一个实例, 不应该实例化多个DataSource对象 就可以在代码中通过单例模式解决以上场景,保证指定的类只能有一个实例(如果尝试创建多个实例,编译器就会报错) 2 两种典型的方式实现单例模式: 1.饿汉模式 2.懒汉模式 1 饿汉模式 public class singleP原创 2021-08-01 21:42:59 · 212 阅读 · 0 评论 -
对象等待集
1 内存不可见性 一个线程读,一个线程写,读线程读的操作太频繁,导致读被优化掉了(优化成直接CPU的寄存器取上次的结果),就会导致另外一个写线程来写数据的时候,就会出现问题。,写的结果读线程感知不到。 1.1 解决方案: volatile关键字 volatile 相当于强行禁止编译器对读操作的优化 ~ 牺牲了性能但是换来了结果的正确性。 作用:保持内存可见性 一种解决特定场景的线程安全问题的方案。 2 对象等待集 2.1 背景: 一个线程频繁加锁解锁,占用CPU,导致其他线程无法获取到CP..原创 2021-08-01 21:40:11 · 137 阅读 · 0 评论 -
线程安全和锁
1 线程安全 1.1 概念 线程安全:多线程并发执行某个代码的时候,没有产生逻辑上的错误,就是“线程安全”。 线程不安全:多线程并发执行某个代码的时候,产生了逻辑上的错误,就是“线程不安全” 1.2 线程不安全产生的原因 线程是抢占式执行的(线程不安全的万恶之源)。 操作不是原子的。 多线程同时修改同一个变量。 1.3 线程不安全解决方案——加锁 使用到的关键字synchroniced synchronized的几种常见用法 加到普通方法的前面 加到静态方法前,表示锁当前类的类对象原创 2021-07-31 20:31:31 · 241 阅读 · 0 评论 -
进程和线程
1 进程 1.1 什么是进程 一个可执行文件运行起来,就可以看作是一个进程,进程是操作系统分配资源的最小单位。 1.2 怎么描述进程? 内核中使用进程控制块(PCB)来描述一个进程,每创建一个进程就会同时创建一个PCB这样的类的实例。 描述使用的PCB 组织使用的链表 1.2.1PCB包含哪些信息? pid(进程id):身份标识 一组内存指针:指向进程运行时依赖的指令和数据在内存的哪个位置 进程的状态:是正在运行还是休眠 进程的优先级:这个进程是优先于CPU执行还是放到后面 进程..原创 2021-07-29 21:45:52 · 142 阅读 · 0 评论
分享