编程导航交流话题讨论

交流

1.3k 参与
分享

快来分享你的内容吧~

点击登录,快来和大家讨论吧~
表情
图片
话题
打卡
综合
交流
文章
问答

🐟友们,工作后,周末你们一般都干啥🤔

【入职求助贴】萌新刚入职某大厂做后端开发,目前还在试用期。最近遇到一个棘手的问题,想向大家求助一下。 入职不久,leader 给我派了一个任务。跟我说是0.5天就可以解决,我刚毕业入职,做了一个星期没有做出来。实现一个收集定时成功任务的案例。听起来好像不复杂,但我自己摸索着做了一整个星期,到现在还没达到预期效果。 这一周我基本是“边学边做”的状态,遇到卡点也会每天主动找 leader 沟通进度和疑问。但感觉 leader 平时比较忙,对我属于“放养”状态,每次沟通虽然会听我说,但给的指导比较宏观,没有特别具体地指出我代码或思路上的硬伤。 我现在有点陷入死胡同了,每天自己瞎琢磨效率很低,又不敢一直缠着 leader 问,怕他觉得我能力不行。 想请教一下各位有经验的职场前辈,有什么好的建议。 真的很想尽快度过新手期,不想一直拖团队后腿。感谢大家的时间,听劝!

图像复原和扩散模型怎么入门啊,纯新手小白啥都不会,求大佬们指点一下方向

HR问我"为什么35岁想退休",我愣住了

上周我去面了一家SaaS公司的资深前端岗,技术面都过了,最后一轮是HR面。 HR是个40多岁的姐姐,看了我的履历,开门见山: "你的履历很优秀,30岁做到阿里P6+,管理过12人团队。但我看到你之前一份工作面试的时候说想'35岁退休'——我比较好奇,你对职业规划的设想是怎样的?" 我愣住了。 ![2.png](https://pic.code-nav.cn/post_picture/2000454716282159105/YCdk9tS6nyY47ih6.webp) ## 这是个"陷阱题" 我快速判断了一下这个问题的陷阱: 如果我说"奋斗"——HR会说我空话,没诚意如果我说"35岁退休"——HR会觉得我"躺平",不稳定如果我回避——HR会觉得我没想法 我选择讲真话。 我说:"我之前的职业规划确实有一个35岁的小目标——攒够200万,然后看能不能不工作靠投资生活。但这几年做下来,我的想法变了。" HR挑眉:"哦?怎么变了?" 我说: "我发现我以为的'退休',其实是'换一种方式工作'。" "我做前端这8年,加起来写了大概30万行代码,熬过无数个大促、上线过凌晨2点的版本、被'紧急需求'折磨过。但35岁那年,我开始问自己一个问题: 我到底是想'不工作',还是想'不被消耗'?我到底是想'退休',还是想'不被不值得的事情占据时间'? 后来我想明白了——我想要的不是35岁停止工作,是35岁停止做那些'对成长没帮助、纯消耗'的工作。 比如: 一个我带3个新人就能做的基础CRUD一个产品经理反复改需求、改3版最后用回第一版的需求一个技术总监在周会上要求'加一行代码'但说不清'加这行代码是为了什么'的需求 这些事情不是不工作,是无效工作。它们填满我的日历,但不填满我的能力。 35岁之后,我想做的事是: 真正有技术深度的事(不再重复造轮子)真正能复用经验的事(让一个人干八个人的活)真正能放大杠杆的事(写一段代码,影响1000个用户 vs 影响1000000个用户) 所以'35岁退休',不是躺平,是'换一种方式燃烧'。" HR听完,笑了笑说: "你说的这个,和我们公司现在做的事挺像的。我们公司给senior以上的工程师,每周留出2天做'自由项目'时间——你可以研究新框架、可以做内部工具、可以带新人——只要不直接做业务需求,2天随便你怎么用。 我们叫它'反内卷时间'。" 我眼睛亮了。 最后,HR当场给了一句话:"我们这周内给你发offer,年薪比你现在涨5%,岗位是'高级前端架构师'——主要负责内部框架和工具链建设。" 对了。顺嘴提一句,技术大厂,前后端-测试[机会](https://jsj.top/f/o38ijj) ,全国一线及双线城市均有坑位,待遇和稳定性还不错,感兴趣看看~ ## 反思:HR面到底在考什么? 我回家路上一直在想,今天这轮HR面,为什么我能过? 答案是:HR面考的不是"你有多努力",是"你有多清楚自己"。 最常见的踩坑回答是: "我想三年内升P7"——太功利"我想35岁退休"——太消极"我想找一个稳定的平台"——没主见 真正能打动HR的回答,是"我清楚自己的边界,也清楚自己的杠杆"。 你不需要说"我是一个奋斗者"(HR听过太多遍了),你需要说: "我过去做成了什么""我发现自己的瓶颈在哪""我打算用什么方法突破""为什么贵公司是突破这个瓶颈的最佳选择" 真诚,比套路更稀缺。

Agent-Reach实测:让AI Agent一键搜索全网,我踩了3个大坑

上周在GitHub Trending上看到一个项目叫Agent-Reach,日增1045星,简介只有一句话——"Give your AI Agent the ability to search the entire internet"。 给AI Agent装上全网搜索能力?这不就是我一直在找的东西吗? 我们团队在做一个行业研究Agent,需要实时抓取多个平台的讨论数据。之前自己写爬虫,被反爬搞到怀疑人生——Reddit要OAuth,Twitter/X要API Key(还收费),B站和知乎各种验证码。维护成本比开发成本还高。 Agent-Reach号称"无需任何API Key,一条命令部署,零额外费用"。 我抱着试试看的心态装了。 **选型理由:为什么选Agent-Reach而不是自建爬虫?** ![image.png](https://pic.code-nav.cn/post_picture/2076841817701117954/Yul5IFB8X91jdV8x.webp) **坑1:小红书搜索不稳定,成功率只有60%** 文档说支持小红书,但实测发现小红书的搜索经常超时。原因是小红书的反爬机制很激进,Agent-Reach用的是模拟浏览器请求,但没做指纹伪装。 解决方案:我在Agent-Reach外面包了一层重试逻辑,3次超时后换IP(用代理池),成功率提升到85%。但这也意味着不能完全"零成本"了,代理池还是要花钱的。 **坑2:返回数据格式不统一,不同平台的字段名不一样** Reddit返回的数据结构是`{title, body, upvotes, comments}`,Twitter是`{text, likes, retweets}`,B站是`{title, description, play, danmaku}`。每个平台的字段名和结构都不一样,直接灌进Agent会导致理解混乱。 解决方案:我写了一个统一适配层,把所有平台的返回数据标准化为`{platform, title, content, engagement_score, url, timestamp}`格式。engagement_score是根据各平台的互动指标换算的统一热度值。 对了。顺嘴提一句,技术大厂,前后端-测试机会,全国一线及双线城市均有[坑位](https://jsj.top/f/o38ijj),待遇和稳定性还不错,感兴趣看看。 **坑3:并发请求太多会被平台封IP** 我在做竞品调研时,一次性搜索了6个平台5个关键词,总共30个并发请求。结果GitHub和Reddit直接返回429,Twitter临时封了我的IP 2小时。 解决方案:加了个简单的限流器,每秒最多3个请求,每个平台间隔2秒。搜索时间从30秒变成3分钟,但稳定性从70%提升到98%。 最终数据对比: ![image.png](https://pic.code-nav.cn/post_picture/2076841817701117954/E86Frhq9BpR1lRKf.webp) 结论:Agent-Reach适合"快速验证+中等精度"的搜索场景,不适合做高精度的数据采集。如果你的Agent需要实时、精确、全量的数据,还是得自建。但如果你只是想让Agent能"搜一下最近大家在聊什么",这玩意儿5分钟就能跑起来。 项目地址:https://github.com/Panniantong/Agent-Reach

大厂外包一年,说说我的真实感受:没有网上说的那么惨,也没有那么香

一年前,我接了个大厂外包的offer。当时身边朋友的反应出奇一致:“外包?能转正吗?”“不就是去大厂打杂吗?”“干两年出来简历怎么写?” 说实话,我自己也犹豫过。但那时候手里没更好的选择,咬咬牙,去了。 一年后的今天,我想说点不一样的。 **第一印象:原来外包也能碰核心代码**入职前我以为外包就是写点边角料,真正进去才发现——我直接进了某个中台业务组,写的是线上核心链路。 当然,权限确实有差别。我不能直接部署生产环境,某些内部文档需要申请才能看,周会不能主动发言。但代码,是真的在写。 第一个月我接手了一个老旧模块,里面全是祖传代码,没有注释的那种。我硬着头皮重构了一版,提了个PR,leader给了十几条评论,每条都写得很细:“这里为什么要用这个设计模式?”“这个命名能不能更语义化一点?” 我改了四版,才合进去。 那是我入职以来最有成就感的一刻,因为我知道自己写的东西,有人在认真看。 ![编程导航爆款文章模仿创作.png](https://pic.code-nav.cn/post_picture/2076841817701117954/ZdKMCqwlPyU74NwZ.webp) **技术成长:三个“被迫”提升的能力第一,代码规范不是约束,是保护。** 以前在小公司,变量名用拼音都行,反正没人review。到了大厂,没通过lint的代码连push都推不上去,PR评论里稍微不规范的写法都会被标红。 刚开始觉得很烦,后来习惯了,再回头看自己半年前的代码,发现确实写得干净。好习惯是被逼出来的。 **第二,看源码成了本能。** 外包有一个尴尬的地方:遇到线上问题,你没法直接登录服务器看日志。 怎么办?只能看源码,拼命看源码。 有天晚上线上有个诡异的超时异常,我同事说“重启一下就行了”,但我觉得不对。我花了两个晚上把那段RPC调用的源码从头到尾看了一遍,发现是一个连接池配置不合理导致的,改掉之后问题再也没有复现。 我那个同事后来跟我说:“你是我见过的debug最细的外包。” 我说:“因为我看不了日志,只能看代码。” **第三,学会问对的问题。** 在大厂,提问是一门技术。文档很全,大部分问题都能搜到,如果你张嘴就问一个文档里写清楚的事,别人嘴上不说,心里也会给你打标签。 我学到的经验是:提问之前自己先找半小时,确认找不到再问,而且要把问题具体化——“我查了A和B,卡在了C这一步,能不能给个方向?”这样别人才愿意帮你。 ![编程导航爆款文章模仿创作 (5).png](https://pic.code-nav.cn/post_picture/2076841817701117954/dzEZ4KdqXV1Zwsd5.webp) **关于外包,说几句实在的先说好的:** 项目质量高、流程规范、同事平均水平确实在线,在这种环境里待一年,比在小公司写三年业务代码学到的东西更系统。而且简历上写大厂的项目经历,至少能过简历关。 **再说不好听的:** 福利基本没有,年终奖打折,没有内部股票,没有免费三餐。那种“二等公民”的感觉,偶尔会冒出来,尤其是看着正式员工在群里聊期权涨幅的时候。 但我想明白了一件事:**外包是一张门票,不是终点。** 我来的第一天就清楚,我在这里是攒经验、攒项目、攒履历,不是为了拿内部offer(虽然也有外包转正的案例,但那太少太少了)。 **一年后的变化**最近开始面正式岗位了。 面试官问我:“你在大厂做过什么?” 我讲了那个重构的老模块,讲了那个连接池bug的排查过程,讲了我怎么在权限有限的情况下还能保质保量上线。 面试官没提“外包”两个字,一直在追问技术细节。 那一刻我知道,这一年的代码没有白写。 **最后想说的**如果你也在考虑外包,我的建议是: 看团队、看项目、看技术栈。如果这三样都好,那就去,哪怕是外包。如果三样都不行,哪怕是正式岗位也慎重。 外包不丢人,丢人的是干了一年,发现自己没有任何成长。 我很庆幸,这一年的外包经历,让我离一个更好的程序员,更近了一步 ![编程导航爆款文章模仿创作 (4).png](https://pic.code-nav.cn/post_picture/2076841817701117954/bxCZOcBmO8vgeUb4.webp)

如何优雅地实现每 5 秒轮询请求?

在做实时监控系统时,比如服务器状态面板、订单处理中心或物联网设备看板,**每隔 5 秒自动拉取最新数据**是再常见不过的需求了。 但你有没有遇到过这些问题? 页面切到后台还在疯狂发请求,浪费资源 上一次请求还没回来,下一次又发了,接口雪崩 用户切换标签页回来,发现数据“卡”在旧状态 页面销毁了定时器还在跑,内存泄漏 今天我就以一个**运维监控平台**的真实场景为例,带你从“能用”做到“好用”。 ## **一、问题场景:设备在线状态轮询** 假设我们要做一个 IDC 机房设备监控页,需求如下: 每 5 秒查询一次所有服务器的在线状态 接口` /api/servers/status` 响应较慢(平均 1.2s) 用户可能切换到其他标签页处理邮件 页面关闭时必须停止轮询 如果直接写个` setInterval`,很容易踩坑。我们一步步来优化。 ## 二、第一版:基础轮询(能跑,但有隐患) ```jsimport { ref, onMounted, onUnmounted } from 'vue' const servers = ref([]) let timer = null onMounted(() => { const poll = () => { fetch('/api/servers/status') .then(res => res.json()) .then(data => { servers.value = data }) } poll() // 首次立即执行 timer = setInterval(poll, 5000) // 每5秒轮询 }) onUnmounted(() => { clearInterval(timer) // 🔍 清理定时器 }) ``` ✅ 实现了基本功能 ❌ 但存在三个致命问题: 1.**接口未完成就发起下一次请求** → 可能雪崩 2.**页面不可见时仍在轮询** → 浪费带宽和电量 3.**异常未处理** → 网络错误可能导致后续不再轮询 ## 三、第二版:可控轮询 + 可见性优化 我们改用“请求完成后再延迟 5 秒”的策略,避免并发: ```jsimport { ref, onMounted, onUnmounted } from 'vue' const servers = ref([]) let abortController = null // 用于取消请求 const poll = async () => { try { // 支持取消上一次请求 abortController?.abort() abortController = new AbortController() const res = await fetch('/api/servers/status', { signal: abortController.signal }) if (!res.ok) throw new Error('Network error') const data = await res.json() servers.value = data } catch (err) { if (err.name !== 'AbortError') { console.warn('轮询失败,将重试...', err) } } finally { // 🔍 请求结束后再等5秒发起下一次 setTimeout(poll, 5000) } } onMounted(() => { poll() // 启动轮询 }) onUnmounted(() => { abortController?.abort() }) ``` **🔍 关键点解析:** - `finally`** 中** `setTimeout`** 实现“串行轮询”,避免并发** - `AbortController`** 可在组件卸载时主动取消进行中的请求** - **错误被捕获后仍继续轮询,保证稳定性** 对了。顺嘴提一句,技术大厂,前后端-测试机会,全国一线及双一线城市均有[坑位](https://jsj.top/f/o38ijj),待遇和稳定性还不错,感兴趣看看。 ## 四、第三版:智能节流 —— 页面可见性控制 现在解决“页面不可见时是否轮询”的问题。我们引入` visibilitychange `事件: ```jslet isVisible = true const handleVisibilityChange = () => { isVisible = !document.hidden console.log('页面可见性:', isVisible ? '可见' : '隐藏') } onMounted(() => { // 监听页面可见性 document.addEventListener('visibilitychange', handleVisibilityChange) const poll = async () => { try { abortController?.abort() abortController = new AbortController() const res = await fetch('/api/servers/status', { signal: abortController.signal }) const data = await res.json() servers.value = data } catch (err) { if (err.name !== 'AbortError') { console.warn('轮询失败:', err) } } finally { // 🔍 只有页面可见时才继续轮询 if (isVisible) { setTimeout(poll, 5000) } else { // 页面隐藏,等待恢复后再请求 document.addEventListener('visibilitychange', function waitVisible() { if (!document.hidden) { document.removeEventListener('visibilitychange', waitVisible) setTimeout(poll, 1000) // 恢复后1秒再查 } }, { once: true }) } } } poll() }) ``` 🔍 这里做了两层控制: 1. 页面隐藏时,**不再自动发起下一轮请求** 1. 页面重新可见时,**延迟 1 秒触发一次查询**,避免瞬间唤醒过多资源 ## 五、封装成可复用的轮询 Hook 把这套逻辑抽象成通用 `usePolling` Hook: ```js// composables/usePolling.js import { ref } from 'vue' export function usePolling(fetchFn, interval = 5000) { const data = ref(null) const loading = ref(false) const error = ref(null) let abortController = null let isVisible = true const poll = async () => { if (loading.value) return // 防止重复执行 loading.value = true error.value = null try { abortController?.abort() abortController = new AbortController() const result = await fetchFn(abortController.signal) data.value = result } catch (err) { if (err.name !== 'AbortError') { error.value = err console.warn('Polling error:', err) } } finally { loading.value = false // 🔍 根据可见性决定是否继续 if (isVisible) { setTimeout(poll, interval) } } } const start = () => { // 移除旧监听避免重复 document.removeEventListener('visibilitychange', handleVisibility) document.addEventListener('visibilitychange', handleVisibility) poll() } const stop = () => { abortController?.abort() document.removeEventListener('visibilitychange', handleVisibility) } const handleVisibility = () => { isVisible = !document.hidden if (isVisible) { setTimeout(poll, 1000) } } return { data, loading, error, start, stop } } ``` 使用方式极其简洁: ```js<script setup> import { usePolling } from '@/composables/usePolling' const fetchStatus = async (signal) => { const res = await fetch('/api/servers/status', { signal }) return res.json() } const { data, loading } = usePolling(fetchStatus, 5000) // 自动在 onMounted 启动 </script> <template> <div v-if="loading">加载中...</div> <ul v-else> <li v-for="server in data" :key="server.id"> {{ server.name }} - {{ server.status }} </li> </ul> </template> ``` ## 六、对比主流轮询方案 ![image.png](https://pic.code-nav.cn/post_picture/2076841817701117954/okTe3TYk3J3Wjbhf.webp) ## 七、举一反三:三个变体场景实现思路 **1. 动态轮询频率** 如网络异常时降频至 30s 一次,正常后恢复 5s。可在` finally `中根据 `error.value` 动态调整` setTimeout `时间。 **2. 多接口协同轮询** 多个 API 轮询但希望错峰发送。可用 `Promise.all` 组合请求,在 `finally` 统一控制下一轮时机,避免瞬间并发。 **3.离线重连机制** 当检测到网络断开(fetch 超时),改为指数退避重试(1s → 2s → 4s → 8s),恢复后再切回 5s 正常轮询。 ## 小结 实现“每 5 秒轮询”看似简单,但要做到**稳定、节能、用户体验好**,需要考虑: - ✅ 使用 **串行 setTimeout** 替代 setInterval,避免请求堆积 - ✅ 利用 **AbortController** 主动取消无用请求 - ✅ 结合 **页面可见性 API** 节省资源 - ✅ 封装为 **可复用 Hook**,提升工程化水平 记住一句话:**好的轮询,是“聪明地少做事”,而不是“拼命做事情” 。** 下次当你接到“每隔 X 秒刷新”的需求时,别急着写 `setInterval`,先问问自己:用户真的需要这么频繁吗?能不能用 WebSocket?页面看不见的时候还要刷吗? ——转载自:前端微白

不知不觉加入编程导航一年了,从原始人到造航母。一年前来的时候是想重拾编程信心,吭哧瘪肚的学项目。现在这时候已经进入AI行业天天Vibe Coding,Crazy我只能说!

计算机网络思维导图 进程章

不知道语雀怎么上传思维导图到这里 暂时先截屏吧 ![image.png](https://pic.code-nav.cn/post_picture/1608648175386624001/zH89KfIRVDk1uV2W.webp)

小白请教一下怎么刷力扣

## 纯小白 算法知道的不咋多,也没过过一遍力扣,现在是需要从零开始学 ## 想请教一下大家的经验 比如一些好的带刷的视频、网站or个人博客等 再就是需要刷哪些题,应付秋招/实习的话只刷力扣100够吗 求求求!!!(跪

下载 APP