uniapp项目-懂你找图

文章目录

    • 项目介绍
    • 项目搭建
        • 1.项目创建
      • 2.新增tabbar
        • 3引入字体图标
    • uni-ui
        • 介绍
        • 使用
    • uni-api
        • 介绍
    • 首页模块
        • 功能分析
        • 搭建子页面
            • 分段器介绍
        • 封装自己的异步请求
            • 为什么要封装
            • 封装的思路
        • 编写首页-推荐页面
            • 分页功能
        • 专辑列表
        • 获取专辑详情数据

项目介绍

微信小程序,提供图片、视频的浏览、下载功能。

项目搭建

1.项目创建

创建项目 vue create -p dcloudio/uni-preset-vue my-project
安装sass依赖npm install sass-loader node-sass

2.新增tabbar

(创建页面放在src下面)
页面名称 路径
首页 home/index.vue
横屏 horizontal/index.vue
精美视频 vedio/index.vue
搜索 search/index.vue
我的 mine/index.vue

page.json:

{
	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
		{
			"path": "pages/home/index",
			"style": {
				"navigationBarTitleText": "首页"
			}
		},
		{
			"path": "pages/horizontal/index",
			"style": {
				"navigationBarTitleText": "横屏"
			}
		},
		{
			"path": "pages/video/index",
			"style": {
				"navigationBarTitleText": "精美视频"
			}
		},
		{
			"path": "pages/search/index",
			"style": {
				"navigationBarTitleText": "搜索"
			}
		},
		{
			"path": "pages/mine/index",
			"style": {
				"navigationBarTitleText": "我的"
			}
		}				
	],
	"globalStyle": {
		"navigationBarTextStyle": "black",
		"navigationBarTitleText": "uni-app",
		"navigationBarBackgroundColor": "#F8F8F8",
		"backgroundColor": "#F8F8F8"
	},
	"tabBar": {
		//如果应用是一个多 tab 应用,可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页。
		    "color":"#8a8a8a",//tab 上的文字默认颜色
			"selectedColor":"#d4237a",//tab 上的文字选中时的颜色
			"backgroundColor":"#fff",//tab 的背景色
			"position":"bottom",//可选值 bottom、top,top 值仅微信小程序支持
			"borderStyle":"black",//tabbar 上边框的颜色,可选值 black/white
			"list": [{//tab 的列表,
			  "pagePath": "pages/home/index",//	页面路径,必须在 pages 中先定义
			  "text": "首页",//tab 上按钮文字,在 App 和 H5 平台为非必填。例如中间可放一个没有文字的+号图标
			  "iconPath":"./static/item/home1.png",//图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px,当 postion 为 top 时,此参数无效,不支持网络图片,不支持字体图标
			  "selectedIconPath":"static/item/home.png"//选中时的图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px ,当 postion 为 top 时,此参数无效
			},{
			  "pagePath": "pages/horizontal/index",
			  "text": "横屏",
			  "iconPath":"./static/item/img1.png",
			  "selectedIconPath":"static/item/img.png"
			}, {
			  "pagePath": "pages/video/index",
			  "text": "精美视频",
			  "iconPath":"./static/item/vedio1.png",
			  "selectedIconPath":"static/item/vedio.png"
			}, {
			  "pagePath": "pages/search/index",
			  "text": "搜索",
			  "iconPath":"./static/item/search1.png",
			  "selectedIconPath":"static/item/search.png"
			}, {
			  "pagePath": "pages/mine/index",
			  "text": "我的",
			  "iconPath":"./static/item/mine1.png",
			  "selectedIconPath":"static/item/mine.png"
			} 
		]
	}
}

在这里插入图片描述

3引入字体图标

使用阿里矢量图标库:
选择图标,加入购物车->添加至项目->点击下载至本地

在这里插入图片描述
将iconfont.css打开将文件路径换成外网的
在这里插入图片描述
另存为wxss文件,复制粘贴至项目->在App.vue文件中引入,

@import url("./styles/iconfont.wxss");

就可以通过class使用

<view>首页
	<text class="iconfont icon-shouye"></text>
	</view>

uni-ui

介绍
  • https://uniapp.dcloud.io/component/README
  • uni-ui是DClound提供的一个跨端ui库,它基于vue组件、flex布局、无dom的跨全端ui框架
  • uni-ui不包括基础组件,它是基础组件的补充
  • 数字角标、日历、卡片、折叠面板、倒计时、抽屉、悬浮按钮、收藏按钮、底部购物导航、宫格、图标、索引列表、列表、加载更多、自定义导航、通告栏、数字输入框、分页器、弹出层、评分、搜索栏、分段器、步骤条、滑动操作、轮播图指示点、标签
使用
  • https://github.com/dcloudio/uni-ui
  • 安装uni-ui
npm install @dcloudio/uni-ui
  • 局部引入组件
  • 注册组件
  • 使用组件
<template>
	<view>首页
	<text class="iconfont icon-shouye"></text>
	<!--使用组件-->
	<uni-badge text="1"></uni-badge>
	<uni-badge text="2" type="success" ></uni-badge>
	<uni-badge text="3" type="primary" :inverted="true"></uni-badge>
	</view>
	
</template>

<script>
	import {uniBadge} from '@dcloudio/uni-ui'//局部引入组件
	export default {//注册组件
	    components: {uniBadge}
	}
</script>

<style>
</style>

在这里插入图片描述

uni-api

介绍
  • https://uniapp.dcloud.io/api/
  • 原生的微信小程序的api不支持promise ,uni-app对大部分的小程序的原生api做了封装,使之支持promise
  • 使用方式:
    - 原生微信小程序wx.request
    - uniapi方式uni.request
    - 其他api使用方式类似
//页面加载完毕
		onLoad(){
			//1原生微信小程序的方式、
			wx.request({
				url:"http://jsonplaceholder.typicode.com/posts",
				success(res) {
					console.log(res);
				}
			})
			//2uni-api
			uni.request({
				url:"http://jsonplaceholder.typicode.com/posts"
			}).then(res=>{
				console.log(res)
			})
			
		}
	

结果:
在这里插入图片描述第一个是uniapi的请求结果:一个数组,第一个值表示成功还是失败(没有失败就是null),第二个表示返回的数据
第二个是微信小程序的请求结果

首页模块

功能分析
  • 修改导航栏外观

  • 使用分段器搭建子页面

  • 封装自己的异步请求(发送请求的时候想要显示一个等待中的效果,所以封装)

pages.json中修改全局样式

"globalStyle": {
		"navigationBarTextStyle": "white",//只有white/black
		"navigationBarTitleText": "懂你找图",
		"navigationBarBackgroundColor": "#000"
		//"backgroundColor": "#F8F8F8"
	},

在这里插入图片描述

搭建子页面
  • 首页分为四个模块:推荐、分类、最新、专辑
  • 新建自定义组件代替上述四个页面
    home-recommend
    home-category
    home-new
    home-album
分段器介绍

分段器指的是uni-ui的一个组件,其实就是我们俗称的标签页,tab栏。

<template>
	<view>
	    <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem" style-type="text" active-color="#d4237a"></uni-segmented-control>
		<view class="content">
				<view v-show="current === 0">
					<home-recommend></home-recommend>
				</view>
				<view v-show="current === 1">
					<home-category></home-category>
				</view>
				<view v-show="current === 2">
					<home-new></home-new>
				</view>
				<view v-show="current === 3">
					<home-album></home-album>
				</view>
		</view>
	</view>
	
</template>

<script>
	
	import homeRecommend from "./home-recommend";
	import homeCategory from "./home-category";
	import homeNew from "./home-new";
	import homeAlbum from "./home-album"
	import {uniSegmentedControl} from '@dcloudio/uni-ui'//局部引入分段器组件
	export default {
		components:{
			homeRecommend,
			homeCategory,
			homeNew,
			homeAlbum,
			uniSegmentedControl
		},
		 data() {
		        return {
		            items: ['推荐','分类','最新','专辑'],
		            current: 0
		        }
		    },
		    methods: {
		        onClickItem(e) {
		            if (this.current !== e.currentIndex) {
		                this.current = e.currentIndex;
		            }
		        }
		    }
	}
</script>

<style>
</style>

在这里插入图片描述

封装自己的异步请求
为什么要封装
  • 原生微信小程序的请求不支持promise
  • uni-api的请求不能够方便添加请求中的效果
  • uni-api请求返回值是个数组,用起来不方便
封装的思路
  • 基于原生promise封装
  • 挂载到vue原型上
  • 通过this.request方式来使用

pages下新建utils文件夹,新建request.js文件

//es6
export default (params)=>{
	//加载中
	uni.showLoading({
		title:"加载中"
	})
	
	return new Promise((resolve,reject)=>{
		wx.request({
			...params,
			success(res) {
				resolve(res)
			},
			fail(error) {
				reject(error)
			},
			complete() {
				uni.hideLoading()
			}
			
		})
	})
}

main.js中引入并挂载到原型上

import request from './utils/request'
Vue.prototype.request=request

页面中使用this.reques

onLoad() {
	this.request({
			url:"http://jsonplaceholder.typicode.com/posts"
		})
		.then(res=>{
			console.log(res)
		})
}

拿到数据
在这里插入图片描述
把请求中成功返回改为res.data,拿到数据就更加简单了。

加载中效果
在这里插入图片描述

编写首页-推荐页面
  • 接口文档https://www.showdoc.cc/414855720281749?page_id=3678621017219602
  • 数据动态渲染
  • JavaScript 日期处理类库moment.js使用
  • “热门”列表基于(原生小程序的)scroll-view的分页加载

uni.scss新增主题色

/*主题颜色*/

$color:#d52a7e;

安装moment.js

npm install moment --sav

homepage_recommands/index.vue

<template>
	<view v-if="recommends.length>0"><!--recommends有数据才显示里面的标签,否则会先显示undefined一闪而过-->
		<!--推荐开始-->
		<view class="recommend_wrap">
			<view class="recommend_item" 
			v-for="item in recommends"
			:key="item.id"
			>
			
			  <image  :src="item.thumb" mode="widthFix"></image>  <!--mode设置为widthFix高度自适应-->
			
			</view>
				
		</view>
		<!--推荐结束-->
		<!--月份开始-->
		<view class="month-wrap">
			<view class="month_title">
				<view class="month_title_info">
					<view class="month_info">
						<text>{{monthes.DD}}</text>
						/{{monthes.MM}}</view>
					<view class="month_text">
						你负责美丽就好
					</view>
				</view>
				<view class="month_title_more">
					更多>
				</view>
			</view>
			<view class="month_content">
				<view  class="month_item"
				 v-for="item in monthes.items" 
				 :key="item.id">
					 <image  :src="item.thumb+item.rule.replace('$<Height>',360)" mode="aspectFill"></image><!--缩略图--> 
				</view>
				
			</view>
		</view>
		<!--月份结束-->
		<!--热门开始-->
		<view class="hot_wrap">
			<view class="hot_title">
				<text>热门</text>
			</view>
			<view class="hot_content">
				<view class="hot_item"
				v-for="item in hots"
				:key="item.id"
				>
				<image :src="item.thumb" mode="widthFix"></image>	
				</view>
			</view>
		</view>
		<!--热门结束-->
		
		
	</view>
</template>

<script>
	import moment from 'moment'
	export default {
		data(){
			return{
				//推荐列表
				recommends:[],
				//月份列表
				monthes:{},
				//热门列表
				hots:[]
				
			}
		},
		mounted(){
			this.request({
				url:"http://service.picasso.adesk.com/v3/homepage/vertical",
				data:{
					limit:30,//获取多少条数据
					order:"hot",//关键字 “hot”
					skip:0//跳过多少条
				}
			})
			.then(result=>{
				console.log(result)
				this.recommends = result.res.homepage[1].items
				this.monthes=result.res.homepage[2]
				//将时间戳改为 xx号/xx月 moment.js
				this.monthes.MM=moment(this.monthes.stime).format("MM")
				this.monthes.DD=moment(this.monthes.stime).format("DD")
				//获取热门列表
				this.hots=result.res.vertical
			})
		}
	}
</script>

<style lang="scss" scoped>
	.recommend_wrap{
		//flex布局
		display: flex;
		flex-wrap: wrap;//让弹性盒元素在必要的时候拆行
		.recommend_item{
			width: 50%;		
			border: 3rpx solid white;
		}
	}
	.month-wrap{
		
		.month_title{
			display: flex;
			justify-content: space-between;
			color: $color;
			padding: 10px;
			.month_title_info{
				font-weight: 600;
				font-size: 30rpx;
				display: flex;
				.month_info{
					text{
						font-size: 36rpx;
						
					}
					
				}
				.month_text{
					font-size: 34rpx;
					color: #666;
					padding-left: 30rpx;
				}
			}
			.month_title_more{
				font-size: 24rpx;
				
			}
			
		}
		.month_content{
			display: flex;
			flex-wrap: wrap;
			.month_item{
				width: 33.33%;
				border: 3rpx solid white;
			}
			
		}
	}
	
	.hot_wrap{
		.hot_title{
			padding: 10rpx;
			text{
				border-left: 15rpx solid $color;
				padding-left: 10px;
				font-size: 26rpx;
				font-weight: 600;
			}
		}
		.hot_content{
			display: flex;
			flex-wrap: wrap;
			.hot_item{
				width: 33.33%;
				border:3rpx solid white ;
			}
		}
	}
		
</style>

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

分页功能

使用scroll-view标签充当分页的容器
绑定滚动条触底事件scrolltolower
实现分页逻辑

<template>
	<!--可滚动视图区域  @scrolltolower="handleToLower" 滚动触底事件-->
	<scroll-view  @scrolltolower="handleToLower" class="recommend_view" scroll-y v-if="recommends.length>0"><!--recommends有数据才显示里面的标签,否则会先显示undefined一闪而过-->
		<!--推荐开始-->
		<view class="recommend_wrap">
			<view class="recommend_item" 
			v-for="item in recommends"
			:key="item.id"
			>
			
			  <image  :src="item.thumb" mode="widthFix"></image>  <!--mode设置为widthFix高度自适应-->
			
			</view>
				
		</view>
		<!--推荐结束-->
		<!--月份开始-->
		<view class="month-wrap">
			<view class="month_title">
				<view class="month_title_info">
					<view class="month_info">
						<text>{{monthes.DD}}</text>
						/{{monthes.MM}}</view>
					<view class="month_text">
						你负责美丽就好
					</view>
				</view>
				<view class="month_title_more">
					更多>
				</view>
			</view>
			<view class="month_content">
				<view  class="month_item"
				 v-for="item in monthes.items" 
				 :key="item.id">
					 <image  :src="item.thumb+item.rule.replace('$<Height>',360)" mode="aspectFill"></image><!--缩略图--> 
				</view>
				
			</view>
		</view>
		<!--月份结束-->
		<!--热门开始-->
		<view class="hot_wrap">
			<view class="hot_title">
				<text>热门</text>
			</view>
			<view class="hot_content">
				<view class="hot_item"
				v-for="item in hots"
				:key="item.id"
				>
				<image :src="item.thumb" mode="widthFix"></image>	
				</view>
			</view>
		</view>
		<!--热门结束-->
		
		
	</scroll-view>
</template>

<script>
	import moment from 'moment'
	export default {
		data(){
			return{
				//推荐列表
				recommends:[],
				//月份列表
				monthes:{},
				//热门列表
				hots:[],
				//请求参数
				params:{
					limit:30,//获取多少条数据
					order:"hot",//关键字 “hot”
					skip:0//跳过多少条
				},
				hasMore:true//是否还有下一页
				
			}
		},
		mounted(){
			this.getList()
		},
		methods:{
			//获取接口数据
			getList(){
				this.request({
					url:"http://service.picasso.adesk.com/v3/homepage/vertical",
					data:this.params
				})
				.then(result=>{
					//判断还有没有下一页数据
					if(result===0){
						this.hasMore=false
						return
					}
					//console.log(result)
					if(this.recommends.length==0){//第一次发送请求
						this.recommends = result.res.homepage[1].items
						this.monthes=result.res.homepage[2]
						//将时间戳改为 xx号/xx月 moment.js
						this.monthes.MM=moment(this.monthes.stime).format("MM")
						this.monthes.DD=moment(this.monthes.stime).format("DD")
					}
					//获取热门列表
					//数组拼接
					this.hots=[...this.hots,...result.res.vertical]
				})
			},
			//滚动条触底事件
			handleToLower(){
				//修改参数,重新发送请求,请求成功后数据叠加
				if(this.hasMore){
					this.params.skip+=this.params.limit
					this.getList()
				}else{
					//弹窗提示没有下一页
					uni.showToast({
						title:"没有数据了",
						icon:"none"
					})
				}
				
				
			}
			
		}
	}
</script>

<style lang="scss" scoped>
	.recommend_view{
		//height:屏幕高度-头部标题高度(tabbar完全不用考虑)
		height:calc(100vh - 46px);//css3中cals()给元素左计算,表达式中有“+”和“-”时,其前后必须要有空格
		
	}
	.recommend_wrap{
		//flex布局
		display: flex;
		flex-wrap: wrap;//让弹性盒元素在必要的时候拆行
		.recommend_item{
			width: 50%;		
			border: 3rpx solid white;
		}
	}
	.month-wrap{
		
		.month_title{
			display: flex;
			justify-content: space-between;
			color: $color;
			padding: 10px;
			.month_title_info{
				font-weight: 600;
				font-size: 30rpx;
				display: flex;
				.month_info{
					text{
						font-size: 36rpx;
						
					}
					
				}
				.month_text{
					font-size: 34rpx;
					color: #666;
					padding-left: 30rpx;
				}
			}
			.month_title_more{
				font-size: 24rpx;
				
			}
			
		}
		.month_content{
			display: flex;
			flex-wrap: wrap;
			.month_item{
				width: 33.33%;
				border: 3rpx solid white;
			}
			
		}
	}
	
	.hot_wrap{
		.hot_title{
			padding: 10rpx;
			text{
				border-left: 15rpx solid $color;
				padding-left: 10px;
				font-size: 26rpx;
				font-weight: 600;
			}
		}
		.hot_content{
			display: flex;
			flex-wrap: wrap;
			.hot_item{
				width: 33.33%;
				border:3rpx solid white ;
			}
		}
	}
		
</style>

专辑列表

使用setNavigationBarTitle修改页面标题

uni.setNavigationBarTitle({
				title:"最新"
			})

发送请求获取数据、使用 Swiper轮播图组件

使用scroll-view组件实现分页
点击跳转到专辑详情页

–home-album.vue

<template>
	<scroll-view class="album_scroll_view" scroll-y @scrolltolower="handleToLower">
		<!--
		轮播图开始
		swiper滑块视图容器
		1.自动轮播autoplay是否自动切换
		2.显示器indicator-dots是否显示面板指示点
		3.衔接轮播circular是否采用衔接滑动
		
		4.swiper高度默认150px(不能实现由内容撑开),swiper-item标签默认高度100%
		5.image默认高度320px  基本样式中修改成了100%
		宽度240px
		6.计算图片高宽比例,写到swiper样式
		
		-->
		<view class="album_swiper">
			<swiper
			autoplay
			indicator-dots
			circular
			>
				<swiper-item
				v-for="item in banner"
				:key="item.id"
				>
					<image  :src="item.thumb" mode="widthFix"></image>
				</swiper-item>
			</swiper>
		</view>
		
		<!--轮播图结束-->
		
		<!--列表开始-->
		<view class="album_list">
			<navigator class="album_item"
			v-for="item in album"
			:key="item.id"
			url="/pages/album/index?id=123"
			>
				<view class="album_img">
					<image :src="item.cover" mode="aspectFill"></image><!--aspectFill整张图片拉伸的效果-->
				</view>
				<view class="album_info">
					<view class="album_name">
						{{item.name}}
					</view>
					<view class="album_desc">
						{{item.desc}}
					</view>
					<view class="album_btn">
						<view class="album_attention">
							关注
						</view>
					</view>
					
				</view>
			</navigator>
			
		</view>
		<!--列表结束-->
	</scroll-view>
</template>

<script>
	export default{
		data(){
			return{
				params:{//请求参数
					limit:30,
					order:"new",
					skip:0
				},
				//轮播图数组
				banner:[],
				//列表数组
				album:[],
				//是否还有数据
				hasMore:true
			}
		},
		mounted(){		
			uni.setNavigationBarTitle({
				title:"专辑"
			})
			this.getList()
		},
		methods:{
			getList(){//获取接口数据
			  this.request({
				  url:"https://service.picasso.adesk.com/v1/wallpaper/album",
				  data:this.params
			  }).then(result=>{
				  console.log(result)
				  if(this.banner.length===0){
					  this.banner=result.res.banner
				  }
				  //
				  if(result.res.album.length===0){
				  	this.hasMore=false
					return
				  }
				  this.album=[...this.album,...result.res.album]
			  })
		    },
			handleToLower(){
				if(this.hasMore){
					this.params.skip+=this.params.limit
					this.getList()
				}else{
					uni.showToast({
						title:"没有数据了",
						icon:"null"
					})
				}
			}
			
		}
	}
</script>

<style lang="scss" scoped>
	.album_scroll_view{
		height: calc(100vh - 46px);
	}
	
	.album_swiper{
		swiper{
			height:calc(750rpx / 2.3);
			image{
				height: 100%;
			}
		}
	}
	.album_list{
		padding: 20rpx;
		.album_item{
			padding: 10rpx 0;
			display: flex;
			border-bottom: 1rpx solid #ccc;
			.album_img{
				flex: 1;//左边占一份。右边占两份
				padding: 10rpx;
				image{
					width: 200rpx;
					height: 200rpx;
				}
			}
			.album_info{
				flex: 2;
				padding:0 10rpx;
				overflow: hidden;//若不设置的话,文字溢出不会有省略号,原因在于flex会按照内容来撑大盒子
				.album_name{
					font-size: 30rpx;
					color: #000;
					padding:  10rpx 0;
				}
				.album_desc{
					padding: 10rpx 0;
					font-size: 24rpx;
					
					//文字溢出显示省略号
					text-overflow: ellipsis;
					overflow: hidden;
					white-space: nowrap;
				}
				.album_btn{
					padding: 5rpx;
					display: flex;
					justify-content: flex-end;
					.album_attention{
						color:$color;
						border: 2rpx solid $color;
						padding: 5rpx;
					}
					
				}
				
			}
		}
	}
</style>

在这里插入图片描述

获取专辑详情数据

专辑组件通过在url上拼接参数
在这里插入图片描述
专辑详情组件通过options接收参数
在这里插入图片描述
子组件就可以得到数据
在这里插入图片描述
将属性名变成一个变量:在前面加上冒号

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQLBolt,一个练习SQL的宝藏网站

知乎上有人问学SQL有什么好的网站&#xff0c;这可太多了。 我之前学习SQL买了本SQL学习指南&#xff0c;把语法从头到尾看了个遍&#xff0c;但仅仅是心里有数的程度&#xff0c;后来进公司大量的写代码跑数&#xff0c;才算真真摸透了SQL&#xff0c;知道怎么调优才能最大化…

AWS迁移教程,Redis迁移到Elasticache

当企业不断出海拓展业务&#xff0c;面临的挑战之一就是如何高效迁移应用程序及数据库至云端。为解决这一问题&#xff0c;AWS云专门提供多种简单且高效的迁移方式&#xff0c;进行帮助企业实现应用程序的平稳迁移&#xff0c;从而降低迁移过程中的风险和成本。下面九河云将为大…

SSM学习——Spring AOP与AspectJ

Spring AOP与AspectJ 概念 AOP的全称为Aspect-Oriented Programming&#xff0c;即面向切面编程。 想象你是汉堡店的厨师&#xff0c;每一份汉堡都有好几层&#xff0c;这每一层都可以视作一个切面。现在有一位顾客想要品尝到不同风味肉馅的汉堡&#xff0c;如果按照传统的方…

数据结构:非比较排序

非比较排序都具有很大的局限性,包括技术排序,基数排序,桶排序等 计数排序 时间复杂度:O(N) 空间复杂度:O(range) 适用范围 数据的范围集中的数组进行排序,不适合数据分散的数组 方法 统计每个数据出现的次数为n 建立一个相同大小的数组,将每个数据都初始化为0 然后遍历…

链表优化与拓展的细节:深度探索与精致打磨

前言 链表&#xff0c;作为C语言中的基础数据结构&#xff0c;其灵活性和动态性使其在编程领域具有广泛的应用。然而&#xff0c;仅仅掌握链表的基本操作是远远不够的&#xff0c;为了更好地发挥链表的性能并满足复杂场景的需求&#xff0c;我们需要对链表进行深入的优化和拓展…

泛域名站群,泛域名程序

泛域名站群是一种利用大量类似的泛域名来建立多个网站&#xff0c;并通过这些网站链接到主网站&#xff0c;以提升主网站的排名和流量的策略。泛域名站群通常包含大量的子域名&#xff0c;这些子域名指向不同的页面&#xff0c;但它们的内容大部分是重复或相似的&#xff0c;目…

【蓝桥杯第十二届省赛B】(部分详解)

空间 8位1b 1kb1024b(2^10) 1mb1024kb(2^20) 时间显示 #include <iostream> using LLlong long; using namespace std; int main() {LL t;cin>>t;int HH,MM,SS;t/1000;SSt%60;//like370000ms370s,最后360转成分余下10st/60;MMt%60;t/60;HHt%24;printf("%02d:…

【Servlet】服务器内部转发以及客户端重定向

文章目录 一、服务器内部转发&#xff1a;request.getRequestDispatcher("...").forward(request, response);二、客户端重定向&#xff1a;response.sendRedirect("");三、服务器内部转发代码示例四、客户端重定向代码示例 一、服务器内部转发&#xff1a…

升级一下电脑,CPU换I5-14600K,主板换华硕B760M

刚给自己电脑升级了一下&#xff0c;CPU从 AMD R5 5600X 换成 Intel I5-14600K&#xff0c;主板换成了华硕的 TUF GAMING B760M-PLUS WIFI D4。 因为我现有的两根内存是DDR4的&#xff0c;所有我选了个支持DDR4内存的主板。 我发现用AMD处理器时将系统从Win10升级到Win11后变…

汤明磊对话许远东:“产业互联网的2024”: 赚钱治愈一切矫情,学习治愈一切焦虑!

3月22-23日&#xff0c;托比网南京公司开业活动举行&#xff0c;在“产业互联网的2024”主题沙龙上&#xff1a;二十二科技集团总裁许远东针对行业2024在人工智能与数据资产领域的发展了精彩观点。 以下为对话实录&#xff1a; 桐创资本合伙人汤明磊 二十二科技集团总裁许远东…

机器学习实验------线性回归方法

第1关&#xff1a;数据载入与分析 任务描述 本关任务&#xff1a;编写一个能够载入线性回归相关数据的小程序。 编程要求 该实战内容中数据为一元数据&#xff0c;利用 pandas 读入数据文件&#xff0c;并为相应的数据附上名字标签&#xff0c;分别为Population 和 Profit。…

⾃定义类型:联合和枚举

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 点击主页&#xff1a;optimistic_chen和专栏&#xff1a;c语言&#xff0c; 创作不易&#xff0c;大佬们点赞鼓…

记忆力考验游戏-第15届蓝桥第5次STEMA测评Scratch真题精选

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第178讲。 如果想持续关注Scratch蓝桥真题解读&#xff0c;可以点击《Scratch蓝桥杯历年真题》并订阅合集&#xff0c;…

monocular depth estimation 网络的 regression loss 选择

直接上图&#xff1a; 上述这么多loss&#xff0c;测评结果如下&#xff1a; 结论: L g a n L_{gan} Lgan​ 是效果最好的。 其具体实现见&#xff1a;https://github.com/marcelampc/d3net_depth_estimation/blob/master/pytorch/util/loss_bank.py github&#xff1a;htt…

【THM】Burp Suite:Other Modules(其他模块)-初级渗透测试

介绍 除了广泛认可的Repeater和Intruder房间之外,Burp Suite 还包含几个鲜为人知的模块。这些将成为这个房间探索的重点。 重点将放在解码器、比较器、排序器和组织器工具上。它们促进了编码文本的操作,支持数据集的比较,允许分析捕获的令牌内的随机性,并帮助您存储和注释…

【区块链 链外交易】SoK Off The Chain Transactions

SoK Off The Chain Transactions 摘要 本文对区块链进行了简单介绍,分析目前区块链的缺点——交易吞吐量和速度慢的原因,在此基础上引出解决此问题的方法,也是本轮将要论述的主题——链外交易。之后介绍了链外交易的基本概念和结构,并对两种类型的链外交易:通道和信任链…

Windows 11 安装tensorflow-gpu深度学习环境

前言 TensorFlow 是一个由 Google 建立的深度学习库&#xff0c;自从去年年初推出以来&#xff0c;它已经获得了很大的吸引力。主要功能包括自动微分、卷积神经网络(CNN)和回归神经网络(RNN)。它是用 C 和 Python 编写的&#xff0c;为了提高性能&#xff0c;它使用了一个名…

Linux环境基础和工具的使用

目录 1、Linux软件包管理器---yum 2、Linux开发工具 2.1、vim基本概念 2.2 vim基本操作 2.3 vim正常模式命令集 2.4 vim末行模式命令集 2.5 简单vim配置 2.5.1 配置文件的位置 3 Linux编译器--gcc/g的使用 3.1 背景知识 3.2 gcc完成 4 Linux调试器--gdb使用 4.1 背…

每日面经分享(pytest测试案例,接口断言,多并发断言)

pytest对用户登录接口进行自动化脚本设计 a. 创建一个名为"test_login.py"的测试文件&#xff0c;编写以下测试脚本 import pytest import requests# 测试用例1&#xff1a;验证登录成功的情况 # 第一个测试用例验证登录成功的情况&#xff0c;发送有效的用户名和密…

【Linux】ubuntu安装google gtest框架

本文首发于 ❄️慕雪的寒舍 ubuntu 22.04.03 LTS 安装 google gtest 框架 1.依赖项 首先在ubuntu中安装如下包 sudo apt install -y unzip g gcc cmake make automake2.下载软件包 进入google gtest的github页面&#xff0c;下载源码包 Releases google/googletest https…