千锋教育 UniAPP 快速入门到社区项目企业实战

2023-12-16

千锋教育 UniAPP 快速入门到社区项目企业实战

千锋教育 UniAPP 快速入门到社区项目企业实战

前言 - 课程介绍

一、课程背景

大前端时代背景下,前端开发人员掌握单一的 Web 端开发能力已经远远不够了,微信小程序、安卓 APP、IOS APP,甚至是 Windows 桌面端,还有最近出的鸿蒙系统开发,都成了我们成长需要掌握的技能。所以呢,市面上各种「跨平台」开发解决方案层出不穷,比较有代表性的就是: UniAPP 、 Flutter、 React Native、Taro、Weex 等等。

UniAPP 是基于「 Vue + 微信小程序 」语言体系,开发人员学习成本低上手快,同时随着如今 UniAPP 生态也逐步趋于成熟。所以,基于 UniAPP 开发多端项目,已经是很多中小型企业常用的技术解决方案。

那么,今天呢,我们就从 UniAPP 基础开始,对照企业级实践标准,从零到一,一步一步打造一个 多端(微信小程序 + H5 + 安卓 APP + IOS APP)的社区论坛类项目。

二、学前须知

学前须知:

  1. 掌握 HTML、CSS、JS基础,能够构建静态页面
  2. 掌握 Vue 基础,能够使用脚手架构建应用
  3. 掌握微信小程序基础,对微信小程序组件、API服务有一定的了解

三、课程大纲

课程简介:

  1. 课程大纲介绍
  2. 实战项目介绍

UniAPP 快速入门学习

一、UniAPP 介绍

(1)什么是 UniAPP ?

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到 iOS、Android、H5,以及各种小程序(微信/支付宝/百度/头条/ QQ /钉钉)等多个平台,方便开发者快速交付,不需要转换开发思维,不需要更改开发习惯。

(2)为什么要选择 UniAPP ?

  1. 开发者/案例数量更多

几十万应用、uni 统计月活12亿、70+ 微信 / QQ群

  1. 平台能力不受限

在跨端的同时,通过条件编译 + 平台特有 API 调用,可以优雅的为某平台写个性化代码,调用专有能力而不影响其他平台

  1. 性能体验优秀

加载新页面速度更快、自动 diff 更新数据,App 端支持原生渲染支撑更流畅的用户体验,小程序端的性能优于市场其他框架

  1. 周边生态丰富

插件市场 数千款插件,支持 NPM、支持小程序组件和SDK,微信生态的各种 sdk 可直接用于跨平台 APP

  1. 学习成本低

基于通用的前端技术栈,采用 vue 语法+微信小程序 api,无额外学习成本

(3)UniAPP 功能框架

在这里插入图片描述

(4)UniAPP 开发环境搭建

  1. 下载开发工具 HBuilderX

HBuilderX 是通用的前端开发工具,但为 uni-app 做了特别强化。

下载 App 开发版,可开箱即用;如下载标准版,在运行或发行 uni-app 时,会提示安装 uni-app 插件,插件下载完成后方可使用

  1. 创建 uni-app 项目

选择 uni-app 类型,输入工程名,选择模板,点击创建,即可成功创建。

uni-app自带的模板有 Hello uni-app ,是官方的组件和API示例。

还有一个重要模板是 uni ui项目模板,日常开发推荐使用该模板,已内置大量常用组件。

  1. 运行 uni-app

主要包括:浏览器运行、真机运行、小程序运行等

  1. 发布 uni-app

主要包括:云端原生 APP 、离线原生 APP、H5、各种小程序

二、UniAPP 初始化相关配置

(1)工程目录结构

┌─components            uni-app组件目录
│  └─comp-a.vue        可复用的a组件
├─hybrid                存放本地网页的目录(自建)
├─platforms             存放各平台专用页面的目录(自建)
├─pages                 业务页面文件存放的目录
│  ├─index
│  │  └─index.vue      index页面
│  └─list
│     └─list.vue        list页面
├─static                存放应用引用静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此
├─wxcomponents          存放小程序组件的目录(自建)
├─common                公共资源(自建)
├─api                   请求封装(自建)
├─store                 状态管理(自建)
├─main.js               Vue初始化入口文件
├─App.vue               应用配置,用来配置App全局样式以及监听 应用生命周期
├─manifest.json         配置应用名称、appid、logo、版本等打包信息
└─pages.json            配置页面路由、导航条、选项卡等页面类信息
    

提示

  • static 下目录的 js 文件不会被 webpack 编译,里面如果有 es6 的代码,不经过转换直接运行,在手机设备上会报错。
  • 所以 less、scss 等资源同样不要放在 static 目录下,建议这些公共的资源放在 common 目录下

(2)应用配置 manifest.json

manifest.json 文件是应用的配置文件,用于指定应用的名称、图标、权限等,我们也可以在这里为 Vue 为H5 设置跨域拦截处理器

(3)编译配置 vue.config.js

vue.config.js 是一个可选的配置文件,如果项目的根目录中存在这个文件,那么它会被自动加载,一般用于配置 webpack 等编译选项。 官方文档

(4)全局配置 page.json

pages.json 文件用来对 uni-app 进行全局配置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等。它类似微信小程序中 app.json 页面管理 部分。

官方文档

属性 类型 必填 描述
globalStyle Object 设置默认页面的窗口表现
pages Object Array 设置页面路径及窗口表现
easycom Object 组件自动引入规则
tabBar Object 设置底部 tab 的表现
condition Object 启动模式配置
subPackages Object Array 分包加载配置
preloadRule Object 分包预下载规则

(5)全局样式 uni.scss

uni.scss 文件的用途是为了方便整体控制应用的风格。比如按钮颜色、边框风格, uni.scss 文件里预置了一批scss变量预置。 官方文档

uni-app 官方扩展插件(uni ui)及 插件市场 上很多三方插件均使用了这些样式变量,如果你是插件开发者,建议你使用 scss 预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App。

uni.scss 是一个特殊文件,在代码中无需 import 这个文件即可在scss代码中使用这里的样式变量。uni-app的编译器在webpack配置中特殊处理了这个 uni.scss,使得每个 scss 文件都被注入这个uni.scss,达到全局可用的效果。如果开发者想要less、stylus的全局使用,需要在vue.config.js中自行配置webpack策略。

(6)主组件 App.vue

App.vue 是uni-app的主组件,所有页面都是在 App.vue 下进行切换的,是页面入口文件。但 App.vue 本身不是页面,这里不能编写视图元素。

这个文件的作用包括:调用应用生命周期函数、配置全局样式、配置全局的存储globalData

应用生命周期仅可在 App.vue 中监听,在页面监听无效。

(7)入口文件 main.js

main.js 是uni-app的入口文件,主要作用是初始化 vue 实例、定义全局组件、使用需要的插件如vuex。

官方文档

(8)UniAPP 开发规范及资源路径

  1. 开发规范约定
  • 页面文件向导 Vue单文件组件(SFC)规范
  • 组件标签靠近小程序规范,详见 uni-app 组件规范
  • 互连能力(JS API)靠近微信小程序规范,但需要将替换替换 wx 为 uni ,详见uni-app接口规范
  • 数据绑定及事件处理同 Vue.js 规范,同时补充了 App 和页面的生命周期
  • 为兼容多端运行,建议使用 flex 布局进行开发
  1. 资源路径说明

template 内约定静态资源,如 image,video 等标签的 src 属性时,可以使用相对路径或绝对路径,形式如下:

<!-- 绝对路径,/static指根目录下的static目录,在cli项目中/static指src目录下的static目录 -->
<image class="logo" src="/static/logo.png"></image>
<image class="logo" src="@/static/logo.png"></image>
<!-- 相对路径 -->
<image class="logo" src="../../static/logo.png"></image>

注意

  • @ 初始的绝对路径以及相对路径会通过 base64 转换规则校验
  • 约定的静态资源在非 h5 平台,均不转为 base64
  • H5平台,小于4kb的资源会被转换成base64,其余不转

js 文件或 script 标签内,可以使用相对路径和绝对路径,形式如下:

// 绝对路径,@指向项目根目录,在cli项目中@指向src目录
import add from '@/common/add.js'
// 相对路径
import add from '../../common/add.js'

css 文件或 style 标签内,可以使用相对路径和绝对路径,形式如下:

/* 绝对路径 */
@import url('/common/uni.css');
@import url('@/common/uni.css');
/* 相对路径 */
@import url('../../common/uni.css');

css 文件或 style 标签内引用的图片路径,可以使用相对路径也可以使用绝对路径,形式如下:

/* 绝对路径 */
background-image: url(/static/logo.png);
background-image: url(@/static/logo.png);
/* 相对路径 */
background-image: url(../../static/logo.png);

三、UniAPP 生命周期

学习一个工具的目的核心是什么?是为了解决核心业务逻辑问题,业务逻辑很多时候简单的解释一句话:“在合适的时机干合适的事情”,OK!什么是合适的时机呢?简单的说,页面运行过程中,各个阶段的回调函数就是页面中的时机,我们也叫这个为“生命周期钩子函数”,当然,业务中我们也会写到很多「回调」的逻辑,这些回调其实也是咱们自定义的时机,UniAPP 的生命周期钩子函数回调函数有哪些呢?我们来理解一下!

uni-app 完整支持 Vue 实例的生命周期,同时还新增 应用生命周期页面生命周期

(1)应用生命周期

函数名 说明
onLaunch uni-app 初始化完成时触发(全局只触发一次)
onShow uni-app 启动,或从后台进入前台显示
onHide uni-app 从前台进入后台
onError uni-app 报错时触发
onUniNViewMessage nvue 页面发送的数据进行监听,可参考 nvue 向 vue 通讯
onUnhandledRejection 对未处理的 Promise 拒绝事件监听函数(2.8.1+)
onPageNotFound 页面不存在监听函数
onThemeChange 监听系统主题变化

(2)页面生命周期

函数名 说明
onLoad 监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参),参考 示例
onShow 监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
onReady 监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发
onHide 监听页面隐藏
onUnload 监听页面卸载
onResize 监听窗口尺寸变化
onPullDownRefresh 监听用户下拉动作,一般用于下拉刷新,参考 示例
onReachBottom 页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。具体见下方注意事项
onTabItemTap 点击 tab 时触发,参数为Object,具体见下方注意事项
onShareAppMessage 用户点击右上角分享
onPageScroll 监听页面滚动,参数为Object
onNavigationBarButtonTap 监听原生标题栏按钮点击事件,参数为Object
onBackPress 监听页面返回
onNavigationBarSearchInputChanged 监听原生标题栏搜索输入框输入内容变化事件
onNavigationBarSearchInputConfirmed 监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发。
onNavigationBarSearchInputClicked 监听原生标题栏搜索输入框点击事件
onShareTimeline 监听用户点击右上角转发到朋友圈
onAddToFavorites 监听用户点击右上角收藏

四、UniAPP 路由配置及页面跳转

(1)路由配置

uni-app 页面路由全部交给 框架 统一管理,开发者需要在 pages.json 里配置每个路由页面的路径及页面样式(类似小程序在 app.json 中配置页面路由)。

"pages": [
		{
			"path": "pages/index",
			"style": {
				"navigationBarTitleText": "路由配置",
				"navigationBarBackgroundColor": "#FFFFFF",
				"navigationBarTextStyle": "black",
				"backgroundColor": "#FFFFFF",
				"enablePullDownRefresh": true
			}
		},
		{
			"path": "pages/user",
			"style": {
				"navigationBarTitleText": "路由配置",
				"navigationBarBackgroundColor": "#FFFFFF",
				"navigationBarTextStyle": "black",
				"backgroundColor": "#FFFFFF",
				"enablePullDownRefresh": true
			}
		}
]

(2)路由跳转

uni-app 有两种页面路由跳转方式:使用 navigator 组件跳转(标签式导航)、调用 API 跳转(编程式导航)

框架以栈的形式管理当前所有页面, 当发生路由切换的时候,页面栈的表现如下:

路由方式 页面栈表现 触发时机
初始化 新页面入栈 uni-app 打开的第一个页面
打开新页面 新页面入栈 调用 API uni.navigateTo
使用组件 <navigator open-type="navigate" />
页面重定向 当前页面出栈,新页面入栈 调用 API uni.redirectTo
使用组件
页面返回 页面不断出栈,直到目标返回页 调用 API uni.navigateBack
使用组件 、
用户按左上角返回按钮、安卓用户点击物理back按键
Tab 切换 页面全部出栈,只留下新的 Tab 页面 调用 API uni.switchTab
使用组件 、
用户切换 Tab
重加载 页面全部出栈,只留下新的页面 调用 API uni.reLaunch
使用组件

当在page.json中设置list之后,就不能再使用下面方式进行跳转了,应该使用switch进行跳转。

	onLoad() {
			//2s之后跳转到首页
			//setTimeout是异步调用,需要赋值给一个变量,然后再在内存中删除它 
			let titmer = setTimeout(()=>{
				clearTimeout(titmer)
				uni.navigateTo({
					url:'/pages/index/index'
				})
			},2000)
		},
	onLoad() {
			//2s之后跳转到首页
			//setTimeout是异步调用,需要赋值给一个变量,然后再在内存中删除它 
			let titmer = setTimeout(()=>{
				clearTimeout(titmer)
				uni.navigateTo({
					url:'/pages/index/index'
				})
			},2000)
		},

(3)获取当前页面栈

getCurrentPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。

注意 : getCurrentPages() 仅用于展示页面栈的情况,请勿修改页面栈,以免造成页面状态错误。

示例:

onLoad() {
	console.log(getCurrentPages())
},

效果:
在这里插入图片描述

(4)路由传参与接收

说明:页面生命周期的 onLoad()监听页面加载,其参数为上个页面传递的数据,如:

//页面跳转并传递参数
uni.navigateTo({
    url: 'page2?name=liy&message=Hello'
});

url为将要跳转的页面路径 ,路径后可以带参数。参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 & 分隔。如 ‘path?key1=value2&key2=value2’,path为下一个页面的路径,下一个页面的onLoad函数可得到传递的参数。

// 页面 2 接收参数
onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数
	console.log(option.name); //打印出上个页面传递的参数。
	console.log(option.message); //打印出上个页面传递的参数。
}

注意 :url 有长度限制,太长的字符串会传递失败,并且不规范的字符格式也可能导致传递失败,所以对于复杂参数建议使用 encodeURI、decodeURI 进行处理后传递

(5)小程序路由分包配置

因小程序有体积和资源加载限制,各家小程序平台提供了分包方式,优化小程序的下载和启动速度。

所谓的主包,即放置默认启动页面及 TabBar 页面,而分包则是根据 pages.json 的配置进行划分。

在小程序启动时,默认会下载主包并启动主包内页面,当用户进入分包内某个页面时,会把对应分包自动下载下来,下载完成后再进行展示,此时终端界面会有等待提示。

"subPackages": [
  	{
			"root": "news",
			"pages": [{
					"path": "index",
					"style": {
						"navigationBarTitleText": "新闻中心",
						"navigationBarBackgroundColor": "#FFFFFF",
						"navigationBarTextStyle": "black",
						"backgroundColor": "#FFFFFF"
					}
				}
			]
		}
  	... 
]// 预下载分包设置
"preloadRule": {
		"pages/index": {
			"network": "all",
			"packages": ["activities"]
		}
}

五、UniAPP 常用组件简介

uni-app 为开发者提供了一系列基础组件,类似 HTML 里的基础标签元素,但 uni-app 的组件与 HTML 不同,而是与小程序相同,更适合手机端使用。

虽然不推荐使用 HTML 标签,但实际上如果开发者写了 div 等标签,在编译到非H5平台时也会被编译器转换为 view 标签,类似的还有 span text a navigator 等,包括 css 里的元素选择器也会转,但为了管理方便、策略统一,新写代码时仍然建议使用view等组件。

开发者可以通过组合这些基础组件进行快速开发, 基于内置的基础组件,可以开发各种扩展组件,组件规范与vue组件相同。

案例 :知心姐姐布局实现

六、UniAPP 常用 API 简介

uni-app 的 js 代码,h5 端运行于浏览器中,非 h5 端 Android 平台运行在 v8 引擎中,iOS 平台运行在 iOS 自带的 jscore 引擎中。所以, uni-app 的 jsAPI 由标准 ECMAScript 的 js API 和 uni 扩展 API 这两部分组成。

ECMAScript 由 Ecma 国际管理,是基础 js 语法。浏览器基于标准 js 扩充了window、document 等 js API;Node.js 基于标准 js 扩充了 fs 等模块;小程序也基于标准 js 扩展了各种 wx.xx、my.xx、swan.xx 的 API。

标准 ecmascript 的 API 非常多,比如:console、settimeout等等。

非 H5 端,虽然不支持 window、document、navigator 等浏览器的 js API,但也支持标准 ECMAScript。

开发者不要把浏览器里的 js 等价于标准 js。

所以 uni-app 的非 H5 端,一样支持标准 js,支持 if、for 等语法,支持字符串、数组、时间等变量及各种处理方法,仅仅是不支持浏览器专用对象。

案例 :知心姐姐聊天功能

七、UniAPP 自定义组件与通信

(1)自定义组件概念

组件是 vue 技术中非常重要的部分,组件使得与ui相关的轮子可以方便的制造和共享,进而使得vue使用者的开发效率大幅提升,在项目的 component 目录下存放组件, uni-app 只支持 vue 单文件组件(.vue 组件)

组件可以使用「全局注册」和「页面引入」两种方式进行使用,使用分为三步:

导入 import xxx from 'xxx'

注册 Vue.use('xx',xx) components:{ xxx }

使用 <xx />

(2)父子组件通信

  1. 父组件通过自定义属性向子组件传递数据

  2. 子组件通过 props 接收父组件传递的数据

  1. 父组件通过自定义事件标签向子组件传递事件
  2. 子组件通过触发父组件定义事件方式修改父组件数据

(3)slot 数据分发与作用域插槽

  1. 父组件通过调用子组件内部嵌套 html 内容作为 slot 分发给子组件
  2. 子组件通过在 slot 标签上添加属性,向父组件通信数据,作用域插槽

(4)全局事件定义及通信

  1. 在整个应用的任何地方均可以使用 uni.$on 创建一个全局事件
  2. 在整个应用的任何地方也均可以使用 uni.$emit 来触发全局事件,实现多组件见的数据通信

八、UniAPP Vuex 状态管理

  1. 概念

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

  1. 应用场景

Vue多个组件之间需要共享数据或状态。

  1. 关键规则
  • State:存储状态数据
  • Getter:从状态数据派生数据,相当于 State 的计算属性
  • Mutation:存储用于同步更改状态数据的方法,默认传入的参数为 state
  • Action:存储用于异步更改状态数据,但不是直接更改,而是通过触发 Mutation 方法实现,默认参数为context
  • Module:Vuex 模块化
  1. 交互关系

在这里插入图片描述

  1. 使用方式
import {
		mapState,
		mapActions
} from 'vuex'
export default {
		computed: {
			...mapState(['loginState', 'userInfo'])
		},
		methods: {
			...mapActions(['userLoginAction', 'userLogoutAction']),
		}
}
  1. 体验案例:模拟用户登陆逻辑实现

注意:配合使用 Storage 来实现刷新页面后状态持续保持的业务需求

目录结构:
在这里插入图片描述

文件store/index.vue

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vue.Store({
	state:{
		username:'未登录用户'
	},
	mutations:{
		MLOGIN(state,userName){
			state.userName = userName
		},
		MLOGOUT(state){
			state.userName = '退出状态用户'
		}
	},
	actions:{
		login(context,userName){
			context.commit('MLOGIN',userName)
		},
		logout(content){
			context.commit('MLOGIN')
		}
	}
})

export default store

在main.js中引入store

//调用store VUE X 状态管理
import store from "store/index.js"

挂载

const app = new Vue({
  ...App
  store
})

文件:main.js

import App from './App'

// #ifndef VUE3
import Vue from 'vue'
import './uni.promisify.adaptor'
Vue.config.productionTip = false
App.mpType = 'app'

//调用store VUE X 状态管理
import store from "store/index.js"

const app = new Vue({
  ...App
  store
})
app.$mount()
// #endif

// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
  const app = createSSRApp(App)
  return {
    app
  }
}
// #endif

九、运行环境判断与跨端兼容

(1)开发环境和生产环境

uni-app 可通过 process.env.NODE_ENV 判断当前环境是开发环境还是生产环境,一般用于连接测试服务器或生产服务器的动态切换。

在HBuilderX 中,点击「运行」编译出来的代码是开发环境,点击「发行」编译出来的代码是生产环境

if(process.env.NODE_ENV === 'development'){
    console.log('开发环境')
}else{
    console.log('生产环境')
}

(2)判断平台

平台判断有2种场景,一种是在编译期判断,一种是在运行期判断。

编译期判断编译期判断,即 条件编译 ,不同平台在编译出包后已经是不同的代码,

// #ifdef H5
 alert("只有h5平台才有alert方法")
// #endif
// 如上代码只会编译到H5的发行包里,其他平台的包不会包含如上代码。

运行期判断 运行期判断是指代码已经打入包中,仍然需要在运行期判断平台,此时可使用 uni.getSystemInfoSync().platform 判断客户端环境是 Android、iOS 还是小程序开发工具

switch(uni.getSystemInfoSync().platform){
   case 'android':
      console.log('运行Android上')
      break;
   case 'ios':
      console.log('运行iOS上')
      break;
   default:
      console.log('运行在开发者工具上')
      break;
}

(3)跨端兼容

uni-app 已将常用的组件、JS API 封装到框架中,开发者按照 uni-app 规范开发即可保证多平台兼容,大部分业务均可直接满足,但每个平台有自己的一些特性,因此会存在一些无法跨平台的情况。

  • 大量写 if else,会造成代码执行性能低下和管理混乱。
  • 编译到不同的工程后二次修改,会让后续升级变的很麻烦。

在 C 语言中,通过 #ifdef、#ifndef 的方式,为 windows、mac 等不同 os 编译不同的代码。 uni-app 参考这个思路,为 uni-app 提供了条件编译手段,在一个工程里优雅的完成了平台个性化实现。

条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台。

**写法:**以 #ifdef 或 #ifndef 加 %PLATFORM% 开头,以 #endif 结尾。

  • \#ifdef :if defined 仅在某平台存在
  • \#ifndef :if not defined 除了某平台均存在
  • %PLATFORM% :平台名称

%PLATFORM% 可取值如下:

平台
APP-PLUS App
APP-PLUS-NVUE App nvue
H5 H5
MP-WEIXIN 微信小程序
MP-ALIPAY 支付宝小程序
MP-BAIDU 百度小程序
MP-TOUTIAO 字节跳动小程序
MP-QQ QQ小程序
MP-360 360小程序
MP 微信小程序/支付宝小程序/百度小程序/字节跳动小程序/QQ小程序/360小程序
QUICKAPP-WEBVIEW 快应用通用(包含联盟、华为)
QUICKAPP-WEBVIEW-UNION 快应用联盟
QUICKAPP-WEBVIEW-HUAWEI 快应用华为
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

千锋教育 UniAPP 快速入门到社区项目企业实战 的相关文章

  • 程序员养生指南

    目录 前言 调整工作习惯 保持合理饮食 积极参与活动 保持良好睡眠 精神调适与放松 结语 前言 不用多说 想必都知道程序员是一份高强度 高压力 高危 的职业 长期坐姿 熬夜加班等不良生活习惯会对人的身体健康造成负面影响 长时间的工作 高强度
  • Vue:用IDEA开发Vue,标签语法爆红问题处理

    一 场景描述 我在 IDEA 中 学习 Vue 课程 入门学习时 是在 html 文件中 script 引入 vue js 文件方式 此时 在 html 文件中用 v 标签 爆红 二 解决办法 打开 菜单栏 File Settings 选择
  • 展会回顾|CASAIM应邀参加一汽大众秋季创新科技展,展出最新的第二代CASAIM-IS自动化测量系统

    11月30日至12月1日 CASAIM应邀参加一汽大众秋季创新科技展 展出最新的第二代CASAIM IS自动化测量系统 现场一汽大众相关领导和成员及其他厂商莅临参观 就自动化测量技术应用进行深入交流和探讨 第二代CASAIM IS自动化测量
  • 参加2023谷歌开发者社区 DevFest的洞察与感悟

    目录 前言 关于GDG 主会场精彩分享 分会场干货满满 共创未来之旅 参会体验 结束语 前言 在12月10日 DevFest又一次来临了 潮流与技术的光芒同时绽放 作为一名热衷技术的开发者 我有幸参与了这次盛会 也非常荣幸能够和线上三十万开
  • 通信子网在计算机网络中的地位和作用

    一 通信子网是计算机网络的核心组成部分 通信子网是计算机网络的核心组成部分 它负责为计算机网络中的各种设备提供通信支持 无论是主机之间的数据传输 还是主机与终端之间的数据通信 都需要通过通信子网来实现 通信子网是连接各个设备的关键基础设施
  • 大揭秘!Python处理办公自动化的10大场景!

    知乎上有个热门问题 Python 未来会成为大众办公常用编程工具吗 在编程世界里 Python已经是名副其实的网红了 曾经一个学汉语言的研究生 问我怎么学Python 因为他们课程论文里需要用到文本分析 用Python来跑数据 我和他说 你
  • 计算机网络中的通信子网主要有哪些功能?

    计算机网络中的通信子网主要具有以下功能 负责全网的数据通信 通信子网通过使用各种通信协议和传输控制功能 能够确保数据从一台主机安全 准确地传输到另一台主机 这包括数据的封装 解封装 传输控制 差错控制等过程 完成各种网络数据的处理 转换和交
  • 计算机网络中的通信子网:架构、协议与技术简介

    在计算机网络中 通信子网是负责实现主机之间以及主机与终端之间数据传输的核心部分 它由一系列硬件设备和通信协议组成 为上层应用提供可靠 高效和透明的数据传输服务 本文将详细介绍通信子网的架构 协议与技术 一 通信子网的架构 星型拓扑 星型拓扑

随机推荐

  • Python爬虫是否合法?

    Python爬虫是否合法的问题颇具争议 主要涉及到使用爬虫的目的 操作方式以及是否侵犯了其他人的权益 本文将介绍Python爬虫的合法性问题 并提供一些相关的法律指导和最佳实践 1 什么是Python爬虫 Python爬虫是一种自动化程序
  • 学python如何办公自动化?学这些就够了

    我们天天都在忙 究竟在忙些什么 查找各种文件 在一个个文件夹里来回穿梭 在TXT XLS XLSX DOC DOCX PPT PDF文档之间来回切换 复制 粘贴 运指如飞 打开几十个网页 以便及时获取信息 将各种数据输入系统 以及把数据填写
  • 超实用!34 个 Python 自动化办公库清单!

    今天给大家分析34个常用的Python自动化办公库 本次内容涵盖了 Excel Word PPT ODF PDF 邮件 微信 文件处理等所有能在办公场景实现自动化的库 希望能够对大家有所帮助 Python Excel自动化库 1 xlwin
  • wireshark使用

    1 抓包界面介绍 2 过滤 1 ip过滤 or 端口过滤 ip src 192 168 1 104 显示源地址为192 168 1 104的数据包列表 ip dst 192 168 1 104 显示目标地址为192 168 1 104的数据
  • 如何自学成 Python 大神?这里有些建议

    人生苦短 我用 Python 为什么 简单明了的理由当然是开发效率高 但是学习 Python 的初学者往往会面临以下残酷的现状 网上充斥着大量的学习资源 书籍 视频教程和博客 但是大部分都是讲解基础知识 不够深入 也有的比较晦涩 难以理解
  • 这或许是最全的 Python 数据分析指南(全)

    因工作需求经常会面试一些数据分析师 一些 coding 能力很强的小伙伴 当被问及数据分析方法论时一脸懵逼的 或者理所当然的认为就是写代码啊 在文章开头先来解释一下数据分析 数据分析是通过明确分析目的 梳理并确定分析逻辑 针对性的收集 整理
  • Python爬虫入门(一)

    前言 很多人都或多或少听说过 Python 爬虫 我也一直很感兴趣 所以也花了一个下午入门了一下轻量级的爬虫 为啥是轻量级的爬虫呢 因为有的网页是比较复杂的 比如需要验证码 登录验证或者需要证书才能访问 我们了解爬虫的概念和架构 只需要做一
  • Python爬虫 (适合初学者)

    关于爬虫是什么 怎样保证爬虫的合法性小编在这就不再过多的阐述 从本章起 小编将和大家一起分享在学习python爬虫中的所学 希望可以和大家一起进步 也希望各位可以关注一下我 首先我们来初步了解下如何使用开发者工具进行抓包 以 https f
  • std::iota 函数简单使用

    std iota 是 C 标准库中的一个算法 位于
  • LeetCode-周赛-思维训练-中等难度

    第一题 1798 你能构造出连续值的最大数目 解题思路 我们先抛开原题不看 可以先完成一道简单的题目 假设现在就给你一个目标值X 问你能够构造出从 1 X 的连续整数 最小需要几个数 贪心假设 期望 我们要尽量用最少的数目 构造出最长的连续
  • Django系列之Celery异步框架+RabbitMQ使用

    在Django项目中 如何集成使用Celery框架来完成一些异步任务以及定时任务呢 1 安装 pip install celery celery框架 pip install django celery beat celery定时任务使用 p
  • LeetCode-数组-重叠、合并、覆盖问题-中等难度

    435 无重叠区间 我认为区间类的题型 大多数考验的是思维能力 以及编码能力 该类题型本身并无什么算法可言 主要是思维逻辑 比如本题实际上你只需要能够总结出重叠与不重叠的含义 再加上一点编码技巧 便可完成 解题思路 正如前面所说 那么解题的
  • python 的几种创建以及删除虚拟环境的方法

    在 Python 中 有几种工具可以用来创建和管理虚拟环境 其中两个最常用的是 venv 和 virtualenv 同时 也有一些第三方工具如 conda 用于 Conda 环境 和 pipenv 用于项目环境 1 使用 venv venv
  • 课程资料|组合数学-电子版教材!

    写在前面 学习成绩 不管是是保研 考研 出国留学 还是找实习找工作 都是你极为重要的支撑 为了帮助同学们 更好地学习专业课 斩获高绩点 岛主将持续推出 CS相关的专业教材资料 希望同学们能够在接下来的学习生活中取得良好的成绩 今天为大家带来
  • 1130 - Host “WIN-CA4FHERGO9J‘ is not allowed to connect to this MySQL server

    1 知识小课堂 1 1 Mysql MySQL是一个关系型数据库管理系统 由瑞典 MySQL AB 公司开发 属于 Oracle 旗下产品 它是最流行的关系型数据库管理系统之一 在WEB应用方面 MySQL是最好的RDBMS Relatio
  • 使用rknn-toolkit2将paddleseg模型导出rknn模型

    目录 安装paddle2onnx环境 将paddle模型导出onnx模型 安装rknn toolkits 转化rknn模型 安装paddle2onnx环境 首先创建一个python虚拟环境 conda create n paddle2onn
  • ThreadLocal 本地线程变量详解

    概述 ThreadLocal 意为本地线程变量 即该变量只属于当前线程 对其他线程隔离 我们知道 一个普通变量如果被多线程访问会存在存在线程安全问题 这时我们可以使用 Synchronize 来保证该变量某一时刻只能有一个线程访问 从而解决
  • 低代码是行业毒瘤?我不这么认为

    低代码是行业毒瘤 我不这么认为 1 什么是低代码 2 低代码的优缺点 3 你认为低代码会替代传统编程吗 4 如何入门低代码 5 常见的低代码平台 1 什么是低代码 低代码是一种可视化的应用开发方法 它允许用户通过较少的代码 以较快的速度来交
  • 盘点2023年低代码平台TOP10

    盘点2023年低代码平台TOP10 1 什么是低代码平台 2 十大低代码平台 2 1 IVX 2 2 简道云 2 3 伙伴云 2 4 企名片one 2 5 明道云 2 6 轻流
  • 千锋教育 UniAPP 快速入门到社区项目企业实战

    千锋教育 UniAPP 快速入门到社区项目企业实战 千锋教育 UniAPP 快速入门到社区项目企业实战 前言 课程介绍 一 课程背景 二 学前须知 三 课程大纲 UniAPP 快速入门学习