Skip to content

Commit d670b5a

Browse files
jasonimZoeyWoohoo
authored andcommitted
第 10 期:I'm back by JasonThink (#173)
* Update README.md * Update README.md * init phase 8 * add phase 8 * 第九期 * 更新 * i'm back * update
1 parent 6add275 commit d670b5a

File tree

2 files changed

+178
-0
lines changed

2 files changed

+178
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
site: https://www.hujiandong.com/tax_reform_2018.html
3+
---
4+
5+
停更一个月,处理完个人一些事件后还是决定回来了。
6+
7+
这一月其实发生很多事情, 滴滴事件、湖北耒阳教育事件、京东刘强东等等,其中我最关心的是新的税改并入。
8+
9+
记得就在2015年, 到处提到全民创业,中关村创业大街,你随便进去一家咖啡店,就可能会碰到上千万的融资磋谈中...当时被喊得最响亮的口号:
10+
>站在风口上,连猪都能飞起来。
11+
12+
仅仅过去三年, 2018年的今天,已是哀鸿遍野,到处都在唱寒冬来了。真的吗? 答案是必然的,当韭菜被收割后,说明秋天已经来了, 冬天还会远吗?
13+
14+
很多人都把这场寒冬归结于中美贸易战,真是这样吗?其实不是, 它只是导火索,它只是在正确时间出现, 瞬间把所有以前存在的问题快速放大。本质原因还是因为以前这些问题只是因为过去几十年的经济发展把它给掩盖了。当增长乏力时,以前的问题都快速浮出水面。
15+
16+
天朝过去四十年发展得益于,外力能量输入,比如改革开放,导致资金、技术、组织方式、认知能力的输入,从而改变原有结构,快速提升社会资源利用率,继而能攫取足够能量维系当前规模。
17+
18+
但是所有都有边际成本递增效应,没有听说**边际成本递增**
19+
20+
边际成本递增指的是,**当你在市场上获取资源超过一定的限度,你取得最后一单位资源的成本就不是更低,而是更高。**
21+
你去买一个苹果,一定比买1吨苹果贵,但是你想买一万亿吨苹果,最后一单位的单价一定要比买一万吨苹果单价贵。后面是因为稀缺导致溢价。
22+
23+
so, 同样,我们大天朝同样遇到这样的问题,根据天朝的组织原则,同为地方大员的1号和2号人物如果有矛盾,只要不公开化,一般会调开一个,留下一个。如果两个人公开争执,两个都会被撸掉——这会被定性为:不能团结人,缺乏大局观。在天朝的组织原则中,这可是天大的忌讳——只要是集体做的决策,即便造成恶劣的影响,也不用个人承担责任,如果个人公然唱反调,那性质就变了。
24+
25+
26+
27+
早些天财政部和央行居然公开化相互指责,这是闻所未闻的事。这也意味着彼此之间的矛盾达到不可调和的程度。央行指责地方政府过度负债,最后要让自己背锅,造成太多烂账。财政部指责金融系统为了私利,设计一堆复杂度超出地方财政部能力范围的金融产品,引诱地方政府超支和负债。央行送给财政部一顶大帽子:没有执行中枢关于去杠杆的决策,金融系统在去杠杆,遭受巨大损失,而地方政府和相关企业不仅没有淘汰过剩产能,还在加杠杆扩张规模。财政部立刻反杀,一刀致命:央行缺乏大国央行的格局,人民币国际化止步不前,汇率搞的一塌糊涂,大A股更是血流成河…
28+
29+
30+
金融系统最近高潮迭起,首先是P2P爆雷,继而171加私募Game Over,再就是汇率一路上扬都快涨到7快了,最后是大A股韭菜都跑光了,连个烧纸的都没留下… 头一回不顾组织原则,跳出来公开指责,相互甩锅。可见,增长的动力确实青黄不接,有些力不从心了!
31+
32+
最近有一特别火的段子:
33+
>一男子辞职后与一女子坠入爱河。春节将至,该男子表示要和该女一起拜访准岳父母,但待业的他已经将积蓄花得所剩无几。可拜访家长总不能两手空空,于是该男子动了歪主意....向他老爸下手,未经父亲同意,该男子变卖了他老爸账户内240万元股票,办年货,买豪车,甚至给女朋友卡里存了100万元。但是钱光了,女友却跑了...
34+
35+
>故事到最后,该男子拿着仅剩下的24万又买回了原有的股票。
36+
37+
很多人当笑话看,但是最近两年待在股市里面的投资者,看了怕是欲哭无泪,本想着三年翻倍的,结果却跌去了一半。
38+
39+
包括这个新的税改并入,当公众期望减个税的时候,结果就调整为个人到手收入大幅减少、企业代缴社保大幅增加;
40+
41+
然后,如你所知,投资人也好,娱乐明星也好,税率忽然大幅增加,而且还要追溯以往,补缴过去一段时间的税;并且,中国人全球资产都要交税……
42+
43+
44+
45+
这不是割韭菜了,这是挖韭菜根了。结果是注定的,会加剧中小企业倒闭或裁员,从而带来大量失业。
46+
47+
网上有篇 征税不是拔毛,他是这样写道:
48+
>在中国,税收问题常常被看作只与经济繁荣、公共服务和社会公平有关。然而,税收问题首先是道德问题。在一个文明的、道德的社会,政府存在的意义以及征税的目的是保护每个人的生命、自由与财产,提防各式各样的窃贼与强盗,而不是取他们而代之。
49+
50+
>http://blog.sina.cn/dpool/blog/s/blog_492d06fb0100f163.html
51+
52+
53+
54+
前几年还不断地有文章写道,中产阶级的门槛是多少,标准不一,少的说,十几二十万就行了,多的呢,非得五百八百万才入门;
55+
56+
但现在看来,多少资产才算“中产”,根本不是核心;能否稳定、安全、受尊重,才是核心。而一旦没有“个人财产神圣不可侵犯”的概念,一个亿也未必是你的。
57+
58+
这些问题,个人是无解的,你再努力也没办法。我们能做的是且走且看,是不是我们看错了, 是不是在我大天朝在重构,希望我的担心是错的。
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
---
2+
title: 你了解泛型通配符与上下界吗?
3+
date: 2017-03-11 10:30:16
4+
categories: Java
5+
tags: [Java] #文章标签,可空,多标签请用格式,注意:后面有个空格
6+
description: 你了解泛型通配符与上下界吗?
7+
---
8+
9+
# 你了解泛型通配符与上下界吗?
10+
在进入主题之前, 我们先简单说一下 Java 的泛型(generics)。它是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。声明的类型参数在使用时用具体的类型来替换。泛型最主要的应用是在JDK 5中的新集合类框架中。
11+
12+
今天我们主要说如下类型:
13+
+ 泛型的背景
14+
+ 通配符以及上下界
15+
+ 泛型及通配符的使用场景
16+
17+
## 为什么使用泛型及背后的问题?
18+
我们来看一下官方的说法:
19+
>+ Stronger type checks at compile time.
A Java compiler applies strong type checking to generic code and issues errors if the code violates type safety. Fixing compile-time errors is easier than fixing runtime errors, which can be difficult to find.
20+
>+ Elimination of casts.
21+
>+ Enabling programmers to implement generic algorithms.
By using generics, programmers can implement generic algorithms that work on collections of different types, can be customized, and are type safe and easier to read.
22+
23+
是的, 终止目的就是想把程序员解放出来,关注他们更应该关注的事情上面去。当我第一次学习 Java 的泛型时,总感觉它类似于 C++ 中的模板。但随着慢慢的深入了解发现它们之间有本质的区别。
24+
25+
Java 中的泛型基本上完全在编译器中实现,由编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码。这种实现技术称为 擦除(erasure)(编译器使用泛型类型信息保证类型安全,然后在生成字节码之前将其清除),这项技术有一些奇怪,并且有时会带来一些令人迷惑的后果。
26+
27+
对于泛型概念的引入,开发社区的观点是褒贬不一。从好的方面来说,上面已经说了,主要是在编译时刻就能发现很多明显的错误。而从不好的地方来说,主要是为了保证与旧有版本的兼容性,Java 泛型的实现上存在着一些不够优雅的地方。
28+
29+
下面我们来看一下,泛型类型的一个定义,后面我们要在这个的基础上进行改造:
30+
```
31+
public class Box<T> {
32+
// T stands for "Type"
33+
private T t;
34+
35+
public Box(T t)  { this.t = t; }
36+
public void set(T t) { this.t = t; }
37+
public T get() { return t; }
38+
}
39+
```
40+
41+
接下来下面我们来聊聊 Java 泛型的通配符, 记得刚开始看到通配符(?)时我是惊喜的,因为既然有通配符那么就可以这样定义:
42+
```
43+
public void doSometing(List<?> list) {
44+
list.add(1); //illegal
45+
}
46+
```
47+
48+
可是我们如上写法,总是出现编译错误,然后从惊喜变成惊吓,心想有什么卵用了。最后发现原因是在于通配符的表示的类型是未知的。那在这种情况下,我们可以使用上下界来限制未知类型的范围。好吧,写了那么多, 终于等到今天的主角登场了,容易吗?
49+
50+
还记得我们上面定义的 Box 吗, 现在我们再定义 Fruit 类以及它的子类 Orange 类。
51+
```
52+
class Fruit { }
53+
class Orange extends Fruit {}
54+
```
55+
56+
现在我们想它里面能装水果,那么我可以这么写。
57+
`Box<Fruit> box = Box<Orange>(new Orange) //illegal`
58+
59+
不幸的是编译器会报错,这就尴尬了,why?why? why?实际上,编译器认为的容器之间没有继承关系。所以我们不能这样做。
60+
61+
为了解决这样的问题, 大神们想出来了<? extens T> 和 <? super T> 的办法,来让它们之间发生关系。
62+
## 上界通配符(Upper Bounded Wildcards)
63+
现在我们把上面的 Box 定义改成:
64+
`Box<? extends Fruit>`
65+
66+
这就是上界通配符, 这样 Box<Fruit> 及它的子类如 Box<Orange> 就可以赋值了。
67+
`Box<? extends Fruit> box = new Box<Orange>(new Orange)`
68+
69+
当我们扩展一下上面的类, 食物分成为水果和蔬菜类, 水果有苹果和橘子。
70+
在上面的结构中, Box<? extends Fruit> 涵盖下面的蓝色的区域。
71+
72+
![](http://7xnilf.com1.z0.glb.clouddn.com/upper.png)
73+
74+
### 上界只能外围取,不能往里放
75+
我们先看一下下面的例子:
76+
```
77+
Box<? extends Fruit> box = new Box<Orange>(new Orange);
78+
79+
//不能存入任何元素
80+
box.set(new Fruit); //illegal
81+
box.set(new Orange);//illegal
82+
83+
//取出来的东西只能存放在Fruit或它的基类里
84+
Fruit fruit = box.get();
85+
Object fruit1 = box.get();
86+
Orange fruit2 = box.get(); //illegal
87+
```
88+
89+
上面的注释已经很清楚了, 往 Box 里放东西的 set() 方法失效, 但是 get() 方法有效。
90+
91+
原因是 Java 编译器只知道容器内是 Fruit 或者它的派生类, 但是不知道是什么类型。可能是 Fruit、 可能是 Orange、可能是Apple?当编译器在看到 box 用 Box<Orange> 赋值后, 它就把容器里表上占位符 “AAA” 而不是 “水果”等,当在插入时编译器不能匹配到这个占位符,所有就会出错。
92+
93+
## 下界通配符(Lower Bounded Wildcards)
94+
和上界相对的就是下界 ,语法表示为:
95+
`<? super T>`
96+
97+
表达的相反的概率:一个能放水果及一切水果基类的 Box。 对应上界的那种图, 下图 Box<? super Fruit> 覆盖黄色区域。
98+
99+
![](http://7xnilf.com1.z0.glb.clouddn.com/lower.png)
100+
101+
### 下界不影响往里存,但往外取只能放在Object 对象里
102+
同上界的规则相反,**下界不影响往里存,但往外取只能放在Object 对象里**
103+
104+
因为下界规定元素的最小的粒度,实际上是容器的元素的类型控制。所以放比 Fruit 粒度小的如 Orange、Apple 都行, 但往外取时, 只有所有类的基类Object对象才能装下。但是这样的话,元素的类型信息就全部消失了。
105+
106+
# 写在最后
107+
## 使用场景
108+
在使用泛型的时候可以遵循一些基本的原则,从而避免一些常见的问题。
109+
+ 在代码中避免泛型类和原始类型的混用。比如List<String>和List不应该共同使用。这样会产生一些编译器警告和潜在的运行时异常。当需要利用JDK 5之前开发的遗留代码,而不得不这么做时,也尽可能的隔离相关的代码。
110+
+ 在使用带通配符的泛型类的时候,需要明确通配符所代表的一组类型的概念。由于具体的类型是未知的,很多操作是不允许的。
111+
+ 泛型类最好不要同数组一块使用。你只能创建new List<?>[10]这样的数组,无法创建new List<String>[10]这样的。这限制了数组的使用能力,而且会带来很多费解的问题。因此,当需要类似数组的功能时候,使用集合类即可。
112+
+ 不要忽视编译器给出的警告信息。
113+
114+
### PECS 原则
115+
如果要从集合中读取类型T的数据, 并且不能写入,可以使用 上界通配符(<?extends>)—Producer Extends。
116+
117+
如果要从集合中写入类型T 的数据, 并且不需要读取,可以使用下界通配符(<? super>)—Consumer Super。
118+
119+
如果既要存又要取, 那么就要使用任何通配符。
120+

0 commit comments

Comments
 (0)