名词解释(通俗版)
Git(复制):
- git的最基本作用bai是版本du控制,比如你写zhi一个文档,老板一直让你dao改,这时笨的zhuan人会在原文档上直shu接改,聪明一点的会复制一下原文档,在副本上修改,这时老板说你的第三版比较好,笨的人煞笔了。。,聪明一点的就直接拷贝了第三版给客户发过去了。然后聪明一点的认为这次的事情完事了把其他没用的都删了,突然有一天老板说客户的意见和你最后一版的相同,这时聪明一点的人也煞笔了。。。。
来了个最聪明的人,会用git,他在本地建了一个版本库,每次老板让他修改,他就把之前的版本提交一下,并标明这版的主要特点,这样文件夹里就只有一个文档,每次老板说要那个版本的,他就直接从版本库里恢复一下。
git通常在编程中会用到,通常是多个人同时协作一个项目,有可能出现两个人同时修改一个文件,这时后提交的人会遇到冲突,需要解决冲突;git能够记录每个人的提交修改等形成日志,可以根据提交记录进行回滚;并且git支持分布式部署。
Servlet:
- 是一个规则(接口)。
- 浏览器通过url和ip地址访问到服务器,而服务器里面有静态资源和动态资源,其中,动态资源为什么让不同用户看到不同东西呢(比如你点开你的用户信息,跟别人同样点开查询自己信息窗口得到不同结果),就是因为其中的逻辑性,而这个逻辑性就是用Java代码写的(比如判断是哪个人查询自己的信息,最后打印哪个人的信息),我们一般把Java代码写到Java类里面,封装起来(Java的封装性)。
- 服务器的一个软件叫tomcat,我们用tomcat来运行封装起来的逻辑性Java类,但是,我们怎么让tomcat不是看到一个Java类就运行呢,那就需要一个规则来让它运行规定的类,而这个规则就是Servlet。
MVC与三层架构:
- 废话不多说直接上图(我自己的包名以及自己的理解可能与正规的不同,甚至有误,日后继续完善)
- 好处太明显了,分层,所以耦合度低,换哪个模块都不会产生太大影响,而且看着清晰,居家必备啊!
脚本(script):
-
转载于:https://www.zhihu.com/question/1990154
网关:
- 先举例:
假设你的名字叫小不点(很小,这里你就是一个url地址,指向某个网页资源),你住在一个大院子里,你的邻居有很多小伙伴,父母是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字,他听到了就会回应你,并且跑出来跟你玩。
但是你家长不允许你走出大门,你想与外界发生的一切联系,都必须由父母(网关)用电话帮助你联系。假如你想找你的同学小明聊天,小明家住在很远的另外一个院子里,他家里也有父母(小明的网关)。但是你不知道小明家的电话号码,不过你的班主任老师有一份你们班全体同学的名单和电话号码对照表,你的老师就是你的DNS服务器。于是你在家里和父母有了下面的对话:
小不点:妈妈(或爸爸),我想找班主任查一下小明的电话号码行吗?家长:好,你等着。(接着你家长给你的班主任拨了一个电话,问清楚了小明的电话)问到了,他家的号码是211.99.99.99
小不点:太好了!妈(或爸),我想找小明,你再帮我联系一下小明吧。
家长:没问题。(接着家长向电话局发出了请求接通小明家电话的请求,最后一关当然是被转接到了小明家家长那里,然后他家长把电话给转到小明).
就这样你和小明取得了联系。
如果搞清了什么是网关,默认网关也就好理解了。就好像一个房间可以有多扇门一样,一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。默认网关。默认网关一般填写192.168.x.1 - 专业解释:
网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)与主机的IP 地址作 “与” 运算的结果不同判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。网络A向网络B转发数据包的过程。
所以说,只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。那么这个IP地址是哪台机器的IP地址呢?网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。
复制于:百度百科(https://baike.baidu.com/item/%E7%BD%91%E5%85%B3/98992?fr=aladdin)
关于前端的一些东西:
- 平时前端用的是vue、Jquery框架(JavaScript语言的封装版,相当于java语言的封装的框架:mybatis等。题外话:以前用的C语言的封装是自己写一个class类,然后保存到文件夹里面,要用的时候拿出来调用就行了 ),用来做前端的。但是想起来学过C#语言,这不也是做可视化的吗?
- 后来一查,C#做的是server端的可视化,而JavaScript做的是client端的可视化。具体区别还没深入了解。
关于docker:
- Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。
- 1.不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成一些冲突。比如IIS和Apache访问端口冲突。这个时候你就要隔离.net开发的网站和php开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高。docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小,小就意味着省钱了。
- 2.你开发软件的时候用的是Ubuntu,但是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。
- 3.在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。总之docker就是集装箱原理。
- (这里转载于:作者:刘允鹏
链接:https://www.zhihu.com/question/28300645/answer/67707287
来源:知乎) - 来自野性我自己的理解:比如我只能呼吸中国的空气,但是我需要去美国做些什么事,我去了,可能就因为环境问题就会出问题,那这个时候我用docker集装箱将我封装起来,里面有一个完整的我需要的环境(即容器,eg:mysql容器),这样,把我“部署”到美国就可以正常用了。
- 补充:每个容器之间相互独立且每个容器里面都是一个完整的运行环境。比如我在虚拟机上安装mysql容器,因为这个mysql是装在Linux里面,所以mysql容器就是一个完整的小Linux。其实就是个套娃,自己创建一个Linux系统的虚拟机,加入的容器又是一个Linux,Linux里面的Linux有一个mysql。
与虚拟机相关的:
- 虚拟机:就是在你的电脑上开辟一个空间新创建一个电脑,因为与你的真实电脑是不相干的,一些“高危”操作可以在虚拟机上面玩,坏了就删掉,重建都行(不过数据要保存好)。
- Vagrant:帮助虚拟机搭建部署环境的运行在虚拟机上面的软件,比如给虚拟机安装系统,下载镜像,安装容器等等。
- Xshell:我目前理解的是相当于Java里面的maven,用管理虚拟机的,比如你有好多的虚拟机,难不成一台一台看嘛?对吧!不过我自己还没用。
前端相关的:
- node:相当于后端的jdk
- npm:相当于后端的管理工具maven
- vue:相当于后端的框架spring boot
- JavaScript:一门开发语言,相当于后端用的Java
- VS Code:相当于后端的开发工具IDEA
Http协议:参考 https://www.cnblogs.com/an-wen/p/11180076.html
开发中常说的脚手架:
- 这个指的是一种能快速搭建项目框架的工具称为脚手架。
平台模式:
- 顾名思义是在平台进行交互。传统的是集中式的,举几个例子:以前客户打车是打电话给叫车中心,然后分配给司机。这样的前提是客户和司机都越多越好,因为可能客户要去的地方,司机不方便,但是数据量非常大,匹配成功的可能性就大了,而且比较有保障。而现在是通过嘀嘀打车这个平台,没有中间的人,那么成本降低了,而且从集中式转为分布式的平台模式,这样解决了流量大的时候,集中式忙不过来计算的情况。弊端比如客户爽约,态度不好等等没有太大的保障。还有一个例子就是慈善平台,比如集中式的有红十字,也会有以上的优缺点,而平台模式的慈善,就是需要的人直接自己发布需求帮助,然后随机看到的捐款人捐款,这样又快又节约成本(红十字也要发工资啊,而且集中式的不容易公开透明),而且公开透明方便。
- 总的来说,平台存在需要:
- 供需双方需求旺盛(比如贷款其实就没那么旺盛),而且双方地位平等(比如我能借100快,但借钱的人只能还10快,我就没法借钱,最后还是通过集中式的【比如:银行】借钱)。
- 高频持续需求。
- 详情参考 https://zhuanlan.zhihu.com/p/20502217
云计算的三种模式:IaaS、PaaS、SaaS
- IaaS(Infrastructure as a Service):基础设施即服务。
- 举生活例子:你做蛋炒饭需要一个能够让你先炒鸡蛋,再炒饭的厨房吧,那么我不可能买厨房,搭建厨房,我要用,我可以临时租一个,然后我自己在里面按照步骤做蛋炒饭。
- 举实践例子:你搭建网站什么的,需要服务器,一般都是去租个服务器,你可以按流量租,也可以按年租,对吧。
- PaaS(Platform as a Service):平台即服务。
- 举生活例子:好了,你租了个厨房,你可以做蛋炒饭了,但是你不想或者说你不会亲手做蛋炒饭的步骤,你只知道要做什么,那你就可以拿别人炒好的鸡蛋、饭,按照你自己的顺序搭配在一起就是一个蛋炒饭了,对吧?
- 举实践例子:你用vue写前端的时候是不是可以用,比如element—ui的组件,他都已经做好了,你拿来用就行,对不对?再或者你要做一个程序,那已经有一些已经写好的功能,你拿来用就行,比如音乐播放器,你拿过来播放、评论、点赞的功能,对吧。
- SaaS(Software as a Service):软件服务化。
- 举生活例子:这下好了,你很懒,想直接要做好的蛋炒饭,可以直接吃的,那一家蛋炒饭公司有厨房,有技术,还会把各部分给拼装起来(部署),那么你只需要吃(享受服务)即可。
- 举实践例子:比如百度网盘,你只需要用它提供的上传和下载服务就行,你不需要自己搭建可以存储的服务器,也不需要写功能,更不需要把功能组合在一起形成给你提供服务的软件。再比如肯德基App,对吧,他替代了一个点餐员的功能,给客户提供了点餐服务,也为商家提供了节省一个点餐员的服务(也不需要自己学会点餐,只需要会用软件)。
- 总结一下吧:我作为开发人员,按理来说应该都会,但是我现在是个流水线上的一个工人,公司有自己的服务器,所以我可以考虑IaaS模式。而我平时写前端,写后端,有很多现成的组件,接口,我可以直接拿来用,那我可以考虑PaaS模式。但是作为一个部署人员,他不需要考虑基础设施的提供,也不需要写功能,只需要把各种功能搭配起来部署即可,他可以考虑SaaS模式。我突然明白为什么我们要会部署了,因为制作一个产品的成本,要会的成本越来越低,可替代性太强了。而对于软件即服务,我自己的理解是,它不同于以前其他软件,属于工具(第二产业)的范畴,它应该是属于服务(第三产业),因为工具就像是我需要足底按摩,我就买了个按摩仪器,买回家用到不能用为止。而SaaS就像是我去找个技师按摩,好就再来,不好就换,我真正要的不是工具,而是服务。
- 关于web服务器和tomcat:
- 今天偶然看到常见web服务器的介绍有Apache HTTP server、Nginx、Microsoft IIS、GWS,心中不禁产生了疑问,这些都是什么呢?一直认为tomcat就是web服务器。
通俗点来说web服务器的作用就是用户通过浏览器向web服务器发送http请求,web服务器解析http请求将请求路径的文件返回给浏览器,浏览器再将文件渲染显示给我们看,因此web服务器的作用就是返回服务端的静态文件。 - 那么tomcat又是什么呢?在了解Tomcat之前我们先要知道Servlet是什么,百度上说Servlet是用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容,看到这可能又迷糊了,说半天还是不知道Servlet是什么,其实Servlet就是一种用来处理网络请求的一套规范。
在用Eclipse搭建SSM项目的时候,不知道大家有没有导入过Servlet-api的jar包呢?这个实际上就是servlet以及它的实现。可以看到javax.servlet下的Servlet接口里面有Servlet的生命周期方法。
而javax.servlet.http下的就是基于http通信实现的servlet。而在tomcat的根目录的lib文件夹下也有servlet-api这个jar包,因此在tomcat运行应用程序时我们就不需要额外导入这个jar包了。
可以看到HttpServlet接口就定义了我们熟悉的一些http请求方法。 - 了解了什么是servlet后,那么tomcat自然就很好理解了,tomcat是servlet容器,同时它也包括了web服务器的功能,因此tomcat是web服务器的扩展,也可以理解为tomcat就是web服务器。那么为什么说tomcat是servlet容器呢?字面意思容器就是可以容纳很多东西,众所周知,在tomcat上部署应用程序的时候,我们是把应用程序放在tomcat根路径下的webapps文件夹下,而这个文件夹下可以放置多个应用程序,我们可以通过请求来决定具体访问那个应用,由此我们可以知道tomcat的整个运行流程
(1)用户通过浏览器向服务器发送请求
(2)tomcat接收请求后解析请求具体访问哪个应用
(3)tomcat创建一个HttpServletRequest对象,将用户发送的请求封装到这个对象里
(4)tomcat创建一个HttpServletResponse对象
(5)Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet对象
(6)HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息
(7)HttpServlet调用HttpResponse对象的有关方法,生成响应数据
(8)Servlet容器把HttpServlet的响应数据结果传给浏览器,浏览器再根据返回的response进行相应的渲染 - 综上我们还可以猜测到servlet的出现就是弥补以前web服务器只能访问静态资源的问题,有了servlet我们就可以通过浏览器与服务端进行动态交互了。
- 转载于:https://blog.csdn.net/weixin_30242907/article/details/99747200
- SQL中的左外连接:
- 左外连接——“left (out) join” , 以SQL语句左边的表为主体,根据右表进行条件查询,但是这个查询结果是左表与右表的交集(排序时先)和左表未与右表有交集的部分(排序时后)。右外连接与之相反而已,只是以右表为主体罢了。