V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  cyrbuzz  ›  全部回复第 15 页 / 共 31 页
回复总数  619
1 ... 11  12  13  14  15  16  17  18  19  20 ... 31  
2021-04-23 16:30:35 +08:00
回复了 loginv2 创建的主题 JavaScript 如何实现像这个网站一样的反调试效果
1. 到首页或者新开页面,在 Network 区域,选择 slow 3G 。
2. 加载目标页面,把所有 js block 一遍,一个个开,发现是这个 js https://cdn.radius-america.com/age/static/js/s_dett.js?ver=202102251329
3. 给这个 JS 打个断点,最后一段发现这个。

```javascript
if (__getCookie_v3('username') != 'admin') {
eval(function(p, a, c, k, e, r) {
e = String;
if ('0'.replace(0, e) == 0) {
while (c--)
r[e(c)] = k[c];
k = [function(e) {
return r[e] || e
}
];
e = function() {
return '[0-5]'
}
;
c = 1
}
;while (c--)
if (k[c])
p = p.replace(new RegExp('\\b' + e(c) + '\\b','g'), k[c]);
return p
}....
```

后面是一堆 eval 的 string,会有一个`devtoolsDetector`,然后这个会判断是否打开了 console,判断方式见楼上各位大佬的链接。

4. 上面代码有个 BUG,__getCookie_v3,试了试就是获取叫 username 的 cookies 的值,这里写的不是 admin 的时候会执行这段代码。

5. 后面怎么操作不用多说了吧= =...
2021-04-21 14:17:35 +08:00
回复了 eroko 创建的主题 问与答 8 瓶水 2 瓶有毒 6 个耗子 要求单次检验出结果
@rationa1cuzz 额,说的是= =,少一组验证。
2021-04-21 13:28:09 +08:00
回复了 eroko 创建的主题 问与答 8 瓶水 2 瓶有毒 6 个耗子 要求单次检验出结果
分成两组 1-4 。

每组 4 瓶编号 1-4 。

用三只,

一只喝 1,3,一只喝 2,3,一只喝 1,2 。

另外一组分别喝,1,3 2,3 和 4 。

A: 13 和 23 死掉的情况,看另一只喝 1,2,死了,1 和 2 都有毒。没死,3 确定有毒,4 可能有毒看下一组情况。
B: 13 死了,23 没死,1 有毒,4 可能有毒看下一组情况。
C: 13 没死,23 死了,2 有毒,4 可能有毒看下一组情况。
D: 13 和 23 都没死,4 可能有毒看下一组情况。

此时看另一组:

A1: 13 和 23 死掉的情况,4 死了,3 和 4 有毒,4 没死,3 和上一组 4 有毒。
B1: 13 死掉了,23 没死,4 死了,14 有毒,4 没死,1 和上一组 4 有毒。
C1: 13 没死,23 死了,24 或者 2 和上一组 4 。
D1: 13 和 23 都没死,4 死了,4 和上组死掉的那个没死就是上组 4,4 没死,把上组的`可能`换成`肯定`。
2021-04-20 18:06:07 +08:00
回复了 balabalaguguji 创建的主题 编程 我来说说异步框架的最大缺点
个人理解= =。

异步模式不是把同步的代码异步化,而是那段代码本身就是一个异步的 IO 。

想把一段代码异步化,得先知道这段代码能不能异步,比如

```
a += 1
```

是一段不能异步的代码。

而一个网络请求则一般都会提供 阻塞和非阻塞 两种模式:

```
http({
async: true(false)
})
```
这样的配合事件循环就可以做到异步。

在 Python 中,像是`requests`是一个阻塞的网络请求,它并没有提供非阻塞的参数,无法直接用类似线程的`async(requests.get, xxxx)`这样的方式去将它异步化,而是应该在底层 socket 建立连接时就使用非阻塞的模式,交由异步的事件循环在这条 socket 等待响应的这段时间去干别的事。

按楼主的举例,commands 是一个阻塞的命令行,确实想用异步应该寻找的是一个非阻塞的命令行而不是想着有一个函数可以把 commands 异步化(事实上 Python 也有,`asyncio.base_event.run_in_executor`函数可以让传入的同步函数放在一个线程 /进程池中执行,同时外部还可以继续用异步的 async/await 或者回调)。

而在 Js 中,如果你在主线程中执行一段一直会占用 CPU 的代码(while(1){})也会阻塞住整个页面。

异步主要是用来解决 I/O 密集的问题的,I/O 所花的时间主要在网络读写,硬盘读写等。

如果一段代码的主要消耗的是 CPU,用异步并不是一个好选择而是应该尽可能榨干 CPU 的性能,衍生出来的就是线程(协程)/进程。

所以在 Python 这个啥程都有的语言里...

在主要是 I/O 的场景里,用非阻塞的库上异步绝对是一个性价比高的选项,其他程切换的开销再小也有开销。
在主要是计算的场景里,多跑几个 Python 进程比啥都管用。

访问量不大的网站用什么根本无所谓...数据量够小的情况下,选择排序和快排根本看不出差别。
React 版的源码是打包后的?一个上传失误?

项目只有前端内容,没有与后端交互的内容,还是有一个比较好。

画龙猫的项目挺有趣。

记账的项目有点简陋= =...
2021-04-19 09:46:05 +08:00
回复了 LeeReamond 创建的主题 Vue.js vue 如何实现 loading 读条,加载完成后显示页面?
还有一个思路是用 SSR,Nuxt 里写 layout,这样就可以完全使用 Vue 的生命周期。
荆棘。

谐音:镜姬,痒痒鼠反弹伤害的装备。
谐音:军纪。

~
2021-03-30 10:51:39 +08:00
回复了 Newyorkcity 创建的主题 问与答 javascript 请问如何为 Promise 添加默认的 reject 行为?
```
function parse(res) {
a = Promise.resolve(res)

const then = function (func, rej) {
if (!rej) {
rej = () => {
console.log(1);
alert(1);
}
}

a = a.then((res) => {
return new Promise((resolve, reject) => {
try {
resolve(func(res))
} catch(e) {
reject('err')
}
})
}).catch(rej)

return thenObj
}

const thenObj = {
then: then
}

return thenObj
}


parse({test: 'test'}).then((item) => {
console.log(item)

return item
}).then((item) => {
console.log(item)
throw 'error'
})
```

可以封装一下 `.then`。
2021-03-24 16:19:14 +08:00
回复了 xiaoming1992 创建的主题 前端开发 公司招聘前端,来的人让我头皮发麻
```
const list = document.querySelectorAll("li")
for (let i of list) {
i.addEventListener(...)
}
```
这个有啥不好吗,除了没限定 ul?

当然也可以给 ul 加事件判断冒泡的发起元素,这样只需要监听一次点击事件。
2021-03-20 22:23:09 +08:00
回复了 FrankFang128 创建的主题 分享创造 写给前端工程师看的函数式编程对话(系列文章)
递归最大的缺点是不是性能不高?
2021-03-20 16:14:11 +08:00
回复了 eachann 创建的主题 程序员 各位技术心得都是用什么做记录的
Vscode 丢 Github= =..
2021-03-20 00:17:16 +08:00
回复了 Umenezumi 创建的主题 问与答 公司征集一段代码印制在 T 恤上,过来取经了, 送键盘
`import T-Shirt`
2021-03-12 11:57:24 +08:00
回复了 awwz 创建的主题 问与答 有些孩怕,刚发现 google 浏览器能搜到本地文件
当看到“孩怕”时我略有疑惑很快就懂了,但是我看到“鸭鸭走”和“开始门”的时候只有???和???= =。
@cyrbuzz

这个...比预想的要简单,都有现成的 API 。

```

<svg xmlns="http://www.w3.org/2000/svg" width="160" height="160" onclick="pause(this)" id="ff">
<g>
<rect
style="fill:#edd154;fill-opacity:1;stroke:#3c352d;stroke-width:2;stroke-opacity:1;"
id="square"
width="100"
height="100"
x="30"
y="30"
>
<animate
id="frame1"
attributeName="display"
values="inline;none;none;none"
keyTimes="0;0.33;0.66;1"
dur="1s"
begin="0s"
repeatCount="indefinite" />
</rect>
<path
style="fill:#edd154;fill-opacity:1;stroke:#3c352d;stroke-width:2;stroke-opacity:1;"
id="circle"
d="m 125,80 a 45,45 0 1 1 -90,0 45,45 0 1 1 90,0 z">
<animate
id="frame2"
attributeName="display"
values="none;inline;none;none"
keyTimes="0;0.33;0.66;1"
dur="1s"
begin="0s"
repeatCount="indefinite" />
</path>
<path
style="fill:#edd154;fill-opacity:1;stroke:#3c352d;stroke-width:2;stroke-opacity:1;"
id="triangle"
d="M 105,105 47,89 89,46 105,105 z">
<animate
id="frame3"
attributeName="display"
values="none;none;inline;none"
keyTimes="0;0.33;0.66;1"
dur="1s"
begin="0s"
repeatCount="indefinite" />
</path>
</g>
</svg>

<input type="text" placeholder="指定帧 1-3" onblur="setFrames(this.value)">

<script>
var a = true
function pause(t) {
a ? t.pauseAnimations() : t.unpauseAnimations()
a = !a
}

var b = document.querySelector('#ff')
cc = {
1: '0',
2: '0.33',
3: '0.66'
}
function setFrames(value) {
b.pauseAnimations()
a = !a
b.setCurrentTime(cc[value])
}

</script>
```

svg 复制自题主给的文章...搜了一下 svg 直接可以指定 onclick,在浏览器里控制台里可以看到 svg 控件有 pauseAnimation 和 unpauseAnimations,顾名思义一个暂停一个不暂停,实现 播放和暂停功能。循环这个不知道是啥..本身就是循环的,指定帧发现了一个叫 setCurrentTime 的 API,这个 API 可以指定当前 SVG 的时间,每个<animate>块都指定了 values 和 keyTimes 对应时间的 display 值,建立一个映射表即可。
17 点 39 分看到这个,准备试试。
2021-03-10 10:59:08 +08:00
回复了 xuegy 创建的主题 C++ 移植了一个库,眼睛快要瞎了。
@xuegy

好吧~,have a good day~.
2021-03-10 10:50:20 +08:00
回复了 xuegy 创建的主题 C++ 移植了一个库,眼睛快要瞎了。
@cyrbuzz
vscode,单行开正则...
2021-03-10 10:49:48 +08:00
回复了 xuegy 创建的主题 C++ 移植了一个库,眼睛快要瞎了。
(.+) (.+) = (.+);
$1 $2($3);
2021-02-25 16:49:32 +08:00
回复了 xuqiccr 创建的主题 宠物 迫于要有猫了,想知道大家的宠物都起的啥名
比格沃斯。
solarized light 真香。
1 ... 11  12  13  14  15  16  17  18  19  20 ... 31  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2847 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 33ms · UTC 08:18 · PVG 16:18 · LAX 00:18 · JFK 03:18
Developed with CodeLauncher
♥ Do have faith in what you're doing.