Sunday, July 24, 2022

V2EX - 技术

V2EX - 技术


求助各位用 Windows 笔记本的程序员

Posted: 23 Jul 2022 05:25 AM PDT

现在打算换电脑,觉得 32G 的 mac 性价比不高,想买 Windows 。于是最近一个月尝试在 Windows 做开发,说实话,Windows 太难用了。然后尝试用 wsl2 ,想把环境全迁移到 wsl2 上,却发现一堆问题,看到之后就不想折腾。最后想到了可以在 VMware 上装个虚拟机。 所以就想问下各位大佬,你们开发环境是全放在虚拟机上吗?连 ide 都放到虚拟机里吗?

刚刚进行了又一次互联网的迁徙,再见简书

Posted: 23 Jul 2022 05:23 AM PDT

前几天为了测试插件性能,把 chrome 的去广告插件关了。在搜索一些内容跳转到简书后,发现一堆以前没发现的奇怪的广告。想来简书已经垃圾泛滥多年了,这些广告很可能早就已经加上了,只是一直使用去广告插件没有发现。如今潮水退去,看起来和内容农场、csdn 之流也没什么区别了。

想起来 16 年刚接触简书的时候,真是一片净土,当时在简书上写了不少文章。时至今日,仍感觉简书的编辑器是用过最好的,文章管理也简单清晰,无人能处其右。早期的写作活动也搞得如火如荼,我也收藏了不少好文章。可惜商业上似乎不太成功。从 19 年之后,简书的社区运营就几乎感觉不到了。

所以很久都不在简书上写东西了,但是以前写的东西一直都存留着。

结果近几日看到了简书的素颜,担心在这个越走越远的平台上数据不太安全,还是决定把内容全部迁移出去,进行互联网时代的又一次告别。

唉,打算用模拟器弄一个微信自动化的程序,结果立马就给我永封了...

Posted: 23 Jul 2022 05:21 AM PDT

刚登录微信,还没进入主页就提示我使用模拟器或者其他脚本,直接永封,真是荒唐...

请教下各位 v 站的大佬,前端有什么发展方向?

Posted: 23 Jul 2022 05:19 AM PDT

如题所述,本人是一个前端开发,目前就基本上用给两大框架,vue 和 react ,然后工作中也基本是再配上相应的 UI 框架一把梭,突然感觉有点茫然,不知道接下来应该向哪个方向发展(本人的英语比较差)

然后的话,前些天看到 three.js 这样的,做动画,或者游戏,不知道这个咋样,也不晓得更进一步向哪个方面发展,所以想请教下 v 站的各位大佬,麻烦请指点指点

请求量巨大的情况下,缩短 API 字段单词长度是否值得?

Posted: 23 Jul 2022 05:17 AM PDT

我曾经有关注过火币还是币安来着,他们的 API 接口,经历过改革,想和大家讨论一下。

首先可确定的是,这个网站的接口请求量非常巨大,这是毋庸置疑的。

最开始我看到他们的接口和我们平时的也差不多,后来我发现他们把 API 接口改了,如 {"c":0, "m":"xxx", "r":{"q":"xxx"}},基本上每个字段都是一个字母,不够用了就两个字母。

我个人琢磨猜测了一下,他们这么干的目的,应该是想减少传输量(为什么我不觉得他们是想迷惑别人呢,因为他们有一些公开的 API ,也是这么设计的,文档也是开放出来的),也算是提高并发能力的一个技巧了。当然这么干坏处就是对接使用的人挺麻烦的,不看文档压根不知道什么意思,好处就是传输量实实在在的减少了,虽然一个接口减少的流量看似不多,但是以他们网站的规模来看,减少的量就很可观了。

大家觉得,如果是为了减少传输量这么干,是值得还是不值得,就是收益大?还是得不偿失?

React 和 Vue 应该怎么选?

Posted: 23 Jul 2022 05:17 AM PDT

可以从以下角度分析:

  1. 性能
  2. 生态(多端支持)
  3. 工程化能力
  4. 发展前景

xdm 家庭部署服务器有什么解决方案吗?

Posted: 23 Jul 2022 05:16 AM PDT

xdm 手上有一台 DELL 的 R410 装了 esxi 当软路由 ha nas 用 家中中国电信 300/30 的带宽 有公网 ip 但是噪音太大了 本来想放在一楼楼梯底下的 但是声音太大了 家里没有空房间 本来想放在二楼阳台 或一楼厕所外面的阳台 但二者均无网 电 求问 xdm 有什么有效降噪但不影响服务器散热的方案? ps 楼梯下面有电 离弱电箱很近 计划光纤明线 楼梯下大约能放下 15u 的机柜

typescript 里, 从后端接口获取的数据类型, 是声明全局类型呢, 还是模块类型呢

Posted: 23 Jul 2022 04:33 AM PDT

全局类型, 其他文件里用到的时候不用 import 声明文件, 直接用就是了. 模块类型的话, 其他文件里用到, 就必须 import 声明文件. 其他文件频繁用到的话, 是不是声明全局类型方便点? 但是我在 stackoverflow 上又看到有人说, 声明全局类型只用来处理安装的第三方依赖没有类型文件的情况. 自己 ts 代码中是不建议这么用的.

Java 后台开发,大家用 @Autowired 多么

Posted: 23 Jul 2022 04:27 AM PDT

到处文章都在说,不建议 @Autowired ,推荐构造器注入 但是我见识的项目,大部分都是 @Autowired 想请教一下大家,平时用哪种注入比较多

电脑使用 wps 唯一的原因: 标签整合

Posted: 23 Jul 2022 03:29 AM PDT

打开多个 excel ,pdf 都在整合到一块,显得比较简洁,特别是同时打开很多软件的时候

悲剧了, google voice 号被收回了,哪位大哥帮忙验证一下

Posted: 23 Jul 2022 03:04 AM PDT

出来出差很长时间了,没注意 gv 号被过期了被收回了。。。平时安装 gv 和 tg 的备机放在家里,没有拿,好多东西电脑上都登不了了。我看可以 reclaim 原来的号码,但是要美国号码验证。哪位大佬可以帮忙验证一下?感激不尽

很久没更新支付宝,今天更新了一下,竟然成短视频 App 了?

Posted: 23 Jul 2022 02:59 AM PDT

真他妈离谱,首页单独开一个大的板块,全是短视频,牛逼

在说夸克浏览器,看了一眼安装包竟然已经超过了 uc 浏览器,你管这叫夸克???果断放弃更新

如何下载 pcie 规范的 pdf?

Posted: 23 Jul 2022 02:54 AM PDT

比如我在以下网址:

https://pcisig.com/specifications?field_technology_value%5B%5D=express&field_revision_value%5B%5D=3&field_document_type_value%5B%5D=specification&speclib=

想要下载 《 PCI Express Base Specification Revision 3.1a 》 ,点开链接结果发现只允许 PCI-SIG 的成员下载

有什么途径可以下载到这个文档?

另外为什么这种行业规范的文档不允许任何人随便下载?

如何给代理加一层 socks5 代理方式

Posted: 23 Jul 2022 02:06 AM PDT

使用 electron 写的客户端 , 需要用到一个代理的功能,目前是直接使用 http 代理,设置远程的 proxy-server 地址即可。 走的是 http 、https 代理,代码在最下面。

#########         ############ 本地客户端 -proxy-> proxy server -> 指定网站 #########         ############ 

希望在本地增加一个 socks5 的代理层,数据转换后通过 http\websockets 到 proxy server, 类似这样

#########           ###########          ############ 本地客户端 -socks5-> local proxy  -proxy-> proxy server -> 指定网站 #########           ###########          ############ 

求赐教!!




服务器端代理的源码

const http = require('http') const net = require('net') const port = 1080 function buildHeaders(headers) {   const arr = []   for (const [k, v] of Object.entries(headers)) {     arr.push(`${k}:${v}\r\n`)   }   return arr.join('') }  function getHostAndPort(req) {   let host   let port   try {     ;[host, port] = new URL(req.url)   } catch (e) {     ;[host, port] = req.headers.host.split(':')   } finally {     if (!port) {       port = 80     }   }   console.log(host, port)   return [host, port] } const server = http.createServer((req, res) => {   const [host, port] = getHostAndPort(req)   http.get(     {       port,       host,       path: req.url     },     response => {       response.pipe(res)     }   ) })  server.on('upgrade', (req, res, head) => {   const [host, port] = getHostAndPort(req)   const client = net.connect({     port,     host   })   client.on('connect', () => {     client.write(`GET ${req.url}\r\n` + buildHeaders(req.headers) + '\r\n')     res.pipe(client)     client.pipe(res)   })   client.on('error', () => {     res.destroy()   }) }) server.on('connect', (req, client, head) => {   const [host, port] = getHostAndPort(req)   const socket = net.connect(port, host, () => {     console.log('connect', port, host, head)     client.write('HTTP/1.1 200 Connection Established\r\n' + 'Proxy-agent: Node.js-Proxy\r\n' + '\r\n')     socket.write(head)     socket.pipe(client)     client.pipe(socket)   }) }) server.listen(port, () => console.log(port))  

退货折腾了快一个月,让戴尔发邮件,戴尔的邮箱服务器就坏了

Posted: 23 Jul 2022 01:14 AM PDT

上个月戴尔官方商城小程序购买了戴尔的新款 27 寸 4K 显示器 U2723QX ,到货后发现白点不准,颜色偏色,有质量问题我要求退货,戴尔给我的回复是"开具企业发票的商品出现质量问题不退货"。

一个月都在处理这件事。

一开始因为戴尔说商品开具企业发票,出现质量问题只能换修不能退货,所以我问戴尔,发票信息有错,能不能改成个人的。戴尔过了三天给我回复说不能;我又问发票能不能作废,戴尔又过了七天给我回复说不能。

我问戴尔那顾客开票信息开错了,不能改吗?戴尔回复说是的。我大跌眼镜。但是为什么不能,因为哪条规定不能,咱也没搞明白。

因为"开具企业发票的商品出现质量问题不退货"这点在戴尔官网、付款页面和开票页面都没找到对应的说明,于是就又找了商城的售前客服去问,商品开了企业发票出现质量问题到底能不能退货?

结果售前和售后的回答截然不同

截屏 2022-07-23 13.43.17.png 截屏 2022-07-23 13.42.52.png 截屏 2022-07-23 13.43.02.png 截屏 2022-07-23 13.43.10.png


不清楚为什么售前售后的说法不一致,于是我将疑问通过邮件发送给了售后专员。

19 日售后专员回信,好像否认了之前的通话内容:

截屏 2022-07-23 14.05.jpg


我想再次确认,但在邮件发出之后,一直没得到回复: 截屏 2022-07-23 14.10.jpg

一直没有收到回信,我心想那就等等吧,反正也不急这一天了。

后来我才知道为啥没有收到回信——因为戴尔的邮件服务器坏了。我上周四五没办法接听电话,要求戴尔通过邮件沟通。心想邮件沟通逻辑也能更清晰一点,结果戴尔给我的回复是:邮箱服务器坏了,不能发邮件

截屏 2022-07-23 13.58.18.png


原来之前戴尔突然不回信了是因为服务器出问题了,19 号出的问题到 22 号都没修好。

好巧不巧的是,我前几天有台笔记本过保了,我通过邮件和戴尔的销售取得了联系,就在我收到"邮箱服务器坏了,不能发邮件"的回复时,还收到了销售用邮件回复的续保价格。

同样的域,可能戴尔的不同部门有不同的服务器吧。

我向客服反馈了多次,希望能通过邮件沟通,这样我周五之前就能知道处理结果,而不用等到下周一戴尔上班了才能电话告知我结果。不知道为啥处理结果不能用邮件告知,在可以收到戴尔售后的邮件后,戴尔也一直要求电话沟通

截屏 2022-07-23 14.52.jpg

那就等等看吧,说不定下个电话问题就解决了。

ubuntu 安装后 EFI 分区不对齐 4k

Posted: 22 Jul 2022 11:33 PM PDT

同一块 SSD ,系统分区以及 home 分区是对齐 4k 的。EFI 分区不对齐,虽然写入量很少,不过对于对于强迫症来说很难忍。

线上 JVM 内存溢出, OOM 问题排查求指点。

Posted: 22 Jul 2022 11:23 PM PDT

如题,线上有个服务跑着跑着就会 OOM ,导致所有请求失败,内存无法回收。

1. 报错信息

java.lang.OutOfMemoryError: GC overhead limit exceeded Dumping heap to /xxx/xxx/bootstrap/java_pid39726.hprof ... 

2. 排查过程

2.1 JVM 参数

JVM 参数

2.2 分析 dump 文件

用 VisualVM 分析 dump 文件发现,有个大对象占用了 33%的内存,如图①,查看该对象,发现里面大概有 200w 个对象,有一部分是空的,最大的几个对象就是顶部的那四五个。这些对象是一个 JSON 字符串,最上面几个大对象排查发现其中的 url 部分有大量重复,可能是前端提交数据或者后端处理 url 拼接的时候循环有问题,导致有大量重复的 url 使得其中这个对象特别的大。排查数据库,length 这个字段,最大的几个分别占用 9469799 ,4764368 ,4725799 ,4571257 。 JVM 参数

3. 其他

JVM 调优经验较少,不知道是不是这么个排查流程,也不知道排查的点对不对。希望有经验的大佬给点指导。 补充几点:

  1. 目前准备先把数据库里的重复的 url 干掉,但是应该解决不了实际问题,最大的几个对象加起来也就不到 100m 。
  2. 估计是哪里的接口或者操作触发了大批量的查询,导致数据都压到了内存中。先排查下代码,看看哪里有批量查询的地方,然后加一些范围条件。

Chrome 有办法调用微软 edge 类似的朗读系统吗?

Posted: 22 Jul 2022 11:15 PM PDT

如题,人到中年看到字多的东西就头疼,最近读论文时候发现 edge 的朗读挺好用的,AI 读一遍,配合思考速度正好。

Chrome 里似乎没有类似的右键朗读的功能,有什么插件之类的方式能实现吗?

一直做桌面端的工作, c++该往哪个方向精进

Posted: 22 Jul 2022 10:31 PM PDT

嵌入式出身,毕业却干了上层。
基于平台的 API 做应用开发,并不是一个可以走得多远的方向,真正有价值的地方在于与具体的业务方向结合。
迷茫,想干的方向没经验,面试机会都没有

win11 中使用 nvida 3080ti,在虚拟机中能做训练和识别么

Posted: 22 Jul 2022 10:15 PM PDT

现在有个 win11 的机器,显卡是 3080ti

准备在 docker 中使用 AI 服务,通过 vmware 等虚拟机技术,可以识别出这个显卡,并使用显卡的资源去做识别和训练吗?

有没其他办法,直接安装 linux ???

关于 defer 的案例有点不太理解(新手)

Posted: 22 Jul 2022 09:09 PM PDT

在看 defer 案例的时候看到这题有点不太理解,为什么后两句会输出 nil ? 是因为这个 err 只能使用一次嘛?

jOXc3n.png

使用 docker 下载代码提示 key 报错问题请教

Posted: 22 Jul 2022 08:54 PM PDT

16.04 系统安装 docker 20.10.7 , 导入镜像 Image1:sudo docker load –input ~/Download/sd_build_docker.tar.gz 新建容器 xxx 挂载在共享目录 docker:sudo docker run -i -t -d -v /home/docker:/host –name sd_build sb_build_3 /bin/bash 启动 bash:sudo docker exec -it xxx /bin/bash 新建文件夹 file1 加入 key , 下载代码 Code1 ,编译成功

在共享目录 docker 下新建文件夹 file2 下载代码 Code2: git clone ssh://123@xyz.com:29418/buildsystem.git -b yyy 提示 key 报错: Cloning into 'buildsystem'... Permission denied (publickey). fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

我不用 docker 直接在 ubuntu 系统上下载代码是正常的没有报 key 的错误,请问这个是什么原因? 如何解决?

一个利用 go 的简陋语法模仿 const 修饰的 linter

Posted: 22 Jul 2022 08:19 PM PDT

https://github.com/lance6716/k4Const

如果变量名长得像 kInts,会在修改它时报错

$ go vet -vettool=$(which k4const) ./... # awesomeProject ./main.go:239:5: write to const variable 'kInts' 

顺便请问大家,编译期有什么比较近似、轻量的方法,能发现 kInts 实参赋值给了非 k 开头的形参吗?昨天看了一下 go 自带的 callgraph 、SSA 等库,比较头秃

第一款开源、跨平台、高性能的中文编程语言!

Posted: 22 Jul 2022 06:45 PM PDT

虾圤,历经无数个迭代,终于问世!全世界第一款开源、跨平台、高性能的中文编程语言!

Github: https://github.com/withsalt/xiapu

写 go 语言的一种不作不会死的方式

Posted: 22 Jul 2022 12:34 PM PDT

不捕获 error

典型的像如下代码:

func getBar()(*bar, err){ 	//some errors     if err := hasError(); err != nil{     	return nil, err     } 	//do sth     return new(bar), nil } func foo(){ 	b, _ := getBar()     b.DoSth() //panic } 

以下典型的 golang 代码看起来很烦,而且直接影响代码风格美观程度。

func getBar()(*bar, err){ 	//do sth     return 0, nil }  func foo()error{ 	if b1, err := getBar(); err != nil{     	return err     }     if b2, err := getBar(); err != nil{     	return err     }     return nil }	 

我在很多项目里看到新手或者从其他语言转过来的同学,喜欢写 if p, _ := getBar() 这样的代码,然后继续处理接下来的流程。这样做的问题在于你直接忽略掉了你所调用代码产生的错误,你内心默认的代码运行方式是:"我的代码一定会以正确的方式运行。"
在很多其他的语言里会有 try catch 这样的机制,可以让你在函数调用的外部直接捕获异常。当随之带来的问题是 try catch 是跨函数跨模块和函数的,容易出现抛出的异常被并不适合这个模块的代码模块去处理。
go 语言这个错误处理方式虽然丑陋,但简单有效。它这样做简单的让你把 error 直接丢给上一层,上一层可以决定这个错误是继续传递还是中止处理。当我把写 go 关于错误处理的思维方式转变成:不放过任何一个错误后,写代码的心智负担将得极低。我只需要关心当前的函数输入输出数据是否合法,以及调用其他函数时出错后选择继续还是中止。而且 go 语言这种小粒度的 error 处理方式几乎不用 care 错误的类型,遇到不合法 /异常 /错误 /非正常流程后只需要 error 继续 /中止一把梭即可。
不信你可以看看下面是如何用简单的错误处理是如何改掉 HTTP 200 一把梭的毛病。

func Query(w http.ResponseWriter, r *http.Request) { 	var data RequestData     err := json.NewDecoder(r.Body).Decode(&data)     if err != nil{     	w.WriteHeader( http.StatusBadRequest)     	return     }     if data.Name == "not existed"{     	w.WriteHeader( http.StatusNotFound)         return     }     w.WriteHeader( http.StatusOK)     return } 

某些 golang 的 web framework 会调用 recover 方法,以防止 HTTP server 崩溃。不得不说这是它提供的一种"助纣为虐"的方式让你去忽略掉某些致命的错误。这完全没必要,守护进程比 recover 要靠谱得多(还能自动获得重启大法的加成:) )。我个人认为在代码里面尽量不要调用任何 recover 的代码,尽量在代码部署到生产环境前测试发现所有可能的 panic 错误并修复掉。如果代码发生 panic 问题,肯定是有什么地方你没有想到或没设计好,你需要做的是修改代码而不是掩盖错误。

捕获所有错误你唯一需要付出的代价就是:多敲几个字。而付出的这点代价你将获得:底层成本的设计负担,无脑的心智负担,健壮的代码,严格的输入输出限定。

问个正则匹配的低端问题

Posted: 22 Jul 2022 11:01 AM PDT

类似这样的字符串,格式固定是

任意数量的英文字母 + . + 任意数量的英文字母 + . + 任意数量的英文字母 + . + 任意数量的英文字母

比如这样 dkfj.wer.dkfjj.sldkf

我只想要最后 sldkf 这个字符串,如何用正则匹配过滤掉前面的 dkfj.wer.dkfjj.

OneUI 备份的问题

Posted: 22 Jul 2022 10:39 AM PDT

国行版 OneUI 的备份(桌面排布、通话记录 等)可以应用于其他区域版本(美版、港版 等)的 OneUI 吗?

我目前知道 Bixby Home 的备份不行,因为其他区域的系统全都变成了 Samsung Free ,两者差别很大

Java 程序员,找了个远程工作,但是做 Node.js 的

Posted: 22 Jul 2022 09:31 AM PDT

以前做过一年 Node.js 项目,如果面试的话要准备写什么?

使用 IDEA 开发 mybatis 在注解中写 sql 时没有语法高亮,有没有什么插件可以实现?

Posted: 22 Jul 2022 07:44 AM PDT

在 jdk15 中就已经正式确定了文本块( text block )的支持,使用 mybatis 时就可以很方便的使用注解直接在接口中写 sql ,可以抛弃 xml 文件的形式。但是这样 IDEA 就无法进行 sql 的代码提示和 sql 语法高亮,请问有没有什么办法可以解决?

人在大厂,苟住还是跑路?

Posted: 22 Jul 2022 07:17 AM PDT

背景

校招,前端,刚入职几个月,大厂。 做中后台。

现状

组内整体水平低到无法形容,2022 年了,项目全部是 js ,每个文件平均 1500 行,函数变量命名 /条件分支 /项目结构组织 /性能等都非常混乱,一个函数上百行那是处处可见,纯纯屎💩山。

是的,没人会 ts ,至少达不到能实际写项目水平。唯一新开的 ts 项目,稍微复杂点的功能需要用到泛型才能解决的,就直接来一发 any 完事。整个项目没有一处用到泛型,any 满地跑,确信是不会。

问题

一方面是窃喜,一方面是失望和担忧。

喜是工作压力比想象的小很多,
担忧是成长有限,不利于职业生涯发展。

但是,
一直以来的目标是攒钱留学润美。

要不要就这么苟住?还是面别家?

(刚工作几个月,走社招有戏吗?技术能力相对同赛道的同学 应该算是比较突出的)

LSTM 网络中有关维数的理解

Posted: 22 Jul 2022 06:57 AM PDT

pytorch 调用 nn.LSTM 的代码,github 上搜了一些范例代码感觉那些写代码的人思路上也挺混乱的。比如 batch_size 是 32, 最大序列长度 50 ,每个词用 10 个向量表示,那么 dataloader 给出的数据形状应该是[32, 50, 10]

import torch.nn as nn  input = torch.randn(32, 50, 10) lstm_layer = nn.LSTM(10, 20, 1, batch_first=True) output, (_, _) = lstm_layer(input) # 输出形状是[32, 50, 20] 

看网上很多文章都是按上述代码的方式输入的,是不是使用错误了?网上文章都说输入序列在 batch_first 的情况下应该是[batch_size, seq_len, input_dim],包括 torch 的文档里也是这么写的。

但是又有些代码的写法是要转换-1 和-2 维,即输入[32, 10, 50]->LSTM(50,100,batch_first=True)->输出[32, 10, 100]这种感觉的形状。

想问一下按人类的逻辑( RNN 应该按序列顺序循环输入,即循环 50 次)应该采用上述哪种写法?正常来说应该是按文档要求的写,但是诡异的是转换维数的那些代码也能跑而且还能收敛,这是咋回事。。

No comments:

Post a Comment