WEB服务端开发必懂的概念和底层原理,通过对比的方式让大家更好的理解和使用

本文涉及的产品
.cn 域名,1个 12个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: golang 源码级别支持协程,实现简单。协程使用,当底层遇到阻塞会自动切换,也就是逻辑层通过同步方式实现异步,充分利用了系统资源,同时避免了异步状态机的反人类异步回调,实现方式更为直观简单。golang 协程是通过多线程维护,所以避免不了锁的使用,但也极大解决了研发效率问题。

Go


高性能-协程


golang 源码级别支持协程,实现简单。协程使用,当底层遇到阻塞会自动切换,也就是逻辑层通过同步方式实现异步,充分利用了系统资源,同时避免了异步状态机的反人类异步回调,实现方式更为直观简单。 golang 协程是通过多线程维护,所以避免不了锁的使用,但也极大解决了研发效率问题。


生态


有谷歌做背书,生态丰富,可以轻松获得各种高质量轮子。这样用户可以专注于业务逻辑,避免重复造轮子。


部署


部署简单,源码编译成执行文件后,可以直接运行,减少了对其它插件依赖。不像其它语言,执行文件依赖各种插件,各种库,研发机器运行正常,放到生产环境上,死活跑不起来,需要各种安装和版本匹配。


特点


看好Go的未来,在开发速度和运行速度之间找到了平衡,运行速度堪比Java,开发简单程度堪比PHP,是21世纪非常有竞争力的开发语言。


Java


简单性


Java语言继承了C++语言的优点,去掉了C++中学习起来比较难的多继承、指针等概念,所以Java语言学习起来更简单,使用起来也更方便。


面向对象


Java是一种面向对象的编程语言。


分布性


Java设计成支持在网络上应用,它是分布式语言。所以只要用Java编写了一个程序,就可以到处应用。可以节省大量人力物力。


编译和解释性


Java编译程序生成字节码,而不是通常的机器码,这使得Java开发程序比用其他语言开发程序快很多。


稳健性


Java刚开始被设计出来就是为了写高可靠和稳健的软件的。所以用Java写可靠的软件很容易。目前许多第三方交易系统、银行平台的前台和后台电子交易系统等都会用Java语言开发。


安全性


Java的存储分配模型是它防御恶意代码的主要方法之一。所以很多大型企业级项目开发都会选择用Java开发。


可移植性


Java并不依赖平台,用Java编写的程序可以运用到任何操作系统上。


高性能


Java是一种先编译后解释的语言,所以它不如全编译性语言快。但Java设计者制作了“及时”编译程序,这样就可以实现全编译了。


多线索性


Java是多线索语言,它可以同时执行多个程序,能处理不同任务。


动态性


Java语言设计成适应于变化的环境,它是一个动态的语言。


Python


Python 是一种面向对象、解释型、弱类型的脚本语言,它也是一种功能强大而完善的通用型语言。


相比其他编程语言(比如 Java),Python 代码非常简单,上手非常容易。比如我们要完成某个功能,如果用 Java 需要 100 行代码,但用 Python 可能只需要 20 行代码,这是 Python 具有巨大吸引力的一大特点。


Python 的两大特色是清晰的语法和可扩展性:


Python 的语法非常清晰,它甚至不是一种格式自由的语言。例如,它要求 if 语句的下一行必须向右缩进,否则不能通过编译。 Python 的可扩展性体现为它的模块,Python 具有脚本语言中最丰富和强大的类库(这些类库被形象地称为“batteries included ,内置电池”),这些类库覆盖了文件 I/O、GUI、网络编程、数据库访问、文本操作等绝大部分应用场景。


此外,Python 的社区也很发达,即使一些小众的应用场景,Python 往往也有对应的开源模块来提供解决方案。


PHP


  1. 成本低、易用性、跨平台兼容性、稳定性 、学起来快易上手、广阔的数据库连接、可伸缩性、html嵌入式开发
  2. PHP在坊间一直被称为是“PHP是最好的语言”不是没有道理的,非常容易上手,对开发者非常友好,但是不够安全,性能不够好,我个人是从PHP转Go了。


TCP协议和UDP协议的对比?


TCP协议的优点:


  • 可靠稳定
  • TCP在传输数据之前,会有三次握手来建立连接
  • TCP在传输数据时,有确认、窗口、重传、拥塞控制机制
  • TCP在传输数据完成后,会断开连接用来节省系统资源


TCP协议的缺点:


  • 慢,传输效率低
  • 占用系统资源高
  • 容易被攻击(DOS/DDOS/CC攻击)


UDP协议的优点:


  • 无连接的方式,占用系统资源少
  • 比TCP安全


UDP协议的缺点:


  • 不可靠,不稳定
  • 没有可靠的机制,当网络条件不好时,容易丢包


各种攻击的名词解释


  • DOS攻击:Denial of Service,即拒绝服务攻击,其目的是使计算机或网络无法提供正常的服务。
  • 常见的DOS攻击有
  • 计算机网络带宽攻击:以极大的通信量冲击网络,是所有可用的网络资源消耗殆尽,最终导致合法的用户请求也无法通过。
  • 连通性攻击:用大量的连接请求冲击计算机,使得所有可用的操作系统资源消耗殆尽,最终计算机无法处理正常用户的请求。
  • DDOS攻击:Distributed Denial of Service,即分布式拒绝服务攻击,是在DOS攻击上发展而来的。因为个人黑客攻击者很难使用高带宽的资源,为了克服这个缺点,黑客们开发了分布式的攻击。
  • 攻击者简单工具,集合许多网络带宽同时对一个目标发动大量的攻击请求,这就是DDOS攻击。
  • CC攻击:Challenge Collapsar Attack,挑战黑洞攻击,是DDoS攻击的一种类型
  • 使用代理服务器向受害服务器发送大量貌似合法的请求


阻塞调用和同步调用的区别?


  • 首先说明一下,阻塞调用和同步调用是不同的
  • 从底层来讲,同步调用的当前线程还是激活的,只是从逻辑上来讲没有返回而已。当前线程还可以处理其他各种各样的信息。
  • 但是阻塞调用则不然,阻塞调用是说当前线程是阻塞不可用的状态,不仅没有返回。而且当前线程不可以处理其他信息。


关于同步异步I/O 和 阻塞非阻塞I/O 更深刻的理解


  • 首先说明一下针对网络IO的操作,可以分为两个阶段,准备阶段和操作阶段
  • 准备阶段:判断能否进入准备阶段,即等待数据是否可用,这一阶段在内核进程中完成
  • 操作阶段:执行实际的IO调用,数据从内核缓冲区拷贝到用户进程缓冲区。
  • 同步或者异步IO
  • 是指访问数据的机制,也就是实际IO操作的完成方式
  • 同步一般指主动发送请求并等待IO操作完毕的方式,IO操作未完成前,会导致应用程序挂起
  • 异步是指用户触发IO操作后就开始做自己的事情,当IO操作已经完成的时候会得到IO完成的通知(==异步的特点就是通知==),这样可以使进程在数据读写时不阻塞。
  • 阻塞或者不阻塞IO
  • 主要是指IO操作第一阶段的完成方式(内核缓冲区的数据未就绪),数据还没有准备好的时候,应用程序的表现,如果这里进程挂起,就是阻塞IO,否则是非阻塞IO。
  • 阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取不同的方式。
  • 更简单点说:阻塞和非阻塞是一种读取或者写入操作函数的实现方式,阻塞方式下读取或者写入函数将一直等待;非阻塞方式下,读取或者写入函数会立即返回一个状态值。


http与https的区别?


  1. https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
  2. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议。
  3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 http的连接很简单,是无状态的;
  4. HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。


session与cookie的对比?


  1. session数据存储在服务器,cookie数据存储在客户端浏览器上
  2. cookie不是很安全,我们可以查询伪造存储再客户端的cookie进行欺骗请求,考虑到安全应该使用session
  3. session会在一定时间内保存在服务器,当访问量增多时,会比较占用服务器性能,考虑到性能时可以使用cookie
  4. 单个cookie保存的数据不能超过4kb,很多浏览器会限制一个站点最多保存的cookie数
  5. cookie具有不可跨域名性
  6. 会话cookie和持久cookie:
  7. 会话cookie即不设置过期时间,会随着浏览器关闭就消失的cookie,一般存储在内存中;
  8. 持久cookie即设置了过期时间,即使关闭了浏览器也不会消失的cookie,一般存在硬盘中;再次打开浏览器仍然有效,直到达到过期时间。
  9. session共享:
  10. 对于多网站单服务器(同一父域名不同子域名)如何解决不同网站之间的SessionId共享问题?由于域名不同(a.test.com,b.test.com),而sessionId又分别存储再不同的cookie中,我们的思路就是改变cookie的存储范围到父域名,达到共享cookie的目的,从而实现SessionId的共享。
  11. 由此带来的弊端是子站之间的cookie信息也被共享了
  12. 比较好的实践是:把登录信息等敏感数据保存到session中,其他非敏感数据保存在cookie中


输入一个网址到浏览器渲染出页面的流程是什么?


  1. 在客户端浏览器中输入网址URL。
  2. 发送到DNS(域名服务器)获得域名对应的WEB服务器的IP地址。
  3. 客户端浏览器与WEB服务器建立TCP(传输控制协议)连接。
  4. 客户端浏览器向对应IP地址的WEB服务器发送相应的HTTP或HTTPS请求。
  5. WEB服务器响应请求,返回指定的URL数据或错误信息;如果设定重定向,则重定向到新的URL地址。
  6. 客户端浏览器下载数据,解析HTML源文件,解析的过程中实现对页面的排版,解析完成后,在浏览器中显示基础的页面。
  7. 分析页面中的超链接,显示在当前页面,重复以上过程直至没有超链接需要发送,完成页面的全部显示。
相关文章
|
22天前
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南
|
1月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
185 45
|
29天前
|
存储 前端开发 JavaScript
如何在项目中高效地进行 Web 组件化开发
高效地进行 Web 组件化开发需要从多个方面入手,通过明确目标、合理规划、规范开发、加强测试等一系列措施,实现组件的高效管理和利用,从而提高项目的整体开发效率和质量,为用户提供更好的体验。
32 7
|
1月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
|
1月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
40 2
|
1月前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
54 1
|
1月前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
1月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
66 2
WK
|
1月前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
114 0
|
1月前
|
JavaScript 前端开发 Java
SpringBoot_web开发-webjars&静态资源映射规则
https://www.91chuli.com/ 举例:jquery前端框架
23 0