V2EX - 技术 |
- flate.NewWriter 和 os.(*File).readdir 内存占用奇高
- [程序员] 定居城市选择 [西安] 或 [成都] 哪个好?
- arch + swaywm 现状
- “鸣蛇”再添新功能:空值合并
- AdGuard Home 搭在腾讯云上,一天被封·······
- 记录一个诡异的线上宕机事故,大佬们帮忙排查一下问题呀
- inode 100%见过没?
- 看到 前端新人 在学 ren-fast 来逆向工程 ,想问问大伙,这是个啥?
- 看到有大佬分享故障排查的过程,就觉得紧张刺激
- 单元测试 ——「简单」的乐趣
- Golang 写的 web 也分 Service 和 DAO 吗?
- 请教如何对 Oracle11g 中的默认用户 SYS、SYSTEM 进行重命名操作
- edge 开启 Mica 效果
- 抽象类降低子类可读性探讨
- 请教大佬们监控磁盘空间增长率的 shell 脚本
- hw 海思内核模块, wireguard.ko
- 求个基于 DDD 的 flask 脚手架
- k8s 设置了 cpu/mem 的 limit 未设置 request 时会默认设置 request 值为 limit,为什么要这么设计呢?
- 有老哥 Build 过 reactnative 源码吗 安卓 有个问题请教下
- git 问题:已有仓库,在 umask=022 的基础上, git 如何配置可以使 git pull 新创建的文件的组有写权限
- 推荐一个适合程序员的效率工具 AltPlus,左边大拇指按下 Alt 键,就可以像使用 vim 一样编程了.
- 做了一个应该是全网最全的数据库 glossary 列表
- 腾讯云限时秒杀的轻量服务器又能买了
- 为什么你要用 Linux 当桌面呢?
- 怎么转 golang?
flate.NewWriter 和 os.(*File).readdir 内存占用奇高 Posted: 09 Sep 2021 04:47 AM PDT 使用 pprof 发现 flate.NewWriter 方法消耗了大量内存。 这张图是 inuse_space: 顺便吐槽下 os.(*File).ReadDir 内存占用也很离谱。 有没有大佬提供下优化思路 qaq | ||||||||||||||||||||||||||
Posted: 09 Sep 2021 04:44 AM PDT [程序员] 定居城市选择 [西安] 或 [成都] 哪个好? 老家是河北的,在北京太累了;还没去过这 2 个城市,有机会去旅游看看 | ||||||||||||||||||||||||||
Posted: 09 Sep 2021 04:42 AM PDT 最近尝试体验了一下 swaywm,比上次(大概两年前吧)体验有了很大的提升。GTK 、QT 、electron 、java 等平台已经都有原生 wayland 支持,chrome 虽然还是不能硬解视频,但是也可以不再依赖 xwayland 了。整体上感觉起来确实比 X11 丝滑一点(也许是心理作用)。 中文输入依然是个很烦人的问题。昨晚 在执行 总的来看,wayland 距离生产日常使用还是有段距离的,KDE 的 wayland 支持也跳票到了今年,还不知道能否如期完成。从 X 到 Wayland,迁移了这么多年,可能这就是为什么 Linux 桌面注定小众吧。 | ||||||||||||||||||||||||||
Posted: 09 Sep 2021 04:16 AM PDT https://github.com/abersheeran/mingshe 写过 JavaScript 的人应该很熟悉的 预计还会增加 JavaScript 里的 | ||||||||||||||||||||||||||
AdGuard Home 搭在腾讯云上,一天被封······· Posted: 09 Sep 2021 04:15 AM PDT 害,真的难搞,搭在腾讯云上一天就被封了 还有解封的希望么? | ||||||||||||||||||||||||||
Posted: 09 Sep 2021 04:02 AM PDT 环境二三十个微服务 SpringBoot+Dubbo 部署在阿里的 K8S 上,数据库也是买的阿里的 RDS,听领导说配置还挺高的,支持主备自动切换什么的。 事故起因和经过大版本上线,改了用户的缓存数据结构,凌晨上线时把 Redis 用户缓存全清了,上线当晚验证功能正常,白天运行也十分稳定。 下午 5 点多业务高峰的时候运营反馈系统蹦了,看后台是数据库负载正常、Dubbo 调用全部超时,领导首先怀疑是系统被攻击了,然后在阿里的后台打开了防火墙增强模式(具体叫什么不懂,效果是可以阻拦大部分到 Nginx 的请求),开完观察了好久后台调用还是超时,老板都开始炸锅了跑来了解情况,领导开始尝试万能的重启大法,ZK 的三个节点都重启了,微服务也挨个重启,绝望的是重启依然没有任何效果。 一顿瞎搞时间很快就到了晚上 8 点,这时候已经宕机 2 个多小时了还没找到原因,也不知道怎么恢复。然后我试着用 Arthas 监控了一下调用时间,发现主要业务流量入口 M 服务调用 Cache 服务一直超时,调用 C 主要是 M 从 Redis 获取不到用户缓存,需要 C 构建缓存放 Redis 。监控 C 服务的时候发现所有请求数据库的耗时都要 2000ms 以上,然后我们构建缓存需要读 8~9 次数据库但是 Dubbo 的超时时间设的是 10s 所以一直超时。 诡异事件首先怀疑是 SQL 写的有问题,但是有一个根据主键 ID 查询单表的居然也要 2000+ms,这就非常离谱了,后面我把参数打出来自己拼接 SQL 用 Navicat 查询只要十几毫秒,领导说可能是工具监控有问题,然后当场给这个查询加调用时间的日志验证,从 master 拉的分支,只加了一行日志!!! 然后,重新发包观察,诡异的是,系统恢复正常了!!!没有调用超时的日志,新加的那行日志打印出来的也是十几毫秒,其他服务也能正常调用了!!! 事故报告领导给的事故报告是晚上清除用户缓存,没有预先跑脚本构建缓存导致业务高峰期系统宕机。 疑惑为什么那个时间点 Navicat 和微服务查询同一条 SQL 时间差这么多?然后加了行日志系统又自动恢复了?诡异,太诡异了,说没有鬼我是不信的 大佬们来帮忙排查一下这可能是什么原因呀 | ||||||||||||||||||||||||||
Posted: 09 Sep 2021 04:01 AM PDT 使用 Apache 做反向代理并开启文件缓存时,一定不要忘记运行 htcacheclean 。 htcacheclean -d30 -n -t -p /var/cache/mod_proxy -l 512M 清理 /var/cache/mod_proxy 花了两个小时。 | ||||||||||||||||||||||||||
看到 前端新人 在学 ren-fast 来逆向工程 ,想问问大伙,这是个啥? Posted: 09 Sep 2021 03:48 AM PDT 打扰大伙了,我是个 4 年 的程序员。前后端都有干。算是个杂工吧 最近发现有 新人在学习 renfast,还有 ren-fast 的 generator,这玩意真能逆向工程完成所有的 东西(前台的页面,样式,逻辑,后台接口,最后连数据源的 sql 都 tnd 有了) 我是有点怕的。就问问大伙,有没有跟我差不多或者干的更久的 大帅哥,大美女。帮忙支支招,探讨一下, 小弟感谢! | ||||||||||||||||||||||||||
Posted: 09 Sep 2021 03:34 AM PDT 作为一名运维,最近看到有大佬分享排查经验,特别是线上故障排查,一步一步推理,就像看侦探小说一样,觉得紧张刺激,很兴奋。大家有这种感觉吗? | ||||||||||||||||||||||||||
Posted: 09 Sep 2021 03:30 AM PDT 忍受简单的能力知乎大 V 李松蔚讲了个和女儿互动的故事,很有意思:
他并没有要求女儿「尽快睡着」,而是做了个更简单的要求;但是聪明的女儿立刻联想到了「即使闭上眼睛现在也睡不着」并做出抗议。 在这篇文章里,他说:「对于聪明人来说,最难以忍受的情况不是一件事有多难,而是纯粹的简单」,「没有难度挑战的任务,会让他们感到无所着力」,「重复的练习是他们的死穴」。 单元测试单元测试似乎就是一种「简单而重复」的过程,不论是看起来还是写起来,都是由一大堆 GIVEN - WHEN - THEN 组成。 但是这「简单」的表象之下,隐藏着两个「简单」却很重要的问题:
按照套路,接下来应该先说「为什么要写单测」,但是太套路就有点无聊,所以咱们先聊聊「如何写好单测」。 面条式代码所谓面条式代码( spaghetti code ),是说某段代码和意大利面(不是通心粉)一样。 反正不是什么好话。 最近看到这么一段代码,功能是创建某个月的值班记录: 注:原代码有 60 行,这里略作简化。 这是一段典型的「逻辑很齐全,但是 un 单测 able 」的代码:
那么应该如何为它写单测呢? 重构
对于结构有问题的代码,首先要做的显然是重构。 我们首先关注这段代码的主要问题:调用「 requests.post 」请求了外部系统,这导致它和外部系统耦合在一起。 一个很容易想到的思路是,通过依赖注入的方式来解耦: 这样简单的改造以后,它就变成了一段「单测 able 」的代码了:通过 mock 一个 saver,我们可以采集并校验它的输出,例如 但是这样写出来的代码非常晦涩。更合理的方法是,将这段逻辑拆分成「生成值班列表」和「上报到值班系统」: 然后我们就可以将「生成值班列表」实现成一个纯函数: 就像数学课上的 「上报到值班系统」的实现就像这样: 因为涉及到外部系统,确实不太适合写单测,更适合用功能测试来保障其正确性。 另外,因为在 这样使得代码的职责更明确,不但可以提高这段代码的复用性,还可以对更特别的 case (例如大小月、闰年等)做校验。 小结一下:
当然,以上只是一个简单的例子,并不是完整的单测方法论。实践中还有很多其他环节需要考虑:
感兴趣的同学可以参考腾讯技术工程的《聊聊单元测试那些事儿》。 单测的好处通过上面的一番骚操作,我们已经看到了单测的好处:
而比重构现有代码更重要的是:
当然,刚开始实践单测的同学可能会感受到,这降低了编码的速度; 但是经过一段时间的重复练习,这种思维会被内化,自然地就能写出高质量的代码。 在实践中,单测实际上也大幅提高了测试的效率。 构造一个完整的测试往往是很耗时的,编译 1 分钟、启动 1 分钟,发个测试请求 1 秒钟,「性价比」很低(这可能是很多同学不喜欢测试的原因)。 而单测只需要编译运行少部分代码,因此可以快速验证代码逻辑。 由于大量代码 bug 在单测时就已经被发现并修复了,可以大幅减少后续 "修改 - 编译 - 启动 - 测试" 环节的数量,这也极大提高了整体的测试效率。 在《聊聊单元测试那些事儿》里还有一份微软的数据:
最近遇到的一个 case 也是很好的例子:手头项目多版本并行,我在 A 版本开发的功能,需要 merge 到 B 版本,merge 以后,跑了一轮 test case,就可以比较放心地说,merge 后的代码没有问题 —— 同样地,当我们需要给一段代码添加新功能时,如果有存量的 unit test,我就可以比较放心地去修改它了。 结语在《忍受简单的能力》里,李松蔚说:
写高质量的代码,从踏实地写单测开始。 btw,李松蔚这篇文章实在太经典,我忍不住要再引用一段:
如果不记得的话,可以试试下面这句: 加入神策数据,帮助客户实现数据驱动。 加入神策数据,帮助客户实现数据驱动。 加入神策数据,帮助客户实现数据驱动。 神策数据是一家致力于"帮助三千万企业重构数据根基,实现数字化经营"的大数据公司。公司正在飞速发展,在北京、上海、武汉、成都、西安、合肥等地都有研发中心,后端、前端、客户端、QA 等岗位均虚位以待,对大数据感兴趣的同学千万不要错过 —— 欢迎关注我的公众号 参考链接 | ||||||||||||||||||||||||||
Golang 写的 web 也分 Service 和 DAO 吗? Posted: 09 Sep 2021 03:28 AM PDT python 后端出身. 第一次写 go web. 然后照着网上的开源项目抄. 我觉得 controller service Model 三层还是可以的. 毕竟业务扔到 Service 里面逻辑更清晰一些. 然后和 Java 同事请教了一下. 令我困惑的是:
这样不行吗? 为什么一定要
这句话必须放在 DAO 层, 而不是直接在 Service 里写? 感觉好麻烦啊. 我的问题是:
谢谢 | ||||||||||||||||||||||||||
请教如何对 Oracle11g 中的默认用户 SYS、SYSTEM 进行重命名操作 Posted: 09 Sep 2021 03:03 AM PDT 一年一度的安全检查又来了,有一条挺反人类的要求:"数据库未重命名或禁用默认账户 SYS" 小弟不太懂数据库,请教如何对 Oracle11g 中的默认用户 SYS 、SYSTEM 进行重命名操作,不需要考虑业务影响,单纯就是新装一个数据库应付检查。 | ||||||||||||||||||||||||||
Posted: 09 Sep 2021 03:03 AM PDT 所有的文章都说 "第一个是开启 Mica 效果,这是 Windows 11 独有的设计语言,可以自动将桌面背景的颜色应用于活动窗口。目前 Edge 93 可以在标题栏中启用 Mica 效果,就如下面截图所示" 还是自己从 flags 里找到了: Enable Windows 11 Visual Updates Enables in-progress visuals appropriate for your currently installed version of Windows. – Windows 这么重要的步骤,居然没一个说的 | ||||||||||||||||||||||||||
Posted: 09 Sep 2021 02:51 AM PDT 有个抽象类 Job,代码如下 Job 封装了一个任务的主流程:a()->b()->c(),其中 abc 方法均为抽象类,由子类实现,中间穿插一些公共的方法,如 processId,processData,在父类实现。 这是一种比较常见的封装,乍一看没什么问题。 但是当 Job 的实现类很多,同时整个主流程变得复杂的时候,各种抽象方法和父类的公共方法穿插调用,特别是其他人去看代码的时候,就会变得特别痛苦,需要不断从子类和父类中跳转,以看清整个流程的全貌,此时子类的可读性就会变得很差。 作为读者,在面对多个子类任务的时候,我希望每个类都能看懂整个流程,作为开发者,有没有什么好的设计模式,能够在适当的封装下,又提高代码的可读性呢? | ||||||||||||||||||||||||||
Posted: 09 Sep 2021 02:17 AM PDT 磁盘超过阈值发出告警,这个我会写。请教一下如何监控磁盘空间增长率,求大佬们分享一下关键代码给小弟参考一下,谢谢。 我需要监控根目录和 /data 两个挂载点的磁盘使用率,每天 0 点统计这两个挂载点的磁盘使用率,每天 18 点下班时,再统计这两个挂载点的磁盘使用率,如果磁盘使用率增长了 10%以上,就告警。 | ||||||||||||||||||||||||||
Posted: 09 Sep 2021 12:04 AM PDT RT, 光猫型号,hs8145x6, 电信最新款千兆猫,查了下自带 udp-tunnel.ko 。 想着能不能编译下 wireguard 模块。居然好像成功了。 | ||||||||||||||||||||||||||
Posted: 08 Sep 2021 11:25 PM PDT 对 DDD 的概念越了解越模糊, 看了一些基于 DDD 的资料,发现每个人对 DDD 的理解好像都不太样, 不知道有没有标准一些的基于 ddd 的脚手架 | ||||||||||||||||||||||||||
k8s 设置了 cpu/mem 的 limit 未设置 request 时会默认设置 request 值为 limit,为什么要这么设计呢? Posted: 08 Sep 2021 10:01 PM PDT https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-cpu-resource/ 熟悉 k8s 的朋友可以说说为什么这么设计吗? | ||||||||||||||||||||||||||
有老哥 Build 过 reactnative 源码吗 安卓 有个问题请教下 Posted: 08 Sep 2021 08:50 PM PDT | ||||||||||||||||||||||||||
git 问题:已有仓库,在 umask=022 的基础上, git 如何配置可以使 git pull 新创建的文件的组有写权限 Posted: 08 Sep 2021 08:19 PM PDT 参考了文档 https://stackoverflow.com/questions/3242282/how-to-configure-an-existing-git-repo-to-be-shared-by-a-unix-group, 使用 git config core.sharedRepository group,但是 git pull 更新的文件的组权限依然没有写权限 | ||||||||||||||||||||||||||
推荐一个适合程序员的效率工具 AltPlus,左边大拇指按下 Alt 键,就可以像使用 vim 一样编程了. Posted: 08 Sep 2021 12:21 PM PDT https://github.com/gclsoft/ALtPlus 前言AltPlus是根据 CapsLock(原作者版本)修改的,个人觉得 Alt 键比 CapsLock 更好用,所以对其进行改动。本人是个键盘党,还是个程序猿,非常不喜欢敲代码敲得嗨时,还要去碰鼠标、右手移动一段距离去操作方向键,删除键等等。 Summary
| ||||||||||||||||||||||||||
Posted: 08 Sep 2021 12:06 PM PDT 数据库博大精深,其中的术语也是五花八门,前两天花时间做了一个数据库 glossary 的页面,目前收录了 80+的术语,应该是目前全网最全的,之后还会持续更新。 | ||||||||||||||||||||||||||
Posted: 08 Sep 2021 08:15 AM PDT 以前:抱歉,当前商品仅针对尚未购买过轻量应用服务器的产品新用户开放,欢迎了解其他活动。 | ||||||||||||||||||||||||||
Posted: 08 Sep 2021 07:34 AM PDT 今天逛王垠的博客,想起之前他写的关于 Linux 的文章。 我大学那会,也是受他影响,把桌面换成了 Ubuntu,Linux 的技能也是那个时候学会的。 一直使用 Ubuntu 到大学毕业参加工作,工作中感觉自己是个另类,因为只有我一个人用 Linux 。 开发过程中的东西,Win 上有的,Linux 下也有,这点没让我觉得 Linux 有什么优势。公司使用微信和 QQ,这个 Linux 反而是硬伤,Wine 又不稳定,只有开个 Win 虚拟机。 后来想通了,为什么不用 Win 呢,该有的都有。工作和娱乐两不误,而 Linux 只能工作。 当时 QQ,网易云音乐,微信,钉钉,这些都只有 Win 才有。不过现在也有 Linux 的网易云音乐了。 使用 Linux 的过程中,我并没有感到效率的提升,而是一大堆破事。 系统可能因为一个升级就出问题,轻则软件包依赖异常,重则进不了桌面。 那会 Ubuntu 还是用的 gnome,这个东西也会卡死,我都遇到好几次,鼠标根本动不了。只能切换到终端杀进程,重启桌面服务。 Linux 桌面的体验真心没有 Windows 好,就很折腾。 我想唯一的好处,就是让我对操作系统的本质更了解。让我在学习操作系统课程的时候,知道什么是进程,内存管理,文件系统。而不是像其他同学那样是陌生的概念。 但我不得不说,Linux 的优势是在服务器上。除了 Windows 专属的域,其他的任何服务都能用 Linux 搭建,不仅免费,还占用资源少。 以上是我的经历,我曾经是 Linux 的狂热粉丝,但我最终从 Linux 叛逃到 Windows 上了。 我想论坛里肯定还有坚持使用 Linux 的小伙伴,你们为什么要用 Linux 当桌面呢? | ||||||||||||||||||||||||||
Posted: 08 Sep 2021 03:20 AM PDT 打算面向工资编程,以前是 python flask 的 怎么转 go 呢? |
You are subscribed to email updates from V2EX - 技术. To stop receiving these emails, you may unsubscribe now. | Email delivery powered by Google |
Google, 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States |
No comments:
Post a Comment