首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
web3366
广州大学 Web前端
发布于广东
关注
已关注
取消关注
好
@阿珊和她的猫:
1. 仿网易云音乐播放器(technical-architecture)
1. 架构设计2. 技术描述3. 路由定义路由用途/首页推荐页面,展示个性化推荐内容/discover发现音乐页面,音乐分类和排行榜/mine我的音乐页面,个人歌单和收藏/playlist/:id歌单详情页面,显示歌单内歌曲列表/player播放页面,音乐播放控制和歌词显示/search搜索页面,音乐搜索功能/profile用户中心页面,个人信息和设置/music-hall音乐馆页面,精选内容和专题4. 核心组件架构4.1 音频播放管理// 音频状态管理interface AudioState { currentSong: Song | null playlist: Song[] currentIndex: number isPlaying: boolean playMode: 'loop' | 'single' | 'random' volume: number progress: number duration: number}// 歌曲数据结构interface Song { id: string title: string artist: string album: string duration: number cover: string url: string lyrics: LyricLine[]}interface LyricLine { time: number text: string}4.2 歌单管理// 歌单数据结构interface Playlist { id: string name: string description: string cover: string playCount: number songCount: number creator: User songs: Song[] createTime: number}interface User { id: string nickname: string avatar: string level: number followers: number followings: number}4.3 搜索功能// 搜索结果类型interface SearchResult { songs: Song[] playlists: Playlist[] artists: Artist[] albums: Album[]}interface Artist { id: string name: string avatar: string followers: number}interface Album { id: string name: string artist: string cover: string publishTime: number}5. 状态管理设计5.1 Pinia Store结构5.2 核心Store定义// 播放器Storeexport const usePlayerStore = defineStore('player', { state: () => ({ currentSong: null as Song | null, playlist: [] as Song[], currentIndex: 0, isPlaying: false, playMode: 'loop' as 'loop' | 'single' | 'random', volume: 1, progress: 0, duration: 0 }), actions: { playSong(song: Song) { this.currentSong = song this.isPlaying = true }, togglePlay() { this.isPlaying = !this.isPlaying }, nextSong() { // 根据播放模式切换歌曲逻辑 }, prevSong() { // 上一首歌曲逻辑 } }})6. Mock数据设计6.1 模拟API结构// Mock数据配置interface MockConfig { songs: Song[] playlists: Playlist[] artists: Artist[] albums: Album[] users: User[]}// 模拟API端点const MOCK_APIS = { // 推荐歌单 '/api/recommend/playlist': 'GET', // 歌单详情 '/api/playlist/:id': 'GET', // 搜索 '/api/search': 'GET', // 歌曲URL '/api/song/url/:id': 'GET', // 歌词 '/api/lyric/:id': 'GET', // 排行榜 '/api/toplist': 'GET'}6.2 音频播放技术实现// Web Audio API播放器类class AudioPlayer { private audioContext: AudioContext private audioElement: HTMLAudioElement private gainNode: GainNode private analyser: AnalyserNode constructor() { this.audioContext = new AudioContext() this.audioElement = new Audio() this.setupAudioNodes() } private setupAudioNodes() { const source = this.audioContext.createMediaElementSource(this.audioElement) this.gainNode = this.audioContext.createGain() this.analyser = this.audioContext.createAnalyser() source.connect(this.gainNode) this.gainNode.connect(this.analyser) this.analyser.connect(this.audioContext.destination) } play(url: string) { this.audioElement.src = url this.audioElement.play() } pause() { this.audioElement.pause() } setVolume(volume: number) { this.gainNode.gain.value = volume } getProgress(): number { return this.audioElement.currentTime / this.audioElement.duration }}7. 组件设计规范7.1 基础组件结构<!-- 歌曲列表项组件 --><template> <div class="song-item" @click="handlePlay"> <img class="cover" :src="song.cover" /> <div class="info"> <h3 class="title">{{ song.title }}</h3> <p class="artist">{{ song.artist }}</p> </div> <div class="actions"> <van-icon name="play-circle-o" @click.stop="handlePlay" /> <van-icon name="ellipsis" @click.stop="showActions" /> </div> </div></template><script setup lang="ts">import { usePlayerStore } from '@/stores/player'interface Props { song: Song showAlbum?: boolean}const props = defineProps<Props>()const playerStore = usePlayerStore()const handlePlay = () => { playerStore.playSong(props.song)}</script>7.2 页面布局结构<!-- 基础页面布局 --><template> <div class="page-container"> <van-nav-bar :title="title" left-arrow @click-left="onClickLeft" /> <div class="page-content"> <router-view /> </div> <PlayerBar /> <van-tabbar v-model="activeTab" route> <van-tabbar-item icon="home-o" to="/">首页</van-tabbar-item> <van-tabbar-item icon="search" to="/discover">发现</van-tabbar-item> <van-tabbar-item icon="music-o" to="/mine">我的</van-tabbar-item> <van-tabbar-item icon="user-o" to="/music-hall">音乐馆</van-tabbar-item> </van-tabbar> </div></template>8. 性能优化策略8.1 懒加载实现// 图片懒加载指令const lazyLoad = { mounted(el: HTMLImageElement, binding: DirectiveBinding) { const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { el.src = binding.value observer.unobserve(el) } }) }) observer.observe(el) }}8.2 虚拟滚动长列表使用虚拟滚动优化性能歌曲列表、搜索结果等大数据量展示场景使用第三方库如vue-virtual-scroller8.3 音频预加载预加载下一首歌曲缓存常用音频资源使用Service Worker进行资源缓存
点赞 3
评论 3
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
05-24 19:19
门头沟学院 前端工程师
PDD前端应聘者画像,个人总结供参考
1.基础价值观&条件:无拼不青春、能吃苦、接受11-11-6+的作息、本分2.简历:技术岗位(前后端)最好有实习否则简历很难过筛、客户端相比可能会更加宽松(26届数据)3.笔试:前端岗位考的都是基础的核心内容(三个选择题+三个简答题)3.1 选择题:循环,异步代码输出分析、前端相关的计算机网络等基础知识3.2 简答题:前端手撕题和场景题手撕,包括Flex布局和CSS3样式设定、Vue3的响应式原理实现、Promise相关内容(并发、一次串行执行、带限制的重试等等、函数柯里化和扁平化对象等等,简答题纯文本手撕无需进行代码提交和测试用例。4.面试(通常3轮技术面+一轮HR面+超长的泡池子,...
查看30道真题和解析
点赞
评论
收藏
分享
05-27 20:40
已编辑
天津师范大学 Java
求大佬们指点一下简历,目标中场日常实习。
听劝把内容改简洁点了,加粗一些内容后感觉看着可能更顺眼了,求多指点
小浪Coding:
能找下agent实习已经是万幸了,这简历很普通,降低预期
点赞
评论
收藏
分享
05-19 20:18
已编辑
长沙理工大学 Java
28届双非太难了
沟通了400多份,没什么人理,有一个还是还这种😭😭😭
2025916Ney...:
你能这时候知道要实习已经超过90%不要放弃
点赞
评论
收藏
分享
05-27 14:05
门头沟学院 Java
27届暑期后端高频面试题汇总(字节腾讯美团等多家大厂)
最近把牛客上近一个月Java 后端面经挨个翻了一遍,有字节、腾讯、拼多多、快手、美团、滴滴等这些公司,整理了各家闻到的高频题目和知识点,牛友有需要的自取。题目均来自其他牛友发的面经,真实可靠,每道题也都标注了来源觉得有帮助的话,辛苦点赞收藏转发一键三连,需要其他岗位的,也可以评论留言一、集合(几乎每家一面必问)1. HashMap 底层数据结构 / 怎么扩容?来源:快手后端一面、字节中国交易与广告一面、转转Java实习、腾讯二面、腾讯云智一面快手追问:哈希表遍历是有序还是随机?排序规则?怎么计算桶位(自定义对象呢)?字节追问:Java 17 的 HashMap 插入/查找时间复杂度2. Has...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
来🦢的第一个需求就是3000行skill
2.0W
2
...
27届暑期大厂后段高频面试汇总
1.1W
3
...
27届暑期前端高频面试题汇总(字节百度阿里快手等多家大厂)
3598
4
...
我可能就是大家口中的"工贼"
3427
5
...
前端四轮速通字节ssp(专升本)
2481
6
...
父母就是我求职路上最大的山
2481
7
...
26前端的深夜
2159
8
...
学院本熬到上岸的这两个月
1980
9
...
26届学院本总结
1892
10
...
字节三面
1845
创作者周榜
更多
正在热议
更多
#
实习生的蛐蛐区
#
1007911次浏览
5133人参与
#
扒一扒那些奇葩实习经历
#
160737次浏览
1183人参与
#
发面经攒人品
#
8904087次浏览
98766人参与
#
应届生第一份工资要多少合适
#
28279次浏览
108人参与
#
27届实习投递记录
#
166574次浏览
1682人参与
#
应届生,你找到工作了吗
#
181003次浏览
914人参与
#
招聘要求与实际实习内容不符怎么办
#
226855次浏览
1077人参与
#
机械人值得去的小众企业
#
38396次浏览
68人参与
#
现在入门AI首先要做什么?
#
18338次浏览
145人参与
#
互联网行业现在还值得去吗
#
65725次浏览
380人参与
#
实习最想跑路的瞬间
#
147714次浏览
787人参与
#
面试反问你会问什么
#
213655次浏览
1962人参与
#
机械人,秋招第一次笔试的企业是哪家?
#
106973次浏览
715人参与
#
万物皆可发面经
#
5617次浏览
67人参与
#
AI了,我在打一种很新的工
#
211692次浏览
2353人参与
#
实习,不懂就问
#
231831次浏览
1771人参与
#
实习教会我的事
#
82294次浏览
521人参与
#
网易求职进展汇总
#
218839次浏览
1542人参与
#
春招前还要继续实习吗?
#
72135次浏览
353人参与
#
校招求职有谈薪空间吗
#
234490次浏览
2400人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务