前言:
2024年4月24日,晴,鄙人研究生在读,研究方向:人工智能-图像处理(机器学习、深度学习),研究生这几年还是要好好搞搞技术,后续想要试试从事算法。
最近萌生一个想法,打通从前端、后端、客户端、服务端、代码是如何运行的、操作系统、数据库、服务器等等是如何运行起来的,不用太精通,还是专业于自己的研究方向(准备另开一部分写)。能打通多少呢(我也不知道)全当记录学习过程了。从哪开始写起呢,从大众最直接面对的地方开始吧。新人小白一枚,所写内容存在居多错误,听说掘金社区都是非常牛的人,如果您恰好读了这篇文章,如果可以的话,错误之处烦请批评指正,非常感谢不吝赐教。如果有下述内容有关的优秀博客文章也可以,祝您年年发大财,岁岁有今朝。
前端
笼统的把人们直接接触的部分称为前端,在现实中,我们会和网页界面、电脑软件、手机(包括手机界面,手机软件)接触。
问题1:它们是如何创造出来的?
浏览器界面:我知道的一种,通过html语言设计网页界面的样式,在容器中创造行列布局(这个地方一篇文章救了我的老命,链接如下:
juejin.cn/post/711704…
)。再在行列布局中添加我们需要的内容,比如按钮、文本、输入框、选择框等等,可以通过对按钮等的属性进行编辑我们想要的效果。在这个过程需要和css文件(css文件是啥,后续再说,直接用了)结合,来对界面进行渲染,最后才能达到我们想要的效果。
界面造出来了,需要让按钮、输入框等来完成我们想要的功能才行,这个时候需要用到javaScript,再设计界面时应为按钮标上id,这样在java中可以通过获取id来设计按钮的功能。
电脑软件:我们现在鼠标在电脑点击的是快捷方式,根本的应该是.exe文件,这个.exe从哪来,使用qt designer+python(网上一搜资料都是qt+c++)可以生成.exe文件,实际在网上下载软件安装后会看到不只是有.exe还有好多配置文件,这个具体怎么来的不清楚。说一下不用网上下载,自己生成一个.exe文件。类比一下,将qt desinger 看作上面html设计界面的过程,也是在容器中布局,在布局添加按钮(可以通过在qt软件进行拖拉,也可以通过python语句直接写)等。
1、在qt designer中设计生成.ui文件,介绍qt designer界面的博客很多,qt designer中功能工具较少,可以通过提升类来设计我们需要的功能工具。感觉在开始设计时尤其注意布局,有时在同一个QWidget中插入两个以上内容时,不好插入,可以先增加QWidget的margin,margin大一点就方便插入了(改变margin位置如图)
另外要改变同一QWidget中内容的大小,可以通过在水平伸展和垂直伸展改变内容的比例实现,将策略选择为Preferred,位置如图
2、要在通过python转换成python文件,这样便可以通过python来改变按钮等的样式(也可以通过改变样式表改变)以及设计我们界面的功能。完成后转换成.exe文件
通过以上可以总结心得:流程都是在容器进行布局,开始设计时要注意布局的使用及安排,在布局中添加功能工具,通过语言来设计想要完成的功能,以此类推,在设计手机界面时应大差不差,现在市场上设计界面的工具以及编程语言有很多,选择合适即可。
问题2:当网页和应用程序设计出来后,人们开始使用它,在使用的过程中会发生什么
1、假如设计好了掘金网页界面,人们在浏览器界面通过网址来访问这个界面,这个网址是如何来的?
我见过http和https开头,www.baidu.com 和 www.juejin.cn 结尾,还有看小网站时直接打开(https://****/vodtype/2.html)html文件的, 还有localhost后面跟地址的,这些是什么,有什么不同,以及当我输入掘金网址到我看到页面发什么了什么。
2、当我点击电脑应用程序,以及手机APP时,发生了什么。
书接上述问题2 2024年4月29日 下午 晴
一、问题:http、https、www.baidu 、.com、.cn、localhost是什么
HTTP:超文本传输协议、用于从网络传输文本到本地浏览器的传输协议、定义了客户端与服务端之间请求和响应格式、工作在TCP/IP模型上、基于TCP/IP协议来传递数据(HTML文件、图片、查询结果)、HTTP的URL由http:// 起始。http的工作原理如下图。
HTTPS:超文本传输安全协议、是HTTP的安全协议、经由HTTP进行通信、但利用SSL/TLS来加密数据包、提供数据加密、完整性校验、和身份验证、HTTPS的URL是https:// 。
上述提到一个新名词:URL,URL是什么
URL:URL是web页的地址,URL是统一资源定位符、是对可以从互联网上得到的资源的位置和访问方法的一种简洁表示、互联网上每个文件都有一个唯一的URL。URL由协议和目的地两个主要部分构成。
“协议” 告诉面对的是何种类型的Internet资源、如web中http协议,表示从web中取回的是HTML文档。其他协议还有gopher、ftp、telnet等。
“目的地” 可以是某个文件名、目录名、计算机名称,例子如下所示:
www:是服务器名,指在因特网上以超文本为基础形成的信息网。
baidu.com/juejin.cn:表示访问网站的域名,.com为最早通用的顶级域名,百度表示二级域名,.cn表示中国国家顶级域名,包括在.cn下直接注册的二级域名和在二级域名下注册的三级域名,.com.cn:.com表示商业性质的网站,.cn表示中国国家顶级域名,所以.com.cn表示中国的商业网站、中国公司。(ps:任何人都可以注册)。
localhost:当启动web项目,程序自动呼出浏览器,浏览器地址会有http://localhost:8080//项目名 :,需要明确最后项目是运行在Tomcat服务器上的,localhost称为域名,代表自己本身的计算机,8080是端口号,通过http://localhost:8080//项目名 可以访问到自己的项目,因为http://localhost:8080 访问到了本机的Tomcat,而开发的项目就是在Tomcat上运行的,可以用127.0.0.1替换localhost访问自己的项目,127.0.0.1称为ip地址,这里存在ip地址和localhost映射。上述提及Tomcat服务器,那么Tomcat是什么。
Tomcat:Tomcat是一个开源、免费、轻量级的web服务器,web服务器是安装在服务端的一款软件,当我们将自己写的web项目部署到Web服务器上,要启动Web服务器,就可以通过浏览器访问我们的Web项目了。
在此提出一个疑问,我没发现电脑上环境变量中有Tomcat,但我的web需要在Django中运行runserver才可以在在浏览器页面看到。在后面的操作过程,需要带着这个疑问思考。
ok 上述问题中的一些基本概念做了解释,接下来进入问题二
二、问题:当我访问www.baidu.com 到我看到页面,经历了什么
要说明上述问题,感觉有必要谈一下,我们是如何在巨大的互联网中工作生活的。我们每天都在上网,那么网络之间是如何连接起来的? 采用一台电脑(称为小智)作为中心,向外扩展的方式进行叙述。
清楚记得考研政治里有一句话叫“人是一切社会关系的总和”,同样小智的独立存在也没有什么意义,现在小智想要和其它电脑之间建立交流(通信)应该如何做?
答:可以通过交换机,交换机负责局域网内主机之间的数据转发,当然在交换机之前有一种集线器(已经过时了应该),当多台电脑连接在一个交换机上时,交换机内部会生成一个mac地址和端口的映射表,通过这个表可以完成不同设备之间进行通信。当数据需要转发时主机将数据包发送给交换机,交换机将数据包中源地址映射到端口,并缓存到MAC地址表中,然后根据数据包中目标地址去MAC地址表中匹配。(ps:交换机不需要连接我们熟悉的“网”就可以完成设备间通信)
在一个小范围内可以完成小智和周围同学的交流,但现在小智想和更远的电脑建立通信交流,显然现在通过交换机不太现实,那么该怎么做?
答:路由器,现在很多家庭都有路由器,不同的设备连接了wifi便可以上网聊天,看短视频。由此,连接到同一个wifi的两个设备之间可以进行通信。此时我连接着校园网,是不是意味着当我知道一个电脑的IP地址,便可以和我同学电脑之间进行通信。
路由器是一种具有多个输入和输出端口的计算机,工作在网络层,每个路由器有一个路由表和转发表,路由表用来保存路由信息(如源地址、目的地址、跳数),路由可以根据数据包的目标地址选择一条最优的路由路径;转发表基于路由表生成,用来保存IP地址、子网、以及映射的端口,转发负责将数据包传输到路由器的输出端。
当我们设备接入到路由器时,便会自动分配一个ip地址,我试验了一下,连接校园网和手机热点,电脑的ip地址不一样(ps:前述的mac地址出厂就已经写好的,不会改变)。IP是不可靠的无连接协议,不关心数据包是否到达目的地,也不关心连接和端口号,它的工作是发送数据包,并将其路由到目标计算机。如何保证到达和传输顺序正确,交给TCP,
回到我们问题,访问www.baidu.com, 经历了什么?
答:访问百度实际上是访问百度的服务器,服务器可以看作用途不同的电脑,所以服务器也可以连入网络,我们的电脑手机和百度服务器连接在同一个巨大的网络中,这个网络为我们分配了ip地址,那我们为什么不是通过ip访问百度,而是通过www.baidu.com ?这里有一个存在域名和ip地址的映射关系(如上述localhost和其IP地址),域名是按照一定规则设置的,方便人们记住。域名通过DNS域名解析服务器将域名解析成对应的ip地址,每台计算机的ip地址都是唯一的,通过这样的解析,可以访问对应资源,具体过程如下:先祭出两张图(来自网络)
ISP:互联网服务提供商:移动、联通、电信。
NSP:NSP是为ISP提供网络主干服务的公司,ISP从NSP购买带宽,为用户提供网络接入服务。NSP通过网络访问点NAP相连,交换数据包流量。
路由器的路由表记录了其子网络的ip地址,然而不知道上层网络的ip地址。当数据包到达路由器,路由器检查路由表是否有对应ip地址。没有则向上传输,去找更高层级的路由器,知道NSP的路由器,NSP网络路由器拥有最大的路由表。这个路由表会找到正确的ISP,再一层一层向下传输。
所以,当我输入www.baidu.com 时,会先到DNS服务器找到其对应的ip地址,然后经由TCP的应用层、传输控制层、网络、链路层,变成可以在电缆和网络电话线传输的数字信号,这时需要提及一个设备:锚。然后在网络层级上一层一层向上传输,直到找到百度服务器地址。按照同样的方式,逆向传输,我们就可以在电脑看到百度页面了。
题外话: 我试验了一下,我电脑和手机连接同一个网络,ip地址的前缀是一样的,意味着处于同一网段,但我电脑ping不通手机,我为手机设置了一个URL,竟然通过电脑浏览器可以访问。
另外,还有一种网络,虚拟机的网络,后面再写吧。
网络适配器
买来的电脑
1、网络适配器也称网卡,用于将计算机和计算机网络连接起来。
2、通常位于计算机主板上,将计算机内部数据传输转换成符合网络协议的数据。
3、将计算机内部的数字信号转换成网络上的模拟信号,通过网线和无线信号将这些信号发送到网络上,也可以将网络上的模拟信号转换成计算机内部的数字信号。
4、网络适配器支持多种不同类型的网络,如有线以太网(需要网线插入电脑才可以上网)、无线网络、蓝牙(蓝牙是一种短距离无线通信)。
5、同一台计算机可以拥有多个网络适配器,每个适配器都有自己的ip地址,例如一个计算机同时使用有线和无线接入网络,它会有两个不同的网络适配器,每个网络适配器都有自己的ip地址。但计算机的ip地址作为计算机在网络中的唯一标识,通常由计算机的操作系统分配管理。
6、当计算机有多个网络适配器时,系统会选择其中一个作为默认网络适配器,用于进行网络通信。
问:上述说蓝牙是一种短距离无线通信,我的电脑连接着蓝牙耳机,但蓝牙网络显示未连接。
答:电脑连接蓝牙连接的是蓝牙模块,用于设备和计算机之间进行通信,而蓝牙网络是一种网络,虽然经常由于传输速度慢而忽略,而在一些需要长时间联网又需要低功耗的连接,蓝牙网络发挥重要作用。打开电脑蓝牙,选择“加入个人局域网”。