以下内容是拼拼凑凑加个人理解,更多给自己作为笔记,持续减熵

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

2021-2-26编程语言知识点整理相关推荐

  1. 2021 考研线代知识点整理

    文章链接 https://gitee.com/fakerlove/linear-algebra 2021 考研线代(34分) 选择2个 填空题 1个 解答2 个 文章目录 2021 考研线代(34分) ...

  2. springboot知识点整理(2021)

    springboot知识点整理 参考网址 https://mp.weixin.qq.com/s/GjjxJt8OauumW_J2ps7tow Demo 脚手架项目地址: https://github. ...

  3. 《Linux系统管理与应用》课程知识点整理+书后习题全文解答(Linux知识点大纲)

    目录 第一章:Linux操作系统概述 知识点整理部分 课后习题与参考答案 第二章:Linux系统的环境搭建 知识点整理部分 课后习题与参考答案 第三章:Linux操作基础 知识点整理部分 课后习题与参 ...

  4. 2021届前端面试知识点(其他)

    2021届前端面试知识点(其他) 1. 什么是"前端工程化"? 2. xss跨站脚本攻击原理?如何进行?防御手段? 3. CSRF跨站请求伪造原理?如何进行?防御手段? 4. Sq ...

  5. Linux - 易错知识点整理(待更新)

    Linux - 易错知识点整理(待更新) 本文根据CSDN Linux进阶技能树整理的易错知识点(带练),参考资料Linux常用命令大全(非常全!!!),Linux面试题(2020最新版)(带问/练) ...

  6. 04741计算机网络原理知识点,04741计算机网络原理知识点整理.doc

    04741计算机网络原理知识点整理 1.计算机网络大发展 计算机网络从20世纪70年代开始发展,他的演变可以概括为 面向终端的计算机网络.计算机-计算机网络.开放式标准化网络以及因特网广泛应用和高速网 ...

  7. java基础知识点整理一

    java基础知识点整理一 引言 '''突然发觉任何一门语言的基础知识部分,都比较杂一些.如果个人经过梳理之后,知识体系系统化,可以让基础更加牢靠一些.但是还是会有一些遗忘.所以,我想把一些比较重要但是 ...

  8. 管理mysql表知识点,数据库知识点整理(全)

    <数据库知识点整理(全)>由会员分享,可在线阅读,更多相关<数据库知识点整理(全)(12页珍藏版)>请在人人文库网上搜索. 1.UNIT 1四个基本概念1.数据(Data):数 ...

  9. 【2022持续更新】大数据最全知识点整理-HBase篇

    大数据最全知识点整理-HBase篇 基础问题: 1.Hbase是什么 2.Hbase架构 3.Hbase数据模型 4.Hbase和hive的区别 5.Hbase特点 6.数据同样存在HDFS,为什么H ...

最新文章

  1. 新生选课系统使用指南
  2. hdu 2295 Radar 重复覆盖+二分
  3. 【错误记录】Google Play 上架报错 ( 您的应用包含违反“元数据”政策的内容 | GP 政策中心 )
  4. 【错误记录】布局组件加载错误 ( Attempt to invoke virtual method ‘xxx$Callback android.view.Window.getCallback()‘ )
  5. 堆栈指针ESP和EBP
  6. Python 黑帽子第二章运行截图
  7. php引号变量_下列PHP数据库insert语句中变量前后的点和双引号有什么作用?
  8. Python Map, Filter and Reduce
  9. 初次接触 Lottie
  10. mysql管理索引_Mysql管理表和索引
  11. C语言回溯算法求幂集,回溯法与树的遍历 - 求幂集
  12. 易居IPO后首份成绩单透露了什么秘密?|一点财经
  13. java表白程序_Java实现表白小程序
  14. 计算机mac地址设置路由器,路由器设置:如何查看电脑/手机的MAC地址?
  15. matlab 平方根法解方程组,matlab改进平方根法
  16. 天意PE维护系统 V2021.7.16版
  17. Freemarker 输出 $ 特殊符号
  18. 8本好书上新:越忙越要多读书
  19. 虚拟机 服务器死机,VMware虚拟机开机卡死黑屏,进不了系统解决办法
  20. 【软件质量保证与测试】2.4软件测试与软件开发的关系

热门文章

  1. 北邮php,周琳娜-北京邮电大学网络空间安全学院
  2. Vysor使用——用电脑操作手机 无需Root
  3. linux 查询ip归属地的工具,Linux 通过shell查询ip归属地(curl请求转码)
  4. 惠普HP打印机打印全黑是什么原因
  5. 物联网是如何工作的?
  6. 二维码制作方法分享,学会这招轻松制作二维码
  7. Unity3D学习笔记6——GPU实例化(1)
  8. JDBC 基础、CRUD、分页 第一节
  9. Oracle EBS 付款后无法创建会计科目
  10. DB2数据库配置db cfg