前端 react 面试题 (一)

news2025/2/26 5:38:45

文章目录

    • vue与react的区别。
    • react的生命周期有哪些及它们的作用。
    • setState是同步的还是异步的。
    • 如何更新数据后,立刻获取最新的dom或者更新后的数据。
      • 使用回调函数:
      • 在生命周期方法中处理:
    • 函数式组件和class组件的区别。
      • class组件
      • 函数式组件
      • 区别
    • 常用的hooks有哪些。
    • 自定义hooks。
      • 使用自定义 Hooks 时的注意点:
      • 创建自定义 Hooks 时的注意点:
    • 为什么同一个hooks调用很多次,其不同的结果都能被保存并返回来。
    • 手写一个useState的实现原理。
    • useEffect如何消除副作用。
    • react如何优化每次父组件数据更新,子组件也会更新。
      • 1. 使用 `React.memo`:
      • 2. 使用 `shouldComponentUpdate`:
      • 3. 将不变的函数移到外部:
      • 4. 使用 useCallback 和 useMemo:
      • 5. 使用 React Developer Tools 分析性能:
    • memo和useMemo的区别。
    • react虚拟dom。
      • 1. 创建虚拟 DOM:
      • 2. 对比虚拟 DOM:
      • 3. 计算差异:
      • 4. 更新真实 DOM:
      • 5. 提高性能:
      • 虚拟 DOM 的优势:

在这里插入图片描述

vue与react的区别。

Vue.js和React.js都是流行的JavaScript库,用于构建用户界面,但它们有一些关键的区别。以下是一些Vue.js和React.js之间的主要区别:

  1. 设计和理念:

    • Vue.js: 设计简单、灵活,更容易上手。Vue强调渐进式框架,可以逐步地应用到项目中。
    • React.js: 设计更加灵活且功能强大,但可能对初学者有一定的学习曲线。React注重构建可复用的组件。
  2. 模板语法和 JSX:

    • Vue.js: 使用基于HTML的模板语法,将模板直接写在HTML中。
    • React.js: 使用JSX(JavaScript XML),这是一种在JavaScript中嵌套XML标签的语法。JSX允许在JavaScript代码中直接编写类似XML的结构。
  3. 组件通信:

    • Vue.js: 支持父子组件通信、兄弟组件通信、以及通过事件总线或Vuex(状态管理库)进行跨组件通信。
    • React.js: 父子组件通信通过props,而跨组件通信通常需要通过提升状态(lifting state up)或使用全局状态管理库,如Redux。
  4. 状态管理:

    • Vue.js: 包含了Vuex,一个专门用于状态管理的库。Vuex提供了一种集中式管理状态的方式。
    • React.js: 可以使用Context API来进行状态管理,但更常见的是使用独立的状态管理库,如Redux。
  5. 生命周期:

    • Vue.js: 拥有明确的生命周期钩子,例如beforeCreatecreatedmounted等。
    • React.js: 也有生命周期方法,包括componentDidMountcomponentWillUnmount等。
  6. 指令和特性:

    • Vue.js: 提供了丰富的指令,如v-ifv-forv-bind等,用于操作DOM。
    • React.js: 使用属性(props)和状态(state)来管理组件的渲染和行为。
  7. 学习曲线:

    • Vue.js: 相对较低的学习曲线,尤其适合初学者。
    • React.js: 初始学习曲线可能较陡峭,但一旦掌握了基本概念,会变得更容易。
  8. 社区和生态系统:

    • Vue.js: 在中国社区有较大影响力,生态系统不如React庞大,但在一些场景中更受欢迎。
    • React.js: 拥有庞大的社区和生态系统,广泛应用于大型项目和企业级应用。

react的生命周期有哪些及它们的作用。

https://blog.csdn.net/glorydx/article/details/103358868 react生命周期介绍

setState是同步的还是异步的。

在 React 中,setState 方法通常是异步的。这是因为 React 会对多个 setState 调用进行批处理,以提高性能。React 将这些 setState 调用合并成一个单一的更新,然后异步地应用到组件状态。

这种异步的行为有一些重要的方面:

  1. 在事件处理函数中的异步行为:

    handleClick() {
      this.setState({ count: this.state.count + 1 });
      console.log(this.state.count); // 不一定会立即更新
    }
    

    上述代码中,console.log 不一定会在 setState 之后立即显示更新后的状态。React 在合适的时候异步地执行状态更新。

  2. setState 接受函数参数的情况:

    this.setState((prevState) => {
      return { count: prevState.count + 1 };
    });
    

    setState 接受一个函数作为参数时,React 会在合适的时候调用这个函数,提供最新的状态,以确保正确的更新。

  3. componentDidUpdate 中的异步行为:

    componentDidUpdate() {
      console.log(this.state.count); // 不一定会立即更新
    }
    

    componentDidUpdate 生命周期方法中,this.state 不一定会立即反映最新的状态,因为状态更新是异步的。

虽然 setState 是异步的,但React提供了一些能够在状态更新后执行的回调函数,可以通过将回调函数作为 setState 的第二个参数来实现:

this.setState({ count: this.state.count + 1 }, () => {
  console.log(this.state.count); // 在回调函数中可以访问到最新的状态
});

总体而言,理解 setState 的异步行为对于正确地处理 React 组件的状态和生命周期是很重要的。
更多关于setstate介绍

react 玩转state和setState

如何更新数据后,立刻获取最新的dom或者更新后的数据。

在 React 中,setState 是异步的,因此在调用 setState 后,不能立即获得更新后的状态或 DOM。如果你需要在 setState 完成并且组件已经重新渲染后执行一些操作,你可以使用回调函数或者在生命周期方法中处理。

使用回调函数:

this.setState({ count: this.state.count + 1 }, () => {
  // 在回调函数中可以访问到最新的状态
  console.log("Updated count:", this.state.count);

  // 这里可以执行其他需要在状态更新后立即执行的操作
});

在生命周期方法中处理:

如果你需要在组件更新后执行操作,可以在 componentDidUpdate 生命周期方法中处理:

componentDidUpdate(prevProps, prevState) {
  // 检查状态是否发生变化
  if (this.state.count !== prevState.count) {
    console.log("Updated count:", this.state.count);

    // 这里可以执行其他需要在状态更新后立即执行的操作
  }
}

componentDidUpdate 中,你可以比较当前状态和之前的状态,然后执行相应的操作。需要注意的是,在使用这种方法时,确保你不会陷入无限循环的状态,即在 componentDidUpdate 中再次调用 setState 导致组件再次更新。

选择使用回调函数还是生命周期方法取决于你的具体需求和场景。如果你需要访问最新的状态,回调函数是一个更直接的方式。如果你需要在组件更新后执行其他操作,componentDidUpdate 可能更适合。

函数式组件和class组件的区别。

class组件

class ClassComponentWithState extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0,
    };
  }

  componentDidMount() {
    document.title = `Count: ${this.state.count}`;
  }

  componentDidUpdate(prevProps, prevState) {
    if (this.state.count !== prevState.count) {
      document.title = `Count: ${this.state.count}`;
    }
  }

  render() {
    return (
      <div>
        <p>{this.props.message}</p>
        <p>Count: {this.state.count}</p>
        <button onClick={() => this.setState({ count: this.state.count + 1 })}>
          Increment
        </button>
      </div>
    );
  }
}

函数式组件

import React, { useState, useEffect } from 'react';

const FunctionalComponentWithState = (props) => {
  const [count, setCount] = useState(0);

  useEffect(() => {
    // 这里可以处理副作用,类似于 componentDidMount 和 componentDidUpdate
    document.title = `Count: ${count}`;
  }, [count]);

  return (
    <div>
      <p>{props.message}</p>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
};

区别

class组件特点:

  • 有组件实例
  • 有生命周期
  • 有 state 和 setState

函数组件特点:

  • 没有组件实例
  • 没有生命周期
  • 没有 state 和 setState,只能接收 props
  • 函数组件是一个纯函数,执行完即销毁,无法存储 state

常用的hooks有哪些。

usestate,useEffect,usememo,useCallback,useReducer,useContext

自定义hooks。

自定义 Hooks 是一种用于在 React 函数式组件之间共享状态逻辑的机制。创建自定义 Hooks 可以帮助您将可复用的逻辑提取出来,以便在多个组件中共享。以下是使用和创建自定义 Hooks 时的一些建议和注意点:

使用自定义 Hooks 时的注意点:

  1. 命名规范:

    • 自定义 Hook 的命名应以 “use” 开头,这是 React 社区的一种约定,帮助开发者识别其为 Hook。
    function useCustomHook() {
      // ...
    }
    
  2. 多次使用:

    • 自定义 Hook 可以在一个或多个组件中使用,使得逻辑的重用更加灵活。
    function ComponentA() {
      const data = useCustomHook();
      // ...
    }
    
    function ComponentB() {
      const data = useCustomHook();
      // ...
    }
    
  3. 不包含组件生命周期:

    • 自定义 Hook 中不应包含与组件生命周期相关的逻辑,例如 componentDidMountcomponentDidUpdate。这样的逻辑应该由使用 Hook 的组件自行处理。
  4. 不依赖组件内部状态:

    • 自定义 Hook 应该是无状态的,不依赖组件内部的状态。如果 Hook 需要保存状态,应该通过 Hook 的返回值提供给组件。

创建自定义 Hooks 时的注意点:

  1. 返回值:

    • 自定义 Hook 应该返回一个可用于组件的值,通常是状态和更新状态的函数。确保返回值对于使用 Hook 的组件是直观和易用的。
    function useCustomHook() {
      const [value, setValue] = useState(initialValue);
      // 其他逻辑...
      return { value, setValue };
    }
    
  2. 参数:

    • 如果需要,可以通过参数将定制的配置传递给自定义 Hook。这样可以使 Hook 更灵活,适应不同的用例。
    function useCustomHook(config) {
      const [value, setValue] = useState(config.initialValue);
      // 其他逻辑...
      return { value, setValue };
    }
    
  3. 提取共享逻辑:

    • 将多个组件之间共享的逻辑提取到自定义 Hook 中,以确保逻辑的一致性和可维护性。
    function useSharedLogic() {
      // 共享逻辑...
    }
    
    function ComponentA() {
      useSharedLogic();
      // ...
    }
    
    function ComponentB() {
      useSharedLogic();
      // ...
    }
    
  4. 避免与组件耦合:

    • 自定义 Hook 应该是独立于组件的,不依赖于组件的实现细节。这有助于确保 Hook 的通用性和可重用性。
    // 不好的例子,过于与组件耦合
    function useBadCustomHook() {
      const [value, setValue] = useState(0);
      useEffect(() => {
        console.log("Component did mount");
      }, []);
      return { value, setValue };
    }
    
    // 好的例子,不与组件耦合
    function useGoodCustomHook() {
      const [value, setValue] = useState(0);
      return { value, setValue };
    }
    

使用和创建自定义 Hooks 时,遵循这些注意点可以帮助您创建出易于理解、复用和维护的逻辑。

为什么同一个hooks调用很多次,其不同的结果都能被保存并返回来。

跟vue的data一样,hooks本身也是函数,函数返回的数据是在函数内部生成的,每一次调用hook,都在函数内部生成一个新的数据并抛出,组件内部用变量接收后,相当于形成闭包,函数执行完,并不会摧毁函数的执行期上下文,所以变量也不会被释放。

手写一个useState的实现原理。

function useState(init) {
	let state;
	// useState无法保存函数
	if(typeof init === 'function') {
		state = init()
	} else {
		state = init
	}

	const setState = (change) => {
		// 判断一下是否传递过来的是函数
		if(typeof change === 'function') {
			// 如果是函数,调用,并将之前的state传过去,接收到的返回值作为新的state并赋值
			state = change(state)
		} else {
			// 如果不是函数,直接赋值
			state = change;
		}
	}	
	return [state, setState]
}

更多useState使用介绍请看
react使用usestate踩坑

useEffect如何消除副作用。

useeffect可以返回一个回调函数,函数体将在组件卸载前执行,用以消除副作用。

import React, { useEffect } from 'react';

function DOMManipulationComponent() {
  useEffect(() => {
    // 手动操作 DOM
    const element = document.getElementById('exampleElement');
    element.style.color = 'red';

    // 在组件卸载时进行清理操作
    return () => {
      element.style.color = ''; // 恢复原始样式
    };
  }, []); // 空数组表示仅在组件挂载和卸载时执行

  return <div id="exampleElement">DOM Manipulation Example</div>;
}

react如何优化每次父组件数据更新,子组件也会更新。

在 React 中,当父组件的数据更新时,子组件通常也会更新。React 通过 Virtual DOM 和一些智能的渲染机制来优化这个过程,确保只有实际发生变化的部分才会更新。然而,有时候我们可能需要进一步优化,以避免不必要的子组件更新。

以下是一些优化子组件更新的方法:

1. 使用 React.memo

React.memo 是一个高阶组件,用于对函数式组件进行浅层的 props 比较,以避免不必要的重新渲染。它可以用于包裹子组件,只有在传递给子组件的 props 发生变化时才会重新渲染。

import React, { memo } from 'react';

const MemoizedComponent = memo(({ data }) => {
  // 只有 data 发生变化时才会重新渲染
  return <div>{data}</div>;
});

2. 使用 shouldComponentUpdate

对于类组件,可以手动实现 shouldComponentUpdate 方法来控制组件是否应该更新。

class PureComponentClassComponent extends React.PureComponent {
  shouldComponentUpdate(nextProps) {
    // 只有当 nextProps.data 发生变化时才会重新渲染
    return nextProps.data !== this.props.data;
  }

  render() {
    return <div>{this.props.data}</div>;
  }
}

3. 将不变的函数移到外部:

确保传递给子组件的函数是不变的,以避免每次父组件更新时都重新生成函数。

function ParentComponent() {
  const handleClick = () => {
    // 处理点击事件
  };

  return <ChildComponent onClick={handleClick} />;
}

4. 使用 useCallback 和 useMemo:

使用 useCallbackuseMemo 来缓存函数和计算结果,以避免不必要的重新计算和函数生成。

import React, { useCallback, useMemo } from 'react';

function ParentComponent({ data }) {
  const handleClick = useCallback(() => {
    // 处理点击事件
  }, []);

  const processedData = useMemo(() => {
    // 计算结果
    return data.map(item => item * 2);
  }, [data]);

  return <ChildComponent data={processedData} onClick={handleClick} />;
}

5. 使用 React Developer Tools 分析性能:

使用 React Developer Tools 来检查组件的渲染和更新,找出造成不必要更新的原因。这可以帮助您更好地理解组件渲染的情况。

通过结合上述方法,您可以更精确地控制子组件的更新,从而提高应用程序的性能。请注意,这些优化方法的适用性取决于具体的使用场景,需要根据实际情况来选择和结合使用。

memo和useMemo的区别。

useMemo 是一个自定义 Hook,它用于在渲染过程中执行昂贵的计算,并缓存计算结果,以便在后续的渲染中重复使用。

React.memo 是一个高阶组件,用于对函数式组件进行浅层的 props 比较,如果组件的 props 没有发生变化,将会阻止不必要的重新渲染。

react虚拟dom。

虚拟 DOM(Virtual DOM)是 React 中一种用于提高性能的技术。它是一个内存中的表示,类似于真实 DOM 树的结构。React 使用虚拟 DOM 来进行高效的 DOM 操作,减少直接操作真实 DOM 的次数,从而提高应用性能。

以下是虚拟 DOM 的基本原理和工作流程:

1. 创建虚拟 DOM:

当 React 组件的状态(state)或属性(props)发生变化时,React 会重新渲染组件。在重新渲染之前,React 会创建一个新的虚拟 DOM 树,以表示更新后的组件结构。

2. 对比虚拟 DOM:

React 使用一种叫做“协调算法”的机制,来比较新的虚拟 DOM 树和之前的虚拟 DOM 树。这个算法能够找出两个树之间的差异(所谓的“差异树”)。

3. 计算差异:

通过计算差异,React 知道在更新真实 DOM 时应该做什么。这包括哪些节点需要被添加、删除、更新,以及如何更新它们。

4. 更新真实 DOM:

一旦计算出了差异,React 就会将这些变化应用到真实 DOM 上。为了尽可能减少对真实 DOM 的直接操作,React 采用了一种批处理的方式,将所有变更一次性应用到真实 DOM。

5. 提高性能:

由于虚拟 DOM 的存在,React 能够减少直接操作真实 DOM 的次数。通过批处理和智能的差异计算,React 能够更有效地更新用户界面,提高应用的性能。

虚拟 DOM 的优势:

  1. 性能提升: 通过在内存中进行比较和计算,减少直接操作真实 DOM 的次数,提高了性能。

  2. 跨平台兼容性: 虚拟 DOM 可以在不同平台上运行,使得 React 可以同时支持 Web、原生移动应用和其他平台。

  3. 方便的抽象层: 虚拟 DOM 提供了一个抽象层,使得开发者可以更方便地操作组件和状态,而不用过多关心底层的 DOM 操作。

虽然虚拟 DOM 为 React 带来了性能的提升,但并不是所有情况下都需要手动操作虚拟 DOM。React 提供了高度抽象的 API,大部分情况下开发者只需要关心组件的声明和状态更新,React 会自动处理虚拟 DOM 的创建和更新。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1214822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器怎么更新?4个高效设置方法!

“我在使用浏览器时&#xff0c;有时候会提示说浏览器版本太低&#xff0c;需要更新后才能使用。有什么方法可以更新浏览器呢&#xff1f;快给我支支招吧&#xff01;” 在快速发展的科技时代&#xff0c;浏览器更新是确保网络安全和性能优化的关键步骤。如果浏览器的版本太低&…

windows系统下修改nginx配置后reload重加载后不生效解决方案

windows系统下修改nginx配置后reload重加载后不生效解决方案 1、Nginx配置在重启&#xff08;reload&#xff09;后也不生效的原因2、通过服务启动的Nginx&#xff0c;通过stop命令是关闭不了的&#xff1a;(Access is denied)。 1、Nginx配置在重启&#xff08;reload&#xf…

大语言模型量化方法对比:GPTQ、GGUF、AWQ

在过去的一年里&#xff0c;大型语言模型(llm)有了飞速的发展&#xff0c;在本文中&#xff0c;我们将探讨几种(量化)的方式&#xff0c;除此以外&#xff0c;还会介绍分片及不同的保存和压缩策略。 说明&#xff1a;每次加载LLM示例后&#xff0c;建议清除缓存&#xff0c;以…

前端跨界面之间的通信解决方案

主要是这两个方案&#xff0c;其他的&#xff0c;还有 SharedWorker 、IndexedDB、WebSocket、Service Worker 如果是&#xff0c;父子嵌套 iframe 还可以使用 window.parent.postMessage(“需要传递的参数”, ‘*’) 1、localStorage 核心点 同源&#xff0c;不能跨域(协议、端…

9.MyBatis-Plus

1、前期准备 a. 创建数据库 CREATE TABLE USER (id BIGINT(20)NOT NULL COMMENT 主键ID,NAME VARCHAR(30)NULL DEFAULT NULL COMMENT 姓名,age INT(11)NULL DEFAULT NULL COMMENT 年龄,email VARCHAR(50)NULL DEFAULT NULL COMMENT 邮箱,PRIMARY KEY (id) );INSERT INTO user…

短路语法 [SUCTF 2019]EasySQL1

打开题目 输入字符的时候啥也不回显。只有输入数字的时候页面有回显 但是当我们输入union&#xff0c;from&#xff0c;sleep&#xff0c;where&#xff0c;order等&#xff0c;页面回显nonono&#xff0c;很明显过滤了这些关键词 最开始我的思路是打算尝试双写绕过 1;ununion…

TS-08-A-2D、TS-08-B-1H插装式电磁比例溢流阀放大器

TS-08-A-2D、TS-08-B-1H插装式电磁比例溢流阀放大器持续的电磁铁、高效能的电磁铁结构、可选的线圈电压和终端、工业化通用插孔、紧凑的结构。 螺纹插装式、先导滑阀式减压溢流阀&#xff0c;利用可变电流输入可实现指定范围内的输出压力连续调节。输出压力与 DC 电流输入成比…

[Jenkins] 物理机 安装 Jenkins

这里介绍Linux CentOS系统直接Yum 安装 Jenkins&#xff0c;不同系统之间类似&#xff0c;操作命令差异&#xff0c;如&#xff1a;Ubuntu用apt&#xff1b; 0、安装 Jenkins Jenkins是一个基于Java语言开发的持续构建工具平台&#xff0c;主要用于持续、自动的构建/测试你的软…

Linux学习教程(第三章 Linux文件和目录管理)1

第三章 Linux文件和目录管理&#xff08;初识Linux命令&#xff09; 对初学者来说&#xff0c;管理 Linux 系统中的文件和目录&#xff0c;是学习 Linux 至关重要的一步。 为了方便管理文件和目录&#xff0c;Linux 系统将它们组织成一个以根目录 / 开始的倒置的树状结构。Li…

【架构师】的修炼之道都需要学习哪些?看看这些就够了

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

代码随想录图论|130. 被围绕的区域 417太平洋大西洋水流问题

130. 被围绕的区域 **题目&#xff1a;**给你一个 m x n 的矩阵 board &#xff0c;由若干字符 ‘X’ 和 ‘O’ &#xff0c;找到所有被 ‘X’ 围绕的区域&#xff0c;并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 题目链接&#xff1a;130. 被围绕的区域 解题思路&#xff1a…

《向量数据库指南》——2023云栖大会现场,向量数据库Milvus Cloud成关注焦点

近期,广受关注的2023 云栖大会正式收官,来自全球各地的开发者集聚一堂,共同探索 AI 时代的更多可能性。 云栖大会是由阿里巴巴集团主办的科技盛宴,是中国最早的开发者创新展示平台。据悉,今年云栖大会的主题为“计算,为了无法计算的价值”,共吸引了全球 44 个国家和地区…

用封面预测书的价格【图像回归】

今天&#xff0c;我将介绍计算机视觉的深度学习应用&#xff0c;用封面简单地估算一本书的价格。 我没有看到很多关于图像回归的文章&#xff0c;所以我为你们写这篇文章。 距离我上一篇文章已经过去很长时间了&#xff0c;我不得不承认&#xff0c;作为一名数据科学家&#x…

OceanBase杨冰:完全自研,才能逢山开路遇水搭桥

11月16日&#xff0c;在OceanBase2023年度发布会上&#xff0c;OceanBase CEO杨冰介绍&#xff0c;中国数字经济的蓬勃发展催生了对分布式数据库的强大需求&#xff0c;这种需求也牵引了OceanBase坚定投入自主研发&#xff0c;从而推动树立了分布式数据库的四项新标准。 据了解…

Harmony SDK API 版本 与 Harmony OS 版本对照表,及如何查看鸿蒙手机Harmony SDK Api 版本

Harmony SDK API 版本 与 Harmony OS 版本对照表 Harmony OSHarmony SDK APIHarmony 4.09Harmony 3.19Harmony 3.08Harmony 3.0 pre7Harmony 2.2.06Harmony 2.1.05Harmony 2.04 具体到真机上可能会有差异&#xff0c;如我的手机OS版本是2.0&#xff0c;按照上面表应该是4&…

jsp中使用PDF.js实现pdf文件的预览

本文介绍的是在使用jsp作为模板引擎的spring-mvc项目中&#xff0c;如何利用 PDF.js实现pdf文件的预览。 1、下载 PDF.js Getting Started (mozilla.github.io) 下载解压后其中有两个目录&#xff0c;直接将这两个文件夹放到项目的web资源目录中。此时相当于把PDF.js这个项目也…

使用Kohya_ss训练Stable Diffusion Lora

Stable Diffusion模型微调方法 Stable Diffusion主要有 4 种方式&#xff1a;Dreambooth, LoRA, Textual Inversion, Hypernetworks。 Textual Inversion &#xff08;也称为 Embedding&#xff09;&#xff0c;它实际上并没有修改原始的 Diffusion 模型&#xff0c; 而是通过…

Android 14 Beta 1

Android 14的第一个 Beta 版&#xff0c;围绕隐私、安全、性能、开发人员生产力和用户定制等核心主题构建&#xff0c;同时继续改进平板电脑、可折叠设备等大屏幕设备的体验。我们一直在完善 Android 14 的功能和稳定性方面取得稳步进展&#xff0c;现在是时候向开发者和早期采…

软件系统集成指南

软件产品集成是将各种软件组件、模块和代码组装成最终可执行、可应用的软件产品的过程。这个过程涉及到将工作产品转化为产品的组装过程。在软件工程中&#xff0c;产品集成是一个重要的环节&#xff0c;通过持续性集成&#xff0c;将产品集成的过程常态化、自动化。做好产品集…

收集整理微信小程序源码精选8500套(不同行业的源码集合)/带后台+含搭建开发教程

这下面分享的是精心收集整理的微信小程序源码精选8500套&#xff0c;它含有不同行业的源码集合&#xff0c;带后台&#xff0c;而且含搭建开发教程。可以转存起来&#xff0c;需要的时候直接搜索关键词查找就行了&#xff0c;方便得很。 很多伙伴学习小程序不知怎么开始&#…