JSP还能撑多久? -- 关于WEB开发的一些思考(1)-程序员宅基地

技术标签: 程序员  java  前端  开发语言  


以前老的方式是:

1.客户端请求 2.服务端的 servlet 或 controller 接收请求(后端控制路由与渲染页面,整个项目开发的权重大部分在后端) 3.调用 service,dao 代码完成业务逻辑 4.返回 jsp

5.jsp 展现一些动态的代码

新的方式是:

1.浏览器发送请求 2.直接到达 html 页面(前端控制路由与渲染页面,整个项目开发的权重前移)

3.html 页面负责调用服务端接口产生数据(通过 ajax 等等,后台返回 json 格式数据,json 数据格式因为简洁高效而取代 xml) 4.填充 html,展现动态效果,在页面上进行解析并操作 DOM。

(有兴趣的童鞋可以访问一下阿里巴巴等大型网站,然后按一下 F12,监控一下你刷新一次页面,他的 http 是怎么玩的,大多数都是单独请求后台数据,

使用 json 传输数据,而不是一个大而全的 http 请求把整个页面包括动+静全部返回过来)

总结一下新的方式的请求步骤:

大量并发浏览器请求—>web 服务器集群(nginx)—>应用服务器集群(tomcat)—>文件/数据库/缓存/消息队列服务器集群

同时又可以玩分模块,还可以按业务拆成一个个的小集群,为后面的架构升级做准备。

前后分离的优势


1.可以实现真正的前后端解耦,前端服务器使用 nginx。

前端/WEB 服务器放的是 css,js,图片等等一系列静态资源(甚至你还可以 css,js,图片等资源放到特定的文件服务器,例如阿里云的 oss,并使用 cdn 加速),前端服务器负责控制页面引用&跳转&路由,前端页面异步调用后端的接口,后端/应用服务器使用 tomcat(把 tomcat 想象成一个数据提供者),加快整体响应速度。

(这里需要使用一些前端工程化的框架比如 nodejs,react,router,react,redux,webpack) 2.发现 bug,可以快速定位是谁的问题,不会出现互相踢皮球的现象。

页面逻辑,跳转错误,浏览器兼容性问题,脚本错误,页面样式等问题,全部由前端工程师来负责。

接口数据出错,数据没有提交成功,应答超时等问题,全部由后端工程师来解决。

双方互不干扰,前端与后端是相亲相爱的一家人。 3.在大并发情况下,我可以同时水平扩展前后端服务器,比如淘宝的一个首页就需要 2000+台前端服务器做集群来抗住日均多少亿+的日均 pv。

(去参加阿里的技术峰会,听他们说他们的 web 容器都是自己写的,就算他单实例抗 10 万 http 并发,2000 台是 2 亿 http 并发,并且他们还可以根据预知洪峰来无限拓展,很恐怖,就一个首页。。。) 4.减少后端服务器的并发/负载压力

除了接口以外的其他所有 http 请求全部转移到前端 nginx 上,接口的请求调用 tomcat,参考 nginx 反向代理 tomcat。

且除了第一次页面请求外,浏览器会大量调用本地缓存。 5.即使后端服务暂时超时或者宕机了,前端页面也会正常访问,只不过数据刷不出来而已。 6.也许你也需要有微信相关的轻应用,那样你的接口完全可以共用,如果也有 app 相关的服务,

那么只要通过一些代码重构,也可以大量复用接口,提升效率。(多端应用) 7.页面显示的东西再多也不怕,因为是异步加载。

8.nginx 支持页面热部署,不用重启服务器,前端升级更无缝。 9.增加代码的维护性&易读性(前后端耦在一起的代码读起来相当费劲)。 10.提升开发效率,因为可以前后端并行开发,而不是像以前的强依赖。 11.在 nginx 中部署证书,外网使用 https 访问,并且只开放 443 和 80 端口,其他端口一律关闭(防止黑客端口扫描),

内网使用 http,性能和安全都有保障。 12.前端大量的组件代码得以复用,组件化,提升开发效率,抽出来!

注意事项


1.在开需求会议的时候,前后端工程师必须全部参加,并且需要制定好接口文档,后端工程师要写好测试用例(2 个维度),不要让前端工程师充当你的专职测试,

推荐使用 chrome 的插件 postman 或 soapui 或 jmeter,service 层的测试用例拿 junit 写。ps:前端也可以玩单元测试吗? 2.上述的接口并不是 java 里的 interface,说白了调用接口就是调用你 controler 里的方法。 3.加重了前端团队的工作量,减轻了后端团队的工作量,提高了性能和可扩展性。 4.我们需要一些前端的框架来解决类似于页面嵌套,分页,页面跳转控制等功能。(上面提到的那些前端框架)。 5.如果你的项目很小,或者是一个单纯的内网项目,那你大可放心,不用任何架构而言,但是如果你的项目是外网项目,呵呵哒。 6.以前还有人在使用类似于 velocity/freemarker 等模板框架来生成静态页面,仁者见仁智者见智。 7.这篇文章主要的目的是说 jsp 在大型外网 java web 项目中被淘汰掉,可没说 jsp 可以完全不学,对于一些学生朋友来说,jsp/servlet 等相关的 java web 基础还是要掌握牢的,不然你以为 springmvc 这种框架是基于什么来写的? 8.如果页面上有一些权限等等相关的校验,那么这些相关的数据也可以通过 ajax 从接口里拿。 9.对于既可以前端做也可以后端做的逻辑,我建议是放到前端,为什么?

因为你的逻辑需要计算资源进行计算,如果放到后端去 run 逻辑,则会消耗带宽&内存&cpu 等等计算资源,你要记住一点就是

服务端的计算资源是有限的,而如果放到前端,使用的是客户端的计算资源,这样你的服务端负载就会下降(高并发场景)。

类似于数据校验这种,前后端都需要做! 10.前端需要有机制应对后端请求超时以及后端服务宕机的情况,友好的展示给用户。

扩展阅读 1.其实对于 js,css,图片这类的静态资源可以考虑放到类似于阿里云的 oss 这类文件服务器上(如果是普通的服务器&操作系统,存储在到达 pb 级的文件后,或者单个文件夹内的文件数量达到 3-5 万,

io 会有很严重的性能问题),

再在 oss 上配 cdn(全国子节点加速),这样你页面打开的速度像飞一样, 无论你在全国的哪个地方,并且你的 nginx 的负载会进一步降低。 2.如果你要玩轻量级微服务架构,要使用 nodejs 做网关,用 nodejs 的好处还有利于 seo 优化,因为 nginx 只是向浏览器返回页面静态资源,而国内的搜索引擎爬虫只会抓取静态数据,不会解析页面中的 js,

这使得应用得不到良好的搜索引擎支持。同时因为 nginx 不会进行页面的组装渲染,需要把静态页面返回到浏览器,然后完成渲染工作,这加重了浏览器的渲染负担。

浏览器发起的请求经过 nginx 进行分发,URL 请求统一分发到 nodejs,在 nodejs 中进行页面组装渲染;API 请求则直接发送到后端服务器,完成响应。 3.如果遇到跨域问题,spring4 的 CORS 可以完美解决,但一般使用 nginx 反向代理都不会有跨域问题,除非你把前端服务和后端服务分成两个域名。

JSONP 的方式也被淘汰掉了。 4.如果想玩多端应用,注意要去掉 tomcat 原生的 session 机制,要使用 token 机制,使用缓存(因为是分布式系统),做单点,对于 token 机制的安全性问题,可以搜一下 jwt。 5.前端项目中可以加入 mock 测试(构造虚拟测试对象来模拟后端,可以独立开发和测试),后端需要有详细的测试用例,保证服务的可用性与稳定性。

总结

前后端分离并非仅仅只是一种开发模式,而是一种架构模式(前后端分离架构)。

千万不要以为只有在撸代码的时候把前端和后端分开就是前后端分离了。需要区分前后端项目前端项目与后端项目是两个项目,放在两个不同的服务器,需要独立部署,两个不同的工程,两个不同的代码库,不同的开发人员。前后端工程师需要约定交互接口,实现并行开发,开发结束后需要进行独立部署,前端通过 ajax 来调用 http 请求调用后端的 restful api。前端只需要关注页面的样式与动态数据的解析&渲染,而后端专注于具体业务逻辑

开发人员分离


以前的 JavaWeb 项目大多数都是 java 程序员又当爹又当妈,又搞前端(ajax/jquery/js/html/css 等等),又搞后端(java/mysql/oracle 等等)。

随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只管前端的事情,后端工程师只管后端的事情。

正所谓术业有专攻,一个人如果什么都会,那么他毕竟什么都不精。

大中型公司需要专业人才,小公司需要全才,但是对于个人职业发展来说,我建议是分开。

对于后端 java 工程师:

把精力放在 java 基础,设计模式,jvm 原理,spring+springmvc 原理及源码,linux,mysql 事务隔离与锁机制,mongodb,http/tcp,多线程,分布式架构(dubbo,dubbox,spring cloud),弹性计算架构,微服务架构(springboot+zookeeper+docker+jenkins),java 性能优化,以及相关的项目管理等等。

后端追求的是:三高(高并发,高可用,高性能),安全,存储,业务等等。

对于前端工程师:

把精力放在 html5,css3,jquery,angularjs,bootstrap,reactjs,vuejs,webpack,less/sass,gulp,nodejs,Google V8 引擎,javascript 多线程,模块化,面向切面编程,设计模式,浏览器兼容性,性能优化等等。

前端追求的是:页面表现,速度流畅,兼容性,用户体验等等。

术业有专攻,这样你的核心竞争力才会越来越高,正所谓你往生活中投入什么,生活就会反馈给你什么。

并且两端的发展都越来越高深,你想什么都会,那你毕竟什么都不精。

通过将 team 分成前后端 team,让两边的工程师更加专注各自的领域,独立治理,然后构建出一个全栈式的精益求精的 team。

各种耦合


几曾何时,我们的 JavaWeb 项目都是使用了若干后台框架,springmvc/struts + spring + spring jdbc/hibernate/mybatis 等等。

大多数项目在 java 后端都是分了三层,控制层(controller/action),业务层(service/manage),持久层(dao)。

控制层负责接收参数,调用相关业务层,封装数据,以及路由&渲染到 jsp 页面。

然后 jsp 页面上使用各种标签(jstl/el/struts 标签等)或者手写 java 表达式(<%=%>)将后台的数据展现出来,玩的是 MVC 那套思路。

我们先看这种情况:需求定完了,代码写完了,测试测完了,然后呢?要发布了吧?

你需要用 maven 或者 eclipse 等工具把你的代码打成一个 war 包,然后把这个 war 包发布到你的生产环境下的 web 容器(tomcat/jboss/weblogic/websphere/jetty/resin)里,对吧?

发布完了之后,你要启动你的 web 容器,开始提供服务,这时候你通过配置域名,dns 等等相关,你的网站就可以访问了(假设你是个网站)。

那我们来看,你的前后端代码是不是全都在那个 war 包里?包括你的 js,css,图片,各种第三方的库,对吧?

好,下面在浏览器中输入你的网站域名(www.xxx.com),之后发生了什么?(这个问题也是很多公司的面试题)

我捡干的说了啊,基础不好的童鞋请自己去搜。

浏览器在通过域名通过 dns 服务器找到你的服务器外网 ip,将 http 请求发送到你的服务器,在 tcp3 次握手之后(http 下面是 tcp/ip),通过 tcp 协议开始传输数据,你的服务器得到请求后,开始提供服务,接收参数,之后返回你的应答给浏览器,浏览器再通过 content-type 来解析你返回的内容,呈现给用户。

那么我们来看,我们先假设你的首页中有 100 张图片,此时,用户的看似一次 http 请求,其实并不是一次,用户在第一次访问的时候,浏览器中不会有缓存,你的 100 张图片,浏览器要连着请求 100 次 http 请求(有人会跟我说 http 长连短连的问题,不在这里讨论),你的服务器接收这些请求,都需要耗费内存去创建 socket 来玩 tcp 传输(消耗你服务器上的计算资源)。

重点来了,这样的话,你的服务器的压力会非常大,因为页面中的所有请求都是只请求到你这台服务器上,如果 1 个人还好,如果 10000 个人并发访问呢(先不聊服务器集群,这里就说是单实例服务器),那你的服务器能扛住多少个 tcp 连接?你的带宽有多大?你的服务器的内存有多大?你的硬盘是高性能的吗?你能抗住多少 IO?你给 web 服务器分的内存有多大?会不会宕机?

这就是为什么,越是大中型的 web 应用,他们越是要解耦。

理论上你可以把你的数据库+应用服务+消息队列+缓存+用户上传的文件+日志+等等都扔在一台服务器上,你也不用玩什么服务治理,也不用做什么性能监控,什么报警机制等等,就乱成一锅粥好了。

但是这样就好像是你把鸡蛋都放在一个篮子里,隐患非常大。如果因为一个子应用的内存不稳定导致整个服务器内存溢出而 hung 住,那你的整个网站就挂掉了。

如果出意外挂掉,而恰好这时你们的业务又处于井喷式发展高峰期,那么恭喜你,业务成功被技术卡住,很可能会流失大量用户,后果不堪设想。

注意:技术一定是要走在业务前面的,否则你将错过最佳的发展期哟,亲~

此外,你的应用全部都耦合在一起,相当于一个巨石,当服务端负载能力不足时,一般会使用负载均衡的方式,将服务器做成集群,这样其实你是在水平扩展一块块巨石,性能加速度会越来越低,

要知道,本身负载就低的功能 or 模块是没有必要水平扩展的,在本文中的例子就是你的性能瓶颈不在前端,那干嘛要水平扩展前端呢???

还有发版部署上线的时候,我明明只改了后端的代码,为什么要前端也跟着发布呢???(引用:《架构探险-轻量级微服务架构》,黄勇)

正常的互联网架构,是都要拆开的,你的 web 服务器集群,你的应用服务器集群+文件服务器集群+数据库服务器集群+消息队列集群+缓存集群等等。

来说说 jsp

======================================================================

JSP 的痛点


以前的 javaWeb 项目大多数使用 jsp 作为页面层展示数据给用户,因为流量不高,因此也没有那么苛刻的性能要求,但现在是大数据时代,对于互联网项目的性能要求是越来越高,

因此原始的前后端耦合在一起的架构模式已经逐渐不能满足我们,因此我们需要需找一种解耦的方式,来大幅度提升我们的负载能力。

  • 1.动态资源和静态资源全部耦合在一起,服务器压力大,因为服务器会收到各种 http 请求,例如 css 的 http 请求,js 的,图片的等等。

一旦服务器出现状况,前后台一起玩完,用户体验极差。

  • 2.UI 出好设计图后,前端工程师只负责将设计图切成 html,需要由 java 工程师来将 html 套成 jsp 页面,出错率较高(因为页面中经常会出现大量的 js 代码),

修改问题时需要双方协同开发,效率低下。

  • 3.jsp 必须要在支持 java 的 web 服务器里运行(例如 tomcat,jetty,resin 等),无法使用 nginx 等(nginx 据说单实例 http 并发高达 5w,这个优势要用上),

性能提不上来。

  • 4.第一次请求 jsp,必须要在 web 服务器中编译成 servlet,第一次运行会较慢。

  • 5.每次请求 jsp 都是访问 servlet 再用输出流输出的 html 页面,效率没有直接使用 html 高(是每次哟,亲~)。

  • 6.jsp 内有较多标签和表达式,前端工程师在修改页面时会捉襟见肘,遇到很多痛点。

  • 7.如果 jsp 中的内容很多,页面响应会很慢,因为是同步加载。

  • 8.需要前端工程师使用 java 的 ide(例如 eclipse),以及需要配置各种后端的开发环境,你们有考虑过前端工程师的感受吗。

基于上述的一些痛点,我们应该把整个项目的开发权重往前移,实现前后端真正的解耦!

其次


1、无法做到动静分离

传统 java 程序通过 war 包形式部署到 tomcat,除了 java 代码和 jsp 页面,还包括 css、js、图片等静态资源,一旦其中的某个 jsp 页面出问题,会导致部分功能不可用,甚至服务器响应阻塞,无法对外提供服务。

2、分工协调性差

jsp 本质上是一个 java 类,所以早期 java 开发人员是前后端开发任务全负责,而 UI 设计师把设计好的 html 页面给开发人员集成,这个需要双方共同协调完成,效率低下,很难完成需求快速更新迭代,持续交付。

3、并发、吞吐量差

由于 jsp 本质是 java 类,只能放在 web 服务器(如 tomcat),所以 jsp 不能部署到并发性能更好的 nginx 或者 apache 下,这是很多人诟病 java web 性能不好的原因之一。

4、扩展性差

jstl 内置的一些 tag 标签耦合 java 代码(类似于 react 中的 component 组件),很难做到只修改页面而不用修改 java 代码,扩展性很差。

5、页面加载慢(同步机制)

如果一个页面承载的内容很多(如表单、表格、详情),会导致页面加载很慢。究其原因是 jsp 内在特性决定的。

首先,jsp 页面会初始化为 servlet 的 class 文件

其次,在 servlet 代码中解析 jsp tag 标签,转换成 html 网页标签

最后,以流的方式输出 html 网页

这里有个要命的问题,从 jsp 转换成 html 到浏览器渲染是一个同步过程。也就是说,如果数据加载很慢,会导致整个页面出不来。

前端较全技术汇总

=======================================================================

IDE 集


VSCode:https://code.visualstudio.com/

SublimeText:https://www.sublimetext.com/

WebStorm:https://www.jetbrains.com/webstorm/

Atom:https://atom.io/

Hbuilderx/Hbuilder:https://www.dcloud.io/hbuilderx.html

微信开发者工具(小程序开发)

QQ 开发者工具(小程序开发)

支付宝开发者工具(小程序开发)

hbuilderx(小程序开发、网页开发、移动端开发)

构建集


NPM:https://www.npmjs.com/

简单易操作的包管理器,前端开发必备。

Yarn:https://yarnpkg.com/zh-Hans/

和 npm 差不多也是简单易操作的包管理器,两者选择其中一个。

Webpack:https://webpack.js.org/

强大的包转换器和打包

Gulp:https://www.gulpjs.com.cn/

Babel:https://babeljs.io/

代码转换器

ESLint:https://cn.eslint.org/

可组装的 JavaScript 和 JSX 检查工具。

PostCSS:https://www.postcss.com.cn/

用 JavaScript 工具和插件转换 CSS 代码的工具

框架集


Vue.js:https://cn.vuejs.org/

Nuxtjs:https://zh.nuxtjs.org

Nuxt.js 是一个基于 Vue.js 的通用应用框架。通过对客户端/服务端基础架构的抽象组织,Nuxt.js 主要关注的是应用的 UI 渲染,简称服务端渲染。

React:https://reactjs.org/

Angular:https://angular.cn/

AngularJS:https://angularjs.org/

Nodejs:https://nodejs.org/zh-cn/

基于 JS 开发的一个性能超过 PHP 的的服务器,这是作为一个前端走向全栈工程师必学的东西。

Express:http://www.expressjs.com.cn/

基于 Node.js 平台,快速、开放、极简的 Web 开发框架。

Koa:https://koa.bootcss.com/

基于 Node.js 平台的下一代 Web 开发框架。

Egg:https://eggjs.org/zh-cn/

Egg 继承于 Koa。

Koa 是一个非常优秀的框架,然而对于企业级应用来说,它还比较基础。而 Egg 选择了 Koa 作为其基础框架,在它的模型基础上,进一步对它进行了一些增强。

Electron:https://www.electronjs.cn/

Electron(原名为 Atom Shell)是 GitHub 开发的一个开源 js 框架。它允许使用 Node.js(作为后端)和 Chromium(作为前端)完成桌面 GUI 应用程序的开发。

Nw:https://nwjs.org.cn/

Nwjs 和 Electronjs 都是同一个作者不同地方开发的前者主要由微软维护,而后者由 GitHub 团队维护,但是目前越来越多的人都在使用 Electron。

例如 VS Code 这个客户端软件就是用 Electron 语言写的,而微信开发者工具就是用 Nw 配合 react 配合开发的。

Redux:https://www.redux.org.cn/

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。

ReactNative:https://reactnative.cn/

使用 JavaScript 编写原生移动应用。

WebGL:http://www.hewebgl.com/

主要用于网络游戏开发,是国内较为牛逼的同学开发的。

tensorflow:https://tensorflow.google.cn/

TensorFlow 是一个端到端开源机器学习平台。它拥有一个全面而灵活的生态系统,其中包含各种工具、库和社区资源,可助力研究人员推动先进机器学习技术的发展,并使开发者能够轻松地构建和部署由机器学习提供支持的应用。

多端开发的框架


uniapp:https://uniapp.dcloud.io/

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到 iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。

Taro:https://taro.aotu.io/

Taro 是一套遵循 React 语法规范的 多端开发 解决方案。使用 Taro,我们可以只书写一套代码,再通过 Taro 的编译工具,将源代码分别编译出可以在不同端(微信 / 京东 / 百度 / 支付宝 / 字节跳动 小程序、快应用、H5、React-Native 等)运行的代码。

mpvue:http://mpvue.com/

基于 Vue.js 的小程序开发框架。

kbone: https://developers.weixin.qq.com/miniprogram/dev/extended/kbone/

Kbone 是一个致力于微信小程序和 Web 端同构的解决方案。

一些类库集


jQuery:http://jquery.com/

Zepto.js:https://zeptojs.com/

可以理解成是移动端的 jQuery。

ECharts:https://echarts.baidu.com/

使用 JavaScript 实现的开源可视化库。

tween.js:http://www.createjs.cc/tweenjs/

用来调整和动画 HTML5 和 Javascript 属性,提供了简单并且强大的 tweening 接口。

EaselJS :http://www.createjs.cc/easeljs/

使 HTML5 Canvas 标签变得更简单。用于创建游戏,生成艺术作品,和处理其他高级图形化等有着很友好的体验。

SoundJS:http://www.createjs.cc/soundjs/

提供了简单而强大的 API 来处理音频。通过插件来执行实际的音频实现,简单直接的处理声音。

PreloadJS:http://www.createjs.cc/preloadjs/

用来管理和协调相关资源加载的类库,它可以方便的帮助你预先加载相关资源。

openlayers:https://openlayers.org/

一个高性能的、功能丰富的库,满足您的所有映射需求。使得在任何网页中放置动态地图变得很容易。它可以显示从任何源加载的地图块、矢量数据和标记。开发 OpenLayers 是为了进一步利用各种地理信息。它是完全免费的,开源 JavaScript,在 2 子句 BSD 许可下发布(也称为 FreeBSD)。

数据库


MongoDB:https://www.mongodb.com/

MongoDB 是一个文档数据库,这意味着它将数据存储在类似于 JSON 的文档中。我们认为这是思考数据的最自然的方式,并且比传统的行/列模型更有表现力和更强大的功能。

Mongoose:https://mongoosejs.com/

Mongoose 是一个 MongoDB 的框架便于更好的操作数据库

CSS


Sass:https://sass-lang.com/

Sass 是成熟、稳定、强大的 CSS 扩展语言。入门文档可以看:http://sass.bootcss.com/

Less:http://lesscss.org/

给 CSS 加点料。入门文档可以看:https://less.bootcss.com/

Stylus:http://stylus-lang.com/

UI 框架


Bootstrap:http://www.bootcss.com/

ElementUI:http://element-cn.eleme.io/

基于 Vue.js 的组件库。

iView:https://www.iviewui.com/

一套基于 Vue.js 的高质量 UI 组件库。

VUX:https://vux.li/

一个凑合的 Vue.js 移动端 UI 组件库(由个人维护)

cube-ui:https://didi.github.io/cube-ui/#/zh-CN/docs/introduction

cube-ui 是基于 Vue.js 实现的精致移动端组件库。

Muse-UI:https://muse-ui.org/#/zh-CN

Muse UI 基于 Vue2.0 开发,Vue2.0 是当下最快的前端框架之一,小巧,api 友好,可用于开发的复杂单页应用

vant:https://youzan.github.io/vant/#/zh-CN/

轻量、可靠的移动端 Vue 组件库


Layui:https://www.layui.com/

由职业前端倾情打造,面向全层次的前后端开发者,低门槛开箱即用的前端 UI 解决方案

MUI:https://dev.dcloud.net.cn/mui/

最接近原生 APP 体验的高性能前端框架

Ant Design:https://ant.design

基于 React 的 UI 组件库,主要用于研发企业级中后台产品。官网推出了 Ant Design pro 作为示例,可以看看。

Ant Design Mobile:https://mobile.ant.design/

一个基于 Preact / React / React Native 的 移动端 UI 组件库。

Ant Design of Vue:https://vue.ant.design/docs/vue/introduce-cn/

Ant Design 的 Vue 实现,开发和服务于企业级后台产品。

CDN 加速器


BootCDN: https://www.bootcdn.cn/

稳定、快速、免费的前端开源项目 CDN 加速服务

共收录了 3599 个前端开源项目

调试集


whistle:https://wproxy.org/whistle/

代理抓包工具,很好很强大。


Fiddler:https://www.telerik.com/fiddler

编码规范


Bootstrap 编码规范:https://codeguide.bootcss.com/

es6 编程风格:http://es6.ruanyifeng.com/#docs/style

AirbnbJavascriptStyleGuide:https://github.com/airbnb/javascript

强大的技术学习网站

MDN:https://developer.mozilla.org/zh-CN/docs/Web

w3schools:https://www.quanzhanketang.com/

w3school:https://www.w3school.com.cn

w3cschool:https://www.w3cschool.cn/

菜鸟教程:https://www.runoob.com/

开源中国:https://www.oschina.net/project/lang/28/javascript

smashingmagazine:https://www.smashingmagazine.com/

HTML 中文网:http://www.css88.com

前端乱炖:http://www.html-js.com/

爱思资源网:http://www.aseoe.com/

掘金 APP

CSDN 网站及 APP

segmentFauultAPP

字体图标集


Font Awesome:http://www.fontawesome.com.cn/

Iconfont:https://www.iconfont.cn/

icomoon:https://icomoon.io/

EasyIcon:https://www.easyicon.net/

icons8:https://icons8.cn/

IconStore:https://iconstore.co/

iconninja:http://www.iconninja.com/

web 字体


webfont:https://www.webfont.com/onlinefont/index

MOKE 数据


Easy Mock:https://www.easy-mock.com

切图工具


PS

Pxcook(像素大厨):https://www.fancynode.com.cn/pxcook

原型设计工具

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

分享一套阿里大牛整理的前端资料给大家,点击前端校招面试题精编解析大全即可免费下载

️ 谢谢支持,喜欢的话别忘了 关注、点赞哦。

E 数据


Easy Mock:https://www.easy-mock.com

切图工具


PS

Pxcook(像素大厨):https://www.fancynode.com.cn/pxcook

原型设计工具

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-PxOcINYw-1713514045725)]

[外链图片转存中…(img-BJKD34Ec-1713514045726)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

[外链图片转存中…(img-1unNRLGL-1713514045726)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

[外链图片转存中…(img-AI30ox1K-1713514045726)]

最后

分享一套阿里大牛整理的前端资料给大家,点击前端校招面试题精编解析大全即可免费下载

️ 谢谢支持,喜欢的话别忘了 关注、点赞哦。

前端校招面试题精编解析大全

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/2201_75294326/article/details/137968763

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;stdlib.h&gt;#include&lt;malloc.h&gt;#include&lt;iostream&gt;#include&lt;stack&gt;#include&lt;queue&gt;using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签