Java,python,c++的若干点不同

缩进

python使用强制锁进,让代码风格很好看,因为每个人写出来的代码格式是一样的。
但是c++和Java是使用大括号包裹,相比python来说,这种方式更灵活,但是降低了代码的可读性,再多人合作开发的时候增加了复杂度。
举个例子:

for(int a=1;i<10;i++){
    //      这里的内容可以随意的书写。不限于缩进,都属于for循环的部分
}

然后来看看python的

for a in b:
     statements(s1)
statements(s2)

这里需要注意的是:

s1语句是属于for循环的,但是s2语句是和for同一级别的。

分号问题

java和c++都使用分号作为语句结束的标志,但是python不需要这样,写完一行之后直接换行就可以继续写下一行的内容。

注释问题

在c++和Java中使用//进行注释,但是在python中使用#作为注释

运行过程

python和java类似,有解释器将源代码转换为中间代码,然后再翻译成计算机使用的机器语言并运行,
这和c++不一样,c++是经过编译器和汇编器生成目标代码然后转换为可执行的程序。

可拓展和嵌入

python被称为胶水语言是有原因的,他可以很容易的将c++等语言的代码结合起来,共同实现需要实现的功能。

学习难度

python是其中最为简单的,其实是Java然后是c++,众所周知,c++中的指针让人诟病。
而python则进入了中学课本,甚至有些小学也开始学习python。

面向对象

python和Java都属于面向对象的语言,但是c是面向过程的。
c++则是面向对象,不过很难开发大型的应用程序。

垃圾/资源回收机制

Java和python都提供了自动回收资源和垃圾的机制,因此在编写代码的时候不需要考虑资源的回收,系统会帮助自己完成。
而c++则需要不断的free以免将资源占满。

基本数据类型

在python中单引号和双引号的作用是一样的。但是在Java中不是这样,双引号用来修饰string的字符串,而单引号用来修饰char类型的字符。

跨平台特点

python不可以跨平台但是Java可以,这意味着Java比python有更大的市场和机会。
但是两者都兼容不同的操作系统。

强类型和弱类型

Java在使用变量之前要先初始化,否则系统会提示错误信息,但是python不是,他不需要声明变量就可以直接运行代码。

运行速度

Java比python的运行速度要快一些,但是通常上差不了太多。

架构是什么?

架构是什么

关于什么是架构,很难给出一个明确的定义。用我自己的话来说,架构就是组成一个系统的层次结构。日常生活中听到的最多的关于含有架构的句子,就是架构师吧。
那么我们不妨从架构师的角度来看看什么是架构。

架构师的日常职责

系统架构师是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。一个架构师得需要足够的想像力,能把各种目标需求进行不同维度的扩展,为目标客户提供更为全面的需求清单。

好,我们来一一分析一下。

  1. 既需要掌握整体,又需要洞察局部瓶颈。
    我认为,架构师的占位是在整个系统之上,好比炒股中的操盘手一样的地位。整个系统在他们的眼中,应该是条理清晰地,各部分相互独立的,接口明确的联系在一起。作为架构师,必须要把握整个系统的功能实现以及性能要求。这需要站在系统之外审视才可以看得清楚。而洞察局部瓶颈则指的是各部分之间的联系处,也就是接口的地方,如何将整个系统高效的联系在一起?这是一个复杂的问题,在软件中的接口好比人身上的筋脉,错综复杂,特别是在大型系统中。身为架构师,要想把握整个系统,就必须要确切的知道这里的组合方式(我的意思是系统的两个部分怎么整合在一起)
  2. 依据业务场景给出解决方案
    不可否认的是,在每一个领域都会有模式这种东西存在,模式总结了前人的经验,为后来的系统提供了参考和案例支持。但是正如天底下没有两个一样的mis系统一言,不同业务场景有相似互通之处,但是绝对没有两个完全相同的系统。在这里我就要举一个例子了:
    抖音这两年可谓是火遍了大江南北,虽然微信各种封杀,但是依旧阻挡不了他的进攻步伐,字节跳动的战斗力不容小徐,以至于腾讯一口气发布了27个短视频应用。可是结果显而易见,没啥卵用。马化腾自己也说过,抄袭别人的永远当不了老大。不同的业务场景,需要不同的解决问题的方法,不同的解决方案。

    1. 团队领导型人物
      这次裁员潮中,恐怕没听过哪个架构师被裁了吧?架构师在团队中是核心人物,把握着系统的走向,这样的人物是难以替代的,一旦离开了,对于整个团队来说,代价是巨大的。一直都有一个笑话说:每个新来的架构师上任了之后需要把系统重构一番,往往还没重构完,新架构师就又来了。

好,架构师的职责我们分析完了,通过观察架构师的日常职责,我们可以对架构给出一个模糊的定义。
架构就是整个系统中的整体结构与组件的抽象描述,指导着大型的系统的设计
需要注意的是:架构包含了整体的结构,也包含了组件,因为泛泛的谈整体是耍流氓的行为。因为仅仅有整体结构,是无法知道建立起来整个系统的。

Scala入门-Scala文件操作

写入文件

Scala进行文件读写,直接使用的都是Java类中IO类

import java.io._

object Test{
    def main(args:Arrag[String]){
        val writer = new PrintWriter(new File("test.txt"))

        writer.write("菜鸟学Scala")
        writer.close();
    }
}

从文件读取内容

使用Scala的source类及伴生对象来读取文件。

import scala.io.Source

object Test {
   def main(args: Array[String]) {
      println("文件内容为:" )

      Source.fromFile("test.txt" ).foreach{ 
         print 
      }
   }
}

创建型模式横向对比

简单工厂模式

定义

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

类图

工厂方法模式

定义

工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

类图

抽象工厂模式

定义

抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式。

类图

建造者模式

定义

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同,建造者模式又可以称为生成器模式。

类图

原型模式

定义

原型模式(Prototype Pattern):原型模式是一种对象创建型模式,用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模式允许一个对象再创建另外一个可定制的对象,无须知道任何创建的细节。
原型模式的基本工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝原型自己来实现创建过程。

类图

单例模式

定义

单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。单例模式是一种对象创建型模式。单例模式又名单件模式或单态模式。

类图

行为型模式横向对比

行为型模式横向对比

职责链模式

定义

职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。由于英文翻译的不同,职责链模式又称为责任链模式,它是一种对象行为型模式。

类图

命令模式

定义

命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。

类图

解释器模式

定义

解释器模式(Interpreter Pattern) :定义语言的文法,并且建立一个解释器来解释该语言中的句子,这里的“语言”意思是使用规定格式和语法的代码,它是一种类行为型模式。

类图

迭代器模式

定义

迭代器模式(Iterator Pattern) :提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。

类图

中介者模式

定义

中介者模式(Mediator Pattern)定义:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。

类图

备忘录模式

定义

备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名为Token。

类图

观察者模式

定义

观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式是一种对象行为型模式。

类图

状态模式

定义

状态模式(State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。

类图

策略模式

定义

策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。策略模式是一种对象行为型模式。

类图

模版方法模式

定义

模板方法模式(Template Method Pattern):定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法是一种类行为型模式。

类图

访问者模式

定义

访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。

类图