V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  CLMan  ›  全部回复第 7 页 / 共 7 页
回复总数  139
1  2  3  4  5  6  7  
感谢分享,原来这一系列头信息有更专业的术语描述。
根据我的少量的扩展开发经验,扩展提供的 API ,无论是内容脚本还是 worker ,都是受到浏览器安全策略限制的。

在 worker 进行 fetch 时,浏览器会使用 CORS 的方式来请求数据,我还没测试过设置 permissions 是否有效果。

至于内容脚本,似乎 cors 是不允许的(不太确定),只能访问同源的资源。

两者提供的 fetch/ajax api 都是受限的,并不是 local api 那样随意,要想不受限,可能要使用服务端来进行请求转发。
2023-05-11 01:45:04 +08:00
回复了 takeshima 创建的主题 JavaScript 求解一个关于闭包的 JS 代码的问题
修正:比如 Java ,会要求被捕获的**变量**必须是 final 或者等价 final 的

补充:es5 没有块作用域,只有全局作用域和函数作用域,也就是:
```
const fn1 = () => {
let i = 0;
for (; i < 10; i++) {
var j = i;// 使用 var 定义的 J 是函数作用域
setTimeout(() => console.log(j))
}
}

fn1()//9 9 9 9 ...
```
当然现在都是用`let`了,这些过时的知识没有太多了解的必要,我也忘得差不多了。
2023-05-11 01:29:00 +08:00
回复了 takeshima 创建的主题 JavaScript 求解一个关于闭包的 JS 代码的问题
第二种是任何语言中都可能会出现,都要避免的情况。闭包捕获了外部变量`i`,输出的结果取决执行时,`i`的即时值。避免的办法是创建一个块作用域的复制值,但是存在心智负担。

JavaScript 采用单线程模型,因为循环中没有中断当前执行流的逻辑,因此所有 timeout 处理逻辑只有等循环结束后才能执行,此时 i 的值为 10 ,所以输出`10`共 10 次。

严谨的语言会对这种情况进行语法限制,避免不经意间写出 bug 。比如 Java ,会要求被捕获的值必须是 final 或者等价 final 的:
```java
for (int i = 0; i < 10; i++) {
int num = i;// 这里使用一个等价 final 的块作用域变量
new Thread(() -> System.out.println(num)).start(); // 0 9 8 7 5 3 4 2 6 1
}
```

需要刻意的使用容器,比如数组,来实现第二种的效果,Java 因为是多线程语言,子线程与主线程是并发执行,输出结果不全是`10`:
```java
final int[] ref = {0};
for (int i = 0; i < 10; i++) {
new Thread(() -> System.out.println(ref[0])).start();// 3 4 4 3 8 6 10 10 10 10
ref[0]++;
}
```

JavaScript 是一门存在许多设计缺陷的语言,es6 进行了许多修补。第一种就是 es6 对第二种情况容易产生 BUG 的修补,它的思路与 Java 是不同的:`而在使用 let 声明迭代变量时,JavaScript 引擎在后台会为每个迭代循环声明一个新的迭代变量`,因此 fn1 里面的`setTimeout()`每次捕获的变量的值都是循环时的值。

JavaScript 采用单线程执行模型,`JavaScript 维护了一个任务队列。其中的任务会按照添加到队列的先后顺序执行`。`setTimeout()`省略`delay`表示立即提交到任务队列,因为顺序提交,因此顺序输出。

可以看看《 JavaScript 程序高级程序设计》《 understanding es6 》。我忘得差不多了,也是看到这个问题才去看书回忆起这些细节。

写了一个第二种存在中断循环的版本,看不懂也没啥关系:
```
const fn2 = async () => {
let i = 0;
for (; i < 10; ) {
setTimeout(() => console.log(i))
i = await plusOne(i)
}
}

function plusOne(n){
return new Promise(function(resolve, reject) {
setTimeout(() => {
resolve(n+1)
},1)
})
}

fn2() // 0 1 2 3 4 5 6 7 8 9
```
1. 应该是后者吧,`fetch`是个 Promise API ,不会阻塞 main thread 。

2. 真要完全弄清楚的话,你始终在 JavaScript 层面思考是没用的,因为计算机软件是分层的,每层向上提供封装,特别是 io 、线程之类的,并没有完全屏蔽底层并提供完备抽象的封装。你要去研究浏览器实现,去研究 OS API 实现,去研究硬件实现,但没有相关知识储备的话,这个过程效率极低,量力而行。
Scala 是 JVM 上的语言,唯一应用领域是 Spark 框架(用于大数据处理)。和其它 JVM 之上的非 Java 语言一样,因为 JVM 的限制,因为 Java 资产的影响,应用领域受到很大限制,一般只有写 Java 的才会去用这些语言,用这些语言也仅仅是为了干一件事情( Kotlin 用来写 Android,Groovy 用来写 Gradle 脚本)。
2023-04-16 17:52:30 +08:00
回复了 alovez 创建的主题 酷工作 想做游戏的看过来,我们的独立游戏工作室招人啦
@ivslyyy 有点离谱了,兄弟。实习生好歹也有工资拿,你这倒贴,谁敢要你,不怕闹出什么事情来?你要从招聘方 /猎头的位置考虑,人家想要的是一个能 hold 住的,能带来中介费的,便宜确实是考虑因素但不是最关键的,你提供的很大程度偏离了他们的需求。职场别把自己放在卑微的角色,就算是靠骗、靠编,你也要表现出你有足够的实力。

如果你是恶意灌水的话,就无视我的回复吧。

我看你的 github ,fork 了一大堆项目,虽然兴趣广泛,但是没有一个是自己写的超过 2000 行代码的程序,不要求 star 多少,但一个独立或者作为 leader 完成的完整项目总要有吧。

行业虽然严冬,但是只要经济在流动就有机会,只是要想想怎么找到自己的机会,别在一个点上困住。

共勉。
2023-04-15 14:08:07 +08:00
回复了 thorneLiu 创建的主题 程序员 2023 年了,各位老哥都是用什么工具构建简历呀?
用 vue 搞了个简单的页面。
2023-04-15 13:55:07 +08:00
回复了 Ufo666 创建的主题 Java 不要随便删除弃用的配置项......
API 弃用是指软件的 API 有了替代的解决方案,而不是你应用功能的弃用。

你要去掉这段代码,就要去看文档,这功能是 API 是如何弃用的,有什么替代解决方案,是否需要升级相关依赖。
光电是一个综合专业(我读书的时候老教授喜欢称“光机电算”,光学、机械、电路、计算机),看似很牛,其实就是个大学调剂指定专业。除了光学以外,学的是一堆毫无联系的水课,但是光学的应用领域太窄,你也不一定感兴趣(至少我是这样)。

一半的人本专业读研。本科和研究生的大部分就业往通信领域(中兴、华为、电信、移动、联通)、嵌入式底层开发上靠,有做技术的、有做产品、有做销售的,剩余的人做与专业无关的。

总之,一门混日子的专业,你喜欢躺平没啥问题,但肯定学不到啥,也没有什么对口的就业方向。
2023-04-10 13:32:45 +08:00
回复了 childewei 创建的主题 Java 求问 Java 学习以后能做那些有意思的小程序?
我用 Java 写过命令行(用 Gradle 打包很方便),还行,除了分发、安装麻烦一点。

管理系统类的项目是相对功利的练习模板,但个人更推荐写自己感兴趣的,基兴趣驱动的项目能让你写代码、看代码、思考代码,而非复制粘贴教程。
2023-04-09 00:23:36 +08:00
回复了 guzzhao 创建的主题 浏览器 看来是要放弃 edge 了
@ljsh093 我前面描述存在错误,是内置加密货币钱包。

百度搜索“Brave 浏览器 丑闻”,我在 Google 居然搜不到关键信息。
2023-04-08 18:40:02 +08:00
回复了 mark4zhao 创建的主题 程序员 Rime 输入法真是简洁啊。
你说得有道理,键盘输入到了最后都取决于肌肉记忆,全拼拆分为单个音,双拼拆分为声母和韵母,英文拆分为字母,都是在脑海中形成了“回声”,再进行按键。

全拼的单个音、英文字母的按键映射在入门阶段相比双拼的映射更加简单,因为更加直接,但到了熟练期都是转换为肌肉记忆,因此输入单元到键盘的映射关系,只对入门阶段存在影响,而对熟练后的影响可以忽略。

全拼和双拼都是基于拼音,在大脑中拆分的时候存在部分重复,导致它们的按键映射形成的肌肉记忆存在部分冲突。

我前面的观点确实存在很大的问题:学习双拼的关键不是学习新的映射,而是需要放弃全拼时形成的肌肉记忆,并进行大量的练习。
2023-04-08 14:05:05 +08:00
回复了 guzzhao 创建的主题 浏览器 看来是要放弃 edge 了
chromium edge 刚出的时候,edge 吹挺多的,我看到 cnbeta 上的一篇文章,某大学研究人员发现 edge 比 chrome 上传更多的遥测数据,我就知道 edge 大概是什么样子了。

今年 bing AI 火了,只能用 edge ,打开就是妥妥的国产浏览器风格,一堆眼花缭乱的 feature 恨不得占满整个屏幕,新标签页的广告需要网上去找教程来关闭。

其它基于 chromium 的浏览器,自从某自带加密货币的浏览器出了丑闻之后,我就更信不过:

- 一堆粗制滥造的 feature ,同时这些 feature 可能引入新的安全漏洞
- 无法保证这些厂商会不会干一些下三滥的事情,比如之前的丑闻
- 无法保证这些厂商能第一时间同步上游

所以,还是 chrome 大法好。
2023-04-08 13:49:04 +08:00
回复了 mark4zhao 创建的主题 程序员 Rime 输入法真是简洁啊。
@jqtmviyu 抛开一些及其小众的方案不谈,键盘因为只有唯一选择,而且小时候学习的也没有替代方案,这和中文输入法没法类比。

双拼、五笔、自然码等需要额外记忆映射的输入法方案的设计确实遵循一些内在理念,但和使用者又有多大关系呢,拿到手的第一印象就是反直觉。

当然,这些输入法确实可以提高输入效率,愿意学习并坚持使用的人自然有自己的道理,我以上回复只是反驳前面的“懒惰论”。
2023-04-08 03:00:24 +08:00
回复了 mark4zhao 创建的主题 程序员 Rime 输入法真是简洁啊。
不是学习成本的问题,学新编程语言、外语、新框架我都愿意。

试过双拼,但真不是我的菜,它的映射是生硬的,无逻辑性的,作为前做题家,我只是纯粹讨厌死记硬背。

非文字工作者,全拼足以满足需求,我为什么要追求更快的打字速度呢。

总结就是,不喜欢甚至带有偏见,也不会给我工作生活带来多大改善,因此没有学习的必要。
2023-04-05 20:54:51 +08:00
回复了 besscroft 创建的主题 程序员 设计并实现一款软件的 UI 界面真的挺难的。
前端包括设计和实现(开发),虽然有全栈的概念,但是真正能精通前后端开发的少之又少,精通前后端开发而且精通设计的更是凤毛麟角。

应试教育使得很多人缺乏基本的审美细胞,这个没法补课了。

我也曾经焦虑过,因为练习 web 项目就要涉及前端,而前端部分往往让我心里交瘁。后来我就直接爬别人的网站,只练习后端部分。

Material Design,Ant Design 之类的库也能帮助非前端人员节省开发的脑细胞。

总之,专业的领域交给专业的人来做,别自己硬着头皮浪费大量精力去做,你也学不到什么。
1  2  3  4  5  6  7  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5985 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 37ms · UTC 02:54 · PVG 10:54 · LAX 18:54 · JFK 21:54
Developed with CodeLauncher
♥ Do have faith in what you're doing.