主要参考自《实战Java高并发程序设计》。线程与进程进程是计算机系统进行资源分配和调度的基本单位,是线程的容器。线程是处理器任务调度和执行的基本单位。这里可以复习一下进程和线程的区别:根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程
主要参考自《实战Java高并发程序设计》。线程与进程进程是计算机系统进行资源分配和调度的基本单位,是线程的容器。线程是处理器任务调度和执行的基本单位。这里可以复习一下进程和线程的区别:根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程
题目来源面试题02.05.链表求和题目详情给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:输入:(7->1->6)+(5->9->2),即617+295输出:2->1->9,即912进阶:思考一下,假设这些数位是正向存放的,又该如何解决呢?示例:输入:(6->1->7)+(2->9->5),即617+295输出:9->1->2,即912题解分析题目的要求是对链表的节点进行求和。题目的难点在于两个链表的长度可能不同,而且每个节点只能存放一个数位的元素。这里最直接的解法就是模拟法,或者叫做遍历法,同
题目来源面试题02.05.链表求和题目详情给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:输入:(7->1->6)+(5->9->2),即617+295输出:2->1->9,即912进阶:思考一下,假设这些数位是正向存放的,又该如何解决呢?示例:输入:(6->1->7)+(2->9->5),即617+295输出:9->1->2,即912题解分析题目的要求是对链表的节点进行求和。题目的难点在于两个链表的长度可能不同,而且每个节点只能存放一个数位的元素。这里最直接的解法就是模拟法,或者叫做遍历法,同
1. 命令式编程1.1. 按照“程序是一系列改变状态的命令”来建模的一种编程风格1.2. 传统的for循环1.2.1. 确立初始状态1.2.2. 每次迭代都执行循环体中的一系列命令1.2.2.1. 将操作安排在循环内部去执行1.3. Java1.3.1. 消除了垃圾收集的麻烦2. 函数式编程2.1. 程序描述为表达式和变换,以数学方程的形式建立模型,并且尽量避免可变的状态2.2. 不会用很多抽象,但每个抽象的泛化程度都很高(特化的方面通过高阶函数注入)2.3. 以参数传递和函数的复合作为主要的表现手段2.4. 不需要掌握太多作为“不确定因素”存在的其他语言构造之间的交互规则2.5. 操作(fi
1. 命令式编程1.1. 按照“程序是一系列改变状态的命令”来建模的一种编程风格1.2. 传统的for循环1.2.1. 确立初始状态1.2.2. 每次迭代都执行循环体中的一系列命令1.2.2.1. 将操作安排在循环内部去执行1.3. Java1.3.1. 消除了垃圾收集的麻烦2. 函数式编程2.1. 程序描述为表达式和变换,以数学方程的形式建立模型,并且尽量避免可变的状态2.2. 不会用很多抽象,但每个抽象的泛化程度都很高(特化的方面通过高阶函数注入)2.3. 以参数传递和函数的复合作为主要的表现手段2.4. 不需要掌握太多作为“不确定因素”存在的其他语言构造之间的交互规则2.5. 操作(fi
咱们这个系列是讲解Kubernetes监控,Kubernetes自身也是要跑在机器上的,那机器的监控自然也是整个体系的一环。机器层面的监控分为两部分,带内网络和带外网络,通过带内网络做监控主要是在OS里部署agent的方式,获取OS的CPU、内存、磁盘、IO、网络、进程等相关监控指标。带外监控,主要是走带外管理卡,通过IPMI、SNMP协议,获取硬件健康状况。带内监控带内监控的agent有很多,大家可能会面临选型问题,这里我对常见agent做一个基本介绍。TelegrafTelegraf来自InfluxData,InfluxData就是做InfluxDB那家公司,Telegraf是MIT协议,
咱们这个系列是讲解Kubernetes监控,Kubernetes自身也是要跑在机器上的,那机器的监控自然也是整个体系的一环。机器层面的监控分为两部分,带内网络和带外网络,通过带内网络做监控主要是在OS里部署agent的方式,获取OS的CPU、内存、磁盘、IO、网络、进程等相关监控指标。带外监控,主要是走带外管理卡,通过IPMI、SNMP协议,获取硬件健康状况。带内监控带内监控的agent有很多,大家可能会面临选型问题,这里我对常见agent做一个基本介绍。TelegrafTelegraf来自InfluxData,InfluxData就是做InfluxDB那家公司,Telegraf是MIT协议,
LVGL本质上是一个GUI库,它包含大量的控件(widget),即按钮、标签、滑块、菜单栏这种具有一定人机交互特征的组合图形。LVGL在设计时,采用了一定面向对象编程的设计思路,有效降低了代码编写的难度。LVGL和大多数GUI库的工作方式都是类似的,其代码编写的基础思路为:创建GUI根窗体对象在窗体上绘制各种控件为控件编写响应函数函数在主事件循环中等待用户触发事件响应如果之前有GUI库的使用经验的话,应该可以比较容易明白LVGL代码的编写思路。标签标签(label)应该是GUI最简单也是最基础的控件之一。标签的作用就是显示一小段说明文字。接下来通过介绍标签来介绍LVGL控件的创建、布局与设置属
LVGL本质上是一个GUI库,它包含大量的控件(widget),即按钮、标签、滑块、菜单栏这种具有一定人机交互特征的组合图形。LVGL在设计时,采用了一定面向对象编程的设计思路,有效降低了代码编写的难度。LVGL和大多数GUI库的工作方式都是类似的,其代码编写的基础思路为:创建GUI根窗体对象在窗体上绘制各种控件为控件编写响应函数函数在主事件循环中等待用户触发事件响应如果之前有GUI库的使用经验的话,应该可以比较容易明白LVGL代码的编写思路。标签标签(label)应该是GUI最简单也是最基础的控件之一。标签的作用就是显示一小段说明文字。接下来通过介绍标签来介绍LVGL控件的创建、布局与设置属