2021-2-26编程语言知识点整理

以下内容是拼拼凑凑加个人理解,更多给自己作为笔记,持续减熵
在这里插入图片描述

Java

java最初由James Gosling编写,命名为Oak(硅谷常见的橡树)
1995年,java正式诞生于Sun(Stanford University Network)公司(后被oracle收购)
1996年1月23日,Sun发布了JDK1.0
java诞生的目的是可以方便移植到消费电子设备(例如微波炉、遥控器等)。
当初c、c++等语言在不同的cpu上完成任务,需要不同的编译器,所以Sun公司希望开发一种可移植的、平台独立的语言,可以使用这种语言生成在不同环境下运行各种CPU之上的代码。他们的努力最终导致了Java的出现。
随着万维网的出现,Java被推到计算机语言设计的最前沿,因为Web也需要可移植的程序。

Java的特点:

1.java的风格类似C++,从某种意义上讲,java是C++的一个变种

2.java摒弃了C、C++中的容易引发错误和难以理解的指针,结构,以及内存管理等

3.java提供了丰富的类库,很方便开发程序

4.java是完全面向对象的语言,支持 继承,重载,多态等面向对象的特性;C++是面向对象和面向过程的混合语言, C是纯面向过程的语言

5.java是一种强类型的语言,比C/C++检查还要严格,java区分大小写字母

6.java提供了自动垃圾回收机制gc,有效避免了C、C++的内存泄漏问题

7.java禁止非法访问内存,因为java没有指针,内存的申请和释放

8.跨平台,java的源代码编译成结构中立的中间格式,这种格式与机器无关,只要在安装有JVM(java虚拟机)的电脑上,都能运行这种与机器无关的中间文件,.class ,java一次编译,到处运行

9.对于不同的操作系统,会有不同的java虚拟机,这也就决定了java的可移植性

10、 java支持多线程,简单理解,如果是单核CPU,那么会通过时间片轮转的方式,多线程执行程序(并发编程?),如果是多核CPU,那么就可以理解为,两个或多个线程同时运行

java如何实现跨平台的

1.我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件

2.Java虚拟机JVM就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。

Java跨平台不是说其他语言不可以跨,只要它们有针对不同环境的编译器。主要是Java是编译文件级的跨平台,c/c++等是源代码级的跨平台。就是说Java是“一次编译,到处运行”,c/c++是“一次编写,到处编译”

JavaScript

JavaScript是目前web开发中不可缺少的脚本语言,是一种前端语言。js不需要编译即可运行,运行在客户端,需要通过浏览器来解析执行JavaScript代码。

诞生于1995年,开发公司是Netscape,当时的主要目的是验证表单的数据是否合法,用于他们浏览器的交互。

JavaScript本来应该叫Livescript,但是在发布前夕,想搭上当时超热的java顺风车,临时把名字改为了JavaScript。(也就是说js跟java是雷锋和雷峰塔的关系,当时只是想借助java的名气)

看到Netscape,不知道你是否想起那段历史,Navigator和IE大战,最后网景还是输给了微软的捆绑营销。

js的组成

(1)核心(ECMAScript):这一部分主要是js的基本语法。

(2)BOM:Brower Object Model(浏览器对象模型),主要是获取浏览器信息或操作浏览器的,例如:浏览器的前进与后退、浏览器弹出提示框、浏览器地址栏输入网址跳转等操作等。

(3)DOM:Document Object Model(文档对象模型),此处的文档暂且理解为html,html加载到浏览器的内存中,可以使用js的DOM技术对内存中的html节点进行修改,用户从浏览器看到的是js动态修改后的页面。(增删改查)

js的特点

交互性(它可以做的就是信息的动态交互)
安全性(不允许直接访问本地硬盘)
跨平台性(只要是可以解析js的浏览器都可以执行,和平台无关)

参考链接:https://blog.csdn.net/sswqzx/article/details/82796026

JavaScript和CSS、HTML

CSS决定网页的外观,HTML决定网页的内容,JavaScript决定了网页的交互

也就是网页可以分成三个层次,即:结构层(HTML)、表示层(CSS)、行为层(JavaScript)。

Node.js

这个名字看起来像是JavaScript的一个库,但其实不是,它是一个JavaScript的运行环境。

Node.js 是2009的时候由大神 Ryan Dahl 开发的。Ryan 的本职工作是用 C++ 写服务器,后来他总结出一个经验,一个高性能服务器应该是满足“事件驱动,非阻塞 I/O”模型的。C++ 开发起来比较麻烦,于是 Ryan 就想找一种更高级的语言,以便快速开发。

可以说有两点促成了 Nodejs 的诞生。首先第一点,Ryan 发现 JS 语言本身的特点就是事件驱动并且是非阻塞 I/O 的,跟他的思路正是绝配。第二点,Chrome 的 JS 引擎,也就是 V8 引擎是开源的,而且性能特别棒。于是 Ryan 就基于 V8 开发了 Node.js ,注意 Node.js 听名字好像是个 JS 库,其实不是的,Node.js 是 C++ 开发的。

小知识点:阻塞I/O

我们的程序都有read和write。在阻塞I/O程序里,当你调用read时,如果没有数据收到,那么线程或者进程就会被挂起,直到收到数据。

所以说 Node.js 不是库,是一个运行环境,或者说是一个 JS 语言解释器。

Node.js 最初的定位是提升 Ryan 自己的日常工作效率,也就是用来写服务器代码的,但是后来没有想到的是 Node.js 在前端领域却大放异彩。

先说几句 Node.js 在服务器端的发展。Node.js 的诞生带给人们的是个大大的惊喜,传统上 Web 开发者,前端用 JS 写,但是写服务器端代码的时候还必须用另外一种语言,类似 Ruby/Java/PHP 等。但是 Node.js 出现之后,JS 前后通吃了。如果去网上搜 Node.js 的资料,很多都是用 Node.js 去写服务器代码的。

来源:https://zhuanlan.zhihu.com/p/47822968

Node.js的优缺点

优点
单线程:在Java、PHP或者.net等服务器端语言中,会为每一个客户端连接创建一个新的线程,而每个线程需要耗费大约2MB内存,理论上一个8GB内存的服务器可以同时连接的最大用户数为4000个左右。要让Web应用程序支持更多的用户,就需要增加服务器的数量,而Web应用程序的硬件成本当然就上升了。Node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了,就触发一个内部事件,通过非阻塞I/O、事件驱动机制,让Node.js程序宏观上也是并行的。使用Node.js,一个8GB内存的服务器,可以同时处理超过4万用户的连接。另外,单线程的带来的好处,还有操作系统完全不再有线程创建、销毁的时间开销。

非阻塞I/O:因为CPU的效率是远远高于I/O设备的执行效率的,如果让CPU去等待I/O的执行,将会极大地浪费时间,降低性能,比如在访问数据库或者读文件的时候,在传统的单线程处理机制中,在执行了访问数据库或文件代码之后,整个线程都将暂停下来(阻塞I/O),等待数据库或者文件系统返回结果才能执行后面的代码。I/O阻塞了代码的执行极大地降低了程序的执行效率。由于Node.js中采用了非阻塞型I/O机制,因此在执行了访问数据库或文件的代码之后,将立即转而执行其他代码,把返回结果的处理代码放在回调函数中,从而提高了程序的执行效率。当某个I/O执行完毕时,将以事件的形式通知执行I/O操作的线程,线程执行这个事件的回调函数。为了处理异步I/O,线程必须有事件循环,不断的检查有没有未处理的事件,依次予以处理。阻塞模式下,一个线程只能处理一项任务,要想提高吞吐量必须通过多线程。而非阻塞模式下,一个线程永远在执行计算操作,这个线程的CPU核心利用率永远是100%。所以,这是一种特别有哲理的解决方案:与其人多,但是好多人闲着;还不如一个人玩命,往死里干活儿。

事件驱动:在Node中,客户端请求建立连接,提交数据等行为,会触发相应的事件。在Node中,在一个时刻,只能执行一个事件回调函数,但是在执行一个事件回调函数的中途,可以转而处理其他事件,然后返回继续执行原事件的回调函数,这种处理机制,称为“事件环”机制。Node.js底层是C++(V8也是C++写的),底层代码中,近半数都用于事件队列、回调函数队列的构建。

缺点

  1. 不适合CPU密集型应用;CPU密集型应用给Node.js带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起;

    (解决方案:分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起)

  2. 只支持单核CPU,不能充分利用CPU

  3. 可靠性低,一旦代码某个环节崩溃,整个系统都崩溃

    适用范围:当应用程序需要处理大量并发的I/O,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,Node.js非常适合。Node.js也非常适合与web socket配合,开发长连接的实时交互应用程序。比如:用户表单收集、考试系统、聊天室、图文直播、提供JSON的API(为前台Angular使用)。

https://www.cnblogs.com/zyrblog/p/7545868.html

PHP

PHP是老牌的 Web 后端开发语言
PHP最初是由勒多夫在1995年开始开发的
PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是绝佳的组合,如果再加上Apache服务器,就是相当完美的了。

PHP动态修改输出HTML展示内容
粗浅理解PHP功能类似于按下下一页之后展示内容,或者比如网页要展示动态的时间,也需要用到PHP

Python

强大的语言,不用多说,全能战神(似乎在游戏方面比较空缺的)

Python的创始人: Guido van Rossum
之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者。

教程很多,库也很丰富,总之充满了活力。

功能

WEB开发
python相比php\ruby的模块化设计,非常便于功能扩展;多年来形成了大量优秀的web开发框架,并且在不断迭代;如目前优秀的djangoflask,都继承了python简单、明确的风格,开发效率高、易维护,与自动化运维结合性好,python已经成为自动化运维平台领域的事实标准;众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣。

人工智能
基于大数据分析和深度学习而发展出来的人工智能本质上已经无法离开python的支持,目前世界优秀的人工智能学习框架如Google的TensorFlow 、FaceBook的PyTorch以及开源社区的神经网络库Karas等是用python实现的,甚至微软的CNTK(认知工具包)也完全支持Python,而且微软的Vscode都已经把Python作为第一级语言进行支持。

系统运维
Python在与操作系统结合以及管理中非常密切,目前所有linux发行版中都带有python,且对于linux中相关的管理功能都有大量的模块可以使用,例如目前主流的自动化配置管理工具:SaltStack Ansible(目前是RedHat的)。目前在几乎所有互联网公司,自动化运维的标配就是python+Django/flask,另外,在虚拟化管理方面已经是事实标准的openstack就是python实现的,所以Python是所有运维人员的必备技能。

金融
量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测

大数据
Python相对于其它解释性语言最大的特点是其庞大而活跃的科学计算生态,在数据分析、交互、可视化方面有相当完善和优秀的库(python数据分析栈:Numpy Pandas Scipy Matplotlip Ipython), 并且还形成了自己独特的面向科学计算的Python发行版Anaconda,而且这几年一直在快速进化和完善,对传统的数据分析语言如R MATLAB SAS Stata形成了非常强的替代性。

图形GUI
PyQT, WxPython,TkInter

Python优点

简单易学
特别适合初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。

开发效率高
Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。

高级语言
当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节

可移植性
由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行

可扩展性
如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。

可嵌入性
你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。

缺点

速度慢
Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些,因此这也是很多所谓的大牛不屑于使用Python的主要原因,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助测试工具才能体现出来,比如你用C运一个程序花了0.01s,用Python是0.1s,这样C语言直接比Python快了10倍,算是非常夸张了,但是你是无法直接通过肉眼感知的,因为一个正常人所能感知的时间最小单位是0.15-0.4s左右,哈哈。其实在大多数情况下Python已经完全可以满足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种情况下,当然还是建议你用C去实现的。

代码不能加密
因为Python是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。

多线程问题
这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。

Python的解释器

CPython
当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

PyPy
PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。

Jython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

IronPython
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

原文链接:https://blog.csdn.net/Python99889/article/details/105045171

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧易风船长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值