Blog

flatten与ravel的区别

NumPy中用flatten与ravel都能把数组拆成一维数组,两种方法有何区别? #

flatten()返回的是真实数据,需要分配新的内存空间。 ravel()函数返回的只是数组的视图。

Viewpoint #

From #

学习动力不足

自己明明有远大的目标和理想,可每天学习的时候,总是动力不足,这是为什么呢? #

这是因为,远大理想的实现,是很久之后才能得到的奖赏,而人的大脑,只喜欢看眼前利益。这和我们大脑中存在的奖励系统有关,它更愿意选择立刻就能得到的好处,而非延迟满足。所以,让自己每天都能从学习上得到正面的反馈,拥有足够的收获感,不仅仅是为了终值体验,也是为了遵循我们的本性,以便更好地把努力学习这件事,坚持下去。

Viewpoint #

From #

总资产净利率(ROA, Return on Assets)

Content #

又称总资产利润率、总资产回报率、总资产报酬率,资产总额利润率,用以评价企业运用全部资产的总体获利能力。其计算公式为:

总资产净利率 = 净利润 / 平均总资产

其中:

平均总资产 = (期初总资产 + 期末总资产) / 2

另一个计算公式为:

总资产净利率 = 总资产周转率(效率) × 营业利润率(效益)

效率、效益和投资回报之间的关系一目了然。无论是效率还是效益发生改变,都将影响企业的投资回报。

总资产周转率(Total Assets Turnover)

林彪的一点两面

林彪琢磨的“一点两面”战术指的是什么? #

所谓一点,就是要选择敌人一个最薄弱点,将主要兵力集中使用于这一点上,对其他的方面只用少数兵力助攻。总之,不可平均使用兵力。

所谓两面,就是不应将突击队与钳制队统用在正面。通常应将突击队应用在敌人侧面去,钳制队用在敌人正面。如只从正面攻击,则敌无后顾之忧,必顽强抵抗。且击溃后他能跑脱,不易消灭。以上两条,排以上干部无论对大目标或对小目标的攻击,皆当采取。

Viewpoint #

From #

趋近成功法则

什么是趋近成功法则(law of the approach gradient)? #

越接近终点或目标时,注意力越集中,工作速度、工作效率远胜以往。

Viewpoint #

From #

压力下的适应能力有三种来源

Content #

在分析压力下的适应能力之前,先要谈谈三种不同的支持来源。请问分别是哪三种?

  1. 外来的助力,尤其是社会给予的支持。例如,罹患重病时,若有完善的社会保险和挚爱的家人在旁照顾,情况就会缓和许多。
  2. 个人的心理资源,包括智能、教育水准以及其他相关的人格因素。比方说,对于内向的人而言,搬家到另一个城市、结交新朋友构成的压力,比外向的人更大。
  3. 最后一种资源则是一个人对付压力的策略。

Viewpoint #

From #

心流

patch code技术

patch code技术 #

在 Java 语言中,类是按需加载的。也就是对于一个 class 文件,只有当 hotspot 第一次使用它的时候,它才会被加载进来。假如我们在即时编译 A 方法的时候要调用 B 方法,但这时 B 方法还没有被加载进来,该怎么办呢?

虚拟机会采用一种叫做 patch code 的技术,在运行时再进行加载。简单地说,就是在生成 call 指令时候,它的目标地址填成一个虚拟机内部的用于解析符号的方法。在 CPU 执行这条 call 语句的时候,就会调用符号解析函数。此时虚拟机就会加载 B 方法所在的类,然后就能确定 B 方法的地址了,这时再把 B 方法的地址写回到 call 指令里。这个过程如下图所示:

这个过程很像是在给原始的代码打补丁,所以人们就把这种方式称为 patch code 技术。这就像是在原来的代码安装了一个机关,当 CPU 执行到这个机关时,就会触发一次符号的重定位,然后这个机关就被替换掉了。下一次 CPU 再执行到这个 call 指令的时候,就可以正常地调用到 B 方法了。

Viewpoint #

From #

08 | 动态链接(下):延迟绑定与动态链接器是什么?

局部变量区与操作数栈字节码实例

局部变量区与操作数栈字节码实例 #

除 invokedynamic 外,其他的方法调用指令所消耗的操作数栈元素是根据调用类型以及目标方法描述符来确定的。在进行方法调用之前,程序需要依次压入调用者(invokestatic 不需要),以及各个参数。

public int neg(int i) {
  return -i;
}
public int foo(int i) {
  return neg(neg(i));
}
// foo方法对应的字节码如下:foo方法对应的字节码如下:
public int foo(int i);
  0  aload_0 [this]
  1  aload_0 [this]
  2  iload_1 [i]
  3  invokevirtual FooTest.neg(int) : int [25]
  6  invokevirtual FooTest.neg(int) : int [25]
  9  ireturn

以上面这段代码为例,当调用 foo(2) 时,每条指令执行前后局部变量数组空间以及操作数栈的分布如下所示:

数组相关指令,包括新建基本类型数组的 newarray,新建引用类型数组的 anewarray,生成多维数组的 multianewarray,以及求数组长度的 arraylength。另外,它还包括数组的加载指令以及存储指令。这些指令是区分类型的。例如, int 数组的加载指令为 iaload,存储指令为 iastore。

Viewpoint #

From #

19 | Java字节码(基础篇)