常见编程技术总结
前言
写这篇文章的目的是,当我试图去找实习时,发现面试官要求中有很多技术都不懂,甚至没听说过,于是决定将一些常见的编程技术搞懂并记录下来
这篇文章的受众是,做过一个编程项目的,这样你才能有种切身的感觉;当然纯小白也可以看,只是有些内容是默认你有编程知识的,可能有些晦涩
基础编程知识
编程语言和脚本语言
编程语言
概念:用来定义计算机程序的形式语言,是一种将程序员所定义的代码,编译即翻译成计算机所认识的二进制代码的工具
区别:1.静态语言,一旦运行无法更改代码,除非停止程序
2.需要编译器编译后执行
3.具有系统性,规则强可以编程出简洁美观的代码,易读。但需要系统学习才能掌握
脚本语言
概念:是为了缩短传统的编写-编译-链接-运行过程而创建的计算机编程语言
区别:1.动态语言,可以实时更改代码
2.不需要编译器,只需要解释器即可执行
3.可以减少开发的时间,简单易学。但缺乏系统性而且语法较为散漫
总结
1.编程语言需要编译器,具有系统性。脚本语言需要解释器,简单易学
2.编程语言是静态的,只能当程序停下后修改代码。脚本语言是动态的,可以实时修改代码
3.随着技术的发展,其实脚本语言变得越来越强,和编程语言的界限也比较模糊,比如Python,可以将它视为编程语言了,因为它很强大
4.你只需要清楚静态语言和动态语言、编译型语言和解释型语言的区别即可
5.另外有一种半编译型语言,比如C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了中间语言运行库运行中间码
6.Java也是一种特殊的语言,它是经过先编译,后解释的过程
7.广义的编程语言=狭义的编程语言+脚本语言;通常情况下,我们说的编程语言是指广义的编程语言
强类型与弱类型语言
强类型
概念:强类型语言是一种强制类型定义的语言,即一旦某一个变量被定义类型,如果不经强制转换,那么它永远就是该数据类型
eg:C/C++、Java等属于强类型语言
弱类型
概念:弱类型语言是一种弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过现行强制转换
eg:Python、JS等属于弱类型语言
接口与API
接口
概念:定义一个标准的入口然后供后续子孙继承使用。通俗来说,就是定义一个模板,当继承这个接口后,自动具有接口的特征
作用:1.使项目分离,面向接口开发,项目易维护
2.实现接口的人不必要关心谁去使用,而使用接口的人也不用关心实现的细节
API
概念:也可被称为接口,本质上是一个函数;通过接收不同的值,来返回相应的数据
作用:1.当需要使用API时,必须遵守API提供方的规则
2.不需要看实现某功能的源码,只需要知道向API提供哪些值就行,大大简化应用开发;同时也易于维护
3.允许两个不相关的程序互相通信
总结
1.接口包含API,API属于接口
2.两者本质上都是为了避免重复造轮子而存在的
其他
技术栈
概念:技术栈(Tech Stack)是指在软件开发过程中所使用的各种技术和工具的集合,包括编程语言、开发框架、数据库、操作系统、云服务等等。
中间件
概念:与业务无关的技术类组件,做各个服务中连接问题;通俗来讲就是不需要我们自己开发代码,通过第三方工具来实现功能,那么此工具就是中间件
Ps.狭义上的中间件是指介于操作系统和业务应用程序之间,利用操作系统的能力, 为一个或者多个应用程序提供基础服务的软件,例如数据库
作用:中间件,一直都是为业务应用程序服务的,它不直接服务于业应用程序的用户,用户也感知不到它的存在;例如从某某网站获取数据到本地,再展现给用户,那么从某某网站获取数据使用的技术就是中间件
高内聚低耦合
高内聚概念:每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码;如果各个元素(语句、程序段)之间的联系程度越高,则内聚性越高
低耦合概念:如果模块之间联系越低,即独立性高,则耦合性越低
eg.一个项目中有20个方法调用良好,但是要修改了其中一个,另外的19个都要进行修改,这就是高耦合!独立性太差!
作用:使程序模块的可重用性、移植性大大增强
Web框架
前端框架
概念:也称Web前端框架;前端框架是包含预先编写好代码的工具集,可以高效开发前端页面
常用:Vue、React、Angular
Vue
概念:全称Vue.js,是基于JavaScript 的前端框架
作用:提供声明式、组件化的模型,可高效开发前端页面
核心:
1.渐进式框架(一开始不需要你完全掌握它的全部功能特性,可以后续逐步增加功能。没有多做职责之外的事情)-->即用即学
2.API选择(即书写vue代码的方式):
选项式(适合小项目):优点:简单易上手
缺点:代码组织性差,难维护
组合式(适合大项目):优点:代码组织性强,易维护
缺点:学习成本高
后端框架
概念:帮助开发者在后端逻辑中生成动态的HTML页面,并与前端进行交互;例如GET/POST等功能
常用:Java的Spring Boot、Python的Django、C#的ASP.NET core、Ruby的Rails、PHP的Laravel
Django
概念:基于Python的Web 应用框架,采用MVC模型的设计模式
优势:1.由于其计算和统计功能,它在机器学习和AI领域占据了主导地位
2.包含电池,可以使用现成的软件包来添加功能,可以专注于添加高级功能
3.MVC设计模式,简单易懂
Q&A
Q:什么是MVC设计模式?
A:Model(模型)+ View(视图)+ Controller(控制器),通俗来说就是使用Model加载数据库,使用View设计前端页面,使用Controller设计后端逻辑
Ps.需要注意的是,有些框架是前后端不分离框架,即有些Web框架既可以开发前端也可以开发后端 常用:Python的Django、Java 的Spring MVC、PHP 的Laravel
数据库
分类
1.SQL(关系型数据库)
MySQL、SQL Server、Oracle
2.NoSQL(非关系型数据库)
a.键值数据库[常用于内容缓存、频繁读写]:Redis、Memcached
b.文档数据库[常用于存储爬取的数据]:MongoDB、ES
c.列族数据库[可扩展性强,查找速度快]:Bigtable、HBase
e.图像数据库[社交网络、推荐系统,专注构建关系图谱]:Neo4j、InfoGrid
编程语言
这里不介绍C/C++、Java类似的常用语言
常用:JS、TypeScript、Ruby、Go、PHP
JS
概念:全称JavaScript,一种脚本编程语言,可以在网页上实现复杂的功能
作用:1.JS与HTML+CSS常用于开发网页
2.在浏览器中的 JavaScript 可以做与网页操作、用户交互和 Web 服务器相关的所有事情
3.与Node.js结合可以实现在服务端运行
学习JS推荐教程:JavaScript算法
TypeScript
概念:TypeScript是JavaScript的严格语法超集,提供了可选的静态类型检查
作用:1.由于JS可以开发很多复杂的项目,但JS缺乏可靠性。为了增强JS,则开发了TypeScript
2.TypeScript可以编译成纯JavaScript代码
学习TypeScript推荐教程:阮一峰大神
Ruby
概念:一门纯粹的面向对象编程语言(脚本语言)。发明者致力于”试着让Ruby更自然,而不是更简单,让一切符合生活常规“
作用:1.面向人话的语言,十分易用
2.可以开发Web框架,即Rails
Go
概念:全称Golang,语法接近C语言,但支持垃圾回收功能;其性能强劲,高并发,适合开发巨型项目
作用:1.应用于搭载Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。 对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率;适合游戏服务端开发
2.现阶段Golang被用于开发其云计算相关产品
PHP
概念:是一种服务器端脚本语言;主要是根据指令动态生成HTML文件
作用:可以快速创建动态网页
Q&A
Q:PHP是做前端还是后端?
A:php本质上是做后端(服务端),只是在html中嵌入php代码,通过后端实现代码的逻辑
Q:怎么理解PHP,它是一个后端框架吗?
A:可以把php当作C#,它们都是编程语言;而PHP在html中的嵌入,相当于C# .net的Razor视图的嵌入,都是需要从后端返回数据到前端的;
同时PHP只是一个编程语言,它也有特定后端框架,如Laravel,而C#也是,它的后端框架可以是ASP.net MVC
常用技术
Git
概念:适用于团队协作开发的版本控制系统
作用:1.方便不同团队成员编写的文件的整合,极大增加团队的协作效率
2.便于脱机(离线)工作
Docker
概念:容器技术,可以一键创建或配置环境
作用:1.可以消除不同机器间的环境配置问题
2.不影响本机环境,相比虚拟机更加的轻便和方便传播
#其他:
Node.js
概念:Node.js是JavaScript 运行环境,使开发者可以在服务端运行JS;同时它是跨平台的,使JS不局限于浏览器,可以在GUI程序上使用
作用:让JS可以在不同环境执行
Q&A:
Q:为什么要将JS在服务端上运行?
A:因为JS不只是脚本语言,它是一门编程语言,可以用来开发后端(如PHP)。具体可查看:世界上被人误解最深的编程语言。
Q:什么是GUI?
A:GUI即图形用户界面,简单来说就是类似QQ的界面就是GUI;手机上APP的界面也是GUI。也就是说通过Node.js,可以使JS在这些上面运行。
Ajax
概念:Ajax不是一个编程语言,而是一个实现异步交互的方法
作用:1.通过异步交互,不需要等待返回,可以随时发送下一个请求;实现不刷新页面,局部信息更新
2.Ajax不是一个具体的某种方法,而是只要JS调用异步通讯组件并使用格式化的数据来更新web页面上的内容或操作过程,那么我们用的方法就可算是Ajax
Q&A
Q:Ajax通俗理解是什么?
A:可以理解就是,以前更新信息必须要刷新整个页面,而现在只会刷新局部页面;可以减少服务器资源的占用
Q:什么是同步?什么是异步?
A:同步交互,就是指发送一个请求,需要等待返回,然后才能够发送下一个请求;异步交互,就是指发送一个请求,不需要等待返回,随时可以再发送下一个请求
jQuery
概念:jQuery是JavaScript 的函数库,其宗旨是”写得更少, 而做得更多“
作用:1.消除浏览器差异:你不需要自己写冗长的代码来针对不同的浏览器来绑定事件,编写Ajax等代码
2.优化了JS的操作,不需要复杂的JS代码
REST
概念:是一种基于Web服务的软件架构风格,而不是标准;它是指用URL定位资源、用HTTP动词(GET,POST,DELETE,DETC)描述操作的一种方法
作用:1.前后端接口会用到
2.REST中文名为表现层状态转移,通俗来讲就是资源在网络中以某种表现形式进行状态转移
3.总结:
看url就知道要什么
看http method就知道干什么
看http status code就知道结果如何
RESTful API
概念:简称REST API,是一种符合REST风格的接口设计规范
作用:1.约束API接口的输入与输出,使它们更易读、易维护
2.RESTful API遵循安全、可靠和高效的软件通信标准
Q&A
Q:URI、URL、URN是什么?
A:URI是统一资源标识符,用来标识网上资源的,相当于有了URI之后,就可以找到该资源;URI包括URL(定位符)和URN(名称)这两大类;任何东西,只要能够唯一地标识出来,都可以说这个标识是 URI ;
URL是统一资源定位符,指一个给定的独特资源在 Web 上的地址;
URN是统一资源名称,顾名思义就是指 Web 上资源的名称
Q:http method是什么?
A:method是方法的意思,简单来说就是 增删改查 等操作http资源的方法
Q:举个例子呢?
A:假设我们有一个friends接口,现在进行删除操作:
使用REST风格:URI: generalcode.cn/va/friends 接口类型:DELETE
不使用该风格:URI:generalcode.cn/va/deleteFriends
也就是说在URI上不使用deleteFriend,而是直接使用friends,通过接口类型判断操作
MQ(消息队列)
概念:一种进程间的通信方式;通过异步方式来处理数据,减少同步等待时间
作用:异步、削峰、解耦
详细了解:敖丙
XML
概念:是可扩展标记语言,主要用于数据的传输
作用:1.通常被用作描述内容,用于结构化的数据
2.可以理解为类似JSON的用作传输数据的语言