首页 文章 精选 留言 我的

精选列表

搜索[全栈工程师],共10004篇文章
优秀的个人博客,低调大师

新一代AI全栈工程师的实战指南——基于腾讯云微服务打造高并发低延迟智能面试中台

随着企业招聘规模的持续扩大,传统面试模式正面临效率低、成本高、标准不一等严峻挑战。尤其是校招旺季,HR团队往往需要同时处理成千上万名候选人的初筛面试,面试官资源被大量机械性问答消耗。AI驱动的智能面试对话平台应运而生,它能够7×24小时自动完成结构化面试、评估打分与人才筛选,将面试官从重复劳动中解放出来。然而,真正落地的智能面试系统并不简单:它既要支撑海量并发对话,又必须在对话过程中保持低延迟的实时交互体验;既要保证面试问题的专业度和适应性,又要确保候选人数据的安全合规。

优秀的个人博客,低调大师

Node.js 课程及专业认证助您踏上全栈开发工程师之路

Node.js 是世界上最流行的 JavaScript 框架之一。它为数以十万计的网站提供支持,其中包括一些全球最受欢迎的网站,如 Google、IBM、Microsoft 和 Netflix等等。个人开发人员和企业使用 Node.js 来支持他们许多最重要的 Web 应用程序,因此培养及保持足够的Node.js 合资格人才对业界至关重要。 图片来源自: 智联招聘,BOSS招聘和猎聘网 Node.Js服务开发课程 (LFW212)是由Linux基金会与 OpenJS 基金会联合开发,面向希望掌握和展示 Node.js 知识和技能的高级开发人员,特别是如何使用 Node 和框架快速安全地组合服务器和服务。本课程深入探讨了 Node 核心 HTTP 客户端和服务器、Web 服务器、RESTful 服务和 Web 安全要素。课程提供在 Node.js 上开发服务所需的知识,并帮助准备OpenJS Node.js 服务开发者认证 (JSNSD)。 “我们很高兴OpenJS 基金会与Linux 基金会一起合作,建立我们的 Node.js 培训计划,因为它为开发人员提供了成功获得认证所需的资源,OpenJS 认证计划为开发人员提供了一种与供应商中立的方式来展示他们的 Node.js 技能,并为个人提供了 Node.js 开发人员开展事业的机会。” OpenJS 基金会执行董事 Robin Ginn 说。 Node.js 服务开发课程由 David Clements 编写,他是Node.js首席架构师、演讲者、Node Cookbook 的作者以及专门研究 Node.js 和浏览器 JavaScript 的开源创建者。David 自 1996 年以来一直在编写 JavaScript,并且自 Node 0.4(2011 年)以来一直在使用、谈论和撰写有关 Node.js 的文章。他是各种开源项目的作者。其中的开源项目中值得注意的是 Pino,它是最快的 Node.js JSON 记录器之一,0x 是一个强大的 Node.js 分析工具。David 是官方 OpenJS Node.js 应用程序开发者认证和 OpenJS Node.js 服务开发者认证的技术负责人及主要作者之一。 在课程结束时,学员能够构建安全且易于维护的 RESTful JSON 服务。这个课程将帮助您掌握行业中常见的 Node.js 技术岗位需要的知识技能。本课程也是帮助您准备OpenJS Node.js 服务开发者(JSNSD)认证的不二之选。另外,我们还提供培训课程+认证考试相关的套购产品。 建议在开始本课程之前,学生熟悉 OpenJS Node.js 应用程序开发者 (JSNAD) 认证中涵盖的概念。那些需要提高 Node.js 应用程序开发技能的人应该在尝试 LFW212 之前完成Node.js 应用程序开发课程 (LFW211)。 更多有关LFOSSA官方OpenJS的课程,请点击阅读原文到LFOSSA官网了解更多。 以下为Node.JS培训及认证产品相关的链接: Node.Js服务开发课程 (LFW212): https://training.linuxfoundation.cn/courses/35 OpenJS Node.js服务开发者认证 (JSNSD): https://training.linuxfoundation.cn/certificates/9 LFW212+ OpenJS Node.js服务开发者认证 (JSNSD) 套购: https://training.linuxfoundation.cn/pack/14 Node.js 应用程序开发课程 (LFW211): https://training.linuxfoundation.cn/courses/31 OpenJS Node.js应用程序开发者认证(JSNAD): https://training.linuxfoundation.cn/certificates/8 Node.js 应用程序开发课程(LFW211) +OpenJS Node.js应用程序开发者认证(JSNAD): https://training.linuxfoundation.cn/pack/13 LFS211+JSNAD+LFW212+JSNSD 套购: https://training.linuxfoundation.cn/pack/20 关于 OpenJS 基金会 OpenJS 基金会致力于通过提供一个中立的组织来托管和维持项目,以及为整个社区的利益共同资助活动,来支持 JavaScript 生态系统和网络技术的健康发展。OpenJS 基金会由 35 个开源 JavaScript 项目组成,包括 Appium、Dojo、jQuery、Node.js 和 webpack,并得到 30 家企业和最终用户成员的支持,包括 GoDaddy、Google、IBM、Joyent 和 Microsoft。这些成员认识到 JavaScript 生态系统的相互关联性,以及为代表重要共享价值的项目提供一个中心家园的重要性。 有关 Linux Foundation开源软件学园 Linux Foundation 开源软件学园 (LFOSSA)依托于全球最大的开源软件组织, 是领先全球的高端专业软件人才教育机构, 为科技企业培养了大量软件人才, Linux 基金会开源软件学园不仅拥有丰富的线上专业课程,面授课程的导师同样是由业内资深专家担任, 所颁发的证书更是全球认可的专业资质。Linux 基金会做为非牟利国际技术组织, 致力于通过开源推动创新和促进科技发展, 我们唯一的目标就是帮助您的事业发展更上一层楼。

优秀的个人博客,低调大师

全栈角度看分页处理

作者:京东物流 杨攀 分页是 web application 开发最常见的功能。在使用不同的框架和工具过程中,发现初始行/页的定义不同,特意整理记录。从这个技术点去看不同层的实现。以及不同语言实现的对比。 文章会从正常的web 结构分层的角度去梳理不同层的处理。 分为数据库分页、服务端分页、前端分页 数据库分页 这里用mysql 举例整理。我们常用的数据库例如 Oracle/ SQL Server 等,对于分页语法的支持大同小异。不做具体一一举例。 先从数据库层梳理,也是从最根源去分析分页的最终目的,前端和后端的一起逻辑和适配,都是为了拼接合适的 SQL 语句。 ①MySQL LIMIT 语法:[LIMIT {[offset,]row_count}] LIMIT row_countis equivalent toLIMIT 0, row_count. The offset of the initial row is 0 (not 1) 参考:MySQL :: MySQL 5.7 Reference Manual :: 13.2.9 SELECT Statement 服务端/后端分页 后端分页,简单讲,就是数据库的分页。 对于mysql 来讲,就是上述 offset row_count 的计算过程。 这里选用了常用的框架组件来对比各自实现的细节。 pagehelper 是Java Orm 框架mybatis 常用的开源分页插件 spring-data-jdbc 是Java 框架常用的数据层组件 ①pagehelper /** * 计算起止行号 offset * @see com.github.pagehelper.Page#calculateStartAndEndRow */ private void calculateStartAndEndRow() { // pageNum 页码,从1开始。 pageNum < 1 , 忽略计算。 this.startRow = this.pageNum > 0 ? (this.pageNum - 1) * this.pageSize : 0; this.endRow = this.startRow + this.pageSize * (this.pageNum > 0 ? 1 : 0); } /** * 计算总页数 pages/ pageCount。 * 在赋值数据总条数的同时,也计算了总页数。 * 可以与 Math.ceil 实现对比看。 */ public void setTotal(long total) { if (pageSize > 0) { pages = (int) (total / pageSize + ((total % pageSize == 0) ? 0 : 1)); } else { pages = 0; } } SQL 拼接实现: com.github.pagehelper.dialect.helper.MySqlDialect ②spring-data-jdbc 关键类: org.springframework.data.domain.Pageable org.springframework.data.web.PageableDefault /** * offset 计算,不同于pagehelper, page 页码从0 开始。 default is 0 * @see org.springframework.data.domain.AbstractPageRequest#getOffset */ public long getOffset() { return (long)this.page * (long)this.size; } /* * 总页数的计算使用 Math.ceil 实现。 * @see org.springframework.data.domain.Page#getTotalPages() */ @Override public int getTotalPages() { return getSize() == 0 ? 1 : (int) Math.ceil((double) total / (double) getSize()); } /** * offset 计算,不同于pagehelper, page 页码从0 开始。 * @see org.springframework.data.jdbc.core.convert.SqlGenerator#applyPagination */ private SelectBuilder.SelectOrdered applyPagination(Pageable pageable, SelectBuilder.SelectOrdered select) { // 在spring-data-relation, Limit 抽象为 SelectLimitOffset SelectBuilder.SelectLimitOffset limitable = (SelectBuilder.SelectLimitOffset) select; // To read the first 20 rows from start use limitOffset(20, 0). to read the next 20 use limitOffset(20, 20). SelectBuilder.SelectLimitOffset limitResult = limitable.limitOffset(pageable.getPageSize(), pageable.getOffset()); return (SelectBuilder.SelectOrdered) limitResult; } spring-data-commons 提供 mvc 层的分页参数处理器 /** * Annotation to set defaults when injecting a {@link org.springframework.data.domain.Pageable} into a controller method. * * @see org.springframework.data.web.PageableDefault */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PARAMETER) public @interface PageableDefault { /** * The default-size the injected {@link org.springframework.data.domain.Pageable} should get if no corresponding * parameter defined in request (default is 10). */ int size() default 10; /** * The default-pagenumber the injected {@link org.springframework.data.domain.Pageable} should get if no corresponding * parameter defined in request (default is 0). */ int page() default 0; } MVC 参数处理器: org.springframework.data.web.PageableHandlerMethodArgumentResolver 前端分页 前端展示层,分别从服务端渲染方案以及纯前端脚本方案去看分页最终的页面呈现逻辑。 这里选取的分别是Java 常用的模板引擎 thymeleaf 以及热门的前端框架 element-ui。 从用法以及组件源码角度,去理清终端处理分页的常见方式。 ①thymeleaf - 模板引擎 Thymeleafis a modern server-side Java template engine for both web and standalone environments. <!-- spring-data-examples\web\example\src\main\resources\templates\users.html--> <nav> <!-- class样式 bootstrap 默认的分页用法--> <ul class="pagination" th:with="total = ${users.totalPages}"> <li th:if="${users.hasPrevious()}"> <a th:href="@{/users(page=${users.previousPageable().pageNumber},size=${users.size})}" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> <!-- spring-data-examples 分页计算从0 开始, /users?page=0&size=10 --> <!-- 生成页码列表,呈现形式即我们常见的 ①②③④ --> <li th:each="page : ${#numbers.sequence(0, total - 1)}"><a th:href="@{/users(page=${page},size=${users.size})}" th:text="${page + 1}">1</a></li> <li th:if="${users.hasNext()}"> <!-- 下一页实现,因为是服务器端渲染生成。在最终生成的html 中,这里的href 是固定的。实现思路和纯前端技术,使用javascript 脚本对比看 --> <a th:href="@{/users(page=${users.nextPageable().pageNumber},size=${users.size})}" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> </ul> </nav> ②element-ui 前端框架 // from node_modules\element-ui\packages\pagination\src\pagination.js // page-count 总页数,total 和 page-count 设置任意一个就可以达到显示页码的功能; computed: { internalPageCount() { if (typeof this.total === 'number') { // 页数计算使用 Math.ceil return Math.max(1, Math.ceil(this.total / this.internalPageSize)); } else if (typeof this.pageCount === 'number') { return Math.max(1, this.pageCount); } return null; } }, /** * 起始页计算。 page 页码从1 开始。 */ getValidCurrentPage(value) { value = parseInt(value, 10); // 从源码的实现可以看到,一个稳定强大的开源框架,在容错、边界处理的严谨和思考。 const havePageCount = typeof this.internalPageCount === 'number'; let resetValue; if (!havePageCount) { if (isNaN(value) || value < 1) resetValue = 1; } else { // 强制赋值起始值 1 if (value < 1) { resetValue = 1; } else if (value > this.internalPageCount) { // 数据越界,强制拉回到PageCount resetValue = this.internalPageCount; } } if (resetValue === undefined && isNaN(value)) { resetValue = 1; } else if (resetValue === 0) { resetValue = 1; } return resetValue === undefined ? value : resetValue; }, 总结 技术永远是关联的,思路永远是相似的,方案永远是相通的。单独的去分析某个技术或者原理,总是有边界和困惑存在。纵向拉伸,横向对比才能对技术方案有深刻的理解。在实战应用中,能灵活自如。 分页实现的方案最终是由数据库决定的,对于众多的数据库,通过SQL 语法的规范去框定,以及我们常用的各种组件或者插件去适配。 纵向对比,我们可以看到不同技术层的职责和通用适配的实现过程,对于我们日常的业务通用开发以及不同业务的兼容有很大的借鉴意义。 横向对比,例如前端展示层的实现思路,其实差别非常大。如果使用 thymeleaf,结构简单清晰,但交互响应上都会通过服务器。如果选用element-ui,分页只依赖展示层,和服务端彻底解构。在技术选型中可以根据各自的优缺点进行适度的抉择。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册