CSAPP Lab01——Data Lab完成思路
陪你把想念的酸拥抱成温暖
陪你把彷徨写出情节来
未来多漫长再漫长还有期待
陪伴你 一直到 故事给说完
——陪你度过漫长岁月
完整代码见:CSAPP/datalab-handout at main · SnowLegend-star/CSAPP (github.com)
01 bitXor
这道题是用~和&计算x^y。
异或是两个二进制数a,b对应的位相同为0,不同为1。既然是ai 和bi 不同才为,且只能用~和&两种位运算符号。考虑对a取反,再和b进行&操作。这样当ai =0,bi =1时可以得到1;但是还得考虑当ai =1,bi =0时也应该得到1,此时考虑的对b取反,再和a进行&操作。综合以上两点,我们可以初步得到式子为“(~a&b)|(a&~b)”,换算后得到“~(~(x & ~y) & ~(~x & y))”。
//1
/* * bitXor - x^y using only ~ and & * Example: bitXor(4, 5) = 1* Legal ops: ~ &* Max ops: 14* Rating: 1*/
int bitXor(int x, int y) {return ~(~(x & ~y) & ~(~x & y));
}
02 tmin
返回最小二进制补整数
Tmin不就是0x8000 0000吗?注意这里可以用到的整数在0~0xAA之间,所以是“1<<31”。
/* * tmin - return minimum two's complement integer * Legal ops: ! ~ & ^ | + << >>* Max ops: 4* Rating: 1*/
int tmin(void) {//正数的补码是它本身,负数的补码是取反加一return 1<<31;}
03 isTmax
如果x是二进制补码的最大值,则返回1,否则返回0
Tmax=0x7FFF FFFF,从Tmax的特殊性来考虑。如果x=Tmax,则x+1+x可以得到0xFFFF FFFF=Tmin。对于Tmin进行取反,则可以得到0。再对0取!,则可以令函数返回1。除此之外,还要考虑如果x本身就为Tmin,则它也会满足上述运算。所以得用^操作排除这种情况。
/** isTmax - returns 1 if x is the maximum, two's complement number,* and 0 otherwise * Legal ops: ! ~ & ^ | +* Max ops: 10* Rating: 1*/
int isTmax(int x) {//二进制补码的最大值是:最高位0,其它位1int temp=x+1;int temp2=x+temp;//还得考虑x本身就是0xffffffff的情况,即x!=temp2return !(~temp2)&!!(x^temp2);}
04 allOddBits
如果word中所有的奇数位为1,则返回1,否则返回0(位从0~31位)
这题十分恶心,是第一个卡住我的。开始想得太简单了,以为满足条件的数字只有0xAAAA AAAA这一个。后来发现0xFFAA AAAA这种也可以,这就让我犯了难——对于0xFF这种形式要怎么判断呢?想了很久都没有头绪。跳过这题后面再写的时候灵光一闪,想到只要判断奇数位是1就行,根本就不用考虑偶数位。要做到这一步其实就是把x和0xAAAA AAAA进行&操作,可以提取出x奇数为上所有的1得到数字x2。我们会发现,只要x满足条件,那进行上一步操作后的形式都是统一的0xAAAA AAAA。所以最后判断x2是不是与0xAAAA AAAA一致就行。
/* * allOddBits - return 1 if all odd-numbered bits in word set to 1* where bits are numbered from 0 (least significant) to 31 (most significant)* Examples allOddBits(0xFFFFFFFD) = 0, allOddBits(0xAAAAAAAA) = 1* Legal ops: ! ~ & ^ | + << >>* Max ops: 12* Rating: 2*/
int allOddBits(int x) {//没搞出来//计算机的右移位运算默认是逻辑还是算数呢?dev c++是逻辑//直接不用考虑偶数位的情况,只考虑奇数位全为1的时候//怎么在dev c上跑x=0x80000000的时候返回0,这时候就返回1了?????int a=0xAA<<8;int b=a+0xAA; //b=0xAAAAint c=(b<<16)+b; //这里b<<16得加括号,因为+的优先级大于<<int d=!((c&x)^c); return d;//强行令偶数位全为0再进行比较
}
05 negate
返回-x
简单的取反加一操作。最开始还在考虑Tmin的特殊性,验算后发现Tmin也符合这个规律。秒了,芜湖
/* * negate - return -x * Example: negate(1) = -1.* Legal ops: ! ~ & ^ | + << >>* Max ops: 5* Rating: 2*/
int negate(int x) {return ~x+1;
}
06 isAsciiDigit
如果0x30 <= x <= 0x39,返回1,否则返回0
开始我的思路是挨个判断x的每一位。即x的第5、6位只能为1,再高位只能为0;对于低四位,第4位为1的时候只有第1位可以同时为1,如果第4位为0则后三位无论是什么值都可以。但是挨个判断每一位需要的符号好像会超过限制。
后来看了别的解法,第一次发现了符号位的大用。基本上这次的lab都没提供“-”这个操作,但是可以利用“+(~x+1)”来实现减法。如果给出x,只要用两个边界值0x30和0x39对x进行减法操作就行。最后通过符号位来判断x与0x30和0x39的大小。这种思路在后面的题目也会用到。
/* * isAsciiDigit - return 1 if 0x30 <= x <= 0x39 (ASCII codes for characters '0' to '9')* Example: isAsciiDigit(0x35) = 1.* isAsciiDigit(0x3a) = 0.* isAsciiDigit(0x05) = 0.* Legal ops: ! ~ & ^ | + << >>* Max ops: 15* Rating: 3*/
int isAsciiDigit(int x) {//判断第四五位都是1、且高位都是0,1-3位值得小于等于9//x做完移位运算后自身值不发生改变的int a=x+~(0x30)+1;int b=0x39+~x+1;int c=a>>31;int d=b>>31;return !c&!d;
}
07 conditional
用位级运算表示三目运算符 x?y:z
我们要注意到一点,这种返回值在几个数中选一个的势必得用到“|”操作,比如T01要是能用上“|”就会简单许多。由于只要x不为0就返回y,为0才返回z。要返回y,就是考虑当x不为0时让y和0xFFFF FFFF进行&操作。一个全新的操作在我脑中应运而生,那就是“!!x”。只要x不为0,那!!x就会得到1;x为0,那!!x会得到0。而对0或者1进行取反加一就可以得到0或者0xFFFF FFFF。这样我们就得到了想要的全1二进制数。此题结束。
/* * conditional - same as x ? y : z * Example: conditional(2,4,5) = 4* Legal ops: ! ~ & ^ | + << >>* Max ops: 16* Rating: 3*/
int conditional(int x, int y, int z) {return y&(~(!!x)+1)|(z&~(~(!!x)+1));
}
08 isLessOrEqual
如果x<=y,则返回1,否则返回0
这题算是T06的弱化版。T06还得进行两次比大小,这题只用比一次就行了。也是用减法然后进行符号位的判断就可以解决。
/* * isLessOrEqual - if x <= y then return 1, else return 0 * Example: isLessOrEqual(4,5) = 1.* Legal ops: ! ~ & ^ | + << >>* Max ops: 24* Rating: 3*/
int isLessOrEqual(int x, int y) {int a=y+(~x+1);int b=x>>31&1;int c=y>>31&1;return (b&!c)|(!(a>>31)&!(b^c));//得控制后半部分只有同号的时候才能计算
}
09 logicalNeg
用其余的操作符实现 !
这题算是第二题卡了我很久的。想了一个多小时也没头绪——要如何才能做到当x不为0时返回0?假如从x的每一位着手,只要发现有一位不为0就可以判断x不为0,但是这样就要用到for循环了。遂跳过这题。
后来第二天再看的时候灵光一闪。既然对x的每位进行判断有困难,那还是老样子直接考虑数字这个整体。由于题目提供的运算符也不多,所以x的正负性成了可以拿来解题的性质。注意到一点,只要x不为0,那x的相反数符号位就和x的符号位是不同的。从正负性和符号位着手这题就很容易解决了。
/* * logicalNeg - implement the ! operator, using all of * the legal operators except !* Examples: logicalNeg(3) = 0, logicalNeg(0) = 1* Legal ops: ~ & ^ | + << >>* Max ops: 12* Rating: 4 */
int logicalNeg(int x) {//不会 //果然过一天再搞就会有新思路,利用相反数符号的性质int x2=~x+1;int sign=(x>>31)^(x2>>31);int min=x>>31;return (~sign)&1&~((x2^x)^min);
}
10 howManyBits
使用补码时最少需要多少比特位
这题的运算符限制是90,给人一种代码结构肯定十分庞大的感觉,倒是让我一下子不知如何下手。首先考虑的是把数字x和 、 … 进行比较,但这样用到的运算符数目必然会超过90。于是又想到了用二分法,但是二分法得结合for循环才好实施吧。最后又想到了一种二分法的变体。即x先和 比较,若是大于它就对x进行“>>16”的操作,然后再和 相比;小于它就直接和 进行比较。在不断的比较和移位操作中应该是可以判断出来的。
但是写其他题已经是花费了许多心力,遂开摆。等什么时候状态好了再来拿下这题。
/* howManyBits - return the minimum number of bits required to represent x in* two's complement* Examples: howManyBits(12) = 5* howManyBits(298) = 10* howManyBits(-5) = 4* howManyBits(0) = 1* howManyBits(-1) = 1* howManyBits(0x80000000) = 32* Legal ops: ! ~ & ^ | + << >>* Max ops: 90* Rating: 4*/
int howManyBits(int x) { //开摆,不想写了int temp=x>>31; //记录x的正负性int a=~x+1;int b=(1<<16)+a;int c=b>>31; //用符号位判断2^16和x的大小return 0;
}
11 floatScale2
给定一个无符号数f,我们以浮点数的格式来看待这个数f,返回2*f。
首先得明白浮点数大致有三种类型:规格数,非规格数,无穷大或者NaN。然后提取出f的exp和frac部分。若f不是非规格数,对它进行判断再返回。若是规格数就好办了,直接在exp部分加上1就能返回了。
值得一提的是,非规格数如果尾数最高位为1时,右移1位会使阶码最低位从0变为1,而这时候恰好就是正确的结果,并不需要额外的处理。这是因为乘2之后完成了进位,刚好规格数在小数点前有一个1,规格数和非规格数从而无缝衔接。
/* * floatScale2 - Return bit-level equivalent of expression 2*f for* floating point argument f.* Both the argument and result are passed as unsigned int's, but* they are to be interpreted as the bit-level representation of* single-precision floating point values.* When argument is NaN, return argument* Legal ops: Any integer/unsigned operations incl. ||, &&. also if, while* Max ops: 30* Rating: 4*/
unsigned floatScale2(unsigned uf) {//先提取阶码位int exp=uf & 0x7f800000;int frac=uf & 0x7fffff;if(uf==0x7f800000||uf==0xff800000)return uf; else if(exp==0x7f800000&&frac!=0)return uf;else if(exp==0)return (uf&0x80000000)+(frac<<1);//记得给位运算加括号elsereturn uf + 0x800000;
}
12 floatFloat2Int
给定一个无符号数f,我们以浮点数的格式来看待这个数f,将这个浮点数f转换为整形。
上来就考虑两个边界,即浮点数太小就返回0;太大就返回0x80000000u。我们知道,浮点数的计算方法是“”,其中E=e-127。故当e<127的时候,这个数整体就<1了。当e>127+30的时候,E>=31,直接达到了32bit能表达的数据上限。其他情况就是套用此式即可。
/* * floatFloat2Int - Return bit-level equivalent of expression (int) f* for floating point argument f.* Argument is passed as unsigned int, but* it is to be interpreted as the bit-level representation of a* single-precision floating point value.* Anything out of range (including NaN and infinity) should return* 0x80000000u.* Legal ops: Any integer/unsigned operations incl. ||, &&. also if, while* Max ops: 30* Rating: 4*/
int floatFloat2Int(unsigned uf) {int exp=(uf & 0x7f800000)>>23;int frac=uf & 0x7fffff;if(exp>127+30)//无穷大或者是NaN都返回统一的值return 0x80000000u;else if(exp<127){//非规格化的数,return 0;}if(uf>>31)return -(((frac>>23)+1)<<(exp-0x7F));else return ((frac>>23)+1)<<(exp-0x7F);
}
13 floatPower2
返回2的x次方,返回用无符号数表示的浮点数
当e<-126时,这已经是浮点数能表示的最小值了,所以返回0。当e>127,浮点数表示不出来这种数字,只能返回无穷大了。其他的情况E=x+bias,左移23位即可。
/* * floatPower2 - Return bit-level equivalent of the expression 2.0^x* (2.0 raised to the power x) for any 32-bit integer x.** The unsigned value that is returned should have the identical bit* representation as the single-precision floating-point number 2.0^x.* If the result is too small to be represented as a denorm, return* 0. If too large, return +INF.* * Legal ops: Any integer/unsigned operations incl. ||, &&. Also if, while * Max ops: 30 * Rating: 4*/
unsigned floatPower2(int x) {if(x<-126)return 0;else if(x>127)return (0xFF)<<23;return (x+127)<<23;return 2;
}
相关文章:
CSAPP Lab01——Data Lab完成思路
陪你把想念的酸拥抱成温暖 陪你把彷徨写出情节来 未来多漫长再漫长还有期待 陪伴你 一直到 故事给说完 ——陪你度过漫长岁月 完整代码见:CSAPP/datalab-handout at main SnowLegend-star/CSAPP (github.com) 01 bitXor 这道题是用~和&计算x^y。 异或是两个…...
将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手
网址 https://github.com/idootop/mi-gpt 一个ts的项目,看样子是个纯前端的项目。 演示的挺有意思的,傻妞应该是魔幻手机的角色。感觉能用这个例子的,最少得三十而立了。 个人感觉这种项目都是整活加炫技,估计我要用上这东西&…...
mongodb总概
一、mongodb概述 mongodb是最流行的nosql数据库,由C语言编写。其功能非常丰富,包括: 面向集合文档的存储:适合存储Bson(json的扩展)形式的数据;格式自由,数据格式不固定,生产环境下修改结构都可以不影响程序运行;强大的查询语句…...
【设计模式】策略模式(行为型)⭐⭐
文章目录 1.概念1.1 什么是策略模式1.2 优点与缺点 2.实现方式3. Java 哪些地方用到了策略模式4. Spring 哪些地方用到了策略模式 1.概念 1.1 什么是策略模式 它允许用户在不修改现有对象的代码的情况下向对象添加新的功能;这种模式是通过创建一个包含该对象的包装…...
《软件定义安全》之三:用软件定义的理念做安全
第3章 用软件定义的理念做安全 1.不进则退,传统安全回到“石器时代” 1.1 企业业务和IT基础设施的变化 随着企业办公环境变得便利,以及对降低成本的天然需求,企业始终追求IT集成设施的性价比、灵活性、稳定性和开放性。而云计算、移动办公…...
pdf文件在线压缩网站,pdf文件在线压缩工具软件
在数字化时代的今天,PDF文件已经成为我们日常生活和工作中不可或缺的一部分。然而,随着PDF文件的广泛使用,其文件大小问题也日益凸显。过大的PDF文件不仅占用了大量的存储空间,而且在传输和共享过程中也往往面临诸多不便。因此&am…...
java程序100道21-30
21.定义一个接口A,有一个String的常量值为Java的 s,有void 的print()方法和String 的getInfo()方法,类X是A的实现类,类A的print()方法输出常量s,方法getInfo()返回“Hello!!!” package Exercises.One_Hundred.Demo21; public…...
英伟达SSD视觉算法模型训练、转换与部署
深度学习的训练和推理流程,是先采用高性能图形服务器使用深度学习框架来训练(Training)机器学习算法,研究大量的数据来学习一个特定的场景,完成后得到模型参数,再部署到终端执行机器学习推理(Inference),以训练好的模型从新数据中得出结论。 一般的深度学习项目,训练…...
智能变电站网络报文记录及故障录波分析装置
是基于Intel X86、PowerPC、FPGA等技术的高度集成化的硬件平台,采用了高性能CPU无风扇散热、网络数据采集、高速数据压缩存储加密等多种技术,实现了高性能计算、多端口同步高速数据采集、数据实时分析、大容量数据存储等功能。 ● 在满足工业标准的同时&…...
npm ERR! code E404 npm ERR! 404 Not Found - GET https://registry.npmjs.org/
npm ERR! code E404 npm ERR! 404 Not Found - GET https://registry.npmjs.org/ 📜 智能合约依赖下载失败的解决方案摘要引言正文内容1. 场景描述 🤔2. 可能原因分析2.1 包不存在或名称错误2.2 网络问题2.3 npm配置错误 3. 解决方案🛠️3.1 …...
Dockerfille解析
用于构建Docker镜像的文本,由一条条指令构成 Docker执行Dockerfile的流程 1. Docker从基础镜像执行一个容器 2. 执行一条指令并对容器进行修改 3. 执行类型Docker commit的命令添加一个新的镜像层 4. Docker再基于新的镜像执行一个新的容器 5. 执行Dockerfile中…...
定个小目标之刷LeetCode热题(14)
了解股票的都知道,只需要选择股票最低价格那天购入,在股票价格与最低价差值最大时卖出即可获取最大收益,总之本题只需要维护两个变量即可,minPrice和maxProfit,收益 prices[i] - minPrice,直接用代码描述如下 class …...
智慧管道管理:油气管道可视化的领先应用
通过图扑油气管道可视化技术,实现实时监控与数据分析,快速识别潜在风险,有效提升管道维护效率和安全性能。...
嵌入式仪器模块:示波器模块和自动化测试软件
示波器模块 • 32 位分辨率 • 125 MSPS 采样率 • 支持单通道/双通道模块选择 • 低速模式可实现实时功率分布和整机功率检测 • 高速模式可实现信号分析和上电时序测量 应用场景 • 抓取并分析波形的周期、幅值、异常信号等指标 • 电源纹波与噪声分析 • 信号模板比…...
组装服务器重装linux系统【idrac集成戴尔远程控制卡】
🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…...
景区ar互动大屏游戏化体验提升营销力度
从20世纪60年代的初步构想,到如今全球范围内无数企业的竞相投入,AR增强现实技术已成为引领科技潮流的重要力量。而在这一浪潮中,中国的AR公司正以其独特的魅力和创新力,崭露头角。 中国的AR市场正在迎来前所未有的发展机遇。如今&…...
苍穹外卖笔记-07-菜品管理-增加、删除、修改、查询分页还有菜品起售或停售状态
菜品管理 1 新增菜品1.1 需求分析与设计1.2 代码开发文件上传新增菜品实现 1.3 功能测试 2 菜品分页查询2.1 需求分析和设计2.2 代码开发设计DTO类设计VO类Controller层Service层Mapper层 2.3 功能测试 3 删除菜品3.1 需求分析和设计3.2 代码开发Controller层Service层Mapper层…...
oracle dataguard 从库 MRP 进程的状态是 WAIT_FOR_GAP
因主库归档日志未备份直接删除后,从库不能更新,19c版本以上,之前未打补丁,使用 RECOVER STANDBY DATABASE FROM SERVICE PRM180;之后,在执行 alter database recover managed standby database using current logfil…...
【C语言】轻松拿捏-联合体
谢谢观看!希望以下内容帮助到了你,对你起到作用的话,可以一键三连加关注!你们的支持是我更新地动力。 因作者水平有限,有错误还请指出,多多包涵,谢谢! 联合体 一、联合体类型的声明二…...
基于Python定向爬虫技术对微博数据可视化设计与实现
基于Python定向爬虫技术对微博数据可视化设计与实现 Design and Implementation of Weibo Data Visualization Based on Python Web Scraping Techniques 完整下载链接:基于Python定向爬虫技术对微博数据可视化设计与实现 文章目录 基于Python定向爬虫技术对微博数据可视化设…...
【QT5】<总览三> QT常用控件
文章目录 前言 一、QWidget---界面 二、QPushButton---按钮 三、QRadioButton---单选按钮 四、QCheckBox---多选、三选按钮 五、margin&padding---边距控制 六、QHBoxLayout---水平布局 七、QVBoxLayout---垂直布局 八、QGridLayout---网格布局 九、QSplitter---…...
Python中的生成器表达式(generator expression)
Python中的生成器表达式(generator expression)是一种类似于列表解析(list comprehension)的语法结构,但它返回的是一个生成器(generator)对象,而不是一个完整的列表。生成器对象是一…...
Responder工具
简介 Responder是一种网络安全工具,用于嗅探和抓取网络流量中的凭证信息(如用户名、密码等)。它可以在本地网络中创建一个伪造的服务(如HTTP、SMB等),并捕获客户端与该服务的通信中的凭证信息。 Responder工…...
gitblit 环境搭建,服务器迁移记录
下载 Gitblit: http://www.gitblit.com/ JDK:gitblit网站显示需要jdk1.7,这里用的1.8。 Git:到官网下载最新版本安装 1). 分别安装JDK,Git,配置环境变量,下载并解压Gitblit 2). 创建代码仓库 …...
硬盘坏了数据能恢复吗 硬盘数据恢复一般多少钱
在数字化时代,我们的生活和工作离不开电脑和硬盘。然而,硬盘故障是一个常见的问题,可能会导致我们的数据丢失。当我们的硬盘坏了,还能恢复丢失的数据吗?今天我们就一起来探讨关于硬盘坏了数据能恢复吗,硬盘…...
312. 戳气球 Hard
有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i 1] 枚硬币。 这里的 i - 1 和 i 1 代表和 i 相邻…...
推荐4个好用有趣的软件
MyComic——漫画聚合软件 MyComic是一款界面简洁、分类详尽的漫画阅读软件,专为动漫爱好者设计。它提供了丰富的高清漫画资源,支持在线免费阅读,并且可以一键下载到书架,方便随时离线观看,节省流量。用户可以轻松找到喜…...
GPT-4.0来袭:人工智能新纪元即将开启
一、性能提升 1.1 计算效率 GPT-4o在计算效率上有了显著提升。这意味着它可以在同样的硬件资源下处理更多的请求,或在相同时间内完成更多的任务。这对于高并发应用场景(如大型客服系统)来说尤为重要。 1.2 响应速度 由于优化了底层算法和…...
Luminar Neo - AI智能修图软件超越PS和LR,简单易用又高效!
很多人都想美化自己的风景和人物的图片,得到更加美丽耀眼的效果。然而,专业摄影师和设计师在电脑上使用的后期工具如 Photoshop 和 LightRoom 过于复杂。 通常为了一些简单的效果,你必须学习许多教程。而一些针对小白用户的“一键式美颜/美化…...
【Linux】rsync远程数据同步工具使用
一、rsync工具介绍 rsync是一个用于在本地或远程系统之间同步文件和目录的工具。它通过比较源和目标文件的元数据(例如修改时间和大小)来确定需要同步的内容,然后仅传输必要的数据进行更新,从而实现高效的同步操作。 rsync有如下特…...
怎么用linux做网站/百度竞价排名价格查询
本教程将教你如何使用qmake。 从简单的实例开始 让我们假设你刚才完成了您的应用程序的基本实现,您已经创建了以下文件: hello.CPPhello.hmain.cpp首先,用你最喜欢的纯文本编辑器,创建一个名为hello.pro的文件。你需要做的第一件…...
衡水哪里可以做网站/乐清网站建设
rsa 密钥生成 见 http://blog.andsky.com/js-rsa-use-openssl-make-public-pirvate-key/android 客户端用rsa 公钥加密后经 base64 编码发到 服务端,服务端使用私钥解密客户端代码import java.math.BigInteger;import java.security.KeyFactory;import java.securit…...
电商网站有那些/线下实体店如何推广引流
循环用于重复执行一组语句。循环可分为三类:一类在条件变为 False 之前重复执行语句,一类在条件变为 True 之前重复执行语句,另一类按照指定的次数重复执行语句。 在 VBScript 中可使用下列循环语句: Do...Loop: 当&am…...
大连市卫计委行风建设网站/seo关键字优化教程
【品橙旅游】近日,市场监管总局办公厅印发《关于加强中秋国庆期间景区特种设备安全工作的通知》。前不久,网红热搜常客重庆奥陶纪景区又亮相了。很遗憾,这一次是因为发生安全事故。据悉,景区涉事的速滑项目已全部停运,…...
网站备案做网站要转移吗/软文发布推广平台
01 漏洞描述 HTTP的无状态性,导致Web应用程序必须使用会话机制来识别用户。一旦与Web站点建立连接(访问、登录),用户通常会分配到一个Cookie,随后的请求,都会带上这个Cookie,这样Web站点就很容易分辨请求来自哪个用户&…...
做网站服务器是什么/活动营销的方式有哪些
Java基础核心笔记总结 由于篇幅限制,我就只以截图展示目录内容以及部分笔记内容,获取完整版王者级核心宝典只需要点击点赞关注即可获取领取方式! 在这个部分我们总结了Java的基础知识,涵盖了:概述、开发环境、开发环境…...