有限覆盖定理与实数理论

Example 1

为更好的证明本题,先引入 Bolzano-Weierstrass 定理的一种等价表述.

Definition 1 (数列聚点) 对任意实数列 \(\{ x_n \}\),若实数 \(a\) 满足:对 \(a\) 的任意小邻域 \(U(a, \varepsilon) = (a - \varepsilon, a + \varepsilon)\),都有无穷个 \(x_n\) 满足 \(x_n \in U(a, \varepsilon)\),则称 \(a\) 是数列 \(\{ x_n \}\) 的一个聚点.

请注意,这里我们没有使用建立在集合之上的标准的聚点定义. 对数列单独定义聚点,是考虑到数列允许重复的元素出现,如此定义更容易展开后面的讨论.

Theorem 1 实数 \(a\) 是数列 \(\{ x_n \} \subset \mathbb R\) 的聚点的充要条件是:存在 \(\{ x_n \}\) 的一个收敛子列 \(\{ x_{n_k} \}\),其极限为 \(a\).

Proof. 先证充分性. 用定义写开 \(\lim_{k \to \infty} \{ x_{n_k} \} = a\),就有 \[ (\forall \varepsilon > 0)(\exists K \in \mathbb N_+)(\forall k > K)(|x_{n_k} - a| < \varepsilon) \] 故确有无穷项 \(x_n\) 落在任意小的 \(U(a, \varepsilon)\) 中,即 \(a\)\(\{ x_n \}\) 的一个聚点,该方向得证.

下证必要性. 已知 \(\{ x_n \}\) 有一聚点 \(a\). 我们按如下方法构造子列 \(\{ x_{n_k} \}\)

  1. \(k=1\),取 \(\varepsilon_1 = 1\),因为 \(a\)\(E\) 的一个聚点,\(\exists n_1 \in \mathbb N_+\)\(|x_{n_1} - a| < \varepsilon\).
  2. \(k \geqslant 2\),取 \(\varepsilon_k = \frac 1 k\),因为 \(a\)\(E\) 的一个聚点, \(\exists n_k > n_{k-1}\)\(|x_{n_k} - a| < \varepsilon\).

这样,我们构造出 \(\{ x_n \}\) 的一个子列 \(\{ x_{n_k} \}\) 满足 \(|x_{n_k} - a| < \varepsilon_k = \frac 1 k\). 因此其收敛于 \(a\),该方向得证.

上述定理立刻证明了下定理与 Bolzano-Weierstrass 定理的等价性.

Theorem 2 (数列聚点定理) 任意有界实数列 \(\{ x_n \}\) 至少有一个聚点.

Example 1 利用有限覆盖定理证明 Bolzano-Weierstrass 定理.

Proof. 命题等价于用有限覆盖定理证明数列聚点定理. 用反证法. 假设一有界实数列 \(\{ x_n \}\) 不存在聚点,设其有上界 \(L\) 和下界 \(l\). 对任意 \(a \in [l,L]\),它都不是 \(\{ x_n \}\) 的聚点,因此总存在一个 \(\varepsilon(a) > 0\),使得只有有限个 \(x_n\) 落入 \(U(a, \varepsilon(x_0))\). 这样,构造开区间族 \[ \mathscr{F} = \{ U(a, \varepsilon(a)) \mid a \in [l,L] \} \] 它显然是闭区间 \([l,L]\) 的一个开覆盖. 由有限覆盖定理,只需取其中有限个开区间就可以覆盖住 \([l,L]\),因此覆盖 \(\{ x_n \}\) 也只需要有限个开区间. 然而由前述构造,每一个开区间中也只包含有限个 \(x_n\),因此数列 \(\{ x_n \}\) 只有有限项——这显然是荒谬的. 故 \(\{ x_n \}\) 必有聚点,原命题得证.

Example 2

Theorem 3 (Lebesgue 覆盖定理) 设开区间族 \(\mathscr F\) 是闭区间 \([a, b]\) 的一个开覆盖,则必存在 \(\sigma > 0\),使得只要区间 \(\Omega \subset [a, b]\)\(\Omega\) 的长度 \(|\Omega| < \sigma\),就必有 \(\mathscr F\) 中的一个开区间包含 \(\Omega\). 其中 \(\sigma\) 称为 Lebesgue 数.

Proof. 不妨只证 \(\Omega\) 是闭区间这种最强的情况.

用反证法. 假设命题不成立,则对任意 \(\sigma > 0\),都存在一个长度小于 \(\sigma\) 的闭区间 \(\Omega \subset [a,b]\),它不被任何 \(\mathscr F\) 中的开区间包含. 因此,对所有自然数 \(n\),可取 \(\sigma_n = \frac 1 n\),按上述方法就可构造出一列闭区间 \[\{ \Omega_n \} = \{ [a_n, b_n] \} \subset [a,b]\] 其中每一个闭区间都不被任何 \(\mathscr F\) 中的开区间包含,且区间长度 \(|\Omega_n| < \sigma_n = \frac 1 n\),即 \(\lim_{n \to \infty} |\Omega_n| = 0\).

因为 \(\Omega_n \subset [a,b]\)\(\{ a_n \}\) 有界,由 Bolzano-Weierstrass 定理,其存在一收敛子列 \(\{ a_{n_k} \}\),设其极限为 \(x_0\),极限保序性表明 \(x_0 \in [a,b]\). 注意到 \(b_{n_k} = a_{n_k} + |\Omega_{n_k}|\),两端取 \(k \to \infty\) 即得 \(\lim_{k \to \infty} b_{n_k} = x_0\). 综上,我们说明了 \(\{ \Omega_{n_k} \}\) 收缩于 \(x_0\).

但,因为 \(\mathscr F\) 是闭区间 \([a,b]\) 的一个开覆盖,故总存在一个开区间 \(I_{x_0} = (a_0, b_0) \in \mathscr F\) 使得 \(x_0 \in I_{x_0}\),而 \(\{ \Omega_{n_k} \}\) 又收缩于 \(x_0\),故存在 \(k \in \mathbb N\)\(\Omega_{n_k} \subset I_{x_0} \in \mathscr F\),这与我们构造 \(\{ \Omega_{n_k} \}\) 的方法矛盾. 故原命题成立.

Remark. 证明过程与用 Bolzano-Weierstrass 定理证明闭区间一致连续性定理类似.

Example 2 用 Lebesgue 覆盖定理证明有限覆盖定理.

Proof. \(\sigma\) 是覆盖 \([a,b]\) 的开覆盖 \(\mathscr F\) 的勒贝格数,令 \(N = \lceil \frac{2(b-a)}{\sigma} \rceil\)\(L = \frac {b-a}{N} \leqslant \frac \sigma 2 < \sigma\). 由 Lebesgue 覆盖定理,任意长度为 \(L\)\([a,b]\) 内闭区间都包含于某个 \(\mathscr F\) 中的开区间. 因此对 \(n = 1,2,\dots,N\),令 \(\Omega_n = \left[ a + (n-1)L, a + nL \right]\),总存在一个 \(\mathscr F\) 中开区间 \(I_n\) 满足 \(\Omega_n \subset I_n\). 因为显然 \(\{ \Omega_n \}_{n=1}^N\)\([a,b]\) 的一个覆盖,故 \(\{ I_n \}_{n=1}^N \subset \mathscr F\) 也是 \([a,b]\) 的覆盖. 这样,我们就成功构造出了一个 \(\mathscr F\) 的有限子覆盖 \(\{ I_n \}_{n=1}^N\),命题得证.

在处理区间问题时,Lebsegue 覆盖定理很多时候比有限覆盖定理更好用. 例如处理闭区间一致连续性定理时,“落入两个有交点的相邻的这样的区间”[1]这种神乎其技的操作就可以省去了. (当然我们也有其它方法绕过这个问题,比如把单点连续性要求的区间半径改成 \(2 \delta_x\),但构造开覆盖还是用半径为 \(\delta_x\) 的区间,这样可以有 \(|x_2 - x| \leqslant |x_2 - x_1| + |x_1 - x| \leqslant \delta_{m} + \delta_{x} \leqslant 2 \delta_{x}\),这样一致连续性就出来了. 详细可参考 http://www.zhihu.com/question/56393706/answer/298562084)

作为小结,下图展现了刚刚介绍的几个定理在整个实数完备性等价定理体系中的地位.

G sup 确界原理 mono 单调有界定理 sup->mono nested 闭区间套定理 mono->nested nested->sup 构造 bw Bolzano-Weierstrass 定理 accu (数列)聚点定理 nested->accu 构造 finite 有限覆盖定理 nested->finite 反证 cauchy Cauchy 收敛原理 bw->cauchy lebesgue Lebesgue 覆盖定理 bw->lebesgue 反证 cauchy->mono 反证 accu->bw 构造 finite->sup 反证 finite->mono 反证 finite->accu 反证 lebesgue->finite 构造

Figure 1: 实数完备性等价定理关系图

Example 3

Theorem 4 设数列 \(\{ x_n \}\) 有界,其上极限 \(\varlimsup_{n \to \infty} x_n = L\),下极限 \(\varliminf_{n \to \infty} x_n = l\),则 \(L\)\(\{ x_n \}\) 的最大聚点,\(l\)\(\{ x_n \}\) 的最小聚点.

Proof. Theorem 1 中,我们已经知道,一个数列的收敛子列的极限也是该数列的一个聚点. 结合上下极限的子列式定义即可证明上述定理.

Example 3 设数列 \(\{ x_n \}\) 有界且 \(\lim_{n \to \infty}(x_{n+1} − x_n) = 0\),分别记 \(\{ x_n \}\) 的上下极限为 \(L\)\(l\). 证明 \([l, L]\) 上的任意点可作为 \(\{ x_n \}\) 某个子列的极限.

Proof. 反证. 假设 \([l, L]\) 上有一点 \(a\) 不是任何 \(\{ x_n \}\) 的收敛子列的极限,则根据 Theorem 1,\(a\) 不是 \(\{ x_n \}\) 的聚点,即存在 \(a\) 的一个邻域 \(U(a,\varepsilon)\),使得只有有限个 \(x_n\) 落入该邻域,换句话说,存在某个 \(N \in \mathbb N_+\),当 \(n>N\) 时,就有 \(x_n \notin U(a,\varepsilon)\).

又,考虑到 Theorem 4 表明上下极限 \(L\)\(l\) 都是 \(\{ x_n \}\) 的聚点,\(L,l \notin U(a,\varepsilon)\) 显然成立,且第 \(N\) 项后的 \(\{ x_n \}\) 完全由满足 \(x_n > a+\varepsilon\)\(x_n < a-\varepsilon\) 的两种 \(x_n\) 构成,且它们均有无穷多项. 这样,对于任意的 \(M>N\),总可以找到一个 \(m > M\) 使得 \(x_m\)\(x_{m+1}\) 分属 \(U(a, \varepsilon)\) 的两侧,故 \(|x_m - x_{m+1}| \geqslant 2 \varepsilon\),这就与条件 \(\lim_{n \to \infty}(x_{n+1} − x_n) = 0\) 产生矛盾. 故不存在这样的 \(a\),定理得证.

Acknowledgments

感谢史老师主持研讨课并指出讲稿的多处错误,特别是原来聚点定理的证明中数列元素可重的 bug. 史老师还提供了标准聚点定义的另一种叙述.

References

[1] 李忠. 方丽萍. 数学分析教程[M]. 北京: 高等教育出版社, 2008: 257-258.
本文转载于网络 如有侵权请联系删除

相关文章

  • Python Qt GUI设计:Python调用UI文件的两种方法(基础篇—3)

    Python调用UI文件有两种方法,第一种方法在上篇博文已经讲到,将UI文件转换为Python文件,进行调用。PythonQtGUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)今天来聊聊第二种方法:动态加载UI界面。动态加载UI界面有两种方式。方式1,代码形式如下所示:fromPySide2.QtWidgetsimportQApplication,QMessageBox fromPySide2.QtUiToolsimportQUiLoader #导入UI方式1 self.ui=QUiLoader().load('XXX.ui')复制方式2,代码形式如下所示:fromPySide2.QtWidgetsimportQApplication,QMessageBox fromPySide2.QtUiToolsimportQUiLoader fromPySide2.QtCoreimportQFile #导入UI方式2 qfile_UIUI=QFile("XXX.ui") qfile_UIUI.open(QFile.ReadOnly)

  • 谈谈MySQL如何选择float, double, decimal

    前言我们知道在MySQL中有3种类型可以表示实数,分别是float,double和decimal。关于如何合理得使用这三种类型,网上的答案也层出不穷。但是究竟该选择哪一种类型,好像并没有统一的答案,接下来,将通过一个例子来说明什么情况下选择float,什么情况下选择double,什么情况下选择decimal。相信对这个例子的剖析之后,你就会明白什么时候用什么样的类型实数类型举个例子假如我们有一张表,用来存储用户的积分,表定义如下:CREATETABLE`f`(`f1`float(10,2)DEFAULTNULL)ENGINE=InnoDBDEFAULTCHARSET=utf-8 复制然后向这个表里插入131072.32的积分值,如下所示mysql>insertintofvalue(131072.32);QueryOK,1rowaffected(0.00sec) mysql>select*fromf; +-----------+ |f1| +-----------+ |131072.31| +-----------+ 1rowinset(0.00sec) 复制然后会惊奇的发现

  • FPGA学习altera系列: 第十一篇 流水灯设计

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。 今天给大侠带来“FPGA学习系列altera"系列,持续更新。此学习心得是本人之前所写,所用设计软件为QuartusII13.1,现QuartusII新版本已更新到19+,以下仅供初学者学习参考。后续会更新其他系列,敬请关注。话不多说,上货。流水灯设计对于每一个的小实验,我们都可以把它看作是一个小项目,逐步的去分析,设计,调试,最后完成功能。下面我们就开始我们的“小项目”。 项目名称:流水灯。具体要求:复位时,四个灯全亮。正常工作时,四个灯做流水。每一个灯亮一秒钟。用状态机实现。状态机的结构如下:在实际的应用中,根据有限状态机是否使用输入信号,设计人员经常将其分为Moore型有限状态机和Mealy型有限状态机两种类型。Moore型和Mealy型有限状态机的区别:Moore型有限状态机仅与当前状态有关,而与输入信号无关;Mealy型有限状态机不但与当前状态有关,而且还与状态机的输入信号有关。Moor

  • 数据库并发处理 - 上的一把好"锁"

    为什么要有锁?我们都是知道,数据库中锁的设计是解决多用户同时访问共享资源时的并发问题。在访问共享资源时,锁定义了用户访问的规则。根据加锁的范围,MySQL中的锁可大致分成全局锁,表级锁和行锁三类。在本篇文章中,会依次介绍三种类型的锁。在阅读本篇文章后,应该掌握如下的内容:为什么要在备份时使用全局锁?为什么推荐使用InnoDB作为引擎进行备份?设置全局只读的方法表级锁的两种类型MDL导致数据库挂掉的问题如何利用两段锁协议减少锁冲突如何解决死锁对于热点表,如何避免死锁检测的损耗?全局锁什么是全局锁?全局锁会让整个库处于只读状态,其他线程语句(DML,DDL,更新事务类)的语句都被会阻塞。使用全局锁的场景在做全库逻辑备份时,会把整库进行select然后保存成文本。为什么要使用全局锁?想象这样一个场景,要备份一个购买系统,其中购买操作设计到更新账号余额表和用户课程表。现在进行逻辑备份,在备份过程中,一位用户购买了一门课程,这时需要在余额表扣掉余额,然后在购买的课程中加上一门课。正确的顺序肯定是先进行购买操作,减少余额和增加课程然后在进行备份。但却有可能出现这样的问题:如果在时间顺序上先备份余额

  • Oracle 数据库无法update和delete的解决方案

    文章时间:2019年9月14日15:52:18 解决问题:Oracle数据库无法update和delete的解决方案,数据库锁的问题 问题描述:在plsql或者其他工具使用update和delete语句时,出现假死的状态 第一步:先查询锁定记录SELECTs.sid,s.serial#FROMv$locked_objectlo,dba_objectsao,v$sessionsWHEREao.object_id=lo.object_idANDlo.session_id=s.sid;复制第二步:删除锁定记录ALTERsystemKILLsession'SID,serial#';复制完成上面2步操作后,可以正常使用update和delete了。

  • 小程序快速封装函数以便公共调用

    最近的那个项目,因为多处记录功能需要写入存储时间,如果每个页面都写一次会使得代码太臃肿,所以我们使用封装函数调用。封装就是把实现某功能的代码拿出来做为单独的函数,在不同的地方可以直接调用。封装函数最大好处就是可以避免代码的重复书写,从而提高效率。下面演示的是一个获取当前年月日的简单封装函数utils/common.jsvarnowTime=function(){ varnow=newDate(); varyear=now.getFullYear(); varmonth=now.getMonth()+1; varday=now.getDate(); vardate=year+"-"+month+"-"+day; returndate; } module.exports={ nowTime:nowTime//前面一个是外部引用时使用的名称,后一个是本js中变量的名称 }复制在需要调用的页面中,示例为pages/index/index页面varjs=require("../../utils/common.js"); varnowTi

  • Python与协程从Python2—Python3

    协程介绍协程,又称微线程、纤程,英文名Coroutine;用一句话说明什么是线程的话:协程是一种用户态的轻量级线程。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置。协程的优点:1)无需线程上下文切换的开销2)无需原子操作锁定及同步的开销3)方便切换控制流,简化编程模型4)高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。协程的缺点:1)无法利用多核资源:协程的本质是个单线程,它不能同时将单个CPU的多个核用上,协程需要和进程配合才能运行在多CPU上2)进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序python2中的协程yield关键字Python2对于协程的支持,是通过yield关键字实现的,下面示例代码是一个常见的生产者—消费者模型,代码示例如下:defconsumer():r='&#x

  • leetcode 190 Reverse Bits

    Reversebitsofagiven32bitsunsignedinteger.Forexample,giveninput43261596(representedinbinaryas00000010100101000001111010011100),return964176192(representedinbinaryas00111001011110000010100101000000).Followup: Ifthisfunctioniscalledmanytimes,howwouldyouoptimizeit?解决方案: Basically,thiscodeisjustkeepingpopthelastbitfromnandpushittotheendofthereturnresult.Do •Getlastbitfromn •Pushthebittotheendoftheresult •PopoutthelastbitofnUntilnis0 •Pushremaining0stothenby“ret<<nShift”•Returntheresult“ret”uint

  • LeetCode 738. Monotone Increasing Digits

    738.MonotoneIncreasingDigitsGivenanon-negativeintegerN,findthelargestnumberthatislessthanorequaltoNwithmonotoneincreasingdigits. (Recallthatanintegerhasmonotoneincreasingdigitsifandonlyifeachpairofadjacentdigitsxandysatisfyx<=y.) Example1: Input:N=10 Output:9 Example2: Input:N=1234 Output:1234 Example3: Input:N=332 Output:299 Note:Nisanintegerintherange[0,10^9].复制题目大意:给出一个数,返回比这个数小的最大的各个位上是单调递增的数解法一:这是我开始选择的方法,非常直白,但是直白简单的方法往往不是最佳的解法,提交到LeetCode上,给我抛出一个超时,可见效率有多低。首先写一个函数,判断一个数是否是符合要求的,如果不符合

  • 技术组长如何组织一次晨会(附面试考察标准)

    晨会和日报,是掌握团队内成员工作动态的一种方式,那这两种方式哪种最好呢? 从实践角度来讲,日报有助于将工作动态以文字形式记录下来,每天对自己的工作作一个总结,但这种方式似乎不为程序员所喜欢,所掌握的信息也不够实时动态,相对而言,晨会似乎更为大家所接受,主要是回顾昨天做了什么,遇到了什么问题,今天计划做什么事情,在会议中可以随时互动。因此,既然开了晨会,就要充分发挥晨会的长处。晨会的时候,时间控制在30分钟,每人表述限制在3-5分钟内,人数以10人以内为宜,如果是几十人的团队,就需要再划分小组。如果某人遇到的问题需要花较长时间讨论,那就单独找某人,不必将所有不相关人士聚在一起。技术组长在组织晨会的时候,首要目的是理解每个组员的工作情况,理解问题,针对这些问题,鼓励组员自己解决,解决不了的,从思路上加以指引,如果仍然难以解决,那就要考虑引入外部资源协助了。其次是情绪调控,由于人性格气质的差异,有些人在遇到棘手问题时,总是比较悲观,而有些人则显得过于乐观随意,技术组长另一个重要工作是调控组员的情绪,“悲则济之以乐,乐则济之以悲”,让技术员保持松弛有度的状态去处理问题。最后,晨会要解决的一个问

  • 谷歌和亚马逊还在观望,7-11已经搞起了第一支无人机队

    据美国科技网站Recode报道,便利连锁商店7-Eleven赶在亚马逊和谷歌母公司Alphabet之前组建起了美国第一支无人机运输服务队伍。后两家公司为实现无人机运输做了大量工作,在此前一直都受到媒体公众的广泛关注。7-Eleven公司表示,美国内华达州雷诺市的12位用户在家中收到了由无人机从商店送来的77个订单包裹。这也成为了美国历史上的第一个成功的无人机商业运输案例,尽管目前只有一家商店实现了这项服务。7-Eleven与无人机运输初创公司Flirtey进行合作,组建了雷诺市的无人机包裹运输服务。去年,Flirtey完成了美国的第一次无人机运输实验。当时,Flirtey使用无人机将药物补给品运送给弗吉尼亚州的一家医院。上述两家公司联手在今年7月完成了美国国内的第一例无人机商用运输实践,随后于11月在雷诺市开展了无人机运送包裹的实验。亚马逊最近也在英国的剑桥开展了一个相似的小型无人机运输测试。通常情况下,无人机能在付款后10分钟内将包裹运送至客户手中。它使用GPS对消费者的住所进行定位,然后飞上天空将包裹安全地送至目标地点。7-Eleven聘请了无人机操作员,他们会在商店里指挥无人机飞

  • nginx 学习笔记

    简介 nginx是俄罗斯人IgorSysoev编写的轻量级Web服务器。 它不仅是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器 nginx只是一个静态文件服务器或者http请求转发器,它可以把静态文件的请求直接返回静态文件资源,把动态文件的请求转发给后台服务。 特点 轻量 事件驱动的异步非阻塞处理 占用内存少、启动速度快、并发能力强 可靠 热部署:通过master管理进程与worker工作进程的分离设计,使的Nginx具有热部署的功能,那么在7×24小时不间断服务的前提下,升级Nginx的可执行文件。也可以在不停止服务的情况下修改配置文件,更换日志文件等功能 整体结构 Nginx主配置文件/etc/nginx/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织,通常每一个区块以一对大括号{}来表示开始与结束(可看下方的代码注释)。 Main位于nginx.conf配置文件的最高层;usernginx; worker_processes1; error_log/var/log/nginx/error.logwar

  • Hive存储格式之RCFile详解,RCFile的过去现在和未来

    我在整理Hive的存储格式和压缩格式,本来打算一篇发出来,结果其中一小节就有很多内容,于是打算写成Hive存储格式和压缩格式系列。 本节主要讲一下Hive存储格式最早的典型的列式存储格式RCFile。 综述 RCFile(RecordColumnarFile)文件格式是FaceBook开源的一种Hive的文件存储格式,遵循“首先水平分区,然后垂直分区”的设计理念。首先将数据水平分为几个行组,这样每一行数据就可以保证存储在同一个集群节点,然后对每个行组内数据进行垂直划分,按列存储。 下面通过文件存储结构来引入RCFile的详细介绍。文件存储结构主要有行存储结构,列存储结构和混合存储结构。 1.行存储存储结构 行存储(row-store)结构在传统的一刀切的数据库系统中占主导地位。使用这种结构,关系记录被组织在一个n元存储模型中。一个记录的所有字段都按它们出现的顺序依次填充。记录被连续地放置在一个磁盘页中。下图给出了一个示例,展示了如何在HDFS块中的行存储结构中放置表。 下图为HDFSblock中基于行存储示意图 1.1优点 行存储保证了相同记录的所有字段都在同一个集群节点,具备快速数

  • Git Unknown SSL protocol error in connection to github.com:443

        现在中美局势动荡不安,老外想搞科技技术封锁,有时上国外的网站会出现问题,这不就出现了github连接问题(昨天还好好的),现象如下: 不管通过TortoiseGit图形化工具或是gitbash命令行都不行,提示SSL问题。 我就记录下怎么解决的,步骤如下: 1. 打开TortoiseGit自带的PuTTYgen工具,如图 2.  打开之后,点击Generate按钮,然后在生成的过程中需要在key框中时刻移动鼠标,目的是生成一些随机数,如图 3、准备把生成的公钥添加至GitHub上,如图     4、选择Saveprivatekey,弹出如下对话框,选择是,如图     选择Saveprivatekey,弹出如下对话框,选择是,然后选择保存TortoiseGit支持的私钥至路径下C:\Users\dgm\.ssh\private.ppk,如图  然后选择Savepublickey,保存TortoiseGit支持的公钥至路径C:\Users\dgm\.

  • Nginx部署多个站点

    Nginx部署多个站点 一,介绍与需求 1.1,介绍 详细介绍请看nginx代理部署Vue与React项目,在这儿主要介绍多个站点的配置 1.2,需求 有时候想在一台服务器上为不同的域名/不同的二级域名运行不同的站点。比如www.webA.com作为官网前台,www.webB.com/admin.webA.com作为后台管理系统。可以把你的服务器IP分别解析到两个域名上,然后反向代理不同的站点,站点的服务名必须与域名对应。 二,Nginx配置 第一步:新建webServer文件夹 1mkdir/usr/local/nginx/webServer复制 第二步:进入webServer目录 1cdwebServer复制 第三步:新建站点A配置文件 1vimwebA.conf复制 在站点A中写入如下配置信息: 1server{ 2listen80; 3server_namewww.webA.com; 4 5location/{ 6roothtml1; 7indexindex.phpindex.htmlindex.htm; 8} 9}复制 第四步:新建站点B配置文件 1vima

  • Python 希尔排序法

    #希尔排序法 一、希尔排序法是一种插入排序。 它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。 二、基本思想: 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序; 随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 三、基本步骤: 我们选择增量gap=length/2,缩小增量继续以gap=gap/2的方式, 这种增量选择我们可以用一个序列来表示,{n/2,(n/2)/2...1},称为增量序列。 四、参考网址:https://www.cnblogs.com/chengxiao/p/6104371.html 五、Python代码: #希尔排序defshellSort(arr):  n=len(arr)#数列元素个数  gap=int(n/2)#从中间元素开始   whilegap>0:     foriinrange(gap,n):从中间往后依次比较      temp=arr[i]      j=i       whilej>=gapandarr[j-gap] &nbs

  • cpu 瓶颈分析

    关键知识点 cpu构造 lscpu物理核,逻辑核,超线程机制cpu线程数=物理核逻辑核逻辑核线程数 cpu时间片原理 时间片轮转机制cpu线程调度应用程序线程进程与时间片的关系 上下文切换 进程上下文切换线程上下文切换系统调用切换 cpu利用率 cpu实际利用率cpu有效利用率cpu平均负载(可调度进程与不可中断进程)jmeter下监听cpu资源tps监听器与cpu监听器组合分析性能趋势负载和cpu线程的关系进程优先级与时间片的关系     来源:https://testerhome.com/articles/25577

  • netty系列之:使用netty实现支持http2的服务器

    目录 简介 基本流程 CleartextHttp2ServerUpgradeHandler Http2ConnectionHandler 总结 简介 上一篇文章中,我们提到了如何在netty中配置TLS,让他支持HTTP2。事实上TLS并不是https的一个必须要求,它只是建议的标准。那么除了TLS之外,还需要如何设置才能让netty支持http2呢?一起来看看吧。 基本流程 netty支持http2有两种情况,第一种情况是使用tls,在这种情况下需要添加一个ProtocolNegotiationHandler来对握手之后的协议进行协商,在协商之后,需要决定到底使用哪一种协议。 上一篇文章,我们已经介绍TLS支持http2的细节了,这里不再赘述,感兴趣的朋友可以查看我之前的文章。 如果不使用tls,那么有两种情况,一种是直接使用http1.1了,我们需要为http1.1添加一个ChannelInboundHandler即可。 另一种情况就是使用cleartext从HTTP1.1升级到HTTP2。 HTTP/2ClearText也叫做h2c,我们看一个简单的升级请求,首先是客户端请求

  • MessageFormat理解,MessageFormat.format(Object obj)方法

    MessageFormat.format(Objectobj)方法主要用途为拼接message信息 用法: Object[]testArgs={newString("张三"),newString("大傻子")}; MessageFormatform=newMessageFormat("{0}是个{1}"); Stringformat=form.format(testArgs); System.out.println(format);复制 输出结果: 张三是个大傻子 疑问一:format(testArgs);这里传的参数为Object[]类型 源码为: /** *Formatsanobjecttoproduceastring.Thisisequivalentto *<blockquote> *{@link#format(Object,StringBuffer,FieldPosition)format}<code>(obj, *newStringBuffer(),newFieldPosition(0)).toString();</code>

  • 接口文档案列

    目录接口文档范式1.图片验证码请求路径:/passport/image_code请求方式:GET请求参数:cur_id,pre_id返回值:图片验证码参数解释:返回值解释:2,获取短信验证码请求路径:/passport/sms_code请求方式:POST请求参数:mobile,image_code,image_code_id返回值:errno,errmsg参数解释:返回值解释: 接口文档范式 1.图片验证码 请求路径:/passport/image_code 请求方式:GET 请求参数:cur_id,pre_id 返回值:图片验证码 参数解释: 参数名 类型 是否必须 参数说明 cur_id 字符串 是 当前图片验证码的编号 pre_id 字符串 是 上一个图片验证码编号 返回值解释: 参数名 类型 是否必须 参数说明 image_data Image/jpg 否 图片验证码 2,获取短信验证码 请求路径:/passport/sms_code 请求方式:POST 请求参数:mobile,image_code,image_code_id 返回值

  • 《Django By Example》第十章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:AntonioMelé (译者注:翻译本章过程中几次想放弃,但是既然都到第十章了,怎么能放弃!) 第十章 创建一个在线学习平台(e-LearningPlatform) 在上一章,你添加国际化到你的在线商店项目中。你还构建了一个优惠券系统和一个商品推荐引擎。在这章中,你会创建一个新项目。你将构建一个在线学习平台创建一个定制内容管理系统。 在这章中,你会学习以下操作: 创建fixtures给你的模型 使用模型继承 创建定制模型字段 使用基于类的视图和mixins 构建formsets 管理组合权限 创建一个内容管理系统 创建一个在线学习平台 我们最实际的项目将会是一个在线学习平台。在本章中,我们将要构建一个灵活的内容管理系统(CMS)用来允许教师来创建课程和管理它们的内容。 首先,创建一个虚拟环境给你的新项目并且激活它通过以下命令: mkdirenv virtualenvenv/educa sourceenv/educa/bin/activate 复制 安装

相关推荐

推荐阅读