某狗网翻译接口逆向之webpack扣取

​​​​​逆向网址
aHR0cHM6Ly9mYW55aS5zb2dvdS5jb20=

逆向链接
aHR0cHM6Ly9mYW55aS5zb2dvdS5jb20vdGV4dA==

 逆向接口
aHR0cHM6Ly9mYW55aS5zb2dvdS5jb20vYXBpL3RyYW5zcGMvdGV4dC9yZXN1bHQ=

逆向过程
请求方式:POST
参数构成:

        【s】  1b921dbefaa8d939afca4068480f850d

       【uuid】 1b077a29-1784-4883-9199-864e5e75e73e

根据断点可快速进入发包内容

        XHR 方断点方式进入【app.54dc9d73.js】

I数据组为HTTP请求发包内容。

那么由此可以得到我们想到的参数:【uuid】 => T,【s】 => D

 

T = x.uuid || Y.a.get(),
C = x.secretCode || "",
D = V.a.cal("".concat(p).concat(m).concat(l).concat(C)),

扣取代码
webpack

拉到文件最顶部可知是 WebPack 方式

构建加载器

加载器关键词

t[e].call(n.exports, n, n.exports, c),

上图断点断住后,控制台处输出【V.a.cal】 点击底部输出结果可直接跳转至函数定义处

向上找函数 【r】 处打断点进入加载器模块

!function(t) {function e(e) {for (var r, o, c = e[0], u = e[1], s = e[2], d = 0, l = []; d < c.length; d++)o = c[d],Object.prototype.hasOwnProperty.call(a, o) && a[o] && l.push(a[o][0]),a[o] = 0;for (r in u)Object.prototype.hasOwnProperty.call(u, r) && (t[r] = u[r]);for (f && f(e); l.length; )l.shift()();return i.push.apply(i, s || []),n()}function n() {for (var t, e = 0; e < i.length; e++) {for (var n = i[e], r = !0, o = 1; o < n.length; o++) {var u = n[o];0 !== a[u] && (r = !1)}r && (i.splice(e--, 1),t = c(c.s = n[0]))}return t}var r = {}, o = {"2": 0}, a = {"2": 0}, i = [];function c(e) {if (r[e])return r[e].exports;var n = r[e] = {"i": e,"l": !1,"exports": {}};return t[e].call(n.exports, n, n.exports, c),n.l = !0,n.exports}c.e = function(t) {var e = [];o[t] ? e.push(o[t]) : 0 !== o[t] && {"0": 1,"3": 1,"5": 1,"6": 1,"8": 1,"9": 1,"10": 1,"12": 1,"13": 1,"14": 1,"16": 1,"17": 1}[t] && e.push(o[t] = new Promise((function(e, n) {for (var r = "pc/static/css/" + t + "." + {"0": "3382dd17","1": "31d6cfe0","3": "e674dfb6","4": "31d6cfe0","5": "8106975a","6": "84b33b37","7": "31d6cfe0","8": "c1092e98","9": "29fc9c62","10": "b2b74c09","12": "7a0342b5","13": "8956a5e0","14": "0e433876","15": "31d6cfe0","16": "9d6461c8","17": "a9dcb4cf"}[t] + ".css", a = c.p + r, i = document.getElementsByTagName("link"), u = 0; u < i.length; u++) {var s = (f = i[u]).getAttribute("data-href") || f.getAttribute("href");if ("stylesheet" === f.rel && (s === r || s === a))return e()}var d = document.getElementsByTagName("style");for (u = 0; u < d.length; u++) {var f;if ((s = (f = d[u]).getAttribute("data-href")) === r || s === a)return e()}var l = document.createElement("link");l.rel = "stylesheet",l.type = "text/css",l.onload = e,l.onerror = function(e) {var r = e && e.target && e.target.src || a, i = new Error("Loading CSS chunk " + t + " failed.\n(" + r + ")");i.request = r,delete o[t],l.parentNode.removeChild(l),n(i)},l.href = a,0 !== l.href.indexOf(window.location.origin + "/") && (l.crossOrigin = "anonymous"),document.getElementsByTagName("head")[0].appendChild(l)})).then((function() {o[t] = 0})));var n = a[t];if (0 !== n)if (n)e.push(n[2]);else {var r = new Promise((function(e, r) {n = a[t] = [e, r]}));e.push(n[2] = r);var i, u = document.createElement("script");u.charset = "utf-8",u.timeout = 120,c.nc && u.setAttribute("nonce", c.nc),u.src = function(t) {return c.p + "pc/static/js/" + ({"0": "common","3": "docpreview","4": "document","5": "favorite","6": "home","7": "picture","8": "privacyPC","9": "tencentDocPreview","10": "text","12": "wapDocPreview","13": "website","14": "writing"}[t] || t) + "." + {"0": "ae225113","1": "89746696","3": "a33f9731","4": "cc2950ec","5": "04bbcfe8","6": "0cdb454f","7": "d6c066b4","8": "77130bfc","9": "2129d1a7","10": "40f90d84","12": "317c78cb","13": "61ef5ce0","14": "1562e6de","15": "21ad6f3f","16": "928f55ad","17": "ceaacc2c"}[t] + ".js"}(t),0 !== u.src.indexOf(window.location.origin + "/") && (u.crossOrigin = "anonymous");var s = new Error;i = function(e) {u.onerror = u.onload = null,clearTimeout(d);var n = a[t];if (0 !== n) {if (n) {var r = e && ("load" === e.type ? "missing" : e.type), o = e && e.target && e.target.src;s.message = "Loading chunk " + t + " failed.\n(" + r + ": " + o + ")",s.name = "ChunkLoadError",s.type = r,s.request = o,n[1](s)}a[t] = void 0}};var d = setTimeout((function() {i({"type": "timeout","target": u})}), 12e4);u.onerror = u.onload = i,document.head.appendChild(u)}return Promise.all(e)},c.m = t,c.c = r,c.d = function(t, e, n) {c.o(t, e) || Object.defineProperty(t, e, {"enumerable": !0,"get": n})},c.r = function(t) {"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {"value": "Module"}),Object.defineProperty(t, "__esModule", {"value": !0})},c.t = function(t, e) {if (1 & e && (t = c(t)),8 & e)return t;if (4 & e && "object" == typeof t && t && t.__esModule)return t;var n = Object.create(null);if (c.r(n),Object.defineProperty(n, "default", {"enumerable": !0,"value": t}),2 & e && "string" != typeof t)for (var r in t)c.d(n, r, function(e) {return t[e]}.bind(null, r));return n},c.n = function(t) {var e = t && t.__esModule ? function() {return t.default}: function() {return t};return c.d(e, "a", e),e},c.o = function(t, e) {return Object.prototype.hasOwnProperty.call(t, e)},c.p = "//search.sogoucdn.com/translate/",c.oe = function(t) {throw t};var u = window.webpackJsonp = window.webpackJsonp || [], s = u.push.bind(u);u.push = e,u = u.slice();for (var d = 0; d < u.length; d++)e(u[d]);var f = s;i.push([358, 11]),n()
}()

重新构建将加载器函数导出即可使用

那么到这里基本就结束了。
只需将上面webpack适配下 即可实现扣代码模块

var _util;
!function(t) {function e(e) {for (var r, o, c = e[0], u = e[1], s = e[2], d = 0, l = []; d < c.length; d++)o = c[d],Object.prototype.hasOwnProperty.call(a, o) && a[o] && l.push(a[o][0]),a[o] = 0;for (r in u)Object.prototype.hasOwnProperty.call(u, r) && (t[r] = u[r]);for (f && f(e); l.length; )l.shift()();return i.push.apply(i, s || []),n()}function n() {for (var t, e = 0; e < i.length; e++) {for (var n = i[e], r = !0, o = 1; o < n.length; o++) {var u = n[o];0 !== a[u] && (r = !1)}r && (i.splice(e--, 1),t = c(c.s = n[0]))}return t}var r = {}, o = {"2": 0}, a = {"2": 0}, i = [];function c(e) {if (r[e])return r[e].exports;var n = r[e] = {"i": e,"l": !1,"exports": {}};return t[e].call(n.exports, n, n.exports, c),n.l = !0,n.exports}c.e = function(t) {var e = [];o[t] ? e.push(o[t]) : 0 !== o[t] && {"0": 1,"3": 1,"5": 1,"6": 1,"8": 1,"9": 1,"10": 1,"12": 1,"13": 1,"14": 1,"16": 1,"17": 1}[t] && e.push(o[t] = new Promise((function(e, n) {for (var r = "pc/static/css/" + t + "." + {"0": "3382dd17","1": "31d6cfe0","3": "e674dfb6","4": "31d6cfe0","5": "8106975a","6": "84b33b37","7": "31d6cfe0","8": "c1092e98","9": "29fc9c62","10": "b2b74c09","12": "7a0342b5","13": "8956a5e0","14": "0e433876","15": "31d6cfe0","16": "9d6461c8","17": "a9dcb4cf"}[t] + ".css", a = c.p + r, i = document.getElementsByTagName("link"), u = 0; u < i.length; u++) {var s = (f = i[u]).getAttribute("data-href") || f.getAttribute("href");if ("stylesheet" === f.rel && (s === r || s === a))return e()}var d = document.getElementsByTagName("style");for (u = 0; u < d.length; u++) {var f;if ((s = (f = d[u]).getAttribute("data-href")) === r || s === a)return e()}var l = document.createElement("link");l.rel = "stylesheet",l.type = "text/css",l.onload = e,l.onerror = function(e) {var r = e && e.target && e.target.src || a, i = new Error("Loading CSS chunk " + t + " failed.\n(" + r + ")");i.request = r,delete o[t],l.parentNode.removeChild(l),n(i)},l.href = a,0 !== l.href.indexOf(window.location.origin + "/") && (l.crossOrigin = "anonymous"),document.getElementsByTagName("head")[0].appendChild(l)})).then((function() {o[t] = 0})));var n = a[t];if (0 !== n)if (n)e.push(n[2]);else {var r = new Promise((function(e, r) {n = a[t] = [e, r]}));e.push(n[2] = r);var i, u = document.createElement("script");u.charset = "utf-8",u.timeout = 120,c.nc && u.setAttribute("nonce", c.nc),u.src = function(t) {return c.p + "pc/static/js/" + ({"0": "common","3": "docpreview","4": "document","5": "favorite","6": "home","7": "picture","8": "privacyPC","9": "tencentDocPreview","10": "text","12": "wapDocPreview","13": "website","14": "writing"}[t] || t) + "." + {"0": "ae225113","1": "89746696","3": "a33f9731","4": "cc2950ec","5": "04bbcfe8","6": "0cdb454f","7": "d6c066b4","8": "77130bfc","9": "2129d1a7","10": "40f90d84","12": "317c78cb","13": "61ef5ce0","14": "1562e6de","15": "21ad6f3f","16": "928f55ad","17": "ceaacc2c"}[t] + ".js"}(t),0 !== u.src.indexOf(window.location.origin + "/") && (u.crossOrigin = "anonymous");var s = new Error;i = function(e) {u.onerror = u.onload = null,clearTimeout(d);var n = a[t];if (0 !== n) {if (n) {var r = e && ("load" === e.type ? "missing" : e.type), o = e && e.target && e.target.src;s.message = "Loading chunk " + t + " failed.\n(" + r + ": " + o + ")",s.name = "ChunkLoadError",s.type = r,s.request = o,n[1](s)}a[t] = void 0}};var d = setTimeout((function() {i({"type": "timeout","target": u})}), 12e4);u.onerror = u.onload = i,document.head.appendChild(u)}return Promise.all(e)},c.m = t,c.c = r,c.d = function(t, e, n) {c.o(t, e) || Object.defineProperty(t, e, {"enumerable": !0,"get": n})},c.r = function(t) {"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {"value": "Module"}),Object.defineProperty(t, "__esModule", {"value": !0})},c.t = function(t, e) {if (1 & e && (t = c(t)),8 & e)return t;if (4 & e && "object" == typeof t && t && t.__esModule)return t;var n = Object.create(null);if (c.r(n),Object.defineProperty(n, "default", {"enumerable": !0,"value": t}),2 & e && "string" != typeof t)for (var r in t)c.d(n, r, function(e) {return t[e]}.bind(null, r));return n},c.n = function(t) {var e = t && t.__esModule ? function() {return t.default}: function() {return t};return c.d(e, "a", e),e},c.o = function(t, e) {return Object.prototype.hasOwnProperty.call(t, e)},c.p = "//search.sogoucdn.com/translate/",c.oe = function(t) {throw t};var u = window.webpackJsonp = window.webpackJsonp || [], s = u.push.bind(u);u.push = e,u = u.slice();for (var d = 0; d < u.length; d++)e(u[d]);var f = s;i.push([358, 11]),_util = c;
}([function(t, n, r) {var e;e = ()=>({"cond"() {const t = _util(2), {"utf8": n} = _util(1), e = _util(3), {"bin": o} = _util(1);return {"crypt": t,"utf8": n,"isBuffer": e,"bin": o}},"md5"(t, n) {t.constructor == String ? t = n && "binary" === n.encoding ? this.cond().bin.stringToBytes(t) : this.cond().utf8.stringToBytes(t) : this.cond().isBuffer(t) ? t = Array.prototype.slice.call(t, 0) : Array.isArray(t) || (t = t.toString());const r = this.cond().crypt.bytesToWords(t), e = 8 * t.length;let o = 1732584193, i = -271733879, u = -1732584194, a = 271733878;for (var c = 0; c < r.length; c++)r[c] = 16711935 & (r[c] << 8 | r[c] >>> 24) | 4278255360 & (r[c] << 24 | r[c] >>> 8);r[e >>> 5] |= 128 << e % 32,r[14 + (e + 64 >>> 9 << 4)] = e;const f = this._ff, s = this._gg, l = this._hh, h = this._ii;for (c = 0; c < r.length; c += 16) {const t = o, n = i, e = u, p = a;o = f(o, i, u, a, r[c + 0], 7, -680876936),a = f(a, o, i, u, r[c + 1], 12, -389564586),u = f(u, a, o, i, r[c + 2], 17, 606105819),i = f(i, u, a, o, r[c + 3], 22, -1044525330),o = f(o, i, u, a, r[c + 4], 7, -176418897),a = f(a, o, i, u, r[c + 5], 12, 1200080426),u = f(u, a, o, i, r[c + 6], 17, -1473231341),i = f(i, u, a, o, r[c + 7], 22, -45705983),o = f(o, i, u, a, r[c + 8], 7, 1770035416),a = f(a, o, i, u, r[c + 9], 12, -1958414417),u = f(u, a, o, i, r[c + 10], 17, -42063),i = f(i, u, a, o, r[c + 11], 22, -1990404162),o = f(o, i, u, a, r[c + 12], 7, 1804603682),a = f(a, o, i, u, r[c + 13], 12, -40341101),u = f(u, a, o, i, r[c + 14], 17, -1502002290),i = f(i, u, a, o, r[c + 15], 22, 1236535329),o = s(o, i, u, a, r[c + 1], 5, -165796510),a = s(a, o, i, u, r[c + 6], 9, -1069501632),u = s(u, a, o, i, r[c + 11], 14, 643717713),i = s(i, u, a, o, r[c + 0], 20, -373897302),o = s(o, i, u, a, r[c + 5], 5, -701558691),a = s(a, o, i, u, r[c + 10], 9, 38016083),u = s(u, a, o, i, r[c + 15], 14, -660478335),i = s(i, u, a, o, r[c + 4], 20, -405537848),o = s(o, i, u, a, r[c + 9], 5, 568446438),a = s(a, o, i, u, r[c + 14], 9, -1019803690),u = s(u, a, o, i, r[c + 3], 14, -187363961),i = s(i, u, a, o, r[c + 8], 20, 1163531501),o = s(o, i, u, a, r[c + 13], 5, -1444681467),a = s(a, o, i, u, r[c + 2], 9, -51403784),u = s(u, a, o, i, r[c + 7], 14, 1735328473),i = s(i, u, a, o, r[c + 12], 20, -1926607734),o = l(o, i, u, a, r[c + 5], 4, -378558),a = l(a, o, i, u, r[c + 8], 11, -2022574463),u = l(u, a, o, i, r[c + 11], 16, 1839030562),i = l(i, u, a, o, r[c + 14], 23, -35309556),o = l(o, i, u, a, r[c + 1], 4, -1530992060),a = l(a, o, i, u, r[c + 4], 11, 1272893353),u = l(u, a, o, i, r[c + 7], 16, -155497632),i = l(i, u, a, o, r[c + 10], 23, -1094730640),o = l(o, i, u, a, r[c + 13], 4, 681279174),a = l(a, o, i, u, r[c + 0], 11, -358537222),u = l(u, a, o, i, r[c + 3], 16, -722521979),i = l(i, u, a, o, r[c + 6], 23, 76029189),o = l(o, i, u, a, r[c + 9], 4, -640364487),a = l(a, o, i, u, r[c + 12], 11, -421815835),u = l(u, a, o, i, r[c + 15], 16, 530742520),i = l(i, u, a, o, r[c + 2], 23, -995338651),o = h(o, i, u, a, r[c + 0], 6, -198630844),a = h(a, o, i, u, r[c + 7], 10, 1126891415),u = h(u, a, o, i, r[c + 14], 15, -1416354905),i = h(i, u, a, o, r[c + 5], 21, -57434055),o = h(o, i, u, a, r[c + 12], 6, 1700485571),a = h(a, o, i, u, r[c + 3], 10, -1894986606),u = h(u, a, o, i, r[c + 10], 15, -1051523),i = h(i, u, a, o, r[c + 1], 21, -2054922799),o = h(o, i, u, a, r[c + 8], 6, 1873313359),a = h(a, o, i, u, r[c + 15], 10, -30611744),u = h(u, a, o, i, r[c + 6], 15, -1560198380),i = h(i, u, a, o, r[c + 13], 21, 1309151649),o = h(o, i, u, a, r[c + 4], 6, -145523070),a = h(a, o, i, u, r[c + 11], 10, -1120210379),u = h(u, a, o, i, r[c + 2], 15, 718787259),i = h(i, u, a, o, r[c + 9], 21, -343485551),o = o + t >>> 0,i = i + n >>> 0,u = u + e >>> 0,a = a + p >>> 0}return this.cond().crypt.endian([o, i, u, a])},"_ff"(t, n, r, e, o, i, u) {const a = t + (n & r | ~n & e) + (o >>> 0) + u;return (a << i | a >>> 32 - i) + n},"_gg"(t, n, r, e, o, i, u) {const a = t + (n & e | r & ~e) + (o >>> 0) + u;return (a << i | a >>> 32 - i) + n},"_hh"(t, n, r, e, o, i, u) {const a = t + (n ^ r ^ e) + (o >>> 0) + u;return (a << i | a >>> 32 - i) + n},"_ii"(t, n, r, e, o, i, u) {const a = t + (r ^ (n | ~e)) + (o >>> 0) + u;return (a << i | a >>> 32 - i) + n},"_blocksize": 16,"_digestsize": 16,"cal"(t, n) {if (null == t)throw new Error(`Illegal argument ${t}`);const r = this.cond().crypt.wordsToBytes(this.md5(t, n));return n && n.asBytes ? r : n && n.asString ? this.cond().bin.bytesToString(r) : this.cond().crypt.bytesToHex(r)}}),t.exports = e()},function(t, n) {var r = {"utf8": {"stringToBytes": t=>r.bin.stringToBytes(unescape(encodeURIComponent(t))),"bytesToString": t=>decodeURIComponent(escape(r.bin.bytesToString(t)))},"bin": {"stringToBytes"(t) {for (var n = [], r = 0; r < t.length; r++)n.push(255 & t.charCodeAt(r));return n},"bytesToString"(t) {for (var n = [], r = 0; r < t.length; r++)n.push(String.fromCharCode(t[r]));return n.join("")}}};t.exports = r
},function(t, n) {!function() {const n = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var r = {"rotl": (t,n)=>t << n | t >>> 32 - n,"rotr": (t,n)=>t << 32 - n | t >>> n,"endian"(t) {if (t.constructor == Number)return 16711935 & r.rotl(t, 8) | 4278255360 & r.rotl(t, 24);for (let n = 0; n < t.length; n++)t[n] = r.endian(t[n]);return t},"randomBytes"(t) {for (var n = []; t > 0; t--)n.push(Math.floor(256 * Math.random()));return n},"bytesToWords"(t) {for (var n = [], r = 0, e = 0; r < t.length; r++,e += 8)n[e >>> 5] |= t[r] << 24 - e % 32;return n},"wordsToBytes"(t) {for (var n = [], r = 0; r < 32 * t.length; r += 8)n.push(t[r >>> 5] >>> 24 - r % 32 & 255);return n},"bytesToHex"(t) {for (var n = [], r = 0; r < t.length; r++)n.push((t[r] >>> 4).toString(16)),n.push((15 & t[r]).toString(16));return n.join("")},"hexToBytes"(t) {for (var n = [], r = 0; r < t.length; r += 2)n.push(parseInt(t.substr(r, 2), 16));return n},"bytesToBase64"(t) {for (var r = [], e = 0; e < t.length; e += 3) {const o = t[e] << 16 | t[e + 1] << 8 | t[e + 2];for (let i = 0; i < 4; i++)8 * e + 6 * i <= 8 * t.length ? r.push(n.charAt(o >>> 6 * (3 - i) & 63)) : r.push("=")}return r.join("")},"base64ToBytes"(t) {t = t.replace(/[^A-Z0-9+\/]/gi, "");for (var r = [], e = 0, o = 0; e < t.length; o = ++e % 4)0 != o && r.push((n.indexOf(t.charAt(e - 1)) & Math.pow(2, -2 * o + 8) - 1) << 2 * o | n.indexOf(t.charAt(e)) >>> 6 - 2 * o);return r}};t.exports = r}()
},function(t, n) {function r(t) {return !!t.constructor && "function" == typeof t.constructor.isBuffer && t.constructor.isBuffer(t)}/* !* Determine if an object is a Buffer** @author   Feross Aboukhadijeh <https://feross.org>* @license  MIT*/t.exports = function(t) {return null != t && (r(t) || function(t) {return "function" == typeof t.readFloatLE && "function" == typeof t.slice && r(t.slice(0, 0))}(t) || !!t._isBuffer)}
},function(t, n, r) {t.exports = {"get"() {let t, n, r = "";for (t = 0; t < 32; t++) {n = 16 * Math.random() | 0,8 !== t && 12 !== t && 16 !== t && 20 !== t || (r += "-");const e = 3 & n, o = 16 === t ? 8 | e : n;r += (12 === t ? 4 : o).toString(16)}return r}}
}
]);
使用示例
加密:【MD5】 --- s 值

UUID

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024-3-13,14(CSS)

1.复合选择器 有两个或者多个基础选择器&#xff0c;通过不同的方式组合而成。 目的是更加准确高效的选择目标元素&#xff08;标签&#xff09; 分类&#xff1a; 后代选择器&#xff1a;选中某个元素的所有后代元素 写法&#xff1a;父选择器 子选择器 {CSS属性}&#x…

Java代码审计安全篇-XXE(XML外部实体注入)漏洞

前言&#xff1a; 堕落了三个月&#xff0c;现在因为被找实习而困扰&#xff0c;着实自己能力不足&#xff0c;从今天开始 每天沉淀一点点 &#xff0c;准备秋招 加油 注意&#xff1a; 本文章参考qax的网络安全java代码审计&#xff0c;记录自己的学习过程&#xff0c;还希望各…

Spring Bean的生命周期流程

前言 Java 中的公共类称之为Java Bean&#xff0c;而 Spring 中的 Bean 指的是将对象的生命周期&#xff0c;交给Spring IoC 容器来管理的对象。所以 Spring 中的 Bean 对象在使用时&#xff0c;无需通过 new 来创建对象&#xff0c;只需要通过 DI&#xff08;依赖注入&#x…

【Java设计模式】二十一、访问者模式

文章目录 1、访问者模式2、案例&#xff1a;宠物喂食3、总结 1、访问者模式 封装一些作用于某种容器中各个元素的操作。相关角色&#xff1a; 抽象访问者&#xff1a;定义了对每一类元素访问的行为。方法个数等于具体元素类的个数&#xff0c;方法形参是可访问的元素。具体访…

固态硬盘有缓存和没缓存有什么区别

固态硬盘&#xff08;SSD&#xff09;已经成为现代计算机的重要组成部分&#xff0c;它们提供了比传统机械硬盘更快的读写速度&#xff0c;从而显著提升了操作系统的运行速度和应用程序的加载效率。 其中&#xff0c;缓存&#xff08;Cache&#xff09;是固态硬盘中一个重要的…

留学生课设|R语言|研究方法课设

目录 INSTRUCTIONS Question 1. Understanding Quantitative Research Question 2. Inputting data into Jamovi and creating variables (using the dataset) Question 3. Outliers Question 4. Tests for mean difference Question 5. Correlation Analysis INSTRUCTIO…

idea如何使用,从激活开始

idea到期后激活使用 如何使用 点击阅读 idea分享

边缘计算与物联网的核心 —— 低功耗芯片

一、低功耗芯片 在边缘计算与物联网&#xff08;IoT&#xff09;中&#xff0c;低功耗芯片扮演了至关重要的角色&#xff0c;主要体现在以下几个方面&#xff1a; 延长设备寿命&#xff1a;物联网设备通常需要部署在难以更换电池或不方便进行频繁维护的环境中&#xff0c;比如…

【FPGA】DDR3学习笔记(二)丨从SDRAM到DDR3的IP核设计

本篇文章包含的内容 一、DDR SDRAM1.1 基本概述1.2 工作时序&#xff08;以读取为例&#xff09; 二、DDR2 SDRAM2.1 基本概述2.2 工作时序 三、DDR3 SDRAM3.1 基本概述3.2 硬件设计3.3 读写时序3.4 MIG IP核设计3.5 读写代码设计 开发板&#xff1a;正点原子的达芬奇开发板&am…

PlantUML Integration 编写短信服务类图

PlantUML Integration 写一个类图&#xff0c;主要功能为 1、编写一个serviceSms短信服务类&#xff1b; 2、需要用到短信的地方统一调用基建层的服务即可&#xff1b; 3、可以随意切换、增加短信厂商&#xff0c;不需要更改场景代码&#xff0c;只需要更改application.yml 里面…

【OpenCV】手写字符分割

OpenCV 是一个开源的计算机视觉&#xff08;Computer Vision&#xff09;与机器学习软件库&#xff0c;提供了多种图像处理算法与接口。在 OCR 技术中&#xff0c;字符分割用于提取图像中的文字信息&#xff0c;可以应用于车牌识别、身份证识别、文档扫描等场景。本文主要记录如…

【Flutter学习笔记】9.6 动画切换组件(AnimatedSwitcher)

参考资料&#xff1a;《Flutter实战第二版》9.6 动画切换组件&#xff08;AnimatedSwitcher&#xff09; 9.6.1 AnimatedSwitcher AnimatedSwitcher 可以同时对其新、旧子元素添加显示、隐藏动画&#xff0c;在需要切换新旧元素的场景广泛使用。也就是说在AnimatedSwitcher的子…