经济学 – 需求

By | 6 7 月, 2020

主管价值论和客观价值论的区别

  • 客观价值论:世界上所有的物品,都有客观的、内在的、不以人的意志为转移的价值,而价格只是围绕这个本质的、客观的价值上下波动的一个现象
  • 主观价值论:所有的物品,本身并没有什么内在的价值,只有人对它的判断,人觉得它有价值,它就有价值

它们两个的区别在于:

  • 凡是客观价值论能够解释的现象,主观价值论也能解释
  • 客观价值论不能解释的现象,主观价值论也能解释(明星/普通人喝水拍广告的价格;一张家庭老照片对于不同人的价值)

Ubuntu 18.04 设定静态 IP 地址

By | 24 11 月, 2019

新建并编辑 /etc/netplan/01-netcfg.yaml文件:

network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: no
      addresses: [192.168.50.124/24]
      gateway4: 192.168.50.1
      nameservers:
        addresses: [114.114.114.114]

重启即可。

Ubuntu 18.04 阿里云软件源

By | 24 11 月, 2019
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates

Ubuntu 18.04 开启 root ssh 登录

By | 24 11 月, 2019

修改 root 密码

$ sudo passwd root
[sudo] password for linuxconfig:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

允许 root 登录

$ sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/'

从场景入手学设计模式

By | 13 1 月, 2019

这两周看完了博览网的设计模式的课程,有很多感触。平时工作中代码写的很熟练,很多时候看着代码,觉得这里应该这么写才对,那样写就会觉得很别扭,但一直没有向上抽象出一套模式或方法论。
这次看设计模式的过程中,一直有一种“这个好像说的就是那个我一直觉得写得很别扭的地方”、“对对对!就是这种套路!”的感觉。这篇文章是看完这套教程后,我自己的一点总结和归纳,希望也对你有一些帮助。
单纯一个个的总结模式似乎并不符合常规认知,我还是喜欢从实际场景入手,来一个个对照总结。看看有没有哪个场景是正好戳中你的?…

Python list 完整替换

By | 12 12 月, 2018

今天在看上下文管理器的时候发现了一个有趣的用法,可以用于 Python 中 list 的整体内容替换。
看下面两段代码产生的输出,第一个是常用的赋值的方式:

s = [1, 2, 3]
t = [4, 5, 6]
print('origin addr of s: %s' % hex(id(s)))
print('origin addr of t: %s' % hex(id(t)))
s = t
print('origin addr of s: %s' % hex(id(s)))

Python 中的上下文管理器

By | 12 12 月, 2018

Python 的上下文管理器可以帮助我们控制和管理各种各样的系统资源(比如文件、锁和连接等),再加上 with 语法糖的使用,可以大大简化我们管理资源的代码成本,同时提高健壮性。
一些常用的场景如下:

with open('testfile', 'w') as f:
    f.write('hello')
import threading
lock = threading.Lock()
with lock:
    print('Lock')

with

[笔记] Java 并发 – 基础构建模块

By | 16 7 月, 2018

同步容器类

同步容器类包括 Vector / Hashtable / … 这些同步的封装器类是由 Collections.synchronizedXxx 等工厂方法创建的。
这些类实现线程安全的方式是:把它们的状态封装起来,并对每个公有方法都进行同步,使得每次只有一个线程能访问容器的状态。

同步容器类的问题

同步容器类都是线程安全的,也就是说直接调用暴露的公共方法都是没有任何安全问题的。但问题出在复合操作上,常见的比如:…

[笔记] Java 并发 – 对象的组合

By | 28 6 月, 2018

更多情况下,我们希望的是将一些现有的线程安全的组件组合为更大规模的组件或者程序,并且在维护的时候不会无意中破坏类的安全性保证。

实例封闭

如果某对象不是线程安全的,那么可以通过多种技术使其在多线程程序中安全地使用。
你可以确保该对象只由单个线程访问(线程封闭),或者通过一个锁来保护对该对象的所有访问。
一般情况下,我们将数据封装在对象的内部,并将数据的访问限制在对象的方法上,从而更容易确保线程在访问数据时总能持有正确的锁。…

[笔记] Java 并发 – 线程安全性 & 对象的共享

By | 18 6 月, 2018

线程安全性

当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。

竞态条件 Race Condition

当某个计算的正确性取决于多个线程的交替执行时序时,那么就会发生竞态条件。
大多数竞态条件的本质——基于一种可能失效的观察结果来做出判断或者执行某个计算。这种类型的竞态条件称为“先检查后执行”。…

[笔记] Java 类型信息

By | 18 6 月, 2018

在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为反射机制。

Class 对象

Java 中每个类都有自己的 Class 对象,为了生成这个类的对象,JVM 会使用类加载器来完成这个操作。
所有的类都是在第一次使用的时候加载到 JVM 中的,也就是当程序创建第一个对类的静态成员的引用的时候,就会加载这个类。

[笔记] Java 泛型

By | 15 6 月, 2018

简单泛型

public class TwoTuple<A, B> {
    public final A first;
    public final B second;
    public TwoTuple(A a, B b) {
        this.first = a;
        this.second = b;
    }
    public String toString() {
        return "(" + first + ". " + second + ")";
    }
}

泛型接口

泛型除了应用于类之外,也可以用于接口,比如生成器(Generator)。Generator…

[笔记] Java 异常相关

By | 12 11 月, 2017

Java 异常层次结构

Error 类的异常为 Java 运行时的系统内部错误导致,如果发生了这种异常,能通知给用户做做善后工作就已经不错了,也无力回天。所以这种异常在开发时基本是无需关心,也不能抛出的。
Exception 分支下的 RuntimeException 和 IOException 是按两种规则来划分的:

  • 由程序错误导致的异常属于 RuntimeException,像错误的类型转换、数组越界、空指针之类的
  • 程序本身没有问题,但由于像

[笔记] Java 并发相关

By | 12 11 月, 2017

线程局部变量

当某个 class 不是线程安全的时候,那么可以通过 ThreadLocal 辅助类来让每个线程都构造自己的这个 class 的实例。
比如 SimpleDateFormat 不是线程安全的,那么可以使用如下方式:

public static final ThreadLocal dateFormat =
ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd"));