4、定义网页的编码字符以及对网页的描述。...原理:text-align:center;是让div内部的元素居中显示,并且由div的宽度决定。默认情况下div的宽度是占满整个网页的。...)设置成多少他就在浏览器的什么位置显示,比较官方的术语就是,绝对定位的元素脱离了文档流(跟浮动一样),不受原来的文档约束,不占原来的位置。...固定定位;脱离了文档流,但是他与绝对定位稍有不同,他是相对于浏览器视窗(你看的见的地方)进行定位的,而绝对定位则是默认相对于body的,即整张网页。...本人水平有限,难免有错误之处,若发现请及时告诉我。
规范中指出,在同一个BFC内,作为子元素的BFC的border-box不应该覆盖同为子元素的浮动元素的margin-box。其实,浏览器在内部通过隐式的给子BFC设置margin值来防止覆盖。...例证 创建两个浮动元素和一个BFC,然后改变BFC的margin值和浮动元素的margin值,观察它们的位置。...可见BFC的border-box不会覆盖浮动元素。 为了进一步验证BFC的border-box不会覆盖浮动元素的margin-box,我们设置.f1的margin-right:30px; ?...这样就可明显看出BFC具体影响这两个元素的哪种盒模型的覆盖。...另外,如果设置.bfc的宽度值过大(两个浮动元素的水平分量与bfc的水平分量之和大于包含块的宽度),那么.bfc会向下放置知道有足够空间容纳为止。 使用 那么这个技巧对我们有什么用处呢?
上半年在做微信文档的时候,有一些自动化的需求,比如像一键发布,git push 发布,自动发布等。后面推动内部运维,做了 devops 的尝试。...以前手工发布会经常遇到 环境问题、权限问题、测试问题,基本上此次都要解说好久,而且大部分都是重复描述,我只能说:我太难了。...整体感觉上来说,在接入 devops 之后,彻底解决了我在 开发 和 客服 之间身份徘徊的问题,让我能够更加专注到开发中去。 借由此机会,顺便了解下业界关于自动化系统的方案。...github action(右图): 通过 yml 文件格式,描述当前 action 需要做的任务。...比如,A 在 feature-A 开发了一个功能,完毕后,合并到 master,此时通过 PR 触发自动化 CI,如果 CI 失败了,则说明 A 的代码有毒,需要 review 一遍。
计算机系统课程上讲到的 IEEE 754 32位浮点数一些规则细节的个人理解与解释。 老师在课上已经把各个细节都大致讲过了,这篇文章是给课后对这些细节还感兴趣的同学,做补充解释和扩展。...这篇文章不会采用晦涩的引用或者证明,而是尝试让同学能直观理解 IEEE 754 的一些设计选择。...开头的 所以只需要花内存去存小数点后面的尾数 11010 就足够了 这就是为什么在二进制浮点数中 仅用 23 个 bit 就能表示 24 位的精度,这多出来的 1 个 “免费的精度” 是二进制的特性所共同提供的...,我们按照 IEEE 754 专家们的规矩去存储的话,需要存储的尾数部分是 10101,但是如果按照我们假设个位是 0 去存储的话,我们的尾数就变成 110101了。...~ 127 所以不需要偏移 128,只需要偏移 127 就足够了
可解释性是什么? 广义上的可解释性指在我们需要了解或解决一件事情的时候,我们可以获得我们所需要的足够的可以理解的信息。比如我们在调试bug的时候,需要通过变量审查和日志信息定位到问题出在哪里。...比如在科学研究中面临一个新问题的研究时,我们需要查阅一些资料来了解这个新问题的基本概念和研究现状,以获得对研究方向的正确认识。...从中是不是可以帮助我们发现一些潜在的关联,比如我想基于深度学习模型开发一个帮助医生判定病人风险的应用,除了最终的判定结果之外,我可能还需要了解模型产生这样的判定是基于病人哪些因素的考虑。...但深度学习模型很难说上面这两幅图到底是因为哪些区别导致了判定结果出现了如此大的偏差。尽管关于对抗样本的研究最近也非常火热,但依然缺乏具备可解释性的关于这类问题的解释。...要理解这个概念的生成过程很重要的一点就是要研究隐层的概念表示,在接下来的部分中我将给大家介绍业界关于隐层分析方法的几个研究工作。 2. 模型学到了哪些概念?
在c=++a时,是先a++,再执行将a的值赋给c。之际上就是看优先级 2、\b是退格,但是不删除 3、布尔类型是专门用来判断真假的 4、变量分为局部变量和全局变量。...局部放在内存的栈区,全局放在静态区 5、float类型,保存小数点后6位 6、 %只能对整数取余数 7、负数求余时,结果的符号是由第一个数的符号决定 8、EOF是文件结尾标志符,相对的,\0是字符串的结尾...不代表只有1才是真 14、%5d是执行右对齐,允许的最小宽度。...中参数与占位符是一一对应的,如果有n个占位符,printf中会有n+1个参数引号里面的总共算作是一个** 17、scanf的占位符是**%s时,遇到空格就结束了**。...%c时表示读取字符串,遇到空白全部读取,所以不建议在使用%c时加上空格,当然也可以忽略空格,只需要在**%和c之间加上空格**就行。
2、在写判断的时候,我们最好不要连用操作符之类的,就比如说(i<j<k,i=3,j=4,k=2)*,如果说根据我们的判断,这句话应该是错误的,但是机器不会那么认为,机器是从左到右依次进行,在比较完i和j...所以最后的结果却是真确的。为了防止这种情况的发生,我们可以把原来的代码改为**(i<j&&j<k)**. 3、布尔类型的头文件是,在用的时候是这样的。...一般来说signed是可以省略的,但是写了也不算是错误的,而unsigned也有自己的好处,因为在知道数值一定是正数的情况下,能有更多的数值。...5、全局变量是在*int main()之外并且之前的定义的数值,而局部变量就是在int main()*之内定义的。...但是当局部变量和全局变量有同样相同的名字的时候,而又在int main之内用到的话,之前还刚好定义的局部变量,那局部变量的优先级是高于全局变量的。
如果警告的符号名不够见名知意,那么请对其增加一个详细解释。 采用这种抑制方式的好处是我们可以轻松查找抑制并回顾它们....你可以使用命令 pylint --help-msg=C6409 , 以获取关于特定消息的更多信息....优点: 你经常会碰到一些使用大量默认值的函数, 但偶尔(比较少见)你想要覆盖这些默认值. 默认参数值提供了一种简单的方法来完成这件事, 你不需要为这些罕见的例外定义大量函数....结论: 尽可能使用隐式的false, 例如: 使用 if foo: 而不是 if foo != []: . 不过还是有一些注意事项需要你铭记在心: 永远不要用==或者!=来比较单件, 比如None....应该保证一个用有效参数调用的装饰器在所有情况下都是成功的. 装饰器是一种特殊形式的”顶级代码”. 参考后面关于 Main 的话题. 18、线程 Tip 不要依赖内建类型的原子性.
之前了解一些操作系统的概念,主要是毕业后对自己大学四年的荒废比较懊恼,觉得自己有些对不起计算机专业出身,于是在工作之余抽出时间看了哈工大在网易云课堂的操作系统公开课,自己也读了一本讲操作系统比较浅的书...多亏了这些知识,让我对应用层的知识更有掌控感,也在上次排查问题时助了我一臂之力。 前几天另一位同事来问另一个虚拟内存相关的问题,我才发现对于虚拟内存,我的理解还不够深刻,一些概念还有些矛盾。...多任务并行,大大提升了 CPU 利用率,但却引出了多个进程对内存操作的冲突问题,虚拟内存概念的提出就是为了解决这个问题。 上图是虚拟内存最简单也是最直观的解释。...之后进行内存分配时,都以页为单位,那么虚拟内存页对应物理内存页的映射表就大大减小了,4G 内存,只需要 8M 的映射表即可,一些进程没有使用到的虚拟内存,也并不需要保存映射关系,而且Linux 还为大内存设计了多级页表...,我也有过很多的问题。
也就是说,一个普通程序,有可能拿到你电脑里的各种敏感信息,比如你的各种账号密码等。 这个漏洞是因芯片最初的设计造成的,目前的补救方法只能通过操作系统级别的补丁来修复。所以最近请及时安装系统更新。...程序是由大量指令组成的,为了提升执行效率,芯片会通过一定的机制,在前面指令还在等待的时候就执行后面的指令。 内存访问是需要耗时间的,为了提升性能,就有了『缓存』这种比内存更快的东西。...可以看到,你输入的密码可以被其他程序所获取。 关于此漏洞的技术细节、影响和后续更新,大家可以关注知乎上的问题: 『如何看待 2018 年 1 月 2 日爆出的 Intel CPU 设计漏洞?』...265012502/answer/288199200 @dontpanic https://www.zhihu.com/question/265012502/answer/288407097 NGA社区上的一篇帖子也解释的相当清楚...tid=13191205 看完详细的解释,不禁感叹漏洞利用之精妙,相比之下那些黑客电影中的桥段都黯然失色。 而在这篇帖子下面的评论里,我看到了本文标题所说,最形象易懂的解释: ?
正文部分 在很多项目里,或者一些应用上,我们经常需要把一些文件导入到SAP系统里,最经常我们使用的读取数据的方法就是使用GUI_UPLOAD这个FM.在这个FM中有个CODEPAGE,是用来指定代码页的...如果我们导的是中文的话,我们经常使用的是8400.当然还有8401,8411等等....主要介绍一下8400/8401.因为大家最常用的是8400.看8400的介绍上说,是based on GB2312-EUC版本,WINDOWS的代码页就是CP936.8401使用的就是GB18030 2000...GBK作为对GB2312的扩展,在现在的windows系统中仍然使用代码页CP936表示,但是同样的936的代码页跟一开始的936的代码页只支持GB2312编码不同,现在的936代码页支持GBK的编码,...4、 GB13000 GB13000等同于国际标准的《通用多八位编码字符集 (UCS)》 ISO10646.1,就是等同于Unicode的标准,代码页等等的都使用UTF的一套标准。
但是方法的擦除会带来一些问题: class Coupling extends Couple { public void setTwo(People people) {...方法,即: public void setTwo(Object two) 这显然是一个不同的方法,因为它有一个不同类型的参数(Object),而不是People。...,并调用最合适的那个方法。...要解决这个问题,就需要编译器在Coupling类中生成一个桥方法: public void setTwo(Object second) { setTwo((People)second); } 变量...虚拟机用cp引用的对象调用这个方法。这个对象是Coupling类型的,所以会调用Coupling.setTwo(Object)方法。这个方法是合成的桥方法。
不过得益于机器学习,尤其是深度学习的进步,很多学者和技术大牛都这方面有了一些研究成果,本文将对已有的一些人机验证绕过技术进行总结。...破解者表示,“因为我们只需要调用一个免费的语音识别 API,对所有验证码的识别准确率就能达到 90% 左右。”...reCAPTCHA v3版本移除了所有用户界面,没有拆开乱码文本或街道标志,甚至也没有勾选“我不是机器人”的方框。...但是实际上这项强化学习技术并非破解eCAPTCHA v3 中不可见的分数,而是针对 reCAPTCHA v2 中首次引入的鼠标移动进行分析,用机器学习的方法欺骗二级系统(即旧版的“我不是机器人””打勾操作...目前,在网络上已经存在多种关于滑动验证破解的方法。
分享一下 hugo 的语法模板,如何获取总文章数和总字数,效果可以参考我的首页。
模板无疑是非常复杂的,一个模板类。你把成员函数实现在类内,是比较简单的。当然,你也可以实现在类外。这时候你有两个选择,在同一个文件实现成员函数,在另一个.cpp里实现成员函数,头文件只包含函数声明。...当你写在同一个文件里的时候,只需要在函数实现的地方处处加上模板定义以及表明类是一个模板了即可。...如下: template //模板的作用范围是紧随其后的一个类或者函数 Parent::Parent(T a) //Parent这里的不能少,表明它是一个模板类...对于模板出现的地方,你应当包含.cpp文件,这样就能编译通过。 通常我们是把函数声明和函数定义写在同一个文件里,并把这个文件叫做.hpp文件。例如OpenCV的头文件。...否则就可能造成各种各样的问题。 还有就是我们在模板类中尽量不要使用友元函数了,除非重载>运算符。
关于快速开发全栈我的一些心得 提升800%效率! 最近做了很多的全栈的项目。 最近也在学习领域思想。从架构的层面去看待代码,去看待产品。...很多项目的基础,在本质上都是在增删改查也就是CURD的基础上进行开发的。 对于很多繁琐的crud方法,我们是否能用一些东西来进行,快速的开发呢? 当然是可以的,下面我就分享一下我经常用的东西。...这个的功能和上面的那一个大同小异。 不过她可以自定义一些模板 如果你的工作每一个项目都非常的标准化,繁琐,你可以去抽象出来一些模板来用它进行快速的生成。...library that generates Typescript or Javascript clients based on the OpenAPI specification (github.com) 这个需要配合我们后端的...对于这个代码生成器是否会拉低程序员的整体水平。 我认为,这叫好像是学渣直接抄答案,学霸在简单的题目上直接抄答案。 至于利弊,大家可以讨论一下,我的想法还是偏向利多一些的。
在本文中,我将会通过实际的例子来解释模块系统以便于让你清晰地理解它是怎样工作的并且能够快速在自己的项目中应用。...由于Rust的模块系统比较独特,我希望读者以开放性思维来进行阅读,并且尽量不要将其与其他语言中的模块的工作方式进行比较。...│ ├── health_route.rs │ └── user_route.rs └─┬ models └── user_model.rs 下面是一些使用我们的模块的不同方式:...下面的3个例子应该足以解释Rust的模块系统是如何工作的。...("config"); } 这里,我们通过::语法使用print_config函数。 下面是模块树的样子: 我们已经成功地声明了config模块!
在撸完RocketMQ Topic的创建机制后,我似乎还有一些意犹未尽的感觉,总觉得还缺一些什么。于是我就趁热打铁,提出以下两点我自己的一些思考。...假设我现在有两个master broker分别为b1和b2组成了一个集群,我选择手动创建topic1,此时topic1的路由信息会发送到b1和b2,同时b1和b2会将路由信息注册到nameserver,...我们可以按业务分集群,把topic归类到不同的集群中,这样每个集群添加broker后,需要重新分配的topic就大大减少了。...更好的解决方案是添加一个复制功能,新增的broker自动从nameserver拉取需要复制到新broker的topic配置。期待以后的版本迭代中如愿增加这个功能吧。 如何在集群中固定队列数量?...有没有可能以后会多一个创建机制:在集群模式下,只需要输入topic名称和消息队列数量,至于队列被分配到哪个broker,取决于broker的负载情况。 同样期待以后的版本迭代中如愿增加这个功能吧。
这些特点保证了区块链的“诚实”与“透明”,为区块链创造信任奠定基础。而区块链丰富的应用场景,基本上都基于区块链能够解决信息不对称问题,实现多个主体之间的协作信任与一致行动。...区块链(Blockchain),是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息,...2020年海南省工信厅印发了《海南省关于加快区块链产业发展的若干政策措施》,仿佛一夜之间海南就成了区块链的热土。...但是说到底区块链也不过是一种链式数据结构,这种链式结构带来了一定的优势,也必然存在很大的劣势,如图所示,区块链的低效暴露无遗,区块链能带来什么样的经济效益?有什么是离开区块链而不能做的?...反正大家都说好,我也就跟风呗,要不然显得太low了。
在我们学习编程的日常中,我们常常需要记录一些东西,比如:知识点笔记、算法的思路算法题的题解,这是十分重要的,因此一款很好的记笔记的语法就出现了,那就是markdown,markdown是一种简洁的、快速的语法形式...,有了markdown就能极大地帮助我们享受于算法思路,不必纠结于整体的排版布局。...以下是关于markdown的语法,其实并不难,只要多练几次,就能很轻松的写出markdown。
领取专属 10元无门槛券
手把手带您无忧上云