跳到主要内容

ChatGPT 为什么能成功,创始人 Sam 告诉你如何有效提高效率

· 阅读需 8 分钟

这是一篇 ChatGPT 创始人山姆·奥特曼(Sam Altman)在 2018 年写的一篇博客,关于如何提升效率的有效建议。

你在做什么?

💰 长期主义的本质是复利公式

复利是一个金融术语,但它也适合在个人的职业上。如果你每天都在产出,那么 50 年后你的复利获益将会是巨大的。提高自己的效率是一件非常重要的事情,从原来每天的 1% 提升到 10%,复利获益会变得更大。

复利公式见 👉 长期主义的本质是复利公式

🚀 提高效率的核心:做你自己喜欢的事情

在错误的方向上前进就是在倒退,花点时间去深入思考你自己喜欢做的事情,只有自己热爱的事情,才能真正地提高你的生产效率。

🤝 把自己不喜欢的事情委托给喜欢的人

做自己喜欢的事情才能让自己效率倍增,但面对自己不喜欢的事情,那么尽量不要去做它,比如采取委托、避免,或者其他方式。委托给别人的时候要注意,要委托给那些喜欢做这件事情的人,因为从“做你喜欢的事情可以提高效率”这一原则来说,应该也要让被委托者高效地完成这件事情。

💪 坚持自己的坚持

这些年能够留给我深刻印象的是那些有强烈信念的人,这种人在大众中很罕见。如果你发现你总是附和别人,那可不是一件好事。坚持自己的坚持,有时候可能会出错,但当其他人都在迷茫的时候,你却做了正确而重要的事情,那么你将会变得更加勇敢非凡。

🚫 避免和消耗你的人在一起

要完成一件伟大的事情,应该努力和那些聪明、积极、高效和开朗的人在一起,他们不会随意贬低你的理想和抱负,并且他们可以推动你前进,也能给你带来某些启发。在你能力范围之内,避免和让你陷入精神内耗的人一起,否则代价将会是巨大的。

🔍 找对问题并解决它

我们基本上都身处红海行业,竞争激烈,我们要做的就是聪明而勤奋地工作,找到正确的问题,并正确地去解决它,这方面没有太多的捷径。

优先级

📋 三个基本原则

  1. 完成重要的事情
  2. 别把时间浪费在傻逼事情上
  3. 做大量的清单

强烈推荐使用清单

清单写下每年、每月和每天的任务,清单可以让你聚焦当下的任务,并且能够让你处理多个任务(因为你的大脑释放出来,不需要记住那么多的任务)。

可以把清单写在纸上,方便添加和移除,开会的时候进行记录也不会冒犯别人。

经常回顾清单,及时修改或者删除任务,不做分类和排序这样耗费时间的事情,重要的事情就打个“⭐️”。

优先做产生势头的事情

优先做那些可以产生“势头”的事情,你做完一件,产生成就感,继续去做下一件事情

🛡 学会冷酷无情

“为了要完成我最重要的项目,我会变得坚韧残酷——我发现只要我真心想要做成某件事,并且付出足够的努力,通常都能实现。”

I am relentless about getting my most important projects done—I’ve found that if I really want something to happen and I push hard enough, it usually happens.

“我尝试变得残酷,对于无关紧要的事情说不,对于非关键任务会以最快速的方式实现。我可能做得过头了—比如,我几乎可以确定在回复邮件时,我的简洁到了无礼的程度。

“I try to be ruthless about saying no to stuff, and doing non-critical things in the quickest way possible. I probably take this too far—for example, I am almost sure I am terse to the point of rudeness when replying to emails.”

🌐 维护一个开放的社交网络

努力避免会议和研讨会,因为这会浪费大量的时间和精力。但是日程上,也要保持一定的开放性,去接触一些新的人和想法,维护一个开放的社交网络是很重要的。在研讨会上,虽然 90% 都是浪费时间,但 10% 有价值的东西可以弥补这样的损失

物理方面

这一方面围绕睡眠、锻炼和营养展开,有些老生常谈,并且 Sam 是一个极度素食主义,这里忽略,感兴趣可以见原文。

其他方面

🏢 舒适的办公环境

办公室安静不会被人打扰,拥有自然光和一台漂亮的办公桌,以及很多台 4K 显示屏。

🛠 一些小妙招

  • 写一些自定义的小工具,让它们去干那些烦人、琐碎重复的工作。

  • 提高打字速度

  • 学习快捷键

😓 糟糕的大姨妈

像很多人一样,偶尔会有一两周丧失斗志,对任何事情都提不起劲

暂时没有什么好的解决方法,但是相信“大姨妈”总是会过去,过去之后又是精神抖擞,继续奋斗。

另外,在心情很差的时候,避免和其他人接触,这是一个良心建议。

💞 重视爱人和家庭

不要为了效率去忽略你的爱人和家庭,你提高了效率,却失去了快乐

最后

Sam 的提高效率的观点值得参考,同时他也强调了:不要掉入提高效率陷阱中,提高效率不是目的,我们的目的是为了快速、质量地完成任务

如何把一家创业公司搞垮

· 阅读需 7 分钟

在拜读了耗子哥推荐的书《重来》之后,如何把一家创业公司搞垮,我得到了一些灵感。

💎 追求完美的产品

我们都知道没有完美的产品,但是对于创业公司,想要做出完美的产品,至少需要付出很多的努力:

  1. 毫无 BUG:全面的产品交互设计、严格的编码过程、完整的用例测试等等。
  2. 大而全的功能:不要花时间去区分重要、次要,所有能力都得上,所有平台都得适配,所有功能都得支持。
  3. 延迟交付:追求完美产品,需要付出时间和精力,延期延期再延期。
  4. 沉默的反馈:开发完毕一个功能,要经过很久才能上线,迟迟得不到客户的真实反馈。

追求完美的产品,这个功能也要,那个功能也要,迟迟交付产品,磨灭团队信心,减少公司成功几率,钝刀子杀人

📊 开会的技巧

会议是一种毒药,在开会的时候,我们要尽量扩大它的毒性:

  1. 没有明确的问题,没有确定的议程。
  2. 人员尽量扩大。不要精简会议人员,多增加无关人员。
  3. 每个人都发言。多听取一些低能儿的无效意见。
  4. 去会议室。可以直接打断每个人的工作。
  5. 时长不限。不要限制开会的时间,时间越长越好。1 小时的会议,10 个人参加的话,就可以减少公司 10 小时的生产时间。

通过以上一些开会技巧,可以有效地增加会议的时长,多积累一些纸上谈兵的想法。

📆 做长期计划

做计划的本质是用过去指导未来,用以前的经验去圈套之后的变化。做长期计划,就可以把一个创业公司给套牢。

当创业公司按照一段时间去执行长期计划之后,如果发现事情不妙,可能会因为这么几个方面而硬着头皮继续执行:

  1. 沉没成本:我们都已经付出 4 个月的努力,不继续做下去很可惜吗?
  2. 傲慢自负:我们都已经定好目标了,再改变不是打脸吗?

🍔 满足客户

上线之后,要记住客户自上,来自客户的反馈都必须汲取,客户的要求都必须满足,让自己的产品成为一个臃肿的产品,成为一个臃肿产品的好处:

  1. 功能很多。用户所有的需求都能满足,意味着我们有对应处理需求的纷繁功能。
  2. 提高复杂性。每一个功能的增加,都需要对应交互,乱七八糟的功能可以让我们的产品交互变得复杂,界面花里胡哨。
  3. 拒绝新用户。通过提高产品复杂性,可以有效减少新的用户。
  4. 没有个性,平易近人。像一辆公交车一样,谁都可以上。

千万不要追求简洁,我们的目标是努力变成的微信,成就一款庞大、臃肿的垃圾产品

💰 融资扩张,多招人手

当产品取得一定的成效,就需要马上融资,融资带来的好处太多:

  1. 更大的办公室,人数更多的公司
  2. 花别人的钱会上瘾
  3. 对公司失去控制权
  4. 投资人套现离场的风险
  5. 融资非常耗时耗力
  6. 产品可能偏向迎合投资人而不是客户

多招聘人手,新来的人:

  1. 对公司不了解
  2. 对项目不了解
  3. 互相谦让,互相客气
  4. 谁也不敢指出产品缺陷

🎯 集中力量办小事

人总是有限的,资源也总是有限的,我们需要正确地调用这些人力和资源,把他们都投入到小事中,如何做到呢?

  1. 不做取舍。在众多的事情中,不要去试图找到中心点,所有的任务都必须做,所有的需求都必须完成。
  2. 没有急事。把所有事情都当做急事,那也就没有急事。
  3. 唯唯诺诺。顺从永远比争锋相对容易,人们很容易同意添加一项新功能、接受一个过于乐观的最后期限、笑纳一个平庸的设计

🚫 不以盈利为目的

公司如何通过产品盈利的事情,尽量搁置,就像我们在设计神舟一号的时候,先假设地心引力不存在

一家企业不以盈利为目的,那么公司的可持续存活就有问题,可以给员工一些退出策略:

  • 如何破产清算,保障各位 n+1
  • 被其他公司收购

让员工少一点破釜沉舟的勇气,可以让公司早一点走向 Ending。

区分元音音标和辅音音标

· 阅读需 2 分钟

👆 来自于:如何一眼区分元音音标辅音音标? 小技巧,告别死记硬背 |英语国际音标 丹的英语

区分元音音标和辅音音标的作用

  1. 拼读音标:多音节词、比较级、最高级
  2. 连读
  3. 区分单词音节数

字母的分类

👉 元音字母: a e i o u

👉 半元音字母 w y

👉 辅音字母:b c d f g h j k l m n p q r s t v x z

音标的定义

👉 元音音标:发音时气流从肺部发出经由口腔,不受阻碍自由呼出的,且需要振动声带的音标

👉 辅音音标:发音时气流从肺部发出经由口腔,气流在某些部位要受阻碍的音标

区分技巧

元音音标的特点:

  1. 长得像元音字母
  2. 双元音中其中一个长得像元音字母即可
  3. 每个字母比较“矮胖”

phonetic symbol-vowel

辅音音标的特点

  1. 长得像辅音字母
  2. 四不像却高个子: [θ] [∫] [t∫] [ð] [ŋ]
  3. 大耳朵:[ʒ] [dʒ]

consonant

多语言元老给中国语言学习者的实用建议

· 阅读需 3 分钟

来自于 【干货!多语言元老给中国语言学习者的超实用建议】

主讲人:Steve Kaufmann,今年 76 岁,掌握 20 多种语言,Youtube 频道 👉 Steve


  1. Steve 的经历?

    一开始在加拿大学校学法语,但是没有兴趣,直到大学一位教授激励到它,让他对法国文化很有兴趣,到法国后学了三年,法语掌握得特别快,69 年和中国建交,然后学习汉语,后来去了日本学了日语……

  2. 哪些外语比较简单,哪些外语比较容易?

    取决于你掌握的语言和目标学习语言之间的距离,比如 Steve 已经学习了汉语,之后学习日语就很快。

  3. 没有英语学习环境怎么办?

    🔑 多听多阅读。会读英语文章不算,需要深度阅读小说,几百万字以上。

    🔑 多说,不要怕错。说话是为了沟通,而不是为了表演

  4. 对于有英语基础的中国学生的三个建议?

    💡 一段时间后会感觉没有进步,这是因为简单词汇遇见的频率比较高,能够快速掌握,但是遇到困难词汇的频率不高,导致对于它们学习掌握比较低。 解决方法:和兴趣挂钩,比如如果你喜欢文学 or 历史,可以找文学 or 历史英文小学作为切入点。

    💡 说母语比较舒适,但学外语要走出舒适圈。

    💡 坚持,不要放弃。这个过程不会变坏,只会慢慢变好

提高效率的 10 个方法

· 阅读需 10 分钟

1. 早上不要开会 📅

每个人一天是 24 小时,时间是均等的,但是时间的价值却不是均等的,早上 1 小时的价值是晚上的 4 倍。为什么这么说?

因为早晨是大脑的黄金时间,经过一晚上的睡眠,大脑经过整理、记录、休息,此时的状态是最饱满的,适合专注度高的工作,比如编程、学习外语等,如果把时间浪费在开会、刷手机等低专注度的事情上,那么就会白白浪费早上的价值。

2. 不要使用番茄钟 🍅

有时候在专心编程的时候,会产生“心流”,心流是一种高度专注的状态,当我们专注的状态被打破的时候,需要 15 分钟的时候才能重新进入状态。

有很多人推荐番茄钟工作法,设定 25 分钟倒计时,强制休息 5 分钟,之后再进入下一个番茄钟。本人在使用实际使用这种方法的时候,经常遇到的问题就是刚刚进入“心流”的专注状态,但番茄钟却响了,打破了专注,再次进入这种专注状态需要花费 15 分钟的时间。

好的替换方法是使用秒表,它跟番茄钟一样,把时间可视化,但却是正向计时,不会打破我们的“心流”,当我们编程专注度下降的时候中去查看秒表,确定自己的休息时间。

3. 休息时间不要玩手机 📱

大脑处理视觉信息需要动用 90% 的机能,并且闪烁的屏幕也会让大脑兴奋,这就是为什么明明休息了,但是重新回到工作的时候却还是感觉很疲惫的原因。

那么对于休息时间内,我们应该阻断视觉信息的输入,推荐:

  • 闭目养神 😪
  • 听音乐 🎶
  • 在办公室走动走动 🏃‍♂️
  • 和同事聊会天 💑
  • 扭扭脖子活动活动 💁‍♂️
  • 冥想 or 正念 🧘

4. 不要在工位上吃午饭 🥣

大脑经过一早上的编程劳累运转之后,此时的专注度已经下降 40%~50%,这个时候我们需要去重启我们的专注度,一个好的方法是外出就餐,外出就餐的好处有:

  • 促进血清素分泌:我们体内有一种叫做血清素的神经递质,它控制着我们的睡眠和清醒,外出就餐可以恢复我们的血清素,让我们整个人神经气爽:
    • 日光浴:外出的时候晒太阳可以促进血清素的分泌
    • 有节奏的运动:走路是一种有节奏的运动,同样可以促进血清素分泌
  • 激发场所神经元活性:场所神经元是掌控场所、空间的神经细胞,它存在于海马体中,外出就餐时场所的变化可以激发场所神经元的活性,进而促进海马体活跃,提高我们的记忆力
  • 激活乙酰胆碱:如果外出就餐去到新的餐馆、街道,尝试新的事物的话,可以激活我们体内的乙酰胆碱,它对于我们的“创作”和“灵感”起到非常大的作用。

5. 睡午觉 😴

现在科学已经研究表现,睡午觉是非常重要的一件事情,它可以:

  • 恢复我们的身体状态:26 分钟的午睡,可以让下午的工作效率提升 34%,专注力提升 54%。
  • 延长寿命:中午不睡午觉的人比中午睡午觉的人更容易扑街
  • 预防疾病:降低老年痴呆、癌症、心血管疾病、肥胖症、糖尿病、抑郁症等

睡午觉好处多多,但也要适当,15 分钟到 30 分钟的睡眠最佳,超过的话反而有害。

6. 下午上班前运动一下 🚴

下午 2 点到 4 点是人清醒度最低的时候,10 分钟的运动可以让我们的身体重新清醒,提高专注度,程序员的工作岗位和场所如果有限,推荐:

  • 1️⃣ 深蹲
  • 2️⃣ 俯卧撑
  • 3️⃣ 胯下击掌
  • 4️⃣ 爬楼梯(不要下楼梯,下楼梯比较伤膝盖,可以向上爬到顶楼,再坐电梯下来)

7. 2 分钟解决和 30 秒决断 🖖

⚒️ 2 分钟解决是指遇到在 2 分钟内可以完成的事情,我们趁热打铁把它完成。这是一个解决拖延的小技巧,作为一个程序员,经常会遇到各种各样的突发问题,对于一些问题,我们没办法很好的决策要不要立即完成, 2 分钟解决就是一个很好的辅助决策的办法。

💣 30 秒决断是指对于日常的事情,我们只需要用 30 秒去做决策就好了,这源于一个“快棋理论”,研究人员让一个著名棋手去观察一盘棋局,然后分别给他 30 秒和 1 小时去决定下一步,最后发现 30 秒和 1 小时做出的决定中,有 90% 都是一致的。

8. 不要加班,充足睡眠 💤

作为程序员,我们可能经常加班到 9 点,到了宿舍就 10 点半,洗漱上床就 12 点了,再玩会儿手机就可以到凌晨 2、3 点。

压缩睡眠时间,大脑就得不到有效的休息,第二天的专注度就会降低,工作效率也会降低,这就是一个恶性循环。

想想我们在白天工作的时候,其实有很多时间都是被无效浪费的,如果我们给自己强制设定下班时间,创新、改变工作方式,高效率、高质量、高密度的完成工作,那是否就可以减少加班,让我们有更多的自由时间去学习新的知识技术,进而又提高我们的工作效率,形成一个正向循环。

9. 睡前 2 小时 🛌

  1. 睡前两小时不能做的事情:
    • 🍲 吃东西:空腹的时候会促进生长激素,生长激素可以提高血糖,消除疲劳,但如果吃东西把血糖提高了,这时候生长激素就停止分泌了
    • 🥃 喝酒
    • ⛹️ 剧烈运动
    • 💦 洗澡水过高
    • 🎮 视觉娱乐(打游戏,看电影等)
    • 📺 闪亮的东西(看手机,看电脑,看电视)
    • 💡 在灯光过于明亮的地方
  2. 适合做的事情
    • 📖 读书
    • 🎶 听音乐
    • 🎨 非视觉娱乐
    • 🧘‍♂️ 使身体放松的轻微运动

10. 周末不用刻意补觉 🚫

很多人以周为单位进行休息,周一到周五压缩睡眠,周末再补觉,周六日一觉睡到下午 12 点,但这与工作日的睡眠节奏相冲突,造成的后果就是星期一的早上起床感的特别的厌倦、焦躁。

其实周末并不需要补觉,人体有一个以天为单位的生物钟,打破当前的生物钟周期,就会影响到下一个生物钟周期,要调节回来也需要花费一定时间。

我们应该要以天为单位进行休息,早睡早起,保持每天的专注度。

参考

以上大部分来源于书籍 《为什么精英都是时间控》,作者桦泽紫苑,是一个脑神经专家。

10 分钟把你的 Web 应用转为桌面端应用

· 阅读需 6 分钟

在桌面端应用上,Electron 也早已做大做强,GitHub桌面端、VSCode、Figma、Notion、飞书、剪映、得物都基于此。但最近后起之秀的 Tauri 也引人注目,它解决了 Electron 一个大的痛点——打包产物特别大

我们知道 Electron 基于谷歌内核 Chromium 构建,打包后无论应用多小,至少都得 70M 起步,而 Tauri 使用操作系统内的 Webview1,运行时才会去动态连接 webview,这使得它的打包速度非常快、打包后的应用更小

Tauri 跟 Electron 一点不同,Electron 使用 JavaScript 编写后台服务,而 Tauri 则使用 Rust,Rust 这两年势头很猛,更安全、性能更好,很多应用都开始转入 Rust 的怀抱,相信不久后也会是前端必学基础。

本文就基于 Tauri 作为构建桌面端应用框架,仅需一点时间,就可以将一个 Web 应用转为桌面端应用

1. 打开一个 Web 应用

我们以 FocusTide 这个应用为转换对象,它是 GitHub 开源的一个计时 Web 应用:

首先我们先 Clone 该仓库到本地:

$ git clone git@github.com:Hanziness/FocusTide.git

然后我们安装并且运行起来:

# 安装依赖
$ yarn install

# 启动服务,在 localhost:3000
$ yarn dev

2. 安装 Tauri 依赖

我们以 Mac 为例,Mac 下需要安装 CLang 和 MacOS 相关开发依赖:

$ xcode-select --install

安装 Tauri:

$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

这条命令会安装下载 Rustup,它会下载安装 Rust 相关依赖,当安装成功后控制台会显示:

$ Rust is installed now. Great!

其他操作系统安装 Tauri:

  1. Windows 下安装 Tauri:https://tauri.app/zh-cn/v1/guides/getting-started/prerequisites/#windows
  2. Linux 下安装 Tauri:https://tauri.app/zh-cn/v1/guides/getting-started/prerequisites/#linux

3. 将 Tauri 集合到项目中

在 Web 应用内,先安装 Tauri 相关的 npm 包

$ npm install --save-dev @tauri-apps/cli

pakcage.json 增加脚本命令:

"scripts": {
"tauri": "tauri"
}

接着跑 Tauri 初始化项目命令:

$ npm run tauri init

这条命令执行之后,会在当前 Web 项目产生如下 Tauri 项目:

执行之后,会有一些问题需要我们去填写

  1. What is your app name? 应用名。这个名字会作为打包后应用的正式名称。

  2. What should the window title be? 默认窗口名称。这个会作为我们打开应用窗口的名称,后续我们不需要这个窗口的话我们可以在 tauri.conf.jsonhiddenTitle 字段去隐藏它。

  3. Where are your web assets (HTML/CSS/JS) located relative to the < current dir $gt; /src-tauri/tauri.conf.json file that will be created? 生产环境下的文件路径。也就是前端项目打包之后的项目路径,这个路径相对于 /src-tauri/tauri.conf.json 路径。FocusTide 项目打包产物放在项目的 dist 文件夹中,所以我们填 ..dist

  4. What is the URL of your dev server? 开发环境下的服务路径。FocusTide 项目开发下的服务路径为 http://localhost:3000

  5. What is your frontend dev command? 前端启动开发命令。FocusTide 项目启动开发命令是 yarn dev

  6. What is your frontend build command? 前端打包命令。FocusTide 项目的打包命令是 yarn generate

执行后,生成 src-tauri,接着我们就可以把项目跑起来了:

$ npm run tauri dev

可以看到,我们的应用在窗口跑起来了:

4. 打包发布

如果开发 OK,我们就可以把应用打包出来。

$ npm run tauri build

执行打包命令后,打包应用会存放在 src-tauri/target/release/bundle 下,可以看到,打包产物非常小:

Tauri 打包过程中,会更根据当前系统平台打包,比如 Mac 下只能打包 .dmg.app 包,Windows 下打包 .msi.exe 包。

5. 部署

下载后,如果我们要公开这个应用,需要部署应用,这里我们推荐 Laf ,我们可以使用它的云存储#文件管理,把我们的应用上传上去并且得到下载链接:

6. 最后

整个转换过程其实非常简单快速,如果你花费了超过 10 分钟的话,那我们深表歉意。如果你要继续深入使用桌面后台服务,可以查看 Tauri 官网

最后,我把转换后的 FocusTide 项目放到了个人 GitHub 上,并且取名为「来做」,目前仅限 Mac 端,欢迎下载 👏🏻

Footnotes

  1. Tauri vs. Electron: A comparison, how-to, and migration guide: https://blog.logrocket.com/tauri-electron-comparison-migration-guide/

bit, byte, KB, GB, MG, TB, PB

· 阅读需 1 分钟

1bit 是计算机中最小的数据单位,1bit 就对应一个高低电位。

$$$ 1bit \times 8 = 1byte $$$

$$$ 1byte \times 1024 = 1KB (kilobyte) $$$

$$$ 1KB \times 1024 = 1MB (megabyte) $$$

$$$ 1MB \times 1024 = 1GB (gigabyte) $$$

$$$ 1GB \times 1024 = 1TB (terabyte) $$$

$$$ 1TB \times 1024 = 1PB (petabyte) $$$


在 UTF-8 编码中

  1. 一个 US-ASCII 字符只需要 1byte
  2. 带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文等字符需要 2byte
  3. 其他语言(包括中日韩文字、东南亚文字、中东文字等)使用 3byte
  4. 极少数语言用 4byte

简单好用的 SemVer: 如何命名你的应用版本

· 阅读需 1 分钟

SemVer 是目前较为流行的命名版本的规范,它的全称是 Semantic Versioning Specification,语义化版本命名规范。

它对版本的命名构成主要为:

  • X,Major 版本,版本迭代,会有兼容问题
  • Y,Minor 版本,更新功能,不应该有兼容问题
  • Z,Patch 版本,修复 Bug,更小程度的变动,不会有兼容问题
  • Pre-release,预发布版本,主要是 alpha、beta、insiders,正式发布前的不稳定版本,用于内部、社区、提前体验的用户
  • Build,一般是打包构建时的 commit id

SemVer 的规则简单明了,学习成本极低,这大概就是为什么 SemVer 如此流行的原因了。

[1] https://semver.org/spec/v2.0.0.html [2] https://www.baeldung.com/cs/semantic-versioning

什么是 IP 欺骗?

· 阅读需 5 分钟

什么是 IP 欺骗?

伪装源地址的 IP 欺骗包(Spoofed IP packets)通常用于攻击中,它的目的是在攻击中避免源地址被侦测得到。

IP 欺骗是创建具有修改源地址的 Internet 协议 (IP) 数据包,以便隐藏发送者的身份、冒充另一个计算机系统或两者兼而有之。 这是一种经常被坏人用来对目标设备或周围基础设施发起 DDoS 攻击的技术。

发送和接收 IP 数据包是联网计算机和其他设备进行通信的主要方式,是现代互联网的基础。 所有 IP 数据包都包含一个位于数据包主体之前的标头,并包含重要的路由信息,包括源地址。 在普通数据包中,源IP地址是数据包发送者的地址。 如果数据包被欺骗,源地址将会被伪造。

ip-spoofing

IP 欺骗类似于攻击者发送一个数据包给某个人,这个人会拿到一个错误的返回地址。如果收到数据包的这个人想要停止发件人发送数据包,通过阻止虚假地址的数据包的手段是起不到作用的,因为地址相当容易更改。相关地,如果接收方想要响应返回地址,他们的响应包会去到别的地方,而不是真正的发送者。 伪装数据包地址的能力是许多 DDoS 攻击利用的核心漏洞。

DDoS 攻击通常会利用欺骗,目的是用流量淹没目标地址设备,同时掩盖恶意源地址的身份,阻止缓解措施。 如果源 IP 地址被伪造并不断随机化,阻止恶意请求变得相当困难。 IP 欺骗还使执法和网络安全团队难以追踪攻击的肇事者。

欺骗还用于伪装成另一个设备,以便将响应发送到该目标设备。 NTP 放大和 DNS 放大等容量攻击就是利用这个漏洞。 修改源 IP 的能力是 TCP/IP 设计所固有的,使其成为一个持续的安全问题。

与 DDoS 攻击相关联的是,欺骗攻击还可以伪装成另一个设备,以避开身份验证,获得访问或“劫持”用户会话的权限。

如何防止 IP 欺骗(包过滤)

虽然无法防止 IP 欺骗,但可以采取措施阻止欺骗数据包渗入网络。 一种非常常见的欺骗防御措施是入口过滤,在 BCP38(最佳通用实践文档)中进行了概述。 入口过滤是一种数据包过滤形式,通常在网络边缘(network edge)设备上实现,它检查传入的 IP 数据包并查看它们的源头。 如果这些数据包上的源头与它们的来源不匹配,或者它们看起来很可疑,则数据包将被拒绝。 一些网络还将实施出口过滤,它查看离开网络的 IP 数据包,确保这些数据包具有合法的源头,以防止网络中的某人使用 IP 欺骗发起出站恶意攻击。

Reference

[1] What is IP spoofing? https://www.cloudflare.com/learning/ddos/glossary/ip-spoofing/

不用中间变量实现数值交换

· 阅读需 2 分钟

介绍三种不用中间变量实现数值交换的方法,

1. 加减法

假设有变量

let a = 2, b = 5

交换

a = a + b // a = 7

b = a - b // b = 2

a = a - b // a = 5

缺点:

  • 只能处理数值
  • 数值太大相加的时候可能会溢出

2. 乘除法

有加减法那么就自然可以联想得到乘除法:

a = a * b // a = 10

b = a / b // b = 2

a = a / b // a = 5

缺点:

  • 会有精度损失
  • 被除数不能为 0

3. 异或法

异或是一种数学运算,不同为 1,相同为 0:

结果
000
011
101
110

在计算机中进行异或运算,需要先把数值换算成二进制,a 的二进制为 010b 的二进制为 101

a = a ^ b // 010 ^ 101 = 111

b = a ^ b // 111 ^ 101 = 010

a = a ^ b // 111 ^ 010 = 101

缺点:

  • 无法处理浮点型变量

总结

三种方法都是奇技淫巧,仅供学习使用,生产环境最好不要用。