Too young, too simple. Sometimes, naive & stupid

迭代法的基本思想

迭代法(Iterative Method),也称辗转法

  • 通过迭代函数(迭代关系式、迭代公式)
  • 由迭代变量旧值(前一个值)推出新值(下一个值),在不断用新值取代旧值
  • 反复校正迭代变量的值
  • 通过反复迭代,缠身一个数列: ,直到逐步逼近问题的解

迭代法的基本步骤

  1. 确定迭代变量

    在可用迭代法求解的问题中,应至少存在一个可直接或间接地不断由旧值推出新值的变量——迭代变量

  2. 建立迭代函数

    解决迭代问题的关键

  3. 确定迭代结束条件(收敛判据)

    1. 所需的迭代次数是已知的确定的值——计数控制循环
    2. 所需的迭代次数无法确定——条件控制的循环
阅读全文 »

递归

如果一个对象部分地由它自己组成或按它自己定义,则称它是递归的(Recursive)

递归

函数/过程/子程序在运行过程中直接或间接调用自身而产生的重用现象

递归——阶乘

递归算法必须包含如下两个部分

  • 有其自身定义的与原始问题类似的更小规模的子问题,它使递归过程持续进行,称为==一般条件(General case)==
    • 计算n!问题的一般条件可以用递归公式表示为: 当 n>1时
  • 所藐视问题的最简单的情况,他是一个能控制递归过程结束的条件,称为==基本条件(Base case)==
    • 计算n!问题的基本条件可以表示为: n=1时
阅读全文 »

用法

docker build命令Dockerfile根据上下文构建image。构建的上下文是指定位置PATH或的文件URL。这PATH是本地文件系统上的目录。URL是一个Git存储库位置。

递归处理上下文。因此,a PATH包括所有子目录,URL包括存储库及其子模块。此示例显示了使用当前目录作为上下文的构建命令:

阅读全文 »

如何保持图像小

在启动容器或服务时,小图像可以更快地通过网络,并且可以更快地加载到内存中。有一些经验法则可以保持图像尺寸小:

  • 从适当的基本图像开始。例如,如果您需要JDK,请考虑将您的图像基于官方openjdk图像,而不是从通用ubuntu图像开始并openjdk作为Dockerfile的一部分进行安装。

  • 使用多级构建。例如,您可以使用该maven映像构建Java应用程序,然后重置为tomcat映像并将Java工件复制到正确的位置以部署您的应用程序,所有这些都在同一个Dockerfile中。这意味着您的最终图像不包含构建所引入的所有库和依赖项,而只包含运行它们所需的工件和环境。

    • 如果您需要使用不包含多级构建的Docker版本,请尝试通过最小化RUNDockerfile 中单独命令的数量来减少图像中的图层数。您可以通过将多个命令合并为RUN一行并使用shell的机制将它们组合在一起来实现此目的。考虑以下两个片段。第一个在图像中创建两个图层,而第二个图层仅创建一个图层。

      1
      2
      RUN apt-get -y update
      RUN apt-get install -y python
      1
      RUN apt-get -y update && apt-get install -y python
  • 如果您有多个共同点的图像,请考虑使用共享组件创建自己的基本图像,并在其上创建独特的图像。Docker只需要加载公共层一次,然后缓存它们。这意味着您的衍生图像可以更有效地使用Docker主机上的内存并加载更快。

  • 要使生产映像保持精简但允许调试,请考虑使用生产映像作为调试映像的基本映像。可以在生产映像之上添加其他测试或调试工具。

  • 在构建图像时,始终使用有用的标记对其进行标记,这些标记用于编码版本信息,预期目标(prod或者test,例如),稳定性或在不同环境中部署应用程序时有用的其他信息。不要依赖自动创建的latest标签。

    阅读全文 »

记得第一次知道容器这个词是2016年(技术渣),那时Openstack还如日中天,我安装了一个Ubuntu,翻了翻文档, 百度看了下仅有的几个博客,用蹩脚的操作安装上Docker(那时还部分ce,ee)就那几分钟,Docker就可以实现部署好几种应用来完成我的测试,发现docker这真是个神器,到今天为止,我也没有玩明白docker(没有长期的投入实践),包括以后的Kubernetes,Openshift,Rancher等等这些PaaS平台,也仅仅是部署,这里就不说原因了;从今天起,开始复习这些略识之无的东西,今天先复习一下命令。

阅读全文 »

面向对象程序设计

对象

  • 万物皆为对象
  • 包含一定的数据结构和状态的实体,称为对象
  • 作用于对象的行为(如访问和处理对象的状态),称为操作(operation)

面向对象(Objective Orientation,OO)

  1. 以==对象==为核心
  2. 先构造与整个系统(问题)相关的各个对象,描述他们的状态,他们的行为,然后通过消息来调动这些对象,让他们来解决这个问题
  3. ==程序 = 对象 + 消息==
  4. 面向对象将对象作为软件系统结构的基本组成单元,以主体数据为中心,将数据及其上作用的操作一起封装,以标准的接口规范对外提供服务
    阅读全文 »

分治的基本思想

分治(Divide and Conquer)

  • 分而治之,是处理复杂问题的一个最基本、也最常用的策略之一

基本思想

规模为N的原始问题 ==> 若干规模较小的同类子问题 ==> 若干规模更小的同类子问题 ==> 直接求解规模更小的子问题 ==> 将各个子问题的解合并为原问题的解

分治的实例———找假币

12个一模一样的硬币,已知==只有一枚是假币==,并且假币和真币的重量不一样(假设假币比真币轻),问如何用一个天平把假币从这12枚硬币中找出来,只能称3次

  1. 最简单的办法: 直接求解的找假币问题: 2枚称1次
  2. 稍复杂的:3枚,需要称几次?
  3. 分治法 + 排除法
    1. 12枚分成两等份,每份6枚;
    2. 假币那端的6枚再次分为两等分,每份3枚;
    3. 有假币的那一端的3枚硬币中任意取出2个去称重。
  4. 分治法
    1. 把12枚硬币分成3等份,每份4枚;
    2. 在有假币的那一端的4枚硬币中,任取两枚到天平两端去称重;
    3. 若假币在余下的那两枚中,则把这两枚硬币放到天平两端去称重。
阅读全文 »

Yum是Red Hat软件包管理器,它能够查询有关可用软件包的信息,从存储库获取软件包,安装和卸载软件包,以及将整个系统更新到最新的可用版本。Yum在更新,安装或删除软件包时执行自动依赖性解析,因此能够自动确定,获取和安装所有可用的依赖软件包。

Yum可以配置新的,额外的存储库或包源,还提供许多增强和扩展其功能的插件。百胜可以执行许多与RPM相同的任务; 此外,许多命令行选项都是类似的。Yum可以在一台计算机或一组计算机上轻松简单地进行包管理。

阅读全文 »

了解虚拟化原理,首先要了解虚拟化都设计哪些资源,清楚其组件及其实现。

资源管理是将资源从资源提供方分配给资源用户的一个过程。

我们之所以需要资源管理,原因就是因为资源会过度分配,以及需求容量会随着时间推移而变化。

虚拟化资源类型

资源包括CPU、内存、电源、存储器和网络。

阅读全文 »

当可用资源无法满足资源用户的需求时,需要对分配给虚拟机的资源量进行自定义。

资源分配设置用于确定虚拟机提供的CPU、内存和存储资源。

  • 预留主机或集群的物理资源。
  • 为可以分配给虚拟机的资源量设置上限。
  • 保证为特定虚拟机跟配的物理资源始终高于其他虚拟机。
    阅读全文 »

平台和版本

和大多数模块一样,sys既包括富含信息的名称,也包括完成具体工作的函数。例如,他的属性可以告诉我们底层操作系统名称,当前计算机可容纳的最大的“原生”整型(虽然python3.X版本中整型的长度可以是任意长的),异机正在运行我们代码的Python解释器的版本号:

1
2
3
4
5
6
7
import sys
sys.platform,sys.maxsize,sys.version
('win32', 9223372036854775807, '3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]')
if sys.platform[:3] == 'win':
print('Hello Windows')
...
Hello Windows
阅读全文 »

介绍Python OS模块

os模块是两大核心系统模块中较大的那个。它包含了在C程序和shell脚本中经常用到的所有操作系统调用。它的调用设计目录、进程和shell变量等。准确地说,该模块提供了POSIX工具,操作系统调用的跨平台移植标准,以及不依赖平台的目录处理工具,如内嵌模块os.path便携的脚本通常无需改动即可在其他平台上运行。某些平台,os还包括了专属该平台的额外工具。不过总的来说,只要技术上可行,os都能做到跨平台。

阅读全文 »