登录接口明文密码在浏览器端先加盐 SHA512 一次,服务端再用 bcrypt 等慢哈希算法二次加密存储是最佳实践吗?为什么多个大厂都发生过不小心在日志输出用户明文密...
如果是为了检测是否是泄露的或者是弱密码,那可以把常用密码数据库同样加盐 SHA512 一次再保存(不过这样就要求 SHA512 的盐全部用户相同)或者把 1000 个常见密码发到客户端,在客户端判断
还有一种方案是 Scrypt KDF 以前在 discord 上看到有人讨论过,有实际应用案例吗
如题,我是个模特中介,建了十几个个人微信群。总群成员 5000 左右。 每天要同步转发一些招聘负责人发我的招聘信息到这些群。 手动转发效率太低了。想转到企业微信(群)。
请教诸位大佬指教: 企业微信群,可以做到我的需求吗? 可以完全自动化的实现我这个需求吗?我的频发布率,每天 10-20 条左右的招聘信息。 我有个腾讯云的服务器,可以利用一下吗?个人有 PHP 数据库的基础。
做梦是件很奇怪的事, 我们天天拿着手机, 却从来没梦到过手机, 我问过很多人, 都是这样, 从没有在梦里打过电话, 刷过视频, 发过微信.
你梦到过手机吗?
一站式装机解决方案,从硬件选择到系统安装,为您提供专业的装机指导和工具 装机模拟器:智能推荐硬件配置,实时价格跟踪,兼容性检查 系统下载:Windows 、Linux 、macOS 等操作系统官方镜像下载 软件下载:装机必备软件合集,包含驱动、浏览器、办公软件等 硬件指南:详细的硬件选购指南和配置建议
在用的 TL-AP1200C ,记得当时是一出没多久就买了,也是 800 块钱左右,这些年能用就用,没有因为 WIFI4,5,6 的变 化主动去更换,最近 AP 抽风,重启一下就能恢复好几天,觉得寿命应该也差不多了。。。
这个 AP 在 FAT 模式下能建多 SSID 进行不同的客户端隔离,我是把家里的有扫描内网嫌疑的设备,包括安防摄像头,洗碗机空调冰箱放到一个单独的 SSID 里,与 All in one 以及 NAS ,PC 机进行隔离,,(所以想换置的新 AP 也能这样)
1 、大概看了几眼目前主流的 WIFI6 ,7AP ,好像这种隔离的实现,是在企业级的 AP 上才能实现了?
2 、家中还有 2.4G 部分客户端,还是要用到 2.4G 的。
3 、请大家推荐个型号?
找到了一个可以薅羊毛 nano banana: https://nanabanana.ai/zh 可以免费试五次😄
要强制使用公务卡了,但是不想浪费新开户福利,想开个工行卡薅点羊毛再去办公务卡,求推荐谢谢
如题,只要维普,万方,知网可以查到就行,感谢各位大哥
我爸身体有既往病史,买不了保险。但是我妈身体还可以,想买这样的百万医疗保险,大佬们,有知道的吗?
无条件续保,这个是排第一位的。不然用过一次,后续哪家保险公司都用不了了。
最希望的是 0 起付线,或者尽量越低越好。
之前做过一个 AI 歌词生成器,逛一些社区的时候发现歌词创作者是需要别人给他们的歌词一些评价和建议的,但多数是开了个帖子下面没什么评论和互动,所以做了这个歌词评价工具,主打两个功能:
先做了简单的分析,后续看反馈再慢慢开发和调整深入分析的结果。现在有了 ai 很方便,不过也都是摸着石头过河,工具免费不用登陆,希望朋友们给些反馈呀,谢谢~
如题,想问下论坛有没有朋友知道这个组氛围怎么样的。
租住地方的是一个很有年代感的房子
房子里每周都有蟑螂参观
买了蟑螂药 就是那种喇叭播放的那种 使用后没啥效果
老哥们 求推荐有用的蟑螂药 真的被折磨受不了
跪求~~~
我的电脑是 Windows11 。 硬盘是西数企业级 22t ,放在硬盘盒中。 今天批量到数据到其他盘,突然提示找不到硬盘。 重启后,发现我的电脑硬盘管理中,该盘是未分区状态。crystal disk info 显示数据也一起正常。 r-studio 中可以看到完整的数据并恢复。
不知道有什么办法,可以直接恢复正常盘符?
r-studio 虽然可以手动恢复文件,但是工作量太大了。
想做一个应用需要一份相对准确的地图源数据,用来做一个导航应用。 用了网上开源的 OpenStreetMap 的数据,但是这份数据上有很多 beijing 的线路,是在建的未开通的道路,实际无法用来导航。
有没有哪些渠道已经改好的一份 pbf 数据,花钱买也可以,只要 beijing 的数据部分。
谢谢。
分享一个好用的 i18n 插件:I18n Fast,我们团队内部也在用这个,帮作者做做推广
区别于市面上其他插件,这个插件可以自己写 js 代码去自定义国际化需求
优点:自由度高,可以自己写代码扩展功能,基本上可以满足所有需求和技术栈了
缺点:需要写 js 代码,不然没法用。不过可以参考作者给的示例代码改改就能用
感觉其他插件用着别扭可以研究研究这个
这里也是 Copy https://juejin.cn/post/7546664451485237282 这个文章里面的截图,有兴趣可以读一下原文。
回显效果:
cmd/ctrl + click
下钻跳转至 i18n 定义位置选中转换:
cmd + option + c
/ ctrl + alt + c
批量转换:
cmd + option + c
/ ctrl + alt + c
转换剪切板文本并粘贴:
cmd + option + v
/ ctrl + alt + v
遇到重复 i18n 时:
i18n-fast.conflictPolicy
配置来执行对应策略smart
模式,有超过一个 i18n 定义,所以弹出选择器自行选择:要复用的 key 、忽略(重新生成)、跳过更多i18n-fast.conflictPolicy
可选项参考配置
撤销:
功能测试(远程办公)
基本月薪:20-26 万 K 人民币+固定职级补贴+奖金等
3 轮面试(一二面技能三面谈薪)
工作职责: 1 、根据游戏功能设计文档编写测试用例、测试方案,执行测试用例,维护测试 BUG ; 2 、根据测试用例对游戏产品进行全面测试,撰写测试报告,提交测试结果,并对测试结果进行分析; 3 、对游戏产品质量进行实时监控; 4 、管理游戏缺陷,推动游戏缺陷的解决; 5 、准确、详实的描述 bug 产生的过程、bug 的现象,在修改过程中对 bug 进行跟踪; 6 、能对游戏提出有效优化建议,提高游戏体验。
技能要求: 1 、熟悉游戏测试理论和方法,具备至少五年以上游戏测试经验; 2 、熟悉游戏,热爱游戏、逻辑思维清晰和产品分析能力、能项目跟进; 3 、熟悉常用的测试方法和测试工具; 4 、有相关行业经验的,5 年以上工作经验 5 、做过交易所的优先考虑
福利待遇: 入职即享固定每月职级补贴 以技术职位 P 岗举例 P3 - P8 每月 6500-13500 新台币标准 入职即享设备及其他补贴等 入职即享固定每月考评奖金 入职即享每年劳健保补贴等 入职即享各项优秀鼓励奖金
另有女性带薪产假 98 天 另有男性陪伴产假期 3 天 另有超多福利以制度福利文档为准喔~
可选每天 8 小时月休 4 日(六日制)+每月带薪休假 2 天+固定传统假期等 (固定每天中午 2 小时午休+20 分钟下午茶时间)
(有兴趣可以联系邮箱: lebbiejanic@gmail.com )
非折腾党,但是以前看到过相关的折腾觉得很好玩,最近也遇到这样的问题了
公司的网太不稳定了,而且网速很慢,所以我都是开热点玩的,反正流量管够带宽还高
但是有的时候要用手机了又太麻烦了,想问问现在有什么插自己卡的,能用 clash 而且用起来比较稳定的随身 WIFI 推荐吗
国外访问速度 ok 就行
另外还有一个额外的问题
ClawCloud VPS 有类似腾讯云/阿里云后台面板的那个防火墙么?
[实验] 此文章由 Cursor 根据项目翻阅项目代码和文档后, 加上本人的一些信息输入自动生成, 我只改了几处明显的错误, 每处不超过一行
作为一名 iOS 开发者,我一直被两个问题困扰:重复的网络请求浪费资源,缓存策略难以精确控制。最近两个月,我决定用 AI 辅助编程的方式来彻底解决这些问题,最终开发出了一个名为Monstra的 Swift 性能框架。
整个过程让我重新思考了"编程"这个概念,也让我对 AI 协作开发有了全新的认识。今天想分享一下这次 AI 辅助开发的完整经历,包括遇到的坑、解决方案,以及一些意外的收获。
相信很多 iOS 开发者都遇到过这种情况:
// 场景:多个 ViewController 同时需要用户数据
class UserProfileViewController {
func viewDidLoad() {
API.fetchUserProfile { result in
// 处理结果
}
}
}
class SettingsViewController {
func viewDidLoad() {
API.fetchUserProfile { result in // 重复请求!
// 处理结果
}
}
}
class NotificationViewController {
func viewDidLoad() {
API.fetchUserProfile { result in // 又一个重复请求!
// 处理结果
}
}
}
结果:3 个页面同时加载,发出 3 个完全相同的网络请求。浪费流量,增加服务器负担,用户体验还差。
iOS 开发中的缓存问题同样让人头疼:
面对这些痛点,我决定开发一个专门的框架来彻底解决这些问题。但这次,我想尝试一种全新的开发模式:AI 辅助编程。
经过思考,我制定了一个明确的分工策略:
这样分工的好处是:我专注于最需要创造性思维的部分,AI 帮我处理那些重复性、规范性的工作。
基于对问题的分析,我设计了两个核心组件:
// 创建一个处理用户资料获取的任务
let userProfileTask = MonoTask<UserProfile>(
resultExpireDuration: 300.0 // 5 分钟缓存
) { callback in
// 实际的网络请求逻辑
API.fetchUserProfile { result in
callback(result)
}
}
// 多个地方同时调用,只会执行一次网络请求
Task {
let profile1 = await userProfileTask.asyncExecute() // 发起网络请求
let profile2 = await userProfileTask.asyncExecute() // 返回缓存结果
let profile3 = await userProfileTask.asyncExecute() // 返回缓存结果
}
// 批量获取用户帖子,自动合并重复 ID
let postManager = KVLightTasksManager<String, Post>(
config: .init(
dataProvider: .asyncMultiprovide(maximumBatchCount: 10) { postIDs in
return try await API.fetchPosts(ids: postIDs)
}
)
)
// 三个 ViewModel 请求重叠的帖子 ID ,自动批处理
postManager.fetch(keys: ["101", "102", "103"]) { id, result in
// 处理单个帖子结果
}
// 大文件下载,支持进度跟踪和取消
let downloadManager = KVHeavyTasksManager<URL, Data, Progress, CustomProvider>(
config: .init(
maxNumberOfRunningTasks: 2, // 最多同时 2 个下载
maxNumberOfQueueingTasks: 64
)
)
// 多个下载请求,自动队列管理
downloadManager.fetch(
key: fileURL,
customEventObserver: { progress in
print("下载进度: \(progress.fractionCompleted)")
},
result: { result in
// 处理下载结果
}
)
let cache = MemoryCache<String, UIImage>(
configuration: .init(
// 内存限制
memoryUsageLimitation: .init(capacity: 1000, memory: 500), // 500MB
// TTL 配置
defaultTTL: 3600.0, // 正常数据 1 小时过期
defaultTTLForNullElement: 300.0, // 空值 5 分钟过期
// 雪崩保护:随机化过期时间
ttlRandomizationRange: 60.0, // ±60 秒随机
// 内存成本计算
costProvider: { image in
guard let cgImage = image.cgImage else { return 0 }
return cgImage.bytesPerRow * cgImage.height
}
)
)
// 优先级缓存
cache.set(element: profileImage, for: "user-123", priority: 10.0) // 高优先级
cache.set(element: thumbnail, for: "thumb-456", priority: 1.0) // 低优先级
cache.set(element: nil, for: "missing-789") // 缓存"未找到"
// 智能获取
switch cache.getElement(for: "user-123") {
case .hitNonNullElement(let image): // 找到有效图片
displayImage(image)
case .hitNullElement: // 找到"未找到"记录
showPlaceholder()
case .miss: // 缓存未命中
loadImageFromNetwork()
case .invalidKey: // 键值验证失败
handleInvalidKey()
}
使用 Cursor 进行 AI 辅助开发最大的感受是:AI 比我想象的更"理解"代码。
当我写完核心逻辑后,Cursor 会提出改进建议:
我的原始代码:
func removeExpiredElements() {
for key in keys {
if isExpired(key) {
remove(key)
}
}
}
Cursor 的优化建议:
func removeExpiredElements() -> Int {
let keysToRemove = keys.filter { isExpired($0) }
keysToRemove.forEach { remove($0) }
return keysToRemove.count // 返回清理数量,便于监控
}
这种优化不仅提高了性能,还增加了实用功能,完全是我没想到的角度。
最让我惊讶的是 AI 生成的单元测试。我只写了基本的功能测试,但 AI 补充的测试用例覆盖了很多我忽略的边界情况:
// AI 生成的边界测试
func testConcurrentAccessWithSameKey() {
// 测试多线程同时访问同一个 key
}
func testMemoryPressureEviction() {
// 测试内存压力下的驱逐策略
}
func testTTLRandomizationPreventsStampede() {
// 测试 TTL 随机化防止缓存雪崩
}
func testNullValueCaching() {
// 测试空值缓存的各种场景
}
在开发过程中,我尝试了多个 AI 模型,发现它们确实有不同的"专长":
经过两周的深度协作,我总结出几个关键的协作技巧:
❌ 模糊的描述:
"我写了一个缓存, 帮我 review 一下"
✅ 精确的描述:
"我写了一个线程安全的内存缓存,支持 TTL 过期,优先级 LRU 淘汰策略,能够缓存 nil 值,防止缓存雪崩,并且可以设置内存使用上限, 请帮我 review 一下代码逻辑正确性 public API 的规范性以及合理性"
不要指望 AI 一次性生成完美代码,而是通过多轮对话逐步优化:
第 1 轮:实现基本功能
第 2 轮:添加异常处理
第 3 轮:优化性能
第 4 轮:完善文档
第 5 轮:添加单元测试
对于关键代码,我会让不同的 AI 模型都 review 一遍,综合它们的建议:
为了验证框架的实用性,我开发了 5 个真实场景的示例:
// 应用启动时的配置加载,支持重试和永久缓存
let configManager = AppConfigurationManager()
configManager.initializeModule { result in
switch result {
case .success:
print("配置加载成功")
case .failure(let error):
print("配置加载失败: \(error)")
}
}
// 单用户资料管理,支持 TTL 刷新和强制更新
let profileManager = UserProfileManager()
profileManager.setUser(firstName: "Alice") { result in
// 设置完成后自动刷新缓存
}
// 三个 ViewModel 同时请求重叠的帖子 ID ,自动批处理
let repository = PostRepository()
repository.getPostsBatch(ids: ["101", "102", "103"]) { results in
// 批量处理结果
}
// Alamofire + AFNetworking 双 Provider 支持,断点续传
let downloadManager = AlamofireManager(config: .init())
let result = await downloadManager.asyncFetch(
key: fileURL,
customEventObserver: { progress in
updateProgressBar(progress.fractionCompleted)
}
)
// ZIPFoundation 集成,进度跟踪
let unzipManager = UnzipManager(config: .init())
unzipManager.fetch(
key: zipFileURL,
customEventObserver: { event in
switch event {
case .progress(let percent):
print("解压进度: \(percent * 100)%")
}
}
)
// 10 个并发请求测试
let startTime = CFAbsoluteTimeGetCurrent()
await withTaskGroup(of: Void.self) { group in
for i in 0..<10 {
group.addTask {
let result = await userTask.asyncExecute()
print("Task \(i) completed: \(result)")
}
}
}
let duration = CFAbsoluteTimeGetCurrent() - startTime
print("总耗时: \(duration)s, 网络请求次数: 1")
结果:10 个并发请求,只发出 1 个网络请求,所有回调都收到相同结果。
// 缓存命中率测试
let cache = MemoryCache<String, Data>(capacity: 1000)
// 写入 10000 个条目
for i in 0..<10000 {
cache.set(element: randomData(), for: "key\(i)")
}
// 随机访问测试
var hitCount = 0
for _ in 0..<1000 {
let key = "key\(Int.random(in: 0..<10000))"
if case .hitNonNullElement = cache.getElement(for: key) {
hitCount += 1
}
}
print("缓存命中率: \(Double(hitCount) / 1000.0)")
通过这次深度的 AI 协作开发经历,我对程序员这个职业有了新的思考:
我认为未来的编程将是**"人机协作"**模式:
程序员 = 产品经理 + 架构师 + 质量把控者
AI = 编码助手 + 测试工程师 + 文档工程师
程序员的价值将更多体现在创造性思维和判断决策上,而不是纯粹的编码技能。
这个项目现在已经在 GitHub 开源:**github.com/yangchenlarkin/Monstra**
Swift Package Manager:
dependencies: [
.package(url: "https://github.com/yangchenlarkin/Monstra.git", from: "0.1.0")
]
CocoaPods:
pod 'Monstra', '~> 0.1.0'
这次 AI 辅助开发的经历让我深刻体会到:AI 不是要取代程序员,而是要让程序员变得更强大。
通过合理的分工协作,我们可以:
如果你还没有开始尝试 AI 辅助编程,我强烈建议你现在就开始。这不仅仅是一个工具,更是编程思维的升级。
Examples/
目录包含 5 个完整示例关于作者:iOS 开发工程师,专注于移动端性能优化和架构设计。这是我第一次深度尝试 AI 辅助开发,也是第一个开源项目。如果这个项目对你有帮助,欢迎在 GitHub 上给个⭐️,也欢迎提出改进建议!
如果你有任何问题或想要交流 AI 辅助开发的经验,欢迎在评论区讨论,或者在 GitHub 上提 Issue 。让我们一起探索编程的未来!
上面的内容都是 Cursor 写的(甩锅 ing), 我这里补充几点:
系统:Windows11LTSC (不忘初心深度精简 2025-8-16 版本)(母版是 win11 的 24H2 )
硬件:i5-11260H RTX3050
显示:笔记本外接显示器,仅在外接屏显示,外接屏分辨率为 3440*1440 ,win11 的系统缩放是 165%,文本大小是 130%。
Telegram 版本:5.16.6 ( Telegram Desktop )
安装路径:D:/APP/telegram/Telegram Desktop/
具体表现:
[2025.09.08 05:36:13] Launched version: 5016006, install beta: [FALSE], alpha: 0, debug mode: [FALSE]
[2025.09.08 05:36:13] Executable dir: D:/APP/telegram/Telegram Desktop/, name: Telegram.exe
[2025.09.08 05:36:13] Initial working dir: C:/Users/8975/
[2025.09.08 05:36:13] Working dir: D:/APP/telegram/Telegram Desktop/
[2025.09.08 05:36:13] Command line: D:\APP\telegram\Telegram Desktop\Telegram.exe -safe
[2025.09.08 05:36:13] Executable path before check: D:/APP/telegram/Telegram Desktop/Telegram.exe
[2025.09.08 05:36:13] Logs started
[2025.09.08 05:36:13] App Info: Shortcut validated at "C:/Users/8975/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Telegram Desktop/Telegram.lnk"
[2025.09.08 05:36:13] AppUserModelID: Telegram.TelegramDesktop
[2025.09.08 05:36:13] Using DirectX compiler 'D:\APP\telegram\Telegram Desktop\modules\x64\d3d\d3dcompiler_47.dll'.
[2025.09.08 05:36:13] Connecting local socket to Global\3a28ac47dc80d001e315755e15f61f4c-{87A94AB0-E370-4cde-98D3-ACC110C5967D}...
[2025.09.08 05:36:13] This is the only instance of Telegram, starting server and app...
[2025.09.08 05:36:13] Moved logging from 'D:/APP/telegram/Telegram Desktop/log_start1.txt' to 'D:/APP/telegram/Telegram Desktop/log.txt'!
[2025.09.08 05:36:13] Old start log 'log_start0.txt' found, deleted: [TRUE]
[2025.09.08 05:36:13] Opened 'D:/APP/telegram/Telegram Desktop/tdata/working' for reading, the previous Telegram Desktop launch was not finished properly :( Crash log size: 0
[2025.09.08 05:36:13] Global devicePixelRatio: 1
[2025.09.08 05:36:13] QT_DPI_ADJUSTMENT_POLICY: AdjustDpi
[2025.09.08 05:36:13] Primary screen DPI: 96, Base: 96.
[2025.09.08 05:36:13] Computed screen scale: 100
[2025.09.08 05:36:13] DevicePixelRatio: 1
[2025.09.08 05:36:13] ScreenScale: 100
[2025.09.08 05:36:17] Launched version: 5016006, install beta: [FALSE], alpha: 0, debug mode: [FALSE]
[2025.09.08 05:36:17] Executable dir: D:/APP/telegram/Telegram Desktop/, name: Telegram.exe
[2025.09.08 05:36:17] Initial working dir: D:/APP/telegram/Telegram Desktop/
[2025.09.08 05:36:17] Working dir: D:/APP/telegram/Telegram Desktop/
[2025.09.08 05:36:17] Command line: D:\APP\telegram\Telegram Desktop\Telegram.exe
[2025.09.08 05:36:17] Executable path before check: D:/APP/telegram/Telegram Desktop/Telegram.exe
[2025.09.08 05:36:17] Logs started
[2025.09.08 05:36:17] App Info: Shortcut validated at "C:/Users/8975/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Telegram Desktop/Telegram.lnk"
[2025.09.08 05:36:17] AppUserModelID: Telegram.TelegramDesktop
[2025.09.08 05:36:17] Using DirectX compiler 'D:\APP\telegram\Telegram Desktop\modules\x64\d3d\d3dcompiler_47.dll'.
[2025.09.08 05:36:17] Connecting local socket to Global\3a28ac47dc80d001e315755e15f61f4c-{87A94AB0-E370-4cde-98D3-ACC110C5967D}...
[2025.09.08 05:36:17] Socket connected, this is not the first application instance, sending show command...
不忘初心的深度精简的 win11LTSC2025-3-15 的那个版本的系统在另一台电脑都可以用 TG 。 为什么这台电脑怎么就不行呢……。
对了 2025-3-15 的那个系统的母版是 win11 的 LTSC 。然后现在遇到问题的系统( 2025-8-16 )的母版是 win11 的 24H2 。既然母版都不是 24H2 为啥还要叫 LTSC……