在上一章和本章中,读者已经接触和使用了各种控件。这些控件虽然五花八门,但它们却具有一些共同的特点。本节的目的就是讨论这些共同点,以使读者能在概念上更好地理解控件。 6.3.1 所有的控件都是窗口 确切地说,所有的控件都是子窗口。控件窗口都具有WS_CHILD风格,它们总是依附于某一个父窗口。所有MFC的控件类都是基本窗口类CWnd的直接或间接派生类,这意味着可以调用CWnd类的某些成员函数来查询和
1.2 总体架构 WebMagic的结构分为Downloader、PageProcessor、Scheduler、Pipeline四大组件,并由Spider将它们彼此组织起来。这四大组件对应爬虫生命周期中的下载、处理、管理和持久化等功能。WebMagic的设计参考了Scapy,但是实现方式更Java化一些。 而Spider则将这几个组件组织起来,让它们可以互相交互,流程化的执行,可以认为Spide
随意打开一个 word 文档一看,其布局便一目了然。它分为左、右两栏,左栏为文档的目录树,右栏为文档的内容。而内容区又被分为页眉、正文和页脚三个部分。 这里跟现实版的 word 保持一致,也采用相同的布局,并遵守HTML5结构化、语义化的要求。左栏为侧栏,用 aside 定义,其内容为目录树。右栏为主内容区,用 main 来定义,其内容为文章的正文。页眉和页脚用 header 和 footer 来
Python 是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Secure Sockets Layer (SSL,安全套接字层)是在网络上应用最广泛的加密协议实现。SSL 使用结合加密过程来提供网络的安全通信。本节介绍 SSL 和它所使用的加密过程。 SSL 提供了一个安全的增强标准 TCP/IP 套接字用于网络通信协议。如表3所示,添加了安全套接字层传输层和应用层之间的标准 TCP/IP 协议栈。SSL的应用程序中最常用的是 Hypertext Trans
本章将要着重介绍开发者在服务平台做设备接入的各个流程。云云接入和直连接入两种方案将在部分模块进行分别讲解。未提及的部分两者保持一致。 接入流程图 直连设备: 云云设备: 步骤说明: 1、注册账号,通过认证成为HeyThings IoT服务平台开发者。 2、完成必要的基础配置:比如云云服务器配置。之后在品牌管理中创建第一个品牌。 3、创建产品:选择产品的接入方式,经过品类选择,产品定义来创建一个产品
你应该已经对 Git 是什么、Git 与你可能正在使用的集中式版本控制系统有何区别等问题有了基本的了解。 现在,在你的个人系统中应该也有了一份能够工作的 Git 版本。 是时候开始学习有关 Git 的基础知识了。
随着苹果强推ATS和HTTP2的慢慢普及。对于互联网开发HTTPS已经变成了“日常”。 HTTPS的核心就是证书链,证书链的“信任”核心是CA。 对于普通用户来说,随意的安装一个证书可能就为以后的安全问题埋下了隐患。 一张图做个总结: 12306怎幺想的?用http来传输一个CA根证书?是掩耳盗铃?还是CNNIC?
结构 public 文件夹用于存放入口文件 index.php 写个 demo: <?php echo "你好,FanlyPHP"; 使用 php -S localhost:1234 命令执行看看效果: 创建 composer.json 文件用于添加我们的第三方插件 用命令行 composer init 根据提示初始化 composer.json 内容: { "name": "codi
本课程共 15 节,到此就全部结束了。 Vim 作为 Linux 平台最常用的编辑器之一。无论开发还是运维或者测试,都会频繁的接触并且使用。所以掌握 Vim 基本操作显得至关重要了。 这个课程尽量做到授人以鱼,不如授之以渔。重点讲解 Vim 独特的思想比如组合等。在这个基础上,我们会围绕这些基础原理和思想来步步深入 Vim 的各种操作场景。通过抛砖引玉方式言简意赅讲解每个知识点,尽量面面俱到而又不
本章我们了解了各种与并发相关的bug,从死锁和活锁,再到数据竞争和其他恶性条件竞争;我们也使用了一些技术来定位bug。同样,也讨论了在做代码审阅的时候需做哪些思考,以及写可测试代码的指导意见,还有如何为并发代码构造测试用例。最终,我们还了解了一些对测试很有帮助的工具。
在本章中,我们了解各种“高级”线程管理技术:线程池和中断线程。也了解了如何使用本地任务队列,使用任务窃取的方式减小同步开销,提高线程池的吞吐量;等待子任务完成的同时执行队列中其他任务,从而来避免死锁。 也了解了使用线程去中断另一个处理线程的各种方式,比如:使用特定的断点和函数执行中断,要不就是使用某种方法,对阻塞等待进行中断。
本章我们讨论了很多东西。我们从划分线程间的工作开始(比如,数据提前划分或让线程形成流水线)。之后,以低层次视角来看多线程下的性能问题,顺带了解了伪共享和数据通讯;了解访问数据的模式对性能的影响。再后,了解了附加注意事项是如何影响并发代码设计的,比如:异常安全和可扩展性。最后,用一些并行算法实现来结束了本章,在设计这些并行算法实现时碰到的问题,在设计其他并行代码的时候也会遇到。 本章中,关于线程池的
从第6章中的基于锁的数据结构起,本章简要的描述了一些无锁数据结构的实现(通过实现栈和队列)。在这个过程中,需要小心使用原子操作的内存序,为了保证无数据竞争,以及让每个线程看到一个预制相关的数据结构。也能了解到,在无锁结构中对内存的管理是越来越难。还有,如何通过帮助线程的方式,来避免忙等待循环。 设计无锁数据结构是一项很困难的任务,并且很容易犯错;不过,这样的数据结构在某些重要情况下可对其性能进行扩
本章开篇,我们讨论了设计并发数据结构的意义,以及给出了一些指导意见。然后,通过设计一些通用的数据结构(栈,队列,哈希表和单链表),探究了在指导意见在实现这些数据结构的应用,并使用锁来保护数据和避免数据竞争。那么现在,你应该回看一下本章实现的那些数据结构,再回顾一下如何增加并发访问的几率,和哪里会存在潜在条件竞争。 在第7章中,我们将看一下如何避免锁完全锁定,使用底层原子操作来提供必要访问顺序约束,