面试
文章平均质量分 68
学长是个程序员
这个作者很懒,什么都没留下…
展开
-
常见前端基础面试题(HTML,CSS,JS)(七)
浏览器有一个重要的安全策略,称之为其中,必须一致,,称之为同源,两个源不同,称之为跨源或跨域。原创 2023-08-21 09:14:11 · 47 阅读 · 0 评论 -
常见前端基础面试题(HTML,CSS,JS)(六)
从 http 协议的角度来说,GET 和 POST 它们都只是请求行中的第一个单词,除了语义不同,其实没有本质的区别。之所以在实际开发中会产生各种区别,主要是因为浏览器的默认行为造成的。受浏览器的影响,在实际开发中,GET 和 POST 有以下区别:浏览器在发送 GET 请求时,不会附带请求体GET 请求的传递信息量有限,适合传递少量数据;POST 请求的传递信息量是没有限制的,适合传输大量数据。GET 请求只能传递 ASCII 数据,遇到非 ASCII 数据需要进行编码;POST 请求没有限制。原创 2023-08-21 09:13:58 · 47 阅读 · 0 评论 -
常见前端基础面试题(HTML,CSS,JS)(五)
JavaScript 具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。JavaScript 常见的垃圾回收方式:标记清除、引用计数方式。浅拷贝:只是拷贝了基本类型的数据,而引用类型数据,复制后也是会发生引用,我们把这种拷贝叫做浅拷贝(浅复制) 浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。深拷贝:在堆中重新分配内存,并且把源对象所有属性都进行新建拷贝,以保证深拷贝的对象的引用图不包含任何原有对象或对象图上的任何对象,拷贝后的对象与原来的对象是完全隔离,互不影原创 2023-08-19 11:02:46 · 158 阅读 · 0 评论 -
常见前端基础面试题(HTML,CSS,JS)(四)
js在调用时,优先取出微任务,并且在执行过程中如果创建了新的作业,则放在本次执行完后紧接着调用,微任务执行完成后,再取出宏任务执行。原创 2023-08-19 11:02:37 · 162 阅读 · 0 评论 -
常见前端基础面试题(HTML,CSS,JS)(三)
类型转换可以分为两种,和。原创 2023-08-18 14:30:05 · 57 阅读 · 0 评论 -
常见前端基础面试题(HTML,CSS,JS)(二)
var定义的变量,是函数作用域,没有块的概念,可以跨块访问, 不能跨函数访问,有变量提升。let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问,无变量提升,不可以重复声明。const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改,无变量提升,不可以重复声明。var不存在暂时性死区,let和const存在暂时性死区let和const创建的全局变量没有给window设置相应的属性暂时性死区:使用命令声明变量之前,该变量都是不可用的。原创 2023-08-18 14:29:33 · 73 阅读 · 0 评论 -
常见前端基础面试题(HTML,CSS,JS)(一)
使页面在没有css的情况下,也能够呈现出好的内容结构爬虫根据标签来分配关键字的权重,因此可以和搜索引擎建立良好的沟通,帮助爬虫抓取更多的有效信息如屏幕阅读器、盲人阅读器、移动设备等,以有意义的方式来渲染页面语义化使代码更具有可读性,让其他开发人员更加理解你的html结构,减少差异化。遵循W3C标准的团队都遵循这个标准。原创 2023-08-17 14:51:03 · 64 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十八)
这样使得只有在连接真正有读写事件发生时,才会调用 函数来进行读写,就大大地减少了系统开销,并且不必为每个连接都创建一个线程,不用去维护 多个线程,并且避免了多线程之间的上下文切换导致的开销。NIO 的非阻塞模式, 使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可 用时,就什么都不会获取。只不过 Stream 是单向的,譬如:InputStream, OutputStream,而 Channel 是双向 的,既可以用来进行读操作,又可以用来进行写操作。原创 2023-08-17 14:50:48 · 68 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十七)
另外多路复用 IO 为何比非阻塞 IO 模型的效率高是因为在非阻塞 IO 中,不断地询问 socket 状态 时通过用户线程去进行的,而在多路复用 IO 中,轮询每个 socket 状态是内核在进行的,这个效 率要比用户线程要高的多。在信号驱动 IO 模型中,当用户线程发起一个 IO 请求操作,会给对应的 socket 注册一个信号函 数,然后用户线程会继续执行,当内核数据就绪时会发送一个信号给用户线程,用户线程接收到 信号之后,便在信号函数中调用 IO 读写操作来进行实际的 IO 请求操作。原创 2023-08-16 14:35:16 · 49 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十六)
简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。什么情况下需要序列化a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;b)当你想用套接字在网络上传送对象的时候;c)当你想通过RMI传输对象的时候;原创 2023-08-16 14:34:35 · 51 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十五)
在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法Java反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类。在运行时构造任意一个类的对象。在运行时判断任意一个类所具有的成员变量和方法。在运行时调用任意一个对象的方法。反射机制的优缺点优点:能够运行时动态获取类的实例,提高灵活性;与动态编译结合Class.forName('com.mysql.jdbc.Driver.class');原创 2023-08-15 11:46:48 · 124 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十四)
一般情况下是用 try 来执行一段程序,如果出现异常,系统会抛出(throw)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理;throws 用来标明一个成员函数可能抛出的各种“异常”;如果下一级的 try 语句没有对某种“异常”进行处理,栈就会展开,直到遇到有处理这种“异常”的 try 语句。异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生。原创 2023-08-15 11:46:36 · 125 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十三)
不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。Java 允许在 finally 中改变返回值的做法是不好的,因为如果存在 finally 代码块,try 中的 return 语句不会立马返回调用者,而是记录下返回值待 finally 代码块执行完毕之后再向调用者返回其值,然后如果在 finally 中修改了返回值,这会对程序造成很大的困扰,C#中就从语法上规定不能做这样的事。原创 2023-08-14 16:45:23 · 83 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十二)
利用 java.text.DataFormat 的子类(如 SimpleDateFormat 类)中的 forma t(Date)方法可将日期格式化。原创 2023-08-14 16:45:08 · 97 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十一)
抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可以是 private、默认、protected、public 的,而接口中的成员全都是 public 的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。原创 2023-08-13 13:23:00 · 95 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(十)
String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。StringBuffer 是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没有对方法加锁同步的,所以毫无疑问,StringBuilder 的性能要远大于 StringBuffer。StringBuffer:线程安全,StringBuilder:线程不安全。原创 2023-08-13 13:22:40 · 82 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(九)
char 类型可以存储一个中文汉字,因为 Java 中使用的编码是 Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个 char 类型占 2 个字节(16bit),所以放一个中文是没问题的。不对,如果两个对象 x 和 y 满足 x.equals(y) == true,它们的哈希码(hash code)应当相同。补充:继承 String 本身就是一个错误的行为,对 String 类型最好的重用方式是关联(HAS-A)而不是继承(IS-A)。原创 2023-08-12 15:20:11 · 117 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(八)
逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是 true 整个表达式的值才是 true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。补充:我们为编写的类重写 hashCode 方法时,可能会看到如下所示的代码,其实我们不太理解为什么要使用这样的乘法运算来产生哈希码(散列码),而且为什么这个数是个素数,为什么通常选择 31 这个数?注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。原创 2023-08-12 15:19:57 · 261 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(七)
可以正确编译,因为 s1+= 1;简单的说,如果字面量的值在-128 到 127 之间,那么不会 new 新的 Integer对象,而是直接引用常量池中的 Integer 对象,所以上面的面试题中 f1==f2 的结果是 true,而 f3==f4 的结果是 false。包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double。原始类型: boolean,char,byte,short,int,long,float,double。原创 2023-08-11 09:38:28 · 60 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(六)
JVM 看到的只是 List,而由泛型附加的类型信息对 JVM 来说是不可见的。样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。类型擦除的基本过程也比较简单,首先是找到用来替换类型参数的具体类。这些类被称为参数化的类或参数化的类型。原创 2023-08-11 09:38:13 · 72 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(五)
除了在持久化对象时会用到对象序列化之外,当使用 RMI(远程方法调用),或在网络中传递对象时,都会用到对象序列化。化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null。使用 Java 对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装。必须注意地是,对象序列化保存的是对象的”状态”,即它的成员变量。等,希望对该密码字段在序列化时,进行加密,而客户端如果拥有解密的密钥,只有在。原创 2023-08-10 09:27:49 · 65 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(四)
按值调用(call by value)表示方法接收的是调用者提供的值,而按引用调用(call by reference)表示方法接收的是调用者提供的变量地址。注意:基于序列化和反序列化实现的克隆不仅仅是深度克隆,更重要的是通过泛型限定,可以检查出要克隆的对象是否支持序列化,这项检查是编译器完成的,不是在运行时抛出异常,这种是方案明显优于使用 Object 类的 clone 方法克隆对象。被传递到方法中时,参数的值就是对该对象的引用。Java对对象采用的不是引用调用,实际上,对象引用是按值传递的。原创 2023-08-10 09:27:38 · 56 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(三)
静态变量是被 static 修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”;一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”;二者均是Object类里的方法。原创 2023-08-09 16:56:16 · 76 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(二)
假设B是较A低的模块,但B需要使用到A的功能,这个时候,B不应当直接使用A中的具体类:而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口:这样就达到了依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能,那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。局部变量:随着方法的调用而存在,随着方法的调用完毕而消失。原创 2023-08-09 16:56:05 · 75 阅读 · 0 评论 -
面试攻略,Java 基础面试 100 问(一)
继承(Inherit):继承实际上也是为了提高代码的复用性和可扩展性,在定义不同类的时候存在一些相同属性,为了方便使用可以将这些共同属性抽象成一个父类,在定义其他子类时可以继承自该父类,减少代码的重复定义,子类可以使用父类中非私有的成员。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。只有private构造方法。原创 2023-08-08 18:38:21 · 172 阅读 · 1 评论 -
如果网站的 Cookie 特别多特别大,会发生什么(二)
接着悄悄创建目标站点的隐藏框架页,中间人返回特定的页面内容,其中的脚本即可修改目标站点 Cookie 了。HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。另外,当浏览器访问HTTPS通信有效的Web网站时,浏览器的地址栏内会出现一个带锁的标记。不过 XSS 也不是也想有就能有的,但在特殊的条件下,任何站点都可以有 XSS —— 那就是流量被劫持的时候。通过代理,我们模拟流量被劫持的场景。当然,这种所谓的『拒绝服务』,只是本地自欺欺人而已,对真实服务器并没什么影响。原创 2023-08-08 18:38:08 · 69 阅读 · 0 评论 -
如果网站的 Cookie 特别多特别大,会发生什么(一)
有没有想过,如果网站的 Cookie 特别多特别大,会发生什么情况?什么,网站居然报错了?众所周知,Cookie 是塞在请求头里的。如果 Cookie 太多,显然整个 HTTP 头也会被撑大。然而现实中,几乎所有的服务器都会对请求头长度做限制,避免畸形封包消耗服务器资源。那么有趣的事就来了 —— Cookie 是可以长期储存的,所以只要不过期,对应的站点就一直无法访问!为什么会这样!因为博客园是支持自定义装扮的,用户可以嵌入自己的脚本。原创 2023-08-07 11:34:19 · 100 阅读 · 0 评论 -
Session与Cookie的区别(五)
其实我原本以为我很懂 Cookie 跟 Session,但越研究越发现好像不是这么一回事,只是我自我感觉良好而已。但把该看的数据都看完一遍之后,再让自己沉淀个几天,大致上就能完全理解整个脉络的发展。Session 是什么?就是一种让 Request 变成 Stateful 的机制。以小明的例子来说,Session 就是一种让客人之间能互相关联起来的机制。在故事里面我们用了纸条跟手机里的信息来比喻,有多种方式可以达成 Session。原创 2023-08-07 11:34:07 · 411 阅读 · 0 评论 -
Session与Cookie的区别(四)
跟之前一样,他们都是透过一张纸条或者是手机里的信息来沟通,但唯一的差别是客人跟小明之间只透过 A59Uhe7I94J330mN 这个存在手机里的 ID 来验证身份,其他相关资讯都写在小明的笔记本里面。但有一个小缺点,那就是当小明想存的信息愈来愈多之后,这一串字也会愈来愈长,就会在客人的手机里面占更大的容量。这种验证的方法就像是我曾经去过的网咖。我只要去打咖的时候出示这张会员卡,店员就知道我曾经消费过多少钱,也知道我喜欢点的餐点,所有的信息都是存在他们的系统里面,而我的身份就是透过这张会员卡来表示。原创 2023-08-06 08:05:43 · 109 阅读 · 0 评论 -
Session与Cookie的区别(三)
Session 是什么?重点是手机里的信息取代了以前的纸条,客人不用刻意再带一个没有用的纸条了,只需要把本来就会随身携带的手机拿出来就好,跟以前相比方便许多。让我们先从比喻回到网络世界里,HTTP 是无状态的,所以每一个 Request 都是不相关的,就像是对小明来说每一位客人都是新的客人一样,他根本不知道谁是谁。前面已经有提过了,尽管小明靠着这个纸条的机制留住了一些常客,但是新客人呢?但有了纸条以后,两个在小明眼中完全不同的客人被关联了起来,小明就可以知道:「原来这个新的客人是以前那个来买木材的客人!原创 2023-08-06 08:05:33 · 127 阅读 · 0 评论 -
Session与Cookie的区别(二)
小明身为杂货店的店长兼唯一的店员,所有大小事都是他一个人在处理。传统杂货店跟便利商店最大的差别在哪里?在于人情味。就像是你去菜市场买菜的时候会被说帅哥或美女,或者是去买早餐的时候老板会问你:「一样?」,你只要点个头就行了。这些人与人之间的情感是无论信息怎么发展都无法取代的。可是小明没有办法,因为他根本记不起来是同一个人。每一个来店里的人对小明来说都是一个独立的个体,是完全不相干的。你可能会疑惑说:「就算认不出脸,认声音、衣服、气味也都可以吧?」,看来你是太低估小明了。原创 2023-08-05 10:33:32 · 87 阅读 · 0 评论 -
Session与Cookie的区别(一)
小明平时人缘还算不错,在倒垃圾时会与旁边的婆婆妈妈闲聊,说着那个谁谁谁的儿子考上了台大,谁谁谁的女儿最近交了个男友,成为左邻右舍八卦网络的一部分。于是,小明就用了退休金在家里附近的巷口开了间杂货店,并且取名为:「小明の杂货店」,是个毫无创意的名称,但把自己的名字放在招牌上一直是他的梦想。但开幕毕竟是开幕,通常都是一家商店这辈子的巅峰,除非有跳楼大拍卖(假的那种不算,例如说每天都在大拍卖的)或是周年庆,不然都很难超越了。要向没有技术背景的人讲这种概念性的东西,用一堆专有名词绝对是最差劲的做法。原创 2023-08-05 10:33:21 · 97 阅读 · 0 评论 -
细讲一个 TCP 连接能发多少个 HTTP 请求(二)
肯定不能只开一个 TCP 连接顺序下载,那样用户肯定等的很难受,但是如果每个图片都开一个 TCP 连接发 HTTP 请求,那电脑或者服务器都可能受不了,要是有 1000 张图片的话总不能开 1000 个TCP 连接吧,你的电脑同意 NAT 也不一定会同意。那浏览器就会在一个 HOST 上建立多个 TCP 连接,连接数量的最大限制取决于浏览器设置,这些连接会在空闲的时候被浏览器用来发送新的请求,如果所有的连接都正在发送请求呢?一个支持持久连接的客户端可以在一个连接中发送多个请求(不需要等待任意请求的响应)。原创 2023-08-04 10:04:29 · 222 阅读 · 0 评论 -
细讲一个 TCP 连接能发多少个 HTTP 请求(一)
持久连接:既然维持 TCP 连接好处这么多,HTTP/1.1 就把 Connection 头写进标准,并且默认开启持久连接,除非请求中写明 Connection: close,那么浏览器和服务器之间是会维持一段时间的 TCP 连接,不会一个请求结束就断掉。在传统的HTTP/1.0协议中,每次HTTP请求都需要单独建立一个TCP连接,请求完成后立即关闭连接,这样导致了在多次请求时产生了较大的开销。意思是说,完成这个 HTTP 请求之后,不要断开 HTTP 请求使用的 TCP 连接。原创 2023-08-04 10:04:18 · 189 阅读 · 0 评论 -
TCP连接的状态详解以及故障排查(六)
若不确定这种方式是否关闭了原本正常的客户端,则在ShutDown的时候一定要选择send,表示关闭发送通道,服务器还可以接收一下,万一客户端正在发送比较重要的数据呢,是不?这时候就有个问题,若利用轮询还未检测出上条旧连接已经超时(这很正常,timer总有个间隔吧),而在这时,客户端又重复的上演情况3,那么服务端将会出现大量的假的ESTABLISHED连接和CLOSE_WAIT连接。但是能肯定的是,这个问题的产生绝对是设备在不停的重启,而服务器这边又是简单的轮询,并不能及时处理,暂时还未能解决。原创 2023-08-03 09:46:45 · 848 阅读 · 0 评论 -
TCP连接的状态详解以及故障排查(五)
TCP报头内的确认编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。原创 2023-08-03 09:46:21 · 301 阅读 · 0 评论 -
TCP连接的状态详解以及故障排查(三)
当Server端调用socket函数调用时,相当于Server端产生了一个处于Closed状态的监听套接字,Server端调用bind操作,将监听套接字与指定的地址和端口关联,然后又调用listen函数,系统会为其分配未完成队列和完成队列,此时的监听套接字可以接受Client的连接,监听套接字状态处于LISTEN状态。这是三次握手过程中的报文1。:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;原创 2023-08-02 11:07:59 · 210 阅读 · 0 评论 -
TCP连接的状态详解以及故障排查(二)
这是一个看起来比较复杂的状态迁移图,因为它包含了两个部分—-服务器的状态迁移和客户端的状态迁移,如果从某一个角度出发来看这个图,就会清晰许多,这里面的服务器和客户端都不是绝对的,发送数据的就是客户端,接受数据的就是服务器。而结束连接则通常是客户端主动结束的,客户端结束应用程序以后,需要经历FIN_WAIT_1,FIN_WAIT_2等状态,这些状态的迁移就是前面提到的结束连接的四次握手。那么你就一定要对这张图的每一个状态,及转换的过程有深刻的认识,不能只停留在一知半解之中。客户端应用程序的状态迁移图。原创 2023-08-01 15:15:57 · 294 阅读 · 0 评论 -
TCP连接的状态详解以及故障排查(一)
看LISTENING状态最主要的是看本机开了哪些端口,这些端口都是哪个程序开的,关闭不必要的端口是保证安全的一个非常重要的方面,服务端口都对应一个服务(应用程序),停止该服务就关闭了该端口,例如要关闭21端口只要停止IIS服务中的FTP服务即可。TIME_WAIT等待状态,这个状态又叫做2MSL状态,说的是在TIME_WAIT2发送了最后一个ACK数据报以后,要进入TIME_WAIT状态,这个状态是防止最后一次握手的数据报没有传送到对方那里而准备的(注意这不是四次握手,这是第四次握手的保险状态)。原创 2023-08-01 15:16:09 · 155 阅读 · 0 评论 -
TCP三次握手和四次挥手以及11种状态(二)
客户端发送了FIN,但是没有收到服务器的ACK,却收到了服务器的FIN,这种情况发生在服务器发送的ACK丢包的时候,因为网络传输有时会有意外。4、服务器收到客户端的报文后向客户端发送ACK和SYN报文,此时服务器的状态变为SYN_RCVD;5、然后,客户端收到ACK、SYN,就向服务器发送ACK,客户端状态变为ESTABLISHED;5、客户端收到服务器的FIN后,马上发送ACK给服务器,此时客户端进入TIME_WAIT状态;2、服务器收到FIN后向客户端发送ACK,服务器的状态围边CLOSE_WAIT;原创 2023-07-31 17:59:22 · 105 阅读 · 0 评论