docker笔记

docker image ls:展示已有image

docker run -it <imageName>:以交互形式在一个新的container里面运行一个image

docker container ls:显示已有container

docker build -t <tag>:讲一个dockerfile编译成一个image

docker ps:显示正在运行的container

docker exec:Run a command in a running container

docker stop:停止一个正在运行的container

docker start:启动一个container

docker rm:删除一个container

docker inspect:Return low-level information on Docker objects

Java基础笔记(一):Collection、Map

Java基础笔记(一):Collection、Map

先抛出问题:collection接口下面有哪些集合,hashmap的实现原理,要把1.7和1.8的区别(红黑树)讲出来,map有哪些实现类以及使用场景,hashmap, hashtable, linkedhashmap,weakHashMap, treemap, concurrentmap,linkedhashmap和treemap排序的区别,concurrenthashmap如何实现线程安全,这里也要把1.7和1.8实现差异说出来(分段加锁和cas技术),说到这里以后就会问你cas实现原理( CPU Lock前缀指令),它是如何保证其他cpu core的cache失效的,然后会问你volatile的实现原理,要结合java内存模型来讲,可见性是如何实现的(内存屏障),synchronized锁和reentrantlock的区别以及内部怎么实现的:常用的gc算法及优缺点,如何判断对象的存活性

JVM读书笔记之第十一章

晚期(运行期)优化

概述

当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(JIT)。

JVM读书笔记之第十章

早期编译器优化

概述

  • 前端编译器:把java文件编译成class文件
  • JIT编译器(just in time compiler):把字节码转变成机器码的过程
  • AOT编译器(ahead of time compiler):直接把java文件编译成本地机器码

JVM读书笔记之第八章

虚拟机字节码执行引擎

概述

执行引擎是Java虚拟机最核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎则是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。

JVM读书笔记之第七章

虚拟机类加载机制

概述

虚拟机的类加载机制:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型。

在Java语言中,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些开销,但会为java应用程序提供高度的灵活性。

JVM读书笔记之第二章

Java内存区域与内存溢出异常

运行时数据区域

  • 程序计数器:当前线程执行的字节码的行号指示器,线程私有,若线程正在执行的是java方法,则记录的是正在执行的虚拟机字节码指令的地址;若是Native本地方法,这个计数器值为空。该内存区域没有规定任何outOfMemoryError(OOM)的区域。
  • Java虚拟机栈:每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用直至执行完成的过程,对应一个栈帧在虚拟机栈中入栈到出栈的过程。线程私有。可能抛出StackOverflowError和OOM。
    • 局部变量表:存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用、returnAddress类型。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变。
  • 本地方法栈:与虚拟机栈相似,区别是本地方法栈为虚拟机使用的native方法服务。可能抛出StackOverflowError和OOM。
  • 堆:存放对象实例,几乎所有对象实例都在这里分配内存。所有线程共享。在虚拟机启动时创建。JAVA堆是垃圾收集器管理的主要区域。可能会抛出OOM。
  • 方法区:所有线程共享的区域。用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器(JIT)编译后的代码等数据。该区域的内存回收目标主要是针对常量池的回收和对类型的卸载。可能抛出OOM。
    • 运行时常量池:方法区的一部分。Class文件中除了有类的版本信息、字段、方法、接口等描述信息之外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分将在类加载后进入方法区的运行时常量池中存放。动态性,运行期间也可能将新的常量放入池内,如String的intern()方法。可能抛出OOM。
  • 直接内存:并不是运行时数据区的一部分,JDK1.4新加入了NIO类,引入了一种基于通道channel和缓冲区buffer的io方式,可以使用native函数库直接分配堆外内存,然后通过存储在java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。(Netty)。可能抛出OOM。

JVM读书笔记之第三章

垃圾收集器与内存分配策略

引用计数算法

给对象中添加一个引用计数器,每当一个地方引用它,计数器值加1;当引用失效时,计数器值减1;任何时候计数器值为0的对象就是不可能再被使用的。

python使用的引用计数算法来进行内存管理,但java虚拟机没有使用,主要原因是它很难解决对象之间相互循环引用的问题。

iOS APP 开发初识

  1. 创建项目
  2. 在 storyboard 中构建 UI ,Auto Layout 和 stack view 是重点
  3. IBoutlet 是代码到 UI ,IBAction 是 UI 到代码,比如你想控制一个 button 的按下的动作,那么你需要为 button 定义它的 IBAction ,然后在按钮按下后,可能会触发其他变化,比如你在文本框输入了文本,按下提交,将你输入的文本替换到页面的一个 Label 上,这个时候你就需要去修改 IBoutlet 的变量。
  4. viewDidLoad -> viewWillAppear -> viewDidAppear -> viewWillDisappear -> viewDidDisappear