代码这样写,我看谁敢裁你!

中年程序员被裁了,他哭了! 老熟人老黄的公司昨天裁员了,而且还是整个部门的裁,“早上大家还好好的对需求,敲代码。下午 Leader 开始通知组员,说我失业了”,丢工作 是瞬间的事,没有任何征兆,没任何防备,突然就说“你被裁了!” 本文中的我不是“大白的我” 被裁了,而是我的熟友—老黄。 当我看到这条消息时,我没感到丝毫的诧异,因为我之前就对我朋友老黄的这个直播行业有预见性,裁员是早晚的事,看此推文(你以为爆仓只发生在P2P和... 阅读详情

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。

如果我的分享对你有帮助,请关注我,一起向上进击。

创作不易,希望大家给一点鼓励,把公众号设置为“星标”,给文章点个“赞”和“在看”,谢谢大家啦~

今年裁员太厉害了!逼得大家都在想办法保住自己的工作,今天分享的这篇文章里,介绍了 10 多个前端防御性编程技巧,或许有些帮助。文章很长,建议先收藏分享。

本文作者是清夜,原文发布:https://juejin.cn/post/7107119166989336583

***

近来看到很多公司裁员,忽然惊醒,之前是站在项目角度考虑问题,却没站在咱们程序员本身看待问题,险些酿成大错,如果人人都能做到把项目维护得井井有条,无论什么人都能看明白都能快速接手,那咱们的竞争力在哪里呢?

这个时候我再看项目中那些被我天天骂的代码,顿时心中就无限景仰起来,原来屎山才是真能能够保护我们的东西,哪有什么岁月静好,只是有人替你负屎前行罢了

为了能让更多人认识到这一点,站在前端的角度上,我在仔细拜读了项目中的那些暗藏玄机的代码后,决定写下此文,由于本人功力尚浅,且之前一直走在错误的道路上,所以本文在真正的高手看来可能有些班门弄斧,在此献丑了🐶

用 TypeScript,但不完全用

TypeScript大行其道,在每个团队中,总有那么些个宵小之辈想尽一切办法在项目里引入 ts,这种行为严重阻碍了屎山的成长速度,但同是打工人我们也不好阻止,不过就算如此,也无法阻止我们行使正义

众所周知,TypeScript 别名 AnyScript,很显然,这就是TypeScript创始人Anders Hejlsberg给我们留下的暗示,我们有理由相信AnyScript 才是他真正的目的

const list: any = []
const obj: any = {}
const a: any = 1

引入了 ts的项目,由于是在原可运行代码的基础上额外添加了类型注释,所以代码体积毫无疑问会增大,有调查显示,可能会增加 30%的代码量,如果充分发挥 AnyScript 的宗旨,意味着你很轻松地就让代码增加了 30% 毫无用处但也挑不出啥毛病的代码,这些代码甚至还会增加项目的编译时间(毕竟增加了ts校验和移除的成本嘛)

你不仅能让自己写的代码用上 AnyScript,甚至还可以给那些支持 ts 的第三方框架/库一个大嘴巴子

export default defineComponent({
  props: {
    // 现在 data 是 any 类型的啦 
    data: {
      type: Number as PropType<any>,
    },
  },
  setup(_, { emit }) {
    // 现在 props 是 any 类型的啦
    const props: any = _
    ...
  }
})

当然了,全屏 any可能还是有点明显了,所以你可以适当地给部分变量加上具体类型,但是加上类型不意味着必须要正确使用

const obj: number[] = []
// ...
// 虽然 obj 是个 number[],但为了实现业务,就得塞入一些不是 number 的类型,我也不想的啊是不是
// 至于编辑器会划红线报错?那是小问题,不用管它,别人一打开这个项目就是满屏的红线,想想就激动
obj.push('2')
obj.push([3])

命名应该更自由

命名一直是个困扰很多程序员的问题,究其原因,我们总想给变量找个能够很好表达意思的名称,这样一来代码的可阅读性就高了,但现在我们知道,这并不是件好事,所以我们应该放纵自我,既摆脱了命名困难症,又加速了屎山的堆积进度

const a1 = {}
const a2 = {}
const a3 = 2
const p = 1

我必须强调一点,命名不仅是变量命名,还包含文件名、类名、组件名等,这些都是我们可以发挥的地方,例如类名

<div class="box">
  <div class="box1"></div>
  <div class="box2"></div>
<div>
<div class="box3"></div>

乍一看似乎没啥毛病,要说有毛病似乎也不值当单独挑出来说,没错,要的就是这个效果,让人单看一段代码不好说什么,但是如果积少成多,整个项目都是 box呢?全局搜索都给你废了!如果你某些组件再一不小心没用 scoped 呢?稍不留意就不知道把什么组件的样式给改了,想想就美得很

关于 css我还想多说一点,鉴于其灵活性,我们还可以做得更多,总有人说什么 BEM 不 BEM的,他们敢用我们就敢写这样的代码

&-card {
  &-btn {
    &_link {
      &--right {
      }
    }
    &-nodata {
      &_link {
        &--replay {
          &--create {}
        }
      }
    }
  }
  &-desc {}
}

好了,现在请在几百行(关于这一点下一节会说到)这种格式的代码里找出类名 .xxx__item_current.mod-xxx__link 对应的样式吧

代码一定要长

屎山一定是够高够深的,这就要求我们的代码应该是够长够多的

大到一个文件的长度,小到一个类、一个函数,甚至是一个 if 的条件体,都是我们自由发挥的好地方。

什么单文件最好不超过 400行,什么一个函数不超过 100行,简直就是毒瘤,

所以这就要求我们要具备将十行代码就能解决的事情写成一百行的能力,最好能给人一种多即是少的感觉

data === 1
  ? 'img'
  : data === 2
    ? 'video'
    : data === 3
      ? 'text'
      : data === 4
        ? 'picture'
        : data === 5
          ? 'miniApp'

三元表达式可以优雅地表达逻辑,像诗一样,虽然这段代码看起来比较多,但逻辑就是这么多,我还专门用了三元表达式优化,不能怪我是不是?什么map映射枚举优化听都没听过

你也可以选择其他一些比较容易实现的思路,例如,多写一些废话

if (a > 10) {
  // 虽然下面几个 if 中对于 a 的判断毫无用处,但不仔细看谁能看出来呢?看出来了也不好说什么,毕竟也没啥错
  // 除此之外,多级 if 嵌套也是堆屎山的一个小技巧,什么提前 return 不是太明白
  if (a > 5) {
    if (a > 3 && b) {

    }
  }
  if (a > 4) {

  }
}

除此之外,你还可以写一些中规中矩的方法,但重点在于这些方法根本就没用到,这种发挥的地方就更多了,简直就是扩充代码体积的利器,毕竟单看这些方法没啥毛病,但谁能想到根本就用不到呢?就算有人怀疑了,但你猜他敢随便从运行得好好的业务项目里删掉一些没啥错的代码吗?

一次编写,到处引用

大家应该都知道,一个公共的方法或变量最好放在公共文件夹中,这样方便引用,提升聚合度,本来这种做法是会极大阻碍屎山进程的,但俗话说事在人为,哪有什么绝对正确的东西,不过看是谁在当搅屎棍罢了

例如在一个项目中,分为好几个页面,首页和详情页,我在写详情页的时候,发现有一个变量在首页已经存在了,一般做法是把这个变量提升到公共文件中去,这样将来如果涉及到各自修改的话,能做到心中有数,但我偏不,我TM直接在详情页里引用首页的变量

我不仅在业务组件里引用,甚至还可以在公共组件里引用,一般做法是业务组件引用公共组件/方法/变量,嘿,我偏要公共组件引用业务组件组件/方法/变量

这样导致的后果就是,一个本该私有的变量/方法,被不知道多少个页面组件、模块组件、公共文件所引用,万一需要修改,处理不好的话直接塌方,任何一个参与改动的人都战战兢兢如履薄冰,要么就是复制粘贴重写一份,要么就是要写很多没少意义的兼容逻辑,无论选择哪种,都将成为屎山的忠实贡献者

组件、方法多多滴耦合

为了避免其他人复用我的方法或组件,那么在写方法或组件的时候,一定要尽可能耦合,提升复用的门槛

例如明明可以通过 Props传参解决的事情,我偏要从全局状态里取,例如vuex,独一份的全局数据,想传参就得改 store数据,但你猜你改的时候会不会影响到其他某个页面某个组件的正常使用呢?如果你用了,那你就可能导致意料之外的问题,如果你不用你就得自己重写一个组件

组件不需要传参?没关系,我直接把组件的内部变量给挂到全局状态上去,虽然这些内部变量确实只有某一个组件在用,但我挂到全局状态也没啥错啊是不是

嘿,明明一个组件就能解决的事情,现在有了倆,后面还可能有仨,这代码量不就上来了吗?

方法也是如此,明明可以抽取参数,遵循函数式编程理念,我偏要跟外部变量产生关联

// 首先这个命名就很契合上面说的自由命名法
function fn1() {
  // ...
  // fn1 的逻辑比较长,且解决的是通用问题,
  // 但 myObj 偏偏是一个外部变量,这下看你怎么复用
  window.myObj.name = 'otherName'
  window.myObj.children.push({ id: window.myObj.children.length })
  // ...
}

魔术字符串是个好东西

实际上,据我观察,排除掉某些居心不轨的人之外,大部分人还是比较喜欢写魔术字符串的,这让我很欣慰,看着满屏的不知道从哪里冒出来也不知道代表着什么的硬编码字符串,让人很有安全感

if (a === 'prepare') {
  const data = localStorage.getItem('HOME-show_guide')
  // ...
} else if (a === 'head' && b === 'repeating-error') {
  switch(c) {
    case 'pic':
      // ...
      break
    case 'inDrawer':
      // ...
      break
  }
}

基于此,我们还可以做得更多,比如用变量拼接魔术字符串,debug的时候直接废掉全局搜索

if (a === query.name + '_head') {

}

大家都是中国人,为什么不试试汉字呢?

if (data === '正常') {

} else if (data === '错误') {

} else if (data === '通过') {

}

轮子就得自己造才舒心

众所周知,造轮子可以显著提升我们程序员的技术水平,另外由于轮子我们已经自己造了,所以减少了对社区的依赖,同时又增加了项目体积,有力地推动了屎山的成长进程,可以说是一鱼两吃了

例如我们可能经常在项目中使用到时间格式化的方法,一般人都是直接引入 dayjs完事,太肤浅了,我们应该自己实现,例如,将字符串格式日期格式化为时间戳

function format(str1: any, str2: any) {
  const num1 = new Date(str1).getTime()
  const num2 = new Date(str2).getTime()
  return (num2 - num1) / 1000
}

多么精简多么优雅,至于你说的什么格式校验什么 safari下日期字符串的特殊处理,等遇到了再说嘛,就算是dayjs不也是经过了多次 fixbug才走到今天的嘛,多一些宽松和耐心好不好啦

如果你觉得仅仅是 dayjs这种小打小闹难以让你充分发挥,你甚至可以造个 vuex,vue官网上写明了eventBus可以充当全局状态管理的,所以我们完全可以自己来嘛,这里就不举例了,这是自由发挥的地方,就不局限大家的思路了

轮子还是别人的好

考虑到大家都只是混口饭吃而已,凡事都造轮子未免有些强人所难,所以我们可以尝试走向另外一个极端——凡事都用轮子解决

判断某个变量是字符串还是对象,kind-of[1]拿来吧你;获取某个对象的 key,object-keys[2]拿来吧你;获取屏幕尺寸,vue-screen-size[3]拿来吧你……等等,就不一一列举了,需要大家自己去发现

先甭管实际场景是不是真的需要这些库,也甭管是不是杀鸡用牛刀,要是大家听都没听过的轮子那就更好了,这样才能彰显你的见多识广,总之能解决问题的轮子就是好问题,

在此我得特别提点一下 lodash,这可是解决很多问题的利器,但是别下载错了,得是 commonjs版本[4]的那个,量大管饱还正宗,es module[5]版本是不行滴,太小家子气

import _ from 'lodash'

多尝试不同的方式来解决相同的问题

世界上的路有很多,很多路都能通往同一个目的地,但大多数人庸庸碌碌,只知道沿着前人的脚步,没有自己的思想,别人说啥就是啥,这种行为对于我们程序员这种高端的职业来说,坏处很大,任何一个有远大理想的程序员都应该避免

落到实际上来,就是尝试使用不同的技术和方案解决相同的问题

  • 搞个css模块化方案,什么BEM、OOCSS、CSS Modules、CSS-in-JS 都在项目里引入,紧跟潮流扩展视野

  • vue项目只用 template?逊啦你,render渲染搞起来

  • 之前看过什么前端依赖注入什么反射的文章,虽然对于绝大多数业务项目而言都是水土不服,但问题不大,能跑起来就行,引入引入

  • 还有那什么 rxjs,人家都说好,虽然我也不知道好在哪里,但胜在门槛高一般人搞不清楚所以得试试

  • Pinia 是个好东西,什么,我们项目里已经有 vuex了?out啦,人家官网说了 vue2也可以用,我们一定要试试,紧跟社区潮流嘛,一个项目里有两套状态管理有什么值得大惊小怪的!

做好自己,莫管他人闲事

看过一个小故事,有人问一个年纪很大的老爷爷的长寿秘诀是什么,老爷爷说是从来不管闲事

这个故事对我们程序员来说也很有启发,写好你自己的代码,不要去关心别人能不能看得懂,不要去关心别人是不是会掉进你写的坑里

mounted() {
  setTimeout(() => {
    const width = this.$refs.box.offsetWidth
    const itemWidth = 50
    // ...
  }, 200)
}

例如对于上述代码,为什么要在 mounted里写个 setTimeout呢?为什么这个 setTimeout的时间是 200呢?可能是因为 box 这个元素大概会在 mounted之后的 200ms左右接口返回数据就有内容了,就可以测量其宽度进行其他一系列的逻辑了,至于有没有可能因为网络等原因超过 200ms还是没有内容呢?这些不需要关心,你只要保证在你开发的时候 200ms这个时间是没问题的就行了;

itemWidth代表另外一个元素的宽度,在你写代码的时候,这个元素宽度就是 50,所以没必要即时测量,你直接写死了,至于后面其他人会不会改变这个元素的宽度导致你这里不准了,这就不是你要考虑的事情了,你开发的时候确实没问题,其他人搞出来问题其他人负责就行,管你啥事呢?

代码自解释

高端的程序员,往往采用最朴素的编码方式,高手从来不写注释,因为他们写的代码都是自解释的,什么叫自解释?就是你看代码就跟看注释一样,所以不需要注释

我觉得很有道理,代码都在那里搁着了,逻辑写得清清楚楚,为啥还要写注释呢,直接看代码不就行了吗?

乍一看,似乎这一条有点阻碍堆屎山的进程,实则不然

一堆注定要被迭代无数版、被无数人修改、传承多年的代码,其必定是逻辑错综复杂,难免存在一些不可名状的让人说不清道不明的逻辑,没有注释的加成,这些逻辑大概率要永远成为黑洞了,所有人看到都得绕着走,相当于是围绕着这些黑洞额外搭起了一套逻辑,这代码体积和复杂度不就上来了吗?

如果你实在手痒,倒也可以写点注释,我这里透露一个既能让你写写注释过过瘾又能为堆屎山加一把力的方法,那就是:在注释里撒谎!

没错,谁说注释只能写对的?我理解不够,所以注释写得不太对有什么奇怪的吗?我又没保证注释一定是对的,也没逼着你看注释,所以你看注释结果被注释误导写了个bug,这凭啥怪我啊

// 计算 data 是否可用
//(实际上,这个方法的作用是计算 data 是否 不可用)
function isDisabledData(data: any) {
  // ...
}

上述这个例子只能说是小试牛刀,毕竟多调试一下很容易被发现的,但就算被发现了,大家也只会觉得你只是个小粗心鬼罢了,怎么好责怪你呢,这也算是给其他人的一个小惊喜了,况且,万一真有人不管不顾就信了,那你就赚大了

编译问题坚决不改

为了阻碍屎山的成长速度,有些阴险的家伙总想在各种层面上加以限制,例如加各种lint,在编译的时候,命令行中就会告诉你你哪些地方没有按照规则来,但大部分是 waring 级别的,即你不改项目也能正常运行,这就是我们的突破点了。

尽管按照你的想法去写代码,lint的事情不要去管,waring报错就当没看到,又不是不能用?在这种情况下,如果有人不小心弄了个 error级别的错误,他面对的就是从好几屏的 warning 中找他的那个 error 的场景了,这就相当于是提前跟屎山来了一次面对面的拥抱

根据破窗理论,这种行为将会影响到越来越多的人,大家都将心照不宣地视 warning于无物(从好几屏的 warning中找到自己的那个实在是太麻烦了),所谓的 lint就成了笑话

小结

一座历久弥香的屎山,必定是需要经过时间的沉淀和无数人的操练才能最终成型,这需要我们所有人的努力,多年之后,当你看到你曾经参与堆砌的屎山中道崩殂轰然倒塌的时候,你就算是真的领悟了我们程序员所掌控的恐怖实力!🐶

- EOF -

文章已经看到这了,别忘了在右下角点个“赞”和“在看”鼓励哦~

推荐阅读  点击标题可跳转

1、VS Code 变身小霸王游戏机!

2、认知升级:模型与范式转换

3、超赞的 Python 编译器,单核提速100倍

4、高效的终极秘诀

5、Python 3.12 版本有什么变化?

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,领取进击的Grey与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「书单02」,领取进击的Grey整理的 10 本 Python 入门书的电子版

👇关注我的公众号👇

告诉你更多细节干货

77bb2c262eea48c70dea26331fba00ec.jpeg

欢迎围观我的朋友圈

👆每天更新所想所悟

冲压过程中,冲裁力的变化过程 冲裁力即冲剪产品时, 所需的冲床压力, 计算冲裁力, 是为了合理选择冲床的吨位, 使冲床得到更合理更经济的利用。 1.1 冲压过程中, 冲裁力的变化过程 首先冲头下降达到材料板上开始冲剪, 冲剪力会逐渐增大, 当冲头吃进到料厚的某比例处(软钢板约1/3, 愈软材质分 母愈小, 愈硬材质分母愈大), 所需的冲剪力最大, 这时刃口近傍的材料部分出现剪断现象, 材料的抵抗力急剧减小, 所需 冲裁力亦急遽减小。由此可见, 在冲裁过程中会有一最大的冲裁力出现, 那么如果我们算出这一最大冲裁力, 必定对我们 选定冲床机 阅读详情

相关推荐

AI是怎么帮程序员写代码的?全流程揭秘!

过去,写代码是程序员的专属技能,需要熟悉语言语法、API、算法、项目结构,时常 Google 各种报错、翻文档、抄 Stack Overflow。但随着 AI 技术的发展,的出现,正在悄悄改变这一切。从自动补全、智能纠错,到自动生成代码、调试分析、优化建议,AI 已经成了程序员写代码的好帮手。那么,AI 到底是怎么帮我们写代码的?具体能做什么?效果如何?今天这篇文章就来给大家科普一下,AI 在编程领域的应用现状和未来趋势。

Chad的博客 1945

简单冲裁模、连续冲裁模、复合冲裁模,你搞懂了吗?

一、冲裁模具按工序组合程度可分为:简单冲裁模、连续冲裁模、复合冲裁模。 (一)简单冲裁模即敞开模 1、定义:它是指在一次冲裁中只完成冲孔或落料的一个工序。 2、简单冲裁模按其导向方式可分为: (1)无导向单工序模它的特点是结构简单,重量轻、尺寸较小、模具制造容易、成本低廉。但冲模使用安装时麻烦,模具寿命低,冲栽件精度差,操作也不安全。 无导向简单冲模适用于精度要求不高、形状简单、批景小或试制的冲裁件。 (2)导板式简单冲裁模 模精度高、寿命长、使用安装帧、操作安全,.但制造比较复杂。一般适用于形状较简单、尺

tiantianqiutian的博客 1245

30岁程序员被裁,改行卖麻辣烫月入4万!

加入技术群:微信关注公众号【程序员云课堂】 之前总有人问我,作为一个程序员可以搞点什么副业? 像有稳定工作的且收入还不错的,肯定工作为主,副业有时间搞就抓紧点时间,比如接个外包啥的,如果影响主业了还不如把时间花在工作上想想怎么升职加薪。但如果工作不稳定或者被裁了,问题就上升到了如果要转行,程序员可以做点什么? 最近在脉脉上看到一个前网易员工的帖子:“30岁被裁以后,我放弃互...

公众号:程序员云课堂 1343

裁人:“心要慈、刀要快”,做好裁人这件事

裁人是个沉重的决定,为了组织运转更高效,有时经理就是要做这个艰难决定,这是经理的责任。对于要被裁掉的员工,在这个环境下他工作和生活的质量也并不高,换个环境对他自己也是一种解脱。真正要裁员,提早做铺垫,经理对被裁同学现在的业绩表现不满意,要通过多次沟通指出员工的问题,并提出具体的改进建议。如果多次沟通仍不见效,那么经理就要做足准备,评估对事和对人的影响,争取到上级的支持。在裁员沟通前,经理必须做最坏的准备,把可能发生的情况都先过一遍,最好找公司HR帮我们审核一遍。

qq_33240556的博客 819

ADS仿真设计平行定向耦合器学习笔记

ADS仿真设计平行定向耦合器

qq_36521926的博客 1万+

ANSYS命令流黑箱揭秘:流体渗透压力载荷的七种收敛优化策略

本文深入解析ANSYS Workbench中流体渗透压力载荷的七种收敛优化策略,重点探讨接触探测点迭代逻辑、PPCN阈值动态调整及FPAT参数优化等关键技术。通过命令流示例和实战技巧,帮助工程师有效解决流体与结构相互作用仿真中的收敛难题,提升计算效率和精度。

weixin_29274337的博客 523

大厂程序员提倡“防御性编程”:故意把代码写得很烂,万一自己被裁,要确保留下的代码不可维护!

根据《刑法》第二百八十六条,凡是违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役,后果特别严重的,处五年以上有期徒刑。就企业的角度而言,需要重视大厂程序员们面临的困境和压力,鼓励开放、协作的编程文化,让每个程序员都能在团队中发挥自己的最大价值,从而提高团队的整体效率。此外,在这个快速变化的行业中,程序员更应该注重提升自己的技能和知识,以适应新的技术和挑战,而不是依赖于编写晦涩难懂的代码来保住自己的工作。

IT_1024的博客 1276

Cox构建预测模型(5):如何用R语言绘制校准曲线(附全套代码)

这篇文献通过绘制两个模型的DCA曲线来评估模型的临床决策实际需求,一个是列线图模型,包括纳入列线图的全部变量,一个是TNM模型,只纳入TNM分期3个变量。A图是训练集1年、3年、5年患者的总生存期的DCA曲线;B图是训练集1年、3年、5年患者的总生存期的DCA曲线,红色线条代表列线图模型(包括构建模型的10个变量),黄色线条代表TNM模型(仅纳入TNM分期3个变量),两个模型对比,在绘制校准图之前,必须要完成数据的导入、拆分数据集的工作、预测因子的筛选,校准图的绘制是分别在训练集与验证集独立进行的。

qq_37610365的博客 1360

五金冲压模具设计冲裁模的设计要点

五金冲压模具设计冲裁模的设计要点 冲裁模是利用模具使板材分离的冲压工序,包括落料、冲孔、切口、修边等工序。(图1) 1.冲裁过程: 冲裁即是分离工序,工件受力时必然从弹、塑性变形开始,以断裂告终。当凸模下降接触板料,板料即受到凸、凹模压力而产生弹性变形,随着凸模下压,模具刃口压入材料,内应力状态满足塑性变形条件时,产生塑性变形,冲件塑性变形从刃口开始,随着切刃的深入,变形区向板料的深度方向发展、扩大,直到在板料的整个厚度方向上产生塑性变形,板料的一部分相对于另一部分移动。 2.冲裁零件的断面形状及分析:

TT13018636633的博客 556

Cluster Computing期刊投稿实战:从格式调整到技术检查的全流程解析

本文详细解析了向Cluster Computing期刊投稿的全流程,涵盖心理准备、格式调整、参考文献处理及投稿系统操作。重点介绍了如何利用Springer LaTeX模板,特别是使用picins宏包解决作者简介排版难题,并强调了将BibTeX转换为BBL文件以避免技术审查陷阱,为研究者提供了一份实用的投稿指南。

weixin_28432777的博客 668

QEMU pcie config空间访问机制

而pci_host_conf/data_le_ops的定义是在hw/pci/pci-host.c里,对于0xCF8端口的处理,因为是地址选通,所以只需要在write的时候记录、read的时候返回记录的值即可。而pci_host_config_write/read_common接口,在前256Bconfig空间的模拟中,也同样是会调用这个接口,所以后续的处理都是一样的。这是真实的硬件设计,而对于QEMU+KVM的虚机场景,显然是要基于硬件实现和虚拟化的需求设计虚机访问config空间的完整流程。

leiyanjie8995的博客 1950

对不起,那个写代码最快的00后,刚刚被裁了

摘要:2026年,AI代码生成能力让程序员面临新挑战。文章通过阿强和老王的对比,揭示AI时代程序员的生存法则:从“代码构建者”进化为“复杂度守门人”。阿强依赖AI快速生成复杂代码却制造技术债务,而老王用极简方案高效解决问题。核心观点:1)代码是负债而非资产;2)品味比手速更重要;3)基础原理决定驾驭AI的能力。真正的竞争力在于判断“不写什么”,而非写得多快。程序员需在AI辅助下保持批判性思维,用专业判断创造简洁可靠的系统。

agions的博客 1309

OpenClaw进阶实战(二十五):抖音企业号——私信回复与视频评论分析

摘要:本文介绍抖音企业号自动化运营方案,突破抖音强风控体系的技术挑战。针对内容生产、私信互动和账号矩阵三大场景,提出混合架构解决方案: 私信自动化:结合关键词触发与随机延迟(45秒±15),实现拟人化回复,支持价格咨询/商务合作等高优先级消息识别 混合技术栈:官方API(合规)+真机RPA(覆盖长尾需求)+AI辅助生成(脚本→剪辑→发布闭环) 安全策略:通过设备指纹模拟、行为间隔随机化和内容差异化处理规避风控,提供每日200条的安全操作阈值。配套OpenClaw技能实现一键部署,包含cookie配置、回复规

PeterPan的博客 142

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

沉默王二 8万+

西门子 S7-1200 G2 高速计数器的使用方法介绍

西门子 S7-1200 G2 高速计数器的使用方法介绍

Robot_PLC_HMI_Automation 1691

二维矩形件排样算法之最低水平线算法实现

最低水平线算法的简单实现(Python) 1、二维矩形排样算法众多,最早的有BL算法、下台阶算法、最低水平线算法等,其中最低水平线算法及其优化算法应用较多,是与智能优化算法(遗传算法、模拟退火算法等)结合的最多的算法,本文利用python对最低水平线算法做了实现...

峰爸的博客 1万+

Altium Designer20下绘制封装、布局、布线及裁板等操作

本文的主要内容是使用Altium Designer20软件绘制封装以及在PCB中布局布线等,在熟练掌握了绘制原理图技巧的基础上更进一步来给元器件选择/绘制封装,并在PCB下进行布局布线操作,从而完成整个制板流程。

西岸贤 2万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

冲裁间隙为什么这么重要?看完你就知道了

冲裁间隙为什么这么重要?看完你就知道了 冲裁间隙的大小在一定程度上决定了冲裁件冲裁精度的高低,决定着冲压件是否合格。对于材料冲裁断面质量的影响最为直接。 什么是冲裁间隙?为什么其能决定产品质量?产品分离需要有刃口,原理如同剪刀。上模称为冲头,下模称为刀口。而冲头与刀口之间的距离称为“冲裁间隙”。如下图所示: 冲裁产品断面质量是保证其尺寸精度的一个重要指标,因为冲裁件断面包括:塌角带、光亮带、断裂带、毛刺区四部分,而这几个区域都是由冲裁间隙确定。几乎所有的冲裁产品都是这么一个断面图,如下图: 断面各区域是怎

Trouvaille_a的博客 1737

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

打脸!反转!推特出现技术故障,马斯克正在求被裁工程师复职,条件可以谈!

Twitter大裁员之后,出了技术故障,现有的工程师没法解决,正在联系被解雇的工程师们,希望他们重回Twitter。

IT界那些事儿 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

代码这样写,谁还敢裁你

大厂技术高级前端Node进阶点击上方程序员成长指北,关注公众号 回复1,加入高级Node交流群之前写过几篇关于如何写出可维护项目的文章(构建大型前端业务项目的一点经验、编写可维护的现代化前端项目、接手前端新项目?这里有些注意点你可能需要留意一下)近来看到很多公司裁员,忽然惊醒,之前是站在项目角度考虑问题,却没站在咱们程序员本身看待问题,险些酿成大错,如果人人都能做到把项目维护得井井有条,...

程序员成长指北 117

内裁多边形、外裁多边形理解

外裁多边形主要用于将多边形区域以外的数据都裁剪掉,比如你有很大一个区域的数据,但只想显示辖区内某个行政区的数据,这个时候就可以使用行政区边界作为外裁多边形。

qq_52231465的博客 220

HR给程序员挖坑:离职证明写被裁,才能拿补偿!

说到裁员,其实公司也有难处,要开源节流啊,流量其实就那么多,这么长时间市场挖掘的速度也都缓慢了,流量红利早就是几年前的事了,所以开源也就困难了。那么缩减成本的重要性就大了...

weixin_36841920的博客 1640

注释一段代码_程序员,一文教你如何写代码注释!

我就问你,让你好好写个注释,怎么就这么费劲呢?看什么看?说的就是你!一提到写注释,很多程序员的身体就会开始条件反射似的拉响警报,脑袋嗡嗡作响,骨骼肌开始战栗、毛细血管准备收缩,头皮逐渐发麻,然后佯装镇定的先去打个开水,再去上个厕所,最后回到工位开始看着代码发呆。能躲则躲,能赖则赖——愿意用身上五斤肉,换来不写注释的心情愉快。但是,不写注释怎么给代码注入灵魂?不要跟我说,程序员最恨的就是这...

weixin_39868248的博客 3352

操作系统读者写者问题代码实现

问题分析: 读者优先: 读者进程执行: 无其他读者写者, 直接执行 有写者等, 但其他读者在读, 直接读 有写者写, 等待 写者进程执行: 无其他读写者, 直接执行 有其他读写者, 等待 写者优先: 读者进程执行: 如果此时没有写者等待, 直接执行 如果有写者等待, 那么等待 写者进程执行: 如果没有其他写者, 那么执行 如果有其他读写者, ...

Blank_Tt的博客 1万+

什么叫裁员裁到大动脉?

因为一旦公司开始裁员,留下的员工会觉得“我的岗位是不是也不安全”,干活的心情变成了随时准备跑路,整个公司像一盘散沙。对裁人的公司来说,别为了眼前的小利,丢了未来的大局。最后,公司裁员也需要有点人情味。给被裁员工提供合理的补偿,甚至帮助他们寻找新工作,不仅能让被裁的人心里好受一点,也能给留下的人传递一种信号:公司虽然困难,但依然有底线和良心。同学们,裁员这个话题听起来很沉重,但老韩想说,无论是作为被裁的一方还是裁人的一方,咱们都要明白:裁员是一种再正常不过的社会现象,但它从来都不应该被简单粗暴地处理。

m0_61562916的博客 1866
上一篇: 一条命令搞定 Github 仓库初始化
下一篇: 框架怎么选?5 款主流 Web 框架对比
codingpy
博客等级 码龄11年 1867粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值