了让Java语言具有良好的跨平台能力,Java独具匠心的提供了一种可以在所有平台上都能使用的一种中间代码——字节码(ByteCode)。
有了字节码,无论是哪种平台(如Windows、Linux等),只要安装了虚拟机,都可以直接运行字节码。
同样,有了字节码,也解除了Java虚拟机和Java语言之间的耦合。这话可能很多人不理解,Java虚拟机不就是运行Java语言的么?这种解耦指的是什么?
其实,目前Java虚拟机已经可以支持很多除Java语言以外的语言了,如Kotlin、Groovy、JRuby、Jython、Scala等。
之所以可以支持,就是因为这些语言也可以被编译成字节码。而虚拟机并不关心字节码是有哪种语言编译而来的。
经常使用IDE的开发者可能会发现,当我们在Intelij IDEA中,鼠标右键想要创建Java类的时候,IDE还会提示创建其他类型的文件,这就是IDE默认支持的一些可以运行在JVM上面的语言,没有提示的,可以通过插件来支持。
目前,可以直接在JVM上运行的语言有很多,今天介绍其中比较重要的九种。每种语言通过一段『HelloWorld』代码进行演示,看看不同语言的语法有何不同。
Kotlin是一种在Java虚拟机上运行的静态类型编程语言,它也可以被编译成为JavaScript源代码。Kotlin的设计初衷就是用来生产高性能要求的程序的,所以运行起来和Java也是不相上下。Kotlin可以从 JetBrains InteilliJ Idea IDE这个开发工具以插件形式使用。
Hello World In Kotlin
fun main(args: Array<String>) { println("Hello, world!") }
Apache的Groovy是Java平台上设计的面向对象编程语言。它的语法风格与Java很像,Java程序员能够很快的熟练使用 Groovy,实际上,Groovy编译器是可以接受完全纯粹的Java语法格式的。
使用Groovy的一个重要特点就是使用类型推断,即能够让编译器能够在程序员没有明确说明的时候推断出变量的类型。Groovy可以使用其他Java语言编写的库。Groovy的语法与Java非常相似,大多数Java代码也匹配Groovy的语法规则,尽管可能语义不同。
Hello World In Groovy
static void main(String[] args) { println('Hello, world!'); }
Scala是一门多范式的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。
Scala经常被我们描述为多模式的编程语言,因为它混合了来自很多编程语言的元素的特征。但无论如何它本质上还是一个纯粹的面向对象语言。它相比传统编 程语言最大的优势就是提供了很好并行编程基础框架措施了。Scala代码能很好的被优化成字节码,运行起来和原生Java一样快。
Hello World In Scala
object HelloWorld { def main(args: Array[String]) { System.out.println("Hello, world!"); } }
JRuby是用来桥接Java与Ruby的,它是使用比Groovy更加简短的语法来编写代码,能够让每行代码执行更多的任务。就和Ruby一样,JRuby不仅仅只提供了高级的语法格式。它同样提供了纯粹的面向对象的实现,闭包等等,而且JRuby跟Ruby自身相比多了很多基于Java类库 可以调用,虽然Ruby也有很多类库,但是在数量以及广泛性上是无法跟Java标准类库相比的。
Hello World In Jruby
"puts 'Hello, world!'"
Jython,是一个用Java语言写的Python解释器。Jython能够用Python语言来高效生成动态编译的Java字节码。
Hello World In Jython
print "Hello, world!"
Fantom是一种通用的面向对象编程语言,由Brian和Andy Frank创建,运行在Java Runtime Environment,JavaScript和.NET Common Language Runtime上。其主要设计目标是提供标准库API,以抽象出代码是否最终将在JRE或CLR上运行的问题。
Fantom是与Groovy以及JRuby差不多的一样面向对 象的编程语言,但是悲剧的是Fantom无法使用Java类库,而是使用它自己扩展的类库。
Hello World In Fantom
class Hello{ static Void main() { echo("Hello, world!") } }
Clojure是Lisp编程语言在Java平台上的现代、函数式及动态方言。 与其他Lisp一样,Clojure视代码为数据且拥有一套Lisp宏系统。
虽然Clojure也能被直接编译成Java字节码,但是无法使用动态语言特性以及直 接调用Java类库。与其他的JVM脚本语言不一样,Clojure并不算是面向对象的。
Hello World In Clojure
(defn -main [& args] (println "Hello, World!"))
Rhino是一个完全以Java编写的JavaScript引擎,目前由Mozilla基金会所管理。
Rhino的特点是为JavaScript加了个壳,然后嵌入到Java中,这样能够让Java程序员直接使用。其中Rhino的JavaAdapters能够让JavaScript通过调用Java的类来实现特定的功能。
Hello World In Rhino
print('Hello, world!')
Ceylon是一种面向对象,强烈静态类型的编程语言,强调不变性,由Red Hat创建。 Ceylon程序在Java虚拟机上运行,可以编译为JavaScript。 语言设计侧重于源代码可读性,可预测性,可扩展性,模块性和元编程性。
Hello World In Ceylon
近全汉推出了一款功率更大的10000mAh PD移动电源,输入40W输出30W相比之前的款式提升巨大,此前已经对这款产品进行了详细的评测,性能是毋庸置疑的。那废话就不多说,今天就为大家带来这款对性能、外观做了最好均衡的移动电源的拆解。
一、全汉Q1012PD移动电源外观
这款产品使用塑料壳体+铝背盖组成,在塑料壳体表面带有斜纹状网格纹路,兼顾散热与手感。
侧面设置了4颗白色电量指示灯与一颗绿色快充指示灯,当移动电源正处于快充模式(输入输出皆可)会亮起快充指示灯,旁边是电量检查/开机激活按钮。
另一侧是MicroUSB输入接口,多了一个输入接口使用起来更加通用方便。
正面输出接口部分,从左到右分别是5V常规输出口、USB-C双向接口、USB-A快充输出口。
反过来可以看到铝材质金属背盖,PCB高热器件热量通过导热胶传递到壳体上带来良好的导热散热。
背盖铭牌信息如下,型号:Q1012PD、输入:USB-C 5-20V MAX40W、MicroUSB 5-12V MAX18W。输出:USB-A 5V/2.4A;USB-C 5-20V MAX30W;USB-A 5V/2.4A、9V/2A、12V/1.5A MAX18W。电池容量:10000mAh;额定能量:30.0Wh、制造商:深圳市鑫全汉科技有限公司。这款移动电源目前已经通过了FCC、CE、RoHS等认证。
使用POWER-Z KM001对USB-A快充口进行协议轮询,从屏幕可以看到支持BC1.2、DCP、Apple2.4、QC2.0、AFC、FCP、QC3.0等协议。
使用ChargerLAB POWER-Z KM001C查看USB-C PDO报文,全汉Q1012PD返回5个PDO,分别是5V2A、9V3A、12V2.5A、15V2.0A、20V1.5A,可以满足市面上大部分设备功率需求。
在电脑上使用ChargerLAB POWER-Z软件探测PDO信息,与USB表报文结果一致。
ChargerLAB POWER-Z进行30W带载测试,纹波峰峰值0.0512V。
二、全汉Q1012PD移动电源拆解
全汉Q1012PD使用内外卡子合盖,装配较为牢固,一体性较高,铝背盖上粘附了一大块导热硅胶用来把PCB上的高热传递到壳体上降温。
LED窗带有导光模块与遮光海绵。
全汉Q1012PD使用了两片电芯串联成电池组,是市面上唯一一款10000mAh小体积的大功率PD移动电源,测温探头直接埋在两片电芯中间,电池保护板与电芯PACK处理。
过孔焊接的MicroUSB母座。
USB-A母座细节。
电源激活按键以及4颗白色LED灯、一颗绿色LED灯。
USB-C母座细节。
PCB板插脚件俯视图。
丝印NY7WC,SY8105 同步降压转换器。
SOUTHCHIP南芯SC8812A,支持 I2C 接口,是一颗高效率的同步双向升降压芯片。
SOUTHCHIP南芯SC8812A可完成充电、放电控制;支持各种电力转换;采用I2C接口,简化的外部器件;内部集成快速充电协议等。
来自CHIPSEA芯海科技的CSU38M20。这是一颗高性能的8位单片机MCU,内置8K×16位程序存储器MTP、1K字节数据存储器(SRAM)、256字节的E2PROM、只有43条单字指令、8级PUSH和POP存储堆栈。
CHIPSEA芯海科技CSU38M20详细规格介绍。
CHIPSEA芯海科技的USB Type-C控制器CSS34P16 ,符合最新 USB Type-C型和 PD标准,同时内部还集成其他多种快充协议标准。可为适配器、车载充电器、移动电源等应用提供完整的USB Type-C和 USB供电端口控制解决方案。芯片可根据用户需求灵活配置,操作简便, 可快速实现方案功能。
CHIPSEA芯海科技CSS34P16详细规格介绍。
USB-C口输出VBUS开关,丝印42P03 7601。
4R7贴片电感。
来自CHONG-X的电解电容,规格25V 220μF。
电感线圈,布满胶水,便于散热。
两颗丝印DS3805的双MOS管为输出切换。
四颗30N60 MOS管,用于同步升降压。
丝印3002F为USB-A普通输出接口识别芯片。
丝印FT0XFK为USB-A快充输出接口识别芯片。
充电头网拆解总结
目前支持USB PD快充的10000mAh移动电源很常见,但是支持30W USB PD快充输出以及40W USB PD快充输入的却并不多见。而经过拆解我们也可以发现,全汉这款移动电源之所以支持大功率USB PD双向快充,是因为内部使用了扎实的元器件,其中最主要的是采用了南芯的高效率的同步双向升降压芯片SC8812A;USB PD协议则是由芯海的CSS34P16来控制。除了高效率的电器元件之外,产品的金属外壳设计也是散热性能的保障。
相关阅读:
最强PD充电宝:全汉20000mAh移动电源,支持QC3.0和65W双向USB PD
下一个爆款:全汉推出30W USB PD移动电源,可给New MacBook充电
在 jupyter notebook 中输出 pandas 数据,会输出一个简洁大方的表格:
不过,看久了也会觉得无趣。
今天我们就尝试让表格动起来:
首先要知道一个重点,在 jupyter notebook 环境上的输出,全是 html。因此我们只需要适当加上 css 就能让其可以交互起来。
而 pandas 本身就提供了一些方法让我们轻松添加样式:
看起来挺复杂的,里面的每个属性是怎么来的?
这些全是 css 属性,但是我们不可能全把他们记住
这里教大家一个小技巧:
肯定有人吐槽,这有啥用呀!?
如果我告诉你,这可以让表格与 matplotlib 等图表联动呢?
我正在研究这种实现,并且已经有了一定的进展。下次再分享
你学会了没有?
记得点赞,转发!谢谢支持!
推荐阅读:
*请认真填写需求信息,我们会在24小时内与您取得联系。