Levix 空间站
884 subscribers
211 photos
10 videos
20 files
1.15K links
主要分享前端、AI 以及前沿科技资讯。

🚫 禁止人身攻击:请在评论区保持尊重和友好,避免不当言论和负面互动。

🚫 禁止违规内容:请勿发布任何黄赌毒、宗教极端、政治敏感或其他违反社区规定的内容。
主要分享前端以及业界科技资讯。

🚫 禁止广告与刷屏:为了维护良好的交流环境,请不要进行任何形式的广告推广、黑产活动、刷屏行为及发布不适内容。

🔒 保护个人信息:请注意个人隐私和网络安全,不要在评论区泄露个人信息或点击不明链接。
Download Telegram
"Bug Squash"面试:一种被低估的软件工程面试方法

1. 日常开发的真实反映:这种面试方式模拟了软件开发中的常见任务,即在不熟悉的代码库中寻找并修复错误。

2. 趣味性:与密室逃脱类似,解决错误带来的成就感和乐趣是软件工程中最受欢迎的部分之一。

3. 自我评估的便利性:候选人可以清晰地自我评估进度,这种透明度提供了比传统面试更好的体验。

4. 适用于快速增长的公司:在员工平均任期较短的公司中,处理不熟悉的代码是常态。

5. 展现经验候选人的优势:熟练使用调试工具的候选人可以通过这种方式展现他们的技能。

6. 区分作弊与调试技巧:即使事先知道错误,也需要展示可重复和科学的调试方法。

7. 重视代码阅读与理解:与编写新代码相比,阅读和理解现有代码在开发中占据了相当的时间。

8. 无需特别准备:这种面试测试的是候选人在其整个职业生涯中每天都在练习的技能。

挑战与限制:

1. 面试题目的编写:需要精心设计难度适中的错误,这需要校准测试。

2. 多语言支持:需要为不同的编程语言准备面试题目,以避免因不熟悉工具而影响候选人表现。

3. 跨平台兼容性:项目需要在不同操作系统上都能顺利构建和测试。

4. 构建和测试的简便性:考虑到候选人可能使用的是老旧的设备,项目需要易于构建和测试。

5. 持续维护:随着语言和依赖项的更新,面试项目需要定期维护以避免过时。

6. 依赖安装:候选人需要能够在自己的设备上安装项目依赖。

结论:

尽管存在挑战,"Bug Squash"面试是一种有趣且能测试日常软件工程中常见技能的有效方式。它应作为面试流程的一部分,与其他类型的面试一起使用,以全面评估候选人的能力。

个人感觉上来就是 2 道 Leetcode 中等算法题目这种就应该被淘汰,更多应该基于实际的业务出发来出一些题目😂

#面试

https://blog.jez.io/bugsquash/
Google AI Edge 的 MediaPipe 框架通过重新设计模型加载代码,成功在浏览器中运行了超过 7B 参数的大型语言模型(LLMs)。

#Google #AI #LLM

https://research.google/blog/unlocking-7b-language-models-in-your-browser-a-deep-dive-with-google-ai-edges-mediapipe/
Speculative RAG 是一种新颖的检索增强型生成框架,它利用较小的专家型语言模型(LM)生成草稿文本,然后由较大的通用型语言模型进行验证和选择最佳草稿。这种框架在准确性和效率方面都达到了最先进的水平。

大型语言模型(LLMs)在响应用户查询的服务中越来越普遍,但它们在处理需要最新信息或鲜为人知的事实的知识密集型问题时,常常会出现事实错误或生成无法通过给定输入验证的幻觉内容。例如,当用户询问最新 Google Pixel 手机的新功能时,LLM 可能会生成过时或不准确的信息。

检索增强型生成(RAG)作为一种解决方案,通过检索与信息相关的文档并将其整合到生成内容中,有效减少了知识密集任务中的事实错误。然而,处理长文档需要更复杂的推理,并且可能会显著延迟响应时间。因此,在 RAG 中平衡效率和效果已成为研究的重点。

Speculative RAG 框架通过将计算负担转移到专家型 RAG 草案生成器上,该生成器是针对 RAG 进行微调的小型语言模型,作为现有通用型 LM 的高效且健壮的 RAG 模块。它遵循推测性解码中描述的草案方法,通过使用较小的模型并行快速生成多个后续标记(例如,单词或词段),并与基础模型并行验证,以提高RAG系统的效率和效果。

实验结果显示,Speculative RAG 在 TriviaQA、MuSiQue、PubHealth 和 ARC-Challenge 基准测试中,与标准 RAG 系统相比,在准确性和延迟方面都有显著提升。例如,在 PubHealth 数据集上,Speculative RAG 比最佳基线 Mixtral-Instruct-8x7B 提高了 12.97%。

Speculative RAG 通过将 RAG 任务分解为草案和验证两个独立步骤,将起草的重任委托给小型专家型 RAG 起草生成器,而验证则使用大型通用型 LM 完成。从不同的文档子集并行生成多个草稿,提供了高质量的答案候选,从而在最终输出生成的质量和速度上都有了显著提升。

#AI #Google #GenAI

https://research.google/blog/speculative-rag-enhancing-retrieval-augmented-generation-through-drafting/
恶意广告(malvertising)是一种网络犯罪形式,它通过数字广告传播恶意软件。近年来,这种攻击手段已经演变成一种特别针对开源软件的新型威胁。根据 OpenLogic 的报告,越来越多的企业增加了对开源软件的使用,这为恶意广告提供了肥沃的土壤。

用户在搜索开源软件下载时,可能会无意中点击了伪装成合法链接的广告,从而下载了恶意软件。例如,攻击者可能会购买 Google 广告位,使用类似官方的网址(typosquatted URL)和网页设计来误导用户下载如 Vidar Stealer 这类信息窃取软件。

恶意广告对企业安全的威胁不仅能够窃取个人信息,还能够通过社会工程学手段获取企业登录凭证,进而访问企业系统。此外,恶意广告往往能够绕过传统的检测方法,因为它们通过增大文件大小来规避自动扫描,而且用户通常不会对大文件产生怀疑。

为了应对这一威胁,提出了几点建议,包括创建恶意顶级域名(TLDs)的阻止列表、实施应用程序白名单流程、更新终端用户安全培训,以及使用 1Password Extended Access Management 等工具来检查设备安全性。

#安全

https://blog.1password.com/malvertising-on-google-ads/
JavaScript 日期处理即将迎来重大改进,其中最引人注目的是 Temporal 提案。该提案通过 FullCalendar 团队提供的 polyfill 已经可以提前使用。Temporal API 的一大优势是引入了原生的 "带时区的日期时间(Zoned Date Time)" 对象。

在人类交流中,日期通常不包含时区信息,例如 "2024年8月4日上午10:30"。但计算机处理 JavaScript 的 Date 对象时,实际上是处理纯数字,这导致日期的原始语义丢失。JavaScript 中的日期实际上是 POSIX 时间(忽略闰秒),而非 UTC 时间。

Temporal API 引入了 Temporal.ZonedDateTime 对象,专门用于表示带有对应时区的日期和时间。例如,一个时间戳可以对应多个人类可读的日期,这取决于时区。例如,同一个时间戳在澳大利亚、马德里和美国可能对应不同的当地时间。

Temporal API 的优势

1. 创建日期:Temporal API 在创建日期时可以轻松处理时区,包括夏令时(DST)的棘手情况。

2. 日期比较:ZonedDateTime 提供了静态方法 compare,可以比较两个日期。

3. 内置属性:如 hoursInDay 属性,可以返回特定时区中一天的实际小时数。

4. 时区转换:通过 .withTimeZone 方法轻松改变 ZonedDateTime 的时区。

5. 日期运算:支持日历算术或简单持续时间的加减,自动调整夏令时。

#JavaScript #ECMAScript #新特性 #Date

https://docs.timetime.in/blog/js-dates-finally-fixed/
这个 Cobalt 工具很极简不错,可以下载绝大多数社交媒体的视频和音频,比如说 Twitter、Youtube、YoutubeMusic 上面的视频啥的,直接输入对应地址,点击直接下载,没有广告没有数据跟踪。

来源:潮流周刊

#Tools

https://cobalt.tools/
在现代工作文化的忙碌喧嚣中,我们很容易陷入全天候的工作模式。我们常常逼迫自己到极限,却忘记了需要适时退后一步,充电以发挥最佳状态。就像一块电量岌岌可危的电池,等到彻底耗尽可能为时已晚。休息并非软弱的表现,而是长期耐力与成功的策略。

1. 定期休息。每隔一两个周末就给自己充充电。

2. 时不时地远离数码设备,进行一次数字排毒。

3. 找到适合你的休息方式和充电活动。我的是亲近自然和旅行。

4. 将你的职业生涯视为一场马拉松,而非短跑冲刺。

5. 将个人与工作里程碑的完成与休息时间对齐,以享受双重益处。

6. 定期休息有助于保持耐力、提高生产力、保持头脑清晰并预防过度疲劳。

#思考

https://thetshaped.dev/p/importance-taking-breaks-recharge-batteries
10 种方法来更好地组织和设计 React 应用程序,以提高代码的可维护性和可扩展性。

其中第 6 点个人不是很认同,在一个庞大的项目过渡使用绝对路径的话会导致各个业务模块之间耦合严重、互相引用等问题(不同版本间的开发人员能力问题),完全靠人来遵守,如果想单独重构某个模块将会变得非常痛苦。🤣

1. 按领域责任分组组件:避免仅按技术角色分组,而应按页面或模块的领域责任组织文件和文件夹。

2. 将组件放入文件夹:对于复杂组件,应将其子组件组织到单独的文件夹中。

3. 使用绝对路径:使用绝对路径可以简化项目导航和维护,特别是在项目规模扩大时。

4. 使用公共模块:避免在项目中不同位置散布通用工具和组件,应集中存储以提高管理和重用性。

5. 抽象外部库和模块:通过自定义组件包装第三方库或模块,以保持应用内一致的 API 并简化未来的替换工作。

6. 管理模块/页面间的依赖关系:集中常用资源到共享的公共模块中,减少代码重复,明确模块和页面的依赖。

7. 保持代码靠近使用地点(LoB):根据行为局部性原则,将代码组织得更接近其在应用中的使用位置,以提高可
读性和可维护性。

8. 小心使用工具函数:工具函数应保持纯净和特定目的,避免与业务逻辑混合,以提高可重用性。

9. 小心处理业务逻辑:避免将业务逻辑直接集成到 UI 组件中,应使用自定义钩子将业务逻辑与 UI 分离。

10. 固定依赖版本:在 package.json 中指定确切的依赖版本,而不是使用版本范围,以确保项目中使用的是完全相同的包版本。

#React

https://thetshaped.dev/p/10-ways-organize-and-design-react-application
重构是软件开发中不可或缺的一环,但实施时需审慎考量,尊重现有代码库及团队协作动态。重构的目标在于优化代码内部结构,同时保持其外部行为不变。最佳的重构往往对终端用户是不可见的,但却能显著简化开发人员的工作。它们在不破坏系统整体性的前提下,提升了代码的可读性、可维护性和效率。

#重构

https://levix.notion.site/Good-Refactoring-vs-Bad-Refactoring-841cfa6ab14441b4a9f00e8fc314a905
HumbleUI 是一个基于 Clojure 的桌面 UI 框架,它致力于提供一个无需 Electron 和 JavaScript,纯粹基于 JVM 和原生代码的解决方案。 该项目的目标是构建高质量的桌面 UI,使开发者能够快速构建跨平台的应用程序,同时保持 Clojure 语言的优势。

所以,大家用 Electron 多还是用 Tauri 多?😄

#Tools

https://github.com/HumbleUI/HumbleUI
《50 TypeScript F*ck Ups》 是一本由 Azat Mardan 编写的指南,专注于指出 JavaScript 和 TypeScript 开发者在编码过程中可能遇到的常见错误,并提供避免和修复这些错误的技巧。

我试了一下只需要填入一个邮箱就可以免费下载,但是建议有海外银行卡的同学可以支持下作者喝咖啡。

#TypeScript

https://leanpub.com/50-ts
如何从 0 到 1 创建一个 NPM 包,这篇教程已经算是很详细了,可以了解里面用了什么库来进行辅助开发。

@arethetypeswrong/cli 库之前没在 npm 包中使用过,可以用于检查包导出是否正确,比如 package.json 中没设置 main 的路径。

#教程 #npm

https://www.totaltypescript.com/how-to-create-an-npm-package
npm-check-updates 是一个用于发现并升级项目依赖至最新版本的工具,它支持 npm、yarn、pnpm、deno 和 bun 等包管理器。该工具可以保持现有的语义化版本策略,仅修改 package.json 文件,并提供多种自定义选项以适应不同的升级需求。

#Tools

https://github.com/raineorshine/npm-check-updates
开源软件为我们提供了许多日常使用的重要工具,如 Linux、VS Code、React 等。然而,当有人获取开源代码,添加一些功能,封闭它,并开始收费时,情况变得复杂。虽然这在法律上没有问题,但是否道德上正确?如果这种情况持续发生,是否会有更多开源项目采用更限制性的许可证?

Cursor 公司利用 MIT 许可证的 VS Code,添加了 AI 功能,并开始每月收费 20 美元。虽然 Cursor 的 AI 功能超越了 GitHub Copilot,但用户支付的费用大部分给了 Cursor,而非原始软件的开发者。这引发了关于开源精神和商业利益的冲突。

一方面,像 MIT 这样的许可证允许这种使用,鼓励开发者自由使用、修改和分发代码。另一方面,当有人直接从他人的免费工作中获利时,可能会感到不公平。

开源项目通过在前人的基础上不断改进,推动了创新。然而,当公司获取开源项目,添加功能,然后封闭源代码并收费时,它们打破了创新链。例如,Redis Labs 在 2018 年将其一些附加模块从开源许可证更改为更限制性的许可证,以防止云服务提供商无偿提供 Redis 服务。

如果太多公司从开源中获利而不回馈,可能会导致更多项目采用限制性许可证,从而减缓创新并限制开源的好处。此外,风险投资对开源软件的影响也不容忽视,它既推动了创新,也为开源生态系统带来了新的挑战。

开源软件的成功在于其开放性和社区贡献精神。然而,如何在保持开源精神的同时确保项目的可持续性,以及如何公平地奖励创造价值的人,是我们需要作为社区进行讨论的问题。开源不仅仅是免费的,开发成本高昂,寻找可持续的资金模式对于开源项目的长期健康至关重要。

#开源 #思考

https://www.builder.io/blog/oss-consequences
可搜索性是一项被低估的代码指标

通过实际的编程经验,作者提出了一些实用的建议来提高代码的可搜索性,从而提升代码的可维护性。

1. 避免分割标识符:不要动态构建或分割标识符,如数据库表名、列名、对象字段和方法/函数名。例如,避免使用模板字符串动态生成表名,而应直接使用明确的表名。

2. 在不同层级使用一致的命名:不要在应用程序的不同边界处更改字段名称以匹配不同的命名方案。例如,避免将 Postgres 风格的下划线命名转换为 JavaScript 的驼峰命名。

3. 扁平结构优于嵌套结构:在处理命名空间时,尽量使用扁平化的结构而不是嵌套结构。例如,选择扁平的翻译文件结构或 React 组件结构,以便更容易地通过全局搜索找到所需的键或组件。

#技巧

https://morizbuesing.com/blog/greppability-code-metric/
AnythingLLM 是一款全栈桌面和 Docker AI 应用程序,具备完整的 RAG(检索增强生成)和 AI 代理功能,允许用户将任何文档、资源或内容转化为大型语言模型(LLM)可以在对话中使用的上下文。用户可以选择不同的 LLM 或向量数据库,并支持多用户管理和权限。

#AI #Tools

https://github.com/Mintplex-Labs/anything-llm
4945566.pdf
9.2 MB
【中英文对照版】生成式 AI 对高技能工作的影响:基于软件开发人员的三项现场实验证据

#AI

https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4945566