首页
学习
活动
专区
圈层
工具
发布

我在优化代码时学到的那些事

大学时我总以为写代码就是告诉电脑一步步该怎么做。等到真正开始做底层开发,才意识到现代编译器简直就是个有魔法的黑盒子。调试一个性能问题时,我发现编译器把我写的20多行代码优化成了只有5条汇编指令!...好家伙,它偷偷替我做了这么多工作:常量折叠:让编译器替你算数学还记得我第一次看反汇编结果时的震惊 - 我代码里的width * 800 + height * 600直接变成了一个硬编码的数字。...但这对编译器来说简直是天赐福音 - 因为它可以很容易地追踪每个变量的来源和去向,进行更激进的优化。指令调度:CPU流水线的交通指挥官这部分是我最痴迷的领域,因为它直接和硬件打交道。...现代CPU都是流水线设计,可以同时执行多条指令的不同阶段。...出过几次bug后,我学会了在科学计算代码里避免使用它。真实故事:我是如何修复渲染引擎的回到开头说的那次性能优化。我们的渲染引擎有个着色器编译环节特别慢。

19900
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Postgresql在SyncOneBuffer时,为什么可以不加锁判断页面是否为脏(race condition第三篇)

    1 问题定义 在SyncOneBuffer拿到一个脏页时,决定是否需要刷脏需要拿到desc中的标志位来判断。...这里取标志位时没有加content lock,那么如果这里刚刚检查完不需要flush,马上并发一个写入把页面标记为脏了怎么办,会不会丢数据?...buffer标记脏在写xlog前,那么如果checkpoint在sync时没发现buffer为脏: 那么一定可以得出结论:insert的xlog还没写。...进一步可以得出结论:checkpoint的redo稳点一定在insert xlog位点之前。 进一步:这次检查点的redo位点包含这次插入的xlog。...buffer标记脏在写xlog后,那么如果checkpoint在sync时没发现buffer为脏: 存在可能性:插入的xlog已经在很早前就写了,但是一直没有标记。

    63440

    我在测试移动弱网时踩过的坑|洞见

    按照移动的特性来说,一般应用低于2G速率的都属于弱网,也可以将3G划分为弱网。除此之外,弱信号的Wifi通常也会被纳入到弱网测试场景中。...为何要进行弱网测试 我当前所在项目的产品是一款适配于低资源环境的医疗IT系统,目前主要是在坦桑尼亚地区使用。...解决方案 :根据数据特性,对可能造成脏数据的地方,通过关键字段,例如创建时间,key-value值等生成hash键,标记记录唯一性,即数据写入时,检查hash键是否存在,如果已经存在,当前重复数据丢弃。...解决方案 : 弱网连接超时后,检查应用本地数据库是否有用户登录信息,若存在,获取应用本地用户信息进行登录。 4、现象:在弱网环境下,用户输入用户名和密码后点击登录,登录过程中应用崩溃并且闪退。...5、现象:弱网络环境下,用户请求页面响应时间较长,等待的过程中,页面上的部分控件仍然可以操作,当用户点击控件时,出现应用闪退现象; 原因:没有对数据加载流程进行判断,直接暴露控件可控,当出现依赖数据的控件操作时

    2.8K60

    Win32 程序在启动时激活前一个启动程序的窗口

    Win32 程序在启动时激活前一个启动程序的窗口 发布于 2018-08-05 13:48 更新于 2018...本文介绍简单的几个 Win32 方法调用,使 Win32 程序也支持单实例。 ---- 激活之前进程的窗口 我们可以通过进程名称找到此前已经启动过的进程实例,如果发现,就激活它的窗口。...nCmdShow 的值: 0 Hide 1 Minimized 2 Maximized 9 Restore 另外,找到的窗口此时可能并不处于激活状态。...那么我们需要添加额外的代码将其显示出来。 在前面的 ShowWindow 之后,再调用一下 SetForegroundWindow 即可将其激活到最前面来。如果在其他桌面,则会切换到对应的桌面。...IntPtr hWnd); var hwnd = process.MainWindowHandle; ShowWindow(hwnd, 9); SetForegroundWindow(hwnd); 找到并激活窗口

    1.3K20

    我在面试机器学习、大数据岗位时遇到的各种问题

    在面试的过程中,一方面要尽力向企业展现自己的能力,另一方面也是在增进对行业发展现状与未来趋势的理解,特别是可以从一些刚起步的企业和团队那里,了解到一些有价值的一手问题。...在百度贴吧里发布 APP 广告,问推荐策略? 如何判断自己实现的 LR、Kmeans 算法是否正确? 100亿数字,怎么统计前100大的? …… 答题思路 用过什么算法?...基础知识 对知识进行结构化整理,比如撰写自己的 cheet sheet,我觉得面试是在有限时间内向面试官输出自己知识的过程,如果仅仅是在面试现场才开始调动知识、组织表达,总还是不如系统的梳理准备; 从面试官的角度多问自己一些问题...,比如撰写自己的 cheet sheet,我觉得面试是在有限时间内向面试官输出自己知识的过程,如果仅仅是在面试现场才开始调动知识、组织表达,总还是不如系统的梳理准备; 从面试官的角度多问自己一些问题,通过查找资料总结出全面的解答...除算法知识,还应适当掌握一些系统架构方面的知识,可以从网上分享的阿里、京东、新浪微博等的架构介绍 PPT 入手,也可以从 Hadoop、Spark 等的设计实现切入。

    1.9K60

    一周AI最火论文 | 模型是否遗忘了我删除的数据?这个算法可以评估!

    突然,提供者之一决定离开并要求删除数据,但更大的问题是,怎么确保该模型“忘记”这份数据。 在本文中,研究人员首次提出了一个具有挑战性的问题:模型是否忘记了数据?...他们假设了解查询数据集和模型输出激活的分布情况,并建立了统计方法,将目标的输出与使用不同数据集训练的模型的输出进行比较。 论文贡献: 1.引入数据隐私和保留方面的新问题。...2.提供一种可用于检测模型是否忘记了特定数据的解决方案,包括当数据源有重叠时这样具有挑战性的情况 研究人员将该方法用在了自动心脏诊断挑战赛(ACDC)的中一个心脏病理学的诊断任务上,并试验了几种基准数据集...在本文中,谷歌AI研究人员与哥伦比亚大学合作提出了一种新的元学习方法,该方法可以使机器人快速适应动态变化。...与以前的方法不同,预测的3D模型可以在不同的表达式下,与高度详细的几何图形进行绑定。这些前所未有的数据集和代码将向公众发布以供研究。

    1.3K10

    在 linux 中我安装了一个命令行,是否所有用户都可以使用这个命令,比如 docker?

    分享一个 linux 技能飞书话题群的一个问题。 ---- 问: 在linux系统里,普通用户目录是在 /home 下,root用户目录在 /root,因此全部用户共享目录的。...(比如说ohmyzsh之类的) 我之前在自己服务器上,每次都需要安装两遍,一次只有当前那个用户生效,这是为什么呢?...---- 答: 不一定,当我们说我们在 linux 装了一个东西,指的是:「我们装了一个命令,可全局执行」。此时是将该命令放在了全局执行目录(或者将该命令目录放在了 $PATH)。...哦对,PATH 该路径列表可自定义,而每一个用户都可以有独立的 PATH 环境变量。...所以,要看一个命令是所有用户共享还是仅对当前用户有效,具体要看该命令是怎么装的,可以看看 which command 进一步排查。

    9.3K60

    无聊时在课上弄得python笔记(我可真无聊 turtle的垃圾教程

    这是一个笔记-turtle的垃圾教程 1.画图-turtle 类似 import turtle as t t.forward(12) # 题会出,只会出1个 想画图 导入库 import import...turtle as使用 import turtle as t 可以写 可以不写 写了可方便一些 import推荐放到代码最上端 python暂时没有自带的画图 一定要做import导入 要使用库名.方法名的方法...类似:绘制线段代码t.forward(100) 2.导入库有方法 绘制图形最重要的是 1 线段 2 旋转 绘制线段:t.forward(长度 像素) python import turtle as t...t.pendown() 无参数 定位 t.goto() 为坐标 x&z 保留画面 t.done() 无参数 隐藏画笔 t.hideturtle() 无参数 绘制圆圈(圆弧) t.circle(半径,弧度) 弧度可以不填

    74620

    基于江科大工程模板的最新freertos移植,标准库(包括我在移植时出现的问题),可以直接找我要移植好了的模板

    第一步:在官网下载freertos 1.直接搜索freertos,在官网下载即可 第二步:准备好江科大的模板,没有的可以去哔哩哔哩搜索下载,应该都知道吧 第三步:打开工程模板,创建freertos文件...第四步:在freertos中创建三个文件,inc,src,port,用来装移植的freertos 第五步:将下面的文件(.c结尾的就可以了)复制放到自己的src文件夹中 第六步:将下面的文件(全部)复制放到自己创建的...port文件夹中(不知道在哪里可以看上面的路径哈) 第七步:将heap_4.c文件也放在自己创建的port文件中 第八步:将以下头文件放在自己创建的inc目录下(不包含readme文件) 第九步:将配置文件...,不然还是会报错 经过编译,0错误,0警告,成功移植,但是还有一点需要进行操作,才能够正常的进行操作 在FreeRtosConfig.h文件的最后,但是要在endif之前,添加下面的三个语句 #define...到这里,freertos操作系统就被我们成功的移植了,编译运行,0错误,0警告 看着移植过程很繁琐,但是这是我们迈向它的第一步,到这里,我们就可以愉快的开始后面的操作了,遇到问题的小伙伴可以给我私信,

    87511

    在工作时,领导总是给我安排额外的工作打乱我,怎么办?

    我曾经辅导过一个刚入职场两年做数据分析的毕业生,她的领导经常让她给自己贴发票。我发现她对本职工作不感兴趣,反而一直对行政管理特别向往。...于是,我问她,是否可以将贴发票这件事做得更科学、更有趣,并且和行政管理建立起联系呢?...,在没有弄清楚情况的时候一味地坚持自己的想法和主张。...7.你可以通过观察上级的沟通方式与决策方式来了解他的风格。我曾经辅导过的一位客户向我抱怨,他和他的领导之间的关系一直不太融洽,后来双方发现,这是因为彼此的决策风格不一样。...你可以用这样的话作为开头与他进行沟通:“领导,看起来这件事对你来说也挺重要,不过因为我手头确实有不得不马上处理的事,您看这样行不行……” 11.面对“不合理”的要求,请你不只是提问题,也要提两个或两个以上建议

    1.2K20

    | TIA Portal 中 SINAMICS 驱动集成的完整指南

    具体来说,您可以指定是否使用制动电阻器以及所使用的制动电阻器的尺寸。您还可以指定是否在驱动器和电机之间使用过滤器。指定滤波器的使用很重要,因为当驱动器进行电机识别时,滤波器会增加额外的电感。...接受主控警告 激活控制面板后,我们可以看到电机测量处于活动状态。这意味着下次我们尝试运行驱动器时,电机测量将在静止状态下进行。 电机测量警告 单击前进按钮开始电机测量过程。...因此,我将控制类型选项保留为“通过终端”。 控制类型是通过终端 您还可以单击 STO 按钮查看 STO 功能背后的逻辑,并选择一个数字输出以在 STO 激活时打开。...在测试停止中,您可以激活和停用驱动器的 STO 功能,以验证安全电路是否正常工作。驱动器测试停止之间允许的时间是您对驱动器进行的风险评估的结果。...当此警告激活时,驱动器将继续运行,但驱动器上会出现警报。需要测试停止来清除警报。 同样,您可以在需要测试停止时激活驱动器上的数字输出。

    4.4K30

    【机器学习】我在面试机器学习、大数据岗位时遇到的各种问题

    在面试的过程中,一方面要尽力向企业展现自己的能力,另一方面也是在增进对行业发展现状与未来趋势的理解,特别是可以从一些刚起步的企业和团队那里,了解到一些有价值的一手问题。...在百度贴吧里发布 APP 广告,问推荐策略? 如何判断自己实现的 LR、Kmeans 算法是否正确? 100亿数字,怎么统计前100大的? …… 答题思路 用过什么算法?...基础知识 对知识进行结构化整理,比如撰写自己的 cheet sheet,我觉得面试是在有限时间内向面试官输出自己知识的过程,如果仅仅是在面试现场才开始调动知识、组织表达,总还是不如系统的梳理准备; 从面试官的角度多问自己一些问题...,比如撰写自己的 cheet sheet,我觉得面试是在有限时间内向面试官输出自己知识的过程,如果仅仅是在面试现场才开始调动知识、组织表达,总还是不如系统的梳理准备; 从面试官的角度多问自己一些问题,通过查找资料总结出全面的解答...除算法知识,还应适当掌握一些系统架构方面的知识,可以从网上分享的阿里、京东、新浪微博等的架构介绍 PPT 入手,也可以从 Hadoop、Spark 等的设计实现切入。

    1.7K60

    虚拟机学习系列1、VMware Workstation安装教程

    ,打开快捷菜单,选择“打开”选项;或者可直接双击打开3、根据自己的系统选择是否有拦截警告提示,若有,请选择允许运行,若无则请忽略;4、打开后弹出安装向导界面,如要确定安装,则可直接单击“下一步”按钮,若不想安装...,可选择“取消”按钮;5、在安装向导对话框中单击“下一步”按钮,弹出“用户许可协议”界面,若有兴趣,可自行查看用户许可协议;此时,“下一步”按钮置灰,无法进行下一步操作,如要继续安装,则勾选“我接受许可协议中的条款...,也可选择试用,再单击“继续”按钮即可;21、VMware Workstation Pro 15 激活许可证,可网络自行查找,也可使用以下密钥,或者使用其他方法;UY758-0RXEQ-M81WP-8ZM7Z-Y3HDAVF750...,点击继续按钮弹出欢迎使用界面;23、单击“完成”按钮,打开软件;24、在菜单栏中选择“帮助(A)-关于VMware Workstation(A)”可查看产品信息、许可证信息、附加信息等。...从上面的讲解可以看出来,VMware增强型键盘驱动程序主要的作用是提高安全性,如果只是家庭、个人电脑上使用VMware,我个人觉得没有必要打勾。未完待续!

    1.7K00

    虚拟机系列5、VMware Workstation Pro16安装windows server 2016服务器系统

    安装服务器系统Windows Server 2016 一:创建新的虚拟机1、打开VMware,在主页单击“创建新的虚拟机”或选择菜单栏“文件(F)-新建虚拟机(N)”;2、弹出“新建虚拟机向导”对话框,...;--(自行网络科普)14、勾选“BIOS(O)”,单击“下一步(N)”按钮;15、处理器(可根据自身机器配置选择,建议不要超过本机-不能超过本机);16、处理器内核总数超出时如下图所示(会有相关提醒,...”按钮;27、指定磁盘文件,一般默认即可(这里默认为:moon.vmdk),单击“下一步(N)”按钮;28、到这里时--基本已设置完毕,可查看配置好的内容,确认后单击“完成”按钮;29、如需修改配置可单击...“浏览(B)”按钮,选择已经准备好的(Windows Storage Server 2016)镜像文件;35、在“虚拟机设置”对话框中单击“确定”按钮;36、确定后可发现“CD/DVD(SATA)”已从...),非桌面体验版打开来是命令行界面,单击“下一步(N)”;44、适用的声明和许可条款;(此时“下一步(N)”按钮置灰)45、勾选“我接受许可条款(A)”,单击“下一步(N)”;46、选择“自定义”,默认是第一个

    94610

    我在工作一年时怎么都看不懂的编程写法。今天...

    作为一名程序员,你一定遇到或亲自写过这样的代码。有人将它形象的形容为shi山,或者被戏称为“面向保就业编程”。...以下面这个代码为例,其中的问题也显而易见,当越来越多的条件判断时,代码会变得非常臃肿,难以维护。...首先,我们把每个条件逻辑代码块,抽象成一个公共的接口,可以得到以下代码: // 获取博主信息接口 public interface IMediaService { void showMedia...这样的好处也显而易见,就是可以灵活的切换不同的博主信息,比如:我想看JavaPub的信息,只需要将mediaType设置为JavaPub即可。...我想看马士兵的信息,只需要将mediaType设置为msb即可。

    38100

    如何修复另一个更新正在进行中WordPress升级错误

    如何修复另一个更新正在进行中WordPress升级错误   在使用WordPress建站时,是否遇到过 WordPress 网站当前正在进行另一个更新的错误?...我将向您展示如何通过两种不同的方法修复此错误,您可以选择最适合您的方法之一。 使用插件修复另一个更新正在进行错误。 手动修复WordPress中的另一个正在进行的更新错误。 1....激活插件后,您需要访问“设置“”->“ Fix Another Update In Progress ”。单击修复 WordPress 更新锁定按钮。   ...当您单击该按钮时,该插件将删除 WordPress 的核心更新锁定选项,将会看到错误已成功修复的消息。...单击 WordPress 选项表 (wp_options) 旁边的浏览按钮。现在,您可以看到表格中的所有行。

    5.4K20
    领券