首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
04-11 19:50
武汉大学 Java
字节一面面经
1.自我介绍2.手撕 lru(多了一个x秒自动过期)3.刚刚的代码哪些部分在并发环境下会线程不安全,如何解决4.拷打项目5.有没有大模型微调相关经验6.Redis为什么比其他数据库快,为什么加载到内存会比硬盘快7.刚刚提到了上下文切换,什么是上下文切换,具体是干什么的8.Redis除了分布式锁还能做什么9.Redission看门狗机制10.如何使用ai coding的11.如何学习新技术12.反问lru写的太慢了没完全写完,面试官让讲了一下思路就给过了。但是线程不安全这一块回答的有点磕绊。当天晚上约二面。
查看11道真题和解析
点赞
评论
收藏
分享
04-11 22:03
杭州师范大学 Web前端
遗憾
那可真是太遗憾了,你们就继续把流程卡在简历初筛吧,继续给我发测评和笔试之后把我挂掉吧(大部分甚至连感谢信都没有😁),我填网申一点都不累,做测评和笔试一点都不辛苦
点赞
评论
收藏
分享
03-16 16:31
湖南工商大学 Java
OC之后,本来都打算躺平了,没想到居然还会审批不通过
看来得重新踏上征程了。后悔之前oc之后没有走其他的流程。
万物DP:
应该就是备胎了,没有重新走的可能是因为另一个人已经发offer了
点赞
评论
收藏
分享
04-10 17:51
华中科技大学 Java
京东一面凉经
15min感觉kpi啊,一天后挂1.自我介绍2.讲一下项目亮点3.讲一下秒杀链路是怎么做的4.MQ咋用的,讲一下各种MQ5.讲一下MYSQL事务(讲完说那你八股背的不错)6.讲一下@Transactional7.Spring事务失效8.事务方法内对两个数据库操作,出错会不会回滚9.用没用过ai工具10.反问
查看8道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
翼支付近两年真实体验
3603
2
...
过来人聊聊对招商银行数字金融训练营的感受
3247
3
...
我的求职充满着失败
1893
4
...
美团前端考察AI coding出的题是周报生成?
1660
5
...
字节剪映123面全面经
1653
6
...
工作一年,聊聊对Agent开发的感受
1195
7
...
总拜倒在大厂二面是为什么啊。。。
1017
8
...
因为上班玩手机被开除😭
960
9
...
2026春招北京奈亚信息技术有限公司
946
10
...
恒生电子一面只面了20min
685
创作者周榜
更多
正在热议
更多
#
父母问你工作找得怎么样,怎么回
#
8210次浏览
116人参与
#
面试被问期望薪资时该如何回答
#
389549次浏览
2176人参与
#
厦门银行科技岗值不值得投
#
19648次浏览
427人参与
#
哪些公司面试还在问八股?
#
3809次浏览
43人参与
#
想从事Agent应该学习哪些技术?
#
1659次浏览
55人参与
#
从投递到OC,你用了多久
#
8360次浏览
74人参与
#
你的秋招第一面感觉怎么样
#
146744次浏览
821人参与
#
有哪些公司在面试时考察AICoding?
#
3011次浏览
42人参与
#
什么人最适合大厂?
#
4214次浏览
39人参与
#
你觉得机械有必要实习吗
#
82142次浏览
515人参与
#
HR面都在聊什么?
#
2812次浏览
42人参与
#
AI时代还有必要刷leetcode吗?
#
1719次浏览
29人参与
#
哪一刻你突然觉得实习“有点值了”
#
6851次浏览
53人参与
#
kpi面有什么特征
#
106079次浏览
504人参与
#
硬件人的简历怎么写
#
341255次浏览
3120人参与
#
一人一道大厂面试题
#
133180次浏览
1331人参与
#
稳定和高薪机械人更看重哪个?
#
582440次浏览
5568人参与
#
总结:哪家公司最喜欢泡池子
#
171624次浏览
619人参与
#
四大天坑是哪四家?
#
113801次浏览
246人参与
#
计算机有哪些岗位值得去?
#
395201次浏览
2927人参与
#
哪些公司一直卡在简历筛选
#
109845次浏览
384人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务