当前位置: 首页 > news >正文

字节跳动ByteDance前端考前总结

字节是梦中情场,如果可以Daydream,不行的话也没事就当和大佬交流一次交流的机会,求PDD|JD|DW|KS,OC!

上次面试欠缺的内容

在这里插入图片描述

构建工具

工程体系是前端项目从开发到上线全流程的“基础设施”,涵盖代码处理、构建打包、自动化流程、大型应用架构等核心环节。下面从webpack、Rollup、CI/CD、微应用四个维度,结合原理、实战配置和工程价值进行深度解析:

一、Webpack:前端应用的“模块打包引擎”

Webpack 是目前前端工程化中最主流的应用级模块打包工具,核心能力是将“分散的源码文件(含JS、CSS、图片等所有资源)”按依赖关系打包为“可在浏览器运行的静态资源”,同时解决开发效率、兼容性、性能等问题。

在这里插入图片描述

1. 核心原理与工作流程

Webpack 的核心思想是“一切皆模块”(JS、CSS、图片、字体等都视为模块),其工作流程可概括为“解析-编译-合并-优化”四步:

  • 解析(Resolution):从entry(入口)出发,递归解析所有依赖(通过import/require识别),构建“依赖关系图(Dependency Graph)”;
  • 编译(Transformation):对非JS模块(如CSS、TS)通过loader转译为JS可处理的内容;对ES6+语法通过Babel转译为ES5;
  • 合并(Chunking):将依赖图中的模块按规则合并为chunk(代码块),如公共依赖提取、懒加载模块拆分;
  • 优化(Optimization):压缩代码、Tree-shaking删除死代码、添加哈希值处理缓存等,最终输出bundle(可运行的静态文件)。
2. 核心配置与实战细节

Webpack 配置通过webpack.config.js实现,核心配置项及实战场景如下:
entry、output、module.rules(loader)、plugins、mode、devserver

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

需求:在 Webpack 构建完成后,自动生成version.txt,包含当前版本号、构建时间、Git 提交哈希等信息。

const fs = require('fs');
const { execSync } = require('child_process');class VersionInfoPlugin {constructor(options) {// 默认配置:输出路径为dist,文件名为version.txtthis.options = {outputPath: 'dist',filename: 'version.txt',...options};}apply(compiler) {// 注册"emit"钩子:在资源输出前执行compiler.hooks.emit.tapAsync('VersionInfoPlugin', (compilation, callback) => {try {// 1. 获取版本信息(从package.json、Git、当前时间)const packageJson = require('../package.json'); // 假设项目根目录有package.jsonconst version = packageJson.version || 'unknown';const buildTime = new Date().toISOString();// 获取当前Git提交哈希(需项目有Git仓库)const gitHash = execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }).trim();// 2. 拼接版本信息内容const content = `版本号:${version}\n构建时间:${buildTime}\nGit提交:${gitHash}`;// 3. 生成资源对象(添加到compilation.assets)const assetPath = `${this.options.outputPath}/${this.options.filename}`;compilation.assets[assetPath] = {source: () => content, // 返回文件内容size: () => content.length // 返回内容长度};console.log(`✅ 版本信息文件已生成:${assetPath}`);callback(); // 异步钩子必须调用callback()通知完成} catch (error) {callback(error); // 传递错误,终止构建}});}
}module.exports = VersionInfoPlugin;

在这里插入图片描述

3. 性能优化深度实践

Webpack 优化核心是“减小bundle体积”和“提升构建速度”,关键手段包括:

  • Tree-shaking:删除未使用的代码(需满足:mode: production + 源码用ES模块import/export + package.json配置"sideEffects": false标记无副作用文件);
  • 懒加载:通过import('./module.js')动态导入,Webpack自动将其拆分为独立chunk,配合路由触发加载(如React的React.lazy + Suspense);
  • 缓存策略
    - 对babel-loader启用缓存:loader: 'babel-loader?cacheDirectory=true'(避免重复编译);
    - 用contenthash命名输出文件(内容不变则哈希不变,利用浏览器缓存);
  • 构建速度优化
    - 用thread-loader开启多进程编译(适合CPU密集型任务如babel编译);
    - 配置include/exclude缩小loader处理范围(如exclude: /node_modules/);
    - 用hard-source-webpack-plugin缓存中间构建结果(二次构建速度提升50%+)。

二、Rollup:库打包的“轻量优化大师”

Rollup 是专注于JavaScript库/组件库打包的工具,相比Webpack,它输出的代码更“纯净”(冗余少),Tree-shaking更彻底,适合构建供他人引用的工具库(如lodash、React组件库)。

1. 核心优势与适用场景
  • 优势
    - 基于ES模块的静态分析(比Webpack的动态分析更彻底),Tree-shaking效果更好;
    - 输出代码几乎无冗余(不包含Webpack那样的运行时__webpack_require__);
    - 支持多种模块化输出格式(ESModule、CommonJS、UMD等),适配不同使用场景。
  • 适用场景:工具库(如日期处理库、工具函数库)、组件库(如Vue/React组件);不适合:依赖复杂资源(如图片、CSS)的应用(需额外配置插件,不如Webpack便捷)。
2. 核心配置与实战

Rollup 配置文件为rollup.config.js,核心配置如下:

// rollup.config.js
import babel from '@rollup/plugin-babel'; // 编译ES6+
import commonjs from '@rollup/plugin-commonjs'; // 转换CommonJS为ES模块
import resolve from '@rollup/plugin-node-resolve'; // 解析node_modules依赖
import terser from '@rollup/plugin-terser'; // 压缩代码
import typescript from '@rollup/plugin-typescript'; // 处理TSexport default {input: 'src/index.ts', // 入口文件output: [// 输出ES模块(供现代项目import){file: 'dist/index.esm.js',format: 'es',sourcemap: true // 生成sourcemap方便调试},// 输出CommonJS模块(供Node.js或Webpack require){file: 'dist/index.cjs.js',format: 'cjs',sourcemap: true},// 输出UMD模块(供浏览器直接<script>引入){file: 'dist/index.umd.js',format: 'umd',name: 'MyUtils', // 全局变量名(window.MyUtils)sourcemap: true}],plugins: [resolve(), // 解析node_modules中的依赖commonjs(), // 将CommonJS模块转为ES模块(如引入lodash时)typescript(), // 编译TS为JSbabel({ babelHelpers: 'bundled', // 打包babel辅助函数exclude: 'node_modules/**' // 排除node_modules}),terser() // 压缩输出代码],external: ['lodash'] // 声明外部依赖(不打包进输出文件,由使用者自行安装)
};
3. 与Webpack的核心差异
维度WebpackRollup
定位应用打包(处理复杂资源依赖)库打包(输出纯净模块)
代码冗余包含运行时代码(如__webpack_require__几乎无冗余(原生ES模块语法)
Tree-shaking基于ES模块+运行时分析基于ES模块静态分析(更彻底)
资源处理内置支持(通过loader处理所有资源)需额外插件(处理CSS/图片较麻烦)
适用场景单页应用、多页应用工具库、组件库

CI/CD

CI/CD:自动化流程的“流水线工厂”

CI(持续集成)/CD(持续部署)是通过自动化工具实现“代码提交→构建→测试→部署”全流程自动化的体系,核心价值是减少人工操作、降低出错率、加速迭代效率

1. 核心概念与目标
  • CI(持续集成):开发者频繁将代码提交到仓库,触发自动化构建和测试,快速发现集成问题(如代码冲突、测试失败)。目标:“尽早发现并解决问题”。
  • CD(持续部署):在CI通过后,自动将代码部署到测试、预生产甚至生产环境。目标:“让可发布的代码随时可上线”。
2. 主流工具与工作流程

常用工具:Jenkins(开源,可定制)、GitLab CI(与GitLab集成)、GitHub Actions(与GitHub集成,配置简单)、CircleCI(云服务)。以GitHub Actions为例,流程如下:

  1. 触发条件:代码push到main分支或提交PR时触发(通过on配置);
  2. 执行步骤
    - 拉取代码→安装依赖→代码检查(lint)→单元测试→构建产物;
    - 若为main分支,额外执行部署(如上传到CDN、部署到云服务器);
  3. 结果反馈:通过GitHub界面展示流程状态(成功/失败),失败时发送邮件通知。
3. 实战配置(GitHub Actions)

以一个React项目的CI/CD流程为例,配置文件为.github/workflows/ci-cd.yml

name: 前端CI/CD流程# 触发条件:push到main分支或PR到main分支
on:push:branches: [ main ]pull_request:branches: [ main ]jobs:#  job1:代码检查与测试check-and-test:runs-on: ubuntu-latest # 运行环境(Linux虚拟机)steps:- name: 拉取代码uses: actions/checkout@v4 # 使用官方action拉取代码- name: 安装Node.jsuses: actions/setup-node@v4with:node-version: 18.xcache: 'npm' # 缓存npm依赖,加速安装- name: 安装依赖run: npm ci # 严格安装package-lock.json中的版本- name: ESLint检查run: npm run lint # 执行package.json中的lint脚本- name: 单元测试run: npm test # 执行Jest测试#  job2:构建与部署(仅在main分支push时执行)build-and-deploy:needs: check-and-test # 依赖check-and-test成功后才执行if: github.event_name == 'push' && github.ref == 'refs/heads/main'runs-on: ubuntu-lateststeps:- name: 拉取代码uses: actions/checkout@v4- name: 安装依赖与构建run: |npm cinpm run build # 执行webpack构建,输出到dist目录- name: 部署到Netlifyuses: netlify/actions/cli@masterenv:NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_TOKEN }} # 加密存储的令牌NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}with:args: deploy --dir=dist --prod # 部署dist目录到生产环境
4. 关键实践原则
  • 环境隔离:开发、测试、生产环境配置分离(通过.env文件+CI变量管理);
  • 自动化测试:CI流程必须包含单元测试(Jest)、E2E测试(Cypress),覆盖率低于阈值则失败;
  • 版本控制:部署时自动生成语义化版本(如1.2.3),关联Git Tag;
  • 回滚机制:部署失败时自动回滚到上一版本(如通过云服务的版本管理功能)。

在前端面试中,CI/CD(持续集成/持续部署)是体现工程化能力的重要考点,而GitHub Actions作为主流的CI/CD工具,其实践经验更是加分项。下面从核心概念、GitHub实践落地、面试介绍要点及常见问题解析四个维度展开,帮助你系统梳理这部分内容。

一、CI/CD核心概念(面试基础铺垫)

CI/CD是一套自动化流程体系,核心目标是缩短从代码提交到上线的周期,同时保障代码质量

  • CI(持续集成,Continuous Integration):开发者频繁将代码提交到仓库后,自动触发构建、测试(如lint检查、单元测试),快速发现代码冲突、语法错误或测试失败,避免问题堆积。
  • CD(持续交付/部署,Continuous Delivery/Deployment)
    • 持续交付:CI通过后,代码自动部署到测试/预生产环境,等待手动确认后发布到生产(保留人工决策环节);
    • 持续部署:CI通过后,全流程自动化(无需人工干预),直接部署到生产环境(适合迭代快、测试完备的项目)。

二、GitHub Actions实践:前端项目全流程自动化

GitHub Actions是GitHub内置的CI/CD工具,通过配置YAML文件定义自动化流程,适合前端项目的代码检查→测试→构建→部署全链路管理。

1. 核心组件(理解配置的基础)
  • 工作流(Workflow):一个完整的自动化流程(如“推代码后自动测试并部署”),由.github/workflows/xxx.yml文件定义,可被代码推送、PR等事件触发。
  • 作业(Job):工作流中的一个任务单元(如“测试”“构建”“部署”),默认串行执行,可配置并行。
  • 步骤(Step):作业的细分步骤(如“安装依赖”“执行lint”),每个步骤可运行命令或调用“动作”。
  • 动作(Action):封装好的可复用步骤(如actions/checkout@v4拉取代码、actions/setup-node@v4安装Node.js),可直接引用。
2. 前端项目实战配置(以React项目为例)

假设需求:代码推送到main分支时,自动执行lint检查、单元测试、构建静态资源,最终部署到Netlify。配置文件为.github/workflows/ci-cd.yml

name: 前端CI/CD流程  # 工作流名称# 触发条件:推送到main分支或PR到main分支时触发
on:push:branches: [ main ]pull_request:branches: [ main ]jobs:# 作业1:代码检查与测试(CI核心步骤)check-and-test:runs-on: ubuntu-latest  # 运行环境(GitHub提供的Linux虚拟机)steps:- name: 拉取代码uses: actions/checkout@v4  # 引用官方action拉取当前仓库代码- name: 安装Node.jsuses: actions/setup-node@v4with:node-version: 18.x  # 指定Node版本cache: 'npm'  # 缓存npm依赖(加速后续构建)- name: 安装依赖run: npm ci  # 严格按package-lock.json安装,避免版本差异- name: ESLint代码检查run: npm run lint  # 执行package.json中的lint脚本(如eslint .)- name: 单元测试(Jest)run: npm test  # 执行单元测试,若失败则整个作业失败# 作业2:构建与部署(CD核心步骤,仅在main分支推送时执行)build-and-deploy:needs: check-and-test  # 依赖check-and-test作业成功后才执行if: github.event_name == 'push' && github.ref == 'refs/heads/main'  # 仅main分支推送触发runs-on: ubuntu-lateststeps:- name: 拉取代码uses: actions/checkout@v4- name: 安装依赖与构建run: |npm cinpm run build  # 执行webpack/vite构建,输出到dist目录- name: 部署到Netlifyuses: netlify/actions/cli@master  # 引用Netlify官方actionenv:# 敏感信息存储在GitHub仓库的Secrets中(Settings→Secrets→Actions)NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_TOKEN }}NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}with:args: deploy --dir=dist --prod  # 将dist目录部署到Netlify生产环境
3. 关键实践细节(体现深度的点)
  • 缓存优化:通过cache: 'npm'缓存node_modules,将依赖安装时间从3分钟缩短到30秒(前端项目依赖体积大,缓存至关重要)。
  • 环境隔离:通过if条件判断区分pushPR场景(PR仅执行检查,不部署;main分支推送才部署)。
  • 敏感信息管理:API密钥、部署令牌等通过GitHub Secrets存储,避免硬编码到配置文件(安全最佳实践)。
  • 状态反馈:流程失败时,GitHub会通过邮件/网页通知开发者,点击可查看具体失败步骤(如哪条测试用例未通过)。

三、面试中如何介绍(突出工程化思维)

向面试官介绍时,按“价值→流程→收益”逻辑展开,结合具体项目经验:

“在之前的React项目中,我负责搭建了基于GitHub Actions的CI/CD流程,核心目标是解决团队协作中的三个问题:一是代码质量不统一(有人忽略lint检查),二是手动部署容易出错(比如漏传文件),三是测试不及时导致线上bug。

具体流程分三步:

  1. 提交触发:开发者推代码到PR或main分支时,自动触发工作流;
  2. CI环节:先拉取代码、安装依赖,然后用ESLint做代码规范检查,Jest跑单元测试(覆盖率要求≥80%),任何一步失败都会阻断后续流程,开发者能实时收到失败通知;
  3. CD环节:若代码合并到main且CI通过,自动用webpack构建dist目录,再通过Netlify的Action部署到生产环境,整个过程从提交到上线只需5分钟,比之前手动部署快了80%。

带来的收益很明显:团队代码规范统一了,线上bug率下降了30%,而且开发者不用花时间在手动部署上,能专注写业务逻辑。”

四、常见面试问题及详解

1. 什么是CI/CD?两者的区别是什么?

解答

  • CI(持续集成)聚焦“代码合并阶段”,通过自动化构建和测试,确保新提交的代码能和主分支兼容,避免集成问题堆积;
  • CD(持续交付/部署)聚焦“代码上线阶段”:持续交付是CI通过后自动部署到测试环境,等待人工确认再到生产;持续部署则是全自动化到生产。
  • 核心区别:CI解决“能否集成”,CD解决“能否快速上线”。
2. GitHub Actions中,如何处理不同环境(开发、测试、生产)的配置?

解答

  • 用环境变量区分:在yml中通过env字段定义,或在GitHub仓库的“Environments”中配置环境专属变量(如开发环境用测试API,生产用正式API);
  • 配合条件判断:通过if语句控制不同分支对应不同环境,例如:
    # 开发分支部署到测试环境,main分支部署到生产
    if: github.ref == 'refs/heads/develop'  # 开发环境
    if: github.ref == 'refs/heads/main'     # 生产环境
    
  • 敏感配置用Secrets:不同环境的密钥(如API_TOKEN)存储在对应环境的Secrets中,避免泄露。
3. 前端项目中,CI环节通常需要做哪些检查?为什么?

解答

  • 代码规范检查(ESLint/Prettier):确保团队代码风格统一,减少协作摩擦;
  • 类型检查(TypeScript):提前发现类型错误(如传参类型不匹配);
  • 单元测试(Jest):验证工具函数、组件逻辑的正确性;
  • E2E测试(Cypress):模拟用户操作,确保关键流程(如登录、支付)正常;
  • 构建检查:执行npm run build,验证是否能成功生成生产资源(避免因依赖冲突导致构建失败)。

这些检查能在代码合并前拦截80%以上的潜在问题,比线上发现后再修复成本低得多。

4. 如何优化GitHub Actions的构建速度?

解答

  • 缓存依赖:通过actions/setup-nodecache: 'npm'缓存node_modules,或用actions/cache缓存~/.npm目录;
  • 并行执行作业:将“lint”“test”等独立任务配置为并行作业(默认串行,可通过jobs.<job_id>.needs控制依赖);
  • 减少不必要步骤:如PR阶段无需构建完整产物,仅执行检查和测试;
  • 使用更高效的基础镜像:如选择ubuntu-latest而非旧版本,或使用预安装依赖的自定义镜像。
5. 如果部署失败,如何回滚?GitHub Actions有哪些机制支持?

解答

  • 手动回滚:通过部署平台(如Netlify/Vercel)的版本历史,一键回滚到上一版本(前端多为静态资源,回滚成本低);
  • 自动回滚:在GitHub Actions中配置“部署后检查”步骤(如访问首页判断是否返回200),失败则调用部署平台的回滚API:
    - name: 检查部署是否成功run: |response=$(curl -s -o /dev/null -w "%{http_code}" https://your-site.netlify.app)if [ "$response" -ne 200 ]; thenecho "部署失败,开始回滚"netlify deploy:rollback --prod  # 调用Netlify回滚命令exit 1fi
    
6. 为什么前端项目需要CI/CD?小项目有必要吗?

解答

  • 必要性体现在:
    1. 自动化减少人为错误(如手动打包漏文件、部署到错误环境);
    2. 快速反馈(提交后立即知道代码是否有问题);
    3. 标准化流程(新人入职无需学习部署步骤,按规范提交即可)。
  • 小项目也有必要:即使团队只有1-2人,CI的自动测试和构建检查也能避免“本地跑通,线上报错”的问题,且配置成本低(GitHub Actions有大量现成模板可复用)。

总结

CI/CD是前端工程化从“手动操作”到“自动化流水线”的核心标志,而GitHub Actions以其与代码仓库的深度集成、丰富的Action生态,成为前端项目的首选工具。面试中,既要讲清“是什么”(概念和配置),更要突出“为什么这么做”(解决的问题和带来的价值),体现你对工程化效率和质量的理解。


四、微应用:大型应用的“模块化拆分方案”

微前端

微应用(微前端)是将大型前端应用拆分为多个独立开发、独立部署的小型应用(微应用),由一个“基座应用”统一管理路由、权限和通信,解决“巨石应用维护难、技术栈受限、团队协作低效”问题。

1. 核心价值与解决的问题
  • 技术栈无关:各微应用可使用不同框架(如A应用用React,B应用用Vue),基座应用兼容所有框架;
  • 独立开发部署:团队各自维护微应用,发布不影响其他应用(CI/CD独立);
  • 增量升级:旧系统可逐步拆分为微应用,无需一次性重构;
  • 负载均衡:按业务拆分后,资源加载可按需触发(只加载当前页面的微应用)。
2. 主流方案与实现原理

目前最成熟的方案是Qiankun(基于Single-spa封装,阿里出品),核心原理包括:

  • 应用注册:基座应用通过registerMicroApps注册微应用,声明微应用的nameentry(资源入口)、activeRule(路由匹配规则);
  • 路由劫持:基座应用监听路由变化,当URL匹配某微应用的activeRule时,触发该微应用的加载;
  • 资源加载:通过fetch请求微应用的entry(通常是HTML),解析HTML中的JS/CSS资源并加载;
  • 沙箱隔离
    - JS沙箱:通过Proxy代理window,微应用修改的全局变量在卸载时恢复(避免污染基座);
    - 样式隔离:通过scoped CSS或动态添加style前缀,避免样式冲突;
  • 生命周期管理:微应用需导出bootstrap(初始化)、mount(挂载)、unmount(卸载)方法,由基座调用。
3. 实战配置(Qiankun)
(1)基座应用配置
// 基座应用(React)src/index.js
import { registerMicroApps, start } from 'qiankun';// 注册微应用
registerMicroApps([{name: 'react-app', // 微应用名称entry: '//localhost:3001', // 微应用启动地址(开发环境)container: '#micro-app-container', // 微应用挂载的DOM容器activeRule: '/react', // 路由匹配规则(URL含/react时激活)props: { token: 'base-token' } // 向微应用传递参数},{name: 'vue-app',entry: '//localhost:3002',container: '#micro-app-container',activeRule: '/vue'}
]);// 启动qiankun
start({sandbox: { strictStyleIsolation: true } // 开启严格样式隔离
});
(2)微应用配置(React为例)
// 微应用src/index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';// 导出qiankun要求的生命周期函数
export async function bootstrap() {console.log('react-app bootstrap');
}export async function mount(props) {// 接收基座传递的参数(如token)console.log('props from base:', props);// 挂载应用ReactDOM.createRoot(document.getElementById('root')).render(<App />);
}export async function unmount() {// 卸载应用ReactDOM.unmountComponentAtNode(document.getElementById('root'));
}// 独立运行时(不被基座加载时)
if (!window.__POWERED_BY_QIANKUN__) {mount({});
}
(3)微应用打包配置(webpack)

需在微应用的webpack.config.js中配置跨域和库模式:

module.exports = {devServer: {port: 3001,headers: {'Access-Control-Allow-Origin': '*' // 允许跨域(基座需请求微应用资源)}},output: {library: 'react-app', // 与注册时的name一致libraryTarget: 'umd', // 输出UMD格式,支持qiankun加载globalObject: 'window'}
};
4. 核心挑战与解决方案
  • 样式隔离
    - 方案1:微应用使用CSS Modules或BEM命名规范;
    - 方案2:Qiankun开启strictStyleIsolation: true(通过Shadow DOM隔离);
  • 通信问题
    - 简单场景:基座通过props传递数据,微应用通过props.onGlobalStateChange监听基座状态;
    - 复杂场景:用全局事件总线(如mitt)或状态管理库(如Redux);
  • 性能优化
    - 预加载:通过prefetchApps在空闲时预加载可能用到的微应用;
    - 资源缓存:微应用的静态资源开启长期缓存(结合contenthash);
  • 权限管理:基座应用统一管理权限,微应用通过接口获取当前用户权限后渲染对应内容。

总结:工程体系的协同价值

webpack/Rollup解决“代码打包与优化”,CI/CD解决“流程自动化与质量保障”,微应用解决“大型应用的拆分与协作”——四者共同构成前端工程化的完整闭环:

  • 开发阶段:用webpack/Rollup处理代码,微应用实现团队并行开发;
  • 集成阶段:CI自动检测代码质量、运行测试,确保集成无误;
  • 部署阶段:CD自动将各微应用独立部署,基座应用按需加载;
  • 迭代阶段:微应用可单独升级,通过CI/CD快速上线,webpack/Rollup保障每次构建的性能最优。

掌握这些工具和思想,能从“写代码”升级为“系统化解决工程问题”,是前端工程师从初级到高级的核心能力跨越。

在这里插入图片描述

JD上的内容

http://www.dtcms.com/a/461482.html

相关文章:

  • codex使用chrome-devtools-mcp最佳实践
  • 【Linux命令从入门到精通系列指南】export 命令详解:环境变量管理的核心利器
  • python 自动化采集 ChromeDriver 安装
  • 苏州招聘网站建设推广费
  • java8提取list中对象有相同属性值的对象或属性值
  • cuda编程笔记(26)-- 核函数使用任务队列
  • 存储芯片核心产业链研发实力:兆易创新、北京君正、澜起科技、江波龙、长电科技、佰维存储,6家龙头公司研发实力深度数据
  • 《Seq2Time: Sequential Knowledge Transfer for Video LLMTemporal Grounding》
  • 山东省建设部网站官网网站备案审核通过后
  • 浏览器兼容性问题处理
  • Day 09(下) B2a实例解说----exampleB2a.cc+ActionInitialization+PrimaryGeneratorAction
  • 分布式锁:Redisson的可重入锁
  • 计算机硬件相关(AI回答)
  • 网站设计中的用户体验大型网站需要什么样的团队
  • 淘宝网站开发方式网站托管 济南
  • 重庆网站seo案例网站推广用什么方法最好
  • sql报错:java.sql.SQLSyntaxErrorException: Unknown column ‘as0‘ in ‘where clause‘
  • 做网站是什么公司做陶瓷公司网站
  • CentOS 7上安装SonarQube8.9
  • 遗留系统微服务改造(二):数据迁移实战攻略与一致性保证
  • IO操作(Num22)
  • 领码方案|微服务与SOA的世纪对话(6):组织跃迁——智能架构下的团队与文化变革
  • 怎么什么软件可以吧做网站网站被百度收录很重要
  • C++ 单例模式(Singleton)详解
  • 面向未来的数据平台
  • C++5d
  • Transformer实战(21)——文本表示(Text Representation)
  • 网站空间商 权限梵克雅宝
  • 【Vue 3 】——setup、ref、watch
  • 做期货网站违法的吗淄博市住房和城乡建设局网站