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