我们不能失去信仰

我们在这个世界上不停地奔跑...

0%

最近工作的老项目使用的是 Python2,在处理中文的时候,遇到了一些编码错误,在这里总结一下。

在 Python2 中,一个字符串可能为 str 或者 unicode 。

1
2
3
4
5
6
a = '你好'
type(a) # 输出 <type 'str'>
repr(a) # 输出 "'\\xe4\\xbd\\xa0\\xe5\\xa5\\xbd'"
a = u'你好'
type(a) # 输出 <type 'unicode'>
repr(a) # 输出 "u'\\u4f60\\u597d'"
阅读全文 »

首先举个例子

1
2
3
4
5
6
7
8
9
10
11
12
from string import maketrans

a = 'abcde'
b = '12345'

trantab = maketrans(a, b)

str = 'abcdefag'

print str.translate(trantab)

# 输出 12345f1g
阅读全文 »

ABC -抽象基类

以下仅仅个人见解。

首先 Python2 的写法和 Python3 的写法不同,这个不是重点。

当我第一次读别人源码看到ABC这个东西时,发现竟然是一个内置模块,一定要搞清楚这个东西是干什么的,为什么存在?解决了哪些问题,还有到底为什么要用它?

参考某篇Blog的解释:Python 中并没有提供抽象类与抽象方法,但是提供了内置模块 abc (abstract base class)来模拟实现抽象类。

有了上面这个解释,我自然联想到 Java 中的抽象类或者接口的概念。

而在某些项目中,使用抽象类的好处: 通过定义抽象基类,可以为一组子类定义公共 API。

阅读全文 »

JVM虚拟机中的栈帧

栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,存在于虚拟机运行时数据区中的虚拟机栈栈中的元素。

image-20190301165059365

一个栈帧主要有 局部变量表操作数栈动态连接方法出口

每一个方法从调用开始到执行完成的过程,就对应着一个栈帧在虚拟机里面从入栈到出栈的过程。

阅读全文 »

运行时数据区域

Java 虚拟机在执行 Java 程序的过程中会把所管理的内存划分为若干个不同的数据区域。Java 虚拟机所管理的内存包括以下几个运行时数据区域:

image-20190227172713322

Class文件通过类加载器进行加载后,不同的数据分布在不同的区域,然后经过执行引擎来进行执行。

一个线程的图示

阅读全文 »

模板设计模式

模板(Template)设计模式:

模板模式就是定义一个算法的骨架,而具体的算法延迟到子类中来实现

优点

使用模板方法模式,在定义算法骨架的同事,可以很灵活的实现具体的算法,满足用户灵活多变的需求

缺点

阅读全文 »

Java 动态代理

  • 动态代理应用场景

    1. 日志集中打印
    2. 事务
    3. 权限管理
    4. AOP
  • Spring AOP 当中可以使用的方式实现,和区别。

阅读全文 »

类加载

当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过 加载,连接,初始化三步 来实现对这个类进行初始化。

加载

是指将 class 文件读入内存,并为之创建一个 Class 对象。 任何类被使用时系统都会建立一个 Class 对象。

image-20190119164554374

连接

阅读全文 »

工厂方法模式的概述和使用

工厂方法模式概述

​ 工厂方法模式中抽象工厂类负责定义创建对象的借口,具体对象的创建工作由继续抽象工厂的具体类实现。

优点

​ 客户端不需要再负责对象的创建,从而明确了各个类的职责

​ 如果有新的对象增加,只需要维护一个具体的类和具体的工厂类即可,不影响已有的代码

阅读全文 »