首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

h文件和c文件区别include本身只是一个简单文件包含预处理命令,即为include后面文件放到这条命令这里,除此之外,没有其它用处(至少也样认为).

这样岂不方便,要改某个声明时候,只需要动一下头文件就行了 4.在头文件中声明结构体,函数等,当你需要将你代码封装成一个库,别人来用你代码,你又不想公布源码,那么人家如何利用你库呢?...预处理是编译器前驱,作用是存储在不同文件里程序模块集成为一个完整源程序. include本身只是一个简单文件包含预处理命令,即为include后面文件放到这条命令这里,除此之外,没有其它用处...对乾坤一笑兄观点,十分赞同,基础东东一定要弄明白.下面就乾坤一笑兄例子做讲,完备他一些人迷惑不解时候~ 例子: //a.c#include "a.h" //问题出来了:这句话是要...由于想写这些函数声明地方非常多(每一个调用 xx.c 中函数地方,都要在使用前声明一下子),所以用 #include "xx.h" 这个宏就简化了许多行代码——处理器自己替换好了。.../类型/作用域(在那个阶段有效)等信息,通俗说一下就是,当编译器看到一个符号声明时,例如你函数名它就会把它放到这个符号表中去登记一下符号表里存放着你函数入口地址,参数个数,返回信息等等一堆东西而在联接阶段主要是处理工程中符号表与调用对应处理关系

1.4K20

异步,同步,阻塞,非阻塞程序实现

如果是同步,线程会等待接受函数返回值(或者轮函数结果,直到查出它返回状态和返回值)。如果是异步,线程不需要做任何处理,在函数执行完毕后会推送通知或者调用回调函数。...同步: 线程 ----主动来拿结果----> 函数 异步: 线程 <---你结果拿给我---- 函数 阻塞,非阻塞 阻塞非阻塞差异,在于线程调用函数时候,线程状态。...当前任务移除任务队列。 上面的代码中,在一个while循环中timer状态。由于timer存在于wait中。所以需要把timer“提取”出来。...timer 从生存器gen yield返回出来 2. 轮timer状态(实质是切换进出timer,看它有没有引发StopIteration异常) 3....也就是说,在每个要处理阻塞地方,都人为函数切成三个部分: 1. 执行函数前半部 2. 执行新线程,后半部作为回调函数传入。函数退出。 3. 等待后半部在线程完毕后被执行。

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

代码整洁之道-读书笔记之注释

注释恰当用法是弥补我们在用代码表达意图时遭遇失败当发现你代码需要写注释时候,一定要多思考一下,有没有办法通过代码表达,能不能把注释写尽量少注释不一定解释是正确代码(程序员不能坚持维护注释...如果你决定写注释,就要花必要时间确保写出最好注释。例如,在FitNesse中找到这个例子,例中注释大概确实有用。不过,作者太着急,或者没太花心思。他喃喃自语变成了一个谜团。...4.2 多余注释读懂注释比读懂代码还要费时间,就属于多余注释了4.3 误导性注释注释解释代码并不是代码真正表达含义4.4 轨式注释所谓每个函数都要有Javadoc或每个变量都要有注释规矩全然是愚蠢可笑...这类注释徒然代码变得散乱,满口胡言,令人迷惑不解。...4.5 日志式注释每次修改,都修改记录到注释中,日积月累,会变冗长,代码凌乱4.6 废话注释代码已经表达清楚,还添加注释,属于废话注释看一个例子// The day of the month.

36970

java分布式系统开关功能设计(服务升降级)

这个类是一个单例,保证全局唯一(代码就不写了,单例模式一般是学习设计模式中最开始接触呵呵)。...这个时候就需要通过一些办法办法很多,可以是消息系统,可以是zookeeper,可以是页面触发)来清理一下开关属性缓存,缓存重新加载一下,从而实现最新状态获取。...这个是不是有点复杂,有没有更加简单办法?...“配置信息伪推送服务”,例如我变更了一个开关属性,不再需要做清理缓存事情,diamond帮你做掉了(原理很简单,例如系统A订阅了在diamond中开关信息,这时候A会启动一个线程,每隔一段时间来轮...: 上面这些是在陆续系统维护中尝试或者看到处理办法,通过开关方式,实现系统升降级。

1.8K30

实战|我们又来了,一次授权渗透测试记录

手里最近有一个学校授权项目,今天渗透过程写一下 这个管理员很吊,直接甩手一个IP,一个你自己看着来吧眼神,emmmmm……… 来吧,谁让拿人家毛爷爷了呢,掏出落灰Nmap,全端口给我扫起 Nmap...既然都不存在,咱们扫扫目录吧 (登入框常见渗透思路:弱口令、要么注入、再么找JS文件或者看看有没有api接口泄露,在这里先透露一个小道消息,因为上周去别的市参加红蓝对抗了,有一个目标系统就是当时弱口令跟注入都没有...牛批,牛批,牛批,为了方便用户登录,登录信息写死了,那我就不客气了,登录! ? 一个每天都在正常使用考勤打卡系统,我们继续往下看看 ?...我们更新文章指向渐进,不想发太复杂,基础慢慢往上。 有些时候别人说我们发大多部分都是弱口令,但是人家确实存在弱口令,也没办法啊。或者各位有什么好建议可以给公众号留言,都有看。...它会帮助你建立一套完整学习体系,同时,行业大佬将亲自和你交流经验,你快速找到适合你学习路线和方法,事半功倍!

1.2K50

服务端接口中那些坑

对于一个程序员来说,思考时间>=写代码时间,如果思路不对写代码越多,错也越多,任何时候思考是保证高效工作最省事武器。  ...这个时候问题来了,如果中途调整了数据库多加了字段,新app用户请求时候带了这个字段,插入和修改都不会存在任何问题,但老客户端呢,如果此时你及没有新旧接口分离,也没判空除了新字段,那么你程序就会报错...设想这样一个情景,在开发一个修改用户资料接口时候,只需要使用用户id和要修改资料就够了吗?...性能问题是一个程序好坏最直观体现,也是验证一个程序员最直接方式,在这里呢要强调一件事,就是不要在for循环里面嵌套查询。...就是for 1w次去查询经销商产品,然后组成一个数据,那么这样做造成结果是什么,你会查询至少1w次数据,那么有没有办法解决这个问题,当然,你可以所有经营产品查出来,放到内存中然后每次从内存中去取经营产品就可以了

60050

Java代码评审歪诗!你写出更加优秀代码

贾言 代码评审歪诗 窗外风雪再大 也有陪伴着你 全文字数:2000字 阅读时间:5分钟 贾言 代码评审歪诗 验幻空越重 命频异长 依轮线日简 接偶正分壮 架构师说, 用20个字描述代码评审内容...幻-欢 在代码中要杜绝幻数,幻数可定义为枚举或常量以增强其可读性; 空-空 要时刻警惕空指针异常: 常见 a.equals(b) 要把常量放到左侧; aInteger == 10 如果 aInteger...-勋 不要在循环中调用服务,不要在循环中做数据库等跨网络操作; 频-品 写每一个方法时都要知道这个方法调用频率,一天多少,一分多少,一秒多少,峰值可能达到多少,调用频率高一定要考虑性能指标,考虑是否会打垮数据库...,是否会击穿缓存; 异-宜 异常处理是程序员最基本素质,不要处处捕获异常,对于捕获了只写日志,没有任何处理catch要问一问自己,这样吃掉异常,是否合理; 下面是一个反例, 在导出文件controller...接-洁 接口是用来隔离变化,如果一个业务有几种不同形态,但都有相同处理,那么可以定义接口来隔离业务形态不同,在服务调用处,通过业务类型字段来获得不同服务类。

5.4K20

你不知道 Event Loop

JavaScript 从诞生起就是单线程,原因大概是不想浏览器变得太复杂,因为多线程需要共享资源、且有可能修改彼此运行结果,对于一种网页脚本语言来说,这就太复杂了。...setImmediate 先执行 setImmediate 是在 check 阶段执行,相对于 setTimeout 来说是在 timers 阶段之后,只需要想办法程序运行环境控制在 timers...程序至少从 I/O callbacks 阶段开始 --- 可以套一层文件读写程序控制在 I/O callbacks 阶段运行环境中?...不直接放代码是想大家先自己思考然后在敲代码运行一遍~ 最后多一嘴 本文到这里算是结束了,还是那句话,做一个程序员要知其然更要知其所以然。写些文章也是想把知识输出,检验自己是不是真的学懂了。...文章中可能还存在一些没有说清楚地方或者是有错地方,欢迎直接指出~ 学习记录都记录在了 github 并且会持续更新下去,有兴趣小伙伴可以看看~ github[4] 参考资料 [1]

82311

不知道你知不知道知道伪元素小技巧

方法:父容器高度撑起来,考虑到浮动了元素并没有脱离正常文档流,而其它元素会围绕着它环绕,所以清除浮动简单有效办法就是环绕元素不可环绕,它变成一尺子,放在最后面,所有浮动元素顶起来,而这把尺子就是一个设置了...; }复制代码 2.画分割线 ?...3.计数器 动态计算商品数量,我们经常会借用js来实现;想告诉css也能实现这个效果,他比js用起来简单多了 ?...没有用到一行js代码,你可以试一试;这个主要是结合:checked和counter,用before/after纯CSS实现,这种纯粹是炫技; 4.平行四边形 有没有办法容器形状倾斜而保持其内容不变呢...但是意味着我们不得不使用一层额外HTML元素包裹内容.有些累赘 解决方案:伪元素,样式应用到伪元素上,对伪元素进行变形,再把伪元素定位+层级放到到住宿元素下面 光说不练,假把式试一试 5.

95520

独家 | Vitalik Buterin:以太坊2.0之跨分片交易

但是如果我们在更短一个区块链中就做不到了,因为这个区块链中智能合约、帐户、交流速率非常高,我们很难一个应用都能够进行对话,难以进行立即对话和交流。...比如说有5个 coins,然后想要把这5个coins转移给Bob,Bob有一个帐户,它帐户在底端,coins在顶端,首先要在顶端做一个交易请求,这个交易会进行第一个分片处理,然后它会有一个哈希值产生...现在我们想象一下,我们用一个更短区块链,比如它需要5分钟时间一个分片知道另外一个分片数据或者哈希值,但是我们希望这个应用变得更加快捷,所以我们做法是在上面分片有一个coin,然后我们想把这个coin...而且它已经了解上面分片当中根值了,所以下面的分片根本不知道上面跟它是否合法,但是不管怎样,它把相关数据融到自己数据包中了。如果记录另外一个信息,也可能没办法下面的分片知道。...为了减少复杂性,更多用户用钱包,我们就把区块链便捷性、性能、应用效率大大提升,希望通过用这个方式中心化更复杂交易变得便捷和简单,这个基本战略可以让我们进行更快交易。

78100

代码优化 5 大原则,第 1 条相信你一开始就没想到!

花了两天时间,绞尽脑汁地进行各种测试,审查代码逻辑,但完全没发现到底是什么地方这个程序变得如此之慢。 就在第三天,在穷尽了所有的办法,最后一点理智也快要消失时候,终于发现了问题所在。...你要去理解这个程序将会被如何使用,知道它是在怎样环境下运行,明白如果它运行更快到底有没有好处。在真正开始代码优化之前,你必须要问自己这几个问题。...用简单计算代替消耗性能算法 字符串处理对于任何一个程序来说,都算是非常常见运算了。但如果你用错误办法处理字符串,它们也有可能消耗大量性能。...有时,通过用低层次编程语言重写关键代码,能获得较大性能提升,但这是以降低可移植性为代价,也会以后维护变得非常困难。因此,请谨慎做出决定。...写出干净代码,成为你习惯吧。 正如极限编程创始者,设计模式先驱肯特·贝克(Kent Beck)指出那样:“不是一个伟大程序员,只是一个不错程序员,加上伟大习惯。”

70520

不知道你知不知道但前端NEXT知道伪元素小技巧

方法:父容器高度撑起来,考虑到浮动了元素并没有脱离正常文档流,而其它元素会围绕着它环绕,所以清除浮动简单有效办法就是环绕元素不可环绕,它变成一尺子,放在最后面,所有浮动元素顶起来,而这把尺子就是一个设置了...3.计数器 动态计算商品数量,我们经常会借用js来实现;想告诉css也能实现这个效果,他比js用起来简单多了 ?...没有用到一行js代码,你可以试一试;这个主要是结合:checked和counter,用before/after纯CSS实现,这种纯粹是炫技; 4.平行四边形 有没有办法容器形状倾斜而保持其内容不变呢...但是意味着我们不得不使用一层额外HTML元素包裹内容.有些累赘 解决方案:伪元素,样式应用到伪元素上,对伪元素进行变形,再把伪元素定位+层级放到到住宿元素下面 5....梯形标签页 在网页中我们经常见到梯形形状标签页,常见技巧都是比较杂乱,或者说难以维护,那他们是如何实现呢?

97870

嵌入式开发既要代码小,又要速度快!程序该如何优化?

一、程序结构优化 1、程序书写结构 虽然书写格式并不会影响生成代码质量,但是在实际编写程序时还是应该尊一定书写规则,一个书写清晰、明了程序,有利于以后维护。...因此,应尽量当采用预处理命令方式来定义常数,而且还可以避免输入错误。 5、减少判断语句 能够使用条件编译(ifdef)地方就使用条件编译而不使用if 语句,有利于减少编译生成代码长度。...对于大部分分编译器,使用指针比使用数组生成代码更短,执行效率更高。 但是在Keil 中则相反,使用数组比使用指针生成代码更短。...实际上,只要是乘以或除以一个整数,均可以用移位方法得到结果,如: a = a * 9; 可以改为: a = (a << 3) + a; 5、循环 (1) 循环语 对于一些不需要循环变量参加运算任务可以它们放到循环外面...,这里任务包括表达式、函数调用、指针运算、数组访问等,应该将没有必要执行多次操作全部集合在一起,放到一个init 初始化程序中进行。

1.6K30

“干净”代码,贼差性能

多年前他和同事一起开发一个图形编辑器画布,当看到同事提交代码时,他吐槽道,“这些重复代码看起来真的很碍眼。”随后,他自己想办法重复代码删掉了。...“夜已深,改好代码提交到 master 分支,然后上床睡觉。因为帮同事杂乱代码清理干净了,心里还引以为豪。”但事实并不像他想象美好,第二天老板看到后找他谈话,希望他代码回滚回去。...在这里编写了完全相同代码,只是不再采取类层次结构形式(也就是运行时上 vtable),而是通过枚举和形状类型所有内容都塞进了单一结构:...唯一解决办法,恐怕就只有大规模重写。 总之,只是在形状计算中增加了一个属性,速度差就从 10 倍变成了 15 倍,相当于硬件性能从 2023 年一下子倒退回了 2008 年!...所以面对这种种规矩,尽管有人认为这样能改善代码可维护性,但我们至少也该想想背后代价是什么。 我们真的愿意放弃这十几年硬件发展,只为程序员工作变得更轻松一点吗?

54310

计算矩阵中全1子矩阵个数

前言 最近被我大哥安利了一道算法题, 这道题说难, 还不至于我做不出来, 说简单吧, 还想不到最优解, 等最优解告诉之后, 还正好能理解....一眼就看到了函数里六层循环, 么说, O(n^6). 这时, 大哥说他时间复杂度是 O(n^3). 那我这小心情, 必须整出来, 再想. 方案二 上面的六层循环中, 能不能想办法去掉一层呢?...在最后判断是否全1环中, 如果左上数字是0, 那必然没有全1子矩阵了 再如果向下找时候, 碰到0, 那下一列时候也没必要超过这里了, 因为子矩阵至少有一个0了, 如下图: ?...上面的四层循环, 有没有什么办法能再减少一层呢? 想一下, 我们在第四层循环中, 向右遍历, 找是什么?...是连续1个数, 如果我们不用向右遍历, 直接就知道了这个连续1个数, 那是不是就可以这一层也省了呢? 那么问题来了, 如何不遍历就知道呢? 预处理.

2.5K10

代码review,瑞出事来了!

谁知这群家伙,评审时候满满认同感,但评审结束不久,就给我冠了个事B称号。 今天就把当时这些话儿整理整理,大家说道说道,到底是不是个事B。淦! 一个任务处理例子 代码结构大体是这样。...通过定时,这段代码每天晚上凌晨都要对数据库记录进行一遍对账。主要逻辑,就是使用独立线程,渐进式读取数据库中相关记录,然后这些记录,放在循环中逐条进行处理。...代码里考虑很周到,按照我们上述方式捕捉了异常。同时,还很贴心sleep相关异常也给捕捉了。这里不贴心也没办法,因为不补齐这部分代码的话,编译无法通过,我们姑且认为是开发人员水平够屌。...被评审小伙伴不满意说。 还有问题! 有没有影响是一回事,是不是好习惯是另一回事 。尽量装了一下B,其实,你异常处理代码里还有另外隐藏问题。 还有什么问题?...看看我到底有没有像我说一样写代码有没有以身作则?是在不好意思,可是架构师哎,已经很多年没写代码了。 你这个愿望你落空了!

29720

怎样关闭和复原135 、139 、445端口?

微软不建议关闭135端口和445端口关于这几个端口,跟微软工程师电话沟通过,微软不推荐关闭,建议从防火墙或安全组(尽量用云平台功能,即安全组)采取措施而不是关闭端口,需要访问这些端口IP段(内网段...service-overview-and-network-port-requirements如果实在要关闭这些端口,如下https://blog.csdn.net/u013761036/article/details/71915237这篇文档关闭135、139、445端口办法适用所有...Windows系统,但是太过繁琐,翻译成了命令所有Windows系统通用代码方案如下用netstat来过滤有没有监听netstat -ano|findstr :445netstat -ano|findstr...delete命令执行reg delete "HKLM\SOFTWARE\Microsoft\Rpc\Internet" /f 删Rpc\Internet报没权限,2008R2、2012R2打开注册表着路径找到...Rpc\Internet用鼠标删掉,2016/2019提权后用reg delete可以删,也可以用鼠标删提权的话,需要提前psexec.exe或psexec64.exe放到system32目录,https

8.3K40

代码优化 5 大原则,第 1 条相信你一开始就没想到!

花了两天时间,绞尽脑汁地进行各种测试,审查代码逻辑,但完全没发现到底是什么地方这个程序变得如此之慢。 就在第三天,在穷尽了所有的办法,最后一点理智也快要消失时候,终于发现了问题所在。...你要去理解这个程序将会被如何使用,知道它是在怎样环境下运行,明白如果它运行更快到底有没有好处。在真正开始代码优化之前,你必须要问自己这几个问题。...用简单计算代替消耗性能算法 字符串处理对于任何一个程序来说,都算是非常常见运算了。但如果你用错误办法处理字符串,它们也有可能消耗大量性能。...有时,通过用低层次编程语言重写关键代码,能获得较大性能提升,但这是以降低可移植性为代价,也会以后维护变得非常困难。因此,请谨慎做出决定。...写出干净代码,成为你习惯吧。 正如极限编程创始者,设计模式先驱肯特·贝克(Kent Beck)指出那样:“不是一个伟大程序员,只是一个不错程序员,加上伟大习惯。”

35410

干货 | 了解 Geth 客户端:快照加速机制

一个合约存储领域任意值(由该合约定义并使用)映射到某个值。 但糟糕是,虽然这些键值对存储成扁平数据(flat data)可以非常高效,但验证它们正确性在计算上就会变得很难。...上面两种办法合在一起 —— 帕特里夏树树状分层和默克尔树哈希算法 —— 就是所谓 “默克尔-帕特里夏树”,也是实践中用于代表以太坊状态数据结构。...问题只在于:额外开销是否能带来足够多好处,值得我们一试? 请其本 我们已经开发出了神奇默克尔帕特里夏树结构来解决我们所有的问题,现在,我们希望读取操作能绕过它。...那么,我们应该用什么样加速结构来读取操作重新变得快起来呢?显然,如果我们不需要树结构,那就大可以伴随树结构而生复杂性都丢在一边,我们可以直接回到原始状态。...而且事情变得更糟糕是,我们没办法访问更老状态了(例如某些 dApp 需要 3 个区块以前状态;或者 fast/snap 同步模式中要访问 64 个区块以前状态)。

1.2K10

友好 Python:扩展友好

代码不仅要追求性能优功能强,还有一个重要特质——友好。友好界面能吸引更多用户,友好代码结构能吸引更多贡献者。所以本文是「友好 Python」其中一个主题:对开发者友好之扩展友好。..., get_news() 留了出来,因为新闻来源有多个,他打算应用设计模式中「策略模式」,每种来源作为一个单独策略类,暴露相同接口,他还用上了抽象类,做了一个基类出来: # sources/base.py...有没有办法自动生成这个映射呢?用注册大法!...免去了「东市买骏马,西市买鞍鞯」苦恼,一站式体验,程序更「友好」了。...值得注意是,上面虽然通过启用魔法扩展操作改进得非常友好,却损失了一些阅读代码友好度——它把一些显式操作变得有些隐晦(在 for 循环中 import_module 副作用无法一眼看出)。

16920
领券