TRIZ

  • 创始人:阿奇舒勒
  • 40种原理
  • 发明家式的解决任务理论

    用途

  • 解决技术问题
  • 预测未来难题

    如何解决一个问题?

  • 传统解决方案:
  1. 灵光乍现
  2. 试错
  • TRIZ:
    例如:组合原理
    1. 空间、时间上将各种功能整合
    2. 将相同或相反的功能整合
  • 技术矛盾
    “又要马儿跑,又要马儿不吃草。”————了解改善参数、恶化参数,通过统计学方法查表分析。
  • 技术进化趋势:
  1. 产品发展有固定规律吗?
    由功能简单,到功能复杂,再由结构复杂,到结构尽量简单。
  2. 产品生命周期不同阶段研发侧重点:
    功能实现->功能实现最大化->性能最大化->效率最大化->可靠性最大化->成本最小化
  3. 常见发展规律
    • 由静态变为动态
    • 由单体变为系统
    • 空间分割趋势
    • 物体分割趋势
    • 可控度增加(手动向自动发展)
    • 引入物质的趋势
    • 表面分割的趋势
    • 维度的上升
    • 表面曲面化趋势
    • 增加裁剪度

JVM

GC

栈帧(stack frame)和堆:

  • 一个线程一个栈
  • 堆是程序运行时动态分配的空间
    栈里的空间随着程序弹栈自动释放,JVM负责堆的空间管理。

同一个对象,释放了两次,则会产生NullPointerException(野指针),这是所有语言需要面对的问题。go语言和Java类似,使用GC自动维护内存空间。在不同线程中,都存在并发问题,同时访问一个内存空间。

语言的发展历史:

  • C/C++:手工管理内存(malloc free / new delete),容易产生内存泄漏,可以通过重启电脑解决,容易产生释放多次,产生非常难调试的bug,导致运行效率高,但是开发效率低。
  • python java go: 自带GC机制,方便内存管理。只需要分配内存,垃圾回收器负责回收。但是Java没有解决空指针的问题。执行效率相对比较低。
  • rust:严格的内存安全,兼顾运行效率。

Garbage如何确定?

  • 引用指向法(reference count):python使用,在每个引用下计数,当计数为0时标记为垃圾。存在问题,当循环引用时,出现一堆垃圾。
  • 根可达算法(root searching):从根开始遍历,如果没有遍历到,则为垃圾。根包括一些栈,静态池等。

GC算法

  • Mark-Sweep 标记清除
    容易导致内存碎片化
  • Copying 拷贝
    边找边复制,但是浪费内存
  • Mark-Compact 标记压缩
    在回收的过程中整理,但是效率低

三种算法的综合运用,诞生了各种各样的垃圾回收器。

GC的演化过程(随着内存大小的不断增大而演进)

  • 分带算法:分为新生带和老年代
    新生带使用拷贝算法,会回收90%的对象。
    eden(8)—-survivor(1)—-survivor(1)—-tenured(30)

  • 内存几兆-几十兆时,使用Serial,单线程时间停止复制回收。

  • 内存几十兆-上百兆1G时,parallel并行多线程
  • 内存几十G时,线程过多,线程上下文切换需要巨大的资源,concurrent GC,此时业务线程和GC线程并发。

通常情况,Java 1.8版本使用ps+po。ParNew 工作在年轻带的多线程。

CMS concurrent mark sweep:
初始标记(stw标记root)->并发标记->重新标记(stw三色标记算法)->并发清理

自主研修学习心得

自主研修课一:创新创业类教育

  1. 学习内容:
    Triz理论的发展历史、Triz理论的用途,产品的创新过程,人类社会发展中,科学技术进步的规律,如以下常见的产品技术发展规律:
    • 由静态变为动态
    • 由单体变为系统
    • 空间分割趋势
    • 物体分割趋势
    • 可控度增加(手动向自动发展)
    • 引入物质的趋势
    • 表面分割的趋势
    • 维度的上升
    • 表面曲面化趋势
    • 增加裁剪度
  2. 学习收获:
    以前在思考创新点的时候,缺少系统的训练和方法,导致经常缺乏灵感。通过学习Triz理论,我学习到了如何利用这些方法和规律,进行思考和创新。

    自主研修课二:系统地学习一门软件或硬件开发

  3. 学习内容:
    android应用程序的开发,包括android studio软件的使用,android虚拟机和真机的编程调试,android系统的内存交互。Java语言语法,包括面向对象编程的各种技术,多线程技术,lambda表达式。学习了android底层DVM的工作机制和kotlin语言的编译运行原理,了解了Java语言中的JVM,JDK,JRE,深入学习了JVM中的内存管理机制GC中的CMS垃圾回收算法。
  4. 学习收获:
    对于android应用程序的开发,更加熟悉了,同时借助android开发的实践,学习了解了Java语言的语法知识,并且深入学习了Java虚拟机的原理,对于以后的移动应用开发打下了基础。

    自主研修课三:人工智能类

  5. 学习内容:
    吴恩达机器学习,基础机器学习算法,包括线性回归,最小梯度法,K-Means,支持向量机等算法。
    数据结构的相关算法,如Splay算法,二分答案、贪心搜索、模拟、压状dp、平衡树算法、查并集、欧拉线性筛、图论、拓扑排序、数论基础(费马小定理、逆元运算、欧拉线性筛)、快速幂等。
  6. 学习收获:
    通过学习和实践各种算法,打牢算法和数学基础,为将来学习和使用更高级的算法做铺垫。