Java--面向对象编程
1 类和对象1.1 类的定义
是用来描述同一类事物的
可以在内部定义任意数量的、不同类型的变量,作为这一类事物的属性。这种属性叫做成员变量 ( member variable )。
如果一个Java文件中定义了一个public类,则文件名必须与该类的名称相同,包括大小写。
如果一个Java文件中定义了多个类,则只能有一个public类,该类的名称必须与文件名相同。
就好像文件路径+文件名不能重复一样,一个Java程序中相同名字的类只能有一个
12345678910111213// >> TODO 一个类以public class开头,public class代表这个类是公共类,类名必须和文件名相同。// >> TODO public class后面紧跟类名,然后是一对打括号的类体public class Merchandise { // >> TODO 类体中可以定义描述这个类的属性的变量。我们称之为成员变量(member variable) // >> TODO 每个成员变量的定义以;结束 String n ...
Java--并发编程&网络编程
1 Java中的线程1.1 创建和启动线程1.1.1 概述
Java语言的JVM允许程序运行多个线程,使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。
Thread类的特性
每个线程都是通过某个特定Thread对象的run()方法来完成操作的,因此把run()方法体称为线程执行体。
通过该Thread对象的start()方法来启动这个线程,而非直接调用run()
要想实现多线程,必须在主线程中创建新的线程对象。
1.1.2 方式1:继承Thread类Java通过继承Thread类来创建并启动多线程的步骤如下:
定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务
创建Thread子类的实例,即创建了线程对象
调用线程对象的start()方法来启动该线程
代码如下:
123456789101112131415161718package com.atguigu.thread;//自定义线程类public class MyThread extends Thread { ...
Java--反射机制
1. 反射(Reflection)的概念1.1 反射的出现背景Java程序中,所有的对象都有两种类型:编译时类型和运行时类型,而很多时候对象的编译时类型和运行时类型不一致。 Object obj = new String(“hello”); obj.getClass()
例如:某些变量或形参的声明类型是Object类型,但是程序却需要调用该对象运行时类型的方法,该方法不是Object中的方法,那么如何解决呢?
解决这个问题,有两种方案:
方案1:在编译和运行时都完全知道类型的具体信息,在这种情况下,我们可以直接先使用instanceof运算符进行判断,再利用强制类型转换符将其转换成运行时类型的变量即可。
方案2:编译时根本无法预知该对象和类的真实信息,程序只能依靠运行时信息来发现该对象和类的真实信息,这就必须使用反射。
1.2 反射概述Reflection(反射)是被视为动态语言的关键,反射机制允许程序在运行期间借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。
加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象 ...
微服务架构
1 什么是微服务架构
一种架构风格,将单体应用划分为一组小的服务,服务之间相互协作,实现业务功能
每个服务运行在独立的进程中,服务间采用轻量级的通信机制协作(通常是HTTP/JSON)
每个服务围绕业务能力进行构建,并且能够通过自动化机制独立地部署
很少有集中式的服务管理,每个服务可以使用不同的语言开发,使用不同的存储技术
基于有界上下文的,松散耦合的面向服务的架构
2 微服务架构适用性2.1 什么时候开始考虑引入微服务并不是所有组织和软件都适用微服务架构,应该以单块优先,当系统足够复杂时,再考虑逐步使用微服务架构,关于微服务架构与单体架构的在复杂性和生产力的对比如下:刚开始就选择微服务架构,反而会导致生产力低于选择单体架构,随着系统的复杂度增加,可以选择微服务架构。
2.2 微服务组织架构
从传统职能型到跨职能产品型
微服务架构更适用于跨职能产品型组织,每个产品团队服务完整的产品开发周期,各产品间通过API统一调用。产品团队内负责整个产品的架构、设计、开发、Review、测试、部署、运行、支持。
3 中台战略大中台,小前台:中台作为基础,前台可以快速创新和迭代。
4 微 ...
03 - 数据库技术
1 数据库体系结构1.1 三级模式
视图
视图时保存在数据库中的SELECT查询,其内容由查询定义,因此,视图不是真实存在的表,而是一个或者多个导出的虚拟表。
内模式:管理如何存储物理的数据,对应具体物理文件。概念模式:通常使用的基本表,根据应用、需求将物理数据划分成一张张表。外模式:对应数据库中的视图这个级别,将表进行一定处理后再提供给用户使用。
1.2 两级映像逻辑独立性:外模式和概念模式之间的映射。表和视图之间的映射,应用程序与数据库的逻辑结构独立,当数据的逻辑结构改变时,应用程序不变。物理独立性:概念模式和内模式之间的映射,是表和数据的物理存储之间的映射,应用程序与磁盘中的数据相互独立。当数据的物理存储改变时,应用程序不变。
2 数据库设计
2.1 需求分析分析数据的存储要求,产出物有数据流图、数据字典、需求说明书。获得用户对系统的三个要求:信息要求、处理要求、系统要求。
2.2 概念结构设计就是设计E-R图,也叫实体-联系图。
2.2.1 属性冲突局部ER图转换成全局ER图时,需要消除冲突,冲突类型有:
2.3 逻辑结构设计其任务是将概念模型转换成关系模型,ER图向关系 ...
13 - 系统架构设计
1 软件架构概述1.1 基本概念软件架构设计主要关注软件构件的结构、属性和交互作用,并通过多种视图全面描述特定系统的架构。
软件架构设计是指通过一系列的设计活动,获得满足系统功能性需求,符合一定非功能性需求与质量属性有相似含义的软件系统框架模型。在软件体系结构设计过程中,主要考虑系统的非功能性需求。软件体系结构设计经验的总结与重用是软件工程的重要目标之一,所采用的手段主要包括体系结构风格、DSSA(特定领域的架构)等技术。
解决好软件的复用、质量和维护问题,是研究软件架构的根本目的。
1.2 架构设计与生命周期1.2.1 需求分析阶段需求和软件架构设计面临的是不同的对象:一个是问题空间;另一个是解空间。保持两者的可追踪性和转换,是软件工程领域追求的目标。从软件需求模型向软件架构模型转换主要关注:
如何根据需求模型构建软件架构模型
如何保证模型转换的可追踪性
1.2.2 设计阶段是关注最早和最多的阶段,这一阶段主要研究:软件架构模型的描述、软件架构模型的设计与分析方法,以及对软件架构设计经验的总结与复用等。有关软件架构模型描述的研究分为三个层次:
SA的基本概念:SA模型由哪些元素 ...
Kubernetes集群包管理解决方案及应用商店 Helm&kubeapps
一、引入helm原因当今的软件开发,随着云原生技术的普及,我们的工程应用进行微服务化和容器化的现象也变得越来越普遍。而Kubernetes几乎已经成了云原生服务编排绕不开的标准和技术。
假设我们需要在K8s中简单部署一个nginx,必要步骤如下:
1、创建或者编写deployment模板
1# kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deployment.yaml
2、启动nginx的pod
1# kubectl apply -f deployment.yaml
3、检查pod服务
1# kubectl get pod
4、创建service
1# kubectl expose deployment nginx --port=8099 --target-port=80 --type=NodePort --dry-run=client -o yaml > service.yaml
5、启动service服务
1# kubectl apply -f servi ...
设计模式之设计原则
1. 什么是设计模式每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,就能一次又一次地使用该方案而不必做重复劳动。
1.1 设计思维两个思维:底层思维和抽象思维
底层思维
向下,如何把握机器底层从微观理解对象构造
语言构造
编译转换
内存模型
运行时机制
抽象思维
向上,如何将我们的周围世界抽象为程序代码
面向对象
组件封装
设计模式
架构模式
2. 面向对象设计2.1 实现层面
向下:深入理解三大面向对象机制
封装:隐藏内部实现
继承:复用现有代码
多态:改写对象行为
向上:深刻把握面向对象机制所带来的抽象意义,理解如何使用这些机制来表达现实世界,掌握什么是“好的面向对象设计”。
2.2 面向对象的设计
理解隔离变化
从宏观层面,面向对象的构建方式更能适应软件的变化,能将变化所带来的影响减为最小。
各司其职
从微观层面,面向对象的方式更强调各个类的“责任”由于需求变化导致的新增类型不应该影响原来类型的实现–是所谓各负其责。
对象是什么?
从语言层面来看,对象封装了代码和数据
从规格层面讲,对象是一系列可被使用的公 ...
基于漏桶算法进行限流
1 速率限制OpenResty 官方的 lua-resty-limit-traffic 的模块,里面有三种限速的策略。
1.1 resty.limit.req 模块基于 漏桶 算法实现的请求速率限制。
1.2 resty.limit.count 模块基于 固定窗口 实现请求的速率限制,如 单位时间内确保累计的请求数量不超过一个极限值。
1.3 resty.limit.conn 模块提供请求并发级别限制并根据额外延迟进行调整。
2 跨机器速率限制lua-resty-redis-ratelimit 通过把状态保存到 Redis,可实现多个Nginx示例状态共享,与 resty.limit.req 模块类似,也是基于漏桶算法对平均请求速率进行限制。
2.1 原理借助于 Redis Lua Script 机制 ,Redis 有一个支持写 Lua 脚本的功能,这个脚本能够让一些操作在 Redis 执行的时候保证原子性,依赖这个机制,把一次状态的变更用 Lua Script 就能够完全原子性地在 Redis 里面做完。同时,该模块支持在整个集群层⾯禁⽌某个非法⽤用户一段时间,可实现全局自动拉⿊功能 ...
虚拟化技术笔记
1 虚拟化技术基础原理
CPU运行特权RANG 0 :执行特权指令(内核)RANG 3:普通指令模式(用户进程)
Guest客户机(1)模拟CPU个数可以大于实际物理机的核数,但性能会有影响(2)VMware中的BT技术
1.1 CPU虚拟化(VT-X)(1)底层宿主机的cpu架构和Guest客户机模拟出来的CPU一样(模拟)(2)底层宿主机的cpu架构和Guest客户机模拟出来的CPU不一样(虚拟化)(VMware中的BT技术)
完全虚拟化:Guest感觉自己是直接运行在物理机上的硬件虚拟化(HVM):CPU拥有五个指令环,RANG -1(host主机运行特权指令) RANG 0-3硬件虚拟化直接使用硬件进行特权指令转换半虚拟化:Guest能意识到自己是运行在虚拟化上,需要修改Guest内核,内核调用主机上的hyper call半虚拟化在主机上运行了一个 层
推荐文章:https://www.cnblogs.com/bakari/p/7966671.html
1.2 内存虚拟化1、Guest访问物理内存需要进行两次转换(引入影子页表)
引入硬件虚拟化(MMU虚拟化)
2、MMU ...