Thursday, January 20, 2022

V2EX - 技术

V2EX - 技术


企微 vs 钉钉 vs 飞书

Posted: 20 Jan 2022 07:05 AM PST

这三个都用过,飞书最好用,企微最垃圾 https://imgur.com/a/5jhNQCP

git 如何所有分支里边搜索代码片段

Posted: 20 Jan 2022 07:04 AM PST

本来有个表基本不需要更新,突然今天要更新一下,写代码的人离职了,整理数据的代码又不知道提交到那个分支上去了也没合并,好一个大坑,那么怎么找到这部分代码呢

搜索了下尝试了下边这个方式不得行

git grep "are you ok" | $(git rev-list --all) 

工作中需要维护一个 JFinal 项目,太他妈痛苦了

Posted: 20 Jan 2022 06:34 AM PST

这个所谓"轻、快"的框架,各种基础设施除了简陋就是简陋,从而导致了业务层代码也是各种随便就来,各种 Map 到处传,各种 record (实际上也是个 Map 的简单包装)到处传,各种全局函数到处调用,写的时候是轻松了,维护的时候,要多恶心有多恶心。

太恶心了

如何绕过本地路由?

Posted: 20 Jan 2022 06:18 AM PST

本机开了 VPN 。为了让全局流量都走 VPN ,加了类似如下路由:
0.0.0.0/1 dev vpn
128.0.0.0/1 dev vpn
除此之外,还加了几条路由让 VPN 服务器直连。配置好后,正常上网没有问题。

但用 wireshark 试着抓了一下本地接口上的包,发现有 ip 绕过了路由直连。后来发现,这个 ip 应该是 connectivity-check.ubuntu.com 的 ip ( 35.224.170.84 )。上网搜了一下,应该是 NetworkManager 发起的。

我检查过 ip rule ,只有默认的几个规则和路由表。并且我自己 ping 了一下 35.224.170.84 ,wireshark 并抓不到 icmp 包(因为按理说,这个 ip 该走的是 vpn 接口再从本地接口发送出去,所以在本地接口上是看不到的),所以路由规则应该没错,而是被某种方式绕过了。比较好奇,NetworkManager 是通过什么方式绕开了系统的路由的?

华为手机自带信息综合传感平台,系统应用,这个事监控吗

Posted: 20 Jan 2022 06:09 AM PST

无意中在系统程序里面看到,听名字就害怕,全名是 综合传感信息处理平台。虽然只是个备用机,只下载了微信。但是心里很不舒服,有没有大佬知道的

Python 开发类似医院自助机使用 Python -cef 或者 pyqt 哪个好些,还有啥推荐的没有

Posted: 20 Jan 2022 06:00 AM PST

如题,专门上来问问大家,有没有对触屏优化的 python 的 ui , 做类似自助机触摸屏的软件开发肯定是要外表好看一些的,用 tkinter 和 wxpython 这些开发实在是太难看。 现在准备给自助机安装 window 系统,不考虑安卓系统。 想着用 pyqt 包一个 web 页面,或者 cef 包一个 web 界面,但是前端这块都用网页也可能不行,

有没有啥酷炫的 python 微软桌面开发包推荐? 过年期间有没有程序员方便有偿一起弄下,当过年换个手机可以不,有意向的 QQ 联系下 149021 五一二

List list=new ArrayList 写法的意义是什么

Posted: 20 Jan 2022 05:39 AM PST

List list=new ArrayList 相比于 ArrayList list=new ArrayList 写法的意义是什么

ffmpeg 丢帧 补帧

Posted: 20 Jan 2022 05:34 AM PST

背景

迫于无奈前端的播放策略(按帧率播放而不是时间戳),我必须保证每秒帧率保持在一个稳定的数量上,所以我需要对 iOS android ffmpg 编码 进行补帧和丢帧。 

问题

时间太紧迫,请教各位大佬是否有相关的文档或者代码参考(本人对音视频也是半只脚入门) 

年会活动 哪些才是程序员真的喜欢的

Posted: 20 Jan 2022 05:05 AM PST

临近年关,今年准备多花点心思在年会上。

当前的状态

目前我们的福利政策是渐进式的,根据公司的营收情况而定。总结一下就是小动作不断,大事情在考察。

往年的年会

1721642559243_.pic_hd.jpg

年会的目的

今年研发部门来了很多新人,主要是想通过年会,增进员工之间感情,顺便来点小活动、小奖品,给大家发个过节费。另外在适当的提前两三天放年假,也是一个大家都开心的事情。对于公司的"老人",那么发现金肯定是最合适的。

成员的组成

90%以上是男性员工,女性员工数量偏少,目前只有 4 位女生,产品、设计、行政、hr 。

向社区求助

由于部分员工会提前回老家,所以参加年会活动的人数大约 40 人,预算在 5 万块钱左右。

大家都是程序员,有话直说!

如果建议活动被采纳,送两本书

这两本书是我在 kindle 看完之后比较喜欢,刚购入的实体书,希望不要嫌弃哈

-《天蓝色的彼岸》 -《活着》

351642644384_.pic.jpg

作为管理层,说白了就是做到提高员工效率的同时还能照顾到他们的心情

无损扩容 C 盘的正确方式是什么

Posted: 20 Jan 2022 04:58 AM PST

平时软件都装在 D 盘,但是配置文件还是不少跑 C 盘去了,一个个找,有些也不敢删除,spacesniffer ,dism++,基本都试过了,想用 diskgenius 或者分区助手什么的分点空间给 C 盘,相对合理靠谱的扩容手段是什么呢,软件都装在 D 盘不想格式化 D 盘了,资料已经备份过了。主要软件配置也耗时间,不希望重新配置

小米路由器 AX3000 可以实现科学上网吗?

Posted: 20 Jan 2022 04:55 AM PST

想搞一个全屋科学上网,有会搞的大神吗。。。求教

小米 11 突然黑屏了!

Posted: 20 Jan 2022 04:52 AM PST

今天下午小米 11 打开的时候突然开不了了,尝试重启,音量+开机 10s 等一顿操作无效,大部分原因主板烧了,买了还没到一年,出现这种情况比较无语。咨询完售后后,要求去线下的售后点检测,检测完之后返厂。如果是主板烧了可以换新机。 有遇到同样情况的 V 友吗 应该怎么处理!!!

难道 nginx 不存在性能瓶颈?

Posted: 20 Jan 2022 04:38 AM PST

nginx 一般是用来做反向代理服务器,前面有一台 nginx 负责接收请求,然后分发给后面的多台应用服务器处理。

但如果一个网站的请求量十分巨大,前面只有一台 nginx ,nginx 会不会撑不住?如果撑不住,有没有什么横向扩容方案?目前我想到的只有:加多一台 nginx ,然后在域名解析上使用"DNS 轮询"来实现横向扩容。

有 properties 配置文件转 bean 工具推荐吗?

Posted: 20 Jan 2022 04:36 AM PST

不是 spring 项目,有没有现成的 apache 工具类可以实现 properties 配置文件转 bean ? 蟹蟹

Python 的 if 如果判断语句过于冗长,有书写技巧不?

Posted: 20 Jan 2022 04:23 AM PST

如:

if (a or b) and (c.get('d') == 1 or e.get('f') == 1) and (not g or not h) and (type(i) == list or type(j) == list):   

如果 a,b,c,d...j (而且还不止)的正式变量名,均在 8 个字符以上,这种条件判断阅读和书写上一行都超屏了, if 如果下面嵌套 if ,也不好看,if 就不能逐个子条件折一下行么?

win10 如何创建独立用户?

Posted: 20 Jan 2022 04:19 AM PST

朋友偶尔用我电脑做点事,我新建了一个标准用户给他。他在他账户下偶尔安装一些软件需要输入管理员密码,这就很尴尬了。安装就算了,我账户登录后也会自动启动他安装的软件,而且还有桌面快捷方式,很不爽。请问如何 win10 创建完全独立的用户?

虚拟机就算了,还要登录我账号才能进虚拟机。

Google 的广告还真是厉害

Posted: 20 Jan 2022 04:02 AM PST

我老婆带娃去了趟超市,回来以后问我 keto 是什么意思,她在超市看到有这个标志,娃说是给糖尿病的人吃的。我就在 Google 里面搜索了一下,第二天早上起床就发现 iCloud 的邮箱里面有一封 keto 的垃圾邮箱

G Suite 免费版没了!

Posted: 20 Jan 2022 04:01 AM PST

如果您使用的是 G Suite 免费版(旧版),则需要升级到 Google Workspace 付费订阅,以便继续使用您的服务。从 2022 年 7 月 1 日起,您将无法再使用 G Suite 免费版(旧版)。

https://support.google.com/a/answer/60217

芭比 Q 了,我们公司邮箱用的就是这个,用了 10 年,无了!

node 单线程是怎么应对高并发的场景的?

Posted: 20 Jan 2022 03:40 AM PST

node 单线程处理事件请求,一个请求卡住了,后续其他请求都会卡住,用 node 做业务处理,并发高的情况下,岂不是后面的请求可能会一直排队? node 不是单线程分发事件,多线程处理事件嘛?

vsftpd 怎么设置每个 ip 限制一个命令连接加一个数据连接

Posted: 20 Jan 2022 03:12 AM PST

现在是设置了 vsftpd.conf 中 max_per_ip=2 ,但这两个连接有时都被数据连接占用了

还有 nginx 也同理,下载连接怎么不占用刷网页的连接

求教: go 内存管理的问题

Posted: 20 Jan 2022 03:02 AM PST

当一个 P ( P1 )队列中的 goroutine 被其他 P 窃取时,
P1 的 mcache 中与 gorouting 相关的内存时如何转移的?
有大佬知道吗?
查了很久没看到相关文章。。还是说我查的姿势不对?

改 legacy code 改到想吐

Posted: 20 Jan 2022 02:44 AM PST

各种纠缠,无从下手。 尝试改了几次,都遇到了想不清的逻辑,被推翻了。 现在想起这分布在各处的几千行逻辑,就想避开,想不进去。 甚至越来越埋怨、厌恶这写代码的历代作者。 最近一个的还是我 leader 。危险了。 同事不试着解扣,还在把里面代码复制出来删删改改当新功能。

为什么我要纠结?因为目前给我的任务也是要在上面加新功能,另一个新功能。 还老得防着我们代码冲突。

想听听你们的类似经历。 欢迎吐槽调侃,更欢迎有效见解、解决之道。

当基于 springnboot 的模块打包成 Jar 包时,项目的 yml 怎么样才能被读取?

Posted: 20 Jan 2022 02:06 AM PST

现在有个 spring boot 项目

<build>         <plugins>             <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-compiler-plugin</artifactId>                 <configuration>                     <source>1.8</source>                     <target>1.8</target>                 </configuration>             </plugin>         </plugins>     </build> 

使用如上配置打包成一个普通的 jar 包

D:. ├─cn │  └─bobmao │      └─pro │          └─runtime │              └─testweb10 │                  └─dddd2 │                      ├─controller │                      │  └─data │                      │      └─testweb10 │                      │          └─fora │                      ├─data │                      │  └─entity │                      │      └─testweb10 │                      │          └─fora │                      ├─jpaService │                      │  └─testweb10 │                      │      └─fora │                      ├─repository │                      │  └─testweb10 │                      │      └─fora │                      └─service └─META-INF     └─maven         └─cn.bobmao.pro.runtime.testweb10             └─dddd2 

目录结构如上 application.yaml 在 jar 包的根目录内

现在 jar 本地安装后,在一个新建的 spring boot 项目内使用,并修改 scanbasepackage 之类的注解扫描这个包中的 bean ,但是这个项目的 application.yaml 不清楚这么加载。因为打包后这个配置文件就在新项目 jar 包中的 lib 中的依赖 jar 内。

一句话解释问题就是 springboot 项目如何依赖一个 springboot 打包出来的 jar ,且这个项目里的配置,bean 还能初始化。

注意这个被依赖的项目是打包成 jar 后使用的,而不是塞源码到项目里。 这是一个低代码平台里的一个业务,用户开个 spring boot 项目(自定义模块)后上传,能被用户创建的模块(图形化设计的模块)使用。所以这种依赖关系不在仓库里。

公司安全软件每 15 秒会偷偷截一次屏

Posted: 20 Jan 2022 01:34 AM PST

Mac 用户,办公机器会强制安装安全软件并要求授予屏幕录制和完全磁盘访问权限,一开始没怎么当回事,毕竟企业为了防数据泄露可以理解,但是最近听同事说其每 15 秒会截一次屏,一下子不淡定了,经常在上面用微信,涉及到很多个人隐私。

想问下,真的能做到后台静默截屏吗,有没有什么办法验证它?

调试把我调试笑了

Posted: 20 Jan 2022 01:23 AM PST

系统对接的银联 POS 机,对接群里面有几个银联的员工(我猜的),A 发了个文件让 B 去干活,B 干完了把配置信息发给我,我用了发来的配置发现不行,于是询问 A,B 。最后发现是 A 发的文件里有东西写错了,就这样一个问题,发现它用了将近 1 周的时间,B@我,问文件谁写的?从哪里接收的文件你都不知道吗? A,B 还对文件里的错误内容展开了一番讨论。原本调试老是失败心情烦躁的我,不知道为什么笑了出来。

苹果设备访问接口比 windows 要慢吗?

Posted: 20 Jan 2022 01:05 AM PST

一个登录接口,在安卓或者 windows 访问就非常快,但是在 iphone 或者 mac 访问就很慢,握手的时间很长,哪位大佬知道这是什么原因啊

支持 tmux 类似 rz / sz 的 trzsz 发布了 v0.3.1 新版本

Posted: 20 Jan 2022 12:46 AM PST

由于 tmux 不支持 rz / sz ,一直以来都找不到解决办法,于是写了个 trzsz,与 rz / sz 非常相似,重点是支持 tmux 。

主要是为既想用 tmux ,又想用 rz / sz 的朋友打造。现在只支持 iTerm2,还有顺便实现了一个进度条。

之前实现时用了 readline 函数,需要遇到 \n 才能结束,当 iTerm2 没配置好时,需要 ctrl + j 才能退出。

由于 ctrl + j 不符合大家的使用习惯,v0.3.1 实现了 ctrl + c 中断退出的功能。

升级与安装时的命令是一样的,都是 pip install --upgrade 一下就好。详见下面的文档:

github: https://github.com/trzsz/trzsz

oschina: https://www.oschina.net/p/trzsz

dig 命令异常

Posted: 19 Jan 2022 11:48 PM PST

环境是 VMware 虚拟机装的 Linux Mint ,在 VMware 软件的 NAT 网络模式里面设置了 DNS: 10.x 的公司内网 DNS 两个公开 DNS 223.5.5.5 8.8.8.8

为啥要在 VMware 里面设置 DNS 是由于出差在外面用 4G 连公司 VPN 的时候,老是解析不了公司内网的 API 接口,于是把公司内网 DNS 直接设置到了 VMWare 的 NAT 模式下的 DNS 配置中。

然后我回到公司接入网线,发现 dig 不好使了,nslookup 倒是没有问题。

 nslookup > www.baidu.com Server:		127.0.0.53 Address:	127.0.0.53#53  Non-authoritative answer: www.baidu.com	canonical name = www.a.shifen.com. Name:	www.a.shifen.com Address: 220.181.38.150 Name:	www.a.shifen.com Address: 220.181.38.149  

dig 的话,指定 dns 服务器均提示 connection timed out

# mint @ mint-virtual-machine in ~ [14:30:23] C:9 $ ping 114.114.114.114 PING 114.114.114.114 (114.114.114.114) 56(84) bytes of data. 64 bytes from 114.114.114.114: icmp_seq=1 ttl=128 time=20.8 ms 64 bytes from 114.114.114.114: icmp_seq=2 ttl=128 time=21.7 ms ^C --- 114.114.114.114 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 20.898/21.313/21.728/0.415 ms (base)  # mint @ mint-virtual-machine in ~ [14:41:22]  $ dig @114.114.114.114 www.baidu.com    ; <<>> DiG 9.11.3-1ubuntu1.15-Ubuntu <<>> @114.114.114.114 www.baidu.com ; (1 server found) ;; global options: +cmd ;; connection timed out; no servers could be reached (base)  # mint @ mint-virtual-machine in ~ [14:41:48] C:9 $ dig @114.114.114.114 +notrace www.baidu.com   ; <<>> DiG 9.11.3-1ubuntu1.15-Ubuntu <<>> @114.114.114.114 +notrace www.baidu.com ; (1 server found) ;; global options: +cmd ;; connection timed out; no servers could be reached 

不指定的话显示是从 127.0.0.53 获取的解析记录,但是不指定的情况下+trace 参数失效。

(base)  # mint @ mint-virtual-machine in ~ [14:42:38] C:9 $ dig  www.baidu.com    ; <<>> DiG 9.11.3-1ubuntu1.15-Ubuntu <<>> www.baidu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6883 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1  ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;www.baidu.com.			IN	A  ;; ANSWER SECTION: www.baidu.com.		5	IN	CNAME	www.a.shifen.com. www.a.shifen.com.	4	IN	A	220.181.38.150 www.a.shifen.com.	4	IN	A	220.181.38.149  ;; Query time: 331 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: Thu Jan 20 14:42:53 CST 2022 ;; MSG SIZE  rcvd: 101  (base)  # mint @ mint-virtual-machine in ~ [14:42:53]  $ dig +trace www.baidu.com   ; <<>> DiG 9.11.3-1ubuntu1.15-Ubuntu <<>> +trace www.baidu.com ;; global options: +cmd ;; Received 51 bytes from 127.0.0.53#53(127.0.0.53) in 0 ms   

用 flask+vue 撸了一个论坛

Posted: 19 Jan 2022 11:40 PM PST

https://bbs.2dogz.cn

  • 前台:flask 传统的模板渲染
  • 后台:flask+vue 前后端分离

各位感兴趣的老哥可以看看~

听闻 G Suite 免费版从 7 月 1 日开始要强制升级收费了。。。

Posted: 19 Jan 2022 11:39 PM PST

来源: https://support.google.com/a/answer/60217?hl=zh-Hant

如果您使用的是舊版 G Suite (免費版),則必須升級至 Google Workspace 付費訂閱,才能繼續使用服務。自 2022 年 7 月 1 日起,Google 將停止供應舊版 G Suite (免費版)。

陷入了想换工作的恶性循环

Posted: 19 Jan 2022 10:33 PM PST

背景:
因为公司的各种原因,公司发展,薪水,加班程度,文化等等原因。已经到了不得不换工作的地步,不换工作自己都无法说服自己

  • 有四年大厂经验,今年是工作第六年
  • Java 方向

但是:

  1. 算法基础很差,自己也知道其他技术短板在哪里
  2. 每天十点半到家,大小周,没事时间准备,上班时间强度也比较高,下班后大脑就比较累
  3. 个人思路,逻辑性、沟通也还可以,之前和现在公司的几个部门的排名都在前 10%
  4. 目标还是想着回大厂,外企( MS 之类)

因为没时间准备,目标是三到四个月的准备周期,请教下有没有过来人,这种情况下是怎么准备和换工作的

什么样的英文水平可以流畅地阅读英文书籍和文档,顺便求个学习路线

Posted: 19 Jan 2022 10:20 PM PST

苦于看英文文档有些吃力,想提升一下自己的英文水平,只为了看懂英文的内容,所以重点不在听力。
这样的需求需要多高的英文水平呢,顺便希望各位 v 友给一些学习路线的建议。
本人四级不到的水平,让各位见笑了...🥲

gmail 多账号如何分类?

Posted: 19 Jan 2022 10:03 PM PST

使用+.生成的别名注册了各类网站后,有没有办法在 gmail 中通过别名来分类?目前只能通过点击邮件详情查看发件人,太麻烦了。有没有大佬解答一下😄

请教个问题: rsync 同步数据时,出现 bad message 导致异常退出

Posted: 19 Jan 2022 10:00 PM PST

磁盘时 HDD 在 usb 硬盘盒里面,操作系统是 Debian ,文件系统是 ext4.

rsync 同步的时候,遇到一个文件出现了 bad message ,导致 rsync 直接异常退出。
在这个文件的目录下,执行 ls 命令也出现同样的 bad message 。

目前看应该是文件系统损坏了,导致某些文件出现了问题。
想问一下:
1. 为什么会出现这个问题?
2. 磁盘本身是否有出现了问题?
3. 如果磁盘没有问题,使用 fsck 命令能否解决这问题?

谢谢🙏

NIO 服务的绝对优势,无视 IO 时间

Posted: 19 Jan 2022 09:29 PM PST

背景

上次讲解了多线程知识,以及讲解了线程池中最大线程数的公式推导,使用小学生都能看懂的公式推导过程。但是线程池的存在的一些小问题,实际上如果不追求性能的极致,一般多线程都能解决问题。但是线程池的最大线程数的计算问题,以及部分 IO 时间占比太大导致线程数量太多,都不好解决优化。所以我们来看看 NIO 模式是怎么解决这些问题,NIO 是如何无视 IO 时间,做到吞吐量几乎保持不变。

内容目录

测试 NIO 的服务 测试多线程模型服务 Java 的 NIO 服务 总结 

地址

  • 内容十分精彩,全面讲解了服务接口的性能测试,讲解了 nio 如何无视 IO 时间保持同水平的吞吐量.
  • 还有如何正确的使用 java NIO 服务,建议 3-5 年的研发观看。绝对颠覆你们的知识面。

讲解视频: https://www.bilibili.com/video/BV1FS4y1o7QB/ git 代码地址在视频描述中,可以直接下载运行测试。

end

28K 大小周 VS 26K 正常双休,如何选择

Posted: 19 Jan 2022 09:23 PM PST

拿了两个 offer ,28K 大小周和 26K 正常双休,请问各位会为了 2K 放弃 2 天休息时间吗

Python selenium 如何实现找不到元素立即跳转下一步

Posted: 19 Jan 2022 07:54 PM PST

python selenium 使用 for 循环执行类似页面元素查找 如何实现找不到元素立即跳转下一循环

因为找不到元素会抛出异常导致进程结束 使用 try 也能实现这个,但是等待时间过长 能否实现找不到元素立刻进行下一个循环 节约时间

Java 如何分析 dump 文件信息

Posted: 19 Jan 2022 07:06 PM PST

如题,网上都是说分析 dump 信息,但是具体如何分析,如何根据 dump 文件找到频繁创建对象的方法却没有详细教程,各位大佬有人有教程吗

如果你家不止你一个人,请不要说笔记本不用贴膜

Posted: 19 Jan 2022 02:10 PM PST

我就是信了网友的邪笔记本没有贴膜,和老婆吵架被她直接泼了一杯水,谁说笔记本不用贴膜的?!哪怕你家只有一只狗,也要贴膜!

坐标北京,首付使用信用贷的风险请教

Posted: 19 Jan 2022 01:19 PM PST

坐标北京,首付还差点钱,可以使用信用贷么! 房贷使用交通银行。

中介说是交通银行只查一次征信,所以可以在审批完贷款后,再申请信用贷用于首付。

感觉风险一定是有的,想问下大家有这么操作过么,风险怎么样呀

另外有推荐的低利息的信用贷银行么,中介推荐的江苏银行 6 个点

控制子进程的 cpu 使用率

Posted: 19 Jan 2022 01:00 PM PST

想到一个控制子进程的 cpu 使用率的简单方法。

import platform import time from multiprocessing import Process, JoinableQueue  import psutil  from settings import CPU_FREQ, MIN_SLEEP_TIME_OF_SUBPROCESS, testLog # CPU_FREQ = psutil.cpu_freq().max * pow(10, 9) # MIN_SLEEP_TIME_OF_SUBPROCESS = 1 / CPU_FREQ   def subp(queue: JoinableQueue):     while 1:         if queue.empty():             _st = 0         else:             _st = queue.get()             queue.task_done()         time.sleep(_st)   if __name__ == '__main__':     sysv = platform.system().lower()     expect = 90     queue = JoinableQueue()     queue.put(MIN_SLEEP_TIME_OF_SUBPROCESS)     sp = Process(target=subp, args=(queue,))     sp.start()     spi = psutil.Process(sp.pid)     if sysv == "windows":         spi.nice(psutil.HIGH_PRIORITY_CLASS)     else:         spi.nice(28)     if sysv != "windows":         spi.ionice(psutil.IOPRIO_CLASS_RT, value=7)     testLog.info(f"pid: {spi.pid}, ppid: {spi.ppid()}")      time.sleep(5)     while 1:         scpu = spi.cpu_percent(MIN_SLEEP_TIME_OF_SUBPROCESS)         if scpu >= expect:             testLog.info(f"sub-process cpu: {scpu}")             if sysv != "windows":                 testLog.info(f"sub-process cpu_num: {spi.cpu_num()}")             st = 1 / (((scpu - expect) / 100) * CPU_FREQ)             testLog.info(f"st: {st}")         else:             # st = MIN_SLEEP_TIME_OF_SUBPROCESS             st = 0         queue.put(st)  

原理如下:
if 子进程的 cpu 占用率 > 预期:
    1 / ((当前的占用率- 预期)/ 满载值 * cpu 频率。)
这个值就是子进程需要休眠的时间。
子进程只使用单核时,满载值就是 100 ,子进程再开孙子进程的情况还没考虑。
实测能达到预想效果。
各位还有其他的方案可以借鉴下吗?

mysql 服务器用什么比较快?

Posted: 19 Jan 2022 11:02 AM PST

相同源码,一个配公司服务器,一个我自己买的腾讯云。 两个接口速度能差好几百 ms ,甚至几秒钟。 想知道市面上什么服务器跑 mysql 快一点,想花点钱提升日常的调试体验。

Uncaught ReferenceError: exports is not defined 问题记录

Posted: 19 Jan 2022 09:17 AM PST

image 原文链接: https://github.com/xiaoxiaojx/blog/issues/27

问题定位

报错信息如下

Uncaught ReferenceError: exports is not defined     at Module.<anonymous> (browser.js:13:1)     at Module../node_modules/.pnpm/abort-controller@3.0.0/node_modules/abort-controller/dist/abort-controller.js (abort-controller.ts:62:1)     at __webpack_require__ (bootstrap:84:1)     at Object.<anonymous> (polyfill.js:4:1)     at Object../node_modules/.pnpm/abort-controller@3.0.0/node_modules/abort-controller/polyfill.js (polyfill.js:21:1)     at __webpack_require__ (bootstrap:84:1) 

首先查看 node_modules 中 abort-controller 包的代码, 找到报错的地方, 为下图中红色下划线标出的有 exports 变量这一行的代码

// abort-controller/dist/abort-controller.js 

image 仔细查看发现代码并无明显语法错误, 报 exports is not defined 不合常理

正常来说 webpack 打包过后会把该模块的代码放在一个闭包函数中去运行, 通过函数参数中传入 module, exports 等变量, 运行完成后 module, exports 的值即为该模块的导出来的值, 和 Node.js 编译运行一个 js 文件模块的原理是类似的, 如下所示👇 0b044a8c6c1554aa6447b7331906cb8534dea5df

但是这里报错的地方的闭包函数却不长上面那样, 区别是该闭包函数传入的参数值是 webpack_exports 而非 exports ?! 9d2daf8013a79151faa421b2eb55405962fb10b9 所以代码在浏览器运行时该模块作用域内没有 exports, 就出现了本文开始的错误信息 exports is not defined ❌

// abort-controller/dist/abort-controller.js  exports.AbortController = AbortController; 

🤔 那么是什么条件决定了形参何时命名为 webpack_exports, 何时为 exports 了? 接着去探寻一下 webpack 这部分实现的代码

通过查看 webpack 的代码我们发现 isHarmony 变量的值为 true 则会命名为 webpack_exports, isHarmony 为 true 的条件是当前有 import 、export 等 ES-Module 语句时, 可想而知 CommonJs 则会命名为 exports

// webpack/lib/dependencies/HarmonyDetectionParserPlugin.js  module.exports = class HarmonyDetectionParserPlugin { 	apply(parser) { 		parser.hooks.program.tap("HarmonyDetectionParserPlugin", ast => { 			const isHarmony = 				isStrictHarmony || 				ast.body.some( 					statement => 						statement.type === "ImportDeclaration" || 						statement.type === "ExportDefaultDeclaration" || 						statement.type === "ExportNamedDeclaration" || 						statement.type === "ExportAllDeclaration" 				); 			if (isHarmony) { 				// ... 				module.buildInfo.exportsArgument = "__webpack_exports__";  			} 		}); 

这也容易理解, 当发现该文件是 ES-Module 模块时, 没有必要传入 exports, 因为 CommonJs 导出模块变量时才会去 exports 上面去赋值导出变量, 所以 ES-Module 模块里面 exports 变量不是一个关键词, 用户可以像普通变量一样使用

🤯 不过我们回头看一下, 报错的 abort-controller 包在 node_modules 中的代码不就是 CommonJs 规范的吗, 按理来说此时 isHarmony 为 false, 函数的入参是 exports 才对!

💡 这里要补充的知识是像 create-react-app 、next 、jest 等 Node 工具都默认不会让 babel 去处理 node_modules 中包的代码, 因为按规范, 每个包发布到 npm 中时都最好是 es5 等兼容性良好的代码, 而非 jsx, ts 等需要二次编译的代码

而报错的该包因为如下有 const 语句的 es6 代码 ⚠️ 为了兼容低版本的浏览器, 我们的脚手架中开了一个口子去白名单开放编译 node_modules 中的不规范的包

// abort-controller/dist/abort-controller.js  class AbortController { // ... } /**  * Associated signals.  */ const signals = new WeakMap(); 

既然经过了一次 babel-loader, 那么我们需要知道 abort-controller 代码经过 babel-loader 编译后交给 webpack 处理时的代码长什么样子

接着看看我们的 babel 配置的 preset 使用的是 babel-preset-react-app

// webpack 的配置  {       loader: require.resolve('babel-loader'),       options: {         babelrc: false,         presets: [require.resolve('babel-preset-react-app')],         plugins: [           // ...         ],         cacheDirectory: !isProd       } 

深入 babel-preset-react-app 的代码, 发现其内置使用了 @babel/plugin-transform-runtime 插件

// babel-preset-react-app/create.js  module.exports = function(api, opts, env) {       // Polyfills the runtime needed for async/await, generators, and friends       // https://babeljs.io/docs/en/babel-plugin-transform-runtime       [         require('@babel/plugin-transform-runtime').default,         {           // ...         }, }; 

transform-runtime 的作用是当检测到该文件代码中有 es6 等高语法的代码时, 会通过在文件顶部添加 import 等语句动态添加对应的 polyfill, 达到按需添加 polyfill 的作用

相比直接把如下的 _classCallCheck 等实现的代码直接插入到文件头部, 通过 import 一行代码动态添加能够有效避免每个文件中都有这些重复的 polyfill 具体实现的代码, 所以使用 transform-runtime 也算一个常见的优化手段

65c96974a8d723dff68bb033c70abb1c52df4ecb

😯 到这里我们知道了 abort-controller 这个包在 node_modules 中的代码虽然是 CommonJs, 但是通过 transform-runtime 给其添加的 import 语句, 使得 webpack 判断它为 ES-Module 模块了

接着我们只能探索 transform-runtime 是否能通过 require 来动态添加 polyfill 了, 这样 webpack 也不会误判了...

通过查看插入 import 语句实现的代码,此时我们是因为进入了下图 isModuleForBabel 为 true 的逻辑, 而 builder.import() 显然就是添加一个 import AST 的函数实现。如果能进入 else 的逻辑使用上 builder.require(); 逻辑不就解决了我们的问题 !

// @babel/helper-module-imports/lib/import-injector.js 

image

然而 transform-runtime 调用的 _helperModuleImports.addDefault 函数传的参数尽然是写死的 😓, 我们想通过传不同参进入 else 逻辑的想法落空, 不得不让我们怀疑是 transform-runtime 的一个 bug

// @babel/plugin-transform-runtime/lib/index.js  this.addDefaultImport = (source, nameHint, blockHoist) => {   const cacheKey = (0, _helperModuleImports.isModule)(file.path);   const key = `${source}:${nameHint}:${cacheKey || ""}`;   let cached = cache.get(key);    if (cached) {     cached = _core.types.cloneNode(cached);   } else {     cached = (0, _helperModuleImports.addDefault)(file.path, source, {       importedInterop: "uncompiled",       nameHint,       blockHoist     });     cache.set(key, cached);   }    return cached; }; }, 

兄弟问题

顺带一提下面这个问题造成的原因是一样的

Uncaught TypeError: Cannot assign to read only property 'exports' of object '#<Object>'     at Module.<anonymous> (App.js:46:1)     at Module../src/components/App.js (App.js:49:1)     at __webpack_require__ (bootstrap:774:1)     at fn (bootstrap:129:1)     at Module../src/index.js (index.js:2:1)     at __webpack_require__ (bootstrap:774:1)     at fn (bootstrap:129:1)     at Object.1 (index.scss:1:1)     at __webpack_require__ (bootstrap:774:1)     at bootstrap:951:1 

何时会报上面那个错误, 看一下下面这个例子就知道了, 只是因为不同版本抛错的方式有所不同 image

问题解决

  1. 尝试从源头 @babel/plugin-transform-runtime 解决
  2. 对 abort-controller 这些不太规范的包使用单独的 babel 配置
  3. 自己写代码时一个文件不要同时有 import 和 modules.exports 语句

PS: 本次记录之后再也不怕被追问这俩问题的原因了 😼

开源项目如何获得资金支持

Posted: 19 Jan 2022 08:47 AM PST

这是一篇推广帖,也是一篇合作帖,同时也确实是针对开源项目募集资金问题的讨论帖。
先说开源话题部分,个人感觉很多开源项目都止步于开发和恰饭不能兼得。诚然,市场规律是优胜略汰,但也存在一些思想前卫但资金、时间不足而导致最终不得不停下甚至被时代淘汰的项目。而且对于多数技术人员来说,有些募资无门的感觉。
下面再说一下推广的部分,我想推广一个基于以太坊的一个应用——vorg。在这个应用上,用户可以创建自己的虚拟组织,并且可以通过增资扩股和股份交易来获取发展资金。同时,也提供了域名服务,每一个虚拟组织(特殊名称除外),都有一个专属的永久性域名。
事实上 vorg 本身并不针对任何行业,但因为域名的部分可能更偏向于一些技术,因此想从开发者方面尝试入手。
最后,关于合作,因为 vorg 功能现在相对简单,要想为开源社区服务,除了募资还需要考虑宣传曝光,因此希望能找到一些感兴趣的小伙伴一同讨论和共建。
这里是一篇关于 vorg 的:介绍和使用的文章(英文的,可以尝试直接 chrome 整页翻译)。
感兴趣的小伙伴可以加入我们的telegram 讨论组
关于开源项目筹资的话题以及我们的项目,欢迎大家多多发表自己的观点和意见建议,感谢诸位啦。

问一个关于 webp 图片转换的问题

Posted: 19 Jan 2022 07:47 AM PST

一张 400kb 的 jpeg 图片,用 android studio 自带的"convert to webp"功能,转换成 75%质量的 webp 后大小是 200kb ,但是如果在手机上使用 Bitmap.compress 同样压缩成 75% 的 webp ,大小反而比原图还要大( 500kb ),两种压缩产物大小不同,是什么原因,是 Android 系统和 Android Studio 的压缩算法不同吗?

360 真 TM 无耻!

Posted: 19 Jan 2022 06:57 AM PST

前文: https://v2ex.com/t/819269

我最终采用的是另外找了一台 windows 电脑来安装 360 浏览器,然后远程桌面操作。

我今天在这台 windows 的 Chrome 浏览器登录我的账号,以便于使用书签,结果 360 这个流氓,直接就把我的书签同步到自己的浏览器上了。

我感觉恶心 yue ~

学大数据现在还有搞头吗?

Posted: 19 Jan 2022 06:39 AM PST

No comments:

Post a Comment