前言

前面我们获取了歌曲的排行榜的数据,我们现在需要实现歌曲播放

前面我们写了一段函数来得到了回调的数据,现在我们需要使用这一段数据,来实现播放歌曲

完整代码

<!DOCTYPE html>
<html lang="zh-cn" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>QQ音乐API</title>
<link rel="icon" href="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1554453627219&di=fd6b1db82c1878273c5e889c5300c390&imgtype=0&src=http%3A%2F%2Fpic.90sjimg.com%2Fdesign%2F01%2F23%2F72%2F30%2F58fdf1c8cf2d3.png">
<link href="~/Content/Css/style.css" rel="stylesheet" /> </head>
<body> <div id="bg2"></div>
<div id="bg"></div> <div style="position: fixed; top: 0%; left: 50%; transform: translate(-50%); width: 100%;">
<h1>当前播放-</h1>
<div id="info"></div>
<div class="Centent_D">
<input id="SongText" type="text" placeholder="搜索歌曲" />
<input type="button" value="搜索并播放" onclick="SerchSongOrPlay()" />
<div style="max-height: 500px; overflow-y: auto">
<table cellspacing="0" id="table">
<thead>
<tr>
<td>歌名</td>
<td>歌手</td>
<td hidden>索引</td>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<canvas id='canvas' width="600" height="350"></canvas>
<audio src="" crossOrigin="anonymous" id="audio" loop controls></audio>
</div>
</div> <div id="audio_control">
<p id="SongTime"><span class="SongTime"></span><span class="PlaySongTime"></span></p>
<input type="button" value="BackSong" onclick="BackSong()" />
<input type="button" value="NextSong" onclick="NextSong()" />
<input type="button" value="切换播放模式" onclick="PlayMode(3)" />
<input id="SongSpeed" type="range" min="1" max="4" value="1" />
<p>遇到播放不了?可能你用的是谷歌浏览器,解决方法:地址栏输入:chrome://flags/#autoplay-policy回车,在Autoplay policy高亮这一行右边的按钮选择No user gesture is required,重启浏览器即可</p>
<div id="SongLyric">
<div id="qrc_ctn" class="qrc_ctn"> </div>
</div>
<p id="SongProgress"></p>
</div>
<script src="~/Content/Javascript/jquery.min.js"></script>
<script src="~/Content/Javascript/main.js"></script>
<script src="~/Content/Javascript/Vibrant.min.js"></script>
<script src="~/Content/Javascript/TimeToPack.js"></script>
<script> function SetTimeRutrunMS(AudioTime) {
var M, S, MS;
M = parseInt(AudioTime / 60);
S = (AudioTime % 60).toFixed(2);
M += '';
S += '';
M = (M.length == 1) ? '0' + M : M;
S = (S.length == 4) ? '0' + S : S;
return [M, S];
} function SetMSRutrunms(MS) {
if (MS != undefined) {
if (MS.search(/\d\d\D\d\d\D\d\d/) === 0) {
var AF = MS.match(/(.*)\:/);
var AM = MS.match(/\:(.*)\./);
var AHM = MS.match(/\.(.*)/);
var HBJS = AF[1] + "." + AM[1] + AHM[1]; return HBJS; } else {
return "格式不对";
}
} else {
return false;
}
} function SetMHMRutrunms(MH) {
if (MH != undefined || MH != 0 || MH != null) { var AA;
var CC = MH % 60 /100;
if (MH / 60 <= 1) {
AA = MH / 100;
} else {
AA = parseInt(MH / 60) + CC;
}
return AA;
} else {
return false;
}
} function VerifySongTime(num) {
if (num != undefined || num != "" || num != null) {
if (num.search(/\d\d\D\d\d\D\d\d/) == 0) {
return true;
} else {
return false;
}
} else {
return false;
}
} function AJBXC(ValueA,ValueB,Max) {
var XJJG = ValueA - ValueB;
if (XJJG < 0) {
XJJG -= XJJG * 2
}
if (XJJG <= Max){
return true;
}
return false;
}
</script>
<script>
var audio = $("#audio");
var songAttr = [];
var SonglrcAttr = [];
var songindex = 0;
var lycinner = 0;
var ToleranceInt = 1;
var time1, time2, time3;
var BackWeek = _.GetDayToWeek(_.GetOneYearToDay()); function MusicJsonCallbacktoplist(data) {
var TemporarySingerApp = "";
if (window.navigator.onLine) {
songAttr = data;
if (songAttr.songlist.length != 0) {
$("table tbody").empty();
$.each(songAttr.songlist,
function (e) {
TemporarySingerApp += "<tr><td>" + this.data.songname + "</td><td>";
$.each(songAttr.songlist[e].data.singer,
function (i) {
TemporarySingerApp += " " + songAttr.songlist[e].data.singer[i].name + " ";
if (i == (songAttr.songlist[e].data.singer.length - 1)) {
TemporarySingerApp += "</td><td hidden>" + e + "</td></tr>";
$("table tbody").append(TemporarySingerApp);
TemporarySingerApp = "";
} });
});
$("table tbody tr").on("dblclick",
function () {
if (!$(this).attr("disabled")) {
songindex = parseInt($(this).find("td").last()[0].innerHTML);
RecommendSongIPVkey(parseInt($(this).find("td").last()[0].innerHTML), 1);
RemoveLyricinfo();
}
});
RecommendSongIPVkey(0, 1);
} else {
console.log("找不到音乐");
}
} else {
console.log("你没有网络,请求了数据无法返回");
}
} function RecommendSongIPVkey(i, z) {
$("table tbody tr").css("background", "");
$("table tbody tr:nth-of-type(" + (i + 1) + ")").css("background", "rgba(204, 204, 204,0.3)");
if (songAttr.songlist[i].songid != 0) {
$.ajax({
type: "GET",
dataType: "jsonp",
url:
'https://u.y.qq.com/cgi-bin/musicu.fcg?data={"req":{"module":"CDN.SrfCdnDispatchServer","method":"GetCdnDispatch","param":{"guid":"000000000","calltype":0,"userip":""}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"000000000","songmid":["' +
songAttr.songlist[i].data.songmid +
'"],"songtype":[0],"uin":"0","loginflag":1,"platform":"20"}}}',
success: function (Vkeydata) {
if (window.navigator.onLine) {
songindex = i;
if (Vkeydata.req_0.data.midurlinfo[0].vkey != "") {
GetSong(Vkeydata); $.ajax({
type: "GET",
dataType: "json",
url: "/Index/GetMuiscLyric",
data: {
Url:"https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?-=MusicJsonCallback_lrc&pcachetime=" +Math.round(new Date()) +"&songmid=" +songAttr.songlist[i].data.songmid +"&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0",
Filename: songAttr.songlist[i].data.albummid + ".json"
},
success: function (data) {
var SongData = JSON.parse(data);
var SongLyric = decodeURIComponent(escape(window.atob(SongData.lyric)));
var SongLyricDOM = $("#SongLyric > div");
SongLyricDOM.children("p").remove();
SongLyric.trim().split('\n').forEach(function (v, i) { var LryTime = v.match(/\[(.*)\]/)[1];
var Lry = v.match(/\](.*)/)[1];
if (VerifySongTime(LryTime)) {
SonglrcAttr.push([SetMSRutrunms(LryTime), Lry]); SongLyricDOM.append("<p data-id=" + i + ">" + Lry + "</p>");
} else {
SonglrcAttr.push([Lry, LryTime]);
SongLyricDOM.append("<p data-id=" + i + ">" + LryTime + "</p>");
} });
}
}); if (songAttr.songlist[i].data.albummid != "") { $("#bg").css("background-image",
"url('https://y.gtimg.cn/music/photo_new/T002R300x300M000" +
songAttr.songlist[i].data.albummid +
".jpg?max_age=2592000')");
$.ajax({
type: "GET",
dataType: "json",
url: "/Index/GetMusicPic",
data: {
Url: "https://y.gtimg.cn/music/photo_new/T002R300x300M000" +
songAttr.songlist[i].data.albummid +
".jpg?max_age=2592000",
Filename: songAttr.songlist[i].data.albummid + ".jpg"
},
success: function (filename) {
if (filename != null) {
var img = document.createElement('img');
img.setAttribute('src', '../Content/MusicPic/' + filename); img.addEventListener('load',
function () {
var vibrant = new Vibrant(img);
var swatches = vibrant.swatches();
if (swatches.Vibrant != undefined) {
$("body").css("background-color",
"rgba(" +
swatches.Vibrant.rgb[0] +
"," +
swatches.Vibrant.rgb[1] +
"," +
swatches.Vibrant.rgb[2] +
",1)");
}
});
}
}
});
} else {
$("#bg").css("background-image", "url('../Content/MusicPic/NoMusicPic.jpg");
} $("h1").html("当前播放 - " + songAttr.songlist[i].data.songname);
} else {
NoCopyright(i, z);
}
} else {
console.log("你没有网络,接收不到返回的数据");
}
},
error: function (e) {
if (e.state == "404") {
RecommendSongIPVkey(i, z);
}
}
});
} else {
NoCopyright(i, z);
}
}
$.ajax({
type: "GET",
dataType: "jsonp",
url: 'https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?topid=26&platform=yqq.json&jsonpCallback=MusicJsonCallbacktoplist'
}); function callback(data) {
if (window.navigator.onLine) {
songAttr = data;
if (songAttr.data.song.list.length != 0) {
$("table tbody").empty();
$.each(songAttr.data.song.list,
function (e) {
$("table tbody").append("<tr><td>" +
this.songname +
"</td><td>" +
this.singer[0].name +
"</td><td hidden>" +
e +
"</td></tr>");
});
$("table tbody tr").on("dblclick",
function () {
if (!$(this).attr("disabled")) {
songindex = parseInt($(this).find("td").last()[0].innerHTML);
SongIPVkey(parseInt($(this).find("td").last()[0].innerHTML), 1);
RemoveLyricinfo();
}
});
SongIPVkey(0, 1);
} else {
console.log("找不到音乐");
}
} else {
console.log("你没有网络,请求了数据无法返回");
}
} function SongIPVkey(i, z) {
$("table tbody tr").css("background", "");
$("table tbody tr:nth-of-type(" + (i + 1) + ")").css("background", "rgba(204, 204, 204,0.3)");
if (songAttr.data.song.list[i].songid != 0) {
$.ajax({
type: "GET",
dataType: "jsonp",
url:
'https://u.y.qq.com/cgi-bin/musicu.fcg?data={"req":{"module":"CDN.SrfCdnDispatchServer","method":"GetCdnDispatch","param":{"guid":"000000000","calltype":0,"userip":""}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"000000000","songmid":["' +
songAttr.data.song.list[i].songmid +
'"],"songtype":[0],"uin":"0","loginflag":1,"platform":"20"}}}',
success: function (Vkeydata) {
if (window.navigator.onLine) {
songindex = i;
if (Vkeydata.req_0.data.midurlinfo[0].vkey != "") {
GetSong(Vkeydata);
GetSongLyric(i);
GetSongImg(i);
$("h1").html("当前播放 - " + songAttr.data.song.list[i].songname);
} else {
NoCopyright(i, z);
}
} else {
console.log("你没有网络,接收不到返回的数据");
}
},
error: function (e) {
if (e.state == "404") {
SongIPVkey(i, z);
}
}
});
} else {
NoCopyright(i, z);
}
} function GetSong(Songdata) {
audio[0].src = Songdata.req.data.freeflowsip[0] + Songdata.req_0.data.midurlinfo[0].purl;
audio.html("<source src=" + Songdata.req.data.freeflowsip[0] + Songdata.req_0.data.midurlinfo[0].purl + " />");
console.log(audio[0].networkState);
if (audio[0].networkState === 3) {
audio[0].muted = false;
audio[0].play();
PlayMode(3); }
} function GetSongLyric(i) {
$.ajax({
type: "GET",
dataType: "json",
url: "/Index/GetMuiscLyric",
data: {
Url: "https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?-=MusicJsonCallback_lrc&pcachetime=" +
Math.round(new Date()) +
"&songmid=" +
songAttr.data.song.list[i].songmid +
"&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0",
Filename: songAttr.data.song.list[i].albummid + ".json"
},
success: function (data) { var SongData = JSON.parse(data);
var SongLyric = decodeURIComponent(escape(window.atob(SongData.lyric)));
var SongLyricDOM = $("#SongLyric > div");
SongLyricDOM.children("p").remove();
SongLyric.trim().split('\n').forEach(function (v, i) { var LryTime = v.match(/\[(.*)\]/)[1];
var Lry = v.match(/\](.*)/)[1];
if (VerifySongTime(LryTime)) {
SonglrcAttr.push([SetMSRutrunms(LryTime), Lry]); SongLyricDOM.append("<p data-id=" + i + ">" + Lry + "</p>");
} else {
SonglrcAttr.push([Lry, LryTime]);
SongLyricDOM.append("<p data-id=" + i + ">" + LryTime + "</p>");
} }); }
});
} function GetSongImg(i) { if (i != null) {
if (songAttr.data.song.list[i].albummid !== "") { $("#bg").css("background-image",
"url('https://y.gtimg.cn/music/photo_new/T002R300x300M000" +
songAttr.data.song.list[i].albummid +
".jpg?max_age=2592000')");
$.ajax({
type: "GET",
dataType: "json",
url: "/Index/GetMusicPic",
data: {
Url: "https://y.gtimg.cn/music/photo_new/T002R300x300M000" +
songAttr.data.song.list[i].albummid +
".jpg?max_age=2592000",
Filename: songAttr.data.song.list[i].albummid + ".jpg"
},
success: function (filename) {
if (filename != null) {
var img = document.createElement('img');
img.setAttribute('src', '../Content/MusicPic/' + filename); img.addEventListener('load',
function () {
var vibrant = new Vibrant(img);
var swatches = vibrant.swatches();
if (swatches.Vibrant !== undefined) {
$("body").css("background-color",
"rgba(" +
swatches.Vibrant.rgb[0] +
"," +
swatches.Vibrant.rgb[1] +
"," +
swatches.Vibrant.rgb[2] +
",1)");
}
});
}
}
});
} else {
$("#bg").css("background-image", "url('../Content/MusicPic/NoMusicPic.jpg");
}
}
} function SerchSongOrPlay() {
var SongText = $("#SongText");
if (window.navigator.onLine) {
if (SongText.val().trim() !== "") {
$.ajax({
type: "GET",
dataType: 'jsonp',
url: "https://c.y.qq.com/soso/fcgi-bin/client_search_cp?aggr=1&cr=1&flag_qc=0&p=1&n=10&w=" +
SongText.val().trim() +
""
});
SongText.val("");
} else {
alert("请输入要搜索的歌曲");
return;
}
} else {
alert("你没有网络,数据没发送出去");
} } function NoCopyright(i, z) {
if (z === 1) {
$("h1").html("你搜索的歌没有播放版权!已帮你自动切换下一首");
$("table tbody tr:nth-of-type(" + (i + 1) + ")").css("color", "#aaa");
$("table tbody tr:nth-of-type(" + (i + 1) + ")").attr("disabled", true);
NextSong();
} else {
$("h1").html("你搜索的歌没有播放版权!已帮你自动切换上一首");
$("table tbody tr:nth-of-type(" + (i + 1) + ")").css("color", "#aaa");
$("table tbody tr:nth-of-type(" + (i + 1) + ")").attr("disabled", true);
BackSong();
} } function BackSong() {
RemoveLyricinfo();
if (songAttr.data != undefined) {
if (songindex > 0) {
songindex -= 1;
SongIPVkey(songindex, 0);
} else {
songindex = songAttr.data.song.list.length;
SongIPVkey((songindex - 1), 0);
}
} else {
if (songindex > 0) {
songindex -= 1;
RecommendSongIPVkey(songindex, 0);
} else {
songindex = songAttr.songlist.length;
RecommendSongIPVkey((songindex - 1), 0);
}
}
} function NextSong() {
RemoveLyricinfo(); if (songAttr.data != undefined) {
if ((songindex + 1) < songAttr.data.song.list.length) {
songindex += 1;
SongIPVkey(songindex, 1);
} else {
songindex = 0;
SongIPVkey(songindex, 1);
}
} else {
if ((songindex + 1) < songAttr.songlist.length) {
songindex += 1;
RecommendSongIPVkey(songindex, 1);
} else {
songindex = 0;
RecommendSongIPVkey(songindex, 1);
}
} } function RemoveLyricinfo() {
$("#SongLyric div p").remove();
SonglrcAttr = [];
lycinner = 0;
$("#SongLyric div").css("transform", "translateY(" + lycinner + "px)");
} function PlayMode(i) {
//1:单曲循环 2:列表播放 3:列表循环 4:随机播放
clearInterval(time1);
clearInterval(time2);
clearInterval(time3);
audio[0].loop = false;
if (i === 1) {
audio[0].loop = true;
console.log("当前模式-单曲循环");
} else if (i === 2) {
audio[0].loop = false;
time1 = setInterval(LBPlayItime1, 500);
console.log("当前模式-列表播放");
} else if (i === 3) {
time2 = setInterval(LBPlayItime2, 500);
console.log("当前模式-列表循环");
} else if (i === 4) {
time3 = setInterval(LBPlayItime3, 500);
console.log("当前模式-随机播放");
}
} function LBPlayItime1() {
if (songAttr.data != undefined) {
if (audio[0].ended) {
if ((songindex + 1) < songAttr.data.song.list.length) {
NextSong();
} else {
audio[0].pause();
}
}
} else {
if (audio[0].ended) {
if ((songindex + 1) < songAttr.songlist.length) {
NextSong();
} else {
audio[0].pause();
}
}
} } function LBPlayItime2() {
if (songAttr.data != undefined) {
if (audio[0].ended) {
if ((songindex + 1) < songAttr.data.song.list.length) {
NextSong();
} else {
songindex = 0;
SongIPVkey(songindex, 1);
}
}
} else {
if (audio[0].ended) {
if ((songindex + 1) < songAttr.songlist.length) {
NextSong();
} else {
songindex = 0;
RecommendSongIPVkey(songindex, 1);
}
}
} } function LBPlayItime3() {
if (songAttr.data != undefined) {
if (audio[0].ended) {
songindex = parseInt(Math.random(0, songAttr.data.song.list.length) *
(songAttr.data.song.list.length - 0));
SongIPVkey(songindex, 1);
}
} else {
if (audio[0].ended) {
songindex = parseInt(Math.random(0, songAttr.songlist.length) * (songAttr.songlist.length - 0));
RecommendSongIPVkey(songindex, 1);
}
}
} setInterval(function () {
if (audio[0].readyState === 4) {
$("#SongTime > .SongTime").html("SongTime:" +
SetTimeRutrunMS(audio[0].duration)[0] +
":" +
SetTimeRutrunMS(audio[0].duration)[1]);
$("#SongTime > .PlaySongTime").html("PlaySongTime:" +
SetTimeRutrunMS(audio[0].currentTime)[0] +
":" +
SetTimeRutrunMS(audio[0].currentTime)[1]);
$("#SongProgress").css("width", (audio[0].currentTime / (audio[0].duration / 100)) + "%"); }
},
30); setInterval(function () { var SongLyricp = $('#SongLyric > div > p');
if (!audio[0].paused) {
if (lycinner < SonglrcAttr.length - 1) {
} else {
lycinner += 1;
$("#SongLyric div").css("transform", "translateY(" + (-SongLyricp.height() * lycinner) + "px)");
}
} $("#SongSpeed").change(function () {
audio[0].playbackRate = $(this).val();
});
},
500);
</script>
</body>
</html>

后言

最后就能实现播放了

如果觉得本技术文章对你有帮助请给我点个赞,如果有什么不足的地方,给我提意见,让我加以改进

使用浏览器抓取QQ音乐接口(歌曲篇)的更多相关文章

  1. 使用浏览器抓取QQ音乐接口(排行榜篇)

    前言 最近手头比较空闲,再加上看到其他人的博客都差不多有个类似的播放控件,手就会闲不下来,说干就干,所以我们开始吧! 来到QQ音乐的官网,我们就直奔着目标去,寻找排行榜 我们主要用的是最近比较热的歌, ...

  2. 手把手教你使用Python抓取QQ音乐数据(第二弹)

    [一.项目目标] 通过Python爬取QQ音乐数据(一)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 此次我们在之前的基础上获取QQ音乐指定歌曲的歌词及前15个精 ...

  3. 抓取百度音乐频道歌曲url

    参考了 http://blog.csdn.net/banguijun/article/details/11815263 后写了一个抓取fm音乐url的模块,得到所有频道歌曲的url.缺点是百度会变更u ...

  4. 手把手教你使用Python抓取QQ音乐数据(第一弹)

    [一.项目目标] 获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 由浅入深,层层递进,非常适合刚入门的同学练手. [二.需要的库] 主要涉及的库有:requests.json ...

  5. Python爬虫实战一之爬取QQ音乐

    一.前言   前段时间尝试爬取了网易云音乐的歌曲,这次打算爬取QQ音乐的歌曲信息.网易云音乐歌曲列表是通过iframe展示的,可以借助Selenium获取到iframe的页面元素, 而QQ音乐采用的是 ...

  6. 抓取QQ音乐歌单

    抓取QQ音乐歌单1.通过分析歌曲下载路径来分析所需参数: 通过比较, 得出其中歌曲下载url与参数vkey是可变的,歌曲下载url中可变得值是请求歌单返回的歌曲数据的strMediaMid参数, 而v ...

  7. python3 爬取qq音乐作者所有单曲 并且下载歌曲

    1 import requests import re import json import os # 便于存放作者的姓名 zuozhe = [] headers = {'User-Agent': ' ...

  8. 通过Scrapy抓取QQ空间

    毕业设计题目就是用Scrapy抓取QQ空间的数据,最近毕业设计弄完了,来总结以下: 首先是模拟登录的问题: 由于Tencent对模拟登录比较讨厌,各个防备,而本人能力有限,所以做的最简单的,手动登录后 ...

  9. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

随机推荐

  1. 登录、认证、token处理、前台cookie存储token

    免费课程相关表设计 models的设计 from django.contrib.contenttypes.fields import GenericRelation class Course(mode ...

  2. 腾讯云ClickHouse如何实现自动化的数据均衡?

    ​一.引言 ClickHouse 是一个用于联机分析( OLAP )的列式数据库管理系统( DBMS ).它于 2016 年以 Apache 2.0 协议开源,以优秀的查询性能,深受广大大数据工程师欢 ...

  3. dubbo学习(五)注册中心zookeeper

    初识zookeeper 下载地址:https://archive.apache.org/dist/zookeeper/ 详细的ZooKeeper教程戳这里~ PS: 建议目前选择3.4的稳定版本进行使 ...

  4. JSTL1.1函数标签库(functions)

    JSTL1.1函数标签库(functions) 在jstl中的fn标签也是我们在网页设计中经常要用到的很关键的标签,在使用的时候要先加上头 <%@ taglib uri="http:/ ...

  5. xxe漏洞,及xml

    xxe漏洞 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声明.DTD文档类型定义(可选).文 ...

  6. Docker:四、Docker进阶 Windows Docker IIS 部署

    前面的三篇docker 文档大家看的肯定不过瘾,自己可能也已经上手一试了...不知道有没有发现问题... 哈哈... 我来说说我遇到的问题哦 一.windows docker 镜像越来越大 默认的do ...

  7. spark 笔记2

    一.Spark Shuffle 的发展 Spark 0.8及以前 Hash Based Shuffle Spark 0.8.1 为Hash Based Shuffle引入File Consolidat ...

  8. Java泛型中的类型参数和通配符类型

    类型参数 泛型有三种实现方式,分别是泛型接口.泛型类.泛型方法,下面通过泛型方法来介绍什么是类型参数. 泛型方法声明方式:访问修饰符 <T,K,S...> 返回类型 方法名(方法参数){方 ...

  9. CTFshow_Web入门源码

    Web1 题目打开始是这样的 直接看源码 Web2 题目打开是这样的,右键无法打开菜单,无法查看源码,F12也不可以 更改JavaScript权限,即可查看源码 Web3 真就抓个包看看 Web4 访 ...

  10. c中_tmain()和main()区别

    来源参考:https://www.cnblogs.com/lucyjiayou/archive/2011/05/07/2039621.html tchar.h>可以找到,如#define _tm ...