"更多优秀",但是并没有指名道姓的说出来,太敷衍了。
我自己修过(指替换零件、毕竟修主板还是得专业人士)、清理过几个笔记本,倒是总结出一些经验。
相变片没用过,硅脂不是越厚越好,硅脂的作用在于填补铜片与 CPU/GPU 接触面的缝隙,你只需要表面保证完全覆盖薄薄的一层,拧紧螺丝就行了。
拧散热器螺丝要讲究技巧,按照 X 的交叉方式先拧几圈固定螺丝,然后循环这样的方式,直至把所有螺丝拧紧,这样是避免硅脂不均匀分布。
现代笔记本的散热模组都是一体化的,可能散热模组老化或者你清灰过程中造成了物理破坏,最好的方式是淘宝买 2 个新的,一个替换,一个备用。
拆机前最好看下视频和教程,避免遇到坑,别自己蛮干。
模式 1 ,定义了一堆 interface ,模块执行逻辑在 New 里面,间接在 run 里面。
模式 2 ,定义了一个通用的 Module 接口,模块实现 Module 接口,模块执行逻辑在 Run ,由 Manager 在 run 里面调用。
模式 3 ,定义了一个通用接口 Stage ,以及定义了一堆 interface ,模块实现 Stage 接口以及自身的接口,模块执行逻辑在 Run ,由 Manager 在 run 里面调用。
所以你这 3 种模式,无非就是抽取了一堆接口,有点 Java 了,代码的可读性没有任何区别。
首先,模式 1 的将模块执行触发丢在 New 里面,通常是不建议的,因为多模块系统是由模块组装得到的,最后再走启动的流程,模块提前执行是不合适的。
其次,除非真有必要,Go 是很少上来就抽取一堆 interface ,建议先写下原型,根据实际需要再抽取接口。
至少 Google 一下 Flutter 和 Dart 的历史吧。
是 Chrome 团队先发明了 Dart ,试图取代 JS 用于 Web 开发,但是由于市场接受度不高,因此暂时沉寂。
但是代码/编程语言对于 Google 来讲就是资产,只要有合适的场景就会翻出来拿来使用,毕竟都是真金白银换来的积累。
随后,Google 与 Oracle 陷入了关于 Andorid 使用 Java 的官司,Google 一方面和 Oracle 在法院扯皮,一方面在软件层面准备了 JB 的 Kotlin 和 Chrome 团队的 Flutter 方案,因为 Chrome 团队正好在 UI 上积累了很多经验,之前开发的 Dart 也很适合来干这件事情。
对于 Google 这种大公司,给自己操作系统(Android)编写 GUI ,其使用的语言必然是自己的,苹果为啥要发明 Swift ,微软为啥要发明 C#这个和 Java 同生态位(至少早期如此)的语言,因为自主才能掌控全局不然处处受制于人,不是很简单的道理。
"Python 初学者",错,“编程初学者”,对。
其实你是基本对编程没有什么概念,因为对于有编程经验/思维的人来说,Python 入门也就一个下午的事情。因为你也不用来写什么复杂东西,Python 看个语法部分就算入门了。
用 math adventures 来入门是你想多了,里面的 Python 内容不成体系,里面的数学内容也不成体系,你不是数学专业出生的,哪来的背景知识看,看天书吗?
我读大学的时候,大一基础课之一就是 C 语言编程,这种教育依然是灌输式的教育,典中典的谭浩强 C89 ,坑害了多少人。不知道现在大学的培养方案变更没,这类课程的目的,其实就是要教会学生编程思维。
如果要推荐,CS61A 应该是合适的,包括视频,基于 Python ,讲解编程思维。
因为前面已经过滤 null 了,后续就不需要再检查 null ,所以你改得没啥问题。其次这代码本身就怪怪的,分页查询返回的 List 包括 null 元素(难道是返回固定长度的 List?)
感觉你应该没有太多编程经验,去看这种后台管理项目,去扣它的业务逻辑细节,实际上是走入了误区,想得太多写的太少。这种项目就是用来二次开发的,你自学根本没有实际的需求,看这种只有皮而无肉的空架子代码,那自然会陷入“这里要不要检查 null”,“这里为啥用 Throwable 而不是 Exception”等基本上没啥意义的实现细节。
我的看法是,真正能够有所收获,建立信心的是写自己的项目。你去找一个自己感兴趣且熟悉的领域,找到切入点,写一个至少能用的应用,不需要功能多丰富,实现多完美,至少其是自洽的,麻雀虽小,五脏俱全。比如你的求职目标是 Java 后端,那就去仿一个网站,从需求分析、数据库设计、后端实现、前端实现、应用部署一步步做起,并且去相关垂直领域宣传,给别人使用。
当代软件开发都是需要包管理器的,学习包管理器就和学习编程语言一样,概念都是一通百通。npm 学习成本并不高,只不过在国内需要配置代理这项额外学习成本,建议用 pnpm 。
@
CLMan 之前没看你项目源码,看了下,引入 vite-plugin-dts 是正确答案。
vite 是开发 web 应用的脚手架,你只是开发模块/库,如果不需要使用 web 页面进行辅助开发和测试,是不需要上 vite 的。
当然上了也不是什么错,毕竟可以利用其默认配置,比如 eslint 、prettier 相关默认设置。但是需要额外的配置,因为 vite 是面向 web 应用设计的,你用来开发库,其构建目标就和默认情况发生偏差,你需要添加额外的构建配置。
前面楼层提到的 package.json 里面的`exports`,`import`,`types`等字段,应该由构建工具来修改,不建议手动修改。
ESM 现在是主流的模块解决方案,webpack 这样的旧时代构建工具很少被使用了,构建工具有 rollup ,也包括前面提到的 tsup ,vite 是基于 rollup 的,所以你没必要引入额外的构建工具,当然你硬要用 tsup 也不会存在什么问题,只是 rollup 与 vite 集成度更高而已。
如过你使用 rollup ,就需要添加 rollup 的相关配置来构件库。你需要阅读 rollup 官网文档,以及 vite 官网的 rollup 部分的文档,了解如何添加构建库的配置。
这就是你这问题的相关解决思路。
个人只对桌面 GUI 跨平台有些了解。
wails 和 tauri 都是基于桌面系统自带的 webview ,优点是不需要像 electron 那样每个应用带一个运行时,但较老的 Windows 系统,得自带运行时的安装包或者下载器,或者让用户手动安装运行时。webview 的缺点就是性能较差,首屏加载有 0.5s~1s 的延迟。
如果对桌面 GUI 的性能有追求,那用 flutter 不错,磁盘占用、内存占用、性能都很优秀。
Compose Multiplatform 本质上就是 Java GUI ,试用过两个基于其开发的产品,内存占用和磁盘占用表现较差。
用过第一代 surface pro ,后来当泡面盖子了,对我个人而言没啥用。触控笔对于写程序的用处不大,其实际体验对于使用者的手写能力要求较高(比如专业绘画等),对个人而言不如键盘打字。
个人还是习惯传统笔记本,追求键盘手感。
不喜欢就放弃呗,又不是非学不可。我就尝试过 1 个月,后面就放弃了。
blake 部分原文指的应该是对用户明文进行 hash ,而你所指的是对派生密码进行 hash ,所以强度来讲确实没什么问题。
火狐的办法确实巧妙,因为它是拿用户明文生成的加密密钥,自然是不能上传明文密码,所以最好在客户端使用 KDF 。
@
chenjia404 我懂你的意思了,因为 hash 函数的特点,1:N 这种对应关系,其中 N-1 个是无效值,即碰撞就是白费力气,那你的方案确实有趣。当然由于没有知识背景,我无法判断这种说法是否正确。
自从加盐哈希流行以后,安全界为啥还要建议使用 Bcrypt 、argon2 这些密码存储专用的哈希算法呢,无非是担心现有及以后的硬件暴力破解通用哈希算法太快。至于彩虹表,已经是上个过时版本了。
而你认为设计很好的点“ auth_hash 与 user 并非一一对应”,反而是最大的漏洞,因为它们其实是 N:1 的关系( N 指 auth_hash 表的大小),意味着暴力破解时,可以碰撞的哈希值有 N 个。“这个表数据越多越好”,意味着破解的难度越低。
很多人以为,密码存储哈希值是避免用户的明文密码泄露,其实不然,是避免应用的明文密码泄露。如果是前者,那客户端密码 hash 早就流行开来了,还不至于成为开发者之间的争论点。对于后者,客户端密码 hash 毫无作用。
你这错得有点离谱,密码存储引入 hash 的历史原因有两个:
- 避免数据泄露,导致攻击者获得本应用的所有账户和明文密码
- 避免被拿去撞库
第一个是重中之重,影响了公司的生死存亡。第二个只能说是附带的,毕竟自己活着才最重要。
因为第一个原因,所以密码存储才经历了通用哈希算法、通用哈希算法+盐、标准密码哈希算法的技术演进。
而客户端 hash ,仅有的作用就是避免第二个原因,尚且属于程序员群体的争论点,并非最佳实践,大部分互联网公司都没有这么做。
现在你为了一点性能,将标准密码哈希算法丢到客户端,而服务端居然使用上古的通用哈希算法解决方案,连盐都舍不得加,不是捡了芝麻丢了西瓜。
事实上,你只要阅读一下你所推崇的 blake2 的官网,就会看到它根本不推荐将 blake2 用作密码存储:“Q: So I shouldn't use BLAKE2 for hashing user passwords?”,而是建议使用标准密码哈希算法。
你说的文件作为密码(或者说种子),KeePass 很早就支持用文件(Key File)了。
你如果是说文件、MD5 、base64/md5/sha256/自己的加密方案都属于生成主密码的前置步骤,那你加入的前置步骤越多,遗忘的概率越大。
“加密的方案只有自己知道”,从学院的角度来讲这会降低安全性,从现实的角度来讲,军用加密算法是非公开的、魔改的。但要实现类似后者的效果,你得有较深的密码学背景,不然就是前者描述的那类人。